expo-iap 3.0.8 → 3.1.1-rc.1

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.
Files changed (99) hide show
  1. package/CLAUDE.md +2 -2
  2. package/CONTRIBUTING.md +19 -0
  3. package/README.md +18 -6
  4. package/android/build.gradle +24 -1
  5. package/android/src/main/java/expo/modules/iap/ExpoIapLog.kt +69 -0
  6. package/android/src/main/java/expo/modules/iap/ExpoIapModule.kt +190 -59
  7. package/build/ExpoIapModule.d.ts +1 -0
  8. package/build/ExpoIapModule.d.ts.map +1 -1
  9. package/build/ExpoIapModule.js +29 -4
  10. package/build/ExpoIapModule.js.map +1 -1
  11. package/build/index.d.ts +20 -47
  12. package/build/index.d.ts.map +1 -1
  13. package/build/index.js +94 -137
  14. package/build/index.js.map +1 -1
  15. package/build/modules/android.d.ts.map +1 -1
  16. package/build/modules/android.js +2 -1
  17. package/build/modules/android.js.map +1 -1
  18. package/build/modules/ios.d.ts +16 -1
  19. package/build/modules/ios.d.ts.map +1 -1
  20. package/build/modules/ios.js +29 -16
  21. package/build/modules/ios.js.map +1 -1
  22. package/build/types.d.ts +8 -6
  23. package/build/types.d.ts.map +1 -1
  24. package/build/types.js.map +1 -1
  25. package/build/useIAP.d.ts +1 -1
  26. package/build/useIAP.d.ts.map +1 -1
  27. package/build/useIAP.js +12 -15
  28. package/build/useIAP.js.map +1 -1
  29. package/build/utils/constants.d.ts +2 -0
  30. package/build/utils/constants.d.ts.map +1 -1
  31. package/build/utils/constants.js +9 -2
  32. package/build/utils/constants.js.map +1 -1
  33. package/build/utils/errorMapping.d.ts +32 -23
  34. package/build/utils/errorMapping.d.ts.map +1 -1
  35. package/build/utils/errorMapping.js +117 -22
  36. package/build/utils/errorMapping.js.map +1 -1
  37. package/coverage/clover.xml +497 -0
  38. package/coverage/coverage-final.json +6 -0
  39. package/coverage/lcov-report/base.css +224 -0
  40. package/coverage/lcov-report/block-navigation.js +87 -0
  41. package/coverage/lcov-report/favicon.png +0 -0
  42. package/coverage/lcov-report/index.html +161 -0
  43. package/coverage/lcov-report/prettify.css +1 -0
  44. package/coverage/lcov-report/prettify.js +2 -0
  45. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  46. package/coverage/lcov-report/sorter.js +196 -0
  47. package/coverage/lcov-report/src/ExpoIap.types.ts.html +1243 -0
  48. package/coverage/lcov-report/src/PurchaseError.ts.html +787 -0
  49. package/coverage/lcov-report/src/helpers/index.html +116 -0
  50. package/coverage/lcov-report/src/helpers/subscription.ts.html +496 -0
  51. package/coverage/lcov-report/src/index.html +116 -0
  52. package/coverage/lcov-report/src/index.ts.html +1993 -0
  53. package/coverage/lcov-report/src/modules/android.ts.html +550 -0
  54. package/coverage/lcov-report/src/modules/index.html +131 -0
  55. package/coverage/lcov-report/src/modules/ios.ts.html +1222 -0
  56. package/coverage/lcov-report/src/purchase-error.ts.html +880 -0
  57. package/coverage/lcov-report/src/types/ExpoIapAndroid.types.ts.html +493 -0
  58. package/coverage/lcov-report/src/types/index.html +116 -0
  59. package/coverage/lcov-report/src/useIap.ts.html +1483 -0
  60. package/coverage/lcov-report/src/utils/errorMapping.ts.html +1069 -0
  61. package/coverage/lcov-report/src/utils/index.html +116 -0
  62. package/coverage/lcov-report/src/utils/purchase.ts.html +241 -0
  63. package/coverage/lcov.info +929 -0
  64. package/expo-module.config.json +10 -3
  65. package/ios/ExpoIap.podspec +3 -2
  66. package/ios/ExpoIapHelper.swift +96 -0
  67. package/ios/ExpoIapLog.swift +127 -0
  68. package/ios/ExpoIapModule.swift +218 -340
  69. package/ios/OneSideModule.swift +489 -0
  70. package/ios/expoiap.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  71. package/ios/expoiap.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  72. package/openiap-versions.json +5 -0
  73. package/package.json +4 -3
  74. package/plugin/build/withIAP.d.ts +22 -9
  75. package/plugin/build/withIAP.js +163 -13
  76. package/plugin/jest.config.js +13 -3
  77. package/plugin/src/expoConfig.augmentation.d.ts +38 -0
  78. package/plugin/src/withIAP.ts +272 -22
  79. package/plugin/tsconfig.json +2 -1
  80. package/plugin/tsconfig.tsbuildinfo +1 -1
  81. package/scripts/update-types.mjs +20 -1
  82. package/src/ExpoIapModule.ts +45 -4
  83. package/src/index.ts +122 -165
  84. package/src/modules/android.ts +2 -1
  85. package/src/modules/ios.ts +31 -19
  86. package/src/types.ts +8 -6
  87. package/src/useIAP.ts +17 -25
  88. package/src/utils/constants.ts +11 -2
  89. package/src/utils/errorMapping.ts +203 -23
  90. package/build/purchase-error.d.ts +0 -67
  91. package/build/purchase-error.d.ts.map +0 -1
  92. package/build/purchase-error.js +0 -166
  93. package/build/purchase-error.js.map +0 -1
  94. package/build/utils/purchase.d.ts +0 -9
  95. package/build/utils/purchase.d.ts.map +0 -1
  96. package/build/utils/purchase.js +0 -34
  97. package/build/utils/purchase.js.map +0 -1
  98. package/src/purchase-error.ts +0 -265
  99. package/src/utils/purchase.ts +0 -52
