@aglyn/plugins-commerce 1.0.0-beta.230 → 1.0.0-beta.232
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/package.json +13 -13
- package/src/index.d.ts +0 -1
- package/src/index.js +0 -1
- package/src/index.js.map +1 -1
- package/src/lib/barcode/barcode-decode.d.ts +71 -0
- package/src/lib/barcode/barcode-decode.js +498 -0
- package/src/lib/barcode/barcode-decode.js.map +1 -0
- package/src/lib/barcode/barcode-encode.d.ts +44 -0
- package/src/lib/barcode/barcode-encode.js +138 -0
- package/src/lib/barcode/barcode-encode.js.map +1 -0
- package/src/lib/barcode/barcode-scanner.component.d.ts +23 -0
- package/src/lib/barcode/barcode-scanner.component.js +260 -0
- package/src/lib/barcode/barcode-scanner.component.js.map +1 -0
- package/src/lib/barcode/scan-button.component.d.ts +10 -0
- package/src/lib/barcode/scan-button.component.js +62 -0
- package/src/lib/barcode/scan-button.component.js.map +1 -0
- package/src/lib/barcode/scanner-wedge.d.ts +35 -0
- package/src/lib/barcode/scanner-wedge.js +108 -0
- package/src/lib/barcode/scanner-wedge.js.map +1 -0
- package/src/lib/components/account.js +10 -1
- package/src/lib/components/account.js.map +1 -1
- package/src/lib/components/cart-extras.d.ts +45 -0
- package/src/lib/components/cart-extras.js +127 -0
- package/src/lib/components/cart-extras.js.map +1 -0
- package/src/lib/components/cart.js +82 -15
- package/src/lib/components/cart.js.map +1 -1
- package/src/lib/components/checkout-return-notice.d.ts +26 -0
- package/src/lib/components/checkout-return-notice.js +48 -0
- package/src/lib/components/checkout-return-notice.js.map +1 -0
- package/src/lib/components/commerce-console-page.js +124 -0
- package/src/lib/components/commerce-console-page.js.map +1 -1
- package/src/lib/components/commerce-console-sections.d.ts +1 -1
- package/src/lib/components/commerce-console-sections.js +4 -0
- package/src/lib/components/commerce-console-sections.js.map +1 -1
- package/src/lib/components/console/bulk-fulfill.d.ts +44 -0
- package/src/lib/components/console/bulk-fulfill.js +84 -0
- package/src/lib/components/console/bulk-fulfill.js.map +1 -0
- package/src/lib/components/console/catalog-organization-card.component.js +1 -0
- package/src/lib/components/console/catalog-organization-card.component.js.map +1 -1
- package/src/lib/components/console/customer-notifications-card.component.d.ts +19 -0
- package/src/lib/components/console/customer-notifications-card.component.js +149 -0
- package/src/lib/components/console/customer-notifications-card.component.js.map +1 -0
- package/src/lib/components/console/host-orders-card.component.js +88 -6
- package/src/lib/components/console/host-orders-card.component.js.map +1 -1
- package/src/lib/components/console/locations-card.component.js +164 -57
- package/src/lib/components/console/locations-card.component.js.map +1 -1
- package/src/lib/components/console/order-detail-dialog.component.js +209 -61
- package/src/lib/components/console/order-detail-dialog.component.js.map +1 -1
- package/src/lib/components/console/order-fulfillment-panel.component.d.ts +48 -0
- package/src/lib/components/console/order-fulfillment-panel.component.js +542 -0
- package/src/lib/components/console/order-fulfillment-panel.component.js.map +1 -0
- package/src/lib/components/console/order-invoice.component.d.ts +33 -0
- package/src/lib/components/console/order-invoice.component.js +81 -0
- package/src/lib/components/console/order-invoice.component.js.map +1 -0
- package/src/lib/components/console/order-receipt-resend.component.d.ts +21 -0
- package/src/lib/components/console/order-receipt-resend.component.js +203 -0
- package/src/lib/components/console/order-receipt-resend.component.js.map +1 -0
- package/src/lib/components/console/order-returns.component.d.ts +36 -0
- package/src/lib/components/console/order-returns.component.js +142 -0
- package/src/lib/components/console/order-returns.component.js.map +1 -0
- package/src/lib/components/console/order-shipping-actions.component.d.ts +54 -0
- package/src/lib/components/console/order-shipping-actions.component.js +149 -0
- package/src/lib/components/console/order-shipping-actions.component.js.map +1 -0
- package/src/lib/components/console/order-webhooks-card.component.d.ts +50 -0
- package/src/lib/components/console/order-webhooks-card.component.js +623 -0
- package/src/lib/components/console/order-webhooks-card.component.js.map +1 -0
- package/src/lib/components/console/order-zones.d.ts +155 -0
- package/src/lib/components/console/order-zones.js +40 -0
- package/src/lib/components/console/order-zones.js.map +1 -0
- package/src/lib/components/console/payment-methods-card.component.d.ts +67 -0
- package/src/lib/components/console/payment-methods-card.component.js +395 -0
- package/src/lib/components/console/payment-methods-card.component.js.map +1 -0
- package/src/lib/components/console/pos/pos-api.d.ts +124 -0
- package/src/lib/components/console/pos/pos-api.js +101 -0
- package/src/lib/components/console/pos/pos-api.js.map +1 -0
- package/src/lib/components/console/pos/pos-cart-panel.component.d.ts +36 -0
- package/src/lib/components/console/pos/pos-cart-panel.component.js +160 -0
- package/src/lib/components/console/pos/pos-cart-panel.component.js.map +1 -0
- package/src/lib/components/console/pos/pos-item-dialog.component.d.ts +39 -0
- package/src/lib/components/console/pos/pos-item-dialog.component.js +352 -0
- package/src/lib/components/console/pos/pos-item-dialog.component.js.map +1 -0
- package/src/lib/components/console/pos/pos-product-grid.component.d.ts +47 -0
- package/src/lib/components/console/pos/pos-product-grid.component.js +272 -0
- package/src/lib/components/console/pos/pos-product-grid.component.js.map +1 -0
- package/src/lib/components/console/pos/pos-receipt-panel.component.d.ts +27 -0
- package/src/lib/components/console/pos/pos-receipt-panel.component.js +282 -0
- package/src/lib/components/console/pos/pos-receipt-panel.component.js.map +1 -0
- package/src/lib/components/console/pos/pos-tender-dialogs.component.d.ts +53 -0
- package/src/lib/components/console/pos/pos-tender-dialogs.component.js +445 -0
- package/src/lib/components/console/pos/pos-tender-dialogs.component.js.map +1 -0
- package/src/lib/components/console/pos/pos-tender-panel.component.d.ts +31 -0
- package/src/lib/components/console/pos/pos-tender-panel.component.js +640 -0
- package/src/lib/components/console/pos/pos-tender-panel.component.js.map +1 -0
- package/src/lib/components/console/pos/use-pos-display.d.ts +43 -0
- package/src/lib/components/console/pos/use-pos-display.js +161 -0
- package/src/lib/components/console/pos/use-pos-display.js.map +1 -0
- package/src/lib/components/console/pos-devices-card.component.d.ts +14 -0
- package/src/lib/components/console/pos-devices-card.component.js +546 -0
- package/src/lib/components/console/pos-devices-card.component.js.map +1 -0
- package/src/lib/components/console/pos-display/brand-screen.d.ts +33 -0
- package/src/lib/components/console/pos-display/brand-screen.js +85 -0
- package/src/lib/components/console/pos-display/brand-screen.js.map +1 -0
- package/src/lib/components/console/pos-display/cart-screen.d.ts +29 -0
- package/src/lib/components/console/pos-display/cart-screen.js +166 -0
- package/src/lib/components/console/pos-display/cart-screen.js.map +1 -0
- package/src/lib/components/console/pos-display/pairing-screen.d.ts +24 -0
- package/src/lib/components/console/pos-display/pairing-screen.js +127 -0
- package/src/lib/components/console/pos-display/pairing-screen.js.map +1 -0
- package/src/lib/components/console/pos-display/pos-display-api.d.ts +90 -0
- package/src/lib/components/console/pos-display/pos-display-api.js +140 -0
- package/src/lib/components/console/pos-display/pos-display-api.js.map +1 -0
- package/src/lib/components/console/pos-display/receipt-screen.d.ts +35 -0
- package/src/lib/components/console/pos-display/receipt-screen.js +200 -0
- package/src/lib/components/console/pos-display/receipt-screen.js.map +1 -0
- package/src/lib/components/console/pos-display/tip-screen.d.ts +36 -0
- package/src/lib/components/console/pos-display/tip-screen.js +211 -0
- package/src/lib/components/console/pos-display/tip-screen.js.map +1 -0
- package/src/lib/components/console/pos-display-page.component.d.ts +16 -0
- package/src/lib/components/console/pos-display-page.component.js +407 -0
- package/src/lib/components/console/pos-display-page.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-customer-lookup.component.d.ts +40 -0
- package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js +289 -0
- package/src/lib/components/console/pos-ops/pos-customer-lookup.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-last-receipt.component.d.ts +34 -0
- package/src/lib/components/console/pos-ops/pos-last-receipt.component.js +61 -0
- package/src/lib/components/console/pos-ops/pos-last-receipt.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +38 -0
- package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +129 -0
- package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-ops-api.d.ts +37 -0
- package/src/lib/components/console/pos-ops/pos-ops-api.js +60 -0
- package/src/lib/components/console/pos-ops/pos-ops-api.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-pin-pad.component.d.ts +48 -0
- package/src/lib/components/console/pos-ops/pos-pin-pad.component.js +220 -0
- package/src/lib/components/console/pos-ops/pos-pin-pad.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-receipt-actions.component.d.ts +63 -0
- package/src/lib/components/console/pos-ops/pos-receipt-actions.component.js +186 -0
- package/src/lib/components/console/pos-ops/pos-receipt-actions.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-receipt.d.ts +39 -0
- package/src/lib/components/console/pos-ops/pos-receipt.js +182 -0
- package/src/lib/components/console/pos-ops/pos-receipt.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-return-dialog.component.d.ts +40 -0
- package/src/lib/components/console/pos-ops/pos-return-dialog.component.js +465 -0
- package/src/lib/components/console/pos-ops/pos-return-dialog.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-shift-history-card.component.d.ts +29 -0
- package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js +253 -0
- package/src/lib/components/console/pos-ops/pos-shift-history-card.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-shift-panel.component.d.ts +34 -0
- package/src/lib/components/console/pos-ops/pos-shift-panel.component.js +494 -0
- package/src/lib/components/console/pos-ops/pos-shift-panel.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-shift-report.component.d.ts +37 -0
- package/src/lib/components/console/pos-ops/pos-shift-report.component.js +102 -0
- package/src/lib/components/console/pos-ops/pos-shift-report.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.d.ts +30 -0
- package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.js +277 -0
- package/src/lib/components/console/pos-ops/pos-staff-pins-card.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/register-ops.d.ts +28 -0
- package/src/lib/components/console/pos-ops/register-ops.js +28 -0
- package/src/lib/components/console/pos-ops/register-ops.js.map +1 -0
- package/src/lib/components/console/pos-ops/use-pos-cashier.d.ts +46 -0
- package/src/lib/components/console/pos-ops/use-pos-cashier.js +128 -0
- package/src/lib/components/console/pos-ops/use-pos-cashier.js.map +1 -0
- package/src/lib/components/console/pos-ops/use-pos-sale-receipt.d.ts +36 -0
- package/src/lib/components/console/pos-ops/use-pos-sale-receipt.js +64 -0
- package/src/lib/components/console/pos-ops/use-pos-sale-receipt.js.map +1 -0
- package/src/lib/components/console/pos-page.component.d.ts +13 -5
- package/src/lib/components/console/pos-page.component.js +756 -654
- package/src/lib/components/console/pos-page.component.js.map +1 -1
- package/src/lib/components/console/pos-zones.d.ts +23 -0
- package/src/lib/components/console/pos-zones.js +31 -0
- package/src/lib/components/console/pos-zones.js.map +1 -0
- package/src/lib/components/console/product-editor-dialog.component.js +61 -71
- package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
- package/src/lib/components/console/product-labels-dialog.component.d.ts +13 -0
- package/src/lib/components/console/product-labels-dialog.component.js +197 -0
- package/src/lib/components/console/product-labels-dialog.component.js.map +1 -0
- package/src/lib/components/console/product-register-fields.component.d.ts +19 -0
- package/src/lib/components/console/product-register-fields.component.js +241 -0
- package/src/lib/components/console/product-register-fields.component.js.map +1 -0
- package/src/lib/components/console/product-zones.d.ts +44 -0
- package/src/lib/components/console/product-zones.js.map +1 -1
- package/src/lib/components/console/products-hub-card.component.js +23 -20
- package/src/lib/components/console/products-hub-card.component.js.map +1 -1
- package/src/lib/components/console/register-hardware-card.component.d.ts +33 -0
- package/src/lib/components/console/register-hardware-card.component.js +826 -0
- package/src/lib/components/console/register-hardware-card.component.js.map +1 -0
- package/src/lib/components/console/registers-card.component.js +24 -5
- package/src/lib/components/console/registers-card.component.js.map +1 -1
- package/src/lib/components/console/return-actions.d.ts +38 -0
- package/src/lib/components/console/return-actions.js +76 -0
- package/src/lib/components/console/return-actions.js.map +1 -0
- package/src/lib/components/console/return-detail-dialog.component.d.ts +34 -0
- package/src/lib/components/console/return-detail-dialog.component.js +718 -0
- package/src/lib/components/console/return-detail-dialog.component.js.map +1 -0
- package/src/lib/components/console/return-settings-card.component.d.ts +34 -0
- package/src/lib/components/console/return-settings-card.component.js +195 -0
- package/src/lib/components/console/return-settings-card.component.js.map +1 -0
- package/src/lib/components/console/return-zones.d.ts +87 -0
- package/src/lib/components/console/return-zones.js +31 -0
- package/src/lib/components/console/return-zones.js.map +1 -0
- package/src/lib/components/console/returns-card.component.d.ts +45 -0
- package/src/lib/components/console/returns-card.component.js +159 -0
- package/src/lib/components/console/returns-card.component.js.map +1 -0
- package/src/lib/components/console/shipping-settings-card.component.js +161 -5
- package/src/lib/components/console/shipping-settings-card.component.js.map +1 -1
- package/src/lib/components/console/shippingeasy-card.component.d.ts +59 -0
- package/src/lib/components/console/shippingeasy-card.component.js +378 -0
- package/src/lib/components/console/shippingeasy-card.component.js.map +1 -0
- package/src/lib/components/console/shipstation-card.component.d.ts +35 -0
- package/src/lib/components/console/shipstation-card.component.js +345 -0
- package/src/lib/components/console/shipstation-card.component.js.map +1 -0
- package/src/lib/components/console/start-return-dialog.component.d.ts +40 -0
- package/src/lib/components/console/start-return-dialog.component.js +243 -0
- package/src/lib/components/console/start-return-dialog.component.js.map +1 -0
- package/src/lib/components/console/stock-movements-card.component.js +2 -1
- package/src/lib/components/console/stock-movements-card.component.js.map +1 -1
- package/src/lib/components/console/store-settings-card.component.js +2 -66
- package/src/lib/components/console/store-settings-card.component.js.map +1 -1
- package/src/lib/components/console/store-zones.d.ts +42 -0
- package/src/lib/components/console/store-zones.js +39 -0
- package/src/lib/components/console/store-zones.js.map +1 -0
- package/src/lib/components/console/storefront-tax-summary-card.component.js +1 -0
- package/src/lib/components/console/storefront-tax-summary-card.component.js.map +1 -1
- package/src/lib/components/order-status.d.ts +36 -0
- package/src/lib/components/order-status.js +502 -0
- package/src/lib/components/order-status.js.map +1 -0
- package/src/lib/components/product-detail.js +41 -2
- package/src/lib/components/product-detail.js.map +1 -1
- package/src/lib/components/return-request.d.ts +32 -0
- package/src/lib/components/return-request.js +576 -0
- package/src/lib/components/return-request.js.map +1 -0
- package/src/lib/components/storefront-payment-appearance.d.ts +32 -0
- package/src/lib/components/storefront-payment-appearance.js +114 -0
- package/src/lib/components/storefront-payment-appearance.js.map +1 -0
- package/src/lib/components/storefront-payment-element.d.ts +57 -1
- package/src/lib/components/storefront-payment-element.js +332 -33
- package/src/lib/components/storefront-payment-element.js.map +1 -1
- package/src/lib/constants/order-status.d.ts +22 -0
- package/src/lib/constants/order-status.js +22 -0
- package/src/lib/constants/order-status.js.map +1 -0
- package/src/lib/constants/return-request.d.ts +27 -0
- package/src/lib/constants/return-request.js +32 -0
- package/src/lib/constants/return-request.js.map +1 -0
- package/src/lib/constants/stock-movement-query.js +2 -1
- package/src/lib/constants/stock-movement-query.js.map +1 -1
- package/src/lib/declarations.console-server.js +9 -0
- package/src/lib/declarations.console-server.js.map +1 -1
- package/src/lib/declarations.server.d.ts +2 -1
- package/src/lib/declarations.server.js +68 -1
- package/src/lib/declarations.server.js.map +1 -1
- package/src/lib/model/buyer-notifications.d.ts +59 -0
- package/src/lib/model/buyer-notifications.js +97 -0
- package/src/lib/model/buyer-notifications.js.map +1 -0
- package/src/lib/model/commerce-orders.d.ts +171 -2
- package/src/lib/model/commerce-orders.js +26 -16
- package/src/lib/model/commerce-orders.js.map +1 -1
- package/src/lib/model/commerce-payment-methods.d.ts +146 -0
- package/src/lib/model/commerce-payment-methods.js +247 -0
- package/src/lib/model/commerce-payment-methods.js.map +1 -0
- package/src/lib/model/commerce-pos-ops.d.ts +437 -0
- package/src/lib/model/commerce-pos-ops.js +721 -0
- package/src/lib/model/commerce-pos-ops.js.map +1 -0
- package/src/lib/model/commerce-pos.d.ts +263 -0
- package/src/lib/model/commerce-pos.js +375 -0
- package/src/lib/model/commerce-pos.js.map +1 -0
- package/src/lib/model/commerce-printers.d.ts +211 -0
- package/src/lib/model/commerce-printers.js +181 -0
- package/src/lib/model/commerce-printers.js.map +1 -0
- package/src/lib/model/commerce-receipt.d.ts +97 -0
- package/src/lib/model/commerce-receipt.js +180 -0
- package/src/lib/model/commerce-receipt.js.map +1 -0
- package/src/lib/model/commerce-returns.d.ts +207 -0
- package/src/lib/model/commerce-returns.js +300 -0
- package/src/lib/model/commerce-returns.js.map +1 -0
- package/src/lib/model/commerce-shipping.d.ts +44 -1
- package/src/lib/model/commerce-shipping.js +53 -9
- package/src/lib/model/commerce-shipping.js.map +1 -1
- package/src/lib/model/commerce-tax-engine.d.ts +90 -0
- package/src/lib/model/commerce-tax-engine.js +129 -0
- package/src/lib/model/commerce-tax-engine.js.map +1 -0
- package/src/lib/model/commerce.d.ts +91 -2
- package/src/lib/model/commerce.js +89 -1
- package/src/lib/model/commerce.js.map +1 -1
- package/src/lib/model/index.d.ts +16 -0
- package/src/lib/model/index.js +16 -0
- package/src/lib/model/index.js.map +1 -1
- package/src/lib/model/order-events.d.ts +154 -0
- package/src/lib/model/order-events.js +153 -0
- package/src/lib/model/order-events.js.map +1 -0
- package/src/lib/model/order-fulfillment.d.ts +117 -0
- package/src/lib/model/order-fulfillment.js +217 -0
- package/src/lib/model/order-fulfillment.js.map +1 -0
- package/src/lib/model/order-history.d.ts +58 -0
- package/src/lib/model/order-history.js +22 -0
- package/src/lib/model/order-history.js.map +1 -0
- package/src/lib/model/order-list-fields.d.ts +9 -1
- package/src/lib/model/order-list-fields.js +7 -1
- package/src/lib/model/order-list-fields.js.map +1 -1
- package/src/lib/model/order-shipping-export.d.ts +91 -0
- package/src/lib/model/order-shipping-export.js +192 -0
- package/src/lib/model/order-shipping-export.js.map +1 -0
- package/src/lib/model/order-status-view.d.ts +103 -0
- package/src/lib/model/order-status-view.js +156 -0
- package/src/lib/model/order-status-view.js.map +1 -0
- package/src/lib/model/order-webhooks.d.ts +142 -0
- package/src/lib/model/order-webhooks.js +91 -0
- package/src/lib/model/order-webhooks.js.map +1 -0
- package/src/lib/model/product-channel.d.ts +56 -0
- package/src/lib/model/product-channel.js +86 -0
- package/src/lib/model/product-channel.js.map +1 -0
- package/src/lib/model/product-modifiers.d.ts +80 -0
- package/src/lib/model/product-modifiers.js +140 -0
- package/src/lib/model/product-modifiers.js.map +1 -0
- package/src/lib/model/product-write.d.ts +186 -0
- package/src/lib/model/product-write.js +116 -0
- package/src/lib/model/product-write.js.map +1 -0
- package/src/lib/model/shippingeasy.d.ts +94 -0
- package/src/lib/model/shippingeasy.js +267 -0
- package/src/lib/model/shippingeasy.js.map +1 -0
- package/src/lib/model/shipstation.d.ts +125 -0
- package/src/lib/model/shipstation.js +399 -0
- package/src/lib/model/shipstation.js.map +1 -0
- package/src/lib/model/smart-collection-reads.d.ts +32 -0
- package/src/lib/model/smart-collection-reads.js +63 -0
- package/src/lib/model/smart-collection-reads.js.map +1 -0
- package/src/lib/model/tracking-url.d.ts +74 -0
- package/src/lib/model/tracking-url.js +159 -0
- package/src/lib/model/tracking-url.js.map +1 -0
- package/src/lib/plugin-config.d.ts +13 -0
- package/src/lib/plugin-config.js +77 -5
- package/src/lib/plugin-config.js.map +1 -1
- package/src/lib/plugin.js +26 -0
- package/src/lib/plugin.js.map +1 -1
- package/src/lib/pos-ops-config.d.ts +39 -0
- package/src/lib/pos-ops-config.js +88 -0
- package/src/lib/pos-ops-config.js.map +1 -0
- package/src/lib/printing/print-document.d.ts +106 -0
- package/src/lib/printing/print-document.js +464 -0
- package/src/lib/printing/print-document.js.map +1 -0
- package/src/lib/printing/product-labels.d.ts +58 -0
- package/src/lib/printing/product-labels.js +116 -0
- package/src/lib/printing/product-labels.js.map +1 -0
- package/src/lib/printing/render-epson.d.ts +57 -0
- package/src/lib/printing/render-epson.js +135 -0
- package/src/lib/printing/render-epson.js.map +1 -0
- package/src/lib/printing/render-star.d.ts +45 -0
- package/src/lib/printing/render-star.js +100 -0
- package/src/lib/printing/render-star.js.map +1 -0
- package/src/lib/printing/render-text.d.ts +25 -0
- package/src/lib/printing/render-text.js +53 -0
- package/src/lib/printing/render-text.js.map +1 -0
- package/src/lib/server/api-v1/openapi.js +27 -4
- package/src/lib/server/api-v1/openapi.js.map +1 -1
- package/src/lib/server/api-v1/order-view.d.ts +67 -0
- package/src/lib/server/api-v1/order-view.js +120 -0
- package/src/lib/server/api-v1/order-view.js.map +1 -0
- package/src/lib/server/api-v1/orders-and-products.js +58 -65
- package/src/lib/server/api-v1/orders-and-products.js.map +1 -1
- package/src/lib/server/billing-webhook.js +135 -28
- package/src/lib/server/billing-webhook.js.map +1 -1
- package/src/lib/server/cancel-order.js +29 -0
- package/src/lib/server/cancel-order.js.map +1 -1
- package/src/lib/server/carrier-rates-availability.d.ts +26 -0
- package/src/lib/server/carrier-rates-availability.js +76 -0
- package/src/lib/server/carrier-rates-availability.js.map +1 -0
- package/src/lib/server/carrier-shipping.d.ts +84 -0
- package/src/lib/server/carrier-shipping.js +135 -0
- package/src/lib/server/carrier-shipping.js.map +1 -0
- package/src/lib/server/cart-checkout.d.ts +2 -0
- package/src/lib/server/cart-checkout.js +226 -22
- package/src/lib/server/cart-checkout.js.map +1 -1
- package/src/lib/server/channel-order-updates.d.ts +50 -0
- package/src/lib/server/channel-order-updates.js +290 -0
- package/src/lib/server/channel-order-updates.js.map +1 -0
- package/src/lib/server/channel-orders.d.ts +85 -0
- package/src/lib/server/channel-orders.js +543 -0
- package/src/lib/server/channel-orders.js.map +1 -0
- package/src/lib/server/checkout-extras.d.ts +64 -0
- package/src/lib/server/checkout-extras.js +157 -0
- package/src/lib/server/checkout-extras.js.map +1 -0
- package/src/lib/server/{feed.d.ts → checkout-status.d.ts} +2 -7
- package/src/lib/server/checkout-status.js +111 -0
- package/src/lib/server/checkout-status.js.map +1 -0
- package/src/lib/server/checkout.js +86 -9
- package/src/lib/server/checkout.js.map +1 -1
- package/src/lib/server/draft-order.js +34 -5
- package/src/lib/server/draft-order.js.map +1 -1
- package/src/lib/server/fulfill-order.d.ts +127 -10
- package/src/lib/server/fulfill-order.js +451 -49
- package/src/lib/server/fulfill-order.js.map +1 -1
- package/src/lib/server/legacy-feed.d.ts +28 -0
- package/src/lib/server/legacy-feed.js +52 -0
- package/src/lib/server/legacy-feed.js.map +1 -0
- package/src/lib/server/native-checkout.d.ts +34 -15
- package/src/lib/server/native-checkout.js +32 -17
- package/src/lib/server/native-checkout.js.map +1 -1
- package/src/lib/server/order-event-host-emit.d.ts +23 -0
- package/src/lib/server/order-event-host-emit.js +30 -0
- package/src/lib/server/order-event-host-emit.js.map +1 -0
- package/src/lib/server/order-event-triggers.d.ts +37 -0
- package/src/lib/server/order-event-triggers.js +119 -0
- package/src/lib/server/order-event-triggers.js.map +1 -0
- package/src/lib/server/order-events.d.ts +62 -0
- package/src/lib/server/order-events.js +109 -0
- package/src/lib/server/order-events.js.map +1 -0
- package/src/lib/server/order-history.d.ts +23 -0
- package/src/lib/server/order-history.js +65 -0
- package/src/lib/server/order-history.js.map +1 -0
- package/src/lib/server/order-notifications.d.ts +185 -0
- package/src/lib/server/order-notifications.js +567 -0
- package/src/lib/server/order-notifications.js.map +1 -0
- package/src/lib/server/order-receipt-send.d.ts +39 -0
- package/src/lib/server/order-receipt-send.js +151 -0
- package/src/lib/server/order-receipt-send.js.map +1 -0
- package/src/lib/server/order-status-token.d.ts +31 -0
- package/src/lib/server/order-status-token.js +75 -0
- package/src/lib/server/order-status-token.js.map +1 -0
- package/src/lib/server/order-status.d.ts +58 -0
- package/src/lib/server/order-status.js +141 -0
- package/src/lib/server/order-status.js.map +1 -0
- package/src/lib/server/order-webhooks.d.ts +108 -0
- package/src/lib/server/order-webhooks.js +622 -0
- package/src/lib/server/order-webhooks.js.map +1 -0
- package/src/lib/server/orders-shipping-prepare.d.ts +26 -0
- package/src/lib/server/orders-shipping-prepare.js +121 -0
- package/src/lib/server/orders-shipping-prepare.js.map +1 -0
- package/src/lib/server/payment-method-domains.d.ts +209 -0
- package/src/lib/server/payment-method-domains.js +444 -0
- package/src/lib/server/payment-method-domains.js.map +1 -0
- package/src/lib/server/payment-methods.d.ts +77 -0
- package/src/lib/server/payment-methods.js +284 -0
- package/src/lib/server/payment-methods.js.map +1 -0
- package/src/lib/server/pos-auth.d.ts +50 -0
- package/src/lib/server/pos-auth.js +121 -0
- package/src/lib/server/pos-auth.js.map +1 -0
- package/src/lib/server/pos-customer.d.ts +49 -0
- package/src/lib/server/pos-customer.js +257 -0
- package/src/lib/server/pos-customer.js.map +1 -0
- package/src/lib/server/pos-display.d.ts +57 -0
- package/src/lib/server/pos-display.js +419 -0
- package/src/lib/server/pos-display.js.map +1 -0
- package/src/lib/server/pos-fee-month.d.ts +34 -0
- package/src/lib/server/pos-fee-month.js +36 -0
- package/src/lib/server/pos-fee-month.js.map +1 -0
- package/src/lib/server/pos-ops-gate.d.ts +161 -0
- package/src/lib/server/pos-ops-gate.js +295 -0
- package/src/lib/server/pos-ops-gate.js.map +1 -0
- package/src/lib/server/pos-ops-routes.d.ts +22 -0
- package/src/lib/server/pos-ops-routes.js +36 -0
- package/src/lib/server/pos-ops-routes.js.map +1 -0
- package/src/lib/server/pos-order.d.ts +1 -18
- package/src/lib/server/pos-order.js +222 -42
- package/src/lib/server/pos-order.js.map +1 -1
- package/src/lib/server/pos-payment.d.ts +39 -0
- package/src/lib/server/pos-payment.js +922 -0
- package/src/lib/server/pos-payment.js.map +1 -0
- package/src/lib/server/pos-print.d.ts +82 -0
- package/src/lib/server/pos-print.js +193 -0
- package/src/lib/server/pos-print.js.map +1 -0
- package/src/lib/server/pos-readers.d.ts +27 -0
- package/src/lib/server/pos-readers.js +276 -0
- package/src/lib/server/pos-readers.js.map +1 -0
- package/src/lib/server/pos-refund-authority.d.ts +60 -0
- package/src/lib/server/pos-refund-authority.js +72 -0
- package/src/lib/server/pos-refund-authority.js.map +1 -0
- package/src/lib/server/pos-return.d.ts +58 -0
- package/src/lib/server/pos-return.js +891 -0
- package/src/lib/server/pos-return.js.map +1 -0
- package/src/lib/server/pos-sale-stamp.d.ts +66 -0
- package/src/lib/server/pos-sale-stamp.js +84 -0
- package/src/lib/server/pos-sale-stamp.js.map +1 -0
- package/src/lib/server/pos-sale.d.ts +170 -0
- package/src/lib/server/pos-sale.js +461 -0
- package/src/lib/server/pos-sale.js.map +1 -0
- package/src/lib/server/pos-shift.d.ts +45 -0
- package/src/lib/server/pos-shift.js +484 -0
- package/src/lib/server/pos-shift.js.map +1 -0
- package/src/lib/server/pos-staff-pin.d.ts +26 -0
- package/src/lib/server/pos-staff-pin.js +339 -0
- package/src/lib/server/pos-staff-pin.js.map +1 -0
- package/src/lib/server/pos-stripe.d.ts +91 -0
- package/src/lib/server/pos-stripe.js +129 -0
- package/src/lib/server/pos-stripe.js.map +1 -0
- package/src/lib/server/pos-terminal-connection-token.d.ts +48 -0
- package/src/lib/server/pos-terminal-connection-token.js +166 -0
- package/src/lib/server/pos-terminal-connection-token.js.map +1 -0
- package/src/lib/server/pos-terminal.d.ts +218 -0
- package/src/lib/server/pos-terminal.js +1014 -0
- package/src/lib/server/pos-terminal.js.map +1 -0
- package/src/lib/server/print-queue.d.ts +124 -0
- package/src/lib/server/print-queue.js +301 -0
- package/src/lib/server/print-queue.js.map +1 -0
- package/src/lib/server/printer-poll.d.ts +75 -0
- package/src/lib/server/printer-poll.js +325 -0
- package/src/lib/server/printer-poll.js.map +1 -0
- package/src/lib/server/printer-secret.d.ts +39 -0
- package/src/lib/server/printer-secret.js +56 -0
- package/src/lib/server/printer-secret.js.map +1 -0
- package/src/lib/server/printers.d.ts +114 -0
- package/src/lib/server/printers.js +546 -0
- package/src/lib/server/printers.js.map +1 -0
- package/src/lib/server/product-catalog.d.ts +42 -0
- package/src/lib/server/product-catalog.js +309 -0
- package/src/lib/server/product-catalog.js.map +1 -0
- package/src/lib/server/product-drafts.d.ts +5 -1
- package/src/lib/server/product-drafts.js +3 -3
- package/src/lib/server/product-drafts.js.map +1 -1
- package/src/lib/server/product-writer.d.ts +19 -0
- package/src/lib/server/product-writer.js +261 -0
- package/src/lib/server/product-writer.js.map +1 -0
- package/src/lib/server/products-write.d.ts +61 -0
- package/src/lib/server/products-write.js +375 -0
- package/src/lib/server/products-write.js.map +1 -0
- package/src/lib/server/refund.js +110 -45
- package/src/lib/server/refund.js.map +1 -1
- package/src/lib/server/reserve.js +2 -0
- package/src/lib/server/reserve.js.map +1 -1
- package/src/lib/server/return-status-action.d.ts +37 -0
- package/src/lib/server/return-status-action.js +57 -0
- package/src/lib/server/return-status-action.js.map +1 -0
- package/src/lib/server/returns.d.ts +119 -0
- package/src/lib/server/returns.js +938 -0
- package/src/lib/server/returns.js.map +1 -0
- package/src/lib/server/shipment-records.d.ts +36 -0
- package/src/lib/server/shipment-records.js +289 -0
- package/src/lib/server/shipment-records.js.map +1 -0
- package/src/lib/server/shipping-connector-gates.d.ts +40 -0
- package/src/lib/server/shipping-connector-gates.js +97 -0
- package/src/lib/server/shipping-connector-gates.js.map +1 -0
- package/src/lib/server/shipping-connectors.d.ts +29 -0
- package/src/lib/server/shipping-connectors.js +236 -0
- package/src/lib/server/shipping-connectors.js.map +1 -0
- package/src/lib/server/shippingeasy.d.ts +238 -0
- package/src/lib/server/shippingeasy.js +787 -0
- package/src/lib/server/shippingeasy.js.map +1 -0
- package/src/lib/server/shipstation.d.ts +129 -0
- package/src/lib/server/shipstation.js +483 -0
- package/src/lib/server/shipstation.js.map +1 -0
- package/src/lib/server/site-page-resolver.d.ts +5 -0
- package/src/lib/server/site-page-resolver.js +156 -1
- package/src/lib/server/site-page-resolver.js.map +1 -1
- package/src/lib/server/stock-levels.d.ts +21 -0
- package/src/lib/server/stock-levels.js +263 -0
- package/src/lib/server/stock-levels.js.map +1 -0
- package/src/lib/server/stripe-refund.d.ts +47 -0
- package/src/lib/server/stripe-refund.js +87 -0
- package/src/lib/server/stripe-refund.js.map +1 -0
- package/src/lib/server/supplier-update.js +46 -5
- package/src/lib/server/supplier-update.js.map +1 -1
- package/src/lib/server/tax-engine-quote.d.ts +47 -0
- package/src/lib/server/tax-engine-quote.js +105 -0
- package/src/lib/server/tax-engine-quote.js.map +1 -0
- package/src/lib/server.js +143 -2
- package/src/lib/server.js.map +1 -1
- package/src/lib/site.js +12 -0
- package/src/lib/site.js.map +1 -1
- package/src/lib/subprocessors.d.ts +26 -0
- package/src/lib/subprocessors.js +50 -0
- package/src/lib/subprocessors.js.map +1 -0
- package/src/lib/tenant-emails.js +461 -3
- package/src/lib/tenant-emails.js.map +1 -1
- package/src/lib/testing/fake-firestore.d.ts +45 -0
- package/src/lib/testing/fake-firestore.js +189 -0
- package/src/lib/testing/fake-firestore.js.map +1 -0
- package/src/lib/testing/memory-firestore.d.ts +136 -0
- package/src/lib/testing/memory-firestore.js +282 -0
- package/src/lib/testing/memory-firestore.js.map +1 -0
- package/src/lib/testing/pos-ops-harness.d.ts +50 -0
- package/src/lib/testing/pos-ops-harness.js +184 -0
- package/src/lib/testing/pos-ops-harness.js.map +1 -0
- package/src/lib/testing/pos-ops-memory-firestore.d.ts +55 -0
- package/src/lib/testing/pos-ops-memory-firestore.js +376 -0
- package/src/lib/testing/pos-ops-memory-firestore.js.map +1 -0
- package/src/lib/transfer/products.server.d.ts +5 -0
- package/src/lib/transfer/products.server.js +2 -2
- package/src/lib/transfer/products.server.js.map +1 -1
- package/src/lib/transfer/records-transfer.d.ts +11 -1
- package/src/lib/transfer/records-transfer.js +127 -5
- package/src/lib/transfer/records-transfer.js.map +1 -1
- package/src/lib/transfer/records.server.d.ts +9 -2
- package/src/lib/transfer/records.server.js +58 -7
- package/src/lib/transfer/records.server.js.map +1 -1
- package/src/lib/transfer/register-transfer-resources.js +40 -1
- package/src/lib/transfer/register-transfer-resources.js.map +1 -1
- package/src/lib/transfer/register-transfer-ui.js +4 -1
- package/src/lib/transfer/register-transfer-ui.js.map +1 -1
- package/src/lib/transfer/shipping-presets.d.ts +23 -0
- package/src/lib/transfer/shipping-presets.js +156 -0
- package/src/lib/transfer/shipping-presets.js.map +1 -0
- package/src/lib/transfer/tracking-transfer.d.ts +101 -0
- package/src/lib/transfer/tracking-transfer.js +546 -0
- package/src/lib/transfer/tracking-transfer.js.map +1 -0
- package/src/lib/transfer/tracking.server.d.ts +37 -0
- package/src/lib/transfer/tracking.server.js +393 -0
- package/src/lib/transfer/tracking.server.js.map +1 -0
- package/src/lib/transfer/transfer-keys.d.ts +2 -1
- package/src/lib/transfer/transfer-keys.js +6 -2
- package/src/lib/transfer/transfer-keys.js.map +1 -1
- package/src/lib/utils/code128.d.ts +37 -0
- package/src/lib/utils/code128.js +199 -0
- package/src/lib/utils/code128.js.map +1 -0
- package/src/lib/utils/order-invoice.d.ts +55 -0
- package/src/lib/utils/order-invoice.js +127 -0
- package/src/lib/utils/order-invoice.js.map +1 -0
- package/src/lib/utils/use-checkout-return-notice.d.ts +34 -0
- package/src/lib/utils/use-checkout-return-notice.js +78 -0
- package/src/lib/utils/use-checkout-return-notice.js.map +1 -0
- package/src/lib/server/feed.js +0 -69
- package/src/lib/server/feed.js.map +0 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* An in-memory stand-in for the Admin SDK's Firestore, for the register's
|
|
19
|
+
* money-path specs (AGL-3607). Faithful where the code under test leans on
|
|
20
|
+
* it: `create()` refuses an existing document, `update()` refuses a missing
|
|
21
|
+
* one, merge-sets merge one level, and the `increment`, `delete` and
|
|
22
|
+
* `arrayUnion` sentinels resolve against the stored value. A transaction
|
|
23
|
+
* buffers its writes and applies them at commit, so a throw inside it writes
|
|
24
|
+
* nothing.
|
|
25
|
+
*/
|
|
26
|
+
declare const INCREMENT: unique symbol;
|
|
27
|
+
declare const DELETE: unique symbol;
|
|
28
|
+
declare const UNION: unique symbol;
|
|
29
|
+
export declare const fakeFieldValue: {
|
|
30
|
+
increment: (value: number) => {
|
|
31
|
+
[INCREMENT]: number;
|
|
32
|
+
};
|
|
33
|
+
delete: () => {
|
|
34
|
+
[DELETE]: boolean;
|
|
35
|
+
};
|
|
36
|
+
arrayUnion: (...values: unknown[]) => {
|
|
37
|
+
[UNION]: unknown[];
|
|
38
|
+
};
|
|
39
|
+
serverTimestamp: () => string;
|
|
40
|
+
};
|
|
41
|
+
export declare const fakeDocs: Map<string, Record<string, any>>;
|
|
42
|
+
export declare function docRef(path: string): any;
|
|
43
|
+
export declare const fakeFirestore: any;
|
|
44
|
+
export declare function resetFakeFirestore(): void;
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2026 Aglyn LLC
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/ /**
|
|
18
|
+
* An in-memory stand-in for the Admin SDK's Firestore, for the register's
|
|
19
|
+
* money-path specs (AGL-3607). Faithful where the code under test leans on
|
|
20
|
+
* it: `create()` refuses an existing document, `update()` refuses a missing
|
|
21
|
+
* one, merge-sets merge one level, and the `increment`, `delete` and
|
|
22
|
+
* `arrayUnion` sentinels resolve against the stored value. A transaction
|
|
23
|
+
* buffers its writes and applies them at commit, so a throw inside it writes
|
|
24
|
+
* nothing.
|
|
25
|
+
*/ const INCREMENT = Symbol('increment');
|
|
26
|
+
const DELETE = Symbol('delete');
|
|
27
|
+
const UNION = Symbol('arrayUnion');
|
|
28
|
+
export const fakeFieldValue = {
|
|
29
|
+
increment: (value)=>({
|
|
30
|
+
[INCREMENT]: value
|
|
31
|
+
}),
|
|
32
|
+
delete: ()=>({
|
|
33
|
+
[DELETE]: true
|
|
34
|
+
}),
|
|
35
|
+
arrayUnion: (...values)=>({
|
|
36
|
+
[UNION]: values
|
|
37
|
+
}),
|
|
38
|
+
serverTimestamp: ()=>'<server-timestamp>'
|
|
39
|
+
};
|
|
40
|
+
export const fakeDocs = new Map();
|
|
41
|
+
let autoId = 0;
|
|
42
|
+
function resolveValue(existing, value) {
|
|
43
|
+
if (value && typeof value === 'object') {
|
|
44
|
+
if (INCREMENT in value) return (Number(existing) || 0) + value[INCREMENT];
|
|
45
|
+
if (UNION in value) {
|
|
46
|
+
const base = Array.isArray(existing) ? [
|
|
47
|
+
...existing
|
|
48
|
+
] : [];
|
|
49
|
+
for (const item of value[UNION]){
|
|
50
|
+
if (!base.some((entry)=>JSON.stringify(entry) === JSON.stringify(item))) base.push(item);
|
|
51
|
+
}
|
|
52
|
+
return base;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
function applyWrite(path, value, mode) {
|
|
58
|
+
const existing = fakeDocs.get(path);
|
|
59
|
+
if (mode === 'update' && !existing) {
|
|
60
|
+
const error = new Error(`NOT_FOUND: ${path}`);
|
|
61
|
+
error.code = 5;
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
const next = mode === 'set' ? {} : _extends({}, existing != null ? existing : {});
|
|
65
|
+
for (const [key, raw] of Object.entries(value)){
|
|
66
|
+
if (raw && typeof raw === 'object' && DELETE in raw) {
|
|
67
|
+
delete next[key];
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (mode === 'merge' && raw && typeof raw === 'object' && !Array.isArray(raw) && !(INCREMENT in raw) && !(UNION in raw) && next[key] && typeof next[key] === 'object' && !Array.isArray(next[key])) {
|
|
71
|
+
const nested = _extends({}, next[key]);
|
|
72
|
+
for (const [inner, innerValue] of Object.entries(raw)){
|
|
73
|
+
if (innerValue && typeof innerValue === 'object' && DELETE in innerValue) {
|
|
74
|
+
delete nested[inner];
|
|
75
|
+
} else {
|
|
76
|
+
nested[inner] = resolveValue(nested[inner], innerValue);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
next[key] = nested;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
next[key] = resolveValue(existing == null ? void 0 : existing[key], raw);
|
|
83
|
+
}
|
|
84
|
+
fakeDocs.set(path, next);
|
|
85
|
+
}
|
|
86
|
+
function snapshotOf(path) {
|
|
87
|
+
const data = fakeDocs.get(path);
|
|
88
|
+
return {
|
|
89
|
+
id: path.split('/').pop(),
|
|
90
|
+
exists: data !== undefined,
|
|
91
|
+
ref: docRef(path),
|
|
92
|
+
data: ()=>data ? JSON.parse(JSON.stringify(data)) : undefined,
|
|
93
|
+
get: (field)=>data == null ? void 0 : data[field]
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export function docRef(path) {
|
|
97
|
+
return {
|
|
98
|
+
id: path.split('/').pop(),
|
|
99
|
+
path,
|
|
100
|
+
get: async ()=>snapshotOf(path),
|
|
101
|
+
set: async (value, options)=>applyWrite(path, value, (options == null ? void 0 : options.merge) ? 'merge' : 'set'),
|
|
102
|
+
update: async (value)=>applyWrite(path, value, 'update'),
|
|
103
|
+
create: async (value)=>{
|
|
104
|
+
if (fakeDocs.has(path)) {
|
|
105
|
+
const error = new Error(`ALREADY_EXISTS: ${path}`);
|
|
106
|
+
error.code = 6;
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
applyWrite(path, value, 'set');
|
|
110
|
+
},
|
|
111
|
+
delete: async ()=>{
|
|
112
|
+
fakeDocs.delete(path);
|
|
113
|
+
},
|
|
114
|
+
collection: (name)=>collectionRef(`${path}/${name}`)
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function collectionRef(path, filters = []) {
|
|
118
|
+
const children = ()=>[
|
|
119
|
+
...fakeDocs.keys()
|
|
120
|
+
].filter((key)=>key.startsWith(`${path}/`) && !key.slice(path.length + 1).includes('/'));
|
|
121
|
+
const query = {
|
|
122
|
+
where: (field, op, value)=>collectionRef(path, [
|
|
123
|
+
...filters,
|
|
124
|
+
[
|
|
125
|
+
field,
|
|
126
|
+
op,
|
|
127
|
+
value
|
|
128
|
+
]
|
|
129
|
+
]),
|
|
130
|
+
limit: ()=>query,
|
|
131
|
+
orderBy: ()=>query,
|
|
132
|
+
get: async ()=>{
|
|
133
|
+
const docs = children().filter((key)=>filters.every(([field, op, value])=>{
|
|
134
|
+
var _fakeDocs_get;
|
|
135
|
+
const stored = (_fakeDocs_get = fakeDocs.get(key)) == null ? void 0 : _fakeDocs_get[field];
|
|
136
|
+
if (op === '==') return stored === value;
|
|
137
|
+
if (op === 'array-contains') return Array.isArray(stored) && stored.includes(value);
|
|
138
|
+
return false;
|
|
139
|
+
})).map(snapshotOf);
|
|
140
|
+
return {
|
|
141
|
+
docs,
|
|
142
|
+
empty: docs.length === 0,
|
|
143
|
+
size: docs.length
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
return _extends({}, query, {
|
|
148
|
+
path,
|
|
149
|
+
doc: (id)=>docRef(`${path}/${id != null ? id : `auto-${++autoId}`}`),
|
|
150
|
+
add: async (value)=>{
|
|
151
|
+
const ref = docRef(`${path}/auto-${++autoId}`);
|
|
152
|
+
applyWrite(ref.path, value, 'set');
|
|
153
|
+
return ref;
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
export const fakeFirestore = {
|
|
158
|
+
collection: (name)=>collectionRef(name),
|
|
159
|
+
runTransaction: async (fn)=>{
|
|
160
|
+
const writes = [];
|
|
161
|
+
const outcome = await fn({
|
|
162
|
+
get: (ref)=>ref.get(),
|
|
163
|
+
set: (ref, value, options)=>{
|
|
164
|
+
writes.push(()=>applyWrite(ref.path, value, (options == null ? void 0 : options.merge) ? 'merge' : 'set'));
|
|
165
|
+
},
|
|
166
|
+
update: (ref, value)=>{
|
|
167
|
+
writes.push(()=>applyWrite(ref.path, value, 'update'));
|
|
168
|
+
},
|
|
169
|
+
delete: (ref)=>{
|
|
170
|
+
writes.push(()=>fakeDocs.delete(ref.path));
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
for (const write of writes)write();
|
|
174
|
+
return outcome;
|
|
175
|
+
},
|
|
176
|
+
recursiveDelete: async (ref)=>{
|
|
177
|
+
for (const key of [
|
|
178
|
+
...fakeDocs.keys()
|
|
179
|
+
]){
|
|
180
|
+
if (key === ref.path || key.startsWith(`${ref.path}/`)) fakeDocs.delete(key);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
export function resetFakeFirestore() {
|
|
185
|
+
fakeDocs.clear();
|
|
186
|
+
autoId = 0;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
//# sourceMappingURL=fake-firestore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/testing/fake-firestore.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * An in-memory stand-in for the Admin SDK's Firestore, for the register's\n * money-path specs (AGL-3607). Faithful where the code under test leans on\n * it: `create()` refuses an existing document, `update()` refuses a missing\n * one, merge-sets merge one level, and the `increment`, `delete` and\n * `arrayUnion` sentinels resolve against the stored value. A transaction\n * buffers its writes and applies them at commit, so a throw inside it writes\n * nothing.\n */\n\nconst INCREMENT = Symbol('increment')\nconst DELETE = Symbol('delete')\nconst UNION = Symbol('arrayUnion')\n\nexport const fakeFieldValue = {\n increment: (value: number) => ({ [INCREMENT]: value }),\n delete: () => ({ [DELETE]: true }),\n arrayUnion: (...values: unknown[]) => ({ [UNION]: values }),\n serverTimestamp: () => '<server-timestamp>',\n}\n\nexport const fakeDocs = new Map<string, Record<string, any>>()\n\nlet autoId = 0\n\nfunction resolveValue(existing: any, value: any): any {\n if (value && typeof value === 'object') {\n if (INCREMENT in value) return (Number(existing) || 0) + value[INCREMENT]\n if (UNION in value) {\n const base = Array.isArray(existing) ? [...existing] : []\n for (const item of value[UNION]) {\n if (!base.some((entry) => JSON.stringify(entry) === JSON.stringify(item))) base.push(item)\n }\n return base\n }\n }\n return value\n}\n\nfunction applyWrite(\n path: string,\n value: Record<string, any>,\n mode: 'set' | 'merge' | 'update',\n) {\n const existing = fakeDocs.get(path)\n if (mode === 'update' && !existing) {\n const error: any = new Error(`NOT_FOUND: ${path}`)\n error.code = 5\n throw error\n }\n const next: Record<string, any> = mode === 'set' ? {} : { ...(existing ?? {}) }\n for (const [key, raw] of Object.entries(value)) {\n if (raw && typeof raw === 'object' && DELETE in raw) {\n delete next[key]\n continue\n }\n if (\n mode === 'merge' &&\n raw &&\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n !(INCREMENT in raw) &&\n !(UNION in raw) &&\n next[key] &&\n typeof next[key] === 'object' &&\n !Array.isArray(next[key])\n ) {\n const nested = { ...next[key] }\n for (const [inner, innerValue] of Object.entries(raw)) {\n if (innerValue && typeof innerValue === 'object' && DELETE in (innerValue as any)) {\n delete nested[inner]\n } else {\n nested[inner] = resolveValue(nested[inner], innerValue)\n }\n }\n next[key] = nested\n continue\n }\n next[key] = resolveValue(existing?.[key], raw)\n }\n fakeDocs.set(path, next)\n}\n\nfunction snapshotOf(path: string) {\n const data = fakeDocs.get(path)\n return {\n id: path.split('/').pop() as string,\n exists: data !== undefined,\n ref: docRef(path),\n data: () => (data ? JSON.parse(JSON.stringify(data)) : undefined),\n get: (field: string) => data?.[field],\n }\n}\n\nexport function docRef(path: string): any {\n return {\n id: path.split('/').pop() as string,\n path,\n get: async () => snapshotOf(path),\n set: async (value: Record<string, any>, options?: { merge?: boolean }) =>\n applyWrite(path, value, options?.merge ? 'merge' : 'set'),\n update: async (value: Record<string, any>) => applyWrite(path, value, 'update'),\n create: async (value: Record<string, any>) => {\n if (fakeDocs.has(path)) {\n const error: any = new Error(`ALREADY_EXISTS: ${path}`)\n error.code = 6\n throw error\n }\n applyWrite(path, value, 'set')\n },\n delete: async () => {\n fakeDocs.delete(path)\n },\n collection: (name: string) => collectionRef(`${path}/${name}`),\n }\n}\n\nfunction collectionRef(path: string, filters: Array<[string, string, any]> = []): any {\n const children = () =>\n [...fakeDocs.keys()].filter(\n (key) => key.startsWith(`${path}/`) && !key.slice(path.length + 1).includes('/'),\n )\n const query = {\n where: (field: string, op: string, value: any) =>\n collectionRef(path, [...filters, [field, op, value]]),\n limit: () => query,\n orderBy: () => query,\n get: async () => {\n const docs = children()\n .filter((key) =>\n filters.every(([field, op, value]) => {\n const stored = fakeDocs.get(key)?.[field]\n if (op === '==') return stored === value\n if (op === 'array-contains') return Array.isArray(stored) && stored.includes(value)\n return false\n }),\n )\n .map(snapshotOf)\n return { docs, empty: docs.length === 0, size: docs.length }\n },\n }\n return {\n ...query,\n path,\n doc: (id?: string) => docRef(`${path}/${id ?? `auto-${++autoId}`}`),\n add: async (value: Record<string, any>) => {\n const ref = docRef(`${path}/auto-${++autoId}`)\n applyWrite(ref.path, value, 'set')\n return ref\n },\n }\n}\n\nexport const fakeFirestore: any = {\n collection: (name: string) => collectionRef(name),\n runTransaction: async (fn: (transaction: any) => Promise<any>) => {\n const writes: Array<() => void> = []\n const outcome = await fn({\n get: (ref: any) => ref.get(),\n set: (ref: any, value: any, options?: { merge?: boolean }) => {\n writes.push(() => applyWrite(ref.path, value, options?.merge ? 'merge' : 'set'))\n },\n update: (ref: any, value: any) => {\n writes.push(() => applyWrite(ref.path, value, 'update'))\n },\n delete: (ref: any) => {\n writes.push(() => fakeDocs.delete(ref.path))\n },\n })\n for (const write of writes) write()\n return outcome\n },\n recursiveDelete: async (ref: any) => {\n for (const key of [...fakeDocs.keys()]) {\n if (key === ref.path || key.startsWith(`${ref.path}/`)) fakeDocs.delete(key)\n }\n },\n}\n\nexport function resetFakeFirestore(): void {\n fakeDocs.clear()\n autoId = 0\n}\n"],"names":["INCREMENT","Symbol","DELETE","UNION","fakeFieldValue","increment","value","delete","arrayUnion","values","serverTimestamp","fakeDocs","Map","autoId","resolveValue","existing","Number","base","Array","isArray","item","some","entry","JSON","stringify","push","applyWrite","path","mode","get","error","Error","code","next","key","raw","Object","entries","nested","inner","innerValue","set","snapshotOf","data","id","split","pop","exists","undefined","ref","docRef","parse","field","options","merge","update","create","has","collection","name","collectionRef","filters","children","keys","filter","startsWith","slice","length","includes","query","where","op","limit","orderBy","docs","every","stored","map","empty","size","doc","add","fakeFirestore","runTransaction","fn","writes","outcome","write","recursiveDelete","resetFakeFirestore","clear"],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* A small in-memory stand-in for the firebase-admin Firestore surface the
|
|
19
|
+
* print queue uses (AGL-3619), for specs. Transactions are OPTIMISTIC, as
|
|
20
|
+
* Firestore's server SDK effectively is under contention: every read records
|
|
21
|
+
* the version it saw, the commit re-checks them (and re-runs any query read
|
|
22
|
+
* in the transaction), and a conflict retries the whole function. Each read
|
|
23
|
+
* yields to the event loop, so two transactions started together really do
|
|
24
|
+
* interleave, which is what a race spec needs.
|
|
25
|
+
*
|
|
26
|
+
* Supports: `collection().doc()`, `get`, `set` (with `merge`), `create`,
|
|
27
|
+
* `update`, `delete`; queries with `==`, `in` and `array-contains`, `orderBy`, `limit`,
|
|
28
|
+
* and a collection's `count()`;
|
|
29
|
+
* `runTransaction` with `get` (document or query), `set`, `update`;
|
|
30
|
+
* `batch()`. Field paths are top-level only.
|
|
31
|
+
*/
|
|
32
|
+
interface Stored {
|
|
33
|
+
data: Record<string, any>;
|
|
34
|
+
version: number;
|
|
35
|
+
}
|
|
36
|
+
export declare class MemoryFirestore {
|
|
37
|
+
readonly docs: Map<string, Stored>;
|
|
38
|
+
private autoId;
|
|
39
|
+
private clock;
|
|
40
|
+
/** Committed transactions that had to retry, for specs that assert contention happened. */
|
|
41
|
+
retries: number;
|
|
42
|
+
collection(path: string): MemoryCollection;
|
|
43
|
+
/** The document at a slash path, for assertions. */
|
|
44
|
+
read(path: string): Record<string, any> | undefined;
|
|
45
|
+
nextId(): string;
|
|
46
|
+
write(path: string, data: Record<string, any> | null): void;
|
|
47
|
+
version(path: string): number;
|
|
48
|
+
batch(): {
|
|
49
|
+
set: (ref: MemoryDoc, data: any, options?: {
|
|
50
|
+
merge?: boolean;
|
|
51
|
+
}) => number;
|
|
52
|
+
update: (ref: MemoryDoc, data: any) => number;
|
|
53
|
+
delete: (ref: MemoryDoc) => number;
|
|
54
|
+
commit: () => Promise<void>;
|
|
55
|
+
};
|
|
56
|
+
runTransaction<T>(fn: (transaction: any) => Promise<T>): Promise<T>;
|
|
57
|
+
}
|
|
58
|
+
export declare class MemoryCollection {
|
|
59
|
+
readonly store: MemoryFirestore;
|
|
60
|
+
readonly path: string;
|
|
61
|
+
constructor(store: MemoryFirestore, path: string);
|
|
62
|
+
doc(id?: string): MemoryDoc;
|
|
63
|
+
where(field: string, op: MemoryFilterOp, value: unknown): MemoryQuery;
|
|
64
|
+
orderBy(field: string, direction?: 'asc' | 'desc'): MemoryQuery;
|
|
65
|
+
limit(count: number): MemoryQuery;
|
|
66
|
+
/** The aggregate: its result's `data().count`. */
|
|
67
|
+
count(): MemoryQuery;
|
|
68
|
+
get(): Promise<{
|
|
69
|
+
docs: MemoryDocSnapshot[];
|
|
70
|
+
size: number;
|
|
71
|
+
empty: boolean;
|
|
72
|
+
data: () => {
|
|
73
|
+
count: number;
|
|
74
|
+
};
|
|
75
|
+
}>;
|
|
76
|
+
}
|
|
77
|
+
/** What a {@link MemoryDoc} read returns, shaped like a Firestore snapshot. */
|
|
78
|
+
export interface MemoryDocSnapshot {
|
|
79
|
+
id: string;
|
|
80
|
+
ref: MemoryDoc;
|
|
81
|
+
exists: boolean;
|
|
82
|
+
data: () => Record<string, any> | undefined;
|
|
83
|
+
get: (field: string) => unknown;
|
|
84
|
+
}
|
|
85
|
+
export declare class MemoryDoc {
|
|
86
|
+
readonly store: MemoryFirestore;
|
|
87
|
+
readonly path: string;
|
|
88
|
+
constructor(store: MemoryFirestore, path: string);
|
|
89
|
+
get id(): string;
|
|
90
|
+
collection(name: string): MemoryCollection;
|
|
91
|
+
snapshot(): MemoryDocSnapshot;
|
|
92
|
+
get(): Promise<MemoryDocSnapshot>;
|
|
93
|
+
applySet(data: Record<string, any>, options?: {
|
|
94
|
+
merge?: boolean;
|
|
95
|
+
}): void;
|
|
96
|
+
applyUpdate(data: Record<string, any>): void;
|
|
97
|
+
applyCreate(data: Record<string, any>): void;
|
|
98
|
+
set(data: Record<string, any>, options?: {
|
|
99
|
+
merge?: boolean;
|
|
100
|
+
}): Promise<void>;
|
|
101
|
+
create(data: Record<string, any>): Promise<void>;
|
|
102
|
+
update(data: Record<string, any>): Promise<void>;
|
|
103
|
+
delete(): Promise<void>;
|
|
104
|
+
}
|
|
105
|
+
export type MemoryFilterOp = '==' | 'in' | 'array-contains';
|
|
106
|
+
export declare class MemoryQuery {
|
|
107
|
+
readonly store: MemoryFirestore;
|
|
108
|
+
readonly path: string;
|
|
109
|
+
private filters;
|
|
110
|
+
private order;
|
|
111
|
+
private max;
|
|
112
|
+
constructor(store: MemoryFirestore, path: string);
|
|
113
|
+
private clone;
|
|
114
|
+
where(field: string, op: MemoryFilterOp, value: unknown): MemoryQuery;
|
|
115
|
+
orderBy(field: string, direction?: 'asc' | 'desc'): MemoryQuery;
|
|
116
|
+
limit(count: number): MemoryQuery;
|
|
117
|
+
run(): {
|
|
118
|
+
docs: MemoryDocSnapshot[];
|
|
119
|
+
size: number;
|
|
120
|
+
empty: boolean;
|
|
121
|
+
data: () => {
|
|
122
|
+
count: number;
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
/** The paths and versions this query matches now, to detect a changed result. */
|
|
126
|
+
signature(): string;
|
|
127
|
+
get(): Promise<{
|
|
128
|
+
docs: MemoryDocSnapshot[];
|
|
129
|
+
size: number;
|
|
130
|
+
empty: boolean;
|
|
131
|
+
data: () => {
|
|
132
|
+
count: number;
|
|
133
|
+
};
|
|
134
|
+
}>;
|
|
135
|
+
}
|
|
136
|
+
export {};
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ /**
|
|
17
|
+
* A small in-memory stand-in for the firebase-admin Firestore surface the
|
|
18
|
+
* print queue uses (AGL-3619), for specs. Transactions are OPTIMISTIC, as
|
|
19
|
+
* Firestore's server SDK effectively is under contention: every read records
|
|
20
|
+
* the version it saw, the commit re-checks them (and re-runs any query read
|
|
21
|
+
* in the transaction), and a conflict retries the whole function. Each read
|
|
22
|
+
* yields to the event loop, so two transactions started together really do
|
|
23
|
+
* interleave, which is what a race spec needs.
|
|
24
|
+
*
|
|
25
|
+
* Supports: `collection().doc()`, `get`, `set` (with `merge`), `create`,
|
|
26
|
+
* `update`, `delete`; queries with `==`, `in` and `array-contains`, `orderBy`, `limit`,
|
|
27
|
+
* and a collection's `count()`;
|
|
28
|
+
* `runTransaction` with `get` (document or query), `set`, `update`;
|
|
29
|
+
* `batch()`. Field paths are top-level only.
|
|
30
|
+
*/ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
31
|
+
const tick = ()=>new Promise((resolve)=>setTimeout(resolve, 0));
|
|
32
|
+
export class MemoryFirestore {
|
|
33
|
+
collection(path) {
|
|
34
|
+
return new MemoryCollection(this, path);
|
|
35
|
+
}
|
|
36
|
+
/** The document at a slash path, for assertions. */ read(path) {
|
|
37
|
+
const stored = this.docs.get(path);
|
|
38
|
+
return stored ? _extends({}, stored.data) : undefined;
|
|
39
|
+
}
|
|
40
|
+
nextId() {
|
|
41
|
+
this.autoId += 1;
|
|
42
|
+
return `auto${String(this.autoId).padStart(4, '0')}`;
|
|
43
|
+
}
|
|
44
|
+
write(path, data) {
|
|
45
|
+
this.clock += 1;
|
|
46
|
+
if (data === null) this.docs.delete(path);
|
|
47
|
+
else this.docs.set(path, {
|
|
48
|
+
data: _extends({}, data),
|
|
49
|
+
version: this.clock
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
version(path) {
|
|
53
|
+
var _ref;
|
|
54
|
+
var _this_docs_get;
|
|
55
|
+
return (_ref = (_this_docs_get = this.docs.get(path)) == null ? void 0 : _this_docs_get.version) != null ? _ref : 0;
|
|
56
|
+
}
|
|
57
|
+
batch() {
|
|
58
|
+
const ops = [];
|
|
59
|
+
return {
|
|
60
|
+
set: (ref, data, options)=>ops.push(()=>ref.applySet(data, options)),
|
|
61
|
+
update: (ref, data)=>ops.push(()=>ref.applyUpdate(data)),
|
|
62
|
+
delete: (ref)=>ops.push(()=>this.write(ref.path, null)),
|
|
63
|
+
commit: async ()=>{
|
|
64
|
+
await tick();
|
|
65
|
+
for (const op of ops)op();
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async runTransaction(fn) {
|
|
70
|
+
for(let attempt = 0; attempt < 10; attempt += 1){
|
|
71
|
+
const seen = new Map();
|
|
72
|
+
const queries = [];
|
|
73
|
+
const writes = [];
|
|
74
|
+
const transaction = {
|
|
75
|
+
get: async (target)=>{
|
|
76
|
+
await tick();
|
|
77
|
+
if (target instanceof MemoryDoc) {
|
|
78
|
+
seen.set(target.path, this.version(target.path));
|
|
79
|
+
return target.snapshot();
|
|
80
|
+
}
|
|
81
|
+
const result = target.run();
|
|
82
|
+
queries.push({
|
|
83
|
+
query: target,
|
|
84
|
+
snapshot: target.signature()
|
|
85
|
+
});
|
|
86
|
+
for (const doc of result.docs)seen.set(doc.ref.path, this.version(doc.ref.path));
|
|
87
|
+
return result;
|
|
88
|
+
},
|
|
89
|
+
set: (ref, data, options)=>{
|
|
90
|
+
writes.push(()=>ref.applySet(data, options));
|
|
91
|
+
return transaction;
|
|
92
|
+
},
|
|
93
|
+
update: (ref, data)=>{
|
|
94
|
+
writes.push(()=>ref.applyUpdate(data));
|
|
95
|
+
return transaction;
|
|
96
|
+
},
|
|
97
|
+
create: (ref, data)=>{
|
|
98
|
+
writes.push(()=>ref.applyCreate(data));
|
|
99
|
+
return transaction;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
const result = await fn(transaction);
|
|
103
|
+
await tick();
|
|
104
|
+
const conflicted = [
|
|
105
|
+
...seen
|
|
106
|
+
].some(([path, version])=>this.version(path) !== version) || queries.some(({ query, snapshot })=>query.signature() !== snapshot);
|
|
107
|
+
if (conflicted) {
|
|
108
|
+
this.retries += 1;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
for (const write of writes)write();
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
throw new Error('transaction contention: too many retries');
|
|
115
|
+
}
|
|
116
|
+
constructor(){
|
|
117
|
+
this.docs = new Map();
|
|
118
|
+
this.autoId = 0;
|
|
119
|
+
this.clock = 0;
|
|
120
|
+
/** Committed transactions that had to retry, for specs that assert contention happened. */ this.retries = 0;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
export class MemoryCollection {
|
|
124
|
+
doc(id) {
|
|
125
|
+
return new MemoryDoc(this.store, `${this.path}/${id != null ? id : this.store.nextId()}`);
|
|
126
|
+
}
|
|
127
|
+
where(field, op, value) {
|
|
128
|
+
return new MemoryQuery(this.store, this.path).where(field, op, value);
|
|
129
|
+
}
|
|
130
|
+
orderBy(field, direction = 'asc') {
|
|
131
|
+
return new MemoryQuery(this.store, this.path).orderBy(field, direction);
|
|
132
|
+
}
|
|
133
|
+
limit(count) {
|
|
134
|
+
return new MemoryQuery(this.store, this.path).limit(count);
|
|
135
|
+
}
|
|
136
|
+
/** The aggregate: its result's `data().count`. */ count() {
|
|
137
|
+
return new MemoryQuery(this.store, this.path);
|
|
138
|
+
}
|
|
139
|
+
get() {
|
|
140
|
+
return Promise.resolve(new MemoryQuery(this.store, this.path).run());
|
|
141
|
+
}
|
|
142
|
+
constructor(store, path){
|
|
143
|
+
this.store = store;
|
|
144
|
+
this.path = path;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
export class MemoryDoc {
|
|
148
|
+
get id() {
|
|
149
|
+
var _this_path_split_pop;
|
|
150
|
+
return (_this_path_split_pop = this.path.split('/').pop()) != null ? _this_path_split_pop : '';
|
|
151
|
+
}
|
|
152
|
+
collection(name) {
|
|
153
|
+
return new MemoryCollection(this.store, `${this.path}/${name}`);
|
|
154
|
+
}
|
|
155
|
+
snapshot() {
|
|
156
|
+
const stored = this.store.docs.get(this.path);
|
|
157
|
+
const data = stored ? _extends({}, stored.data) : undefined;
|
|
158
|
+
return {
|
|
159
|
+
id: this.id,
|
|
160
|
+
ref: this,
|
|
161
|
+
exists: Boolean(stored),
|
|
162
|
+
data: ()=>data ? _extends({}, data) : undefined,
|
|
163
|
+
get: (field)=>data == null ? void 0 : data[field]
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
async get() {
|
|
167
|
+
await tick();
|
|
168
|
+
return this.snapshot();
|
|
169
|
+
}
|
|
170
|
+
applySet(data, options) {
|
|
171
|
+
var _this_store_docs_get;
|
|
172
|
+
const previous = (_this_store_docs_get = this.store.docs.get(this.path)) == null ? void 0 : _this_store_docs_get.data;
|
|
173
|
+
this.store.write(this.path, (options == null ? void 0 : options.merge) && previous ? _extends({}, previous, data) : data);
|
|
174
|
+
}
|
|
175
|
+
applyUpdate(data) {
|
|
176
|
+
var _this_store_docs_get;
|
|
177
|
+
const previous = (_this_store_docs_get = this.store.docs.get(this.path)) == null ? void 0 : _this_store_docs_get.data;
|
|
178
|
+
if (!previous) throw Object.assign(new Error('NOT_FOUND'), {
|
|
179
|
+
code: 5
|
|
180
|
+
});
|
|
181
|
+
this.store.write(this.path, _extends({}, previous, data));
|
|
182
|
+
}
|
|
183
|
+
applyCreate(data) {
|
|
184
|
+
if (this.store.docs.has(this.path)) {
|
|
185
|
+
throw Object.assign(new Error('Document already exists'), {
|
|
186
|
+
code: 6
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
this.store.write(this.path, data);
|
|
190
|
+
}
|
|
191
|
+
async set(data, options) {
|
|
192
|
+
await tick();
|
|
193
|
+
this.applySet(data, options);
|
|
194
|
+
}
|
|
195
|
+
async create(data) {
|
|
196
|
+
await tick();
|
|
197
|
+
this.applyCreate(data);
|
|
198
|
+
}
|
|
199
|
+
async update(data) {
|
|
200
|
+
await tick();
|
|
201
|
+
this.applyUpdate(data);
|
|
202
|
+
}
|
|
203
|
+
async delete() {
|
|
204
|
+
await tick();
|
|
205
|
+
this.store.write(this.path, null);
|
|
206
|
+
}
|
|
207
|
+
constructor(store, path){
|
|
208
|
+
this.store = store;
|
|
209
|
+
this.path = path;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
export class MemoryQuery {
|
|
213
|
+
clone() {
|
|
214
|
+
const next = new MemoryQuery(this.store, this.path);
|
|
215
|
+
next.filters = [
|
|
216
|
+
...this.filters
|
|
217
|
+
];
|
|
218
|
+
next.order = this.order;
|
|
219
|
+
next.max = this.max;
|
|
220
|
+
return next;
|
|
221
|
+
}
|
|
222
|
+
where(field, op, value) {
|
|
223
|
+
const next = this.clone();
|
|
224
|
+
next.filters.push({
|
|
225
|
+
field,
|
|
226
|
+
op,
|
|
227
|
+
value
|
|
228
|
+
});
|
|
229
|
+
return next;
|
|
230
|
+
}
|
|
231
|
+
orderBy(field, direction = 'asc') {
|
|
232
|
+
const next = this.clone();
|
|
233
|
+
next.order = {
|
|
234
|
+
field,
|
|
235
|
+
direction
|
|
236
|
+
};
|
|
237
|
+
return next;
|
|
238
|
+
}
|
|
239
|
+
limit(count) {
|
|
240
|
+
const next = this.clone();
|
|
241
|
+
next.max = count;
|
|
242
|
+
return next;
|
|
243
|
+
}
|
|
244
|
+
run() {
|
|
245
|
+
const prefix = `${this.path}/`;
|
|
246
|
+
let rows = [
|
|
247
|
+
...this.store.docs.entries()
|
|
248
|
+
].filter(([path])=>path.startsWith(prefix) && !path.slice(prefix.length).includes('/')).filter(([, stored])=>this.filters.every(({ field, op, value })=>op === 'in' ? value.includes(stored.data[field]) : op === 'array-contains' ? Array.isArray(stored.data[field]) && stored.data[field].includes(value) : stored.data[field] === value));
|
|
249
|
+
if (this.order) {
|
|
250
|
+
const { field, direction } = this.order;
|
|
251
|
+
rows = rows.sort(([, a], [, b])=>{
|
|
252
|
+
const delta = a.data[field] < b.data[field] ? -1 : a.data[field] > b.data[field] ? 1 : 0;
|
|
253
|
+
return direction === 'asc' ? delta : -delta;
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
const docs = rows.slice(0, this.max).map(([path])=>new MemoryDoc(this.store, path).snapshot());
|
|
257
|
+
// `data()` answers a `count()` aggregate read through the same query.
|
|
258
|
+
return {
|
|
259
|
+
docs,
|
|
260
|
+
size: docs.length,
|
|
261
|
+
empty: docs.length === 0,
|
|
262
|
+
data: ()=>({
|
|
263
|
+
count: docs.length
|
|
264
|
+
})
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
/** The paths and versions this query matches now, to detect a changed result. */ signature() {
|
|
268
|
+
return this.run().docs.map((doc)=>`${doc.ref.path}@${this.store.version(doc.ref.path)}`).join('|');
|
|
269
|
+
}
|
|
270
|
+
get() {
|
|
271
|
+
return tick().then(()=>this.run());
|
|
272
|
+
}
|
|
273
|
+
constructor(store, path){
|
|
274
|
+
this.store = store;
|
|
275
|
+
this.path = path;
|
|
276
|
+
this.filters = [];
|
|
277
|
+
this.order = null;
|
|
278
|
+
this.max = Infinity;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
//# sourceMappingURL=memory-firestore.js.map
|