@fluentcommerce/fc-connect-sdk 0.1.53 → 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 +30 -2
- package/README.md +39 -0
- package/dist/cjs/auth/index.d.ts +3 -0
- package/dist/cjs/auth/index.js +13 -0
- package/dist/cjs/auth/profile-loader.d.ts +18 -0
- package/dist/cjs/auth/profile-loader.js +208 -0
- package/dist/cjs/client-factory.d.ts +4 -0
- package/dist/cjs/client-factory.js +10 -0
- package/dist/cjs/clients/fluent-client.js +13 -6
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +8 -2
- package/dist/cjs/utils/pagination-helpers.js +38 -2
- package/dist/cjs/versori/fluent-versori-client.js +11 -5
- package/dist/esm/auth/index.d.ts +3 -0
- package/dist/esm/auth/index.js +2 -0
- package/dist/esm/auth/profile-loader.d.ts +18 -0
- package/dist/esm/auth/profile-loader.js +169 -0
- package/dist/esm/client-factory.d.ts +4 -0
- package/dist/esm/client-factory.js +9 -0
- package/dist/esm/clients/fluent-client.js +13 -6
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +2 -1
- 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/dist/types/auth/index.d.ts +3 -0
- package/dist/types/auth/profile-loader.d.ts +18 -0
- package/dist/types/client-factory.d.ts +4 -0
- package/dist/types/index.d.ts +3 -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 -482
- 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
|
@@ -1,456 +1,456 @@
|
|
|
1
|
-
# Module 3: UTF-8 and Special Character Handling
|
|
2
|
-
|
|
3
|
-
**Level:** Intermediate
|
|
4
|
-
**Estimated Time:** 20 minutes
|
|
5
|
-
|
|
6
|
-
## Overview
|
|
7
|
-
|
|
8
|
-
The SDK provides automatic handling of UTF-8 encoding, Byte Order Marks (BOM), and special characters. This module explains how the SDK processes these edge cases to prevent parsing errors and ensure data integrity.
|
|
9
|
-
|
|
10
|
-
## Learning Objectives
|
|
11
|
-
|
|
12
|
-
By the end of this module, you will:
|
|
13
|
-
- ✅ Understand how the SDK handles UTF-8 encoding automatically
|
|
14
|
-
- ✅ Know what a BOM is and how it's handled
|
|
15
|
-
- ✅ Learn how special XML characters are escaped
|
|
16
|
-
- ✅ Recognize when encoding errors might occur
|
|
17
|
-
- ✅ Handle international characters correctly
|
|
18
|
-
|
|
19
|
-
## UTF-8 Support
|
|
20
|
-
|
|
21
|
-
### Automatic Preprocessing
|
|
22
|
-
|
|
23
|
-
The SDK automatically handles UTF-8 encoding with BOM removal in the XML parser:
|
|
24
|
-
|
|
25
|
-
```typescript
|
|
26
|
-
// Automatic preprocessing in XMLParserService
|
|
27
|
-
private preprocessXML(xmlContent: string): string {
|
|
28
|
-
// Remove BOM (Byte Order Mark) if present
|
|
29
|
-
let cleaned = xmlContent.replace(/^\uFEFF/, '');
|
|
30
|
-
|
|
31
|
-
// Normalize line endings (Windows/Unix/Mac)
|
|
32
|
-
cleaned = cleaned.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
33
|
-
|
|
34
|
-
// Remove XML comments
|
|
35
|
-
cleaned = cleaned.replace(/<!--[\s\S]*?-->/g, '');
|
|
36
|
-
|
|
37
|
-
return cleaned.trim();
|
|
38
|
-
}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### Supported Encodings
|
|
42
|
-
|
|
43
|
-
The SDK supports the following encodings:
|
|
44
|
-
|
|
45
|
-
| Encoding | Support | BOM Handling |
|
|
46
|
-
|----------|---------|--------------|
|
|
47
|
-
| ✅ UTF-8 (standard) | Full | N/A |
|
|
48
|
-
| ✅ UTF-8 with BOM | Full | Automatic removal |
|
|
49
|
-
| ✅ Unicode characters | Full | Direct support |
|
|
50
|
-
| ❌ UTF-16 | Not supported | Convert to UTF-8 first |
|
|
51
|
-
| ❌ ISO-8859-1 (Latin-1) | Not supported | Convert to UTF-8 first |
|
|
52
|
-
|
|
53
|
-
### What is a BOM?
|
|
54
|
-
|
|
55
|
-
A **BOM (Byte Order Mark)** is a special Unicode character (`U+FEFF`) that can appear at the start of a file to indicate:
|
|
56
|
-
- The encoding used (UTF-8, UTF-16, etc.)
|
|
57
|
-
- The byte order (big-endian or little-endian)
|
|
58
|
-
|
|
59
|
-
**Example BOM in UTF-8**:
|
|
60
|
-
```
|
|
61
|
-
Hex: EF BB BF
|
|
62
|
-
Character: U+FEFF
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
**Why BOMs cause problems**:
|
|
66
|
-
- XML parsers may fail if BOM is present
|
|
67
|
-
- BOM appears as invisible character in text editors
|
|
68
|
-
- Can cause "unexpected character" errors
|
|
69
|
-
|
|
70
|
-
**SDK Solution**: Automatically removes BOM before parsing
|
|
71
|
-
|
|
72
|
-
## Unicode Character Support
|
|
73
|
-
|
|
74
|
-
### International Characters
|
|
75
|
-
|
|
76
|
-
The SDK fully supports Unicode characters:
|
|
77
|
-
|
|
78
|
-
```xml
|
|
79
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
80
|
-
<order>
|
|
81
|
-
<customer>
|
|
82
|
-
<name>José García</name>
|
|
83
|
-
<email>josé@example.com</email>
|
|
84
|
-
<address>
|
|
85
|
-
<city>São Paulo</city>
|
|
86
|
-
<country>Brasil</country>
|
|
87
|
-
</address>
|
|
88
|
-
</customer>
|
|
89
|
-
</order>
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
✅ **Result**: Parses correctly, all characters preserved
|
|
93
|
-
|
|
94
|
-
### Emoji and Special Symbols
|
|
95
|
-
|
|
96
|
-
```xml
|
|
97
|
-
<order>
|
|
98
|
-
<customer>
|
|
99
|
-
<name>Customer 🎉</name>
|
|
100
|
-
<notes>Happy customer! ⭐⭐⭐⭐⭐</notes>
|
|
101
|
-
</customer>
|
|
102
|
-
</order>
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
✅ **Result**: Parses correctly, emoji preserved
|
|
106
|
-
|
|
107
|
-
### Chinese, Arabic, and Other Scripts
|
|
108
|
-
|
|
109
|
-
```xml
|
|
110
|
-
<order>
|
|
111
|
-
<customer>
|
|
112
|
-
<name>李明</name> <!-- Chinese -->
|
|
113
|
-
<name>محمد علي</name> <!-- Arabic -->
|
|
114
|
-
<name>Иван Петров</name> <!-- Russian -->
|
|
115
|
-
</customer>
|
|
116
|
-
</order>
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
✅ **Result**: All scripts parse correctly
|
|
120
|
-
|
|
121
|
-
## Special Character Escaping
|
|
122
|
-
|
|
123
|
-
### XML Special Characters
|
|
124
|
-
|
|
125
|
-
XML has five special characters that must be escaped when used in text content:
|
|
126
|
-
|
|
127
|
-
| Character | Escaped Form | Description |
|
|
128
|
-
|-----------|--------------|-------------|
|
|
129
|
-
| `&` | `&` | Ampersand |
|
|
130
|
-
| `<` | `<` | Less than |
|
|
131
|
-
| `>` | `>` | Greater than |
|
|
132
|
-
| `"` | `"` | Double quote |
|
|
133
|
-
| `'` | `'` | Single quote (apostrophe) |
|
|
134
|
-
|
|
135
|
-
### Automatic Escaping
|
|
136
|
-
|
|
137
|
-
The SDK automatically escapes special characters when building XML:
|
|
138
|
-
|
|
139
|
-
```typescript
|
|
140
|
-
private escapeXML(str: string): string {
|
|
141
|
-
return str
|
|
142
|
-
.replace(/&/g, '&') // & → &
|
|
143
|
-
.replace(/</g, '<') // < → <
|
|
144
|
-
.replace(/>/g, '>') // > → >
|
|
145
|
-
.replace(/"/g, '"') // " → "
|
|
146
|
-
.replace(/'/g, '''); // ' → '
|
|
147
|
-
}
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
### Examples of Escaping
|
|
151
|
-
|
|
152
|
-
| Input Value | Parsed Value | XML Output |
|
|
153
|
-
|-------------|--------------|------------|
|
|
154
|
-
| `Tom & Jerry` | `Tom & Jerry` | `Tom & Jerry` |
|
|
155
|
-
| `Price < $10` | `Price < $10` | `Price < $10` |
|
|
156
|
-
| `Size > 5"` | `Size > 5"` | `Size > 5"` |
|
|
157
|
-
| `It's working` | `It's working` | `It's working` |
|
|
158
|
-
| `<script>alert()</script>` | `<script>alert()</script>` | `<script>alert()</script>` |
|
|
159
|
-
|
|
160
|
-
### Complex Example
|
|
161
|
-
|
|
162
|
-
```xml
|
|
163
|
-
<order>
|
|
164
|
-
<customer>
|
|
165
|
-
<name>O'Reilly & Associates</name>
|
|
166
|
-
<notes>Items: "Book" & "DVD" (Price < $50)</notes>
|
|
167
|
-
</customer>
|
|
168
|
-
</order>
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
**Parsed values**:
|
|
172
|
-
```javascript
|
|
173
|
-
{
|
|
174
|
-
customer: {
|
|
175
|
-
name: "O'Reilly & Associates",
|
|
176
|
-
notes: 'Items: "Book" & "DVD" (Price < $50)'
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
**XML output** (if rebuilding):
|
|
182
|
-
```xml
|
|
183
|
-
<customer>
|
|
184
|
-
<name>O'Reilly & Associates</name>
|
|
185
|
-
<notes>Items: "Book" & "DVD" (Price < $50)</notes>
|
|
186
|
-
</customer>
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
## Encoding Errors
|
|
190
|
-
|
|
191
|
-
### When Encoding Errors Occur
|
|
192
|
-
|
|
193
|
-
Encoding errors can occur when:
|
|
194
|
-
1. File is not actually UTF-8 (e.g., ISO-8859-1, Windows-1252)
|
|
195
|
-
2. File contains invalid byte sequences
|
|
196
|
-
3. File is corrupted
|
|
197
|
-
4. BOM doesn't match actual encoding
|
|
198
|
-
|
|
199
|
-
### Example: Invalid UTF-8 Sequence
|
|
200
|
-
|
|
201
|
-
```xml
|
|
202
|
-
<!-- File saved as ISO-8859-1, not UTF-8 -->
|
|
203
|
-
<order>
|
|
204
|
-
<customer>
|
|
205
|
-
<name>Café</name> <!-- é encoded as 0xE9 (ISO-8859-1), not valid UTF-8 -->
|
|
206
|
-
</customer>
|
|
207
|
-
</order>
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
**Result**:
|
|
211
|
-
```typescript
|
|
212
|
-
FileParsingError: Failed to parse XML: Invalid character encoding
|
|
213
|
-
code: ENCODING_ERROR
|
|
214
|
-
fileName: "order.xml"
|
|
215
|
-
context: {
|
|
216
|
-
position: 45,
|
|
217
|
-
character: "é"
|
|
218
|
-
}
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
**Solution**: Re-save file as UTF-8 or convert encoding:
|
|
222
|
-
|
|
223
|
-
```bash
|
|
224
|
-
# Convert ISO-8859-1 to UTF-8
|
|
225
|
-
iconv -f ISO-8859-1 -t UTF-8 order.xml > order-utf8.xml
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
### Example: BOM Mismatch
|
|
229
|
-
|
|
230
|
-
```xml
|
|
231
|
-
<!-- UTF-16 BOM (FF FE) but file is UTF-8 -->
|
|
232
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
233
|
-
<order>...</order>
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
**Result**:
|
|
237
|
-
```typescript
|
|
238
|
-
FileParsingError: Failed to parse XML: Encoding mismatch
|
|
239
|
-
code: ENCODING_ERROR
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
**Solution**: Ensure BOM matches actual encoding or remove BOM
|
|
243
|
-
|
|
244
|
-
## Handling Encoding Errors
|
|
245
|
-
|
|
246
|
-
### Detection
|
|
247
|
-
|
|
248
|
-
```typescript
|
|
249
|
-
import { FileParsingError, IngestionErrorCode } from '@fluentcommerce/fc-connect-sdk';
|
|
250
|
-
|
|
251
|
-
try {
|
|
252
|
-
const parsed = await parser.parse(xmlContent);
|
|
253
|
-
} catch (error) {
|
|
254
|
-
if (error instanceof FileParsingError &&
|
|
255
|
-
error.code === IngestionErrorCode.ENCODING_ERROR) {
|
|
256
|
-
|
|
257
|
-
// Encoding error detected
|
|
258
|
-
logger.error('File encoding issue:', {
|
|
259
|
-
fileName: error.fileName,
|
|
260
|
-
message: error.message
|
|
261
|
-
});
|
|
262
|
-
|
|
263
|
-
// Suggest fix to user
|
|
264
|
-
console.error(
|
|
265
|
-
'File appears to be in wrong encoding. ' +
|
|
266
|
-
'Please ensure file is saved as UTF-8.'
|
|
267
|
-
);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
### Automatic Conversion (Node.js)
|
|
273
|
-
|
|
274
|
-
```typescript
|
|
275
|
-
import { readFile } from 'fs/promises';
|
|
276
|
-
import { decode } from 'iconv-lite';
|
|
277
|
-
|
|
278
|
-
async function parseWithEncodingDetection(filePath: string) {
|
|
279
|
-
// Read file as buffer
|
|
280
|
-
const buffer = await readFile(filePath);
|
|
281
|
-
|
|
282
|
-
// Try UTF-8 first
|
|
283
|
-
try {
|
|
284
|
-
const utf8Content = buffer.toString('utf8');
|
|
285
|
-
return await parser.parse(utf8Content);
|
|
286
|
-
} catch (error) {
|
|
287
|
-
// If UTF-8 fails, try ISO-8859-1
|
|
288
|
-
try {
|
|
289
|
-
const isoContent = decode(buffer, 'ISO-8859-1');
|
|
290
|
-
return await parser.parse(isoContent);
|
|
291
|
-
} catch (error2) {
|
|
292
|
-
// If both fail, throw original error
|
|
293
|
-
throw error;
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
## Best Practices
|
|
300
|
-
|
|
301
|
-
### 1. Always Use UTF-8
|
|
302
|
-
|
|
303
|
-
```typescript
|
|
304
|
-
// ✅ CORRECT - Ensure files are UTF-8
|
|
305
|
-
const xmlContent = await readFile('order.xml', 'utf8');
|
|
306
|
-
|
|
307
|
-
// ❌ WRONG - Default encoding might not be UTF-8
|
|
308
|
-
const xmlContent = await readFile('order.xml'); // Uses system default
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
### 2. Specify Encoding in XML Declaration
|
|
312
|
-
|
|
313
|
-
```xml
|
|
314
|
-
<!-- ✅ CORRECT - Explicit encoding declaration -->
|
|
315
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
316
|
-
<order>...</order>
|
|
317
|
-
|
|
318
|
-
<!-- ❌ WRONG - No encoding declaration -->
|
|
319
|
-
<?xml version="1.0"?>
|
|
320
|
-
<order>...</order>
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
### 3. Remove BOM When Possible
|
|
324
|
-
|
|
325
|
-
Many text editors can save files without BOM:
|
|
326
|
-
|
|
327
|
-
- **VS Code**: File → Preferences → Settings → "files.encoding" → "UTF-8"
|
|
328
|
-
- **Notepad++**: Encoding → Encode in UTF-8 (without BOM)
|
|
329
|
-
- **Sublime Text**: File → Save with Encoding → UTF-8
|
|
330
|
-
|
|
331
|
-
### 4. Validate Encoding Before Processing
|
|
332
|
-
|
|
333
|
-
```typescript
|
|
334
|
-
function validateUTF8(buffer: Buffer): boolean {
|
|
335
|
-
try {
|
|
336
|
-
buffer.toString('utf8');
|
|
337
|
-
return true;
|
|
338
|
-
} catch {
|
|
339
|
-
return false;
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
// Usage
|
|
344
|
-
const fileBuffer = await readFile('order.xml');
|
|
345
|
-
if (!validateUTF8(fileBuffer)) {
|
|
346
|
-
throw new Error('File is not valid UTF-8');
|
|
347
|
-
}
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
### 5. Handle Special Characters Correctly
|
|
351
|
-
|
|
352
|
-
```typescript
|
|
353
|
-
// ✅ CORRECT - SDK handles escaping automatically
|
|
354
|
-
const data = {
|
|
355
|
-
name: "O'Reilly & Associates",
|
|
356
|
-
notes: 'Price < $10'
|
|
357
|
-
};
|
|
358
|
-
// SDK automatically escapes when building XML/GraphQL
|
|
359
|
-
|
|
360
|
-
// ❌ WRONG - Manual escaping not needed
|
|
361
|
-
const data = {
|
|
362
|
-
name: "O'Reilly & Associates", // Double-escaped!
|
|
363
|
-
notes: 'Price < $10'
|
|
364
|
-
};
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
## Common Issues and Solutions
|
|
368
|
-
|
|
369
|
-
### Issue 1: "Unexpected character" Error
|
|
370
|
-
|
|
371
|
-
**Symptom**:
|
|
372
|
-
```
|
|
373
|
-
FileParsingError: Unexpected character at position 0
|
|
374
|
-
```
|
|
375
|
-
|
|
376
|
-
**Cause**: BOM present at start of file
|
|
377
|
-
|
|
378
|
-
**Solution**: SDK automatically removes BOM - no action needed. If error persists, file may be corrupted.
|
|
379
|
-
|
|
380
|
-
### Issue 2: Garbled Characters in Output
|
|
381
|
-
|
|
382
|
-
**Symptom**:
|
|
383
|
-
```
|
|
384
|
-
Customer name: "José GarcÃa" // Should be "José García"
|
|
385
|
-
```
|
|
386
|
-
|
|
387
|
-
**Cause**: File saved as ISO-8859-1 but read as UTF-8
|
|
388
|
-
|
|
389
|
-
**Solution**: Re-save file as UTF-8 or convert encoding
|
|
390
|
-
|
|
391
|
-
### Issue 3: Special Characters Cause Parse Error
|
|
392
|
-
|
|
393
|
-
**Symptom**:
|
|
394
|
-
```
|
|
395
|
-
FileParsingError: Mismatched opening and closing tags
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
**Cause**: Unescaped `<` or `>` in text content
|
|
399
|
-
|
|
400
|
-
**Solution**: SDK automatically escapes when building XML. If parsing existing XML, ensure it's valid.
|
|
401
|
-
|
|
402
|
-
## Practice Exercise
|
|
403
|
-
|
|
404
|
-
Create a function that handles UTF-8 files with or without BOM:
|
|
405
|
-
|
|
406
|
-
```typescript
|
|
407
|
-
import { XMLParserService, FileParsingError } from '@fluentcommerce/fc-connect-sdk';
|
|
408
|
-
import { readFile } from 'fs/promises';
|
|
409
|
-
|
|
410
|
-
async function parseUTF8File(filePath: string) {
|
|
411
|
-
try {
|
|
412
|
-
// Read file as UTF-8
|
|
413
|
-
const content = await readFile(filePath, 'utf8');
|
|
414
|
-
|
|
415
|
-
// SDK automatically removes BOM if present
|
|
416
|
-
const parser = new XMLParserService();
|
|
417
|
-
const result = await parser.parse(content);
|
|
418
|
-
|
|
419
|
-
console.log('✅ File parsed successfully');
|
|
420
|
-
return result;
|
|
421
|
-
|
|
422
|
-
} catch (error) {
|
|
423
|
-
if (error instanceof FileParsingError) {
|
|
424
|
-
console.error('❌ Parse error:', {
|
|
425
|
-
code: error.code,
|
|
426
|
-
message: error.message,
|
|
427
|
-
fileName: error.fileName
|
|
428
|
-
});
|
|
429
|
-
|
|
430
|
-
// Provide helpful error message
|
|
431
|
-
if (error.code === 'ENCODING_ERROR') {
|
|
432
|
-
console.error('Hint: Ensure file is saved as UTF-8');
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
throw error;
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
```
|
|
439
|
-
|
|
440
|
-
## Key Takeaways
|
|
441
|
-
|
|
442
|
-
- 🎯 SDK automatically removes UTF-8 BOM - no manual handling needed
|
|
443
|
-
- 🎯 All Unicode characters are supported (emoji, Chinese, Arabic, etc.)
|
|
444
|
-
- 🎯 XML special characters are automatically escaped when building XML
|
|
445
|
-
- 🎯 Files should be saved as UTF-8 encoding
|
|
446
|
-
- 🎯 Encoding errors are permanent - don't retry
|
|
447
|
-
- 🎯 Include encoding declaration in XML: `<?xml version="1.0" encoding="UTF-8"?>`
|
|
448
|
-
|
|
449
|
-
## Next Steps
|
|
450
|
-
|
|
451
|
-
Continue to [Module 4: Error Scenarios →](./error-handling-04-error-scenarios.md) to see real-world examples of error handling.
|
|
452
|
-
|
|
453
|
-
---
|
|
454
|
-
|
|
455
|
-
**Previous:** [← Module 2: Error Types](./error-handling-02-error-types.md)
|
|
456
|
-
**Next:** [Module 4: Error Scenarios →](./error-handling-04-error-scenarios.md)
|
|
1
|
+
# Module 3: UTF-8 and Special Character Handling
|
|
2
|
+
|
|
3
|
+
**Level:** Intermediate
|
|
4
|
+
**Estimated Time:** 20 minutes
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
The SDK provides automatic handling of UTF-8 encoding, Byte Order Marks (BOM), and special characters. This module explains how the SDK processes these edge cases to prevent parsing errors and ensure data integrity.
|
|
9
|
+
|
|
10
|
+
## Learning Objectives
|
|
11
|
+
|
|
12
|
+
By the end of this module, you will:
|
|
13
|
+
- ✅ Understand how the SDK handles UTF-8 encoding automatically
|
|
14
|
+
- ✅ Know what a BOM is and how it's handled
|
|
15
|
+
- ✅ Learn how special XML characters are escaped
|
|
16
|
+
- ✅ Recognize when encoding errors might occur
|
|
17
|
+
- ✅ Handle international characters correctly
|
|
18
|
+
|
|
19
|
+
## UTF-8 Support
|
|
20
|
+
|
|
21
|
+
### Automatic Preprocessing
|
|
22
|
+
|
|
23
|
+
The SDK automatically handles UTF-8 encoding with BOM removal in the XML parser:
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
// Automatic preprocessing in XMLParserService
|
|
27
|
+
private preprocessXML(xmlContent: string): string {
|
|
28
|
+
// Remove BOM (Byte Order Mark) if present
|
|
29
|
+
let cleaned = xmlContent.replace(/^\uFEFF/, '');
|
|
30
|
+
|
|
31
|
+
// Normalize line endings (Windows/Unix/Mac)
|
|
32
|
+
cleaned = cleaned.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
33
|
+
|
|
34
|
+
// Remove XML comments
|
|
35
|
+
cleaned = cleaned.replace(/<!--[\s\S]*?-->/g, '');
|
|
36
|
+
|
|
37
|
+
return cleaned.trim();
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Supported Encodings
|
|
42
|
+
|
|
43
|
+
The SDK supports the following encodings:
|
|
44
|
+
|
|
45
|
+
| Encoding | Support | BOM Handling |
|
|
46
|
+
|----------|---------|--------------|
|
|
47
|
+
| ✅ UTF-8 (standard) | Full | N/A |
|
|
48
|
+
| ✅ UTF-8 with BOM | Full | Automatic removal |
|
|
49
|
+
| ✅ Unicode characters | Full | Direct support |
|
|
50
|
+
| ❌ UTF-16 | Not supported | Convert to UTF-8 first |
|
|
51
|
+
| ❌ ISO-8859-1 (Latin-1) | Not supported | Convert to UTF-8 first |
|
|
52
|
+
|
|
53
|
+
### What is a BOM?
|
|
54
|
+
|
|
55
|
+
A **BOM (Byte Order Mark)** is a special Unicode character (`U+FEFF`) that can appear at the start of a file to indicate:
|
|
56
|
+
- The encoding used (UTF-8, UTF-16, etc.)
|
|
57
|
+
- The byte order (big-endian or little-endian)
|
|
58
|
+
|
|
59
|
+
**Example BOM in UTF-8**:
|
|
60
|
+
```
|
|
61
|
+
Hex: EF BB BF
|
|
62
|
+
Character: U+FEFF
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Why BOMs cause problems**:
|
|
66
|
+
- XML parsers may fail if BOM is present
|
|
67
|
+
- BOM appears as invisible character in text editors
|
|
68
|
+
- Can cause "unexpected character" errors
|
|
69
|
+
|
|
70
|
+
**SDK Solution**: Automatically removes BOM before parsing
|
|
71
|
+
|
|
72
|
+
## Unicode Character Support
|
|
73
|
+
|
|
74
|
+
### International Characters
|
|
75
|
+
|
|
76
|
+
The SDK fully supports Unicode characters:
|
|
77
|
+
|
|
78
|
+
```xml
|
|
79
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
80
|
+
<order>
|
|
81
|
+
<customer>
|
|
82
|
+
<name>José García</name>
|
|
83
|
+
<email>josé@example.com</email>
|
|
84
|
+
<address>
|
|
85
|
+
<city>São Paulo</city>
|
|
86
|
+
<country>Brasil</country>
|
|
87
|
+
</address>
|
|
88
|
+
</customer>
|
|
89
|
+
</order>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
✅ **Result**: Parses correctly, all characters preserved
|
|
93
|
+
|
|
94
|
+
### Emoji and Special Symbols
|
|
95
|
+
|
|
96
|
+
```xml
|
|
97
|
+
<order>
|
|
98
|
+
<customer>
|
|
99
|
+
<name>Customer 🎉</name>
|
|
100
|
+
<notes>Happy customer! ⭐⭐⭐⭐⭐</notes>
|
|
101
|
+
</customer>
|
|
102
|
+
</order>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
✅ **Result**: Parses correctly, emoji preserved
|
|
106
|
+
|
|
107
|
+
### Chinese, Arabic, and Other Scripts
|
|
108
|
+
|
|
109
|
+
```xml
|
|
110
|
+
<order>
|
|
111
|
+
<customer>
|
|
112
|
+
<name>李明</name> <!-- Chinese -->
|
|
113
|
+
<name>محمد علي</name> <!-- Arabic -->
|
|
114
|
+
<name>Иван Петров</name> <!-- Russian -->
|
|
115
|
+
</customer>
|
|
116
|
+
</order>
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
✅ **Result**: All scripts parse correctly
|
|
120
|
+
|
|
121
|
+
## Special Character Escaping
|
|
122
|
+
|
|
123
|
+
### XML Special Characters
|
|
124
|
+
|
|
125
|
+
XML has five special characters that must be escaped when used in text content:
|
|
126
|
+
|
|
127
|
+
| Character | Escaped Form | Description |
|
|
128
|
+
|-----------|--------------|-------------|
|
|
129
|
+
| `&` | `&` | Ampersand |
|
|
130
|
+
| `<` | `<` | Less than |
|
|
131
|
+
| `>` | `>` | Greater than |
|
|
132
|
+
| `"` | `"` | Double quote |
|
|
133
|
+
| `'` | `'` | Single quote (apostrophe) |
|
|
134
|
+
|
|
135
|
+
### Automatic Escaping
|
|
136
|
+
|
|
137
|
+
The SDK automatically escapes special characters when building XML:
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
private escapeXML(str: string): string {
|
|
141
|
+
return str
|
|
142
|
+
.replace(/&/g, '&') // & → &
|
|
143
|
+
.replace(/</g, '<') // < → <
|
|
144
|
+
.replace(/>/g, '>') // > → >
|
|
145
|
+
.replace(/"/g, '"') // " → "
|
|
146
|
+
.replace(/'/g, '''); // ' → '
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Examples of Escaping
|
|
151
|
+
|
|
152
|
+
| Input Value | Parsed Value | XML Output |
|
|
153
|
+
|-------------|--------------|------------|
|
|
154
|
+
| `Tom & Jerry` | `Tom & Jerry` | `Tom & Jerry` |
|
|
155
|
+
| `Price < $10` | `Price < $10` | `Price < $10` |
|
|
156
|
+
| `Size > 5"` | `Size > 5"` | `Size > 5"` |
|
|
157
|
+
| `It's working` | `It's working` | `It's working` |
|
|
158
|
+
| `<script>alert()</script>` | `<script>alert()</script>` | `<script>alert()</script>` |
|
|
159
|
+
|
|
160
|
+
### Complex Example
|
|
161
|
+
|
|
162
|
+
```xml
|
|
163
|
+
<order>
|
|
164
|
+
<customer>
|
|
165
|
+
<name>O'Reilly & Associates</name>
|
|
166
|
+
<notes>Items: "Book" & "DVD" (Price < $50)</notes>
|
|
167
|
+
</customer>
|
|
168
|
+
</order>
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**Parsed values**:
|
|
172
|
+
```javascript
|
|
173
|
+
{
|
|
174
|
+
customer: {
|
|
175
|
+
name: "O'Reilly & Associates",
|
|
176
|
+
notes: 'Items: "Book" & "DVD" (Price < $50)'
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**XML output** (if rebuilding):
|
|
182
|
+
```xml
|
|
183
|
+
<customer>
|
|
184
|
+
<name>O'Reilly & Associates</name>
|
|
185
|
+
<notes>Items: "Book" & "DVD" (Price < $50)</notes>
|
|
186
|
+
</customer>
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Encoding Errors
|
|
190
|
+
|
|
191
|
+
### When Encoding Errors Occur
|
|
192
|
+
|
|
193
|
+
Encoding errors can occur when:
|
|
194
|
+
1. File is not actually UTF-8 (e.g., ISO-8859-1, Windows-1252)
|
|
195
|
+
2. File contains invalid byte sequences
|
|
196
|
+
3. File is corrupted
|
|
197
|
+
4. BOM doesn't match actual encoding
|
|
198
|
+
|
|
199
|
+
### Example: Invalid UTF-8 Sequence
|
|
200
|
+
|
|
201
|
+
```xml
|
|
202
|
+
<!-- File saved as ISO-8859-1, not UTF-8 -->
|
|
203
|
+
<order>
|
|
204
|
+
<customer>
|
|
205
|
+
<name>Café</name> <!-- é encoded as 0xE9 (ISO-8859-1), not valid UTF-8 -->
|
|
206
|
+
</customer>
|
|
207
|
+
</order>
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Result**:
|
|
211
|
+
```typescript
|
|
212
|
+
FileParsingError: Failed to parse XML: Invalid character encoding
|
|
213
|
+
code: ENCODING_ERROR
|
|
214
|
+
fileName: "order.xml"
|
|
215
|
+
context: {
|
|
216
|
+
position: 45,
|
|
217
|
+
character: "é"
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**Solution**: Re-save file as UTF-8 or convert encoding:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# Convert ISO-8859-1 to UTF-8
|
|
225
|
+
iconv -f ISO-8859-1 -t UTF-8 order.xml > order-utf8.xml
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Example: BOM Mismatch
|
|
229
|
+
|
|
230
|
+
```xml
|
|
231
|
+
<!-- UTF-16 BOM (FF FE) but file is UTF-8 -->
|
|
232
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
233
|
+
<order>...</order>
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**Result**:
|
|
237
|
+
```typescript
|
|
238
|
+
FileParsingError: Failed to parse XML: Encoding mismatch
|
|
239
|
+
code: ENCODING_ERROR
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
**Solution**: Ensure BOM matches actual encoding or remove BOM
|
|
243
|
+
|
|
244
|
+
## Handling Encoding Errors
|
|
245
|
+
|
|
246
|
+
### Detection
|
|
247
|
+
|
|
248
|
+
```typescript
|
|
249
|
+
import { FileParsingError, IngestionErrorCode } from '@fluentcommerce/fc-connect-sdk';
|
|
250
|
+
|
|
251
|
+
try {
|
|
252
|
+
const parsed = await parser.parse(xmlContent);
|
|
253
|
+
} catch (error) {
|
|
254
|
+
if (error instanceof FileParsingError &&
|
|
255
|
+
error.code === IngestionErrorCode.ENCODING_ERROR) {
|
|
256
|
+
|
|
257
|
+
// Encoding error detected
|
|
258
|
+
logger.error('File encoding issue:', {
|
|
259
|
+
fileName: error.fileName,
|
|
260
|
+
message: error.message
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
// Suggest fix to user
|
|
264
|
+
console.error(
|
|
265
|
+
'File appears to be in wrong encoding. ' +
|
|
266
|
+
'Please ensure file is saved as UTF-8.'
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### Automatic Conversion (Node.js)
|
|
273
|
+
|
|
274
|
+
```typescript
|
|
275
|
+
import { readFile } from 'fs/promises';
|
|
276
|
+
import { decode } from 'iconv-lite';
|
|
277
|
+
|
|
278
|
+
async function parseWithEncodingDetection(filePath: string) {
|
|
279
|
+
// Read file as buffer
|
|
280
|
+
const buffer = await readFile(filePath);
|
|
281
|
+
|
|
282
|
+
// Try UTF-8 first
|
|
283
|
+
try {
|
|
284
|
+
const utf8Content = buffer.toString('utf8');
|
|
285
|
+
return await parser.parse(utf8Content);
|
|
286
|
+
} catch (error) {
|
|
287
|
+
// If UTF-8 fails, try ISO-8859-1
|
|
288
|
+
try {
|
|
289
|
+
const isoContent = decode(buffer, 'ISO-8859-1');
|
|
290
|
+
return await parser.parse(isoContent);
|
|
291
|
+
} catch (error2) {
|
|
292
|
+
// If both fail, throw original error
|
|
293
|
+
throw error;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
## Best Practices
|
|
300
|
+
|
|
301
|
+
### 1. Always Use UTF-8
|
|
302
|
+
|
|
303
|
+
```typescript
|
|
304
|
+
// ✅ CORRECT - Ensure files are UTF-8
|
|
305
|
+
const xmlContent = await readFile('order.xml', 'utf8');
|
|
306
|
+
|
|
307
|
+
// ❌ WRONG - Default encoding might not be UTF-8
|
|
308
|
+
const xmlContent = await readFile('order.xml'); // Uses system default
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### 2. Specify Encoding in XML Declaration
|
|
312
|
+
|
|
313
|
+
```xml
|
|
314
|
+
<!-- ✅ CORRECT - Explicit encoding declaration -->
|
|
315
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
316
|
+
<order>...</order>
|
|
317
|
+
|
|
318
|
+
<!-- ❌ WRONG - No encoding declaration -->
|
|
319
|
+
<?xml version="1.0"?>
|
|
320
|
+
<order>...</order>
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### 3. Remove BOM When Possible
|
|
324
|
+
|
|
325
|
+
Many text editors can save files without BOM:
|
|
326
|
+
|
|
327
|
+
- **VS Code**: File → Preferences → Settings → "files.encoding" → "UTF-8"
|
|
328
|
+
- **Notepad++**: Encoding → Encode in UTF-8 (without BOM)
|
|
329
|
+
- **Sublime Text**: File → Save with Encoding → UTF-8
|
|
330
|
+
|
|
331
|
+
### 4. Validate Encoding Before Processing
|
|
332
|
+
|
|
333
|
+
```typescript
|
|
334
|
+
function validateUTF8(buffer: Buffer): boolean {
|
|
335
|
+
try {
|
|
336
|
+
buffer.toString('utf8');
|
|
337
|
+
return true;
|
|
338
|
+
} catch {
|
|
339
|
+
return false;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// Usage
|
|
344
|
+
const fileBuffer = await readFile('order.xml');
|
|
345
|
+
if (!validateUTF8(fileBuffer)) {
|
|
346
|
+
throw new Error('File is not valid UTF-8');
|
|
347
|
+
}
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### 5. Handle Special Characters Correctly
|
|
351
|
+
|
|
352
|
+
```typescript
|
|
353
|
+
// ✅ CORRECT - SDK handles escaping automatically
|
|
354
|
+
const data = {
|
|
355
|
+
name: "O'Reilly & Associates",
|
|
356
|
+
notes: 'Price < $10'
|
|
357
|
+
};
|
|
358
|
+
// SDK automatically escapes when building XML/GraphQL
|
|
359
|
+
|
|
360
|
+
// ❌ WRONG - Manual escaping not needed
|
|
361
|
+
const data = {
|
|
362
|
+
name: "O'Reilly & Associates", // Double-escaped!
|
|
363
|
+
notes: 'Price < $10'
|
|
364
|
+
};
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
## Common Issues and Solutions
|
|
368
|
+
|
|
369
|
+
### Issue 1: "Unexpected character" Error
|
|
370
|
+
|
|
371
|
+
**Symptom**:
|
|
372
|
+
```
|
|
373
|
+
FileParsingError: Unexpected character at position 0
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
**Cause**: BOM present at start of file
|
|
377
|
+
|
|
378
|
+
**Solution**: SDK automatically removes BOM - no action needed. If error persists, file may be corrupted.
|
|
379
|
+
|
|
380
|
+
### Issue 2: Garbled Characters in Output
|
|
381
|
+
|
|
382
|
+
**Symptom**:
|
|
383
|
+
```
|
|
384
|
+
Customer name: "José GarcÃa" // Should be "José García"
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
**Cause**: File saved as ISO-8859-1 but read as UTF-8
|
|
388
|
+
|
|
389
|
+
**Solution**: Re-save file as UTF-8 or convert encoding
|
|
390
|
+
|
|
391
|
+
### Issue 3: Special Characters Cause Parse Error
|
|
392
|
+
|
|
393
|
+
**Symptom**:
|
|
394
|
+
```
|
|
395
|
+
FileParsingError: Mismatched opening and closing tags
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
**Cause**: Unescaped `<` or `>` in text content
|
|
399
|
+
|
|
400
|
+
**Solution**: SDK automatically escapes when building XML. If parsing existing XML, ensure it's valid.
|
|
401
|
+
|
|
402
|
+
## Practice Exercise
|
|
403
|
+
|
|
404
|
+
Create a function that handles UTF-8 files with or without BOM:
|
|
405
|
+
|
|
406
|
+
```typescript
|
|
407
|
+
import { XMLParserService, FileParsingError } from '@fluentcommerce/fc-connect-sdk';
|
|
408
|
+
import { readFile } from 'fs/promises';
|
|
409
|
+
|
|
410
|
+
async function parseUTF8File(filePath: string) {
|
|
411
|
+
try {
|
|
412
|
+
// Read file as UTF-8
|
|
413
|
+
const content = await readFile(filePath, 'utf8');
|
|
414
|
+
|
|
415
|
+
// SDK automatically removes BOM if present
|
|
416
|
+
const parser = new XMLParserService();
|
|
417
|
+
const result = await parser.parse(content);
|
|
418
|
+
|
|
419
|
+
console.log('✅ File parsed successfully');
|
|
420
|
+
return result;
|
|
421
|
+
|
|
422
|
+
} catch (error) {
|
|
423
|
+
if (error instanceof FileParsingError) {
|
|
424
|
+
console.error('❌ Parse error:', {
|
|
425
|
+
code: error.code,
|
|
426
|
+
message: error.message,
|
|
427
|
+
fileName: error.fileName
|
|
428
|
+
});
|
|
429
|
+
|
|
430
|
+
// Provide helpful error message
|
|
431
|
+
if (error.code === 'ENCODING_ERROR') {
|
|
432
|
+
console.error('Hint: Ensure file is saved as UTF-8');
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
throw error;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
## Key Takeaways
|
|
441
|
+
|
|
442
|
+
- 🎯 SDK automatically removes UTF-8 BOM - no manual handling needed
|
|
443
|
+
- 🎯 All Unicode characters are supported (emoji, Chinese, Arabic, etc.)
|
|
444
|
+
- 🎯 XML special characters are automatically escaped when building XML
|
|
445
|
+
- 🎯 Files should be saved as UTF-8 encoding
|
|
446
|
+
- 🎯 Encoding errors are permanent - don't retry
|
|
447
|
+
- 🎯 Include encoding declaration in XML: `<?xml version="1.0" encoding="UTF-8"?>`
|
|
448
|
+
|
|
449
|
+
## Next Steps
|
|
450
|
+
|
|
451
|
+
Continue to [Module 4: Error Scenarios →](./error-handling-04-error-scenarios.md) to see real-world examples of error handling.
|
|
452
|
+
|
|
453
|
+
---
|
|
454
|
+
|
|
455
|
+
**Previous:** [← Module 2: Error Types](./error-handling-02-error-types.md)
|
|
456
|
+
**Next:** [Module 4: Error Scenarios →](./error-handling-04-error-scenarios.md)
|