@fluentcommerce/fc-connect-sdk 0.1.54 → 0.1.56
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/README.md +11 -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,569 +1,569 @@
|
|
|
1
|
-
# Schema Validation & Mapping Generation (CLI Tools)
|
|
2
|
-
|
|
3
|
-
[← Back to GraphQL Mutation Mapping Guide](../graphql-mutation-mapping-readme.md)
|
|
4
|
-
|
|
5
|
-
**Module 3 of 13** | **Level**: Beginner | **Time**: 15 minutes
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Overview
|
|
10
|
-
|
|
11
|
-
**IMPORTANT:** The GraphQL Mutation Mapper does **NOT** perform automatic schema validation at runtime. Schema validation is a **manual, pre-deployment step** using CLI tools.
|
|
12
|
-
|
|
13
|
-
This module explains:
|
|
14
|
-
1. How to **generate mapping configurations** from GraphQL mutations (starter templates)
|
|
15
|
-
2. How to **validate** mappings before deployment
|
|
16
|
-
3. How to **analyze coverage** to ensure all fields are mapped
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## CLI Tools Overview
|
|
21
|
-
|
|
22
|
-
| Tool | Purpose | When to Use |
|
|
23
|
-
|------|---------|-------------|
|
|
24
|
-
| `introspect-schema` | Download GraphQL schema | First step - get schema file |
|
|
25
|
-
| `generate-mutation-mapping` | **Generate mapping config** from mutation | **Start here** - creates template |
|
|
26
|
-
| `validate-schema` | Validate mapping against schema | Before deployment - catch errors |
|
|
27
|
-
| `analyze-coverage` | Check field coverage | Ensure all important fields mapped |
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## Step 1: Generate Mapping Configuration (Starter)
|
|
32
|
-
|
|
33
|
-
### Create Your First Mapping Automatically
|
|
34
|
-
|
|
35
|
-
Instead of writing mapping configs from scratch, **generate them** from your GraphQL mutation:
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
# 1. Save your GraphQL mutation to a file
|
|
39
|
-
cat > createOrder.graphql <<'EOF'
|
|
40
|
-
mutation CreateOrder($input: CreateOrderInput!) {
|
|
41
|
-
createOrder(input: $input) {
|
|
42
|
-
id
|
|
43
|
-
ref
|
|
44
|
-
status
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
EOF
|
|
48
|
-
|
|
49
|
-
# 2. Generate mapping configuration
|
|
50
|
-
npx fc-connect generate-mutation-mapping \
|
|
51
|
-
--file createOrder.graphql \
|
|
52
|
-
--output mappings/order-mapping.json \
|
|
53
|
-
--source-format xml
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
**Generated Output (`mappings/order-mapping.json`):**
|
|
57
|
-
```json
|
|
58
|
-
{
|
|
59
|
-
"version": "1.0",
|
|
60
|
-
"mutation": "createOrder",
|
|
61
|
-
"operationName": "CreateOrder",
|
|
62
|
-
"sourceFormat": "xml",
|
|
63
|
-
"schemaValidation": true,
|
|
64
|
-
"arguments": {
|
|
65
|
-
"input": {
|
|
66
|
-
"_type": "CreateOrderInput!",
|
|
67
|
-
"_comment": "Generated from GraphQL mutation - customize paths below",
|
|
68
|
-
|
|
69
|
-
"ref": {
|
|
70
|
-
"source": "CHANGE_ME",
|
|
71
|
-
"required": true,
|
|
72
|
-
"_comment": "String! - Order reference number"
|
|
73
|
-
},
|
|
74
|
-
|
|
75
|
-
"type": {
|
|
76
|
-
"source": "CHANGE_ME",
|
|
77
|
-
"required": true,
|
|
78
|
-
"_comment": "String! - Order type (STANDARD, etc)"
|
|
79
|
-
},
|
|
80
|
-
|
|
81
|
-
"retailer": {
|
|
82
|
-
"fields": {
|
|
83
|
-
"id": {
|
|
84
|
-
"value": "${FLUENT_RETAILER_ID}",
|
|
85
|
-
"_comment": "Use environment variable"
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
|
|
90
|
-
"customer": {
|
|
91
|
-
"fields": {
|
|
92
|
-
"ref": {
|
|
93
|
-
"source": "CHANGE_ME",
|
|
94
|
-
"required": true
|
|
95
|
-
},
|
|
96
|
-
"email": {
|
|
97
|
-
"source": "CHANGE_ME",
|
|
98
|
-
"required": false
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
|
|
103
|
-
"totalPrice": {
|
|
104
|
-
"source": "CHANGE_ME",
|
|
105
|
-
"resolver": "sdk.parseFloat",
|
|
106
|
-
"required": true,
|
|
107
|
-
"_comment": "Float! - Total order amount"
|
|
108
|
-
},
|
|
109
|
-
|
|
110
|
-
"items": {
|
|
111
|
-
"_array": true,
|
|
112
|
-
"_type": "[OrderItemInput]!",
|
|
113
|
-
"source": "CHANGE_ME",
|
|
114
|
-
"_comment": "Array of order line items",
|
|
115
|
-
|
|
116
|
-
"ref": {
|
|
117
|
-
"source": "CHANGE_ME",
|
|
118
|
-
"required": true
|
|
119
|
-
},
|
|
120
|
-
"quantity": {
|
|
121
|
-
"source": "CHANGE_ME",
|
|
122
|
-
"resolver": "sdk.parseInt",
|
|
123
|
-
"required": true
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
},
|
|
128
|
-
"returnFields": ["id", "ref", "status"]
|
|
129
|
-
}
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
**Now customize the `CHANGE_ME` paths** to match your XML/JSON source:
|
|
133
|
-
|
|
134
|
-
```json
|
|
135
|
-
{
|
|
136
|
-
"arguments": {
|
|
137
|
-
"input": {
|
|
138
|
-
"ref": {
|
|
139
|
-
"source": "order@order-no", // XML: order element, order-no attribute
|
|
140
|
-
"required": true
|
|
141
|
-
},
|
|
142
|
-
"customer": {
|
|
143
|
-
"fields": {
|
|
144
|
-
"ref": {
|
|
145
|
-
"source": "customer.customer-no", // XML: nested customer/customer-no
|
|
146
|
-
"required": true
|
|
147
|
-
},
|
|
148
|
-
"email": {
|
|
149
|
-
"source": "customer.customer-email"
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
},
|
|
153
|
-
"totalPrice": {
|
|
154
|
-
"source": "totals.order-total.gross-price", // XML: nested path
|
|
155
|
-
"resolver": "sdk.parseFloat",
|
|
156
|
-
"required": true
|
|
157
|
-
},
|
|
158
|
-
"items": {
|
|
159
|
-
"_array": true,
|
|
160
|
-
"source": "product-lineitems.product-lineitem", // XML array path
|
|
161
|
-
|
|
162
|
-
"ref": {
|
|
163
|
-
"source": "product-id" // Relative to each lineitem
|
|
164
|
-
},
|
|
165
|
-
"quantity": {
|
|
166
|
-
"source": "quantity",
|
|
167
|
-
"resolver": "sdk.parseInt"
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
---
|
|
176
|
-
|
|
177
|
-
## Step 2: Introspect GraphQL Schema
|
|
178
|
-
|
|
179
|
-
Before validation, download your GraphQL schema:
|
|
180
|
-
|
|
181
|
-
```bash
|
|
182
|
-
# Basic introspection
|
|
183
|
-
npx fc-connect introspect-schema \
|
|
184
|
-
--url https://YOUR_ACCOUNT.api.fluentcommerce.com/graphql \
|
|
185
|
-
--output fluent-schema.json
|
|
186
|
-
|
|
187
|
-
# With authentication
|
|
188
|
-
npx fc-connect introspect-schema \
|
|
189
|
-
--url https://YOUR_ACCOUNT.api.fluentcommerce.com/graphql \
|
|
190
|
-
--header "Authorization: Bearer YOUR_TOKEN" \
|
|
191
|
-
--output fluent-schema.json
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
**What you get (`fluent-schema.json`):**
|
|
195
|
-
```json
|
|
196
|
-
{
|
|
197
|
-
"data": {
|
|
198
|
-
"__schema": {
|
|
199
|
-
"mutationType": { "name": "Mutation" },
|
|
200
|
-
"types": [
|
|
201
|
-
{
|
|
202
|
-
"kind": "INPUT_OBJECT",
|
|
203
|
-
"name": "CreateOrderInput",
|
|
204
|
-
"inputFields": [
|
|
205
|
-
{
|
|
206
|
-
"name": "ref",
|
|
207
|
-
"type": {
|
|
208
|
-
"kind": "NON_NULL",
|
|
209
|
-
"ofType": { "kind": "SCALAR", "name": "String" }
|
|
210
|
-
}
|
|
211
|
-
},
|
|
212
|
-
{
|
|
213
|
-
"name": "type",
|
|
214
|
-
"type": {
|
|
215
|
-
"kind": "NON_NULL",
|
|
216
|
-
"ofType": { "kind": "SCALAR", "name": "String" }
|
|
217
|
-
}
|
|
218
|
-
},
|
|
219
|
-
{
|
|
220
|
-
"name": "totalPrice",
|
|
221
|
-
"type": {
|
|
222
|
-
"kind": "NON_NULL",
|
|
223
|
-
"ofType": { "kind": "SCALAR", "name": "Float" }
|
|
224
|
-
}
|
|
225
|
-
},
|
|
226
|
-
{
|
|
227
|
-
"name": "items",
|
|
228
|
-
"type": {
|
|
229
|
-
"kind": "NON_NULL",
|
|
230
|
-
"ofType": {
|
|
231
|
-
"kind": "LIST",
|
|
232
|
-
"ofType": {
|
|
233
|
-
"kind": "INPUT_OBJECT",
|
|
234
|
-
"name": "OrderItemInput"
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
]
|
|
240
|
-
}
|
|
241
|
-
]
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
---
|
|
248
|
-
|
|
249
|
-
## Step 3: Validate Mapping Against Schema
|
|
250
|
-
|
|
251
|
-
```bash
|
|
252
|
-
npx fc-connect validate-schema \
|
|
253
|
-
--mapping mappings/order-mapping.json \
|
|
254
|
-
--schema fluent-schema.json
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
**✅ Successful Validation:**
|
|
258
|
-
```
|
|
259
|
-
✓ Mapping validation successful
|
|
260
|
-
✓ All field names exist in schema
|
|
261
|
-
✓ All required fields are mapped
|
|
262
|
-
✓ No type mismatches detected
|
|
263
|
-
✓ Array configurations are correct
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
**❌ Failed Validation:**
|
|
267
|
-
```
|
|
268
|
-
✗ Validation errors found:
|
|
269
|
-
|
|
270
|
-
1. Field 'orderNumber' not found in CreateOrderInput
|
|
271
|
-
→ Did you mean 'ref'?
|
|
272
|
-
→ Available fields: ref, type, retailer, customer, totalPrice, items
|
|
273
|
-
|
|
274
|
-
2. Required field 'type' is not marked as required in mapping
|
|
275
|
-
→ Add "required": true to field configuration
|
|
276
|
-
|
|
277
|
-
3. Field 'totalPrice' expects Float but source provides String
|
|
278
|
-
→ Add "resolver": "sdk.parseFloat" to convert type
|
|
279
|
-
|
|
280
|
-
4. Array field 'items' missing _array marker
|
|
281
|
-
→ Add "_array": true to field configuration
|
|
282
|
-
```
|
|
283
|
-
|
|
284
|
-
---
|
|
285
|
-
|
|
286
|
-
## Step 4: Analyze Field Coverage
|
|
287
|
-
|
|
288
|
-
Check if you're missing important fields:
|
|
289
|
-
|
|
290
|
-
```bash
|
|
291
|
-
npx fc-connect analyze-coverage \
|
|
292
|
-
--mapping mappings/order-mapping.json \
|
|
293
|
-
--schema fluent-schema.json
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
**Output:**
|
|
297
|
-
```
|
|
298
|
-
Field Coverage Analysis
|
|
299
|
-
=======================
|
|
300
|
-
Mutation: createOrder
|
|
301
|
-
Input Type: CreateOrderInput
|
|
302
|
-
|
|
303
|
-
Total available fields: 25
|
|
304
|
-
Mapped fields: 8
|
|
305
|
-
Coverage: 32%
|
|
306
|
-
|
|
307
|
-
✓ MAPPED FIELDS (8):
|
|
308
|
-
✓ ref (String!) - REQUIRED
|
|
309
|
-
✓ type (String!) - REQUIRED
|
|
310
|
-
✓ retailer (RetailerLink!)
|
|
311
|
-
✓ customer (CustomerLink)
|
|
312
|
-
✓ totalPrice (Float!)
|
|
313
|
-
✓ currency (String!)
|
|
314
|
-
✓ items ([OrderItemInput]!)
|
|
315
|
-
✓ createdOn (DateTime)
|
|
316
|
-
|
|
317
|
-
⚠ UNMAPPED FIELDS - High Priority (5):
|
|
318
|
-
⚠ status (String) - Order status
|
|
319
|
-
⚠ paymentInfo (PaymentInput) - Payment details
|
|
320
|
-
⚠ shippingAddress (AddressInput) - Delivery address
|
|
321
|
-
⚠ billingAddress (AddressInput) - Billing address
|
|
322
|
-
⚠ attributes ([AttributeInput]) - Custom attributes
|
|
323
|
-
|
|
324
|
-
ℹ UNMAPPED FIELDS - Optional (12):
|
|
325
|
-
ℹ notes (String) - Order notes
|
|
326
|
-
ℹ tags ([String]) - Order tags
|
|
327
|
-
ℹ metadata (JSON) - Custom metadata
|
|
328
|
-
... (9 more)
|
|
329
|
-
|
|
330
|
-
Recommendation: Consider mapping high-priority fields
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
---
|
|
334
|
-
|
|
335
|
-
## Common Validation Errors & Fixes
|
|
336
|
-
|
|
337
|
-
### Error 1: Field Name Mismatch
|
|
338
|
-
|
|
339
|
-
**Validation Error:**
|
|
340
|
-
```
|
|
341
|
-
Field 'orderNumber' not found in CreateOrderInput
|
|
342
|
-
→ Did you mean 'ref'?
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
**Problem in Mapping:**
|
|
346
|
-
```json
|
|
347
|
-
{
|
|
348
|
-
"orderNumber": { "source": "order@order-no" } // ❌ Wrong field name
|
|
349
|
-
}
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
**Fix:**
|
|
353
|
-
```json
|
|
354
|
-
{
|
|
355
|
-
"ref": { "source": "order@order-no" } // ✅ Correct field name
|
|
356
|
-
}
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
---
|
|
360
|
-
|
|
361
|
-
### Error 2: Missing Required Field
|
|
362
|
-
|
|
363
|
-
**Validation Error:**
|
|
364
|
-
```
|
|
365
|
-
Required field 'type' is not mapped
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
**Problem:**
|
|
369
|
-
```json
|
|
370
|
-
{
|
|
371
|
-
"ref": { "source": "order@order-no" }
|
|
372
|
-
// Missing 'type' field - REQUIRED in schema
|
|
373
|
-
}
|
|
374
|
-
```
|
|
375
|
-
|
|
376
|
-
**Fix:**
|
|
377
|
-
```json
|
|
378
|
-
{
|
|
379
|
-
"ref": { "source": "order@order-no", "required": true },
|
|
380
|
-
"type": { "value": "STANDARD", "required": true } // ✅ Added
|
|
381
|
-
}
|
|
382
|
-
```
|
|
383
|
-
|
|
384
|
-
---
|
|
385
|
-
|
|
386
|
-
### Error 3: Type Mismatch
|
|
387
|
-
|
|
388
|
-
**Validation Error:**
|
|
389
|
-
```
|
|
390
|
-
Field 'totalPrice' expects Float but mapping may provide String
|
|
391
|
-
→ Add resolver to convert type
|
|
392
|
-
```
|
|
393
|
-
|
|
394
|
-
**Problem:**
|
|
395
|
-
```json
|
|
396
|
-
{
|
|
397
|
-
"totalPrice": { "source": "order.total" } // Returns String "123.45"
|
|
398
|
-
}
|
|
399
|
-
```
|
|
400
|
-
|
|
401
|
-
**Fix:**
|
|
402
|
-
```json
|
|
403
|
-
{
|
|
404
|
-
"totalPrice": {
|
|
405
|
-
"source": "order.total",
|
|
406
|
-
"resolver": "sdk.parseFloat" // ✅ Convert String → Float
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
```
|
|
410
|
-
|
|
411
|
-
---
|
|
412
|
-
|
|
413
|
-
### Error 4: Missing Array Marker
|
|
414
|
-
|
|
415
|
-
**Validation Error:**
|
|
416
|
-
```
|
|
417
|
-
Field 'items' is an array but missing _array marker
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
**Problem:**
|
|
421
|
-
```json
|
|
422
|
-
{
|
|
423
|
-
"items": {
|
|
424
|
-
"source": "lineItems",
|
|
425
|
-
"ref": { "source": "productId" }
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
```
|
|
429
|
-
|
|
430
|
-
**Fix:**
|
|
431
|
-
```json
|
|
432
|
-
{
|
|
433
|
-
"items": {
|
|
434
|
-
"_array": true, // ✅ Added
|
|
435
|
-
"source": "lineItems",
|
|
436
|
-
"ref": { "source": "productId" },
|
|
437
|
-
"quantity": { "source": "qty", "resolver": "sdk.parseInt" }
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
```
|
|
441
|
-
|
|
442
|
-
---
|
|
443
|
-
|
|
444
|
-
## Complete Example Workflow
|
|
445
|
-
|
|
446
|
-
```bash
|
|
447
|
-
# 1. Create GraphQL mutation file
|
|
448
|
-
cat > createOrder.graphql <<'EOF'
|
|
449
|
-
mutation CreateOrder($input: CreateOrderInput!) {
|
|
450
|
-
createOrder(input: $input) {
|
|
451
|
-
id
|
|
452
|
-
ref
|
|
453
|
-
status
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
EOF
|
|
457
|
-
|
|
458
|
-
# 2. Generate starter mapping configuration
|
|
459
|
-
npx fc-connect generate-mutation-mapping \
|
|
460
|
-
--file createOrder.graphql \
|
|
461
|
-
--output mappings/order-mapping.json \
|
|
462
|
-
--source-format xml
|
|
463
|
-
|
|
464
|
-
# 3. Customize the generated mapping
|
|
465
|
-
# Edit mappings/order-mapping.json - replace CHANGE_ME with actual XML paths
|
|
466
|
-
|
|
467
|
-
# 4. Introspect GraphQL schema
|
|
468
|
-
npx fc-connect introspect-schema \
|
|
469
|
-
--url https://my-account.api.fluentcommerce.com/graphql \
|
|
470
|
-
--output fluent-schema.json
|
|
471
|
-
|
|
472
|
-
# 5. Validate mapping
|
|
473
|
-
npx fc-connect validate-schema \
|
|
474
|
-
--mapping mappings/order-mapping.json \
|
|
475
|
-
--schema fluent-schema.json
|
|
476
|
-
|
|
477
|
-
# 6. Check coverage
|
|
478
|
-
npx fc-connect analyze-coverage \
|
|
479
|
-
--mapping mappings/order-mapping.json \
|
|
480
|
-
--schema fluent-schema.json
|
|
481
|
-
|
|
482
|
-
# 7. Fix any errors, then repeat steps 5-6 until validation passes
|
|
483
|
-
```
|
|
484
|
-
|
|
485
|
-
---
|
|
486
|
-
|
|
487
|
-
## Pre-Deployment Checklist
|
|
488
|
-
|
|
489
|
-
Before deploying your mapping to production:
|
|
490
|
-
|
|
491
|
-
- [ ] ✅ Mapping generated from GraphQL mutation (`generate-mutation-mapping`)
|
|
492
|
-
- [ ] ✅ Schema introspected and saved (`introspect-schema`)
|
|
493
|
-
- [ ] ✅ Mapping validated against schema (`validate-schema`)
|
|
494
|
-
- [ ] ✅ Field coverage analyzed (`analyze-coverage`)
|
|
495
|
-
- [ ] ✅ All validation errors fixed
|
|
496
|
-
- [ ] ✅ High-priority unmapped fields reviewed
|
|
497
|
-
- [ ] ✅ Test with sample XML/JSON data
|
|
498
|
-
- [ ] ✅ Verify mutation execution in GraphQL playground
|
|
499
|
-
- [ ] ✅ Run integration tests in staging environment
|
|
500
|
-
|
|
501
|
-
---
|
|
502
|
-
|
|
503
|
-
## CI/CD Integration
|
|
504
|
-
|
|
505
|
-
Add to your CI pipeline:
|
|
506
|
-
|
|
507
|
-
```yaml
|
|
508
|
-
# .github/workflows/validate-mappings.yml
|
|
509
|
-
name: Validate GraphQL Mappings
|
|
510
|
-
|
|
511
|
-
on: [push, pull_request]
|
|
512
|
-
|
|
513
|
-
jobs:
|
|
514
|
-
validate:
|
|
515
|
-
runs-on: ubuntu-latest
|
|
516
|
-
steps:
|
|
517
|
-
- uses: actions/checkout@v2
|
|
518
|
-
|
|
519
|
-
- name: Install SDK
|
|
520
|
-
run: npm install -g @fluentcommerce/fc-connect-sdk
|
|
521
|
-
|
|
522
|
-
- name: Introspect Schema
|
|
523
|
-
run: |
|
|
524
|
-
fc-connect introspect-schema \
|
|
525
|
-
--url ${{ secrets.FLUENT_GRAPHQL_URL }} \
|
|
526
|
-
--header "Authorization: Bearer ${{ secrets.FLUENT_TOKEN }}" \
|
|
527
|
-
--output fluent-schema.json
|
|
528
|
-
|
|
529
|
-
- name: Validate All Mappings
|
|
530
|
-
run: |
|
|
531
|
-
for mapping in mappings/*.json; do
|
|
532
|
-
echo "Validating $mapping..."
|
|
533
|
-
fc-connect validate-schema \
|
|
534
|
-
--mapping "$mapping" \
|
|
535
|
-
--schema fluent-schema.json
|
|
536
|
-
done
|
|
537
|
-
|
|
538
|
-
- name: Check Coverage (Fail if < 80%)
|
|
539
|
-
run: |
|
|
540
|
-
for mapping in mappings/*.json; do
|
|
541
|
-
fc-connect analyze-coverage \
|
|
542
|
-
--mapping "$mapping" \
|
|
543
|
-
--schema fluent-schema.json \
|
|
544
|
-
--min-coverage 80
|
|
545
|
-
done
|
|
546
|
-
```
|
|
547
|
-
|
|
548
|
-
---
|
|
549
|
-
|
|
550
|
-
## Key Takeaways
|
|
551
|
-
|
|
552
|
-
✅ **Start with generation** - Use `generate-mutation-mapping` for templates
|
|
553
|
-
✅ **Schema validation is MANUAL** - Not automatic at runtime
|
|
554
|
-
✅ **Use CLI tools before deployment** - Catch errors early
|
|
555
|
-
✅ **Coverage analysis is critical** - Ensure important fields are mapped
|
|
556
|
-
✅ **Integrate with CI/CD** - Validate on every commit
|
|
557
|
-
✅ **Keep schema up-to-date** - Re-introspect when GraphQL schema changes
|
|
558
|
-
|
|
559
|
-
---
|
|
560
|
-
|
|
561
|
-
## Navigation
|
|
562
|
-
|
|
563
|
-
[← Previous: Quick Start](../../../auto-pagination/modules/auto-pagination-02-quick-start.md) | [Back to Guide](../graphql-mutation-mapping-readme.md) | [Next: Mapping Patterns →](./graphql-mutation-mapping-04-mapping-patterns.md)
|
|
564
|
-
|
|
565
|
-
## Related Documentation
|
|
566
|
-
|
|
567
|
-
- [CLI Tools Documentation](../../../../../bin/readme.md) - Complete CLI tools reference
|
|
568
|
-
- [Module 05: Configuration Reference](./graphql-mutation-mapping-05-configuration-reference.md) - Mapping configuration structure
|
|
569
|
-
- [Module 06: Path Syntax](./graphql-mutation-mapping-06-path-syntax.md) - XML/JSON path expressions
|
|
1
|
+
# Schema Validation & Mapping Generation (CLI Tools)
|
|
2
|
+
|
|
3
|
+
[← Back to GraphQL Mutation Mapping Guide](../graphql-mutation-mapping-readme.md)
|
|
4
|
+
|
|
5
|
+
**Module 3 of 13** | **Level**: Beginner | **Time**: 15 minutes
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
**IMPORTANT:** The GraphQL Mutation Mapper does **NOT** perform automatic schema validation at runtime. Schema validation is a **manual, pre-deployment step** using CLI tools.
|
|
12
|
+
|
|
13
|
+
This module explains:
|
|
14
|
+
1. How to **generate mapping configurations** from GraphQL mutations (starter templates)
|
|
15
|
+
2. How to **validate** mappings before deployment
|
|
16
|
+
3. How to **analyze coverage** to ensure all fields are mapped
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## CLI Tools Overview
|
|
21
|
+
|
|
22
|
+
| Tool | Purpose | When to Use |
|
|
23
|
+
|------|---------|-------------|
|
|
24
|
+
| `introspect-schema` | Download GraphQL schema | First step - get schema file |
|
|
25
|
+
| `generate-mutation-mapping` | **Generate mapping config** from mutation | **Start here** - creates template |
|
|
26
|
+
| `validate-schema` | Validate mapping against schema | Before deployment - catch errors |
|
|
27
|
+
| `analyze-coverage` | Check field coverage | Ensure all important fields mapped |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Step 1: Generate Mapping Configuration (Starter)
|
|
32
|
+
|
|
33
|
+
### Create Your First Mapping Automatically
|
|
34
|
+
|
|
35
|
+
Instead of writing mapping configs from scratch, **generate them** from your GraphQL mutation:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# 1. Save your GraphQL mutation to a file
|
|
39
|
+
cat > createOrder.graphql <<'EOF'
|
|
40
|
+
mutation CreateOrder($input: CreateOrderInput!) {
|
|
41
|
+
createOrder(input: $input) {
|
|
42
|
+
id
|
|
43
|
+
ref
|
|
44
|
+
status
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
EOF
|
|
48
|
+
|
|
49
|
+
# 2. Generate mapping configuration
|
|
50
|
+
npx fc-connect generate-mutation-mapping \
|
|
51
|
+
--file createOrder.graphql \
|
|
52
|
+
--output mappings/order-mapping.json \
|
|
53
|
+
--source-format xml
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Generated Output (`mappings/order-mapping.json`):**
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"version": "1.0",
|
|
60
|
+
"mutation": "createOrder",
|
|
61
|
+
"operationName": "CreateOrder",
|
|
62
|
+
"sourceFormat": "xml",
|
|
63
|
+
"schemaValidation": true,
|
|
64
|
+
"arguments": {
|
|
65
|
+
"input": {
|
|
66
|
+
"_type": "CreateOrderInput!",
|
|
67
|
+
"_comment": "Generated from GraphQL mutation - customize paths below",
|
|
68
|
+
|
|
69
|
+
"ref": {
|
|
70
|
+
"source": "CHANGE_ME",
|
|
71
|
+
"required": true,
|
|
72
|
+
"_comment": "String! - Order reference number"
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
"type": {
|
|
76
|
+
"source": "CHANGE_ME",
|
|
77
|
+
"required": true,
|
|
78
|
+
"_comment": "String! - Order type (STANDARD, etc)"
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
"retailer": {
|
|
82
|
+
"fields": {
|
|
83
|
+
"id": {
|
|
84
|
+
"value": "${FLUENT_RETAILER_ID}",
|
|
85
|
+
"_comment": "Use environment variable"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
"customer": {
|
|
91
|
+
"fields": {
|
|
92
|
+
"ref": {
|
|
93
|
+
"source": "CHANGE_ME",
|
|
94
|
+
"required": true
|
|
95
|
+
},
|
|
96
|
+
"email": {
|
|
97
|
+
"source": "CHANGE_ME",
|
|
98
|
+
"required": false
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
"totalPrice": {
|
|
104
|
+
"source": "CHANGE_ME",
|
|
105
|
+
"resolver": "sdk.parseFloat",
|
|
106
|
+
"required": true,
|
|
107
|
+
"_comment": "Float! - Total order amount"
|
|
108
|
+
},
|
|
109
|
+
|
|
110
|
+
"items": {
|
|
111
|
+
"_array": true,
|
|
112
|
+
"_type": "[OrderItemInput]!",
|
|
113
|
+
"source": "CHANGE_ME",
|
|
114
|
+
"_comment": "Array of order line items",
|
|
115
|
+
|
|
116
|
+
"ref": {
|
|
117
|
+
"source": "CHANGE_ME",
|
|
118
|
+
"required": true
|
|
119
|
+
},
|
|
120
|
+
"quantity": {
|
|
121
|
+
"source": "CHANGE_ME",
|
|
122
|
+
"resolver": "sdk.parseInt",
|
|
123
|
+
"required": true
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"returnFields": ["id", "ref", "status"]
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**Now customize the `CHANGE_ME` paths** to match your XML/JSON source:
|
|
133
|
+
|
|
134
|
+
```json
|
|
135
|
+
{
|
|
136
|
+
"arguments": {
|
|
137
|
+
"input": {
|
|
138
|
+
"ref": {
|
|
139
|
+
"source": "order@order-no", // XML: order element, order-no attribute
|
|
140
|
+
"required": true
|
|
141
|
+
},
|
|
142
|
+
"customer": {
|
|
143
|
+
"fields": {
|
|
144
|
+
"ref": {
|
|
145
|
+
"source": "customer.customer-no", // XML: nested customer/customer-no
|
|
146
|
+
"required": true
|
|
147
|
+
},
|
|
148
|
+
"email": {
|
|
149
|
+
"source": "customer.customer-email"
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
"totalPrice": {
|
|
154
|
+
"source": "totals.order-total.gross-price", // XML: nested path
|
|
155
|
+
"resolver": "sdk.parseFloat",
|
|
156
|
+
"required": true
|
|
157
|
+
},
|
|
158
|
+
"items": {
|
|
159
|
+
"_array": true,
|
|
160
|
+
"source": "product-lineitems.product-lineitem", // XML array path
|
|
161
|
+
|
|
162
|
+
"ref": {
|
|
163
|
+
"source": "product-id" // Relative to each lineitem
|
|
164
|
+
},
|
|
165
|
+
"quantity": {
|
|
166
|
+
"source": "quantity",
|
|
167
|
+
"resolver": "sdk.parseInt"
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Step 2: Introspect GraphQL Schema
|
|
178
|
+
|
|
179
|
+
Before validation, download your GraphQL schema:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
# Basic introspection
|
|
183
|
+
npx fc-connect introspect-schema \
|
|
184
|
+
--url https://YOUR_ACCOUNT.api.fluentcommerce.com/graphql \
|
|
185
|
+
--output fluent-schema.json
|
|
186
|
+
|
|
187
|
+
# With authentication
|
|
188
|
+
npx fc-connect introspect-schema \
|
|
189
|
+
--url https://YOUR_ACCOUNT.api.fluentcommerce.com/graphql \
|
|
190
|
+
--header "Authorization: Bearer YOUR_TOKEN" \
|
|
191
|
+
--output fluent-schema.json
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**What you get (`fluent-schema.json`):**
|
|
195
|
+
```json
|
|
196
|
+
{
|
|
197
|
+
"data": {
|
|
198
|
+
"__schema": {
|
|
199
|
+
"mutationType": { "name": "Mutation" },
|
|
200
|
+
"types": [
|
|
201
|
+
{
|
|
202
|
+
"kind": "INPUT_OBJECT",
|
|
203
|
+
"name": "CreateOrderInput",
|
|
204
|
+
"inputFields": [
|
|
205
|
+
{
|
|
206
|
+
"name": "ref",
|
|
207
|
+
"type": {
|
|
208
|
+
"kind": "NON_NULL",
|
|
209
|
+
"ofType": { "kind": "SCALAR", "name": "String" }
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"name": "type",
|
|
214
|
+
"type": {
|
|
215
|
+
"kind": "NON_NULL",
|
|
216
|
+
"ofType": { "kind": "SCALAR", "name": "String" }
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"name": "totalPrice",
|
|
221
|
+
"type": {
|
|
222
|
+
"kind": "NON_NULL",
|
|
223
|
+
"ofType": { "kind": "SCALAR", "name": "Float" }
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"name": "items",
|
|
228
|
+
"type": {
|
|
229
|
+
"kind": "NON_NULL",
|
|
230
|
+
"ofType": {
|
|
231
|
+
"kind": "LIST",
|
|
232
|
+
"ofType": {
|
|
233
|
+
"kind": "INPUT_OBJECT",
|
|
234
|
+
"name": "OrderItemInput"
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
]
|
|
240
|
+
}
|
|
241
|
+
]
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## Step 3: Validate Mapping Against Schema
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
npx fc-connect validate-schema \
|
|
253
|
+
--mapping mappings/order-mapping.json \
|
|
254
|
+
--schema fluent-schema.json
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**✅ Successful Validation:**
|
|
258
|
+
```
|
|
259
|
+
✓ Mapping validation successful
|
|
260
|
+
✓ All field names exist in schema
|
|
261
|
+
✓ All required fields are mapped
|
|
262
|
+
✓ No type mismatches detected
|
|
263
|
+
✓ Array configurations are correct
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
**❌ Failed Validation:**
|
|
267
|
+
```
|
|
268
|
+
✗ Validation errors found:
|
|
269
|
+
|
|
270
|
+
1. Field 'orderNumber' not found in CreateOrderInput
|
|
271
|
+
→ Did you mean 'ref'?
|
|
272
|
+
→ Available fields: ref, type, retailer, customer, totalPrice, items
|
|
273
|
+
|
|
274
|
+
2. Required field 'type' is not marked as required in mapping
|
|
275
|
+
→ Add "required": true to field configuration
|
|
276
|
+
|
|
277
|
+
3. Field 'totalPrice' expects Float but source provides String
|
|
278
|
+
→ Add "resolver": "sdk.parseFloat" to convert type
|
|
279
|
+
|
|
280
|
+
4. Array field 'items' missing _array marker
|
|
281
|
+
→ Add "_array": true to field configuration
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## Step 4: Analyze Field Coverage
|
|
287
|
+
|
|
288
|
+
Check if you're missing important fields:
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
npx fc-connect analyze-coverage \
|
|
292
|
+
--mapping mappings/order-mapping.json \
|
|
293
|
+
--schema fluent-schema.json
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
**Output:**
|
|
297
|
+
```
|
|
298
|
+
Field Coverage Analysis
|
|
299
|
+
=======================
|
|
300
|
+
Mutation: createOrder
|
|
301
|
+
Input Type: CreateOrderInput
|
|
302
|
+
|
|
303
|
+
Total available fields: 25
|
|
304
|
+
Mapped fields: 8
|
|
305
|
+
Coverage: 32%
|
|
306
|
+
|
|
307
|
+
✓ MAPPED FIELDS (8):
|
|
308
|
+
✓ ref (String!) - REQUIRED
|
|
309
|
+
✓ type (String!) - REQUIRED
|
|
310
|
+
✓ retailer (RetailerLink!)
|
|
311
|
+
✓ customer (CustomerLink)
|
|
312
|
+
✓ totalPrice (Float!)
|
|
313
|
+
✓ currency (String!)
|
|
314
|
+
✓ items ([OrderItemInput]!)
|
|
315
|
+
✓ createdOn (DateTime)
|
|
316
|
+
|
|
317
|
+
⚠ UNMAPPED FIELDS - High Priority (5):
|
|
318
|
+
⚠ status (String) - Order status
|
|
319
|
+
⚠ paymentInfo (PaymentInput) - Payment details
|
|
320
|
+
⚠ shippingAddress (AddressInput) - Delivery address
|
|
321
|
+
⚠ billingAddress (AddressInput) - Billing address
|
|
322
|
+
⚠ attributes ([AttributeInput]) - Custom attributes
|
|
323
|
+
|
|
324
|
+
ℹ UNMAPPED FIELDS - Optional (12):
|
|
325
|
+
ℹ notes (String) - Order notes
|
|
326
|
+
ℹ tags ([String]) - Order tags
|
|
327
|
+
ℹ metadata (JSON) - Custom metadata
|
|
328
|
+
... (9 more)
|
|
329
|
+
|
|
330
|
+
Recommendation: Consider mapping high-priority fields
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Common Validation Errors & Fixes
|
|
336
|
+
|
|
337
|
+
### Error 1: Field Name Mismatch
|
|
338
|
+
|
|
339
|
+
**Validation Error:**
|
|
340
|
+
```
|
|
341
|
+
Field 'orderNumber' not found in CreateOrderInput
|
|
342
|
+
→ Did you mean 'ref'?
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
**Problem in Mapping:**
|
|
346
|
+
```json
|
|
347
|
+
{
|
|
348
|
+
"orderNumber": { "source": "order@order-no" } // ❌ Wrong field name
|
|
349
|
+
}
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
**Fix:**
|
|
353
|
+
```json
|
|
354
|
+
{
|
|
355
|
+
"ref": { "source": "order@order-no" } // ✅ Correct field name
|
|
356
|
+
}
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
### Error 2: Missing Required Field
|
|
362
|
+
|
|
363
|
+
**Validation Error:**
|
|
364
|
+
```
|
|
365
|
+
Required field 'type' is not mapped
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
**Problem:**
|
|
369
|
+
```json
|
|
370
|
+
{
|
|
371
|
+
"ref": { "source": "order@order-no" }
|
|
372
|
+
// Missing 'type' field - REQUIRED in schema
|
|
373
|
+
}
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
**Fix:**
|
|
377
|
+
```json
|
|
378
|
+
{
|
|
379
|
+
"ref": { "source": "order@order-no", "required": true },
|
|
380
|
+
"type": { "value": "STANDARD", "required": true } // ✅ Added
|
|
381
|
+
}
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
### Error 3: Type Mismatch
|
|
387
|
+
|
|
388
|
+
**Validation Error:**
|
|
389
|
+
```
|
|
390
|
+
Field 'totalPrice' expects Float but mapping may provide String
|
|
391
|
+
→ Add resolver to convert type
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
**Problem:**
|
|
395
|
+
```json
|
|
396
|
+
{
|
|
397
|
+
"totalPrice": { "source": "order.total" } // Returns String "123.45"
|
|
398
|
+
}
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
**Fix:**
|
|
402
|
+
```json
|
|
403
|
+
{
|
|
404
|
+
"totalPrice": {
|
|
405
|
+
"source": "order.total",
|
|
406
|
+
"resolver": "sdk.parseFloat" // ✅ Convert String → Float
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
413
|
+
### Error 4: Missing Array Marker
|
|
414
|
+
|
|
415
|
+
**Validation Error:**
|
|
416
|
+
```
|
|
417
|
+
Field 'items' is an array but missing _array marker
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
**Problem:**
|
|
421
|
+
```json
|
|
422
|
+
{
|
|
423
|
+
"items": {
|
|
424
|
+
"source": "lineItems",
|
|
425
|
+
"ref": { "source": "productId" }
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
**Fix:**
|
|
431
|
+
```json
|
|
432
|
+
{
|
|
433
|
+
"items": {
|
|
434
|
+
"_array": true, // ✅ Added
|
|
435
|
+
"source": "lineItems",
|
|
436
|
+
"ref": { "source": "productId" },
|
|
437
|
+
"quantity": { "source": "qty", "resolver": "sdk.parseInt" }
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
---
|
|
443
|
+
|
|
444
|
+
## Complete Example Workflow
|
|
445
|
+
|
|
446
|
+
```bash
|
|
447
|
+
# 1. Create GraphQL mutation file
|
|
448
|
+
cat > createOrder.graphql <<'EOF'
|
|
449
|
+
mutation CreateOrder($input: CreateOrderInput!) {
|
|
450
|
+
createOrder(input: $input) {
|
|
451
|
+
id
|
|
452
|
+
ref
|
|
453
|
+
status
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
EOF
|
|
457
|
+
|
|
458
|
+
# 2. Generate starter mapping configuration
|
|
459
|
+
npx fc-connect generate-mutation-mapping \
|
|
460
|
+
--file createOrder.graphql \
|
|
461
|
+
--output mappings/order-mapping.json \
|
|
462
|
+
--source-format xml
|
|
463
|
+
|
|
464
|
+
# 3. Customize the generated mapping
|
|
465
|
+
# Edit mappings/order-mapping.json - replace CHANGE_ME with actual XML paths
|
|
466
|
+
|
|
467
|
+
# 4. Introspect GraphQL schema
|
|
468
|
+
npx fc-connect introspect-schema \
|
|
469
|
+
--url https://my-account.api.fluentcommerce.com/graphql \
|
|
470
|
+
--output fluent-schema.json
|
|
471
|
+
|
|
472
|
+
# 5. Validate mapping
|
|
473
|
+
npx fc-connect validate-schema \
|
|
474
|
+
--mapping mappings/order-mapping.json \
|
|
475
|
+
--schema fluent-schema.json
|
|
476
|
+
|
|
477
|
+
# 6. Check coverage
|
|
478
|
+
npx fc-connect analyze-coverage \
|
|
479
|
+
--mapping mappings/order-mapping.json \
|
|
480
|
+
--schema fluent-schema.json
|
|
481
|
+
|
|
482
|
+
# 7. Fix any errors, then repeat steps 5-6 until validation passes
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
---
|
|
486
|
+
|
|
487
|
+
## Pre-Deployment Checklist
|
|
488
|
+
|
|
489
|
+
Before deploying your mapping to production:
|
|
490
|
+
|
|
491
|
+
- [ ] ✅ Mapping generated from GraphQL mutation (`generate-mutation-mapping`)
|
|
492
|
+
- [ ] ✅ Schema introspected and saved (`introspect-schema`)
|
|
493
|
+
- [ ] ✅ Mapping validated against schema (`validate-schema`)
|
|
494
|
+
- [ ] ✅ Field coverage analyzed (`analyze-coverage`)
|
|
495
|
+
- [ ] ✅ All validation errors fixed
|
|
496
|
+
- [ ] ✅ High-priority unmapped fields reviewed
|
|
497
|
+
- [ ] ✅ Test with sample XML/JSON data
|
|
498
|
+
- [ ] ✅ Verify mutation execution in GraphQL playground
|
|
499
|
+
- [ ] ✅ Run integration tests in staging environment
|
|
500
|
+
|
|
501
|
+
---
|
|
502
|
+
|
|
503
|
+
## CI/CD Integration
|
|
504
|
+
|
|
505
|
+
Add to your CI pipeline:
|
|
506
|
+
|
|
507
|
+
```yaml
|
|
508
|
+
# .github/workflows/validate-mappings.yml
|
|
509
|
+
name: Validate GraphQL Mappings
|
|
510
|
+
|
|
511
|
+
on: [push, pull_request]
|
|
512
|
+
|
|
513
|
+
jobs:
|
|
514
|
+
validate:
|
|
515
|
+
runs-on: ubuntu-latest
|
|
516
|
+
steps:
|
|
517
|
+
- uses: actions/checkout@v2
|
|
518
|
+
|
|
519
|
+
- name: Install SDK
|
|
520
|
+
run: npm install -g @fluentcommerce/fc-connect-sdk
|
|
521
|
+
|
|
522
|
+
- name: Introspect Schema
|
|
523
|
+
run: |
|
|
524
|
+
fc-connect introspect-schema \
|
|
525
|
+
--url ${{ secrets.FLUENT_GRAPHQL_URL }} \
|
|
526
|
+
--header "Authorization: Bearer ${{ secrets.FLUENT_TOKEN }}" \
|
|
527
|
+
--output fluent-schema.json
|
|
528
|
+
|
|
529
|
+
- name: Validate All Mappings
|
|
530
|
+
run: |
|
|
531
|
+
for mapping in mappings/*.json; do
|
|
532
|
+
echo "Validating $mapping..."
|
|
533
|
+
fc-connect validate-schema \
|
|
534
|
+
--mapping "$mapping" \
|
|
535
|
+
--schema fluent-schema.json
|
|
536
|
+
done
|
|
537
|
+
|
|
538
|
+
- name: Check Coverage (Fail if < 80%)
|
|
539
|
+
run: |
|
|
540
|
+
for mapping in mappings/*.json; do
|
|
541
|
+
fc-connect analyze-coverage \
|
|
542
|
+
--mapping "$mapping" \
|
|
543
|
+
--schema fluent-schema.json \
|
|
544
|
+
--min-coverage 80
|
|
545
|
+
done
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
---
|
|
549
|
+
|
|
550
|
+
## Key Takeaways
|
|
551
|
+
|
|
552
|
+
✅ **Start with generation** - Use `generate-mutation-mapping` for templates
|
|
553
|
+
✅ **Schema validation is MANUAL** - Not automatic at runtime
|
|
554
|
+
✅ **Use CLI tools before deployment** - Catch errors early
|
|
555
|
+
✅ **Coverage analysis is critical** - Ensure important fields are mapped
|
|
556
|
+
✅ **Integrate with CI/CD** - Validate on every commit
|
|
557
|
+
✅ **Keep schema up-to-date** - Re-introspect when GraphQL schema changes
|
|
558
|
+
|
|
559
|
+
---
|
|
560
|
+
|
|
561
|
+
## Navigation
|
|
562
|
+
|
|
563
|
+
[← Previous: Quick Start](../../../auto-pagination/modules/auto-pagination-02-quick-start.md) | [Back to Guide](../graphql-mutation-mapping-readme.md) | [Next: Mapping Patterns →](./graphql-mutation-mapping-04-mapping-patterns.md)
|
|
564
|
+
|
|
565
|
+
## Related Documentation
|
|
566
|
+
|
|
567
|
+
- [CLI Tools Documentation](../../../../../bin/readme.md) - Complete CLI tools reference
|
|
568
|
+
- [Module 05: Configuration Reference](./graphql-mutation-mapping-05-configuration-reference.md) - Mapping configuration structure
|
|
569
|
+
- [Module 06: Path Syntax](./graphql-mutation-mapping-06-path-syntax.md) - XML/JSON path expressions
|