File tree Expand file tree Collapse file tree
packages/ui-extensions-tester Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -4,5 +4,6 @@ import {defaultProjectPlugin} from '../../config/loom';
44export default createPackage ( ( pkg ) => {
55 pkg . entry ( { root : './src/index.ts' } ) ;
66 pkg . entry ( { name : 'checkout' , root : './src/checkout/index.ts' } ) ;
7+ pkg . entry ( { name : 'point-of-sale' , root : './src/point-of-sale/index.ts' } ) ;
78 pkg . use ( defaultProjectPlugin ( ) ) ;
89} ) ;
Original file line number Diff line number Diff line change 1717 "esnext" : " ./checkout.esnext" ,
1818 "import" : " ./checkout.mjs" ,
1919 "require" : " ./checkout.js"
20+ },
21+ "./point-of-sale" : {
22+ "types" : " ./build/ts/point-of-sale/index.d.ts" ,
23+ "esnext" : " ./point-of-sale.esnext" ,
24+ "import" : " ./point-of-sale.mjs" ,
25+ "require" : " ./point-of-sale.js"
2026 }
2127 },
2228 "typesVersions" : {
2329 "*" : {
2430 "checkout" : [
2531 " ./build/ts/checkout/index.d.ts"
32+ ],
33+ "point-of-sale" : [
34+ " ./build/ts/point-of-sale/index.d.ts"
2635 ]
2736 }
2837 },
Original file line number Diff line number Diff line change @@ -14,3 +14,24 @@ export function createSubscribableSignalLike<T>(
1414 destroy : async ( ) => { } ,
1515 } ;
1616}
17+
18+ /**
19+ * A minimal read-only signal for surfaces (like POS) that use
20+ * `ReadonlySignalLike` instead of `SubscribableSignalLike`.
21+ */
22+ export interface MockReadonlySignalLike < T > {
23+ readonly value : T ;
24+ subscribe ( fn : ( value : T ) => void ) : ( ) => void ;
25+ }
26+
27+ /**
28+ * Creates a mock `ReadonlySignalLike` that wraps a static value.
29+ */
30+ export function createReadonlySignalLike < T > (
31+ value : T ,
32+ ) : MockReadonlySignalLike < T > {
33+ return {
34+ value,
35+ subscribe : ( ) => ( ) => { } ,
36+ } ;
37+ }
Original file line number Diff line number Diff line change 11import type { ExtensionTarget as CheckoutExtensionTarget } from '@shopify/ui-extensions/checkout' ;
2+ import type { ExtensionTarget as PosExtensionTarget } from '@shopify/ui-extensions/point-of-sale' ;
23
34import type { AnyExtensionTarget , ApiForTarget } from '../targets' ;
45import { createMockCheckoutTargetApi } from '../checkout' ;
6+ import { createMockPosTargetApi } from '../point-of-sale' ;
57
68function isCheckoutTarget ( target : string ) : target is CheckoutExtensionTarget {
79 return (
@@ -12,17 +14,27 @@ function isCheckoutTarget(target: string): target is CheckoutExtensionTarget {
1214 ) ;
1315}
1416
17+ function isPosTarget ( target : string ) : target is PosExtensionTarget {
18+ return target . startsWith ( 'pos.' ) ;
19+ }
20+
1521/**
1622 * Returns the default mock API values for a given target.
1723 */
1824export function createMockTargetApi < T extends CheckoutExtensionTarget > (
1925 target : T ,
2026) : ApiForTarget < T > ;
27+ export function createMockTargetApi < T extends PosExtensionTarget > (
28+ target : T ,
29+ ) : ApiForTarget < T > ;
2130export function createMockTargetApi ( target : AnyExtensionTarget ) : never ;
2231export function createMockTargetApi ( target : AnyExtensionTarget ) : object {
2332 if ( isCheckoutTarget ( target ) ) {
2433 return createMockCheckoutTargetApi ( target ) ;
2534 }
35+ if ( isPosTarget ( target ) ) {
36+ return createMockPosTargetApi ( target ) ;
37+ }
2638 throw new Error (
2739 `Unsupported target: "${ target } ". No mock factory is available for this target.` ,
2840 ) ;
You can’t perform that action at this time.
0 commit comments