@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,572 +1,572 @@
|
|
|
1
|
-
# Module 2: Quick Start
|
|
2
|
-
|
|
3
|
-
[← Back to Parquet Guide](../parquet-readme.md)
|
|
4
|
-
|
|
5
|
-
**Module 2 of 8** | **Level**: Beginner | **Time**: 15 minutes
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Overview
|
|
10
|
-
|
|
11
|
-
This module gets you up and running with ParquetParserService quickly. You'll parse your first Parquet file and understand basic usage patterns.
|
|
12
|
-
|
|
13
|
-
## Learning Objectives
|
|
14
|
-
|
|
15
|
-
By the end of this module, you will:
|
|
16
|
-
- ✅ Install the SDK and required dependencies
|
|
17
|
-
- ✅ Parse a simple Parquet file
|
|
18
|
-
- ✅ Understand basic configuration options
|
|
19
|
-
- ✅ View parsing statistics and performance metrics
|
|
20
|
-
- ✅ Process Parquet records
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Installation
|
|
25
|
-
|
|
26
|
-
The ParquetParserService is included in the FC Connect SDK with all dependencies:
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
npm install @fluentcommerce/fc-connect-sdk
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
**What's Included**:
|
|
33
|
-
- `ParquetParserService` - Main parser service
|
|
34
|
-
- `hyparquet` - High-performance Parquet library (dependency)
|
|
35
|
-
- `Logger` interface - Logging support (use `createConsoleLogger()` or pass your own)
|
|
36
|
-
|
|
37
|
-
No additional packages required for basic Parquet parsing.
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## Your First Parquet Parse
|
|
42
|
-
|
|
43
|
-
### Step 1: Import the Service
|
|
44
|
-
|
|
45
|
-
```typescript
|
|
46
|
-
import {
|
|
47
|
-
ParquetParserService,
|
|
48
|
-
createConsoleLogger,
|
|
49
|
-
toStructuredLogger
|
|
50
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### Step 2: Initialize the Parser
|
|
54
|
-
|
|
55
|
-
```typescript
|
|
56
|
-
import {
|
|
57
|
-
ParquetParserService,
|
|
58
|
-
createConsoleLogger,
|
|
59
|
-
toStructuredLogger
|
|
60
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
61
|
-
|
|
62
|
-
// Create a logger (optional but recommended)
|
|
63
|
-
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
64
|
-
logLevel: 'info'
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
// Create parser instance
|
|
68
|
-
const parser = new ParquetParserService(logger);
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Step 3: Parse a Parquet File
|
|
72
|
-
|
|
73
|
-
```typescript
|
|
74
|
-
import * as fs from 'fs/promises';
|
|
75
|
-
|
|
76
|
-
async function parseParquetFile(filePath: string) {
|
|
77
|
-
// Read file into buffer
|
|
78
|
-
const buffer = await fs.readFile(filePath);
|
|
79
|
-
|
|
80
|
-
// Convert Node.js Buffer to ArrayBuffer
|
|
81
|
-
const arrayBuffer = buffer.buffer.slice(
|
|
82
|
-
buffer.byteOffset,
|
|
83
|
-
buffer.byteOffset + buffer.byteLength
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
// Parse the Parquet file
|
|
87
|
-
const { records, stats } = await parser.parse(
|
|
88
|
-
arrayBuffer,
|
|
89
|
-
'inventory.parquet' // File name for logging
|
|
90
|
-
);
|
|
91
|
-
|
|
92
|
-
// Display results
|
|
93
|
-
console.log(`✅ Parsed ${stats.totalRecords} records`);
|
|
94
|
-
console.log(`⏱️ Processing time: ${stats.processingTimeMs}ms`);
|
|
95
|
-
console.log(`🚀 Throughput: ${stats.recordsPerSecond} records/sec`);
|
|
96
|
-
|
|
97
|
-
// Access records
|
|
98
|
-
records.forEach((record, index) => {
|
|
99
|
-
console.log(`Record ${index + 1}:`, record);
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
return records;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// Usage
|
|
106
|
-
parseParquetFile('./data/inventory.parquet')
|
|
107
|
-
.catch(console.error);
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Expected Output
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
✅ Parsed 10000 records
|
|
114
|
-
⏱️ Processing time: 285ms
|
|
115
|
-
🚀 Throughput: 35087 records/sec
|
|
116
|
-
Record 1: { ref: 'IP-001', productRef: 'SKU-001', locationRef: 'WH-001', qty: 100 }
|
|
117
|
-
Record 2: { ref: 'IP-002', productRef: 'SKU-002', locationRef: 'WH-001', qty: 50 }
|
|
118
|
-
...
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## Complete Working Example
|
|
124
|
-
|
|
125
|
-
Here's a complete, runnable script:
|
|
126
|
-
|
|
127
|
-
```typescript
|
|
128
|
-
import {
|
|
129
|
-
ParquetParserService,
|
|
130
|
-
createConsoleLogger,
|
|
131
|
-
toStructuredLogger
|
|
132
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
133
|
-
import * as fs from 'fs/promises';
|
|
134
|
-
import * as path from 'path';
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Simple Parquet file processor
|
|
138
|
-
* Business use case: Parse inventory Parquet files from S3
|
|
139
|
-
*/
|
|
140
|
-
async function main() {
|
|
141
|
-
console.log('🚀 Starting Parquet parser...\n');
|
|
142
|
-
|
|
143
|
-
// 1. Initialize services
|
|
144
|
-
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
145
|
-
logLevel: 'info'
|
|
146
|
-
});
|
|
147
|
-
const parser = new ParquetParserService(logger);
|
|
148
|
-
|
|
149
|
-
// 2. Read Parquet file
|
|
150
|
-
const filePath = path.join(__dirname, 'data', 'inventory.parquet');
|
|
151
|
-
const buffer = await fs.readFile(filePath);
|
|
152
|
-
const arrayBuffer = buffer.buffer.slice(
|
|
153
|
-
buffer.byteOffset,
|
|
154
|
-
buffer.byteOffset + buffer.byteLength
|
|
155
|
-
);
|
|
156
|
-
|
|
157
|
-
console.log(`📂 File: ${filePath}`);
|
|
158
|
-
console.log(`📦 Size: ${(buffer.length / 1024).toFixed(2)} KB\n`);
|
|
159
|
-
|
|
160
|
-
// 3. Parse with basic options
|
|
161
|
-
const result = await parser.parse(
|
|
162
|
-
arrayBuffer,
|
|
163
|
-
'inventory.parquet',
|
|
164
|
-
{
|
|
165
|
-
batchSize: 1000 // Process in batches of 1000
|
|
166
|
-
}
|
|
167
|
-
);
|
|
168
|
-
|
|
169
|
-
// 4. Display statistics
|
|
170
|
-
console.log('📊 Parsing Statistics:');
|
|
171
|
-
console.log(` Total Records: ${result.stats.totalRecords}`);
|
|
172
|
-
console.log(` Processing Time: ${result.stats.processingTimeMs}ms`);
|
|
173
|
-
console.log(` Throughput: ${result.stats.recordsPerSecond.toLocaleString()} rec/sec`);
|
|
174
|
-
console.log(` Batches Processed: ${result.stats.batchesProcessed}`);
|
|
175
|
-
console.log(` Peak Memory: ${(result.stats.peakMemoryUsage / 1024 / 1024).toFixed(2)} MB\n`);
|
|
176
|
-
|
|
177
|
-
// 5. Examine column statistics
|
|
178
|
-
console.log('📋 Column Statistics:');
|
|
179
|
-
for (const [columnName, columnStats] of Object.entries(result.stats.columnStats)) {
|
|
180
|
-
console.log(` ${columnName}:`);
|
|
181
|
-
console.log(` Type: ${columnStats.type}`);
|
|
182
|
-
console.log(` Nulls: ${columnStats.nullCount}`);
|
|
183
|
-
console.log(` Unique Values: ${columnStats.uniqueValues}`);
|
|
184
|
-
|
|
185
|
-
if (columnStats.minValue !== undefined) {
|
|
186
|
-
console.log(` Min: ${columnStats.minValue}`);
|
|
187
|
-
console.log(` Max: ${columnStats.maxValue}`);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// 6. Process first few records
|
|
192
|
-
console.log('\n📝 Sample Records (first 5):');
|
|
193
|
-
result.records.slice(0, 5).forEach((record, index) => {
|
|
194
|
-
console.log(` ${index + 1}. ${JSON.stringify(record)}`);
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
console.log('\n✅ Complete!');
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// Run the script
|
|
201
|
-
main().catch((error) => {
|
|
202
|
-
console.error('❌ Error:', error.message);
|
|
203
|
-
process.exit(1);
|
|
204
|
-
});
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
---
|
|
208
|
-
|
|
209
|
-
## Configuration Options
|
|
210
|
-
|
|
211
|
-
### Basic Configuration
|
|
212
|
-
|
|
213
|
-
```typescript
|
|
214
|
-
const parser = new ParquetParserService(logger, {
|
|
215
|
-
batchSize: 1000, // Records per batch
|
|
216
|
-
maxFileSize: 100 * 1024 * 1024, // 100 MB max file size
|
|
217
|
-
enableStreaming: true // Enable streaming mode
|
|
218
|
-
});
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
### Parsing Options
|
|
222
|
-
|
|
223
|
-
```typescript
|
|
224
|
-
const { records, stats } = await parser.parse(
|
|
225
|
-
arrayBuffer,
|
|
226
|
-
'inventory.parquet',
|
|
227
|
-
{
|
|
228
|
-
// Batch size for this specific parse operation
|
|
229
|
-
batchSize: 500,
|
|
230
|
-
|
|
231
|
-
// Validation options
|
|
232
|
-
validation: {
|
|
233
|
-
enabled: true,
|
|
234
|
-
requiredColumns: ['productRef', 'locationRef', 'qty'],
|
|
235
|
-
columnTypes: {
|
|
236
|
-
productRef: 'string',
|
|
237
|
-
locationRef: 'string',
|
|
238
|
-
qty: 'int32'
|
|
239
|
-
},
|
|
240
|
-
allowAdditionalColumns: true
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
);
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
### Configuration Reference
|
|
247
|
-
|
|
248
|
-
| Option | Type | Default | Description |
|
|
249
|
-
|--------|------|---------|-------------|
|
|
250
|
-
| `batchSize` | number | 1000 | Records processed per batch |
|
|
251
|
-
| `maxFileSize` | number | 100 MB | Maximum file size allowed |
|
|
252
|
-
| `enableStreaming` | boolean | true | Enable streaming mode |
|
|
253
|
-
| `validation.enabled` | boolean | false | Enable validation |
|
|
254
|
-
| `validation.requiredColumns` | string[] | [] | Required column names |
|
|
255
|
-
| `validation.columnTypes` | object | {} | Expected column types |
|
|
256
|
-
| `validation.allowAdditionalColumns` | boolean | true | Allow extra columns |
|
|
257
|
-
|
|
258
|
-
---
|
|
259
|
-
|
|
260
|
-
## Understanding Parse Results
|
|
261
|
-
|
|
262
|
-
### Result Structure
|
|
263
|
-
|
|
264
|
-
```typescript
|
|
265
|
-
interface ParquetParseResult {
|
|
266
|
-
records: any[]; // Parsed records
|
|
267
|
-
stats: ParsingStats; // Statistics and metrics
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
interface ParsingStats {
|
|
271
|
-
// Core metrics
|
|
272
|
-
totalRecords: number;
|
|
273
|
-
processingTimeMs: number;
|
|
274
|
-
recordsPerSecond: number;
|
|
275
|
-
fileSizeBytes: number;
|
|
276
|
-
|
|
277
|
-
// Processing info
|
|
278
|
-
batchesProcessed: number;
|
|
279
|
-
peakMemoryUsage: number;
|
|
280
|
-
|
|
281
|
-
// Column statistics
|
|
282
|
-
columnStats: {
|
|
283
|
-
[columnName: string]: {
|
|
284
|
-
type: string;
|
|
285
|
-
nullCount: number;
|
|
286
|
-
uniqueValues: number;
|
|
287
|
-
minValue?: any;
|
|
288
|
-
maxValue?: any;
|
|
289
|
-
}
|
|
290
|
-
};
|
|
291
|
-
|
|
292
|
-
// Validation results (if enabled)
|
|
293
|
-
validation?: {
|
|
294
|
-
isValid: boolean;
|
|
295
|
-
errors: Array<{ field: string; message: string }>;
|
|
296
|
-
warnings: Array<{ field: string; message: string }>;
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
### Accessing Statistics
|
|
302
|
-
|
|
303
|
-
```typescript
|
|
304
|
-
const { records, stats } = await parser.parse(arrayBuffer, fileName);
|
|
305
|
-
|
|
306
|
-
// Performance metrics
|
|
307
|
-
console.log(`Processed ${stats.totalRecords} records in ${stats.processingTimeMs}ms`);
|
|
308
|
-
console.log(`Throughput: ${stats.recordsPerSecond} records/sec`);
|
|
309
|
-
|
|
310
|
-
// Memory usage
|
|
311
|
-
console.log(`Peak memory: ${stats.peakMemoryUsage / 1024 / 1024}MB`);
|
|
312
|
-
|
|
313
|
-
// Column information
|
|
314
|
-
Object.keys(stats.columnStats).forEach(columnName => {
|
|
315
|
-
const col = stats.columnStats[columnName];
|
|
316
|
-
console.log(`${columnName}: ${col.type}, ${col.nullCount} nulls`);
|
|
317
|
-
});
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
---
|
|
321
|
-
|
|
322
|
-
## Working with Test Files
|
|
323
|
-
|
|
324
|
-
The SDK includes test files for development:
|
|
325
|
-
|
|
326
|
-
### Available Test Files
|
|
327
|
-
|
|
328
|
-
Located in `fc-connect-sdk/tests/fixtures/parquet/`:
|
|
329
|
-
|
|
330
|
-
```typescript
|
|
331
|
-
import * as path from 'path';
|
|
332
|
-
|
|
333
|
-
// Test file patterns
|
|
334
|
-
const testFiles = {
|
|
335
|
-
// Small test files
|
|
336
|
-
tiny: 'single-record.parquet', // 1 record, 1.8 KB
|
|
337
|
-
small: 'inventory-position-small.parquet', // 50 records, 3-10 KB
|
|
338
|
-
|
|
339
|
-
// Medium test files
|
|
340
|
-
medium: 'inventory-position-medium.parquet', // 1,000 records, 170 KB
|
|
341
|
-
|
|
342
|
-
// Large test files
|
|
343
|
-
large: 'inventory-position-large.parquet', // 10,000 records, 1.7 MB
|
|
344
|
-
xlarge: 'inventory-position-50k.parquet', // 50,000 records, 8.5 MB
|
|
345
|
-
xxlarge: 'inventory-position-100k.parquet', // 100,000 records, 17 MB
|
|
346
|
-
|
|
347
|
-
// Performance test files
|
|
348
|
-
stress: 'inventory-position-500k.parquet', // 500,000 records, 85 MB
|
|
349
|
-
max: 'mixed-positions-1m.parquet' // 1,000,000 records, 169 MB
|
|
350
|
-
};
|
|
351
|
-
|
|
352
|
-
// Load a test file
|
|
353
|
-
const filePath = path.join(
|
|
354
|
-
'node_modules/@fluentcommerce/fc-connect-sdk/tests/fixtures/parquet',
|
|
355
|
-
testFiles.medium
|
|
356
|
-
);
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
### Test File Structure
|
|
360
|
-
|
|
361
|
-
All test files contain inventory-like data:
|
|
362
|
-
|
|
363
|
-
```typescript
|
|
364
|
-
// Record structure in test files
|
|
365
|
-
{
|
|
366
|
-
ref: string; // Position reference (e.g., "IP-001")
|
|
367
|
-
productRef: string; // Product SKU (e.g., "SKU-001")
|
|
368
|
-
locationRef: string; // Location code (e.g., "WH-001")
|
|
369
|
-
qty: number; // Quantity (integer)
|
|
370
|
-
status?: string; // Status (optional)
|
|
371
|
-
}
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
---
|
|
375
|
-
|
|
376
|
-
## Common Patterns
|
|
377
|
-
|
|
378
|
-
### Pattern 1: Basic File Processing
|
|
379
|
-
|
|
380
|
-
```typescript
|
|
381
|
-
async function processParquetFile(filePath: string) {
|
|
382
|
-
const parser = new ParquetParserService(logger);
|
|
383
|
-
|
|
384
|
-
const buffer = await fs.readFile(filePath);
|
|
385
|
-
const arrayBuffer = buffer.buffer.slice(
|
|
386
|
-
buffer.byteOffset,
|
|
387
|
-
buffer.byteOffset + buffer.byteLength
|
|
388
|
-
);
|
|
389
|
-
|
|
390
|
-
const { records, stats } = await parser.parse(arrayBuffer, filePath);
|
|
391
|
-
|
|
392
|
-
console.log(`Processed ${stats.totalRecords} records`);
|
|
393
|
-
return records;
|
|
394
|
-
}
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
### Pattern 2: Processing with Validation
|
|
398
|
-
|
|
399
|
-
```typescript
|
|
400
|
-
async function processWithValidation(filePath: string) {
|
|
401
|
-
const parser = new ParquetParserService(logger);
|
|
402
|
-
|
|
403
|
-
const buffer = await fs.readFile(filePath);
|
|
404
|
-
const arrayBuffer = buffer.buffer.slice(
|
|
405
|
-
buffer.byteOffset,
|
|
406
|
-
buffer.byteOffset + buffer.byteLength
|
|
407
|
-
);
|
|
408
|
-
|
|
409
|
-
const { records, stats } = await parser.parse(
|
|
410
|
-
arrayBuffer,
|
|
411
|
-
filePath,
|
|
412
|
-
{
|
|
413
|
-
validation: {
|
|
414
|
-
enabled: true,
|
|
415
|
-
requiredColumns: ['productRef', 'locationRef', 'qty'],
|
|
416
|
-
columnTypes: {
|
|
417
|
-
productRef: 'string',
|
|
418
|
-
locationRef: 'string',
|
|
419
|
-
qty: 'int32'
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
);
|
|
424
|
-
|
|
425
|
-
// Check validation
|
|
426
|
-
if (stats.validation && !stats.validation.isValid) {
|
|
427
|
-
console.error('Validation failed:');
|
|
428
|
-
stats.validation.errors.forEach(err => {
|
|
429
|
-
console.error(` ${err.field}: ${err.message}`);
|
|
430
|
-
});
|
|
431
|
-
throw new Error('Parquet validation failed');
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
return records;
|
|
435
|
-
}
|
|
436
|
-
```
|
|
437
|
-
|
|
438
|
-
### Pattern 3: Batch Processing
|
|
439
|
-
|
|
440
|
-
```typescript
|
|
441
|
-
async function processBatched(filePath: string, callback: (batch: any[]) => Promise<void>) {
|
|
442
|
-
const parser = new ParquetParserService(logger, {
|
|
443
|
-
batchSize: 500 // Small batches for controlled processing
|
|
444
|
-
});
|
|
445
|
-
|
|
446
|
-
const buffer = await fs.readFile(filePath);
|
|
447
|
-
const arrayBuffer = buffer.buffer.slice(
|
|
448
|
-
buffer.byteOffset,
|
|
449
|
-
buffer.byteOffset + buffer.byteLength
|
|
450
|
-
);
|
|
451
|
-
|
|
452
|
-
// Use streaming mode for large files
|
|
453
|
-
const streamResult = await parser.parseStreaming(arrayBuffer, filePath);
|
|
454
|
-
|
|
455
|
-
for await (const batch of streamResult.records) {
|
|
456
|
-
console.log(`Processing batch of ${batch.length} records`);
|
|
457
|
-
await callback(batch);
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
const stats = await streamResult.stats;
|
|
461
|
-
console.log(`Total: ${stats.totalRecords} records processed`);
|
|
462
|
-
}
|
|
463
|
-
```
|
|
464
|
-
|
|
465
|
-
---
|
|
466
|
-
|
|
467
|
-
## Error Handling
|
|
468
|
-
|
|
469
|
-
### Basic Error Handling
|
|
470
|
-
|
|
471
|
-
```typescript
|
|
472
|
-
async function safeParseParquet(filePath: string) {
|
|
473
|
-
const parser = new ParquetParserService(logger);
|
|
474
|
-
|
|
475
|
-
try {
|
|
476
|
-
const buffer = await fs.readFile(filePath);
|
|
477
|
-
const arrayBuffer = buffer.buffer.slice(
|
|
478
|
-
buffer.byteOffset,
|
|
479
|
-
buffer.byteOffset + buffer.byteLength
|
|
480
|
-
);
|
|
481
|
-
|
|
482
|
-
const { records, stats } = await parser.parse(arrayBuffer, filePath);
|
|
483
|
-
|
|
484
|
-
console.log(`✅ Success: ${stats.totalRecords} records`);
|
|
485
|
-
return records;
|
|
486
|
-
|
|
487
|
-
} catch (error: any) {
|
|
488
|
-
console.error(`❌ Parse failed:`, error.message);
|
|
489
|
-
|
|
490
|
-
// Check error type
|
|
491
|
-
if (error.code === 'PARSING_ERROR') {
|
|
492
|
-
console.error('Invalid Parquet file format');
|
|
493
|
-
} else if (error.code === 'VALIDATION_ERROR') {
|
|
494
|
-
console.error('Schema validation failed');
|
|
495
|
-
} else {
|
|
496
|
-
console.error('Unexpected error:', error);
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
throw error;
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
```
|
|
503
|
-
|
|
504
|
-
---
|
|
505
|
-
|
|
506
|
-
## Performance Tips
|
|
507
|
-
|
|
508
|
-
### 1. Choose Appropriate Batch Size
|
|
509
|
-
|
|
510
|
-
```typescript
|
|
511
|
-
// Small files (< 10 MB) - larger batches
|
|
512
|
-
const parser = new ParquetParserService(logger, {
|
|
513
|
-
batchSize: 5000
|
|
514
|
-
});
|
|
515
|
-
|
|
516
|
-
// Large files (> 100 MB) - smaller batches
|
|
517
|
-
const parser = new ParquetParserService(logger, {
|
|
518
|
-
batchSize: 500
|
|
519
|
-
});
|
|
520
|
-
```
|
|
521
|
-
|
|
522
|
-
### 2. Enable Streaming for Large Files
|
|
523
|
-
|
|
524
|
-
```typescript
|
|
525
|
-
// For files > 50 MB, use streaming
|
|
526
|
-
if (fileSize > 50 * 1024 * 1024) {
|
|
527
|
-
const streamResult = await parser.parseStreaming(arrayBuffer, fileName);
|
|
528
|
-
|
|
529
|
-
for await (const batch of streamResult.records) {
|
|
530
|
-
// Process batch
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
```
|
|
534
|
-
|
|
535
|
-
### 3. Disable Validation for Performance
|
|
536
|
-
|
|
537
|
-
```typescript
|
|
538
|
-
// Skip validation for speed (production with trusted sources)
|
|
539
|
-
const { records, stats } = await parser.parse(
|
|
540
|
-
arrayBuffer,
|
|
541
|
-
fileName,
|
|
542
|
-
{
|
|
543
|
-
validation: { enabled: false } // Faster processing
|
|
544
|
-
}
|
|
545
|
-
);
|
|
546
|
-
```
|
|
547
|
-
|
|
548
|
-
---
|
|
549
|
-
|
|
550
|
-
## Key Takeaways
|
|
551
|
-
|
|
552
|
-
- 🎯 **Simple API** - Just `parse(arrayBuffer, fileName)`
|
|
553
|
-
- 🎯 **Rich statistics** - Performance metrics, column stats, validation results
|
|
554
|
-
- 🎯 **Flexible configuration** - Batch size, validation, streaming
|
|
555
|
-
- 🎯 **Error handling** - Built-in error codes for different failure types
|
|
556
|
-
- 🎯 **Test files available** - Use SDK test fixtures for development
|
|
557
|
-
|
|
558
|
-
---
|
|
559
|
-
|
|
560
|
-
## Next Steps
|
|
561
|
-
|
|
562
|
-
Continue to [Module 3: Reading Parquet](./03-pattern-guides-parquet-03-reading-parquet.md) to learn advanced parsing techniques including streaming, filtering, and memory optimization.
|
|
563
|
-
|
|
564
|
-
---
|
|
565
|
-
|
|
566
|
-
[← Previous: Module 1 - Introduction](.././modules/03-pattern-guides-parquet-01-introduction.md) | [Back to Guide](../parquet-readme.md) | [Next: Module 3 - Reading Parquet →](./03-pattern-guides-parquet-03-reading-parquet.md)
|
|
567
|
-
|
|
568
|
-
## Related Documentation
|
|
569
|
-
|
|
570
|
-
- [Module 3: Reading Parquet](./03-pattern-guides-parquet-03-reading-parquet.md) - Advanced reading patterns
|
|
571
|
-
- [Module 8: Best Practices](./03-pattern-guides-parquet-08-best-practices.md) - Production patterns
|
|
572
|
-
- [Data Sources Guide](../../../02-CORE-GUIDES/data-sources/data-sources-readme.md) - S3 integration
|
|
1
|
+
# Module 2: Quick Start
|
|
2
|
+
|
|
3
|
+
[← Back to Parquet Guide](../parquet-readme.md)
|
|
4
|
+
|
|
5
|
+
**Module 2 of 8** | **Level**: Beginner | **Time**: 15 minutes
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
This module gets you up and running with ParquetParserService quickly. You'll parse your first Parquet file and understand basic usage patterns.
|
|
12
|
+
|
|
13
|
+
## Learning Objectives
|
|
14
|
+
|
|
15
|
+
By the end of this module, you will:
|
|
16
|
+
- ✅ Install the SDK and required dependencies
|
|
17
|
+
- ✅ Parse a simple Parquet file
|
|
18
|
+
- ✅ Understand basic configuration options
|
|
19
|
+
- ✅ View parsing statistics and performance metrics
|
|
20
|
+
- ✅ Process Parquet records
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Installation
|
|
25
|
+
|
|
26
|
+
The ParquetParserService is included in the FC Connect SDK with all dependencies:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm install @fluentcommerce/fc-connect-sdk
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**What's Included**:
|
|
33
|
+
- `ParquetParserService` - Main parser service
|
|
34
|
+
- `hyparquet` - High-performance Parquet library (dependency)
|
|
35
|
+
- `Logger` interface - Logging support (use `createConsoleLogger()` or pass your own)
|
|
36
|
+
|
|
37
|
+
No additional packages required for basic Parquet parsing.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Your First Parquet Parse
|
|
42
|
+
|
|
43
|
+
### Step 1: Import the Service
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
import {
|
|
47
|
+
ParquetParserService,
|
|
48
|
+
createConsoleLogger,
|
|
49
|
+
toStructuredLogger
|
|
50
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Step 2: Initialize the Parser
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
import {
|
|
57
|
+
ParquetParserService,
|
|
58
|
+
createConsoleLogger,
|
|
59
|
+
toStructuredLogger
|
|
60
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
61
|
+
|
|
62
|
+
// Create a logger (optional but recommended)
|
|
63
|
+
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
64
|
+
logLevel: 'info'
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
// Create parser instance
|
|
68
|
+
const parser = new ParquetParserService(logger);
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Step 3: Parse a Parquet File
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
import * as fs from 'fs/promises';
|
|
75
|
+
|
|
76
|
+
async function parseParquetFile(filePath: string) {
|
|
77
|
+
// Read file into buffer
|
|
78
|
+
const buffer = await fs.readFile(filePath);
|
|
79
|
+
|
|
80
|
+
// Convert Node.js Buffer to ArrayBuffer
|
|
81
|
+
const arrayBuffer = buffer.buffer.slice(
|
|
82
|
+
buffer.byteOffset,
|
|
83
|
+
buffer.byteOffset + buffer.byteLength
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
// Parse the Parquet file
|
|
87
|
+
const { records, stats } = await parser.parse(
|
|
88
|
+
arrayBuffer,
|
|
89
|
+
'inventory.parquet' // File name for logging
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
// Display results
|
|
93
|
+
console.log(`✅ Parsed ${stats.totalRecords} records`);
|
|
94
|
+
console.log(`⏱️ Processing time: ${stats.processingTimeMs}ms`);
|
|
95
|
+
console.log(`🚀 Throughput: ${stats.recordsPerSecond} records/sec`);
|
|
96
|
+
|
|
97
|
+
// Access records
|
|
98
|
+
records.forEach((record, index) => {
|
|
99
|
+
console.log(`Record ${index + 1}:`, record);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
return records;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Usage
|
|
106
|
+
parseParquetFile('./data/inventory.parquet')
|
|
107
|
+
.catch(console.error);
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Expected Output
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
✅ Parsed 10000 records
|
|
114
|
+
⏱️ Processing time: 285ms
|
|
115
|
+
🚀 Throughput: 35087 records/sec
|
|
116
|
+
Record 1: { ref: 'IP-001', productRef: 'SKU-001', locationRef: 'WH-001', qty: 100 }
|
|
117
|
+
Record 2: { ref: 'IP-002', productRef: 'SKU-002', locationRef: 'WH-001', qty: 50 }
|
|
118
|
+
...
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Complete Working Example
|
|
124
|
+
|
|
125
|
+
Here's a complete, runnable script:
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
import {
|
|
129
|
+
ParquetParserService,
|
|
130
|
+
createConsoleLogger,
|
|
131
|
+
toStructuredLogger
|
|
132
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
133
|
+
import * as fs from 'fs/promises';
|
|
134
|
+
import * as path from 'path';
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Simple Parquet file processor
|
|
138
|
+
* Business use case: Parse inventory Parquet files from S3
|
|
139
|
+
*/
|
|
140
|
+
async function main() {
|
|
141
|
+
console.log('🚀 Starting Parquet parser...\n');
|
|
142
|
+
|
|
143
|
+
// 1. Initialize services
|
|
144
|
+
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
145
|
+
logLevel: 'info'
|
|
146
|
+
});
|
|
147
|
+
const parser = new ParquetParserService(logger);
|
|
148
|
+
|
|
149
|
+
// 2. Read Parquet file
|
|
150
|
+
const filePath = path.join(__dirname, 'data', 'inventory.parquet');
|
|
151
|
+
const buffer = await fs.readFile(filePath);
|
|
152
|
+
const arrayBuffer = buffer.buffer.slice(
|
|
153
|
+
buffer.byteOffset,
|
|
154
|
+
buffer.byteOffset + buffer.byteLength
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
console.log(`📂 File: ${filePath}`);
|
|
158
|
+
console.log(`📦 Size: ${(buffer.length / 1024).toFixed(2)} KB\n`);
|
|
159
|
+
|
|
160
|
+
// 3. Parse with basic options
|
|
161
|
+
const result = await parser.parse(
|
|
162
|
+
arrayBuffer,
|
|
163
|
+
'inventory.parquet',
|
|
164
|
+
{
|
|
165
|
+
batchSize: 1000 // Process in batches of 1000
|
|
166
|
+
}
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
// 4. Display statistics
|
|
170
|
+
console.log('📊 Parsing Statistics:');
|
|
171
|
+
console.log(` Total Records: ${result.stats.totalRecords}`);
|
|
172
|
+
console.log(` Processing Time: ${result.stats.processingTimeMs}ms`);
|
|
173
|
+
console.log(` Throughput: ${result.stats.recordsPerSecond.toLocaleString()} rec/sec`);
|
|
174
|
+
console.log(` Batches Processed: ${result.stats.batchesProcessed}`);
|
|
175
|
+
console.log(` Peak Memory: ${(result.stats.peakMemoryUsage / 1024 / 1024).toFixed(2)} MB\n`);
|
|
176
|
+
|
|
177
|
+
// 5. Examine column statistics
|
|
178
|
+
console.log('📋 Column Statistics:');
|
|
179
|
+
for (const [columnName, columnStats] of Object.entries(result.stats.columnStats)) {
|
|
180
|
+
console.log(` ${columnName}:`);
|
|
181
|
+
console.log(` Type: ${columnStats.type}`);
|
|
182
|
+
console.log(` Nulls: ${columnStats.nullCount}`);
|
|
183
|
+
console.log(` Unique Values: ${columnStats.uniqueValues}`);
|
|
184
|
+
|
|
185
|
+
if (columnStats.minValue !== undefined) {
|
|
186
|
+
console.log(` Min: ${columnStats.minValue}`);
|
|
187
|
+
console.log(` Max: ${columnStats.maxValue}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// 6. Process first few records
|
|
192
|
+
console.log('\n📝 Sample Records (first 5):');
|
|
193
|
+
result.records.slice(0, 5).forEach((record, index) => {
|
|
194
|
+
console.log(` ${index + 1}. ${JSON.stringify(record)}`);
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
console.log('\n✅ Complete!');
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Run the script
|
|
201
|
+
main().catch((error) => {
|
|
202
|
+
console.error('❌ Error:', error.message);
|
|
203
|
+
process.exit(1);
|
|
204
|
+
});
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Configuration Options
|
|
210
|
+
|
|
211
|
+
### Basic Configuration
|
|
212
|
+
|
|
213
|
+
```typescript
|
|
214
|
+
const parser = new ParquetParserService(logger, {
|
|
215
|
+
batchSize: 1000, // Records per batch
|
|
216
|
+
maxFileSize: 100 * 1024 * 1024, // 100 MB max file size
|
|
217
|
+
enableStreaming: true // Enable streaming mode
|
|
218
|
+
});
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Parsing Options
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
const { records, stats } = await parser.parse(
|
|
225
|
+
arrayBuffer,
|
|
226
|
+
'inventory.parquet',
|
|
227
|
+
{
|
|
228
|
+
// Batch size for this specific parse operation
|
|
229
|
+
batchSize: 500,
|
|
230
|
+
|
|
231
|
+
// Validation options
|
|
232
|
+
validation: {
|
|
233
|
+
enabled: true,
|
|
234
|
+
requiredColumns: ['productRef', 'locationRef', 'qty'],
|
|
235
|
+
columnTypes: {
|
|
236
|
+
productRef: 'string',
|
|
237
|
+
locationRef: 'string',
|
|
238
|
+
qty: 'int32'
|
|
239
|
+
},
|
|
240
|
+
allowAdditionalColumns: true
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
);
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Configuration Reference
|
|
247
|
+
|
|
248
|
+
| Option | Type | Default | Description |
|
|
249
|
+
|--------|------|---------|-------------|
|
|
250
|
+
| `batchSize` | number | 1000 | Records processed per batch |
|
|
251
|
+
| `maxFileSize` | number | 100 MB | Maximum file size allowed |
|
|
252
|
+
| `enableStreaming` | boolean | true | Enable streaming mode |
|
|
253
|
+
| `validation.enabled` | boolean | false | Enable validation |
|
|
254
|
+
| `validation.requiredColumns` | string[] | [] | Required column names |
|
|
255
|
+
| `validation.columnTypes` | object | {} | Expected column types |
|
|
256
|
+
| `validation.allowAdditionalColumns` | boolean | true | Allow extra columns |
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Understanding Parse Results
|
|
261
|
+
|
|
262
|
+
### Result Structure
|
|
263
|
+
|
|
264
|
+
```typescript
|
|
265
|
+
interface ParquetParseResult {
|
|
266
|
+
records: any[]; // Parsed records
|
|
267
|
+
stats: ParsingStats; // Statistics and metrics
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
interface ParsingStats {
|
|
271
|
+
// Core metrics
|
|
272
|
+
totalRecords: number;
|
|
273
|
+
processingTimeMs: number;
|
|
274
|
+
recordsPerSecond: number;
|
|
275
|
+
fileSizeBytes: number;
|
|
276
|
+
|
|
277
|
+
// Processing info
|
|
278
|
+
batchesProcessed: number;
|
|
279
|
+
peakMemoryUsage: number;
|
|
280
|
+
|
|
281
|
+
// Column statistics
|
|
282
|
+
columnStats: {
|
|
283
|
+
[columnName: string]: {
|
|
284
|
+
type: string;
|
|
285
|
+
nullCount: number;
|
|
286
|
+
uniqueValues: number;
|
|
287
|
+
minValue?: any;
|
|
288
|
+
maxValue?: any;
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
// Validation results (if enabled)
|
|
293
|
+
validation?: {
|
|
294
|
+
isValid: boolean;
|
|
295
|
+
errors: Array<{ field: string; message: string }>;
|
|
296
|
+
warnings: Array<{ field: string; message: string }>;
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### Accessing Statistics
|
|
302
|
+
|
|
303
|
+
```typescript
|
|
304
|
+
const { records, stats } = await parser.parse(arrayBuffer, fileName);
|
|
305
|
+
|
|
306
|
+
// Performance metrics
|
|
307
|
+
console.log(`Processed ${stats.totalRecords} records in ${stats.processingTimeMs}ms`);
|
|
308
|
+
console.log(`Throughput: ${stats.recordsPerSecond} records/sec`);
|
|
309
|
+
|
|
310
|
+
// Memory usage
|
|
311
|
+
console.log(`Peak memory: ${stats.peakMemoryUsage / 1024 / 1024}MB`);
|
|
312
|
+
|
|
313
|
+
// Column information
|
|
314
|
+
Object.keys(stats.columnStats).forEach(columnName => {
|
|
315
|
+
const col = stats.columnStats[columnName];
|
|
316
|
+
console.log(`${columnName}: ${col.type}, ${col.nullCount} nulls`);
|
|
317
|
+
});
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## Working with Test Files
|
|
323
|
+
|
|
324
|
+
The SDK includes test files for development:
|
|
325
|
+
|
|
326
|
+
### Available Test Files
|
|
327
|
+
|
|
328
|
+
Located in `fc-connect-sdk/tests/fixtures/parquet/`:
|
|
329
|
+
|
|
330
|
+
```typescript
|
|
331
|
+
import * as path from 'path';
|
|
332
|
+
|
|
333
|
+
// Test file patterns
|
|
334
|
+
const testFiles = {
|
|
335
|
+
// Small test files
|
|
336
|
+
tiny: 'single-record.parquet', // 1 record, 1.8 KB
|
|
337
|
+
small: 'inventory-position-small.parquet', // 50 records, 3-10 KB
|
|
338
|
+
|
|
339
|
+
// Medium test files
|
|
340
|
+
medium: 'inventory-position-medium.parquet', // 1,000 records, 170 KB
|
|
341
|
+
|
|
342
|
+
// Large test files
|
|
343
|
+
large: 'inventory-position-large.parquet', // 10,000 records, 1.7 MB
|
|
344
|
+
xlarge: 'inventory-position-50k.parquet', // 50,000 records, 8.5 MB
|
|
345
|
+
xxlarge: 'inventory-position-100k.parquet', // 100,000 records, 17 MB
|
|
346
|
+
|
|
347
|
+
// Performance test files
|
|
348
|
+
stress: 'inventory-position-500k.parquet', // 500,000 records, 85 MB
|
|
349
|
+
max: 'mixed-positions-1m.parquet' // 1,000,000 records, 169 MB
|
|
350
|
+
};
|
|
351
|
+
|
|
352
|
+
// Load a test file
|
|
353
|
+
const filePath = path.join(
|
|
354
|
+
'node_modules/@fluentcommerce/fc-connect-sdk/tests/fixtures/parquet',
|
|
355
|
+
testFiles.medium
|
|
356
|
+
);
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### Test File Structure
|
|
360
|
+
|
|
361
|
+
All test files contain inventory-like data:
|
|
362
|
+
|
|
363
|
+
```typescript
|
|
364
|
+
// Record structure in test files
|
|
365
|
+
{
|
|
366
|
+
ref: string; // Position reference (e.g., "IP-001")
|
|
367
|
+
productRef: string; // Product SKU (e.g., "SKU-001")
|
|
368
|
+
locationRef: string; // Location code (e.g., "WH-001")
|
|
369
|
+
qty: number; // Quantity (integer)
|
|
370
|
+
status?: string; // Status (optional)
|
|
371
|
+
}
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
376
|
+
## Common Patterns
|
|
377
|
+
|
|
378
|
+
### Pattern 1: Basic File Processing
|
|
379
|
+
|
|
380
|
+
```typescript
|
|
381
|
+
async function processParquetFile(filePath: string) {
|
|
382
|
+
const parser = new ParquetParserService(logger);
|
|
383
|
+
|
|
384
|
+
const buffer = await fs.readFile(filePath);
|
|
385
|
+
const arrayBuffer = buffer.buffer.slice(
|
|
386
|
+
buffer.byteOffset,
|
|
387
|
+
buffer.byteOffset + buffer.byteLength
|
|
388
|
+
);
|
|
389
|
+
|
|
390
|
+
const { records, stats } = await parser.parse(arrayBuffer, filePath);
|
|
391
|
+
|
|
392
|
+
console.log(`Processed ${stats.totalRecords} records`);
|
|
393
|
+
return records;
|
|
394
|
+
}
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### Pattern 2: Processing with Validation
|
|
398
|
+
|
|
399
|
+
```typescript
|
|
400
|
+
async function processWithValidation(filePath: string) {
|
|
401
|
+
const parser = new ParquetParserService(logger);
|
|
402
|
+
|
|
403
|
+
const buffer = await fs.readFile(filePath);
|
|
404
|
+
const arrayBuffer = buffer.buffer.slice(
|
|
405
|
+
buffer.byteOffset,
|
|
406
|
+
buffer.byteOffset + buffer.byteLength
|
|
407
|
+
);
|
|
408
|
+
|
|
409
|
+
const { records, stats } = await parser.parse(
|
|
410
|
+
arrayBuffer,
|
|
411
|
+
filePath,
|
|
412
|
+
{
|
|
413
|
+
validation: {
|
|
414
|
+
enabled: true,
|
|
415
|
+
requiredColumns: ['productRef', 'locationRef', 'qty'],
|
|
416
|
+
columnTypes: {
|
|
417
|
+
productRef: 'string',
|
|
418
|
+
locationRef: 'string',
|
|
419
|
+
qty: 'int32'
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
);
|
|
424
|
+
|
|
425
|
+
// Check validation
|
|
426
|
+
if (stats.validation && !stats.validation.isValid) {
|
|
427
|
+
console.error('Validation failed:');
|
|
428
|
+
stats.validation.errors.forEach(err => {
|
|
429
|
+
console.error(` ${err.field}: ${err.message}`);
|
|
430
|
+
});
|
|
431
|
+
throw new Error('Parquet validation failed');
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
return records;
|
|
435
|
+
}
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### Pattern 3: Batch Processing
|
|
439
|
+
|
|
440
|
+
```typescript
|
|
441
|
+
async function processBatched(filePath: string, callback: (batch: any[]) => Promise<void>) {
|
|
442
|
+
const parser = new ParquetParserService(logger, {
|
|
443
|
+
batchSize: 500 // Small batches for controlled processing
|
|
444
|
+
});
|
|
445
|
+
|
|
446
|
+
const buffer = await fs.readFile(filePath);
|
|
447
|
+
const arrayBuffer = buffer.buffer.slice(
|
|
448
|
+
buffer.byteOffset,
|
|
449
|
+
buffer.byteOffset + buffer.byteLength
|
|
450
|
+
);
|
|
451
|
+
|
|
452
|
+
// Use streaming mode for large files
|
|
453
|
+
const streamResult = await parser.parseStreaming(arrayBuffer, filePath);
|
|
454
|
+
|
|
455
|
+
for await (const batch of streamResult.records) {
|
|
456
|
+
console.log(`Processing batch of ${batch.length} records`);
|
|
457
|
+
await callback(batch);
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
const stats = await streamResult.stats;
|
|
461
|
+
console.log(`Total: ${stats.totalRecords} records processed`);
|
|
462
|
+
}
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
---
|
|
466
|
+
|
|
467
|
+
## Error Handling
|
|
468
|
+
|
|
469
|
+
### Basic Error Handling
|
|
470
|
+
|
|
471
|
+
```typescript
|
|
472
|
+
async function safeParseParquet(filePath: string) {
|
|
473
|
+
const parser = new ParquetParserService(logger);
|
|
474
|
+
|
|
475
|
+
try {
|
|
476
|
+
const buffer = await fs.readFile(filePath);
|
|
477
|
+
const arrayBuffer = buffer.buffer.slice(
|
|
478
|
+
buffer.byteOffset,
|
|
479
|
+
buffer.byteOffset + buffer.byteLength
|
|
480
|
+
);
|
|
481
|
+
|
|
482
|
+
const { records, stats } = await parser.parse(arrayBuffer, filePath);
|
|
483
|
+
|
|
484
|
+
console.log(`✅ Success: ${stats.totalRecords} records`);
|
|
485
|
+
return records;
|
|
486
|
+
|
|
487
|
+
} catch (error: any) {
|
|
488
|
+
console.error(`❌ Parse failed:`, error.message);
|
|
489
|
+
|
|
490
|
+
// Check error type
|
|
491
|
+
if (error.code === 'PARSING_ERROR') {
|
|
492
|
+
console.error('Invalid Parquet file format');
|
|
493
|
+
} else if (error.code === 'VALIDATION_ERROR') {
|
|
494
|
+
console.error('Schema validation failed');
|
|
495
|
+
} else {
|
|
496
|
+
console.error('Unexpected error:', error);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
throw error;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
506
|
+
## Performance Tips
|
|
507
|
+
|
|
508
|
+
### 1. Choose Appropriate Batch Size
|
|
509
|
+
|
|
510
|
+
```typescript
|
|
511
|
+
// Small files (< 10 MB) - larger batches
|
|
512
|
+
const parser = new ParquetParserService(logger, {
|
|
513
|
+
batchSize: 5000
|
|
514
|
+
});
|
|
515
|
+
|
|
516
|
+
// Large files (> 100 MB) - smaller batches
|
|
517
|
+
const parser = new ParquetParserService(logger, {
|
|
518
|
+
batchSize: 500
|
|
519
|
+
});
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
### 2. Enable Streaming for Large Files
|
|
523
|
+
|
|
524
|
+
```typescript
|
|
525
|
+
// For files > 50 MB, use streaming
|
|
526
|
+
if (fileSize > 50 * 1024 * 1024) {
|
|
527
|
+
const streamResult = await parser.parseStreaming(arrayBuffer, fileName);
|
|
528
|
+
|
|
529
|
+
for await (const batch of streamResult.records) {
|
|
530
|
+
// Process batch
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
### 3. Disable Validation for Performance
|
|
536
|
+
|
|
537
|
+
```typescript
|
|
538
|
+
// Skip validation for speed (production with trusted sources)
|
|
539
|
+
const { records, stats } = await parser.parse(
|
|
540
|
+
arrayBuffer,
|
|
541
|
+
fileName,
|
|
542
|
+
{
|
|
543
|
+
validation: { enabled: false } // Faster processing
|
|
544
|
+
}
|
|
545
|
+
);
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
---
|
|
549
|
+
|
|
550
|
+
## Key Takeaways
|
|
551
|
+
|
|
552
|
+
- 🎯 **Simple API** - Just `parse(arrayBuffer, fileName)`
|
|
553
|
+
- 🎯 **Rich statistics** - Performance metrics, column stats, validation results
|
|
554
|
+
- 🎯 **Flexible configuration** - Batch size, validation, streaming
|
|
555
|
+
- 🎯 **Error handling** - Built-in error codes for different failure types
|
|
556
|
+
- 🎯 **Test files available** - Use SDK test fixtures for development
|
|
557
|
+
|
|
558
|
+
---
|
|
559
|
+
|
|
560
|
+
## Next Steps
|
|
561
|
+
|
|
562
|
+
Continue to [Module 3: Reading Parquet](./03-pattern-guides-parquet-03-reading-parquet.md) to learn advanced parsing techniques including streaming, filtering, and memory optimization.
|
|
563
|
+
|
|
564
|
+
---
|
|
565
|
+
|
|
566
|
+
[← Previous: Module 1 - Introduction](.././modules/03-pattern-guides-parquet-01-introduction.md) | [Back to Guide](../parquet-readme.md) | [Next: Module 3 - Reading Parquet →](./03-pattern-guides-parquet-03-reading-parquet.md)
|
|
567
|
+
|
|
568
|
+
## Related Documentation
|
|
569
|
+
|
|
570
|
+
- [Module 3: Reading Parquet](./03-pattern-guides-parquet-03-reading-parquet.md) - Advanced reading patterns
|
|
571
|
+
- [Module 8: Best Practices](./03-pattern-guides-parquet-08-best-practices.md) - Production patterns
|
|
572
|
+
- [Data Sources Guide](../../../02-CORE-GUIDES/data-sources/data-sources-readme.md) - S3 integration
|