@@ -1 +1 @@
1
- {"version":3,"file":"errorMapping.js","sourceRoot":"","sources":["../../src/utils/errorMapping.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Error mapping utilities for expo-iap\n * Provides helper functions for handling platform-specific errors\n */\n\nimport {ErrorCode} from '../types';\n\ntype ErrorLike = string | {code?: ErrorCode | string; message?: string};\n\nconst ERROR_CODES = new Set<string>(Object.values(ErrorCode));\n\nconst normalizeErrorCode = (code?: string | null): string | undefined => {\n if (!code) {\n return undefined;\n }\n\n if (ERROR_CODES.has(code)) {\n return code;\n }\n\n if (code.startsWith('E_')) {\n const trimmed = code.substring(2);\n if (ERROR_CODES.has(trimmed)) {\n return trimmed;\n }\n }\n\n return code;\n};\n\nfunction extractCode(error: unknown): string | undefined {\n if (typeof error === 'string') {\n return normalizeErrorCode(error);\n }\n\n if (error && typeof error === 'object' && 'code' in error) {\n return normalizeErrorCode((error as {code?: string}).code);\n }\n\n return undefined;\n}\n\n/**\n * Checks if an error is a user cancellation\n * @param error Error object or error code\n * @returns True if the error represents user cancellation\n */\nexport function isUserCancelledError(error: unknown): boolean {\n return extractCode(error) === ErrorCode.UserCancelled;\n}\n\n/**\n * Checks if an error is related to network connectivity\n * @param error Error object or error code\n * @returns True if the error is network-related\n */\nexport function isNetworkError(error: unknown): boolean {\n const networkErrors: ErrorCode[] = [\n ErrorCode.NetworkError,\n ErrorCode.RemoteError,\n ErrorCode.ServiceError,\n ErrorCode.ServiceDisconnected,\n ErrorCode.BillingUnavailable,\n ];\n\n const code = extractCode(error);\n return !!code && (networkErrors as string[]).includes(code);\n}\n\n/**\n * Checks if an error is recoverable (user can retry)\n * @param error Error object or error code\n * @returns True if the error is potentially recoverable\n */\nexport function isRecoverableError(error: unknown): boolean {\n const recoverableErrors: ErrorCode[] = [\n ErrorCode.NetworkError,\n ErrorCode.RemoteError,\n ErrorCode.ServiceError,\n ErrorCode.Interrupted,\n ErrorCode.ServiceDisconnected,\n ErrorCode.BillingUnavailable,\n ErrorCode.QueryProduct,\n ErrorCode.InitConnection,\n ];\n\n const code = extractCode(error);\n return !!code && (recoverableErrors as string[]).includes(code);\n}\n\n/**\n * Gets a user-friendly error message for display\n * @param error Error object or error code\n * @returns User-friendly error message\n */\nexport function getUserFriendlyErrorMessage(error: ErrorLike): string {\n const errorCode = extractCode(error);\n\n switch (errorCode) {\n case ErrorCode.UserCancelled:\n return 'Purchase was cancelled by user';\n case ErrorCode.NetworkError:\n return 'Network connection error. Please check your internet connection and try again.';\n case ErrorCode.ReceiptFinished:\n return 'Receipt already finished';\n case ErrorCode.ServiceDisconnected:\n return 'Billing service disconnected. Please try again.';\n case ErrorCode.BillingUnavailable:\n return 'Billing is unavailable on this device or account.';\n case ErrorCode.ItemUnavailable:\n return 'This item is not available for purchase';\n case ErrorCode.ItemNotOwned:\n return \"You don't own this item\";\n case ErrorCode.AlreadyOwned:\n return 'You already own this item';\n case ErrorCode.SkuNotFound:\n return 'Requested product could not be found';\n case ErrorCode.SkuOfferMismatch:\n return 'Selected offer does not match the SKU';\n case ErrorCode.DeferredPayment:\n return 'Payment is pending approval';\n case ErrorCode.NotPrepared:\n return 'In-app purchase is not ready. Please try again later.';\n case ErrorCode.ServiceError:\n return 'Store service error. Please try again later.';\n case ErrorCode.FeatureNotSupported:\n return 'This feature is not supported on this device.';\n case ErrorCode.TransactionValidationFailed:\n return 'Transaction could not be verified';\n case ErrorCode.ReceiptFailed:\n return 'Receipt processing failed';\n case ErrorCode.EmptySkuList:\n return 'No product IDs provided';\n case ErrorCode.InitConnection:\n return 'Failed to initialize billing connection';\n case ErrorCode.QueryProduct:\n return 'Failed to query products. Please try again later.';\n default: {\n if (error && typeof error === 'object' && 'message' in error) {\n return (\n (error as {message?: string}).message ??\n 'An unexpected error occurred'\n );\n }\n return 'An unexpected error occurred';\n }\n }\n}\n"]}
1
+ {"version":3,"file":"errorMapping.js","sourceRoot":"","sources":["../../src/utils/errorMapping.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Error mapping utilities for expo-iap.\n * Provides helpers for working with platform-specific error codes\n * and constructing structured purchase errors.\n */\n\nimport {NATIVE_ERROR_CODES} from '../ExpoIapModule';\nimport {ErrorCode, IapPlatform} from '../types';\n\nexport interface PurchaseErrorProps {\n message: string;\n responseCode?: number;\n debugMessage?: string;\n code?: ErrorCode;\n productId?: string;\n platform?: IapPlatform;\n}\n\ntype PlatformErrorData = {\n code?: string | number;\n message?: string;\n responseCode?: number;\n debugMessage?: string;\n productId?: string;\n};\n\nexport type PurchaseError = Error & PurchaseErrorProps;\n\nconst toStandardizedCode = (errorCode: ErrorCode): string =>\n errorCode.startsWith('E_') ? errorCode : `E_${errorCode}`;\n\nconst normalizePlatform = (platform: IapPlatform): 'ios' | 'android' =>\n typeof platform === 'string' && platform.toLowerCase() === 'ios'\n ? 'ios'\n : 'android';\n\nconst COMMON_ERROR_CODE_MAP: Record<ErrorCode, string> = {\n [ErrorCode.Unknown]: toStandardizedCode(ErrorCode.Unknown),\n [ErrorCode.UserCancelled]: toStandardizedCode(ErrorCode.UserCancelled),\n [ErrorCode.UserError]: toStandardizedCode(ErrorCode.UserError),\n [ErrorCode.ItemUnavailable]: toStandardizedCode(ErrorCode.ItemUnavailable),\n [ErrorCode.RemoteError]: toStandardizedCode(ErrorCode.RemoteError),\n [ErrorCode.NetworkError]: toStandardizedCode(ErrorCode.NetworkError),\n [ErrorCode.ServiceError]: toStandardizedCode(ErrorCode.ServiceError),\n [ErrorCode.ReceiptFailed]: toStandardizedCode(ErrorCode.ReceiptFailed),\n [ErrorCode.ReceiptFinished]: toStandardizedCode(ErrorCode.ReceiptFinished),\n [ErrorCode.ReceiptFinishedFailed]: toStandardizedCode(\n ErrorCode.ReceiptFinishedFailed,\n ),\n [ErrorCode.NotPrepared]: toStandardizedCode(ErrorCode.NotPrepared),\n [ErrorCode.NotEnded]: toStandardizedCode(ErrorCode.NotEnded),\n [ErrorCode.AlreadyOwned]: toStandardizedCode(ErrorCode.AlreadyOwned),\n [ErrorCode.DeveloperError]: toStandardizedCode(ErrorCode.DeveloperError),\n [ErrorCode.BillingResponseJsonParseError]: toStandardizedCode(\n ErrorCode.BillingResponseJsonParseError,\n ),\n [ErrorCode.DeferredPayment]: toStandardizedCode(ErrorCode.DeferredPayment),\n [ErrorCode.Interrupted]: toStandardizedCode(ErrorCode.Interrupted),\n [ErrorCode.IapNotAvailable]: toStandardizedCode(ErrorCode.IapNotAvailable),\n [ErrorCode.PurchaseError]: toStandardizedCode(ErrorCode.PurchaseError),\n [ErrorCode.SyncError]: toStandardizedCode(ErrorCode.SyncError),\n [ErrorCode.TransactionValidationFailed]: toStandardizedCode(\n ErrorCode.TransactionValidationFailed,\n ),\n [ErrorCode.ActivityUnavailable]: toStandardizedCode(\n ErrorCode.ActivityUnavailable,\n ),\n [ErrorCode.AlreadyPrepared]: toStandardizedCode(ErrorCode.AlreadyPrepared),\n [ErrorCode.Pending]: toStandardizedCode(ErrorCode.Pending),\n [ErrorCode.ConnectionClosed]: toStandardizedCode(ErrorCode.ConnectionClosed),\n [ErrorCode.InitConnection]: toStandardizedCode(ErrorCode.InitConnection),\n [ErrorCode.ServiceDisconnected]: toStandardizedCode(\n ErrorCode.ServiceDisconnected,\n ),\n [ErrorCode.QueryProduct]: toStandardizedCode(ErrorCode.QueryProduct),\n [ErrorCode.SkuNotFound]: toStandardizedCode(ErrorCode.SkuNotFound),\n [ErrorCode.SkuOfferMismatch]: toStandardizedCode(ErrorCode.SkuOfferMismatch),\n [ErrorCode.ItemNotOwned]: toStandardizedCode(ErrorCode.ItemNotOwned),\n [ErrorCode.BillingUnavailable]: toStandardizedCode(\n ErrorCode.BillingUnavailable,\n ),\n [ErrorCode.FeatureNotSupported]: toStandardizedCode(\n ErrorCode.FeatureNotSupported,\n ),\n [ErrorCode.EmptySkuList]: toStandardizedCode(ErrorCode.EmptySkuList),\n};\n\nexport const ErrorCodeMapping = {\n ios: COMMON_ERROR_CODE_MAP,\n android: COMMON_ERROR_CODE_MAP,\n} as const;\n\nconst OPENIAP_ERROR_CODE_SET: Set<string> = new Set(\n Object.values(ErrorCode).map((code) => toStandardizedCode(code)),\n);\n\nexport const createPurchaseError = (\n props: PurchaseErrorProps,\n): PurchaseError => {\n const error = new Error(props.message) as PurchaseError;\n error.name = '[expo-iap]: PurchaseError';\n error.responseCode = props.responseCode;\n error.debugMessage = props.debugMessage;\n error.code = props.code;\n error.productId = props.productId;\n error.platform = props.platform;\n return error;\n};\n\nexport const createPurchaseErrorFromPlatform = (\n errorData: PlatformErrorData,\n platform: IapPlatform,\n): PurchaseError => {\n const normalizedPlatform = normalizePlatform(platform);\n const errorCode = errorData.code\n ? ErrorCodeUtils.fromPlatformCode(errorData.code, normalizedPlatform)\n : ErrorCode.Unknown;\n\n return createPurchaseError({\n message: errorData.message ?? 'Unknown error occurred',\n responseCode: errorData.responseCode,\n debugMessage: errorData.debugMessage,\n code: errorCode,\n productId: errorData.productId,\n platform,\n });\n};\n\nexport const ErrorCodeUtils = {\n getNativeErrorCode: (errorCode: ErrorCode): string => {\n const standardized = toStandardizedCode(errorCode);\n return (\n (NATIVE_ERROR_CODES as Record<string, string | undefined>)[\n standardized\n ] ?? standardized\n );\n },\n fromPlatformCode: (\n platformCode: string | number,\n _platform: IapPlatform,\n ): ErrorCode => {\n if (typeof platformCode === 'string' && platformCode.startsWith('E_')) {\n if (OPENIAP_ERROR_CODE_SET.has(platformCode)) {\n const match = Object.entries(COMMON_ERROR_CODE_MAP).find(\n ([, value]) => value === platformCode,\n );\n if (match) {\n return match[0] as ErrorCode;\n }\n }\n }\n\n for (const [standardized, nativeCode] of Object.entries(\n (NATIVE_ERROR_CODES || {}) as Record<string, string | number>,\n )) {\n if (\n nativeCode === platformCode &&\n OPENIAP_ERROR_CODE_SET.has(standardized)\n ) {\n const match = Object.entries(COMMON_ERROR_CODE_MAP).find(\n ([, mappedCode]) => mappedCode === standardized,\n );\n if (match) {\n return match[0] as ErrorCode;\n }\n }\n }\n\n for (const [errorCode, mappedCode] of Object.entries(\n COMMON_ERROR_CODE_MAP,\n )) {\n if (mappedCode === platformCode) {\n return errorCode as ErrorCode;\n }\n }\n\n return ErrorCode.Unknown;\n },\n toPlatformCode: (\n errorCode: ErrorCode,\n _platform: IapPlatform,\n ): string | number => {\n const standardized = toStandardizedCode(errorCode);\n const native = (NATIVE_ERROR_CODES as Record<string, string | number>)[\n standardized\n ];\n return native ?? COMMON_ERROR_CODE_MAP[errorCode] ?? 'E_UNKNOWN';\n },\n isValidForPlatform: (\n errorCode: ErrorCode,\n platform: IapPlatform,\n ): boolean => {\n const standardized = toStandardizedCode(errorCode);\n if (\n (NATIVE_ERROR_CODES as Record<string, unknown>)[standardized] !==\n undefined\n ) {\n return true;\n }\n return standardized in ErrorCodeMapping[normalizePlatform(platform)];\n },\n};\n\n// ---------------------------------------------------------------------------\n// Convenience helpers for interpreting error objects\n// ---------------------------------------------------------------------------\n\ntype ErrorLike = string | {code?: ErrorCode | string; message?: string};\n\nconst ERROR_CODES = new Set<string>(Object.values(ErrorCode));\n\nconst normalizeErrorCode = (code?: string | null): string | undefined => {\n if (!code) {\n return undefined;\n }\n\n if (ERROR_CODES.has(code)) {\n return code;\n }\n\n if (code.startsWith('E_')) {\n const trimmed = code.substring(2);\n if (ERROR_CODES.has(trimmed)) {\n return trimmed;\n }\n }\n\n return code;\n};\n\nfunction extractCode(error: unknown): string | undefined {\n if (typeof error === 'string') {\n return normalizeErrorCode(error);\n }\n\n if (error && typeof error === 'object' && 'code' in error) {\n return normalizeErrorCode((error as {code?: string}).code);\n }\n\n return undefined;\n}\n\nexport function isUserCancelledError(error: unknown): boolean {\n return extractCode(error) === ErrorCode.UserCancelled;\n}\n\nexport function isNetworkError(error: unknown): boolean {\n const networkErrors: ErrorCode[] = [\n ErrorCode.NetworkError,\n ErrorCode.RemoteError,\n ErrorCode.ServiceError,\n ErrorCode.ServiceDisconnected,\n ErrorCode.BillingUnavailable,\n ];\n\n const code = extractCode(error);\n return !!code && (networkErrors as string[]).includes(code);\n}\n\nexport function isRecoverableError(error: unknown): boolean {\n const recoverableErrors: ErrorCode[] = [\n ErrorCode.NetworkError,\n ErrorCode.RemoteError,\n ErrorCode.ServiceError,\n ErrorCode.Interrupted,\n ErrorCode.ServiceDisconnected,\n ErrorCode.BillingUnavailable,\n ErrorCode.QueryProduct,\n ErrorCode.InitConnection,\n ];\n\n const code = extractCode(error);\n return !!code && (recoverableErrors as string[]).includes(code);\n}\n\nexport function getUserFriendlyErrorMessage(error: ErrorLike): string {\n const errorCode = extractCode(error);\n\n switch (errorCode) {\n case ErrorCode.UserCancelled:\n return 'Purchase was cancelled by user';\n case ErrorCode.NetworkError:\n return 'Network connection error. Please check your internet connection and try again.';\n case ErrorCode.ReceiptFinished:\n return 'Receipt already finished';\n case ErrorCode.ServiceDisconnected:\n return 'Billing service disconnected. Please try again.';\n case ErrorCode.BillingUnavailable:\n return 'Billing is unavailable on this device or account.';\n case ErrorCode.ItemUnavailable:\n return 'This item is not available for purchase';\n case ErrorCode.ItemNotOwned:\n return \"You don't own this item\";\n case ErrorCode.AlreadyOwned:\n return 'You already own this item';\n case ErrorCode.SkuNotFound:\n return 'Requested product could not be found';\n case ErrorCode.SkuOfferMismatch:\n return 'Selected offer does not match the SKU';\n case ErrorCode.DeferredPayment:\n return 'Payment is pending approval';\n case ErrorCode.NotPrepared:\n return 'In-app purchase is not ready. Please try again later.';\n case ErrorCode.ServiceError:\n return 'Store service error. Please try again later.';\n case ErrorCode.FeatureNotSupported:\n return 'This feature is not supported on this device.';\n case ErrorCode.TransactionValidationFailed:\n return 'Transaction could not be verified';\n case ErrorCode.ReceiptFailed:\n return 'Receipt processing failed';\n case ErrorCode.EmptySkuList:\n return 'No product IDs provided';\n case ErrorCode.InitConnection:\n return 'Failed to initialize billing connection';\n case ErrorCode.QueryProduct:\n return 'Failed to query products. Please try again later.';\n default: {\n if (error && typeof error === 'object' && 'message' in error) {\n return (\n (error as {message?: string}).message ??\n 'An unexpected error occurred'\n );\n }\n return 'An unexpected error occurred';\n }\n }\n}\n"]}
@@ -0,0 +1,497 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <coverage generated="1758472575911" clover="3.2.0">
3
+ <project timestamp="1758472575911" name="All files">
4
+ <metrics statements="464" coveredstatements="459" conditionals="252" coveredconditionals="230" methods="84" coveredmethods="75" elements="800" coveredelements="764" complexity="0" loc="464" ncloc="464" packages="4" files="5" classes="5"/>
5
+ <package name="src">
6
+ <metrics statements="188" coveredstatements="187" conditionals="88" coveredconditionals="80" methods="38" coveredmethods="30"/>
7
+ <file name="index.ts" path="/Users/hyo/Github/hyochan/expo-iap/src/index.ts">
8
+ <metrics statements="188" coveredstatements="187" conditionals="88" coveredconditionals="80" methods="38" coveredmethods="30"/>
9
+ <line num="2" count="1" type="stmt"/>
10
+ <line num="3" count="1" type="stmt"/>
11
+ <line num="6" count="1" type="stmt"/>
12
+ <line num="7" count="1" type="stmt"/>
13
+ <line num="14" count="1" type="stmt"/>
14
+ <line num="41" count="1" type="stmt"/>
15
+ <line num="42" count="1" type="stmt"/>
16
+ <line num="45" count="1" type="stmt"/>
17
+ <line num="46" count="1" type="stmt"/>
18
+ <line num="47" count="1" type="stmt"/>
19
+ <line num="50" count="1" type="stmt"/>
20
+ <line num="51" count="1" type="stmt"/>
21
+ <line num="52" count="1" type="stmt"/>
22
+ <line num="56" count="1" type="cond" truecount="2" falsecount="0"/>
23
+ <line num="57" count="1" type="stmt"/>
24
+ <line num="58" count="1" type="stmt"/>
25
+ <line num="59" count="1" type="stmt"/>
26
+ <line num="84" count="1" type="cond" truecount="1" falsecount="1"/>
27
+ <line num="92" count="1" type="stmt"/>
28
+ <line num="93" count="18" type="cond" truecount="1" falsecount="0"/>
29
+ <line num="94" count="1" type="stmt"/>
30
+ <line num="99" count="18" type="cond" truecount="4" falsecount="0"/>
31
+ <line num="100" count="9" type="stmt"/>
32
+ <line num="105" count="9" type="cond" truecount="1" falsecount="0"/>
33
+ <line num="106" count="5" type="stmt"/>
34
+ <line num="111" count="4" type="cond" truecount="1" falsecount="0"/>
35
+ <line num="112" count="3" type="stmt"/>
36
+ <line num="117" count="1" type="stmt"/>
37
+ <line num="120" count="1" type="stmt"/>
38
+ <line num="121" count="7" type="stmt"/>
39
+ <line num="122" count="7" type="cond" truecount="1" falsecount="0"/>
40
+ <line num="123" count="5" type="stmt"/>
41
+ <line num="126" count="2" type="stmt"/>
42
+ <line num="127" count="2" type="cond" truecount="2" falsecount="2"/>
43
+ <line num="128" count="0" type="stmt"/>
44
+ <line num="131" count="2" type="stmt"/>
45
+ <line num="134" count="1" type="stmt"/>
46
+ <line num="135" count="7" type="stmt"/>
47
+ <line num="137" count="1" type="stmt"/>
48
+ <line num="140" count="1" type="stmt"/>
49
+ <line num="141" count="1" type="stmt"/>
50
+ <line num="142" count="1" type="stmt"/>
51
+ <line num="144" count="1" type="stmt"/>
52
+ <line num="148" count="1" type="stmt"/>
53
+ <line num="151" count="1" type="stmt"/>
54
+ <line num="154" count="1" type="stmt"/>
55
+ <line num="155" count="1" type="stmt"/>
56
+ <line num="157" count="1" type="stmt"/>
57
+ <line num="161" count="1" type="stmt"/>
58
+ <line num="184" count="1" type="stmt"/>
59
+ <line num="187" count="2" type="cond" truecount="1" falsecount="0"/>
60
+ <line num="188" count="1" type="stmt"/>
61
+ <line num="191" count="1" type="stmt"/>
62
+ <line num="193" count="1" type="stmt"/>
63
+ <line num="196" count="1" type="stmt"/>
64
+ <line num="197" count="1" type="stmt"/>
65
+ <line num="199" count="1" type="stmt"/>
66
+ <line num="200" count="1" type="stmt"/>
67
+ <line num="209" count="1" type="stmt"/>
68
+ <line num="210" count="6" type="stmt"/>
69
+ <line num="211" count="6" type="cond" truecount="1" falsecount="1"/>
70
+ <line num="213" count="6" type="cond" truecount="3" falsecount="0"/>
71
+ <line num="214" count="1" type="stmt"/>
72
+ <line num="220" count="5" type="stmt"/>
73
+ <line num="223" count="5" type="stmt"/>
74
+ <line num="225" count="5" type="stmt"/>
75
+ <line num="228" count="3" type="stmt"/>
76
+ <line num="229" count="6" type="cond" truecount="1" falsecount="0"/>
77
+ <line num="230" count="1" type="stmt"/>
78
+ <line num="232" count="5" type="stmt"/>
79
+ <line num="233" count="5" type="cond" truecount="2" falsecount="0"/>
80
+ <line num="236" count="5" type="stmt"/>
81
+ <line num="239" count="1" type="stmt"/>
82
+ <line num="240" count="3" type="cond" truecount="1" falsecount="0"/>
83
+ <line num="241" count="1" type="stmt"/>
84
+ <line num="243" count="2" type="stmt"/>
85
+ <line num="244" count="2" type="cond" truecount="2" falsecount="0"/>
86
+ <line num="247" count="5" type="stmt"/>
87
+ <line num="250" count="4" type="cond" truecount="1" falsecount="0"/>
88
+ <line num="251" count="2" type="stmt"/>
89
+ <line num="253" count="2" type="cond" truecount="1" falsecount="0"/>
90
+ <line num="254" count="1" type="stmt"/>
91
+ <line num="256" count="1" type="stmt"/>
92
+ <line num="259" count="5" type="cond" truecount="1" falsecount="0"/>
93
+ <line num="260" count="3" type="stmt"/>
94
+ <line num="261" count="3" type="stmt"/>
95
+ <line num="264" count="2" type="cond" truecount="1" falsecount="0"/>
96
+ <line num="265" count="1" type="stmt"/>
97
+ <line num="266" count="1" type="stmt"/>
98
+ <line num="269" count="1" type="stmt"/>
99
+ <line num="272" count="1" type="stmt"/>
100
+ <line num="274" count="1" type="stmt"/>
101
+ <line num="275" count="4" type="stmt"/>
102
+ <line num="282" count="4" type="cond" truecount="2" falsecount="0"/>
103
+ <line num="284" count="2" type="stmt"/>
104
+ <line num="288" count="1" type="stmt"/>
105
+ <line num="289" count="1" type="stmt"/>
106
+ <line num="291" count="4" type="stmt"/>
107
+ <line num="292" count="4" type="stmt"/>
108
+ <line num="295" count="1" type="stmt"/>
109
+ <line num="297" count="4" type="cond" truecount="1" falsecount="0"/>
110
+ <line num="298" count="2" type="cond" truecount="1" falsecount="0"/>
111
+ <line num="299" count="1" type="stmt"/>
112
+ <line num="301" count="1" type="stmt"/>
113
+ <line num="303" count="2" type="stmt"/>
114
+ <line num="332" count="10" type="cond" truecount="2" falsecount="0"/>
115
+ <line num="366" count="1" type="stmt"/>
116
+ <line num="369" count="13" type="stmt"/>
117
+ <line num="370" count="13" type="stmt"/>
118
+ <line num="371" count="12" type="stmt"/>
119
+ <line num="373" count="12" type="cond" truecount="1" falsecount="0"/>
120
+ <line num="374" count="6" type="stmt"/>
121
+ <line num="376" count="6" type="cond" truecount="1" falsecount="0"/>
122
+ <line num="377" count="1" type="stmt"/>
123
+ <line num="383" count="5" type="cond" truecount="2" falsecount="0"/>
124
+ <line num="384" count="2" type="stmt"/>
125
+ <line num="388" count="3" type="cond" truecount="2" falsecount="0"/>
126
+ <line num="389" count="2" type="stmt"/>
127
+ <line num="394" count="1" type="stmt"/>
128
+ <line num="397" count="4" type="stmt"/>
129
+ <line num="402" count="4" type="cond" truecount="1" falsecount="0"/>
130
+ <line num="403" count="1" type="stmt"/>
131
+ <line num="406" count="3" type="cond" truecount="1" falsecount="0"/>
132
+ <line num="407" count="2" type="stmt"/>
133
+ <line num="410" count="1" type="cond" truecount="1" falsecount="1"/>
134
+ <line num="413" count="6" type="cond" truecount="1" falsecount="0"/>
135
+ <line num="414" count="5" type="cond" truecount="1" falsecount="0"/>
136
+ <line num="415" count="2" type="stmt"/>
137
+ <line num="420" count="2" type="cond" truecount="1" falsecount="0"/>
138
+ <line num="421" count="1" type="stmt"/>
139
+ <line num="431" count="1" type="stmt"/>
140
+ <line num="433" count="1" type="stmt"/>
141
+ <line num="444" count="1" type="stmt"/>
142
+ <line num="447" count="3" type="cond" truecount="1" falsecount="0"/>
143
+ <line num="448" count="2" type="stmt"/>
144
+ <line num="453" count="2" type="cond" truecount="1" falsecount="0"/>
145
+ <line num="454" count="1" type="stmt"/>
146
+ <line num="467" count="1" type="stmt"/>
147
+ <line num="469" count="1" type="cond" truecount="1" falsecount="1"/>
148
+ <line num="470" count="1" type="cond" truecount="2" falsecount="0"/>
149
+ <line num="471" count="1" type="cond" truecount="2" falsecount="0"/>
150
+ <line num="473" count="1" type="stmt"/>
151
+ <line num="481" count="1" type="stmt"/>
152
+ <line num="487" count="1" type="stmt"/>
153
+ <line num="490" count="1" type="stmt"/>
154
+ <line num="495" count="1" type="stmt"/>
155
+ <line num="498" count="1" type="stmt"/>
156
+ <line num="502" count="6" type="cond" truecount="1" falsecount="0"/>
157
+ <line num="503" count="2" type="stmt"/>
158
+ <line num="504" count="2" type="stmt"/>
159
+ <line num="507" count="4" type="cond" truecount="1" falsecount="0"/>
160
+ <line num="508" count="3" type="cond" truecount="2" falsecount="0"/>
161
+ <line num="510" count="3" type="cond" truecount="1" falsecount="0"/>
162
+ <line num="511" count="1" type="stmt"/>
163
+ <line num="519" count="2" type="cond" truecount="1" falsecount="0"/>
164
+ <line num="520" count="1" type="stmt"/>
165
+ <line num="521" count="1" type="stmt"/>
166
+ <line num="524" count="1" type="stmt"/>
167
+ <line num="525" count="1" type="stmt"/>
168
+ <line num="528" count="1" type="stmt"/>
169
+ <line num="541" count="1" type="stmt"/>
170
+ <line num="542" count="1" type="cond" truecount="1" falsecount="0"/>
171
+ <line num="543" count="1" type="stmt"/>
172
+ <line num="546" count="1" type="stmt"/>
173
+ <line num="570" count="1" type="stmt"/>
174
+ <line num="572" count="1" type="stmt"/>
175
+ <line num="573" count="5" type="cond" truecount="1" falsecount="0"/>
176
+ <line num="574" count="1" type="stmt"/>
177
+ <line num="575" count="1" type="stmt"/>
178
+ <line num="578" count="4" type="cond" truecount="1" falsecount="0"/>
179
+ <line num="579" count="3" type="cond" truecount="1" falsecount="1"/>
180
+ <line num="580" count="1" type="stmt"/>
181
+ <line num="583" count="1" type="stmt"/>
182
+ <line num="594" count="1" type="stmt"/>
183
+ <line num="597" count="4" type="stmt"/>
184
+ <line num="599" count="4" type="cond" truecount="1" falsecount="0"/>
185
+ <line num="600" count="1" type="stmt"/>
186
+ <line num="603" count="3" type="cond" truecount="1" falsecount="0"/>
187
+ <line num="604" count="2" type="cond" truecount="1" falsecount="0"/>
188
+ <line num="610" count="1" type="stmt"/>
189
+ <line num="614" count="1" type="stmt"/>
190
+ <line num="623" count="1" type="stmt"/>
191
+ <line num="626" count="1" type="stmt"/>
192
+ <line num="627" count="1" type="stmt"/>
193
+ <line num="628" count="1" type="stmt"/>
194
+ <line num="629" count="1" type="stmt"/>
195
+ <line num="630" count="1" type="stmt"/>
196
+ <line num="631" count="1" type="stmt"/>
197
+ </file>
198
+ </package>
199
+ <package name="src.helpers">
200
+ <metrics statements="56" coveredstatements="55" conditionals="41" coveredconditionals="38" methods="4" coveredmethods="4"/>
201
+ <file name="subscription.ts" path="/Users/hyo/Github/hyochan/expo-iap/src/helpers/subscription.ts">
202
+ <metrics statements="56" coveredstatements="55" conditionals="41" coveredconditionals="38" methods="4" coveredmethods="4"/>
203
+ <line num="1" count="2" type="stmt"/>
204
+ <line num="2" count="2" type="stmt"/>
205
+ <line num="10" count="2" type="stmt"/>
206
+ <line num="13" count="18" type="stmt"/>
207
+ <line num="14" count="18" type="stmt"/>
208
+ <line num="15" count="17" type="stmt"/>
209
+ <line num="16" count="17" type="stmt"/>
210
+ <line num="19" count="17" type="stmt"/>
211
+ <line num="21" count="18" type="cond" truecount="3" falsecount="0"/>
212
+ <line num="22" count="6" type="cond" truecount="1" falsecount="0"/>
213
+ <line num="23" count="3" type="stmt"/>
214
+ <line num="29" count="15" type="cond" truecount="5" falsecount="0"/>
215
+ <line num="33" count="15" type="cond" truecount="1" falsecount="0"/>
216
+ <line num="34" count="1" type="stmt"/>
217
+ <line num="38" count="14" type="cond" truecount="2" falsecount="0"/>
218
+ <line num="39" count="11" type="cond" truecount="3" falsecount="0"/>
219
+ <line num="40" count="10" type="stmt"/>
220
+ <line num="44" count="1" type="cond" truecount="3" falsecount="0"/>
221
+ <line num="45" count="1" type="stmt"/>
222
+ <line num="47" count="1" type="cond" truecount="1" falsecount="0"/>
223
+ <line num="51" count="1" type="cond" truecount="1" falsecount="0"/>
224
+ <line num="56" count="1" type="stmt"/>
225
+ <line num="60" count="3" type="cond" truecount="1" falsecount="0"/>
226
+ <line num="62" count="3" type="stmt"/>
227
+ <line num="65" count="0" type="stmt"/>
228
+ <line num="69" count="17" type="stmt"/>
229
+ <line num="70" count="17" type="stmt"/>
230
+ <line num="71" count="13" type="stmt"/>
231
+ <line num="72" count="13" type="cond" truecount="0" falsecount="1"/>
232
+ <line num="73" count="13" type="stmt"/>
233
+ <line num="74" count="13" type="stmt"/>
234
+ <line num="78" count="17" type="stmt"/>
235
+ <line num="79" count="13" type="stmt"/>
236
+ <line num="88" count="13" type="cond" truecount="2" falsecount="0"/>
237
+ <line num="89" count="10" type="cond" truecount="3" falsecount="0"/>
238
+ <line num="90" count="9" type="stmt"/>
239
+ <line num="93" count="9" type="stmt"/>
240
+ <line num="96" count="9" type="stmt"/>
241
+ <line num="97" count="9" type="stmt"/>
242
+ <line num="100" count="10" type="cond" truecount="1" falsecount="0"/>
243
+ <line num="101" count="2" type="cond" truecount="1" falsecount="1"/>
244
+ <line num="103" count="3" type="cond" truecount="1" falsecount="0"/>
245
+ <line num="104" count="3" type="cond" truecount="1" falsecount="0"/>
246
+ <line num="105" count="3" type="cond" truecount="1" falsecount="0"/>
247
+ <line num="106" count="3" type="stmt"/>
248
+ <line num="109" count="3" type="cond" truecount="2" falsecount="0"/>
249
+ <line num="110" count="1" type="stmt"/>
250
+ <line num="111" count="2" type="cond" truecount="1" falsecount="0"/>
251
+ <line num="112" count="2" type="stmt"/>
252
+ <line num="117" count="13" type="stmt"/>
253
+ <line num="120" count="17" type="stmt"/>
254
+ <line num="122" count="1" type="stmt"/>
255
+ <line num="123" count="1" type="stmt"/>
256
+ <line num="132" count="2" type="stmt"/>
257
+ <line num="135" count="4" type="stmt"/>
258
+ <line num="136" count="4" type="stmt"/>
259
+ </file>
260
+ </package>
261
+ <package name="src.modules">
262
+ <metrics statements="120" coveredstatements="120" conditionals="56" coveredconditionals="55" methods="25" coveredmethods="25"/>
263
+ <file name="android.ts" path="/Users/hyo/Github/hyochan/expo-iap/src/modules/android.ts">
264
+ <metrics statements="35" coveredstatements="35" conditionals="22" coveredconditionals="21" methods="5" coveredmethods="5"/>
265
+ <line num="2" count="2" type="stmt"/>
266
+ <line num="5" count="2" type="stmt"/>
267
+ <line num="15" count="2" type="stmt"/>
268
+ <line num="18" count="8" type="stmt"/>
269
+ <line num="42" count="2" type="stmt"/>
270
+ <line num="45" count="5" type="cond" truecount="2" falsecount="0"/>
271
+ <line num="46" count="5" type="cond" truecount="2" falsecount="0"/>
272
+ <line num="49" count="5" type="cond" truecount="1" falsecount="0"/>
273
+ <line num="50" count="1" type="stmt"/>
274
+ <line num="57" count="4" type="cond" truecount="1" falsecount="0"/>
275
+ <line num="58" count="3" type="stmt"/>
276
+ <line num="62" count="1" type="stmt"/>
277
+ <line num="65" count="1" type="cond" truecount="1" falsecount="1"/>
278
+ <line num="66" count="1" type="stmt"/>
279
+ <line num="81" count="2" type="stmt"/>
280
+ <line num="94" count="2" type="cond" truecount="2" falsecount="0"/>
281
+ <line num="97" count="2" type="stmt"/>
282
+ <line num="101" count="2" type="stmt"/>
283
+ <line num="109" count="2" type="cond" truecount="1" falsecount="0"/>
284
+ <line num="110" count="1" type="stmt"/>
285
+ <line num="115" count="1" type="stmt"/>
286
+ <line num="124" count="2" type="stmt"/>
287
+ <line num="126" count="2" type="stmt"/>
288
+ <line num="127" count="5" type="stmt"/>
289
+ <line num="129" count="5" type="cond" truecount="1" falsecount="0"/>
290
+ <line num="130" count="1" type="stmt"/>
291
+ <line num="133" count="4" type="cond" truecount="3" falsecount="0"/>
292
+ <line num="134" count="3" type="stmt"/>
293
+ <line num="135" count="3" type="cond" truecount="1" falsecount="0"/>
294
+ <line num="136" count="1" type="stmt"/>
295
+ <line num="138" count="2" type="cond" truecount="1" falsecount="0"/>
296
+ <line num="139" count="2" type="stmt"/>
297
+ <line num="143" count="1" type="stmt"/>
298
+ <line num="153" count="2" type="stmt"/>
299
+ <line num="154" count="1" type="stmt"/>
300
+ </file>
301
+ <file name="ios.ts" path="/Users/hyo/Github/hyochan/expo-iap/src/modules/ios.ts">
302
+ <metrics statements="85" coveredstatements="85" conditionals="34" coveredconditionals="34" methods="20" coveredmethods="20"/>
303
+ <line num="5" count="2" type="stmt"/>
304
+ <line num="19" count="2" type="stmt"/>
305
+ <line num="29" count="2" type="stmt"/>
306
+ <line num="32" count="11" type="stmt"/>
307
+ <line num="51" count="2" type="stmt"/>
308
+ <line num="52" count="1" type="stmt"/>
309
+ <line num="64" count="2" type="stmt"/>
310
+ <line num="66" count="2" type="stmt"/>
311
+ <line num="67" count="7" type="cond" truecount="1" falsecount="0"/>
312
+ <line num="68" count="1" type="stmt"/>
313
+ <line num="70" count="6" type="stmt"/>
314
+ <line num="82" count="2" type="stmt"/>
315
+ <line num="84" count="2" type="stmt"/>
316
+ <line num="85" count="3" type="cond" truecount="1" falsecount="0"/>
317
+ <line num="86" count="1" type="stmt"/>
318
+ <line num="88" count="2" type="stmt"/>
319
+ <line num="89" count="2" type="cond" truecount="2" falsecount="0"/>
320
+ <line num="101" count="2" type="stmt"/>
321
+ <line num="103" count="2" type="stmt"/>
322
+ <line num="104" count="3" type="cond" truecount="1" falsecount="0"/>
323
+ <line num="105" count="1" type="stmt"/>
324
+ <line num="107" count="2" type="stmt"/>
325
+ <line num="108" count="2" type="cond" truecount="2" falsecount="0"/>
326
+ <line num="120" count="2" type="stmt"/>
327
+ <line num="123" count="3" type="cond" truecount="1" falsecount="0"/>
328
+ <line num="124" count="1" type="stmt"/>
329
+ <line num="126" count="2" type="stmt"/>
330
+ <line num="127" count="2" type="cond" truecount="2" falsecount="0"/>
331
+ <line num="139" count="2" type="stmt"/>
332
+ <line num="141" count="2" type="stmt"/>
333
+ <line num="142" count="3" type="cond" truecount="1" falsecount="0"/>
334
+ <line num="143" count="1" type="stmt"/>
335
+ <line num="145" count="2" type="stmt"/>
336
+ <line num="146" count="2" type="cond" truecount="2" falsecount="0"/>
337
+ <line num="158" count="2" type="stmt"/>
338
+ <line num="160" count="2" type="stmt"/>
339
+ <line num="161" count="2" type="stmt"/>
340
+ <line num="162" count="2" type="cond" truecount="2" falsecount="0"/>
341
+ <line num="175" count="2" type="stmt"/>
342
+ <line num="176" count="1" type="stmt"/>
343
+ <line num="179" count="2" type="stmt"/>
344
+ <line num="195" count="2" type="stmt"/>
345
+ <line num="196" count="3" type="cond" truecount="1" falsecount="0"/>
346
+ <line num="197" count="1" type="stmt"/>
347
+ <line num="198" count="1" type="stmt"/>
348
+ <line num="200" count="2" type="stmt"/>
349
+ <line num="213" count="2" type="stmt"/>
350
+ <line num="215" count="2" type="stmt"/>
351
+ <line num="216" count="2" type="cond" truecount="1" falsecount="0"/>
352
+ <line num="217" count="1" type="stmt"/>
353
+ <line num="219" count="1" type="stmt"/>
354
+ <line num="232" count="2" type="stmt"/>
355
+ <line num="235" count="3" type="cond" truecount="1" falsecount="0"/>
356
+ <line num="236" count="1" type="stmt"/>
357
+ <line num="238" count="2" type="stmt"/>
358
+ <line num="239" count="2" type="cond" truecount="2" falsecount="0"/>
359
+ <line num="257" count="2" type="stmt"/>
360
+ <line num="261" count="4" type="cond" truecount="2" falsecount="0"/>
361
+ <line num="263" count="4" type="cond" truecount="1" falsecount="0"/>
362
+ <line num="264" count="1" type="stmt"/>
363
+ <line num="267" count="3" type="stmt"/>
364
+ <line num="272" count="2" type="stmt"/>
365
+ <line num="286" count="2" type="stmt"/>
366
+ <line num="288" count="2" type="stmt"/>
367
+ <line num="289" count="1" type="stmt"/>
368
+ <line num="306" count="2" type="stmt"/>
369
+ <line num="308" count="2" type="stmt"/>
370
+ <line num="309" count="2" type="cond" truecount="2" falsecount="0"/>
371
+ <line num="322" count="2" type="stmt"/>
372
+ <line num="324" count="2" type="stmt"/>
373
+ <line num="325" count="2" type="stmt"/>
374
+ <line num="326" count="2" type="cond" truecount="2" falsecount="0"/>
375
+ <line num="338" count="2" type="stmt"/>
376
+ <line num="340" count="2" type="stmt"/>
377
+ <line num="341" count="1" type="stmt"/>
378
+ <line num="342" count="1" type="stmt"/>
379
+ <line num="351" count="2" type="stmt"/>
380
+ <line num="353" count="2" type="stmt"/>
381
+ <line num="354" count="2" type="stmt"/>
382
+ <line num="355" count="2" type="cond" truecount="2" falsecount="0"/>
383
+ <line num="364" count="2" type="stmt"/>
384
+ <line num="366" count="2" type="stmt"/>
385
+ <line num="367" count="2" type="stmt"/>
386
+ <line num="376" count="2" type="stmt"/>
387
+ <line num="377" count="1" type="stmt"/>
388
+ </file>
389
+ </package>
390
+ <package name="src.utils">
391
+ <metrics statements="100" coveredstatements="97" conditionals="67" coveredconditionals="57" methods="17" coveredmethods="16"/>
392
+ <file name="errorMapping.ts" path="/Users/hyo/Github/hyochan/expo-iap/src/utils/errorMapping.ts">
393
+ <metrics statements="100" coveredstatements="97" conditionals="67" coveredconditionals="57" methods="17" coveredmethods="16"/>
394
+ <line num="7" count="3" type="stmt"/>
395
+ <line num="8" count="3" type="stmt"/>
396
+ <line num="29" count="3" type="stmt"/>
397
+ <line num="30" count="207" type="cond" truecount="1" falsecount="1"/>
398
+ <line num="32" count="3" type="stmt"/>
399
+ <line num="33" count="2" type="cond" truecount="4" falsecount="0"/>
400
+ <line num="37" count="3" type="stmt"/>
401
+ <line num="88" count="3" type="stmt"/>
402
+ <line num="93" count="3" type="stmt"/>
403
+ <line num="94" count="102" type="stmt"/>
404
+ <line num="97" count="3" type="stmt"/>
405
+ <line num="100" count="4" type="stmt"/>
406
+ <line num="101" count="4" type="stmt"/>
407
+ <line num="102" count="4" type="stmt"/>
408
+ <line num="103" count="4" type="stmt"/>
409
+ <line num="104" count="4" type="stmt"/>
410
+ <line num="105" count="4" type="stmt"/>
411
+ <line num="106" count="4" type="stmt"/>
412
+ <line num="107" count="4" type="stmt"/>
413
+ <line num="110" count="3" type="stmt"/>
414
+ <line num="114" count="1" type="stmt"/>
415
+ <line num="115" count="1" type="cond" truecount="1" falsecount="1"/>
416
+ <line num="119" count="1" type="stmt"/>
417
+ <line num="129" count="3" type="stmt"/>
418
+ <line num="131" count="0" type="stmt"/>
419
+ <line num="132" count="0" type="stmt"/>
420
+ <line num="142" count="3" type="cond" truecount="3" falsecount="0"/>
421
+ <line num="143" count="2" type="cond" truecount="1" falsecount="0"/>
422
+ <line num="144" count="1" type="stmt"/>
423
+ <line num="145" count="13" type="stmt"/>
424
+ <line num="147" count="1" type="cond" truecount="1" falsecount="0"/>
425
+ <line num="148" count="1" type="stmt"/>
426
+ <line num="153" count="2" type="stmt"/>
427
+ <line num="156" count="5" type="cond" truecount="1" falsecount="0"/>
428
+ <line num="160" count="1" type="stmt"/>
429
+ <line num="161" count="32" type="stmt"/>
430
+ <line num="163" count="1" type="cond" truecount="1" falsecount="0"/>
431
+ <line num="164" count="1" type="stmt"/>
432
+ <line num="169" count="1" type="stmt"/>
433
+ <line num="172" count="34" type="cond" truecount="0" falsecount="1"/>
434
+ <line num="173" count="0" type="stmt"/>
435
+ <line num="177" count="1" type="stmt"/>
436
+ <line num="183" count="1" type="stmt"/>
437
+ <line num="184" count="1" type="stmt"/>
438
+ <line num="187" count="1" type="cond" truecount="1" falsecount="2"/>
439
+ <line num="193" count="2" type="stmt"/>
440
+ <line num="194" count="2" type="cond" truecount="1" falsecount="0"/>
441
+ <line num="198" count="1" type="stmt"/>
442
+ <line num="200" count="1" type="stmt"/>
443
+ <line num="210" count="3" type="stmt"/>
444
+ <line num="212" count="3" type="stmt"/>
445
+ <line num="213" count="37" type="cond" truecount="1" falsecount="0"/>
446
+ <line num="214" count="1" type="stmt"/>
447
+ <line num="217" count="36" type="cond" truecount="1" falsecount="0"/>
448
+ <line num="218" count="29" type="stmt"/>
449
+ <line num="221" count="7" type="cond" truecount="1" falsecount="0"/>
450
+ <line num="222" count="4" type="stmt"/>
451
+ <line num="223" count="4" type="cond" truecount="1" falsecount="0"/>
452
+ <line num="224" count="3" type="stmt"/>
453
+ <line num="228" count="4" type="stmt"/>
454
+ <line num="232" count="38" type="cond" truecount="1" falsecount="0"/>
455
+ <line num="233" count="28" type="stmt"/>
456
+ <line num="236" count="10" type="cond" truecount="4" falsecount="0"/>
457
+ <line num="237" count="9" type="stmt"/>
458
+ <line num="240" count="1" type="stmt"/>
459
+ <line num="243" count="3" type="stmt"/>
460
+ <line num="244" count="5" type="stmt"/>
461
+ <line num="247" count="3" type="stmt"/>
462
+ <line num="248" count="5" type="stmt"/>
463
+ <line num="256" count="5" type="stmt"/>
464
+ <line num="257" count="5" type="cond" truecount="2" falsecount="0"/>
465
+ <line num="260" count="3" type="stmt"/>
466
+ <line num="261" count="4" type="stmt"/>
467
+ <line num="272" count="4" type="stmt"/>
468
+ <line num="273" count="4" type="cond" truecount="2" falsecount="0"/>
469
+ <line num="276" count="3" type="stmt"/>
470
+ <line num="277" count="24" type="stmt"/>
471
+ <line num="279" count="24" type="cond" truecount="20" falsecount="0"/>
472
+ <line num="281" count="2" type="stmt"/>
473
+ <line num="283" count="1" type="stmt"/>
474
+ <line num="285" count="1" type="stmt"/>
475
+ <line num="287" count="1" type="stmt"/>
476
+ <line num="289" count="1" type="stmt"/>
477
+ <line num="291" count="1" type="stmt"/>
478
+ <line num="293" count="1" type="stmt"/>
479
+ <line num="295" count="1" type="stmt"/>
480
+ <line num="297" count="1" type="stmt"/>
481
+ <line num="299" count="1" type="stmt"/>
482
+ <line num="301" count="1" type="stmt"/>
483
+ <line num="303" count="1" type="stmt"/>
484
+ <line num="305" count="1" type="stmt"/>
485
+ <line num="307" count="1" type="stmt"/>
486
+ <line num="309" count="1" type="stmt"/>
487
+ <line num="311" count="1" type="stmt"/>
488
+ <line num="313" count="2" type="stmt"/>
489
+ <line num="315" count="1" type="stmt"/>
490
+ <line num="317" count="1" type="stmt"/>
491
+ <line num="319" count="3" type="cond" truecount="4" falsecount="0"/>
492
+ <line num="320" count="1" type="stmt"/>
493
+ <line num="325" count="2" type="stmt"/>
494
+ </file>
495
+ </package>
496
+ </project>
497
+ </coverage>