simple-dynamsoft-mcp 4.0.0 → 6.2.0

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 (1057) hide show
  1. package/.env.example +75 -0
  2. package/LICENSE +21 -21
  3. package/README.md +521 -308
  4. package/data/metadata/data-manifest.json +175 -0
  5. package/data/{dynamsoft_sdks.json → metadata/dynamsoft_sdks.json} +87 -5
  6. package/package.json +66 -50
  7. package/scripts/prebuild-rag-index.mjs +67 -0
  8. package/scripts/sync-submodules.mjs +6 -0
  9. package/scripts/update-data-lock.mjs +124 -0
  10. package/scripts/verify-data-lock.mjs +122 -0
  11. package/src/data-bootstrap.js +255 -0
  12. package/src/data-root.js +22 -0
  13. package/src/index.js +1250 -1988
  14. package/src/normalizers.js +279 -0
  15. package/src/rag.js +659 -0
  16. package/src/resource-index/builders.js +450 -0
  17. package/src/resource-index/config.js +169 -0
  18. package/src/resource-index/docs-loader.js +117 -0
  19. package/src/resource-index/paths.js +83 -0
  20. package/src/resource-index/samples.js +481 -0
  21. package/src/resource-index/uri.js +86 -0
  22. package/src/resource-index/version-policy.js +154 -0
  23. package/src/resource-index.js +395 -0
  24. package/src/submodule-sync.js +139 -0
  25. package/code-snippet/dynamic-web-twain/UI-customization/image-editor.html +0 -1052
  26. package/code-snippet/dynamic-web-twain/UI-customization/loading-bar.html +0 -213
  27. package/code-snippet/dynamic-web-twain/UI-customization/progress-bar.html +0 -93
  28. package/code-snippet/dynamic-web-twain/UI-customization/thumbnail.html +0 -352
  29. package/code-snippet/dynamic-web-twain/UI-customization/without-UI.html +0 -111
  30. package/code-snippet/dynamic-web-twain/classification/document/SaveToFile.aspx +0 -24
  31. package/code-snippet/dynamic-web-twain/classification/document/document.html +0 -1142
  32. package/code-snippet/dynamic-web-twain/classification/tag/SaveToFile.aspx +0 -24
  33. package/code-snippet/dynamic-web-twain/classification/tag/tag.html +0 -930
  34. package/code-snippet/dynamic-web-twain/edit-image.html +0 -456
  35. package/code-snippet/dynamic-web-twain/gen-tree.py +0 -80
  36. package/code-snippet/dynamic-web-twain/input-options/download.html +0 -73
  37. package/code-snippet/dynamic-web-twain/input-options/load-from-local-drive.html +0 -60
  38. package/code-snippet/dynamic-web-twain/input-options/load-images-by-file-type.html +0 -112
  39. package/code-snippet/dynamic-web-twain/localstorage.html +0 -208
  40. package/code-snippet/dynamic-web-twain/output-options/convertToBase64.html +0 -161
  41. package/code-snippet/dynamic-web-twain/output-options/convertToBlob.html +0 -216
  42. package/code-snippet/dynamic-web-twain/output-options/save.html +0 -188
  43. package/code-snippet/dynamic-web-twain/output-options/simultaneous-scan-upload/DeleteFile.aspx +0 -33
  44. package/code-snippet/dynamic-web-twain/output-options/simultaneous-scan-upload/Download.aspx +0 -92
  45. package/code-snippet/dynamic-web-twain/output-options/simultaneous-scan-upload/SaveToFileEx.aspx +0 -37
  46. package/code-snippet/dynamic-web-twain/output-options/simultaneous-scan-upload/simultaneous-scan-upload.html +0 -351
  47. package/code-snippet/dynamic-web-twain/output-options/upload/DeleteFile.aspx +0 -33
  48. package/code-snippet/dynamic-web-twain/output-options/upload/Download.aspx +0 -92
  49. package/code-snippet/dynamic-web-twain/output-options/upload/SaveToFileEx.aspx +0 -37
  50. package/code-snippet/dynamic-web-twain/output-options/upload/upload.html +0 -365
  51. package/code-snippet/dynamic-web-twain/readme.md +0 -54
  52. package/code-snippet/dynamic-web-twain/scan/auto-remove-blank-page.html +0 -71
  53. package/code-snippet/dynamic-web-twain/scan/basic-scan.html +0 -227
  54. package/code-snippet/dynamic-web-twain/scan/capabilities/capabilities.html +0 -296
  55. package/code-snippet/dynamic-web-twain/scan/custom-data.html +0 -81
  56. package/code-snippet/dynamic-web-twain/scan/focus-scanUI-always-on-top.html +0 -59
  57. package/code-snippet/dynamic-web-twain/scan/get-custom-data.html +0 -122
  58. package/code-snippet/dynamic-web-twain/scan/image-layout.html +0 -224
  59. package/code-snippet/dynamic-web-twain/scan/mag-data.html +0 -76
  60. package/code-snippet/dynamic-web-twain/scan/read-barcode.html +0 -87
  61. package/code-snippet/dynamic-web-twain/scan/scan-one-side.html +0 -181
  62. package/code-snippet/dynamic-web-twain/scan/transfer-mode.html +0 -215
  63. package/code-snippet/dynamic-web-twain/scan/xfer-count.html +0 -83
  64. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanMultipleBarcodes/build.gradle +0 -36
  65. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanMultipleBarcodes/proguard-rules.pro +0 -21
  66. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanMultipleBarcodes/src/main/AndroidManifest.xml +0 -23
  67. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanMultipleBarcodes/src/main/java/com/dynamsoft/scanmultiplebarcodes/MainActivity.java +0 -70
  68. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanMultipleBarcodes/src/main/res/drawable/dbr_icon.xml +0 -21
  69. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanMultipleBarcodes/src/main/res/layout/activity_main.xml +0 -27
  70. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanMultipleBarcodes/src/main/res/values/colors.xml +0 -5
  71. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanMultipleBarcodes/src/main/res/values/strings.xml +0 -3
  72. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanMultipleBarcodes/src/main/res/values/themes.xml +0 -5
  73. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcode/build.gradle +0 -36
  74. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcode/proguard-rules.pro +0 -21
  75. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcode/src/main/AndroidManifest.xml +0 -24
  76. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcode/src/main/java/com/dynamsoft/scansinglebarcode/MainActivity.java +0 -87
  77. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcode/src/main/res/drawable/dbr_icon.xml +0 -21
  78. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcode/src/main/res/layout/activity_main.xml +0 -27
  79. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcode/src/main/res/values/colors.xml +0 -5
  80. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcode/src/main/res/values/strings.xml +0 -3
  81. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcode/src/main/res/values/themes.xml +0 -5
  82. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcodeKt/build.gradle +0 -43
  83. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcodeKt/proguard-rules.pro +0 -21
  84. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcodeKt/src/main/AndroidManifest.xml +0 -22
  85. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcodeKt/src/main/java/com/dynamsoft/scansinglebarcodekt/MainActivity.kt +0 -73
  86. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcodeKt/src/main/res/drawable/dbr_icon.xml +0 -21
  87. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcodeKt/src/main/res/layout/activity_main.xml +0 -27
  88. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcodeKt/src/main/res/values/colors.xml +0 -5
  89. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcodeKt/src/main/res/values/strings.xml +0 -3
  90. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScanSingleBarcodeKt/src/main/res/values/themes.xml +0 -5
  91. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/build.gradle +0 -37
  92. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/proguard-rules.pro +0 -21
  93. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/AndroidManifest.xml +0 -27
  94. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadAztec.json +0 -91
  95. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadCommon2D.json +0 -185
  96. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadDPM.json +0 -138
  97. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadDataMatrix.json +0 -178
  98. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadDenseBarcodes.json +0 -138
  99. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadDotCode.json +0 -130
  100. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadOneDIndustrial.json +0 -155
  101. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadOneDRetail.json +0 -148
  102. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadQR.json +0 -150
  103. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/java/com/dynamsoft/scenarioorientedsamples/HomeActivity.java +0 -98
  104. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/java/com/dynamsoft/scenarioorientedsamples/ResultActivity.java +0 -45
  105. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/java/com/dynamsoft/scenarioorientedsamples/ui/HomeItemAdapter.java +0 -77
  106. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/java/com/dynamsoft/scenarioorientedsamples/ui/HomeItemsRecyclerView.java +0 -75
  107. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/java/com/dynamsoft/scenarioorientedsamples/ui/ModeInfo.java +0 -41
  108. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/res/drawable/dbr_icon.xml +0 -21
  109. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/res/drawable/shape_home_item1.xml +0 -7
  110. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/res/drawable/shape_home_item2.xml +0 -7
  111. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/res/layout/activity_home.xml +0 -96
  112. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/res/layout/activity_result.xml +0 -17
  113. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/res/layout/layout_home_item.xml +0 -55
  114. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/res/values/attr_HomeItemsRecyclerView.xml +0 -9
  115. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/res/values/colors.xml +0 -16
  116. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/res/values/dimens.xml +0 -8
  117. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/res/values/strings.xml +0 -23
  118. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/res/values/themes.xml +0 -5
  119. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/build.gradle +0 -45
  120. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/gradle/wrapper/gradle-wrapper.properties +0 -6
  121. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/gradle.properties +0 -21
  122. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/gradlew +0 -185
  123. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/gradlew.bat +0 -89
  124. package/code-snippet/dynamsoft-barcode-reader/android/BarcodeScannerAPISamples/settings.gradle +0 -19
  125. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/build.gradle +0 -38
  126. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/proguard-rules.pro +0 -21
  127. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/AndroidManifest.xml +0 -32
  128. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/java/com/dynamsoft/debug/CaptureActivity.java +0 -256
  129. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/java/com/dynamsoft/debug/HomeActivity.java +0 -31
  130. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/java/com/dynamsoft/debug/settings/PreferencesConstants.java +0 -12
  131. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/java/com/dynamsoft/debug/settings/SettingsActivity.java +0 -47
  132. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/res/drawable/arrow_back_24.xml +0 -5
  133. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/res/drawable/dbr_icon.xml +0 -21
  134. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/res/layout/activity_capture.xml +0 -54
  135. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/res/layout/activity_home.xml +0 -84
  136. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/res/layout/activity_settings.xml +0 -17
  137. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/res/layout/layout_appbar.xml +0 -19
  138. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/res/menu/main_menu.xml +0 -11
  139. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/res/values/arrays.xml +0 -20
  140. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/res/values/colors.xml +0 -11
  141. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/res/values/strings.xml +0 -17
  142. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/res/values/themes.xml +0 -19
  143. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/Debug/src/main/res/xml/root_preferences.xml +0 -28
  144. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/build.gradle +0 -41
  145. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/proguard-rules.pro +0 -21
  146. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/AndroidManifest.xml +0 -38
  147. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/assets/Templates/ReadFromAnImage.json +0 -118
  148. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/java/com/dynamsoft/dbr/decodefromanimage/MainActivity.java +0 -211
  149. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/java/com/dynamsoft/dbr/decodefromanimage/ui/ThumbnailsRecyclerView.java +0 -219
  150. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/java/com/dynamsoft/dbr/decodefromanimage/ui/resultsview/CustomizedResultsDisplayView.java +0 -142
  151. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/java/com/dynamsoft/dbr/decodefromanimage/ui/resultsview/ResultsRecyclerView.java +0 -91
  152. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/java/com/dynamsoft/dbr/decodefromanimage/utils/BitmapUtils.java +0 -74
  153. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/java/com/dynamsoft/dbr/decodefromanimage/utils/UriUtils.java +0 -116
  154. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/res/drawable/boundary.xml +0 -7
  155. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/res/drawable/dashed_border.xml +0 -10
  156. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/res/drawable/dbr_icon.xml +0 -21
  157. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/res/drawable/image_button_state.xml +0 -19
  158. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/res/layout/activity_main.xml +0 -155
  159. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/res/layout/item_result.xml +0 -41
  160. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/res/layout/item_thumbnail.xml +0 -23
  161. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/res/layout/results_view.xml +0 -60
  162. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/res/values/attr_customized.xml +0 -7
  163. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/res/values/colors.xml +0 -11
  164. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/res/values/strings.xml +0 -19
  165. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/res/values/themes.xml +0 -12
  166. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeFromAnImage/src/main/res/xml/dynamsoft_file_paths.xml +0 -6
  167. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/build.gradle +0 -38
  168. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/proguard-rules.pro +0 -21
  169. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/AndroidManifest.xml +0 -29
  170. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/java/com/dynamsoft/dbr/decodewithcameraenhancer/HomeActivity.java +0 -17
  171. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/java/com/dynamsoft/dbr/decodewithcameraenhancer/MainActivity.java +0 -121
  172. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/java/com/dynamsoft/dbr/decodewithcameraenhancer/ui/resultsview/CustomizedResultsDisplayView.java +0 -80
  173. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/java/com/dynamsoft/dbr/decodewithcameraenhancer/ui/resultsview/ResultsRecyclerView.java +0 -91
  174. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/res/drawable/dbr_icon.xml +0 -21
  175. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/res/layout/activity_home.xml +0 -84
  176. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/res/layout/activity_main.xml +0 -22
  177. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/res/layout/item_result.xml +0 -41
  178. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/res/layout/results_view.xml +0 -48
  179. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/res/values/attr_customized.xml +0 -7
  180. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/res/values/colors.xml +0 -8
  181. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/res/values/strings.xml +0 -11
  182. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/res/values/themes.xml +0 -18
  183. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/res/xml/backup_rules.xml +0 -13
  184. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraEnhancer/src/main/res/xml/data_extraction_rules.xml +0 -19
  185. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/build.gradle +0 -44
  186. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/proguard-rules.pro +0 -21
  187. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/AndroidManifest.xml +0 -31
  188. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/java/com/dynamsoft/dbr/decodewithcamerax/CameraXImageSourceAdapter.java +0 -64
  189. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/java/com/dynamsoft/dbr/decodewithcamerax/HomeActivity.java +0 -16
  190. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/java/com/dynamsoft/dbr/decodewithcamerax/MainActivity.java +0 -146
  191. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/java/com/dynamsoft/dbr/decodewithcamerax/ui/PreviewWithDrawingQuads.java +0 -94
  192. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/java/com/dynamsoft/dbr/decodewithcamerax/ui/resultsview/CustomizedResultsDisplayView.java +0 -80
  193. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/java/com/dynamsoft/dbr/decodewithcamerax/ui/resultsview/ResultsRecyclerView.java +0 -91
  194. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/res/drawable/dbr_icon.xml +0 -21
  195. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/res/layout/activity_home.xml +0 -84
  196. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/res/layout/activity_main.xml +0 -23
  197. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/res/layout/item_result.xml +0 -41
  198. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/res/layout/results_view.xml +0 -48
  199. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/res/values/attr_customized.xml +0 -7
  200. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/res/values/colors.xml +0 -8
  201. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/res/values/strings.xml +0 -10
  202. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DecodeWithCameraX/src/main/res/values/themes.xml +0 -18
  203. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DriversLicenseScanner/build.gradle +0 -35
  204. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DriversLicenseScanner/proguard-rules.pro +0 -21
  205. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DriversLicenseScanner/src/main/AndroidManifest.xml +0 -30
  206. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DriversLicenseScanner/src/main/java/com/dynamsoft/dcv/driverslicensescanner/HomeActivity.java +0 -17
  207. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DriversLicenseScanner/src/main/java/com/dynamsoft/dcv/driverslicensescanner/MainActivity.java +0 -138
  208. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DriversLicenseScanner/src/main/java/com/dynamsoft/dcv/driverslicensescanner/ParseUtil.java +0 -107
  209. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DriversLicenseScanner/src/main/java/com/dynamsoft/dcv/driverslicensescanner/ResultActivity.java +0 -46
  210. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DriversLicenseScanner/src/main/res/drawable/dbr_icon.xml +0 -21
  211. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DriversLicenseScanner/src/main/res/layout/activity_home.xml +0 -84
  212. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DriversLicenseScanner/src/main/res/layout/activity_main.xml +0 -32
  213. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DriversLicenseScanner/src/main/res/layout/activity_result.xml +0 -15
  214. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DriversLicenseScanner/src/main/res/values/colors.xml +0 -8
  215. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DriversLicenseScanner/src/main/res/values/strings.xml +0 -7
  216. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/DriversLicenseScanner/src/main/res/values/themes.xml +0 -12
  217. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/build.gradle +0 -47
  218. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/proguard-rules.pro +0 -21
  219. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/AndroidManifest.xml +0 -37
  220. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/home/HomeActivity.java +0 -42
  221. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/models/CameraSettings.java +0 -45
  222. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/models/DecodeSettings.java +0 -279
  223. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/models/MultiFrameCrossFilterSettings.java +0 -59
  224. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/models/ResultFeedbackSettings.java +0 -31
  225. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/models/SettingsCache.java +0 -49
  226. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/scanner/ScannerActivity.java +0 -225
  227. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/scanner/ScannerViewModel.java +0 -67
  228. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/settings/OnItemClickListener.java +0 -5
  229. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/settings/SettingsActivity.java +0 -37
  230. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/settings/SettingsFragment.java +0 -160
  231. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/settings/SettingsViewModel.java +0 -49
  232. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/settings/barcodeformat/BarcodeFormatsFragment.java +0 -65
  233. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/settings/barcodeformat/BarcodeFormatsViewModel.java +0 -61
  234. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/settings/simplifiedsettings/SimplifiedSettingsFragment.java +0 -60
  235. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/settings/simplifiedsettings/SimplifiedSettingsViewModel.java +0 -24
  236. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/ui/CustomResultDisplayView.java +0 -56
  237. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/ui/ExpandLinearLayout.java +0 -220
  238. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/ui/Extension.java +0 -27
  239. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/ui/RadioGroupWithTitle.java +0 -145
  240. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/ui/ResultsRecyclerView.java +0 -91
  241. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/ui/SingleLineLayout.java +0 -302
  242. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/ui/formatselection/BarcodeFormatConstants.java +0 -80
  243. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/ui/formatselection/FormatSelectionAdapter.java +0 -122
  244. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/ui/formatselection/FormatSelectionView.java +0 -98
  245. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/ui/modeselection/ItemTouchHelperInter.java +0 -7
  246. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/ui/modeselection/ModeSelectionAdapter.java +0 -174
  247. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/ui/modeselection/ModeSelectionView.java +0 -98
  248. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/ui/modeselection/ModesMapConstant.java +0 -55
  249. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/java/com/dynamsoft/dbr/generalsettings/ui/modeselection/MyTouchHelperCallBack.java +0 -45
  250. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/anim/enter_pop_slide.xml +0 -12
  251. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/anim/enter_slide.xml +0 -12
  252. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/anim/exit_pop_slide.xml +0 -12
  253. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/anim/exit_slide.xml +0 -12
  254. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/drawable/arrow_back_24.xml +0 -5
  255. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/drawable/dbr_icon.xml +0 -21
  256. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/drawable/icon_right_transparent.xml +0 -4
  257. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/drawable/selector_checkbox.xml +0 -6
  258. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/drawable/selector_checkbox2.xml +0 -5
  259. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/drawable/selector_checktext_textcolor.xml +0 -5
  260. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/drawable/selector_radiobutton_selected.xml +0 -13
  261. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/drawable/selector_radiobutton_textcolor.xml +0 -5
  262. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/drawable/selector_switch_track.xml +0 -20
  263. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/drawable/shape_circle_conner_dialog.xml +0 -8
  264. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/drawable/shape_radio_group.xml +0 -8
  265. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/activity_home.xml +0 -84
  266. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/activity_main.xml +0 -41
  267. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/activity_settings.xml +0 -20
  268. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/dialog_import_template.xml +0 -44
  269. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/format_selection.xml +0 -8
  270. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/fragment_barcode_format.xml +0 -101
  271. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/fragment_settings.xml +0 -305
  272. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/fragment_simplified_settings.xml +0 -149
  273. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/item_result.xml +0 -42
  274. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/layout_appbar.xml +0 -19
  275. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/layout_expand_arrow_and_switch.xml +0 -58
  276. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/layout_expand_arrow_only.xml +0 -45
  277. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/layout_expand_switch_only.xml +0 -44
  278. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/layout_radio_group_with_title.xml +0 -46
  279. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/layout_single_line.xml +0 -33
  280. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/modes_selection_spinner_item.xml +0 -17
  281. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/modes_selection_spinner_text.xml +0 -13
  282. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/layout/results_view.xml +0 -48
  283. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/menu/menu_main.xml +0 -11
  284. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/values/array.xml +0 -14
  285. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/values/attrs_customized.xml +0 -65
  286. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/values/colors.xml +0 -23
  287. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/values/dimens.xml +0 -20
  288. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/values/spinner_items.xml +0 -10
  289. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/values/strings.xml +0 -112
  290. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/values/themes.xml +0 -29
  291. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/xml/backup_rules.xml +0 -13
  292. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/GeneralSettings/src/main/res/xml/data_extraction_rules.xml +0 -19
  293. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/build.gradle +0 -39
  294. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/proguard-rules.pro +0 -21
  295. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/src/main/AndroidManifest.xml +0 -28
  296. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/src/main/assets/Templates/ReadMultipleBarcodes.json +0 -116
  297. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/src/main/java/com/dynamsoft/dbr/locateanitemwithbarcode/LocateGrabCodeActivity.java +0 -87
  298. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/src/main/java/com/dynamsoft/dbr/locateanitemwithbarcode/LocateScanActivity.java +0 -162
  299. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/src/main/java/com/dynamsoft/dbr/locateanitemwithbarcode/LocateStartActivity.java +0 -58
  300. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/src/main/res/drawable/arrow_back_24.xml +0 -5
  301. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/src/main/res/drawable/dbr_icon.xml +0 -21
  302. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/src/main/res/drawable/ic_launcher_background.xml +0 -170
  303. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/src/main/res/layout/activity_grab_code.xml +0 -23
  304. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/src/main/res/layout/activity_locate_start.xml +0 -94
  305. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/src/main/res/layout/activity_scanner.xml +0 -34
  306. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/src/main/res/values/colors.xml +0 -35
  307. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/src/main/res/values/strings.xml +0 -10
  308. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/LocateAnItemWithBarcode/src/main/res/values/themes.xml +0 -8
  309. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/ReadGS1AI/build.gradle +0 -34
  310. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/ReadGS1AI/proguard-rules.pro +0 -21
  311. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/ReadGS1AI/src/main/AndroidManifest.xml +0 -27
  312. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/ReadGS1AI/src/main/assets/Templates/ReadGS1AIBarcode.json +0 -135
  313. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/ReadGS1AI/src/main/java/com/dynamsoft/readgs1ai/HomeActivity.java +0 -17
  314. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/ReadGS1AI/src/main/java/com/dynamsoft/readgs1ai/MainActivity.java +0 -182
  315. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/ReadGS1AI/src/main/res/drawable/dbr_icon.xml +0 -21
  316. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/ReadGS1AI/src/main/res/layout/activity_home.xml +0 -84
  317. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/ReadGS1AI/src/main/res/layout/activity_main.xml +0 -19
  318. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/ReadGS1AI/src/main/res/values/colors.xml +0 -8
  319. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/ReadGS1AI/src/main/res/values/strings.xml +0 -7
  320. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/ReadGS1AI/src/main/res/values/themes.xml +0 -11
  321. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/build.gradle +0 -39
  322. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/proguard-rules.pro +0 -21
  323. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/src/main/AndroidManifest.xml +0 -32
  324. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/src/main/java/com/dynamsoft/dbr/tinybarcodedecoding/HomeActivity.java +0 -17
  325. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/src/main/java/com/dynamsoft/dbr/tinybarcodedecoding/MainActivity.java +0 -272
  326. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/src/main/java/com/dynamsoft/dbr/tinybarcodedecoding/UIHandler.java +0 -14
  327. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/src/main/java/com/dynamsoft/dbr/tinybarcodedecoding/ZoomSeekbarView.java +0 -191
  328. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/src/main/res/drawable/dbr_icon.xml +0 -21
  329. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/src/main/res/drawable/ic_baseline_shape.xml +0 -5
  330. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/src/main/res/drawable/shape_circle_bg.xml +0 -16
  331. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/src/main/res/layout/activity_home.xml +0 -84
  332. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/src/main/res/layout/activity_main.xml +0 -77
  333. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/src/main/res/values/colors.xml +0 -8
  334. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/src/main/res/values/strings.xml +0 -10
  335. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/src/main/res/values/themes.xml +0 -12
  336. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/src/main/res/xml/backup_rules.xml +0 -13
  337. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/TinyBarcodeDecoding/src/main/res/xml/data_extraction_rules.xml +0 -19
  338. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/build.gradle +0 -42
  339. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/gradle/wrapper/gradle-wrapper.properties +0 -6
  340. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/gradle.properties +0 -21
  341. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/gradlew +0 -185
  342. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/gradlew.bat +0 -89
  343. package/code-snippet/dynamsoft-barcode-reader/android/FoundationalAPISamples/settings.gradle +0 -18
  344. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanMultipleBarcodes/ScanMultipleBarcodes/AppDelegate.swift +0 -35
  345. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanMultipleBarcodes/ScanMultipleBarcodes/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  346. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanMultipleBarcodes/ScanMultipleBarcodes/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -36
  347. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanMultipleBarcodes/ScanMultipleBarcodes/Assets.xcassets/Contents.json +0 -6
  348. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanMultipleBarcodes/ScanMultipleBarcodes/Base.lproj/LaunchScreen.storyboard +0 -25
  349. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanMultipleBarcodes/ScanMultipleBarcodes/Base.lproj/Main.storyboard +0 -52
  350. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanMultipleBarcodes/ScanMultipleBarcodes/DynamsoftResources.bundle/Templates/ReadMultipleBarcodes.json +0 -139
  351. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanMultipleBarcodes/ScanMultipleBarcodes/Info.plist +0 -25
  352. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanMultipleBarcodes/ScanMultipleBarcodes/SceneDelegate.swift +0 -51
  353. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanMultipleBarcodes/ScanMultipleBarcodes/ViewController.swift +0 -161
  354. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanMultipleBarcodes/ScanMultipleBarcodes.xcodeproj/project.pbxproj +0 -422
  355. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcode/ScanSingleBarcode/AppDelegate.swift +0 -35
  356. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcode/ScanSingleBarcode/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  357. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcode/ScanSingleBarcode/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -36
  358. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcode/ScanSingleBarcode/Assets.xcassets/Contents.json +0 -6
  359. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcode/ScanSingleBarcode/Base.lproj/LaunchScreen.storyboard +0 -25
  360. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcode/ScanSingleBarcode/Base.lproj/Main.storyboard +0 -52
  361. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcode/ScanSingleBarcode/DynamsoftResources.bundle/Templates/ReadSingleBarcode.json +0 -105
  362. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcode/ScanSingleBarcode/Info.plist +0 -25
  363. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcode/ScanSingleBarcode/SceneDelegate.swift +0 -51
  364. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcode/ScanSingleBarcode/ViewController.swift +0 -115
  365. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcode/ScanSingleBarcode.xcodeproj/project.pbxproj +0 -422
  366. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeObjc/ScanSingleBarcodeObjc/AppDelegate.h +0 -13
  367. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeObjc/ScanSingleBarcodeObjc/AppDelegate.m +0 -39
  368. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeObjc/ScanSingleBarcodeObjc/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  369. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeObjc/ScanSingleBarcodeObjc/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -36
  370. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeObjc/ScanSingleBarcodeObjc/Assets.xcassets/Contents.json +0 -6
  371. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeObjc/ScanSingleBarcodeObjc/Base.lproj/LaunchScreen.storyboard +0 -25
  372. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeObjc/ScanSingleBarcodeObjc/Base.lproj/Main.storyboard +0 -52
  373. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeObjc/ScanSingleBarcodeObjc/DynamsoftResources.bundle/Templates/ReadSingleBarcode.json +0 -105
  374. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeObjc/ScanSingleBarcodeObjc/Info.plist +0 -25
  375. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeObjc/ScanSingleBarcodeObjc/SceneDelegate.h +0 -14
  376. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeObjc/ScanSingleBarcodeObjc/SceneDelegate.m +0 -56
  377. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeObjc/ScanSingleBarcodeObjc/ViewController.h +0 -13
  378. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeObjc/ScanSingleBarcodeObjc/ViewController.m +0 -127
  379. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeObjc/ScanSingleBarcodeObjc/main.m +0 -17
  380. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeObjc/ScanSingleBarcodeObjc.xcodeproj/project.pbxproj +0 -426
  381. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeSwiftUI/ScanSingleBarcodeSwiftUI/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  382. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeSwiftUI/ScanSingleBarcodeSwiftUI/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  383. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeSwiftUI/ScanSingleBarcodeSwiftUI/Assets.xcassets/Contents.json +0 -6
  384. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeSwiftUI/ScanSingleBarcodeSwiftUI/BarcodeScannerView.swift +0 -66
  385. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeSwiftUI/ScanSingleBarcodeSwiftUI/ContentView.swift +0 -47
  386. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeSwiftUI/ScanSingleBarcodeSwiftUI/Preview Content/Preview Assets.xcassets/Contents.json +0 -6
  387. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeSwiftUI/ScanSingleBarcodeSwiftUI/ScanSingleBarcodeSwiftUIApp.swift +0 -16
  388. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScanSingleBarcodeSwiftUI/ScanSingleBarcodeSwiftUI.xcodeproj/project.pbxproj +0 -377
  389. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/AppDelegate.swift +0 -35
  390. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  391. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  392. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Assets.xcassets/Contents.json +0 -6
  393. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Assets.xcassets/dynamsoft-logo.imageset/Contents.json +0 -23
  394. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Assets.xcassets/icons/1d_industrial.imageset/Contents.json +0 -23
  395. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Assets.xcassets/icons/1d_retail.imageset/Contents.json +0 -23
  396. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Assets.xcassets/icons/Contents.json +0 -6
  397. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Assets.xcassets/icons/any_codes.imageset/Contents.json +0 -23
  398. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Assets.xcassets/icons/aztec_code.imageset/Contents.json +0 -23
  399. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Assets.xcassets/icons/common_2d.imageset/Contents.json +0 -23
  400. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Assets.xcassets/icons/data_matrix.imageset/Contents.json +0 -23
  401. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Assets.xcassets/icons/dot_code.imageset/Contents.json +0 -23
  402. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Assets.xcassets/icons/dpm_code.imageset/Contents.json +0 -23
  403. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Assets.xcassets/icons/high_density.imageset/Contents.json +0 -23
  404. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Assets.xcassets/icons/qr_code.imageset/Contents.json +0 -23
  405. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Base.lproj/LaunchScreen.storyboard +0 -25
  406. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Base.lproj/Main.storyboard +0 -24
  407. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/DynamsoftResources.bundle/Templates/ReadAztec.json +0 -91
  408. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/DynamsoftResources.bundle/Templates/ReadCommon1DAnd2D.json +0 -272
  409. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/DynamsoftResources.bundle/Templates/ReadCommon2D.json +0 -185
  410. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/DynamsoftResources.bundle/Templates/ReadDPM.json +0 -138
  411. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/DynamsoftResources.bundle/Templates/ReadDataMatrix.json +0 -178
  412. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/DynamsoftResources.bundle/Templates/ReadDenseBarcodes.json +0 -138
  413. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/DynamsoftResources.bundle/Templates/ReadDotCode.json +0 -130
  414. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/DynamsoftResources.bundle/Templates/ReadOneDIndustrial.json +0 -155
  415. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/DynamsoftResources.bundle/Templates/ReadOneDRetail.json +0 -148
  416. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/DynamsoftResources.bundle/Templates/ReadQR.json +0 -150
  417. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/Info.plist +0 -25
  418. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/ResultViewController.swift +0 -43
  419. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/SceneDelegate.swift +0 -57
  420. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples/ViewController.swift +0 -271
  421. package/code-snippet/dynamsoft-barcode-reader/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/ScenarioOrientedSamples.xcodeproj/project.pbxproj +0 -426
  422. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/Debug/Debug/AppDelegate.swift +0 -35
  423. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/Debug/Debug/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  424. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/Debug/Debug/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  425. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/Debug/Debug/Assets.xcassets/Contents.json +0 -6
  426. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/Debug/Debug/Assets.xcassets/dynamsoft.imageset/Contents.json +0 -23
  427. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/Debug/Debug/Base.lproj/LaunchScreen.storyboard +0 -25
  428. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/Debug/Debug/Base.lproj/Main.storyboard +0 -24
  429. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/Debug/Debug/CameraViewController.swift +0 -256
  430. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/Debug/Debug/Info.plist +0 -25
  431. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/Debug/Debug/SceneDelegate.swift +0 -57
  432. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/Debug/Debug/SettingsViewController.swift +0 -234
  433. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/Debug/Debug/ViewController.swift +0 -111
  434. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/Debug/Debug.xcodeproj/project.pbxproj +0 -387
  435. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/AppDelegate.swift +0 -35
  436. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  437. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -35
  438. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/Assets.xcassets/Buttons/Contents.json +0 -6
  439. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/Assets.xcassets/Buttons/bigGallery.imageset/Contents.json +0 -23
  440. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/Assets.xcassets/Buttons/bigTakePhoto.imageset/Contents.json +0 -23
  441. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/Assets.xcassets/Buttons/gallery.imageset/Contents.json +0 -23
  442. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/Assets.xcassets/Buttons/takePhoto.imageset/Contents.json +0 -23
  443. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/Assets.xcassets/Contents.json +0 -6
  444. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/Assets.xcassets/dynamsoft.imageset/Contents.json +0 -23
  445. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/Base.lproj/LaunchScreen.storyboard +0 -25
  446. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/Base.lproj/Main.storyboard +0 -52
  447. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/Info.plist +0 -25
  448. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/Resource/ReadFromAnImage.json +0 -118
  449. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/SceneDelegate.swift +0 -51
  450. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage/ViewController.swift +0 -457
  451. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeFromAnImage/DecodeFromAnImage.xcodeproj/project.pbxproj +0 -389
  452. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithAVCaptureSession/DecodeWithAVCaptureSession/AppDelegate.swift +0 -33
  453. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithAVCaptureSession/DecodeWithAVCaptureSession/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  454. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithAVCaptureSession/DecodeWithAVCaptureSession/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  455. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithAVCaptureSession/DecodeWithAVCaptureSession/Assets.xcassets/Contents.json +0 -6
  456. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithAVCaptureSession/DecodeWithAVCaptureSession/Assets.xcassets/dynamsoft.imageset/Contents.json +0 -23
  457. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithAVCaptureSession/DecodeWithAVCaptureSession/Base.lproj/LaunchScreen.storyboard +0 -25
  458. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithAVCaptureSession/DecodeWithAVCaptureSession/Base.lproj/Main.storyboard +0 -24
  459. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithAVCaptureSession/DecodeWithAVCaptureSession/CaptureEnhancer.swift +0 -102
  460. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithAVCaptureSession/DecodeWithAVCaptureSession/CaptureViewController.swift +0 -191
  461. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithAVCaptureSession/DecodeWithAVCaptureSession/Info.plist +0 -25
  462. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithAVCaptureSession/DecodeWithAVCaptureSession/SceneDelegate.swift +0 -57
  463. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithAVCaptureSession/DecodeWithAVCaptureSession/ViewController.swift +0 -111
  464. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithAVCaptureSession/DecodeWithAVCaptureSession.xcodeproj/project.pbxproj +0 -423
  465. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithCameraEnhancer/DecodeWithCameraEnhancer/AppDelegate.swift +0 -33
  466. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithCameraEnhancer/DecodeWithCameraEnhancer/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  467. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithCameraEnhancer/DecodeWithCameraEnhancer/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  468. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithCameraEnhancer/DecodeWithCameraEnhancer/Assets.xcassets/Contents.json +0 -6
  469. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithCameraEnhancer/DecodeWithCameraEnhancer/Assets.xcassets/dynamsoft.imageset/Contents.json +0 -23
  470. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithCameraEnhancer/DecodeWithCameraEnhancer/Base.lproj/LaunchScreen.storyboard +0 -25
  471. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithCameraEnhancer/DecodeWithCameraEnhancer/Base.lproj/Main.storyboard +0 -32
  472. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithCameraEnhancer/DecodeWithCameraEnhancer/CameraViewController.swift +0 -170
  473. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithCameraEnhancer/DecodeWithCameraEnhancer/Info.plist +0 -25
  474. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithCameraEnhancer/DecodeWithCameraEnhancer/SceneDelegate.swift +0 -57
  475. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithCameraEnhancer/DecodeWithCameraEnhancer/ViewController.swift +0 -111
  476. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DecodeWithCameraEnhancer/DecodeWithCameraEnhancer.xcodeproj/project.pbxproj +0 -419
  477. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DriversLicenseScanner/DriversLicenseScanner/AppDelegate.swift +0 -29
  478. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DriversLicenseScanner/DriversLicenseScanner/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  479. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DriversLicenseScanner/DriversLicenseScanner/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  480. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DriversLicenseScanner/DriversLicenseScanner/Assets.xcassets/Contents.json +0 -6
  481. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DriversLicenseScanner/DriversLicenseScanner/Assets.xcassets/dynamsoft.imageset/Contents.json +0 -23
  482. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DriversLicenseScanner/DriversLicenseScanner/Base.lproj/LaunchScreen.storyboard +0 -25
  483. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DriversLicenseScanner/DriversLicenseScanner/Base.lproj/Main.storyboard +0 -52
  484. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DriversLicenseScanner/DriversLicenseScanner/CameraViewController.swift +0 -231
  485. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DriversLicenseScanner/DriversLicenseScanner/Category/UIDevice+Addition.swift +0 -59
  486. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DriversLicenseScanner/DriversLicenseScanner/Category/UIView+Frame.swift +0 -80
  487. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DriversLicenseScanner/DriversLicenseScanner/DriverLicenseResultViewController.swift +0 -168
  488. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DriversLicenseScanner/DriversLicenseScanner/Info.plist +0 -8
  489. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DriversLicenseScanner/DriversLicenseScanner/Utils/Dynamsoft.swift +0 -27
  490. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DriversLicenseScanner/DriversLicenseScanner/ViewController.swift +0 -111
  491. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/DriversLicenseScanner/DriversLicenseScanner.xcodeproj/project.pbxproj +0 -447
  492. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/AppDelegate.swift +0 -35
  493. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  494. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  495. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/Assets.xcassets/Contents.json +0 -6
  496. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/Assets.xcassets/arrow-circle/Contents.json +0 -6
  497. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/Assets.xcassets/arrow-circle/arrow-circle-down.imageset/Contents.json +0 -23
  498. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/Assets.xcassets/arrow-circle/arrow-circle-up.imageset/Contents.json +0 -23
  499. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/Assets.xcassets/dynamsoft.imageset/Contents.json +0 -23
  500. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/BarcodeFormatViewController.swift +0 -249
  501. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/Base.lproj/LaunchScreen.storyboard +0 -25
  502. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/Base.lproj/Main.storyboard +0 -24
  503. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/CameraViewController.swift +0 -305
  504. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/DataModel/CustomTableViewCell.swift +0 -234
  505. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/DataModel/Mode+Extension.swift +0 -129
  506. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/DataModel/PickerPopupView.swift +0 -145
  507. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/DataModel/SettingRow.swift +0 -332
  508. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/DataModel/UIColor+Extension.swift +0 -19
  509. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/Info.plist +0 -25
  510. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/SceneDelegate.swift +0 -57
  511. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/SettingsViewController.swift +0 -589
  512. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/SimplifiedSettingsViewController.swift +0 -532
  513. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings/ViewController.swift +0 -111
  514. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/GeneralSettings/GeneralSettings.xcodeproj/project.pbxproj +0 -387
  515. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/LocateAnItemWithBarcode/LocateAnItemWithBarcode/AppDelegate.swift +0 -45
  516. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/LocateAnItemWithBarcode/LocateAnItemWithBarcode/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  517. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/LocateAnItemWithBarcode/LocateAnItemWithBarcode/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  518. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/LocateAnItemWithBarcode/LocateAnItemWithBarcode/Assets.xcassets/Contents.json +0 -6
  519. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/LocateAnItemWithBarcode/LocateAnItemWithBarcode/Assets.xcassets/dynamsoft.imageset/Contents.json +0 -23
  520. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/LocateAnItemWithBarcode/LocateAnItemWithBarcode/Assets.xcassets/scan.imageset/Contents.json +0 -23
  521. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/LocateAnItemWithBarcode/LocateAnItemWithBarcode/Base.lproj/LaunchScreen.storyboard +0 -25
  522. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/LocateAnItemWithBarcode/LocateAnItemWithBarcode/Base.lproj/Main.storyboard +0 -145
  523. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/LocateAnItemWithBarcode/LocateAnItemWithBarcode/CameraViewController.swift +0 -187
  524. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/LocateAnItemWithBarcode/LocateAnItemWithBarcode/Info.plist +0 -25
  525. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/LocateAnItemWithBarcode/LocateAnItemWithBarcode/ReadMultipleBarcodes.json +0 -116
  526. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/LocateAnItemWithBarcode/LocateAnItemWithBarcode/SceneDelegate.swift +0 -51
  527. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/LocateAnItemWithBarcode/LocateAnItemWithBarcode/ViewController.swift +0 -55
  528. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/LocateAnItemWithBarcode/LocateAnItemWithBarcode.xcodeproj/project.pbxproj +0 -429
  529. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/ReadGS1AI/ReadGS1AI/AppDelegate.swift +0 -35
  530. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/ReadGS1AI/ReadGS1AI/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  531. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/ReadGS1AI/ReadGS1AI/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  532. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/ReadGS1AI/ReadGS1AI/Assets.xcassets/Contents.json +0 -6
  533. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/ReadGS1AI/ReadGS1AI/Assets.xcassets/dynamsoft.imageset/Contents.json +0 -23
  534. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/ReadGS1AI/ReadGS1AI/Base.lproj/LaunchScreen.storyboard +0 -25
  535. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/ReadGS1AI/ReadGS1AI/Base.lproj/Main.storyboard +0 -24
  536. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/ReadGS1AI/ReadGS1AI/CameraViewController.swift +0 -114
  537. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/ReadGS1AI/ReadGS1AI/DynamsoftResources.bundle/Root.plist +0 -61
  538. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/ReadGS1AI/ReadGS1AI/DynamsoftResources.bundle/Templates/ReadGS1AI.json +0 -135
  539. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/ReadGS1AI/ReadGS1AI/DynamsoftResources.bundle/en.lproj/Root.strings +0 -0
  540. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/ReadGS1AI/ReadGS1AI/Info.plist +0 -25
  541. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/ReadGS1AI/ReadGS1AI/SceneDelegate.swift +0 -57
  542. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/ReadGS1AI/ReadGS1AI/ViewController.swift +0 -111
  543. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/ReadGS1AI/ReadGS1AI.xcodeproj/project.pbxproj +0 -389
  544. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/AppDelegate.swift +0 -20
  545. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  546. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  547. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/Assets.xcassets/Contents.json +0 -6
  548. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/Assets.xcassets/dynamsoft.imageset/Contents.json +0 -23
  549. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/Assets.xcassets/icon_arrow_camera_zoom_close.imageset/Contents.json +0 -22
  550. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/Base.lproj/LaunchScreen.storyboard +0 -25
  551. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/Base.lproj/Main.storyboard +0 -52
  552. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/CameraViewController.swift +0 -231
  553. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/Category/UIDevice+Addition.swift +0 -58
  554. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/Category/UIView+Frame.swift +0 -60
  555. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/Info.plist +0 -8
  556. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/TinyBarcodeDecoding-Bridging-Header.h +0 -4
  557. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/Utils/Dynamsoft.swift +0 -53
  558. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/ViewController.swift +0 -111
  559. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/Views/CameraSettingView.swift +0 -71
  560. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/Views/CameraZoomFloatingButton.swift +0 -56
  561. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding/Views/CameraZoomSlider.swift +0 -104
  562. package/code-snippet/dynamsoft-barcode-reader/ios/FoundationalAPISamples/TinyBarcodeDecoding/TinyBarcodeDecoding.xcodeproj/project.pbxproj +0 -473
  563. package/code-snippet/dynamsoft-barcode-reader/python/CustomTemplates/ReadAztec.json +0 -99
  564. package/code-snippet/dynamsoft-barcode-reader/python/CustomTemplates/ReadBarcodes_Default.json +0 -113
  565. package/code-snippet/dynamsoft-barcode-reader/python/CustomTemplates/ReadBarcodes_ReadRateFirst.json +0 -144
  566. package/code-snippet/dynamsoft-barcode-reader/python/CustomTemplates/ReadBarcodes_SpeedFirst.json +0 -151
  567. package/code-snippet/dynamsoft-barcode-reader/python/CustomTemplates/ReadBlurry1DBarcode.json +0 -149
  568. package/code-snippet/dynamsoft-barcode-reader/python/CustomTemplates/ReadDPM.json +0 -83
  569. package/code-snippet/dynamsoft-barcode-reader/python/CustomTemplates/ReadDenseQRCode.json +0 -105
  570. package/code-snippet/dynamsoft-barcode-reader/python/CustomTemplates/ReadDotcode.json +0 -125
  571. package/code-snippet/dynamsoft-barcode-reader/python/CustomTemplates/ReadInvertedBarcode.json +0 -57
  572. package/code-snippet/dynamsoft-barcode-reader/python/CustomTemplates/ReadMultipleBarcode.json +0 -103
  573. package/code-snippet/dynamsoft-barcode-reader/python/CustomTemplates/ReadOneDIndustrial.json +0 -133
  574. package/code-snippet/dynamsoft-barcode-reader/python/CustomTemplates/ReadOneDRetail.json +0 -137
  575. package/code-snippet/dynamsoft-barcode-reader/python/CustomTemplates/ReadSingleBarcode.json +0 -174
  576. package/code-snippet/dynamsoft-barcode-reader/python/README.md +0 -82
  577. package/code-snippet/dynamsoft-barcode-reader/python/Samples/ReadDPM.json +0 -83
  578. package/code-snippet/dynamsoft-barcode-reader/python/Samples/camera.py +0 -96
  579. package/code-snippet/dynamsoft-barcode-reader/python/Samples/file.py +0 -82
  580. package/code-snippet/dynamsoft-barcode-reader/python/Samples/general_settings.py +0 -80
  581. package/code-snippet/dynamsoft-barcode-reader/python/Samples/multi_format_image_processing.py +0 -79
  582. package/code-snippet/dynamsoft-barcode-reader/python/Samples/parameter_tuner.py +0 -166
  583. package/code-snippet/dynamsoft-barcode-reader/python/Samples/read_an_image.py +0 -45
  584. package/code-snippet/dynamsoft-barcode-reader/python/Samples/read_dpm_barcode.py +0 -53
  585. package/code-snippet/dynamsoft-barcode-reader/python/Samples/read_multiple_images.py +0 -55
  586. package/code-snippet/dynamsoft-barcode-reader/python/Samples/server_side_barcode_decoder.py +0 -108
  587. package/code-snippet/dynamsoft-barcode-reader/python/Samples/show_localized_vs_decoded_barcodes.py +0 -145
  588. package/code-snippet/dynamsoft-barcode-reader/python/Samples/utils.py +0 -60
  589. package/code-snippet/dynamsoft-barcode-reader/python/Samples/video_decoding.py +0 -147
  590. package/code-snippet/dynamsoft-barcode-reader/web/README.md +0 -81
  591. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/README.md +0 -42
  592. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/README.md +0 -23
  593. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/.editorconfig +0 -16
  594. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/README.md +0 -422
  595. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/angular.json +0 -99
  596. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/package.json +0 -39
  597. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/src/app/app.component.css +0 -42
  598. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/src/app/app.component.html +0 -14
  599. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/src/app/app.component.ts +0 -22
  600. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/src/app/dynamsoft.config.ts +0 -22
  601. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/src/app/image-capture/image-capture.component.css +0 -20
  602. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/src/app/image-capture/image-capture.component.html +0 -11
  603. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/src/app/image-capture/image-capture.component.ts +0 -66
  604. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/src/app/video-capture/video-capture.component.css +0 -6
  605. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/src/app/video-capture/video-capture.component.html +0 -8
  606. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/src/app/video-capture/video-capture.component.ts +0 -109
  607. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/src/assets/.gitkeep +0 -0
  608. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/src/index.html +0 -19
  609. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/src/main.ts +0 -5
  610. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/src/styles.css +0 -11
  611. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/tsconfig.app.json +0 -14
  612. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/tsconfig.json +0 -32
  613. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-foundational-api/tsconfig.spec.json +0 -14
  614. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-rtu-api/.editorconfig +0 -17
  615. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-rtu-api/README.md +0 -33
  616. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-rtu-api/angular.json +0 -100
  617. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-rtu-api/package.json +0 -37
  618. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-rtu-api/src/app/app.component.css +0 -24
  619. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-rtu-api/src/app/app.component.html +0 -7
  620. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-rtu-api/src/app/app.component.ts +0 -53
  621. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-rtu-api/src/app/app.config.ts +0 -8
  622. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-rtu-api/src/app/app.routes.ts +0 -3
  623. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-rtu-api/src/index.html +0 -12
  624. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-rtu-api/src/main.ts +0 -6
  625. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-rtu-api/src/styles.css +0 -16
  626. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-rtu-api/tsconfig.app.json +0 -15
  627. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-rtu-api/tsconfig.json +0 -27
  628. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/angular/scan-using-rtu-api/tsconfig.spec.json +0 -15
  629. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/README.md +0 -23
  630. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/README.md +0 -372
  631. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/App.razor +0 -12
  632. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/BlazorApp.csproj +0 -18
  633. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/Layout/MainLayout.razor +0 -16
  634. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/Layout/MainLayout.razor.css +0 -77
  635. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/Layout/NavMenu.razor +0 -39
  636. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/Layout/NavMenu.razor.css +0 -91
  637. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/Pages/DecodeImage.razor +0 -26
  638. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/Pages/DecodeVideo.razor +0 -48
  639. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/Pages/Home.razor +0 -13
  640. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/Program.cs +0 -11
  641. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/Properties/launchSettings.json +0 -41
  642. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/_Imports.razor +0 -10
  643. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/obj/BlazorApp.csproj.nuget.dgspec.json +0 -108
  644. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/obj/BlazorApp.csproj.nuget.g.props +0 -26
  645. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/obj/BlazorApp.csproj.nuget.g.targets +0 -12
  646. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs +0 -4
  647. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/obj/Debug/net8.0/BlazorApp.AssemblyInfo.cs +0 -22
  648. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/obj/Debug/net8.0/BlazorApp.GeneratedMSBuildEditorConfig.editorconfig +0 -53
  649. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/obj/Debug/net8.0/BlazorApp.GlobalUsings.g.cs +0 -11
  650. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/obj/project.assets.json +0 -2137
  651. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/wwwroot/decodeImage.js +0 -34
  652. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/wwwroot/decodeVideo.js +0 -70
  653. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-foundational-api/hello-world-blazor/BlazorApp/wwwroot/index.html +0 -72
  654. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/App.razor +0 -12
  655. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/BlazorApp.csproj +0 -18
  656. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/Layout/MainLayout.razor +0 -4
  657. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/Pages/Home.razor +0 -25
  658. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/Program.cs +0 -11
  659. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/Properties/launchSettings.json +0 -41
  660. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/README.md +0 -17
  661. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/_Imports.razor +0 -10
  662. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/obj/BlazorApp.csproj.nuget.dgspec.json +0 -108
  663. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/obj/BlazorApp.csproj.nuget.g.props +0 -26
  664. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/obj/BlazorApp.csproj.nuget.g.targets +0 -12
  665. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs +0 -4
  666. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/obj/Debug/net8.0/BlazorApp.AssemblyInfo.cs +0 -22
  667. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/obj/Debug/net8.0/BlazorApp.GeneratedMSBuildEditorConfig.editorconfig +0 -41
  668. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/obj/Debug/net8.0/BlazorApp.GlobalUsings.g.cs +0 -11
  669. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/obj/project.assets.json +0 -2137
  670. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/blazor/scan-using-rtu-api/wwwroot/index.html +0 -63
  671. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/README.md +0 -22
  672. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/README.md +0 -43
  673. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/build.gradle +0 -54
  674. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/capacitor.build.gradle +0 -19
  675. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/proguard-rules.pro +0 -21
  676. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +0 -26
  677. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/src/main/AndroidManifest.xml +0 -42
  678. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/src/main/java/com/dynamsoft/dbrjs/MainActivity.java +0 -5
  679. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/src/main/res/drawable/ic_launcher_background.xml +0 -170
  680. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -34
  681. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/src/main/res/layout/activity_main.xml +0 -12
  682. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -5
  683. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -5
  684. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/src/main/res/values/ic_launcher_background.xml +0 -4
  685. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/src/main/res/values/strings.xml +0 -7
  686. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/src/main/res/values/styles.xml +0 -22
  687. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/src/main/res/xml/file_paths.xml +0 -5
  688. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +0 -18
  689. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/build.gradle +0 -29
  690. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/capacitor.settings.gradle +0 -3
  691. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/gradle/wrapper/gradle-wrapper.properties +0 -7
  692. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/gradle.properties +0 -22
  693. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/gradlew +0 -252
  694. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/gradlew.bat +0 -94
  695. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/settings.gradle +0 -5
  696. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/android/variables.gradle +0 -16
  697. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/capacitor.config.json +0 -6
  698. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/index.ts +0 -35
  699. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/ios/App/App/AppDelegate.swift +0 -49
  700. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  701. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/ios/App/App/Assets.xcassets/Contents.json +0 -6
  702. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json +0 -23
  703. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/ios/App/App/Base.lproj/LaunchScreen.storyboard +0 -32
  704. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/ios/App/App/Base.lproj/Main.storyboard +0 -19
  705. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/ios/App/App/Info.plist +0 -51
  706. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/ios/App/App.xcodeproj/project.pbxproj +0 -408
  707. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  708. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/ios/App/Podfile +0 -24
  709. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/package.json +0 -24
  710. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/public/index.html +0 -21
  711. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/rollup.config.mjs +0 -28
  712. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/capacitor/scan-using-rtu-api/tsconfig.json +0 -21
  713. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/electron/README.md +0 -23
  714. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/electron/scan-using-foundational-api/README.md +0 -241
  715. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/electron/scan-using-foundational-api/action.js +0 -70
  716. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/electron/scan-using-foundational-api/index.html +0 -22
  717. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/electron/scan-using-foundational-api/main.js +0 -29
  718. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/electron/scan-using-foundational-api/package.json +0 -26
  719. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/electron/scan-using-foundational-api/style.css +0 -6
  720. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/electron/scan-using-rtu-api/README.md +0 -31
  721. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/electron/scan-using-rtu-api/action.js +0 -22
  722. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/electron/scan-using-rtu-api/index.html +0 -61
  723. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/electron/scan-using-rtu-api/main.js +0 -29
  724. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/electron/scan-using-rtu-api/package.json +0 -26
  725. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/electron/scan-using-rtu-api/style.css +0 -6
  726. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/es6/README.md +0 -18
  727. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/es6/scan-using-foundational-api/es6.html +0 -94
  728. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/es6/scan-using-rtu-api/es6.html +0 -88
  729. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/native-ts/README.md +0 -23
  730. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/native-ts/scan-using-foundational-api/index.html +0 -21
  731. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/native-ts/scan-using-foundational-api/index.ts +0 -68
  732. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/native-ts/scan-using-foundational-api/package.json +0 -23
  733. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/native-ts/scan-using-foundational-api/rollup.config.mjs +0 -27
  734. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/native-ts/scan-using-foundational-api/tsconfig.json +0 -21
  735. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/native-ts/scan-using-rtu-api/README.md +0 -26
  736. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/native-ts/scan-using-rtu-api/index.ts +0 -35
  737. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/native-ts/scan-using-rtu-api/package.json +0 -20
  738. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/native-ts/scan-using-rtu-api/public/index.html +0 -17
  739. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/native-ts/scan-using-rtu-api/rollup.config.mjs +0 -28
  740. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/native-ts/scan-using-rtu-api/tsconfig.json +0 -21
  741. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/next/README.md +0 -23
  742. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/next/scan-using-foundational-api/.eslintrc.json +0 -3
  743. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/next/scan-using-foundational-api/README.md +0 -434
  744. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/next/scan-using-foundational-api/app/globals.css +0 -10
  745. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/next/scan-using-foundational-api/app/layout.tsx +0 -23
  746. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/next/scan-using-foundational-api/app/page.css +0 -33
  747. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/next/scan-using-foundational-api/app/page.tsx +0 -51
  748. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/next/scan-using-foundational-api/components/ImageCapture/ImageCapture.css +0 -21
  749. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/next/scan-using-foundational-api/components/ImageCapture/ImageCapture.tsx +0 -76
  750. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/next/scan-using-foundational-api/components/VideoCapture/VideoCapture.css +0 -6
  751. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/next/scan-using-foundational-api/components/VideoCapture/VideoCapture.tsx +0 -122
  752. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/next/scan-using-foundational-api/dynamsoft.config.ts +0 -22
  753. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/next/scan-using-foundational-api/next.config.mjs +0 -4
  754. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/next/scan-using-foundational-api/package.json +0 -25
  755. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/next/scan-using-foundational-api/tsconfig.json +0 -26
  756. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/nuxt/README.md +0 -22
  757. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/nuxt/scan-using-foundational-api/README.md +0 -383
  758. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/nuxt/scan-using-foundational-api/app.vue +0 -74
  759. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/nuxt/scan-using-foundational-api/assets/main.css +0 -7
  760. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/nuxt/scan-using-foundational-api/components/ImageCapture.client.vue +0 -88
  761. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/nuxt/scan-using-foundational-api/components/VideoCapture.client.vue +0 -107
  762. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/nuxt/scan-using-foundational-api/dynamsoft.config.ts +0 -20
  763. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/nuxt/scan-using-foundational-api/nuxt.config.ts +0 -4
  764. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/nuxt/scan-using-foundational-api/package.json +0 -18
  765. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/nuxt/scan-using-foundational-api/tsconfig.json +0 -4
  766. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/pwa/README.md +0 -23
  767. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/pwa/scan-using-foundational-api/README.md +0 -307
  768. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/pwa/scan-using-foundational-api/helloworld-pwa.html +0 -103
  769. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/pwa/scan-using-foundational-api/helloworld-pwa.json +0 -22
  770. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/pwa/scan-using-foundational-api/service-worker.js +0 -92
  771. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/pwa/scan-using-rtu-api/README.md +0 -17
  772. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/pwa/scan-using-rtu-api/helloworld-pwa.html +0 -99
  773. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/pwa/scan-using-rtu-api/helloworld-pwa.json +0 -22
  774. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/pwa/scan-using-rtu-api/service-worker.js +0 -92
  775. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/README.md +0 -23
  776. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-foundational-api/README.md +0 -396
  777. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-foundational-api/package.json +0 -45
  778. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-foundational-api/public/index.html +0 -45
  779. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-foundational-api/public/manifest.json +0 -25
  780. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-foundational-api/src/App.css +0 -50
  781. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-foundational-api/src/App.tsx +0 -48
  782. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-foundational-api/src/components/ImageCapture/ImageCapture.css +0 -21
  783. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-foundational-api/src/components/ImageCapture/ImageCapture.tsx +0 -76
  784. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-foundational-api/src/components/VideoCapture/VideoCapture.css +0 -6
  785. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-foundational-api/src/components/VideoCapture/VideoCapture.tsx +0 -114
  786. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-foundational-api/src/dynamsoft.config.ts +0 -20
  787. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-foundational-api/src/index.css +0 -11
  788. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-foundational-api/src/index.tsx +0 -11
  789. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-foundational-api/src/react-app-env.d.ts +0 -1
  790. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-foundational-api/tsconfig.json +0 -26
  791. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-rtu-api/README.md +0 -33
  792. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-rtu-api/index.html +0 -12
  793. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-rtu-api/package.json +0 -29
  794. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-rtu-api/src/App.tsx +0 -59
  795. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-rtu-api/src/main.tsx +0 -9
  796. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-rtu-api/tsconfig.app.json +0 -27
  797. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-rtu-api/tsconfig.json +0 -7
  798. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-rtu-api/tsconfig.node.json +0 -25
  799. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/react/scan-using-rtu-api/vite.config.ts +0 -7
  800. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/requirejs/README.md +0 -18
  801. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/requirejs/scan-using-foundational-api/requirejs.html +0 -98
  802. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/requirejs/scan-using-rtu-api/requirejs.html +0 -94
  803. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/README.md +0 -23
  804. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-foundational-api/README.md +0 -351
  805. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-foundational-api/index.html +0 -18
  806. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-foundational-api/package.json +0 -24
  807. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-foundational-api/src/App.svelte +0 -88
  808. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-foundational-api/src/components/ImageCapture.svelte +0 -95
  809. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-foundational-api/src/components/VideoCapture.svelte +0 -119
  810. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-foundational-api/src/dynamsoft.config.ts +0 -21
  811. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-foundational-api/src/main.ts +0 -7
  812. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-foundational-api/src/vite-env.d.ts +0 -2
  813. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-foundational-api/svelte.config.js +0 -7
  814. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-foundational-api/tsconfig.json +0 -20
  815. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-foundational-api/tsconfig.node.json +0 -10
  816. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-foundational-api/vite.config.ts +0 -8
  817. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-rtu-api/README.md +0 -33
  818. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-rtu-api/index.html +0 -12
  819. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-rtu-api/package.json +0 -24
  820. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-rtu-api/src/App.svelte +0 -55
  821. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-rtu-api/src/main.ts +0 -7
  822. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-rtu-api/src/vite-env.d.ts +0 -2
  823. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-rtu-api/svelte.config.js +0 -7
  824. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-rtu-api/tsconfig.json +0 -20
  825. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-rtu-api/tsconfig.node.json +0 -10
  826. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/svelte/scan-using-rtu-api/vite.config.ts +0 -8
  827. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/README.md +0 -30
  828. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-foundational-api/README.md +0 -379
  829. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-foundational-api/env.d.ts +0 -1
  830. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-foundational-api/index.html +0 -19
  831. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-foundational-api/package.json +0 -26
  832. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-foundational-api/src/App.vue +0 -72
  833. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-foundational-api/src/assets/main.css +0 -6
  834. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-foundational-api/src/components/ImageCapture.vue +0 -87
  835. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-foundational-api/src/components/VideoCapture.vue +0 -106
  836. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-foundational-api/src/dynamsoft.config.ts +0 -20
  837. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-foundational-api/src/main.ts +0 -6
  838. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-foundational-api/tsconfig.config.json +0 -9
  839. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-foundational-api/tsconfig.json +0 -17
  840. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-foundational-api/vite.config.ts +0 -15
  841. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-rtu-api/README.md +0 -33
  842. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-rtu-api/index.html +0 -12
  843. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-rtu-api/package.json +0 -22
  844. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-rtu-api/src/App.vue +0 -52
  845. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-rtu-api/src/main.ts +0 -4
  846. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-rtu-api/src/vite-env.d.ts +0 -1
  847. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-rtu-api/tsconfig.app.json +0 -15
  848. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-rtu-api/tsconfig.json +0 -7
  849. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-rtu-api/tsconfig.node.json +0 -25
  850. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/vue/scan-using-rtu-api/vite.config.ts +0 -7
  851. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/README.md +0 -23
  852. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/README.md +0 -13
  853. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/build.gradle +0 -45
  854. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/proguard-rules.pro +0 -21
  855. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/src/main/AndroidManifest.xml +0 -28
  856. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/src/main/assets/decodeBarcodeInVideo.html +0 -83
  857. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/src/main/java/com/dynamsoft/dbrjswebview/MainActivity.kt +0 -105
  858. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/src/main/res/drawable/ic_launcher_background.xml +0 -170
  859. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -30
  860. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/src/main/res/layout/activity_main.xml +0 -15
  861. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -5
  862. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -5
  863. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/src/main/res/mipmap-anydpi-v33/ic_launcher.xml +0 -6
  864. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/src/main/res/values/colors.xml +0 -10
  865. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/src/main/res/values/strings.xml +0 -3
  866. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/src/main/res/values/themes.xml +0 -16
  867. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/src/main/res/values-night/themes.xml +0 -16
  868. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/src/main/res/xml/backup_rules.xml +0 -13
  869. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/app/src/main/res/xml/data_extraction_rules.xml +0 -19
  870. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/build.gradle +0 -6
  871. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/gradle/wrapper/gradle-wrapper.properties +0 -6
  872. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/gradle.properties +0 -23
  873. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/gradlew +0 -185
  874. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/gradlew.bat +0 -89
  875. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/android/settings.gradle +0 -16
  876. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/ios/README.md +0 -13
  877. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/ios/dbrjswebview/AppDelegate.swift +0 -36
  878. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/ios/dbrjswebview/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  879. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/ios/dbrjswebview/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -13
  880. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/ios/dbrjswebview/Assets.xcassets/Contents.json +0 -6
  881. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/ios/dbrjswebview/Base.lproj/LaunchScreen.storyboard +0 -25
  882. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/ios/dbrjswebview/Base.lproj/Main.storyboard +0 -33
  883. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/ios/dbrjswebview/Info.plist +0 -27
  884. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/ios/dbrjswebview/SceneDelegate.swift +0 -52
  885. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/ios/dbrjswebview/ViewController.swift +0 -116
  886. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/ios/dbrjswebview/html/decodeFileInVideo.html +0 -83
  887. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/ios/dbrjswebview.xcodeproj/project.pbxproj +0 -373
  888. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/ios/dbrjswebview.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  889. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-foundational-api/ios/dbrjswebview.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  890. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/README.md +0 -24
  891. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/build.gradle +0 -45
  892. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/proguard-rules.pro +0 -21
  893. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/src/main/AndroidManifest.xml +0 -28
  894. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/src/main/assets/decodeBarcodeInVideo.html +0 -85
  895. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/src/main/java/com/dynamsoft/dbrjswebview/MainActivity.kt +0 -105
  896. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/src/main/res/drawable/ic_launcher_background.xml +0 -170
  897. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -30
  898. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/src/main/res/layout/activity_main.xml +0 -15
  899. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -5
  900. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -5
  901. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/src/main/res/mipmap-anydpi-v33/ic_launcher.xml +0 -6
  902. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/src/main/res/values/colors.xml +0 -10
  903. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/src/main/res/values/strings.xml +0 -3
  904. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/src/main/res/values/themes.xml +0 -16
  905. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/src/main/res/values-night/themes.xml +0 -16
  906. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/src/main/res/xml/backup_rules.xml +0 -13
  907. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/app/src/main/res/xml/data_extraction_rules.xml +0 -19
  908. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/build.gradle +0 -6
  909. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/gradle/wrapper/gradle-wrapper.properties +0 -6
  910. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/gradle.properties +0 -23
  911. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/gradlew +0 -185
  912. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/gradlew.bat +0 -89
  913. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/android/settings.gradle +0 -16
  914. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/ios/README.md +0 -25
  915. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/ios/dbrjswebview/AppDelegate.swift +0 -36
  916. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/ios/dbrjswebview/Assets.xcassets/AccentColor.colorset/Contents.json +0 -11
  917. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/ios/dbrjswebview/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -13
  918. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/ios/dbrjswebview/Assets.xcassets/Contents.json +0 -6
  919. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/ios/dbrjswebview/Base.lproj/LaunchScreen.storyboard +0 -25
  920. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/ios/dbrjswebview/Base.lproj/Main.storyboard +0 -33
  921. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/ios/dbrjswebview/Info.plist +0 -27
  922. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/ios/dbrjswebview/SceneDelegate.swift +0 -52
  923. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/ios/dbrjswebview/ViewController.swift +0 -116
  924. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/ios/dbrjswebview/html/decodeFileInVideo.html +0 -85
  925. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/ios/dbrjswebview.xcodeproj/project.pbxproj +0 -373
  926. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/ios/dbrjswebview.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  927. package/code-snippet/dynamsoft-barcode-reader/web/frameworks/webview/scan-using-rtu-api/ios/dbrjswebview.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  928. package/code-snippet/dynamsoft-barcode-reader/web/hello-world.html +0 -87
  929. package/code-snippet/dynamsoft-barcode-reader/web/index.html +0 -1271
  930. package/code-snippet/dynamsoft-barcode-reader/web/read-an-image.html +0 -72
  931. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/README.md +0 -30
  932. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/batch-inventory/README.md +0 -41
  933. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/batch-inventory/index.css +0 -160
  934. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/batch-inventory/index.html +0 -157
  935. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/cart-builder/README.md +0 -43
  936. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/cart-builder/cart-builder.html +0 -272
  937. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/debug/README.md +0 -57
  938. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/debug/app.js +0 -43
  939. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/debug/package.json +0 -16
  940. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/debug/pem/ryans-cert.pem +0 -13
  941. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/debug/pem/ryans-csr.pem +0 -11
  942. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/debug/pem/ryans-key.pem +0 -15
  943. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/debug/public/index.html +0 -198
  944. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/locate-an-item-with-barcode/README.md +0 -38
  945. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/locate-an-item-with-barcode/index.html +0 -735
  946. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/pick-one-to-fill/README.md +0 -35
  947. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/pick-one-to-fill/index.css +0 -112
  948. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/pick-one-to-fill/index.html +0 -113
  949. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-a-drivers-license/README.md +0 -39
  950. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-a-drivers-license/index.html +0 -170
  951. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-a-drivers-license/read_dl.json +0 -124
  952. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-a-drivers-license/style.css +0 -154
  953. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-and-parse-GS1-AI/README.md +0 -49
  954. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-and-parse-GS1-AI/scan-using-foundational-api/index.css +0 -180
  955. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-and-parse-GS1-AI/scan-using-foundational-api/index.html +0 -297
  956. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-and-parse-GS1-AI/scan-using-foundational-api/read_and_parse_gs1.json +0 -159
  957. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-and-parse-GS1-AI/scan-using-rtu-api/convert-GS1AI-title.js +0 -386
  958. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-and-parse-GS1-AI/scan-using-rtu-api/index.html +0 -285
  959. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-and-parse-GS1-AI/scan-using-rtu-api/rtu_gs1.json +0 -163
  960. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-and-parse-GS1-AI/scan-using-rtu-api/style.css +0 -200
  961. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-vin/README.md +0 -40
  962. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-vin/index.html +0 -146
  963. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-vin/read_vin.json +0 -139
  964. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/read-vin/style.css +0 -155
  965. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-1D-Industrial/README.md +0 -40
  966. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-1D-Industrial/ReadOneDIndustrial.json +0 -155
  967. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-1D-Industrial/index.html +0 -103
  968. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-1D-Retail/README.md +0 -37
  969. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-1D-Retail/ReadOneDRetail.json +0 -148
  970. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-1D-Retail/index.html +0 -103
  971. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-and-search/README.md +0 -39
  972. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-and-search/scan-and-search.html +0 -266
  973. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-common-1D-and-2D/README.md +0 -31
  974. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-common-1D-and-2D/ReadCommon1DAnd2D.json +0 -205
  975. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-common-1D-and-2D/index.html +0 -103
  976. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-common-2D-codes/README.md +0 -37
  977. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-common-2D-codes/ReadCommon2D.json +0 -188
  978. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-common-2D-codes/index.html +0 -103
  979. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-datamatrix-code/README.md +0 -29
  980. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-datamatrix-code/ReadDataMatrix.json +0 -184
  981. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-datamatrix-code/index.html +0 -103
  982. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-from-distance/README.md +0 -36
  983. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-from-distance/ReadDistantBarcodes.json +0 -155
  984. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-from-distance/index.html +0 -103
  985. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-qr-code/README.md +0 -37
  986. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-qr-code/ReadQR.json +0 -156
  987. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/scan-qr-code/index.html +0 -103
  988. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/show-result-texts-on-the-video/README.md +0 -32
  989. package/code-snippet/dynamsoft-barcode-reader/web/scenarios/show-result-texts-on-the-video/show-result-texts-on-the-video.html +0 -179
  990. package/code-snippet/dynamsoft-document-viewer/angular/.editorconfig +0 -16
  991. package/code-snippet/dynamsoft-document-viewer/angular/README.md +0 -42
  992. package/code-snippet/dynamsoft-document-viewer/angular/angular.json +0 -104
  993. package/code-snippet/dynamsoft-document-viewer/angular/package-lock.json +0 -12264
  994. package/code-snippet/dynamsoft-document-viewer/angular/package.json +0 -39
  995. package/code-snippet/dynamsoft-document-viewer/angular/src/app/app.component.css +0 -6
  996. package/code-snippet/dynamsoft-document-viewer/angular/src/app/app.component.html +0 -7
  997. package/code-snippet/dynamsoft-document-viewer/angular/src/app/app.component.spec.ts +0 -10
  998. package/code-snippet/dynamsoft-document-viewer/angular/src/app/app.component.ts +0 -19
  999. package/code-snippet/dynamsoft-document-viewer/angular/src/app/app.config.ts +0 -8
  1000. package/code-snippet/dynamsoft-document-viewer/angular/src/app/app.routes.ts +0 -3
  1001. package/code-snippet/dynamsoft-document-viewer/angular/src/app/components/viewer/viewer.component.css +0 -4
  1002. package/code-snippet/dynamsoft-document-viewer/angular/src/app/components/viewer/viewer.component.html +0 -1
  1003. package/code-snippet/dynamsoft-document-viewer/angular/src/app/components/viewer/viewer.component.spec.ts +0 -22
  1004. package/code-snippet/dynamsoft-document-viewer/angular/src/app/components/viewer/viewer.component.ts +0 -30
  1005. package/code-snippet/dynamsoft-document-viewer/angular/src/assets/.gitkeep +0 -0
  1006. package/code-snippet/dynamsoft-document-viewer/angular/src/favicon.ico +0 -0
  1007. package/code-snippet/dynamsoft-document-viewer/angular/src/index.html +0 -13
  1008. package/code-snippet/dynamsoft-document-viewer/angular/src/main.ts +0 -6
  1009. package/code-snippet/dynamsoft-document-viewer/angular/src/styles.css +0 -13
  1010. package/code-snippet/dynamsoft-document-viewer/angular/tsconfig.app.json +0 -14
  1011. package/code-snippet/dynamsoft-document-viewer/angular/tsconfig.json +0 -34
  1012. package/code-snippet/dynamsoft-document-viewer/angular/tsconfig.spec.json +0 -14
  1013. package/code-snippet/dynamsoft-document-viewer/hello-world.html +0 -49
  1014. package/code-snippet/dynamsoft-document-viewer/next/README.md +0 -42
  1015. package/code-snippet/dynamsoft-document-viewer/next/next.config.ts +0 -27
  1016. package/code-snippet/dynamsoft-document-viewer/next/package-lock.json +0 -1919
  1017. package/code-snippet/dynamsoft-document-viewer/next/package.json +0 -24
  1018. package/code-snippet/dynamsoft-document-viewer/next/public/next.svg +0 -1
  1019. package/code-snippet/dynamsoft-document-viewer/next/public/vercel.svg +0 -1
  1020. package/code-snippet/dynamsoft-document-viewer/next/src/app/components/Viewer.css +0 -4
  1021. package/code-snippet/dynamsoft-document-viewer/next/src/app/components/Viewer.tsx +0 -40
  1022. package/code-snippet/dynamsoft-document-viewer/next/src/app/favicon.ico +0 -0
  1023. package/code-snippet/dynamsoft-document-viewer/next/src/app/globals.css +0 -18
  1024. package/code-snippet/dynamsoft-document-viewer/next/src/app/layout.tsx +0 -32
  1025. package/code-snippet/dynamsoft-document-viewer/next/src/app/page.tsx +0 -19
  1026. package/code-snippet/dynamsoft-document-viewer/next/tsconfig.json +0 -27
  1027. package/code-snippet/dynamsoft-document-viewer/react-vite/README.md +0 -42
  1028. package/code-snippet/dynamsoft-document-viewer/react-vite/eslint.config.js +0 -38
  1029. package/code-snippet/dynamsoft-document-viewer/react-vite/index.html +0 -13
  1030. package/code-snippet/dynamsoft-document-viewer/react-vite/package-lock.json +0 -4880
  1031. package/code-snippet/dynamsoft-document-viewer/react-vite/package.json +0 -30
  1032. package/code-snippet/dynamsoft-document-viewer/react-vite/src/App.css +0 -18
  1033. package/code-snippet/dynamsoft-document-viewer/react-vite/src/App.jsx +0 -13
  1034. package/code-snippet/dynamsoft-document-viewer/react-vite/src/assets/react.svg +0 -1
  1035. package/code-snippet/dynamsoft-document-viewer/react-vite/src/components/Viewer.css +0 -4
  1036. package/code-snippet/dynamsoft-document-viewer/react-vite/src/components/Viewer.jsx +0 -31
  1037. package/code-snippet/dynamsoft-document-viewer/react-vite/src/index.css +0 -13
  1038. package/code-snippet/dynamsoft-document-viewer/react-vite/src/main.jsx +0 -7
  1039. package/code-snippet/dynamsoft-document-viewer/react-vite/vite.config.js +0 -19
  1040. package/code-snippet/dynamsoft-document-viewer/vue/.eslintrc.cjs +0 -15
  1041. package/code-snippet/dynamsoft-document-viewer/vue/.prettierrc.json +0 -8
  1042. package/code-snippet/dynamsoft-document-viewer/vue/README.md +0 -42
  1043. package/code-snippet/dynamsoft-document-viewer/vue/env.d.ts +0 -1
  1044. package/code-snippet/dynamsoft-document-viewer/vue/index.html +0 -13
  1045. package/code-snippet/dynamsoft-document-viewer/vue/package-lock.json +0 -3340
  1046. package/code-snippet/dynamsoft-document-viewer/vue/package.json +0 -36
  1047. package/code-snippet/dynamsoft-document-viewer/vue/public/favicon.ico +0 -0
  1048. package/code-snippet/dynamsoft-document-viewer/vue/src/App.vue +0 -29
  1049. package/code-snippet/dynamsoft-document-viewer/vue/src/Component/Viewer.vue +0 -35
  1050. package/code-snippet/dynamsoft-document-viewer/vue/src/index.html +0 -13
  1051. package/code-snippet/dynamsoft-document-viewer/vue/src/main.ts +0 -5
  1052. package/code-snippet/dynamsoft-document-viewer/vue/tsconfig.app.json +0 -13
  1053. package/code-snippet/dynamsoft-document-viewer/vue/tsconfig.json +0 -11
  1054. package/code-snippet/dynamsoft-document-viewer/vue/tsconfig.node.json +0 -17
  1055. package/code-snippet/dynamsoft-document-viewer/vue/vite.config.ts +0 -29
  1056. package/data/ddv-api-docs.json +0 -1279
  1057. package/data/web-twain-api-docs.json +0 -1881
package/src/index.js CHANGED
@@ -1,1988 +1,1250 @@
1
- #!/usr/bin/env node
2
- import { readFileSync, readdirSync, existsSync, statSync } from "node:fs";
3
- import { join, relative, dirname, extname } from "node:path";
4
- import { fileURLToPath } from "node:url";
5
- import Fuse from "fuse.js";
6
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
8
- import {
9
- ListResourcesRequestSchema,
10
- ReadResourceRequestSchema,
11
- SubscribeRequestSchema,
12
- UnsubscribeRequestSchema
13
- } from "@modelcontextprotocol/sdk/types.js";
14
- import { z } from "zod";
15
-
16
- const __dirname = dirname(fileURLToPath(import.meta.url));
17
- const projectRoot = join(__dirname, "..");
18
-
19
- const registryUrl = new URL("../data/dynamsoft_sdks.json", import.meta.url);
20
- const registry = JSON.parse(readFileSync(registryUrl, "utf8"));
21
-
22
- const dwtDocsUrl = new URL("../data/web-twain-api-docs.json", import.meta.url);
23
- const dwtDocs = JSON.parse(readFileSync(dwtDocsUrl, "utf8"));
24
-
25
- const ddvDocsUrl = new URL("../data/ddv-api-docs.json", import.meta.url);
26
- const ddvDocs = JSON.parse(readFileSync(ddvDocsUrl, "utf8"));
27
-
28
- const codeSnippetRoot = join(projectRoot, "code-snippet");
29
-
30
- // ============================================================================
31
- // Aliases for flexible input handling
32
- // ============================================================================
33
-
34
- const sdkAliases = {
35
- // DDV
36
- "ddv": "ddv",
37
- "document-viewer": "ddv",
38
- "document viewer": "ddv",
39
- "pdf viewer": "ddv",
40
- "edit viewer": "ddv",
41
- // DBR Mobile
42
- "dbr": "dbr-mobile",
43
- "dbr-mobile": "dbr-mobile",
44
- "barcode-reader": "dbr-mobile",
45
- "barcode reader": "dbr-mobile",
46
- "barcode reader mobile": "dbr-mobile",
47
- "mobile barcode": "dbr-mobile",
48
- // DBR Python
49
- "dbr-python": "dbr-python",
50
- "python barcode": "dbr-python",
51
- "barcode python": "dbr-python",
52
- "barcode reader python": "dbr-python",
53
- // DBR Web
54
- "dbr-web": "dbr-web",
55
- "web barcode": "dbr-web",
56
- "barcode web": "dbr-web",
57
- "javascript barcode": "dbr-web",
58
- "barcode javascript": "dbr-web",
59
- "barcode js": "dbr-web",
60
- // Dynamic Web TWAIN
61
- "dwt": "dwt",
62
- "web twain": "dwt",
63
- "webtwain": "dwt",
64
- "dynamic web twain": "dwt",
65
- "document scanner": "dwt",
66
- "document scanning": "dwt",
67
- "twain": "dwt",
68
- "scanner": "dwt"
69
- };
70
-
71
- const platformAliases = {
72
- // Mobile platforms
73
- rn: "react-native",
74
- reactnative: "react-native",
75
- "react native": "react-native",
76
- "react-native": "react-native",
77
- ios: "ios",
78
- swift: "ios",
79
- objc: "ios",
80
- "objective-c": "ios",
81
- android: "android",
82
- kotlin: "android",
83
- java: "android",
84
- flutter: "flutter",
85
- dart: "flutter",
86
- maui: "maui",
87
- "dotnet maui": "maui",
88
- ".net maui": "maui",
89
- // Desktop/Server
90
- python: "python",
91
- py: "python",
92
- // Web
93
- web: "web",
94
- javascript: "web",
95
- js: "web",
96
- typescript: "web",
97
- ts: "web"
98
- };
99
-
100
- const languageAliases = {
101
- kt: "kotlin",
102
- kotlin: "kotlin",
103
- java: "java",
104
- swift: "swift",
105
- objc: "objective-c",
106
- "objective-c": "objective-c",
107
- py: "python",
108
- python: "python",
109
- js: "javascript",
110
- javascript: "javascript",
111
- ts: "typescript",
112
- typescript: "typescript"
113
- };
114
-
115
- const sampleAliases = {
116
- // Mobile samples
117
- "scan single": "ScanSingleBarcode",
118
- "single barcode": "ScanSingleBarcode",
119
- "scan multiple": "ScanMultipleBarcodes",
120
- "multiple barcodes": "ScanMultipleBarcodes",
121
- "camera enhancer": "DecodeWithCameraEnhancer",
122
- "dce": "DecodeWithCameraEnhancer",
123
- "camerax": "DecodeWithCameraX",
124
- "decode image": "DecodeFromAnImage",
125
- "from image": "DecodeFromAnImage",
126
- "driver license": "DriversLicenseScanner",
127
- "general settings": "GeneralSettings",
128
- "tiny barcode": "TinyBarcodeDecoding",
129
- "gs1": "ReadGS1AI",
130
- "locate item": "LocateAnItemWithBarcode",
131
- // Python samples
132
- "read image": "read_an_image",
133
- "video decoding": "video_decoding",
134
- "video": "video_decoding",
135
- // DWT samples
136
- "basic scan": "basic-scan",
137
- "scan": "basic-scan",
138
- "read barcode": "read-barcode",
139
- "load local": "load-from-local-drive",
140
- "save": "save",
141
- "upload": "upload"
142
- };
143
-
144
- // ============================================================================
145
- // Normalization functions
146
- // ============================================================================
147
-
148
- function normalizeSdkId(sdk) {
149
- if (!sdk) return "";
150
- const normalized = sdk.trim().toLowerCase();
151
- return sdkAliases[normalized] || normalized;
152
- }
153
-
154
- function normalizePlatform(platform) {
155
- if (!platform) return "";
156
- const normalized = platform.trim().toLowerCase();
157
- return platformAliases[normalized] || normalized;
158
- }
159
-
160
- function normalizeLanguage(lang) {
161
- if (!lang) return "";
162
- const normalized = lang.trim().toLowerCase();
163
- return languageAliases[normalized] || normalized;
164
- }
165
-
166
- function normalizeApiLevel(level) {
167
- if (!level) return "high-level";
168
- const normalized = level.trim().toLowerCase();
169
- if (["low", "foundation", "foundational", "base", "manual", "core", "advanced", "custom", "template", "capturevision", "cvr"].some((word) => normalized.includes(word))) {
170
- return "low-level";
171
- }
172
- return "high-level";
173
- }
174
-
175
- function normalizeSampleName(name) {
176
- if (!name) return "";
177
- const normalized = name.trim().toLowerCase();
178
- return sampleAliases[normalized] || name;
179
- }
180
-
181
- function normalizeProduct(product) {
182
- if (!product) return "";
183
- const normalized = product.trim().toLowerCase();
184
- if (["ddv", "document viewer", "document-viewer", "dynamsoft document viewer", "doc viewer", "pdf viewer"].includes(normalized)) {
185
- return "ddv";
186
- }
187
- if (["dbr", "barcode reader", "barcode-reader", "dynamsoft barcode reader"].includes(normalized)) {
188
- return "dbr";
189
- }
190
- if (["dwt", "dynamic web twain", "web twain", "webtwain"].includes(normalized)) {
191
- return "dwt";
192
- }
193
- return normalized;
194
- }
195
-
196
- function normalizeEdition(edition, platform, product) {
197
- if (product === "dwt" || product === "ddv") return "web";
198
- const normalizedPlatform = normalizePlatform(platform);
199
-
200
- if (!edition) {
201
- if (["android", "ios"].includes(normalizedPlatform)) return "mobile";
202
- if (normalizedPlatform === "web") return "web";
203
- if (normalizedPlatform === "python") return "python";
204
- return "";
205
- }
206
-
207
- const normalized = edition.trim().toLowerCase();
208
- if (["mobile", "android", "ios"].includes(normalized)) return "mobile";
209
- if (["web", "javascript", "js", "typescript", "ts"].includes(normalized)) return "web";
210
- if (["python", "py"].includes(normalized)) return "python";
211
- if (["java"].includes(normalized)) return "java";
212
- if (["c++", "cpp"].includes(normalized)) return "cpp";
213
- if ([".net", "dotnet", "c#", "csharp"].includes(normalized)) return "dotnet";
214
- return normalized;
215
- }
216
-
217
- function inferProductFromQuery(query) {
218
- if (!query) return "";
219
- const normalized = query.toLowerCase();
220
- if (normalized.includes("ddv") || normalized.includes("document viewer") || normalized.includes("pdf viewer") || normalized.includes("edit viewer")) {
221
- return "ddv";
222
- }
223
- if (normalized.includes("dwt") || normalized.includes("web twain") || normalized.includes("webtwain")) {
224
- return "dwt";
225
- }
226
- if (normalized.includes("dbr") || normalized.includes("barcode reader") || normalized.includes("barcode")) {
227
- return "dbr";
228
- }
229
- return "";
230
- }
231
-
232
- // ============================================================================
233
- // Code snippet utilities
234
- // ============================================================================
235
-
236
- function getCodeFileExtensions() {
237
- return [".java", ".kt", ".swift", ".m", ".h", ".py", ".js", ".jsx", ".ts", ".tsx", ".vue", ".html"];
238
- }
239
-
240
- function isCodeFile(filename) {
241
- return getCodeFileExtensions().includes(extname(filename).toLowerCase());
242
- }
243
-
244
- function discoverMobileSamples(platform) {
245
- const samples = { "high-level": [], "low-level": [] };
246
- const platformPath = join(codeSnippetRoot, "dynamsoft-barcode-reader", platform);
247
-
248
- if (!existsSync(platformPath)) return samples;
249
-
250
- const highLevelPath = join(platformPath, "BarcodeScannerAPISamples");
251
- if (existsSync(highLevelPath)) {
252
- for (const entry of readdirSync(highLevelPath, { withFileTypes: true })) {
253
- if (entry.isDirectory() && !entry.name.startsWith(".") && !entry.name.startsWith("gradle") && !entry.name.startsWith("build")) {
254
- samples["high-level"].push(entry.name);
255
- }
256
- }
257
- }
258
-
259
- const lowLevelPath = join(platformPath, "FoundationalAPISamples");
260
- if (existsSync(lowLevelPath)) {
261
- for (const entry of readdirSync(lowLevelPath, { withFileTypes: true })) {
262
- if (entry.isDirectory() && !entry.name.startsWith(".") && !entry.name.startsWith("gradle") && !entry.name.startsWith("build")) {
263
- samples["low-level"].push(entry.name);
264
- }
265
- }
266
- }
267
-
268
- return samples;
269
- }
270
-
271
- function discoverPythonSamples() {
272
- const samples = [];
273
- const pythonPath = join(codeSnippetRoot, "dynamsoft-barcode-reader", "python", "Samples");
274
-
275
- if (!existsSync(pythonPath)) return samples;
276
-
277
- for (const entry of readdirSync(pythonPath, { withFileTypes: true })) {
278
- if (entry.isFile() && entry.name.endsWith(".py")) {
279
- samples.push(entry.name.replace(".py", ""));
280
- }
281
- }
282
-
283
- return samples;
284
- }
285
-
286
- function discoverWebSamples() {
287
- const categories = {
288
- "root": [],
289
- "frameworks": [],
290
- "scenarios": []
291
- };
292
- const webPath = join(codeSnippetRoot, "dynamsoft-barcode-reader", "web");
293
-
294
- if (!existsSync(webPath)) return categories;
295
-
296
- // Find HTML files in root
297
- for (const entry of readdirSync(webPath, { withFileTypes: true })) {
298
- if (entry.isFile() && entry.name.endsWith(".html")) {
299
- categories["root"].push(entry.name.replace(".html", ""));
300
- }
301
- }
302
-
303
- // Find samples in subdirectories
304
- for (const subdir of ["frameworks", "scenarios"]) {
305
- const subdirPath = join(webPath, subdir);
306
- if (existsSync(subdirPath)) {
307
- for (const entry of readdirSync(subdirPath, { withFileTypes: true })) {
308
- if (entry.isDirectory()) {
309
- categories[subdir].push(entry.name);
310
- } else if (entry.isFile() && entry.name.endsWith(".html")) {
311
- categories[subdir].push(entry.name.replace(".html", ""));
312
- }
313
- }
314
- }
315
- }
316
-
317
- // Remove empty categories
318
- for (const [key, value] of Object.entries(categories)) {
319
- if (value.length === 0) delete categories[key];
320
- }
321
-
322
- return categories;
323
- }
324
-
325
- function getWebSamplePath(category, sampleName) {
326
- const webPath = join(codeSnippetRoot, "dynamsoft-barcode-reader", "web");
327
-
328
- if (category === "root" || !category) {
329
- // Try root level
330
- const htmlPath = join(webPath, `${sampleName}.html`);
331
- if (existsSync(htmlPath)) return htmlPath;
332
- } else {
333
- // Try in subdirectory
334
- const dirPath = join(webPath, category, sampleName);
335
- if (existsSync(dirPath) && statSync(dirPath).isDirectory()) {
336
- // Look for index.html or main html file
337
- const indexPath = join(dirPath, "index.html");
338
- if (existsSync(indexPath)) return indexPath;
339
- // Look for any html file
340
- for (const entry of readdirSync(dirPath, { withFileTypes: true })) {
341
- if (entry.isFile() && entry.name.endsWith(".html")) {
342
- return join(dirPath, entry.name);
343
- }
344
- }
345
- }
346
- // Try as html file directly
347
- const htmlPath = join(webPath, category, `${sampleName}.html`);
348
- if (existsSync(htmlPath)) return htmlPath;
349
- }
350
-
351
- // Fallback: search all
352
- const rootPath = join(webPath, `${sampleName}.html`);
353
- if (existsSync(rootPath)) return rootPath;
354
-
355
- return null;
356
- }
357
-
358
- function discoverDwtSamples() {
359
- const categories = {};
360
- const dwtPath = join(codeSnippetRoot, "dynamic-web-twain");
361
-
362
- if (!existsSync(dwtPath)) return categories;
363
-
364
- for (const entry of readdirSync(dwtPath, { withFileTypes: true })) {
365
- if (entry.isDirectory() && !entry.name.startsWith(".")) {
366
- const categoryPath = join(dwtPath, entry.name);
367
- const samples = [];
368
-
369
- // Recursively find HTML files
370
- function findHtmlFiles(dir) {
371
- for (const item of readdirSync(dir, { withFileTypes: true })) {
372
- if (item.isFile() && item.name.endsWith(".html")) {
373
- samples.push(item.name.replace(".html", ""));
374
- } else if (item.isDirectory() && !item.name.startsWith(".")) {
375
- findHtmlFiles(join(dir, item.name));
376
- }
377
- }
378
- }
379
-
380
- findHtmlFiles(categoryPath);
381
- if (samples.length > 0) {
382
- categories[entry.name] = samples;
383
- }
384
- }
385
- }
386
-
387
- return categories;
388
- }
389
-
390
- function discoverDdvSamples() {
391
- const samples = [];
392
- const ddvPath = join(codeSnippetRoot, "dynamsoft-document-viewer");
393
-
394
- if (!existsSync(ddvPath)) return samples;
395
-
396
- for (const entry of readdirSync(ddvPath, { withFileTypes: true })) {
397
- if (entry.isFile() && entry.name.endsWith(".html")) {
398
- samples.push(entry.name.replace(".html", ""));
399
- } else if (entry.isDirectory() && !entry.name.startsWith(".")) {
400
- samples.push(entry.name);
401
- }
402
- }
403
- return samples;
404
- }
405
-
406
- // Legacy function for backward compatibility
407
- function discoverSamples(platform) {
408
- return discoverMobileSamples(platform);
409
- }
410
-
411
- function findCodeFilesInSample(samplePath, maxDepth = 15) {
412
- const codeFiles = [];
413
-
414
- function walk(dir, depth) {
415
- if (depth > maxDepth || !existsSync(dir)) return;
416
-
417
- for (const entry of readdirSync(dir, { withFileTypes: true })) {
418
- const fullPath = join(dir, entry.name);
419
-
420
- if (entry.isDirectory()) {
421
- if (!["build", "gradle", ".gradle", ".idea", "node_modules", "Pods", "DerivedData", ".git", "__pycache__"].includes(entry.name)) {
422
- walk(fullPath, depth + 1);
423
- }
424
- } else if (entry.isFile() && isCodeFile(entry.name)) {
425
- codeFiles.push({
426
- path: fullPath,
427
- relativePath: relative(samplePath, fullPath),
428
- filename: entry.name,
429
- extension: extname(entry.name).toLowerCase()
430
- });
431
- }
432
- }
433
- }
434
-
435
- walk(samplePath, 0);
436
- return codeFiles;
437
- }
438
-
439
- function getMobileSamplePath(platform, apiLevel, sampleName) {
440
- const levelFolder = apiLevel === "high-level" ? "BarcodeScannerAPISamples" : "FoundationalAPISamples";
441
- return join(codeSnippetRoot, "dynamsoft-barcode-reader", platform, levelFolder, sampleName);
442
- }
443
-
444
- function getPythonSamplePath(sampleName) {
445
- const fileName = sampleName.endsWith(".py") ? sampleName : sampleName + ".py";
446
- return join(codeSnippetRoot, "dynamsoft-barcode-reader", "python", "Samples", fileName);
447
- }
448
-
449
- function getDwtSamplePath(category, sampleName) {
450
- const fileName = sampleName.endsWith(".html") ? sampleName : sampleName + ".html";
451
- const categoryPath = join(codeSnippetRoot, "dynamic-web-twain", category);
452
-
453
- // Search recursively for the file
454
- function findFile(dir) {
455
- if (!existsSync(dir)) return null;
456
- for (const entry of readdirSync(dir, { withFileTypes: true })) {
457
- if (entry.isFile() && entry.name === fileName) {
458
- return join(dir, entry.name);
459
- } else if (entry.isDirectory()) {
460
- const found = findFile(join(dir, entry.name));
461
- if (found) return found;
462
- }
463
- }
464
- return null;
465
- }
466
-
467
- return findFile(categoryPath);
468
- }
469
-
470
- function getDdvSamplePath(sampleName) {
471
- const ddvPath = join(codeSnippetRoot, "dynamsoft-document-viewer");
472
-
473
- // check for html file
474
- let path = join(ddvPath, `${sampleName}.html`);
475
- if (existsSync(path)) return path;
476
-
477
- // check for directory
478
- path = join(ddvPath, sampleName);
479
- if (existsSync(path) && statSync(path).isDirectory()) {
480
- // Look for README.md or src/index.js/ts or just return the dir
481
- // Returning the dir allows findCodeFilesInSample to work on it
482
- return path;
483
- }
484
- return null;
485
- }
486
-
487
- // Legacy function for backward compatibility
488
- function getSamplePath(platform, apiLevel, sampleName) {
489
- return getMobileSamplePath(platform, apiLevel, sampleName);
490
- }
491
-
492
- function readCodeFile(filePath) {
493
- if (!existsSync(filePath)) return null;
494
- return readFileSync(filePath, "utf8");
495
- }
496
-
497
- function getMainCodeFile(platform, samplePath) {
498
- const codeFiles = findCodeFilesInSample(samplePath);
499
-
500
- const mainPatterns = platform === "android"
501
- ? ["MainActivity.java", "MainActivity.kt", "HomeActivity.java", "CaptureActivity.java"]
502
- : ["ViewController.swift", "CameraViewController.swift", "ContentView.swift"];
503
-
504
- for (const pattern of mainPatterns) {
505
- const found = codeFiles.find(f => f.filename === pattern);
506
- if (found) return found;
507
- }
508
-
509
- return codeFiles[0];
510
- }
511
-
512
- function formatDocs(docs) {
513
- return Object.entries(docs).map(([key, url]) => `- ${key}: ${url}`).join("\n");
514
- }
515
-
516
- // ============================================================================
517
- // Resource index + version policy
518
- // ============================================================================
519
-
520
- /**
521
- * @typedef {{
522
- * id: string;
523
- * uri: string;
524
- * type: "doc" | "sample" | "index" | "policy";
525
- * product?: "dbr" | "dwt" | "ddv";
526
- * edition?: string;
527
- * platform?: string;
528
- * version?: string;
529
- * majorVersion?: number;
530
- * title: string;
531
- * summary: string;
532
- * mimeType: string;
533
- * tags: string[];
534
- * pinned?: boolean;
535
- * loadContent: () => Promise<{ text?: string; blob?: string; mimeType?: string }>;
536
- * }} ResourceEntry
537
- */
538
-
539
- const resourceIndex = [];
540
-
541
- const LEGACY_DBR_LINKS = {
542
- "10": {
543
- web: { web: "https://www.dynamsoft.com/barcode-reader/docs/v10/web/programming/javascript/" },
544
- cpp: { desktop: "https://www.dynamsoft.com/barcode-reader/docs/v10/server/programming/cplusplus/" },
545
- java: { desktop: null },
546
- dotnet: { desktop: "https://www.dynamsoft.com/barcode-reader/docs/v10/server/programming/dotnet/" },
547
- python: { desktop: "http://dynamsoft.com/barcode-reader/docs/v10/server/programming/python/" },
548
- mobile: { android: null, ios: null }
549
- },
550
- "9": {
551
- web: { web: "https://www.dynamsoft.com/barcode-reader/docs/v9/web/programming/javascript/" },
552
- cpp: { desktop: "https://www.dynamsoft.com/barcode-reader/docs/v9/server/programming/cplusplus/" },
553
- java: { desktop: "https://www.dynamsoft.com/barcode-reader/docs/v9/server/programming/java/" },
554
- dotnet: { desktop: "https://www.dynamsoft.com/barcode-reader/docs/v9/server/programming/dotnet/" },
555
- python: { desktop: "https://www.dynamsoft.com/barcode-reader/docs/v9/server/programming/python/" },
556
- mobile: {
557
- android: "https://www.dynamsoft.com/barcode-reader/docs/v9/mobile/programming/android/",
558
- ios: "https://www.dynamsoft.com/barcode-reader/docs/v9/mobile/programming/objectivec-swift/"
559
- }
560
- }
561
- };
562
-
563
- const LEGACY_DWT_LINKS = {
564
- "18.5.1": "https://www.dynamsoft.com/web-twain/docs-archive/v18.5.1/info/api/",
565
- "18.4": "https://www.dynamsoft.com/web-twain/docs-archive/v18.4/info/api/",
566
- "18.3": "https://www.dynamsoft.com/web-twain/docs-archive/v18.3/info/api/",
567
- "18.1": "https://www.dynamsoft.com/web-twain/docs-archive/v18.1/info/api/",
568
- "18.0": "https://www.dynamsoft.com/web-twain/docs-archive/v18.0/info/api/",
569
- "17.3": "https://www.dynamsoft.com/web-twain/docs-archive/v17.3/info/api/",
570
- "17.2.1": "https://www.dynamsoft.com/web-twain/docs-archive/v17.2.1/info/api/",
571
- "17.1.1": "https://www.dynamsoft.com/web-twain/docs-archive/v17.1.1/info/api/",
572
- "17.0": "https://www.dynamsoft.com/web-twain/docs-archive/v17.0/info/api/",
573
- "16.2": "https://www.dynamsoft.com/web-twain/docs-archive/v16.2/info/api/",
574
- "16.1.1": "https://www.dynamsoft.com/web-twain/docs-archive/v16.1.1/info/api/"
575
- };
576
-
577
- const LATEST_VERSIONS = {
578
- dbr: {
579
- mobile: registry.sdks["dbr-mobile"].version,
580
- web: registry.sdks["dbr-web"].version,
581
- python: registry.sdks["dbr-python"].version
582
- },
583
- dwt: {
584
- web: registry.sdks["dwt"].version
585
- },
586
- ddv: {
587
- web: registry.sdks["ddv"].version
588
- }
589
- };
590
-
591
- const LATEST_MAJOR = {
592
- dbr: parseMajorVersion(registry.sdks["dbr-mobile"].version),
593
- dwt: parseMajorVersion(registry.sdks["dwt"].version),
594
- ddv: parseMajorVersion(registry.sdks["ddv"].version)
595
- };
596
-
597
- function parseMajorVersion(version) {
598
- if (!version) return null;
599
- const match = String(version).match(/(\d+)/);
600
- if (!match) return null;
601
- return Number.parseInt(match[1], 10);
602
- }
603
-
604
- function getMimeTypeForExtension(ext) {
605
- const normalized = ext.replace(/^\./, "").toLowerCase();
606
- if (normalized === "swift") return "text/x-swift";
607
- if (normalized === "kt") return "text/x-kotlin";
608
- if (normalized === "java") return "text/x-java";
609
- if (normalized === "py") return "text/x-python";
610
- if (normalized === "jsx") return "text/jsx";
611
- if (normalized === "tsx") return "text/tsx";
612
- if (normalized === "vue") return "text/x-vue";
613
- if (normalized === "cjs") return "text/javascript";
614
- if (normalized === "html") return "text/html";
615
- if (normalized === "md" || normalized === "markdown") return "text/markdown";
616
- if (normalized === "json") return "application/json";
617
- if (normalized === "png") return "image/png";
618
- return "text/plain";
619
- }
620
-
621
- function addResourceToIndex(entry) {
622
- resourceIndex.push(entry);
623
- }
624
-
625
- function formatLegacyLinksForDBR(major) {
626
- const byMajor = LEGACY_DBR_LINKS[String(major)];
627
- if (!byMajor) {
628
- return `No legacy docs are available for DBR v${major}.`;
629
- }
630
-
631
- const lines = [
632
- `Legacy docs for DBR v${major}:`,
633
- `- Web JS: ${byMajor.web.web || "Not available"}`,
634
- `- C++: ${byMajor.cpp.desktop || "Not available"}`,
635
- `- Java: ${byMajor.java.desktop || "Not available"}`,
636
- `- .NET: ${byMajor.dotnet.desktop || "Not available"}`,
637
- `- Python: ${byMajor.python.desktop || "Not available"}`,
638
- `- Android: ${byMajor.mobile.android || "Not available"}`,
639
- `- iOS: ${byMajor.mobile.ios || "Not available"}`
640
- ];
641
-
642
- return lines.join("\n");
643
- }
644
-
645
- function getLegacyLink(product, version, edition, platform) {
646
- if (product === "dwt") {
647
- if (!version) return null;
648
- return LEGACY_DWT_LINKS[version] || null;
649
- }
650
-
651
- if (product !== "dbr") return null;
652
- const major = parseMajorVersion(version);
653
- if (!major) return null;
654
-
655
- const byMajor = LEGACY_DBR_LINKS[String(major)];
656
- if (!byMajor) return null;
657
-
658
- const normalizedEdition = edition || "web";
659
- if (normalizedEdition === "mobile") {
660
- if (platform === "android") return byMajor.mobile.android;
661
- if (platform === "ios") return byMajor.mobile.ios;
662
- return null;
663
- }
664
- if (normalizedEdition === "web") return byMajor.web.web;
665
- if (normalizedEdition === "python") return byMajor.python.desktop;
666
- if (normalizedEdition === "cpp") return byMajor.cpp.desktop;
667
- if (normalizedEdition === "java") return byMajor.java.desktop;
668
- if (normalizedEdition === "dotnet") return byMajor.dotnet.desktop;
669
- return null;
670
- }
671
-
672
- function detectMajorFromQuery(query) {
673
- if (!query) return null;
674
- const text = String(query);
675
- const explicit = text.match(/(?:\bv|\bversion\s*)(\d{1,2})(?:\.\d+)?/i);
676
- const productScoped = text.match(/(?:dbr|dwt|ddv)[^0-9]*(\d{1,2})(?:\.\d+)?/i);
677
- const match = explicit || productScoped;
678
- if (!match) return null;
679
- const major = Number.parseInt(match[1], 10);
680
- return Number.isNaN(major) ? null : major;
681
- }
682
-
683
- function ensureLatestMajor({ product, version, query, edition, platform }) {
684
- const inferredProduct = product || inferProductFromQuery(query);
685
- if (!inferredProduct) return { ok: true };
686
-
687
- const latestMajor = LATEST_MAJOR[inferredProduct];
688
- const requestedMajor = parseMajorVersion(version) ?? detectMajorFromQuery(query);
689
-
690
- if (!requestedMajor || requestedMajor === latestMajor) {
691
- return { ok: true, latestMajor };
692
- }
693
-
694
- if (inferredProduct === "ddv") {
695
- return {
696
- ok: false,
697
- message: `This MCP server only serves the latest major version of DDV (v${latestMajor}).`
698
- };
699
- }
700
-
701
- if (inferredProduct === "dbr" && requestedMajor < 9) {
702
- return {
703
- ok: false,
704
- message: `This MCP server only serves the latest major version of DBR (v${latestMajor}). DBR versions prior to v9 are not available.`
705
- };
706
- }
707
-
708
- if (inferredProduct === "dwt" && requestedMajor < 16) {
709
- return {
710
- ok: false,
711
- message: `This MCP server only serves the latest major version of DWT (v${latestMajor}). DWT versions prior to v16 are not available.`
712
- };
713
- }
714
-
715
- if (inferredProduct === "dbr") {
716
- const link = getLegacyLink("dbr", String(requestedMajor), edition, platform);
717
- const fallback = formatLegacyLinksForDBR(requestedMajor);
718
- return {
719
- ok: false,
720
- message: [
721
- `This MCP server only serves the latest major version of DBR (v${latestMajor}).`,
722
- link ? `Legacy docs: ${link}` : fallback
723
- ].join("\n")
724
- };
725
- }
726
-
727
- if (inferredProduct === "dwt") {
728
- const available = Object.keys(LEGACY_DWT_LINKS).sort();
729
- const link = getLegacyLink("dwt", String(version), edition, platform);
730
- const legacyNote = link
731
- ? `Legacy docs: ${link}`
732
- : `Available archived DWT versions: ${available.join(", ")}`;
733
- return {
734
- ok: false,
735
- message: [
736
- `This MCP server only serves the latest major version of DWT (v${latestMajor}).`,
737
- legacyNote
738
- ].join("\n")
739
- };
740
- }
741
-
742
- return { ok: false, message: "Unsupported version request." };
743
- }
744
-
745
- function parseResourceUri(uri) {
746
- if (!uri || !uri.includes("://")) return null;
747
- const [scheme, rest] = uri.split("://");
748
- const parts = rest.split("/").filter(Boolean);
749
- if (parts.length < 4) return { scheme, parts };
750
- return {
751
- scheme,
752
- product: parts[0],
753
- edition: parts[1],
754
- platform: parts[2],
755
- version: parts[3],
756
- parts
757
- };
758
- }
759
-
760
- function parseSampleUri(uri) {
761
- const parsed = parseResourceUri(uri);
762
- if (!parsed || parsed.scheme !== "sample" || !parsed.product) return null;
763
-
764
- if (parsed.product === "dbr" && parsed.edition === "mobile") {
765
- return {
766
- product: "dbr",
767
- edition: "mobile",
768
- platform: parsed.platform,
769
- version: parsed.version,
770
- level: parsed.parts[4],
771
- sampleName: parsed.parts[5]
772
- };
773
- }
774
-
775
- if (parsed.product === "dbr" && parsed.edition === "web") {
776
- return {
777
- product: "dbr",
778
- edition: "web",
779
- platform: parsed.platform,
780
- version: parsed.version,
781
- category: parsed.parts[4],
782
- sampleName: parsed.parts[5]
783
- };
784
- }
785
-
786
- if (parsed.product === "dbr" && parsed.edition === "python") {
787
- return {
788
- product: "dbr",
789
- edition: "python",
790
- platform: parsed.platform,
791
- version: parsed.version,
792
- sampleName: parsed.parts[4]
793
- };
794
- }
795
-
796
- if (parsed.product === "dwt") {
797
- return {
798
- product: "dwt",
799
- edition: parsed.edition,
800
- platform: parsed.platform,
801
- version: parsed.version,
802
- category: parsed.parts[4],
803
- sampleName: parsed.parts[5]
804
- };
805
- }
806
-
807
- if (parsed.product === "ddv") {
808
- return {
809
- product: "ddv",
810
- edition: parsed.edition,
811
- platform: parsed.platform,
812
- version: parsed.version,
813
- sampleName: parsed.parts[4]
814
- };
815
- }
816
-
817
- return null;
818
- }
819
-
820
- function buildVersionPolicyText() {
821
- const dbrMajor = LATEST_MAJOR.dbr;
822
- const dwtMajor = LATEST_MAJOR.dwt;
823
- const ddvMajor = LATEST_MAJOR.ddv;
824
- const dwtLegacyVersions = Object.keys(LEGACY_DWT_LINKS).sort().join(", ");
825
-
826
- return [
827
- "# Version Policy",
828
- "",
829
- `- This MCP server serves the latest major versions only (DBR v${dbrMajor}, DWT v${dwtMajor}, DDV v${ddvMajor}).`,
830
- "- Requests for older major versions are refused.",
831
- "- DBR legacy docs are only available for v9 and v10 (no docs prior to v9).",
832
- "- DWT archived docs are available for versions: " + dwtLegacyVersions,
833
- "- DDV archived docs are not provided by this MCP server.",
834
- "",
835
- "Use the official Dynamsoft documentation if you must target older versions."
836
- ].join("\n");
837
- }
838
-
839
- function buildIndexData() {
840
- const dbrMobileVersion = LATEST_VERSIONS.dbr.mobile;
841
- const dbrWebVersion = LATEST_VERSIONS.dbr.web;
842
- const dbrPythonVersion = LATEST_VERSIONS.dbr.python;
843
- const dwtVersion = LATEST_VERSIONS.dwt.web;
844
- const ddvVersion = LATEST_VERSIONS.ddv.web;
845
-
846
- const mobileAndroid = discoverMobileSamples("android");
847
- const mobileIos = discoverMobileSamples("ios");
848
- const webSamples = discoverWebSamples();
849
- const pythonSamples = discoverPythonSamples();
850
- const dwtSamples = discoverDwtSamples();
851
- const ddvSamples = discoverDdvSamples();
852
-
853
- return {
854
- products: {
855
- dbr: {
856
- latestMajor: LATEST_MAJOR.dbr,
857
- editions: {
858
- mobile: {
859
- version: dbrMobileVersion,
860
- platforms: ["android", "ios"],
861
- apiLevels: ["high-level", "low-level"],
862
- samples: {
863
- android: mobileAndroid,
864
- ios: mobileIos
865
- }
866
- },
867
- web: {
868
- version: dbrWebVersion,
869
- platforms: ["web"],
870
- samples: webSamples
871
- },
872
- python: {
873
- version: dbrPythonVersion,
874
- platforms: ["python"],
875
- samples: pythonSamples
876
- }
877
- }
878
- },
879
- dwt: {
880
- latestMajor: LATEST_MAJOR.dwt,
881
- editions: {
882
- web: {
883
- version: dwtVersion,
884
- platforms: ["web"],
885
- sampleCategories: dwtSamples,
886
- docCount: dwtDocs.articles.length,
887
- docTitles: dwtDocs.articles.map((article) => ({
888
- title: article.title,
889
- category: article.breadcrumb || ""
890
- }))
891
- }
892
- }
893
- },
894
- ddv: {
895
- latestMajor: LATEST_MAJOR.ddv,
896
- editions: {
897
- web: {
898
- version: ddvVersion,
899
- platforms: ["web"],
900
- samples: ddvSamples,
901
- docCount: ddvDocs.articles.length,
902
- docTitles: ddvDocs.articles.map((article) => ({
903
- title: article.title,
904
- category: article.breadcrumb || ""
905
- }))
906
- }
907
- }
908
- }
909
- }
910
- };
911
- }
912
-
913
- function buildResourceIndex() {
914
- addResourceToIndex({
915
- id: "index",
916
- uri: "doc://index",
917
- type: "index",
918
- title: "Dynamsoft MCP Index",
919
- summary: "Compact index of products, editions, versions, samples, and docs.",
920
- mimeType: "application/json",
921
- tags: ["index", "overview", "catalog"],
922
- pinned: true,
923
- loadContent: async () => ({
924
- text: JSON.stringify(buildIndexData(), null, 2),
925
- mimeType: "application/json"
926
- })
927
- });
928
-
929
- addResourceToIndex({
930
- id: "version-policy",
931
- uri: "doc://version-policy",
932
- type: "policy",
933
- title: "Version Policy",
934
- summary: "Latest major versions only; legacy docs are linked for select versions.",
935
- mimeType: "text/markdown",
936
- tags: ["policy", "version", "support"],
937
- pinned: true,
938
- loadContent: async () => ({
939
- text: buildVersionPolicyText(),
940
- mimeType: "text/markdown"
941
- })
942
- });
943
-
944
- const dbrMobileVersion = LATEST_VERSIONS.dbr.mobile;
945
- const dbrWebVersion = LATEST_VERSIONS.dbr.web;
946
- const dbrPythonVersion = LATEST_VERSIONS.dbr.python;
947
- const dwtVersion = LATEST_VERSIONS.dwt.web;
948
- const ddvVersion = LATEST_VERSIONS.ddv.web;
949
-
950
- // DBR mobile samples (main file only)
951
- for (const platform of ["android", "ios"]) {
952
- const samples = discoverMobileSamples(platform);
953
- for (const level of ["high-level", "low-level"]) {
954
- for (const sampleName of samples[level]) {
955
- addResourceToIndex({
956
- id: `dbr-mobile-${platform}-${level}-${sampleName}`,
957
- uri: `sample://dbr/mobile/${platform}/${dbrMobileVersion}/${level}/${sampleName}`,
958
- type: "sample",
959
- product: "dbr",
960
- edition: "mobile",
961
- platform,
962
- version: dbrMobileVersion,
963
- majorVersion: LATEST_MAJOR.dbr,
964
- title: `${sampleName} (${platform}, ${level})`,
965
- summary: `DBR mobile ${platform} ${level} sample ${sampleName}.`,
966
- mimeType: "text/plain",
967
- tags: ["sample", "dbr", "mobile", platform, level, sampleName],
968
- loadContent: async () => {
969
- const samplePath = getMobileSamplePath(platform, level, sampleName);
970
- const mainFile = getMainCodeFile(platform, samplePath);
971
- if (!mainFile) {
972
- return { text: "Sample not found", mimeType: "text/plain" };
973
- }
974
- const content = readCodeFile(mainFile.path);
975
- const ext = mainFile.filename.split(".").pop() || "";
976
- return { text: content, mimeType: getMimeTypeForExtension(ext) };
977
- }
978
- });
979
- }
980
- }
981
- }
982
-
983
- // DBR Python samples
984
- for (const sampleName of discoverPythonSamples()) {
985
- addResourceToIndex({
986
- id: `dbr-python-${sampleName}`,
987
- uri: `sample://dbr/python/python/${dbrPythonVersion}/${sampleName}`,
988
- type: "sample",
989
- product: "dbr",
990
- edition: "python",
991
- platform: "python",
992
- version: dbrPythonVersion,
993
- majorVersion: LATEST_MAJOR.dbr,
994
- title: `Python sample: ${sampleName}`,
995
- summary: `DBR Python sample ${sampleName}.`,
996
- mimeType: "text/x-python",
997
- tags: ["sample", "dbr", "python", sampleName],
998
- loadContent: async () => {
999
- const samplePath = getPythonSamplePath(sampleName);
1000
- const content = existsSync(samplePath) ? readCodeFile(samplePath) : "Sample not found";
1001
- return { text: content, mimeType: "text/x-python" };
1002
- }
1003
- });
1004
- }
1005
-
1006
- // DBR web samples
1007
- const webCategories = discoverWebSamples();
1008
- for (const [category, samples] of Object.entries(webCategories)) {
1009
- for (const sampleName of samples) {
1010
- addResourceToIndex({
1011
- id: `dbr-web-${category}-${sampleName}`,
1012
- uri: `sample://dbr/web/web/${dbrWebVersion}/${category}/${sampleName}`,
1013
- type: "sample",
1014
- product: "dbr",
1015
- edition: "web",
1016
- platform: "web",
1017
- version: dbrWebVersion,
1018
- majorVersion: LATEST_MAJOR.dbr,
1019
- title: `Web sample: ${sampleName} (${category})`,
1020
- summary: `DBR web sample ${category}/${sampleName}.`,
1021
- mimeType: "text/html",
1022
- tags: ["sample", "dbr", "web", category, sampleName],
1023
- loadContent: async () => {
1024
- const samplePath = getWebSamplePath(category, sampleName);
1025
- const content = samplePath && existsSync(samplePath) ? readCodeFile(samplePath) : "Sample not found";
1026
- return { text: content, mimeType: "text/html" };
1027
- }
1028
- });
1029
- }
1030
- }
1031
-
1032
- // DWT samples
1033
- const dwtCategories = discoverDwtSamples();
1034
- for (const [category, samples] of Object.entries(dwtCategories)) {
1035
- for (const sampleName of samples) {
1036
- addResourceToIndex({
1037
- id: `dwt-${category}-${sampleName}`,
1038
- uri: `sample://dwt/web/web/${dwtVersion}/${category}/${sampleName}`,
1039
- type: "sample",
1040
- product: "dwt",
1041
- edition: "web",
1042
- platform: "web",
1043
- version: dwtVersion,
1044
- majorVersion: LATEST_MAJOR.dwt,
1045
- title: `DWT sample: ${sampleName} (${category})`,
1046
- summary: `Dynamic Web TWAIN sample ${category}/${sampleName}.`,
1047
- mimeType: "text/html",
1048
- tags: ["sample", "dwt", category, sampleName],
1049
- loadContent: async () => {
1050
- const samplePath = getDwtSamplePath(category, sampleName);
1051
- const content = samplePath && existsSync(samplePath) ? readCodeFile(samplePath) : "Sample not found";
1052
- return { text: content, mimeType: "text/html" };
1053
- }
1054
- });
1055
- }
1056
- }
1057
-
1058
- // DWT documentation articles
1059
- for (let i = 0; i < dwtDocs.articles.length; i++) {
1060
- const article = dwtDocs.articles[i];
1061
- const slug = `${encodeURIComponent(article.title)}-${i}`;
1062
- const tags = ["doc", "dwt"];
1063
- if (article.breadcrumb) {
1064
- tags.push(...article.breadcrumb.toLowerCase().split(/\s*>\s*/));
1065
- }
1066
- addResourceToIndex({
1067
- id: `dwt-doc-${i}`,
1068
- uri: `doc://dwt/web/web/${dwtVersion}/${slug}`,
1069
- type: "doc",
1070
- product: "dwt",
1071
- edition: "web",
1072
- platform: "web",
1073
- version: dwtVersion,
1074
- majorVersion: LATEST_MAJOR.dwt,
1075
- title: article.title,
1076
- summary: article.breadcrumb || "Dynamic Web TWAIN documentation",
1077
- mimeType: "text/markdown",
1078
- tags,
1079
- loadContent: async () => {
1080
- const content = [
1081
- `# ${article.title}`,
1082
- "",
1083
- article.breadcrumb ? `**Category:** ${article.breadcrumb}` : "",
1084
- article.url ? `**URL:** ${article.url}` : "",
1085
- "",
1086
- "---",
1087
- "",
1088
- article.content
1089
- ].filter(Boolean).join("\n");
1090
- return { text: content, mimeType: "text/markdown" };
1091
- }
1092
- });
1093
- }
1094
-
1095
- // DDV samples
1096
- for (const sampleName of discoverDdvSamples()) {
1097
- addResourceToIndex({
1098
- id: `ddv-${sampleName}`,
1099
- uri: `sample://ddv/web/web/${ddvVersion}/${sampleName}`,
1100
- type: "sample",
1101
- product: "ddv",
1102
- edition: "web",
1103
- platform: "web",
1104
- version: ddvVersion,
1105
- majorVersion: LATEST_MAJOR.ddv,
1106
- title: `DDV sample: ${sampleName}`,
1107
- summary: `Dynamsoft Document Viewer sample ${sampleName}.`,
1108
- mimeType: "text/plain",
1109
- tags: ["sample", "ddv", "document-viewer", "web", sampleName],
1110
- loadContent: async () => {
1111
- const samplePath = getDdvSamplePath(sampleName);
1112
- if (!samplePath || !existsSync(samplePath)) {
1113
- return { text: "Sample not found", mimeType: "text/plain" };
1114
- }
1115
-
1116
- const stat = statSync(samplePath);
1117
- if (stat.isDirectory()) {
1118
- const readmePath = join(samplePath, "README.md");
1119
- if (existsSync(readmePath)) {
1120
- return { text: readCodeFile(readmePath), mimeType: "text/markdown" };
1121
- }
1122
-
1123
- const codeFiles = findCodeFilesInSample(samplePath);
1124
- if (codeFiles.length === 0) {
1125
- const entries = readdirSync(samplePath, { withFileTypes: true })
1126
- .filter((entry) => entry.isFile())
1127
- .map((entry) => entry.name);
1128
- return {
1129
- text: entries.length ? entries.join("\n") : "Sample found, but no code files detected.",
1130
- mimeType: "text/plain"
1131
- };
1132
- }
1133
-
1134
- const preferredNames = [
1135
- "main.tsx",
1136
- "main.jsx",
1137
- "main.ts",
1138
- "main.js",
1139
- "App.tsx",
1140
- "App.jsx",
1141
- "App.vue",
1142
- "Viewer.tsx",
1143
- "Viewer.jsx",
1144
- "Viewer.vue"
1145
- ];
1146
- const preferred = codeFiles.find((file) => preferredNames.includes(file.filename)) || codeFiles[0];
1147
- const content = readCodeFile(preferred.path);
1148
- return { text: content, mimeType: getMimeTypeForExtension(preferred.extension) };
1149
- }
1150
-
1151
- const ext = extname(samplePath).replace(".", "");
1152
- return { text: readCodeFile(samplePath), mimeType: getMimeTypeForExtension(ext) };
1153
- }
1154
- });
1155
- }
1156
-
1157
- // DDV documentation articles
1158
- for (let i = 0; i < ddvDocs.articles.length; i++) {
1159
- const article = ddvDocs.articles[i];
1160
- if (!article.title) continue;
1161
- const slug = `${encodeURIComponent(article.title)}-${i}`;
1162
- const tags = ["doc", "ddv"];
1163
- if (article.breadcrumb) {
1164
- tags.push(...article.breadcrumb.toLowerCase().split(/\s*>\s*/));
1165
- }
1166
- addResourceToIndex({
1167
- id: `ddv-doc-${i}`,
1168
- uri: `doc://ddv/web/web/${ddvVersion}/${slug}`,
1169
- type: "doc",
1170
- product: "ddv",
1171
- edition: "web",
1172
- platform: "web",
1173
- version: ddvVersion,
1174
- majorVersion: LATEST_MAJOR.ddv,
1175
- title: article.title,
1176
- summary: article.breadcrumb || "Dynamsoft Document Viewer documentation",
1177
- mimeType: "text/markdown",
1178
- tags,
1179
- loadContent: async () => {
1180
- const content = [
1181
- `# ${article.title}`,
1182
- "",
1183
- article.breadcrumb ? `**Category:** ${article.breadcrumb}` : "",
1184
- article.url ? `**URL:** ${article.url}` : "",
1185
- "",
1186
- "---",
1187
- "",
1188
- article.content
1189
- ].filter(Boolean).join("\n");
1190
- return { text: content, mimeType: "text/markdown" };
1191
- }
1192
- });
1193
- }
1194
- }
1195
-
1196
- buildResourceIndex();
1197
-
1198
- const resourceSearch = new Fuse(resourceIndex, {
1199
- keys: ["title", "summary", "tags", "uri"],
1200
- threshold: 0.35,
1201
- ignoreLocation: true,
1202
- includeScore: true
1203
- });
1204
-
1205
- function getPinnedResources() {
1206
- return resourceIndex.filter((entry) => entry.pinned);
1207
- }
1208
-
1209
- async function readResourceContent(uri) {
1210
- const resource = resourceIndex.find((entry) => entry.uri === uri);
1211
- if (!resource) {
1212
- return null;
1213
- }
1214
- const content = await resource.loadContent();
1215
- return {
1216
- uri,
1217
- mimeType: content.mimeType || resource.mimeType || "text/plain",
1218
- text: content.text,
1219
- blob: content.blob
1220
- };
1221
- }
1222
-
1223
- // ============================================================================
1224
- // MCP Server
1225
- // ============================================================================
1226
-
1227
- const server = new McpServer({
1228
- name: "simple-dynamsoft-mcp",
1229
- version: "3.1.0",
1230
- description: "MCP server for latest major versions of Dynamsoft SDKs: Barcode Reader (Mobile/Python/Web), Dynamic Web TWAIN, and Document Viewer"
1231
- });
1232
-
1233
- // ============================================================================
1234
- // TOOL: get_index
1235
- // ============================================================================
1236
-
1237
- server.registerTool(
1238
- "get_index",
1239
- {
1240
- title: "Get Index",
1241
- description: "Get a compact index of products, editions, versions, and available samples/docs.",
1242
- inputSchema: {}
1243
- },
1244
- async () => ({
1245
- content: [{ type: "text", text: JSON.stringify(buildIndexData(), null, 2) }]
1246
- })
1247
- );
1248
-
1249
- // ============================================================================
1250
- // TOOL: search
1251
- // ============================================================================
1252
-
1253
- server.registerTool(
1254
- "search",
1255
- {
1256
- title: "Search",
1257
- description: "Unified search across docs and samples; returns resource links for lazy loading.",
1258
- inputSchema: {
1259
- query: z.string().describe("Keywords to search across docs and samples."),
1260
- product: z.string().optional().describe("Product: dbr, dwt, ddv"),
1261
- edition: z.string().optional().describe("Edition: mobile, web, python, java, cpp, dotnet"),
1262
- platform: z.string().optional().describe("Platform: android, ios, web, python"),
1263
- version: z.string().optional().describe("Version constraint (major or full version)"),
1264
- type: z.enum(["doc", "sample", "index", "policy", "any"]).optional(),
1265
- limit: z.number().int().min(1).max(10).optional().describe("Max results (default 5)")
1266
- }
1267
- },
1268
- async ({ query, product, edition, platform, version, type, limit }) => {
1269
- if (!query || !query.trim()) {
1270
- return { isError: true, content: [{ type: "text", text: "Query is required." }] };
1271
- }
1272
- const normalizedProduct = normalizeProduct(product);
1273
- const normalizedPlatform = normalizePlatform(platform);
1274
- const normalizedEdition = normalizeEdition(edition, normalizedPlatform, normalizedProduct);
1275
-
1276
- const policy = ensureLatestMajor({
1277
- product: normalizedProduct,
1278
- version,
1279
- query,
1280
- edition: normalizedEdition,
1281
- platform: normalizedPlatform
1282
- });
1283
-
1284
- if (!policy.ok) {
1285
- return { isError: true, content: [{ type: "text", text: policy.message }] };
1286
- }
1287
-
1288
- const results = resourceSearch.search(query).map((result) => result.item).filter((entry) => {
1289
- if (normalizedProduct && entry.product !== normalizedProduct) return false;
1290
- if (normalizedEdition && entry.edition !== normalizedEdition) return false;
1291
- if (normalizedPlatform && entry.platform !== normalizedPlatform) return false;
1292
- if (type && type !== "any" && entry.type !== type) return false;
1293
- return true;
1294
- });
1295
-
1296
- const maxResults = Math.min(limit || 5, 10);
1297
- const topResults = results.slice(0, maxResults);
1298
-
1299
- if (topResults.length === 0) {
1300
- return {
1301
- content: [{
1302
- type: "text",
1303
- text: `No results for "${query}". Try get_index for available products or adjust filters.`
1304
- }]
1305
- };
1306
- }
1307
-
1308
- const content = [
1309
- {
1310
- type: "text",
1311
- text: `Found ${topResults.length} result(s) for "${query}". Read the links you need with resources/read.`
1312
- }
1313
- ];
1314
-
1315
- for (const entry of topResults) {
1316
- const versionLabel = entry.version ? `v${entry.version}` : "n/a";
1317
- const scopeLabel = [
1318
- entry.product || "general",
1319
- entry.edition || "",
1320
- entry.platform || ""
1321
- ].filter(Boolean).join("/");
1322
- content.push({
1323
- type: "resource_link",
1324
- uri: entry.uri,
1325
- name: entry.title,
1326
- description: `${entry.type.toUpperCase()} | ${scopeLabel} | ${versionLabel} - ${entry.summary}`,
1327
- mimeType: entry.mimeType,
1328
- annotations: {
1329
- audience: ["assistant"],
1330
- priority: 0.8
1331
- }
1332
- });
1333
- }
1334
-
1335
- return { content };
1336
- }
1337
- );
1338
-
1339
- // ============================================================================
1340
- // TOOL: resolve_version
1341
- // ============================================================================
1342
-
1343
- server.registerTool(
1344
- "resolve_version",
1345
- {
1346
- title: "Resolve Version",
1347
- description: "Resolve a concrete latest-major version for a product/edition/platform.",
1348
- inputSchema: {
1349
- product: z.string().describe("Product: dbr, dwt, or ddv"),
1350
- edition: z.string().optional().describe("Edition: mobile, web, python, java, cpp, dotnet"),
1351
- platform: z.string().optional().describe("Platform: android, ios, web, python"),
1352
- constraint: z.string().optional().describe("Version constraint, e.g., latest, 11.x, 10"),
1353
- feature: z.string().optional().describe("Optional feature hint")
1354
- }
1355
- },
1356
- async ({ product, edition, platform, constraint, feature }) => {
1357
- const normalizedProduct = normalizeProduct(product);
1358
- const normalizedPlatform = normalizePlatform(platform);
1359
- const normalizedEdition = normalizeEdition(edition, normalizedPlatform, normalizedProduct);
1360
-
1361
- if (!["dbr", "dwt", "ddv"].includes(normalizedProduct)) {
1362
- return {
1363
- isError: true,
1364
- content: [{ type: "text", text: `Unknown product "${product}". Use dbr, dwt, or ddv.` }]
1365
- };
1366
- }
1367
-
1368
- const policy = ensureLatestMajor({
1369
- product: normalizedProduct,
1370
- version: constraint,
1371
- query: feature,
1372
- edition: normalizedEdition,
1373
- platform: normalizedPlatform
1374
- });
1375
-
1376
- if (!policy.ok) {
1377
- return { isError: true, content: [{ type: "text", text: policy.message }] };
1378
- }
1379
-
1380
- if (normalizedProduct === "dbr") {
1381
- if (!normalizedEdition) {
1382
- const lines = [
1383
- "# DBR Version Resolution",
1384
- `- Latest major: v${LATEST_MAJOR.dbr}`,
1385
- `- Mobile: ${LATEST_VERSIONS.dbr.mobile}`,
1386
- `- Web: ${LATEST_VERSIONS.dbr.web}`,
1387
- `- Python: ${LATEST_VERSIONS.dbr.python}`,
1388
- "",
1389
- "Specify edition/platform to resolve a single version."
1390
- ];
1391
- return { content: [{ type: "text", text: lines.join("\n") }] };
1392
- }
1393
-
1394
- const resolved = LATEST_VERSIONS.dbr[normalizedEdition];
1395
- if (!resolved) {
1396
- return {
1397
- isError: true,
1398
- content: [{ type: "text", text: `Edition "${normalizedEdition}" is not hosted by this MCP server.` }]
1399
- };
1400
- }
1401
-
1402
- const lines = [
1403
- "# DBR Version Resolution",
1404
- `- Edition: ${normalizedEdition}`,
1405
- normalizedPlatform ? `- Platform: ${normalizedPlatform}` : "",
1406
- `- Latest major: v${LATEST_MAJOR.dbr}`,
1407
- `- Resolved version: ${resolved}`
1408
- ].filter(Boolean);
1409
-
1410
- return { content: [{ type: "text", text: lines.join("\n") }] };
1411
- }
1412
-
1413
- if (normalizedProduct === "dwt") {
1414
- const lines = [
1415
- "# DWT Version Resolution",
1416
- `- Latest major: v${LATEST_MAJOR.dwt}`,
1417
- `- Resolved version: ${LATEST_VERSIONS.dwt.web}`
1418
- ];
1419
- return { content: [{ type: "text", text: lines.join("\n") }] };
1420
- }
1421
-
1422
- const lines = [
1423
- "# DDV Version Resolution",
1424
- `- Latest major: v${LATEST_MAJOR.ddv}`,
1425
- `- Resolved version: ${LATEST_VERSIONS.ddv.web}`
1426
- ];
1427
-
1428
- return { content: [{ type: "text", text: lines.join("\n") }] };
1429
- }
1430
- );
1431
-
1432
- // ============================================================================
1433
- // TOOL: get_quickstart
1434
- // ============================================================================
1435
-
1436
- server.registerTool(
1437
- "get_quickstart",
1438
- {
1439
- title: "Get Quickstart",
1440
- description: "Opinionated quickstart for a target product/edition/platform.",
1441
- inputSchema: {
1442
- product: z.string().describe("Product: dbr, dwt, or ddv"),
1443
- edition: z.string().optional().describe("Edition: mobile, web, python"),
1444
- platform: z.string().optional().describe("Platform: android, ios, web, python"),
1445
- language: z.string().optional().describe("Language hint: kotlin, java, swift, js, ts, python, react, vue, angular"),
1446
- version: z.string().optional().describe("Version constraint"),
1447
- api_level: z.string().optional().describe("API level: high-level or low-level (mobile only)"),
1448
- scenario: z.string().optional().describe("Scenario: camera, image, single, multiple, react, etc.")
1449
- }
1450
- },
1451
- async ({ product, edition, platform, language, version, api_level, scenario }) => {
1452
- const normalizedProduct = normalizeProduct(product);
1453
- const normalizedPlatform = normalizePlatform(platform);
1454
- const normalizedEdition = normalizeEdition(edition, normalizedPlatform, normalizedProduct);
1455
- const policy = ensureLatestMajor({
1456
- product: normalizedProduct,
1457
- version,
1458
- query: scenario,
1459
- edition: normalizedEdition,
1460
- platform: normalizedPlatform
1461
- });
1462
-
1463
- if (!policy.ok) {
1464
- return { isError: true, content: [{ type: "text", text: policy.message }] };
1465
- }
1466
-
1467
- if (normalizedProduct === "dbr" && normalizedEdition === "python") {
1468
- const sdkEntry = registry.sdks["dbr-python"];
1469
- const scenarioLower = (scenario || "").toLowerCase();
1470
- const sampleName = scenarioLower.includes("video") ? "video_decoding" : "read_an_image";
1471
- const samplePath = getPythonSamplePath(sampleName);
1472
-
1473
- if (!existsSync(samplePath)) {
1474
- return { isError: true, content: [{ type: "text", text: `Sample not found: ${sampleName}.` }] };
1475
- }
1476
-
1477
- const content = readCodeFile(samplePath);
1478
-
1479
- return {
1480
- content: [{
1481
- type: "text",
1482
- text: [
1483
- "# Quick Start: DBR Python",
1484
- "",
1485
- `**SDK Version:** ${sdkEntry.version}`,
1486
- `**Trial License:** \`${registry.trial_license}\``,
1487
- "",
1488
- "## Install",
1489
- "```bash",
1490
- sdkEntry.platforms.python.installation.pip,
1491
- "```",
1492
- "",
1493
- `## ${sampleName}.py`,
1494
- "```python",
1495
- content,
1496
- "```",
1497
- "",
1498
- `Docs: ${sdkEntry.platforms.python.docs["user-guide"]}`
1499
- ].join("\n")
1500
- }]
1501
- };
1502
- }
1503
-
1504
- if (normalizedProduct === "dbr" && normalizedEdition === "web") {
1505
- const sdkEntry = registry.sdks["dbr-web"];
1506
- const scenarioLower = (scenario || "").toLowerCase();
1507
- const sampleName = scenarioLower.includes("image") ? "read-an-image" : "hello-world";
1508
- const samplePath = getWebSamplePath("root", sampleName);
1509
-
1510
- if (!samplePath || !existsSync(samplePath)) {
1511
- return { isError: true, content: [{ type: "text", text: `Sample not found: ${sampleName}.` }] };
1512
- }
1513
-
1514
- const content = readCodeFile(samplePath);
1515
-
1516
- return {
1517
- content: [{
1518
- type: "text",
1519
- text: [
1520
- "# Quick Start: DBR Web",
1521
- "",
1522
- `**SDK Version:** ${sdkEntry.version}`,
1523
- `**Trial License:** \`${registry.trial_license}\``,
1524
- "",
1525
- "## Option 1: CDN",
1526
- "```html",
1527
- `<script src="${sdkEntry.platforms.web.installation.cdn}"></script>`,
1528
- "```",
1529
- "",
1530
- "## Option 2: NPM",
1531
- "```bash",
1532
- sdkEntry.platforms.web.installation.npm,
1533
- "```",
1534
- "",
1535
- `## ${sampleName}.html`,
1536
- "```html",
1537
- content,
1538
- "```",
1539
- "",
1540
- `Docs: ${sdkEntry.platforms.web.docs["user-guide"]}`
1541
- ].join("\n")
1542
- }]
1543
- };
1544
- }
1545
-
1546
- if (normalizedProduct === "dbr" && normalizedEdition === "mobile") {
1547
- const sdkEntry = registry.sdks["dbr-mobile"];
1548
- const targetPlatform = normalizedPlatform || "android";
1549
- const level = normalizeApiLevel(api_level || scenario);
1550
- const scenarioLower = (scenario || "").toLowerCase();
1551
-
1552
- let sampleName = "ScanSingleBarcode";
1553
- if (scenarioLower.includes("multiple") || scenarioLower.includes("batch")) sampleName = "ScanMultipleBarcodes";
1554
- else if (scenarioLower.includes("image") || scenarioLower.includes("file")) sampleName = "DecodeFromAnImage";
1555
-
1556
- if (level === "low-level") {
1557
- if (sampleName === "ScanSingleBarcode" || sampleName === "ScanMultipleBarcodes") {
1558
- sampleName = "DecodeWithCameraEnhancer";
1559
- }
1560
- }
1561
-
1562
- const samplePath = getMobileSamplePath(targetPlatform, level, sampleName);
1563
- if (!existsSync(samplePath)) {
1564
- return { isError: true, content: [{ type: "text", text: `Sample not found: ${sampleName}.` }] };
1565
- }
1566
-
1567
- const mainFile = getMainCodeFile(targetPlatform, samplePath);
1568
- if (!mainFile) {
1569
- return { isError: true, content: [{ type: "text", text: "Could not find main code file." }] };
1570
- }
1571
-
1572
- const content = readCodeFile(mainFile.path);
1573
- const langExt = mainFile.filename.split(".").pop();
1574
-
1575
- let deps = "";
1576
- if (targetPlatform === "android") {
1577
- deps = `
1578
- ## Dependencies
1579
-
1580
- **Project build.gradle**
1581
- \`\`\`groovy
1582
- allprojects {
1583
- repositories {
1584
- google()
1585
- mavenCentral()
1586
- maven { url "${registry.maven_url}" }
1587
- }
1588
- }
1589
- \`\`\`
1590
-
1591
- **App build.gradle**
1592
- \`\`\`groovy
1593
- dependencies {
1594
- implementation 'com.dynamsoft:barcodereaderbundle:${sdkEntry.version}'
1595
- }
1596
- \`\`\`
1597
-
1598
- **AndroidManifest.xml**
1599
- \`\`\`xml
1600
- <uses-permission android:name="android.permission.CAMERA" />
1601
- \`\`\``;
1602
- } else {
1603
- deps = `
1604
- ## Dependencies
1605
-
1606
- **Podfile**
1607
- \`\`\`ruby
1608
- platform :ios, '11.0'
1609
- use_frameworks!
1610
-
1611
- target 'YourApp' do
1612
- pod 'DynamsoftBarcodeReaderBundle'
1613
- end
1614
- \`\`\`
1615
-
1616
- **Info.plist**
1617
- \`\`\`xml
1618
- <key>NSCameraUsageDescription</key>
1619
- <string>Camera access for barcode scanning</string>
1620
- \`\`\``;
1621
- }
1622
-
1623
- const output = [
1624
- "# Quick Start: DBR Mobile",
1625
- "",
1626
- `**SDK Version:** ${sdkEntry.version}`,
1627
- `**API Level:** ${level}`,
1628
- `**Trial License:** \`${registry.trial_license}\``,
1629
- "",
1630
- deps,
1631
- "",
1632
- `## ${mainFile.filename}`,
1633
- "```" + langExt,
1634
- content,
1635
- "```",
1636
- "",
1637
- `Docs: ${sdkEntry.platforms[targetPlatform]?.docs[level]?.["user-guide"] || "N/A"}`
1638
- ];
1639
-
1640
- return { content: [{ type: "text", text: output.join("\n") }] };
1641
- }
1642
-
1643
- if (normalizedProduct === "dwt") {
1644
- const sdkEntry = registry.sdks["dwt"];
1645
- const samplePath = getDwtSamplePath("scan", "basic-scan");
1646
-
1647
- if (!samplePath || !existsSync(samplePath)) {
1648
- return { isError: true, content: [{ type: "text", text: "Sample not found: basic-scan." }] };
1649
- }
1650
-
1651
- const content = readCodeFile(samplePath);
1652
-
1653
- return {
1654
- content: [{
1655
- type: "text",
1656
- text: [
1657
- "# Quick Start: Dynamic Web TWAIN",
1658
- "",
1659
- `**SDK Version:** ${sdkEntry.version}`,
1660
- `**Trial License:** \`${registry.trial_license}\``,
1661
- "",
1662
- "## Option 1: CDN",
1663
- "```html",
1664
- `<script src="${sdkEntry.platforms.web.installation.cdn}"></script>`,
1665
- "```",
1666
- "",
1667
- "## Option 2: NPM",
1668
- "```bash",
1669
- sdkEntry.platforms.web.installation.npm,
1670
- "```",
1671
- "",
1672
- "## basic-scan.html",
1673
- "```html",
1674
- content,
1675
- "```",
1676
- "",
1677
- `Docs: ${sdkEntry.platforms.web.docs["user-guide"]}`
1678
- ].join("\n")
1679
- }]
1680
- };
1681
- }
1682
-
1683
- if (normalizedProduct === "ddv") {
1684
- const sdkEntry = registry.sdks["ddv"];
1685
- const hint = `${scenario || ""} ${language || ""}`.toLowerCase();
1686
- let sampleName = "hello-world";
1687
-
1688
- if (hint.includes("react")) sampleName = "react-vite";
1689
- else if (hint.includes("vue")) sampleName = "vue";
1690
- else if (hint.includes("angular")) sampleName = "angular";
1691
- else if (hint.includes("next")) sampleName = "next";
1692
-
1693
- const samplePath = getDdvSamplePath(sampleName);
1694
- if (!samplePath || !existsSync(samplePath)) {
1695
- return { isError: true, content: [{ type: "text", text: `Sample not found: ${sampleName}.` }] };
1696
- }
1697
-
1698
- let sampleContent = "";
1699
- let fence = "text";
1700
- const stat = statSync(samplePath);
1701
- if (stat.isDirectory()) {
1702
- const readmePath = join(samplePath, "README.md");
1703
- if (existsSync(readmePath)) {
1704
- sampleContent = readCodeFile(readmePath);
1705
- fence = "markdown";
1706
- } else {
1707
- const codeFiles = findCodeFilesInSample(samplePath);
1708
- if (codeFiles.length > 0) {
1709
- const preferredNames = [
1710
- "main.tsx",
1711
- "main.jsx",
1712
- "main.ts",
1713
- "main.js",
1714
- "App.tsx",
1715
- "App.jsx",
1716
- "App.vue"
1717
- ];
1718
- const preferred = codeFiles.find((file) => preferredNames.includes(file.filename)) || codeFiles[0];
1719
- sampleContent = readCodeFile(preferred.path);
1720
- fence = preferred.extension ? preferred.extension.replace(".", "") : "text";
1721
- } else {
1722
- sampleContent = "Sample found, but no code files detected.";
1723
- }
1724
- }
1725
- } else {
1726
- sampleContent = readCodeFile(samplePath);
1727
- fence = extname(samplePath).replace(".", "") || "text";
1728
- }
1729
-
1730
- return {
1731
- content: [{
1732
- type: "text",
1733
- text: [
1734
- "# Quick Start: Dynamsoft Document Viewer",
1735
- "",
1736
- `**SDK Version:** ${sdkEntry.version}`,
1737
- `**Trial License:** \`${registry.trial_license}\``,
1738
- "",
1739
- "## Option 1: CDN",
1740
- "```html",
1741
- `<script src="${sdkEntry.platforms.web.installation.cdn}"></script>`,
1742
- "```",
1743
- "",
1744
- "## Option 2: NPM",
1745
- "```bash",
1746
- sdkEntry.platforms.web.installation.npm,
1747
- "```",
1748
- "",
1749
- `## ${sampleName}`,
1750
- "```" + fence,
1751
- sampleContent,
1752
- "```",
1753
- "",
1754
- `Docs: ${sdkEntry.platforms.web.docs["user-guide"]}`
1755
- ].join("\n")
1756
- }]
1757
- };
1758
- }
1759
-
1760
- return {
1761
- isError: true,
1762
- content: [{ type: "text", text: "Unsupported product/edition for quickstart." }]
1763
- };
1764
- }
1765
- );
1766
-
1767
- // ============================================================================
1768
- // TOOL: generate_project
1769
- // ============================================================================
1770
-
1771
- server.registerTool(
1772
- "generate_project",
1773
- {
1774
- title: "Generate Project",
1775
- description: "Generate a project structure from a sample (no AI generation).",
1776
- inputSchema: {
1777
- product: z.string().describe("Product: dbr, dwt, or ddv"),
1778
- edition: z.string().optional().describe("Edition: mobile, web, python"),
1779
- platform: z.string().optional().describe("Platform: android, ios, web, python"),
1780
- version: z.string().optional().describe("Version constraint"),
1781
- sample_id: z.string().optional().describe("Sample identifier (name or path)"),
1782
- resource_uri: z.string().optional().describe("Resource URI returned by search"),
1783
- api_level: z.string().optional().describe("API level: high-level or low-level (mobile only)")
1784
- }
1785
- },
1786
- async ({ product, edition, platform, version, sample_id, resource_uri, api_level }) => {
1787
- const normalizedProduct = normalizeProduct(product);
1788
- const normalizedPlatform = normalizePlatform(platform);
1789
- const normalizedEdition = normalizeEdition(edition, normalizedPlatform, normalizedProduct);
1790
-
1791
- const policy = ensureLatestMajor({
1792
- product: normalizedProduct,
1793
- version,
1794
- query: sample_id,
1795
- edition: normalizedEdition,
1796
- platform: normalizedPlatform
1797
- });
1798
-
1799
- if (!policy.ok) {
1800
- return { isError: true, content: [{ type: "text", text: policy.message }] };
1801
- }
1802
-
1803
- let sampleInfo = null;
1804
- if (resource_uri) {
1805
- sampleInfo = parseSampleUri(resource_uri);
1806
- if (!sampleInfo) {
1807
- return { isError: true, content: [{ type: "text", text: "Invalid or non-sample resource_uri." }] };
1808
- }
1809
- }
1810
-
1811
- let samplePath = null;
1812
- let sampleLabel = "";
1813
-
1814
- if (sampleInfo) {
1815
- sampleLabel = sampleInfo.sampleName || resource_uri;
1816
- if (sampleInfo.product === "dbr" && sampleInfo.edition === "mobile") {
1817
- samplePath = getMobileSamplePath(sampleInfo.platform, sampleInfo.level, sampleInfo.sampleName);
1818
- } else if (sampleInfo.product === "dbr" && sampleInfo.edition === "web") {
1819
- samplePath = getWebSamplePath(sampleInfo.category, sampleInfo.sampleName);
1820
- } else if (sampleInfo.product === "dbr" && sampleInfo.edition === "python") {
1821
- samplePath = getPythonSamplePath(sampleInfo.sampleName);
1822
- } else if (sampleInfo.product === "dwt") {
1823
- samplePath = getDwtSamplePath(sampleInfo.category, sampleInfo.sampleName);
1824
- } else if (sampleInfo.product === "ddv") {
1825
- samplePath = getDdvSamplePath(sampleInfo.sampleName);
1826
- }
1827
- } else if (sample_id) {
1828
- if (!normalizedProduct || !normalizedEdition) {
1829
- return { isError: true, content: [{ type: "text", text: "Specify product/edition or provide resource_uri." }] };
1830
- }
1831
-
1832
- const level = normalizeApiLevel(api_level);
1833
- const sampleName = normalizeSampleName(sample_id);
1834
- sampleLabel = sampleName;
1835
-
1836
- if (normalizedProduct === "dbr" && normalizedEdition === "mobile") {
1837
- const targetPlatform = normalizedPlatform || "android";
1838
- const primaryPath = getMobileSamplePath(targetPlatform, level, sampleName);
1839
- const altLevel = level === "high-level" ? "low-level" : "high-level";
1840
- const alternatePath = getMobileSamplePath(targetPlatform, altLevel, sampleName);
1841
- samplePath = existsSync(primaryPath) ? primaryPath : (existsSync(alternatePath) ? alternatePath : null);
1842
- } else if (normalizedProduct === "dbr" && normalizedEdition === "web") {
1843
- samplePath = getWebSamplePath(undefined, sampleName);
1844
- } else if (normalizedProduct === "dbr" && normalizedEdition === "python") {
1845
- samplePath = getPythonSamplePath(sampleName);
1846
- } else if (normalizedProduct === "dwt") {
1847
- const categories = discoverDwtSamples();
1848
- let foundCategory = "";
1849
- for (const [category, samples] of Object.entries(categories)) {
1850
- if (samples.includes(sampleName)) {
1851
- foundCategory = category;
1852
- break;
1853
- }
1854
- }
1855
- samplePath = foundCategory ? getDwtSamplePath(foundCategory, sampleName) : null;
1856
- } else if (normalizedProduct === "ddv") {
1857
- samplePath = getDdvSamplePath(sampleName);
1858
- }
1859
- } else {
1860
- return { isError: true, content: [{ type: "text", text: "Provide sample_id or resource_uri." }] };
1861
- }
1862
-
1863
- if (!samplePath || !existsSync(samplePath)) {
1864
- return { isError: true, content: [{ type: "text", text: `Sample not found for "${sampleLabel}".` }] };
1865
- }
1866
-
1867
- const textExtensions = [
1868
- ".java", ".kt", ".swift", ".m", ".h", ".xml", ".gradle", ".properties",
1869
- ".pro", ".json", ".plist", ".storyboard", ".xib", ".gitignore", ".md",
1870
- ".js", ".jsx", ".ts", ".tsx", ".vue", ".cjs", ".html", ".css"
1871
- ];
1872
-
1873
- const files = [];
1874
- const stat = statSync(samplePath);
1875
- const rootDir = stat.isDirectory() ? samplePath : dirname(samplePath);
1876
-
1877
- function addFile(fullPath) {
1878
- const ext = "." + fullPath.split(".").pop();
1879
- const baseName = fullPath.split(/[\\/]/).pop();
1880
- if (!textExtensions.includes(ext) && !["gradlew", "Podfile"].includes(baseName)) {
1881
- return;
1882
- }
1883
- try {
1884
- const content = readFileSync(fullPath, "utf-8");
1885
- const normalized = content.replace(/\r\n/g, "\n");
1886
- files.push({
1887
- path: relative(rootDir, fullPath),
1888
- content: normalized,
1889
- ext: ext.replace(".", "")
1890
- });
1891
- } catch (e) {
1892
- // Ignore binary or unreadable files
1893
- }
1894
- }
1895
-
1896
- function walk(dir) {
1897
- const entries = readdirSync(dir);
1898
- for (const entry of entries) {
1899
- if (["build", ".gradle", ".idea", ".git", "node_modules", "Pods", "DerivedData", "__pycache__"].includes(entry)) {
1900
- continue;
1901
- }
1902
- const fullPath = join(dir, entry);
1903
- const entryStat = statSync(fullPath);
1904
- if (entryStat.isDirectory()) {
1905
- walk(fullPath);
1906
- } else {
1907
- addFile(fullPath);
1908
- }
1909
- }
1910
- }
1911
-
1912
- if (stat.isDirectory()) {
1913
- walk(samplePath);
1914
- } else {
1915
- addFile(samplePath);
1916
- }
1917
-
1918
- const validFiles = files.filter((f) => f.content.length < 50000);
1919
-
1920
- const output = [
1921
- `# Project Generation: ${sampleLabel}`,
1922
- "",
1923
- "This output contains the file structure for the project.",
1924
- ""
1925
- ];
1926
-
1927
- for (const file of validFiles) {
1928
- output.push(`## ${file.path}`);
1929
- output.push("```" + (file.ext || "text"));
1930
- output.push(file.content);
1931
- output.push("```");
1932
- output.push("");
1933
- }
1934
-
1935
- return { content: [{ type: "text", text: output.join("\n") }] };
1936
- }
1937
- );
1938
- // ============================================================================
1939
- // MCP Resources (tool-discovered, lazy-read)
1940
- // ============================================================================
1941
-
1942
- server.server.registerCapabilities({
1943
- resources: {
1944
- listChanged: false,
1945
- subscribe: true
1946
- }
1947
- });
1948
-
1949
- server.server.setRequestHandler(ListResourcesRequestSchema, async () => {
1950
- // Only surface a small, pinned set to avoid bloating the context window.
1951
- const resources = getPinnedResources().map((r) => ({
1952
- uri: r.uri,
1953
- name: r.title,
1954
- description: r.summary,
1955
- mimeType: r.mimeType
1956
- }));
1957
- return { resources };
1958
- });
1959
-
1960
- server.server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
1961
- const parsed = parseResourceUri(request.params.uri);
1962
- if (parsed && ["dbr", "dwt", "ddv"].includes(parsed.product)) {
1963
- const policy = ensureLatestMajor({
1964
- product: parsed.product,
1965
- version: parsed.version,
1966
- edition: parsed.edition,
1967
- platform: parsed.platform
1968
- });
1969
- if (!policy.ok) {
1970
- throw new Error(policy.message);
1971
- }
1972
- }
1973
- const resource = await readResourceContent(request.params.uri);
1974
- if (!resource) {
1975
- throw new Error(`Resource not found: ${request.params.uri}`);
1976
- }
1977
- return { contents: [resource] };
1978
- });
1979
-
1980
- server.server.setRequestHandler(SubscribeRequestSchema, async () => ({}));
1981
- server.server.setRequestHandler(UnsubscribeRequestSchema, async () => ({}));
1982
-
1983
- // ============================================================================
1984
- // Start Server
1985
- // ============================================================================
1986
-
1987
- const transport = new StdioServerTransport();
1988
- await server.connect(transport);
1
+ #!/usr/bin/env node
2
+ import { readFileSync, readdirSync, existsSync, statSync } from "node:fs";
3
+ import { join, relative, dirname, extname } from "node:path";
4
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
6
+ import {
7
+ ListResourcesRequestSchema,
8
+ ReadResourceRequestSchema,
9
+ SubscribeRequestSchema,
10
+ UnsubscribeRequestSchema
11
+ } from "@modelcontextprotocol/sdk/types.js";
12
+ import { z } from "zod";
13
+ import { ensureDataReady } from "./data-bootstrap.js";
14
+ import { maybeSyncSubmodulesOnStart } from "./submodule-sync.js";
15
+
16
+ const pkgUrl = new URL("../package.json", import.meta.url);
17
+ const pkg = JSON.parse(readFileSync(pkgUrl, "utf8"));
18
+
19
+ await maybeSyncSubmodulesOnStart();
20
+ const dataStatus = await ensureDataReady();
21
+ if (dataStatus.mode === "downloaded") {
22
+ console.error(
23
+ `[data] mode=downloaded path=${dataStatus.dataRoot} source=${dataStatus.downloaded ? "fresh-download" : "cache"}`
24
+ );
25
+ } else {
26
+ console.error(`[data] mode=${dataStatus.mode} path=${dataStatus.dataRoot}`);
27
+ }
28
+
29
+ const {
30
+ registry,
31
+ LATEST_VERSIONS,
32
+ LATEST_MAJOR,
33
+ discoverDwtSamples,
34
+ findCodeFilesInSample,
35
+ getMobileSamplePath,
36
+ getDbrServerSamplePath,
37
+ getDwtSamplePath,
38
+ getDdvSamplePath,
39
+ readCodeFile,
40
+ getMainCodeFile,
41
+ ensureLatestMajor,
42
+ parseResourceUri,
43
+ parseSampleUri,
44
+ getSampleIdFromUri,
45
+ getSampleEntries,
46
+ buildIndexData,
47
+ getDisplayEdition,
48
+ getDisplayPlatform,
49
+ formatScopeLabel,
50
+ getPinnedResources,
51
+ readResourceContent,
52
+ normalizePlatform,
53
+ normalizeApiLevel,
54
+ normalizeSampleName,
55
+ normalizeProduct,
56
+ normalizeEdition,
57
+ resourceIndex,
58
+ getWebSamplePath
59
+ } = await import("./resource-index.js");
60
+
61
+ const {
62
+ searchResources,
63
+ getSampleSuggestions,
64
+ prewarmRagIndex,
65
+ ragConfig
66
+ } = await import("./rag.js");
67
+
68
+ // ============================================================================
69
+ // MCP Server
70
+ // ============================================================================
71
+
72
+ const server = new McpServer({
73
+ name: "simple-dynamsoft-mcp",
74
+ version: pkg.version,
75
+ description: "MCP server for latest major versions of Dynamsoft SDKs: Barcode Reader (Mobile/Server/Web), Dynamic Web TWAIN, and Document Viewer"
76
+ });
77
+
78
+ function formatScoreLabel(entry) {
79
+ if (!Number.isFinite(entry?.score)) return "";
80
+ return ` | score: ${entry.score.toFixed(3)}`;
81
+ }
82
+
83
+ function formatScoreNote(entry) {
84
+ if (!Number.isFinite(entry?.score)) return "";
85
+ return ` score=${entry.score.toFixed(3)}`;
86
+ }
87
+
88
+ // ============================================================================
89
+ // TOOL: get_index
90
+ // ============================================================================
91
+
92
+ server.registerTool(
93
+ "get_index",
94
+ {
95
+ title: "Get Index",
96
+ description: "Get a compact index of products, editions, versions, and available samples/docs.",
97
+ inputSchema: {}
98
+ },
99
+ async () => ({
100
+ content: [{ type: "text", text: JSON.stringify(buildIndexData(), null, 2) }]
101
+ })
102
+ );
103
+
104
+ // ============================================================================
105
+ // TOOL: search
106
+ // ============================================================================
107
+
108
+ server.registerTool(
109
+ "search",
110
+ {
111
+ title: "Search",
112
+ description: "Semantic (RAG) search across docs and samples with fuzzy fallback; returns resource links for lazy loading.",
113
+ inputSchema: {
114
+ query: z.string().describe("Keywords to search across docs and samples."),
115
+ product: z.string().optional().describe("Product: dbr, dwt, ddv"),
116
+ edition: z.string().optional().describe("Edition: mobile, web, server/desktop"),
117
+ platform: z.string().optional().describe("Platform: android, ios, maui, react-native, flutter, js, python, cpp, java, dotnet, nodejs, angular, blazor, capacitor, electron, es6, native-ts, next, nuxt, pwa, react, requirejs, svelte, vue, webview"),
118
+ version: z.string().optional().describe("Version constraint (major or full version)"),
119
+ type: z.enum(["doc", "sample", "index", "policy", "any"]).optional(),
120
+ limit: z.number().int().min(1).max(10).optional().describe("Max results (default 5)")
121
+ }
122
+ },
123
+ async ({ query, product, edition, platform, version, type, limit }) => {
124
+ if (!query || !query.trim()) {
125
+ return { isError: true, content: [{ type: "text", text: "Query is required." }] };
126
+ }
127
+ const normalizedProduct = normalizeProduct(product);
128
+ const normalizedPlatform = normalizePlatform(platform);
129
+ const normalizedEdition = normalizeEdition(edition, normalizedPlatform, normalizedProduct);
130
+
131
+ const policy = ensureLatestMajor({
132
+ product: normalizedProduct,
133
+ version,
134
+ query,
135
+ edition: normalizedEdition,
136
+ platform: normalizedPlatform
137
+ });
138
+
139
+ if (!policy.ok) {
140
+ return { isError: true, content: [{ type: "text", text: policy.message }] };
141
+ }
142
+
143
+ const maxResults = Math.min(limit || 5, 10);
144
+ const topResults = await searchResources({
145
+ query,
146
+ product: normalizedProduct,
147
+ edition: normalizedEdition,
148
+ platform: normalizedPlatform,
149
+ type: type || "any",
150
+ limit: maxResults
151
+ });
152
+
153
+ if (topResults.length === 0) {
154
+ return {
155
+ content: [{
156
+ type: "text",
157
+ text: `No results for "${query}". Try get_index for available products or adjust filters.`
158
+ }]
159
+ };
160
+ }
161
+
162
+ const content = [
163
+ {
164
+ type: "text",
165
+ text: `Found ${topResults.length} result(s) for "${query}". Read the links you need with resources/read.`
166
+ }
167
+ ];
168
+
169
+ for (const entry of topResults) {
170
+ const versionLabel = entry.version ? `v${entry.version}` : "n/a";
171
+ const scopeLabel = formatScopeLabel(entry);
172
+ const sampleId = entry.type === "sample" ? getSampleIdFromUri(entry.uri) : "";
173
+ const sampleHint = sampleId ? ` | sample_id: ${sampleId}` : "";
174
+ const scoreLabel = formatScoreLabel(entry);
175
+ content.push({
176
+ type: "resource_link",
177
+ uri: entry.uri,
178
+ name: entry.title,
179
+ description: `${entry.type.toUpperCase()} | ${scopeLabel} | ${versionLabel}${scoreLabel} - ${entry.summary}${sampleHint}`,
180
+ mimeType: entry.mimeType,
181
+ annotations: {
182
+ audience: ["assistant"],
183
+ priority: 0.8
184
+ }
185
+ });
186
+ }
187
+
188
+ const plainLines = topResults.map((entry, index) => {
189
+ const sampleId = entry.type === "sample" ? getSampleIdFromUri(entry.uri) : "";
190
+ const action = entry.type === "sample" ? "generate_project resource_uri" : "resources/read uri";
191
+ const sampleNote = sampleId ? ` sample_id=${sampleId}` : "";
192
+ const scoreNote = formatScoreNote(entry);
193
+ return `- ${index + 1}. ${entry.uri}${sampleNote}${scoreNote} (${action})`;
194
+ });
195
+ content.push({
196
+ type: "text",
197
+ text: ["Plain URIs (copy/paste):", ...plainLines].join("\n")
198
+ });
199
+
200
+ return { content };
201
+ }
202
+ );
203
+
204
+ // ============================================================================
205
+ // TOOL: list_samples
206
+ // ============================================================================
207
+
208
+ server.registerTool(
209
+ "list_samples",
210
+ {
211
+ title: "List Samples",
212
+ description: "List available sample IDs and URIs for a given scope.",
213
+ inputSchema: {
214
+ product: z.string().optional().describe("Product: dbr, dwt, ddv"),
215
+ edition: z.string().optional().describe("Edition: mobile, web, server/desktop"),
216
+ platform: z.string().optional().describe("Platform: android, ios, maui, react-native, flutter, js, python, cpp, java, dotnet, nodejs, angular, blazor, capacitor, electron, es6, native-ts, next, nuxt, pwa, react, requirejs, svelte, vue, webview"),
217
+ limit: z.number().int().min(1).max(200).optional().describe("Max results (default 50)")
218
+ }
219
+ },
220
+ async ({ product, edition, platform, limit }) => {
221
+ const normalizedProduct = normalizeProduct(product);
222
+ const normalizedPlatform = normalizePlatform(platform);
223
+ const normalizedEdition = normalizeEdition(edition, normalizedPlatform, normalizedProduct);
224
+
225
+ const policy = ensureLatestMajor({
226
+ product: normalizedProduct,
227
+ version: undefined,
228
+ query: "",
229
+ edition: normalizedEdition,
230
+ platform: normalizedPlatform
231
+ });
232
+
233
+ if (!policy.ok) {
234
+ return { isError: true, content: [{ type: "text", text: policy.message }] };
235
+ }
236
+
237
+ const samples = getSampleEntries({
238
+ product: normalizedProduct,
239
+ edition: normalizedEdition,
240
+ platform: normalizedPlatform
241
+ });
242
+
243
+ const maxResults = Math.min(limit || 50, 200);
244
+ const selected = samples.slice(0, maxResults);
245
+
246
+ const payload = selected.map((entry) => ({
247
+ sample_id: getSampleIdFromUri(entry.uri),
248
+ uri: entry.uri,
249
+ product: entry.product,
250
+ edition: getDisplayEdition(entry.edition),
251
+ platform: getDisplayPlatform(entry.platform),
252
+ version: entry.version,
253
+ title: entry.title,
254
+ summary: entry.summary
255
+ }));
256
+
257
+ const lines = [
258
+ `Total matches: ${samples.length}`,
259
+ `Returned: ${payload.length}`,
260
+ "",
261
+ "Plain URIs (copy/paste):",
262
+ ...payload.map((item, index) => {
263
+ const sampleNote = item.sample_id ? ` (sample_id: ${item.sample_id})` : "";
264
+ return `- ${index + 1}. ${item.uri}${sampleNote}`;
265
+ })
266
+ ];
267
+
268
+ const output = {
269
+ total: samples.length,
270
+ returned: payload.length,
271
+ samples: payload
272
+ };
273
+
274
+ return {
275
+ content: [{
276
+ type: "text",
277
+ text: `${lines.join("\n")}\n\nJSON:\n${JSON.stringify(output, null, 2)}`
278
+ }]
279
+ };
280
+ }
281
+ );
282
+
283
+ // ============================================================================
284
+ // TOOL: resolve_sample
285
+ // ============================================================================
286
+
287
+ server.registerTool(
288
+ "resolve_sample",
289
+ {
290
+ title: "Resolve Sample",
291
+ description: "Resolve a sample_id (or sample URI) to matching sample URIs.",
292
+ inputSchema: {
293
+ sample_id: z.string().describe("Sample identifier or sample:// URI"),
294
+ product: z.string().optional().describe("Product: dbr, dwt, ddv"),
295
+ edition: z.string().optional().describe("Edition: mobile, web, server/desktop"),
296
+ platform: z.string().optional().describe("Platform: android, ios, maui, react-native, flutter, js, python, cpp, java, dotnet, nodejs, angular, blazor, capacitor, electron, es6, native-ts, next, nuxt, pwa, react, requirejs, svelte, vue, webview"),
297
+ limit: z.number().int().min(1).max(10).optional().describe("Max results (default 5)")
298
+ }
299
+ },
300
+ async ({ sample_id, product, edition, platform, limit }) => {
301
+ if (!sample_id || !sample_id.trim()) {
302
+ return { isError: true, content: [{ type: "text", text: "sample_id is required." }] };
303
+ }
304
+
305
+ const normalizedProduct = normalizeProduct(product);
306
+ const normalizedPlatform = normalizePlatform(platform);
307
+ const normalizedEdition = normalizeEdition(edition, normalizedPlatform, normalizedProduct);
308
+
309
+ const policy = ensureLatestMajor({
310
+ product: normalizedProduct,
311
+ version: undefined,
312
+ query: sample_id,
313
+ edition: normalizedEdition,
314
+ platform: normalizedPlatform
315
+ });
316
+
317
+ if (!policy.ok) {
318
+ return { isError: true, content: [{ type: "text", text: policy.message }] };
319
+ }
320
+
321
+ if (sample_id.includes("://")) {
322
+ const parsed = parseSampleUri(sample_id);
323
+ if (!parsed) {
324
+ return {
325
+ isError: true,
326
+ content: [{
327
+ type: "text",
328
+ text: "sample_id looks like a URI but is not a valid sample:// URI. For doc:// URIs, use resources/read."
329
+ }]
330
+ };
331
+ }
332
+ const entry = resourceIndex.find((item) => item.uri === sample_id && item.type === "sample");
333
+ if (!entry) {
334
+ return {
335
+ isError: true,
336
+ content: [{
337
+ type: "text",
338
+ text: `Sample URI not found in index: ${sample_id}. Use list_samples or search.`
339
+ }]
340
+ };
341
+ }
342
+
343
+ const payload = [{
344
+ sample_id: getSampleIdFromUri(entry.uri),
345
+ uri: entry.uri,
346
+ product: entry.product,
347
+ edition: getDisplayEdition(entry.edition),
348
+ platform: getDisplayPlatform(entry.platform),
349
+ version: entry.version,
350
+ title: entry.title,
351
+ summary: entry.summary
352
+ }];
353
+
354
+ const output = {
355
+ query: sample_id,
356
+ returned: payload.length,
357
+ samples: payload
358
+ };
359
+
360
+ return {
361
+ content: [{
362
+ type: "text",
363
+ text: [
364
+ `Found ${payload.length} match(es) for "${sample_id}".`,
365
+ "Plain URIs (copy/paste):",
366
+ `- 1. ${entry.uri} (sample_id: ${payload[0].sample_id})`,
367
+ "",
368
+ "JSON:",
369
+ JSON.stringify(output, null, 2)
370
+ ].join("\n")
371
+ }, {
372
+ type: "resource_link",
373
+ uri: entry.uri,
374
+ name: entry.title,
375
+ description: `SAMPLE | ${formatScopeLabel(entry)} | v${entry.version}${formatScoreLabel(entry)} | sample_id: ${payload[0].sample_id}`,
376
+ mimeType: entry.mimeType,
377
+ annotations: {
378
+ audience: ["assistant"],
379
+ priority: 0.8
380
+ }
381
+ }]
382
+ };
383
+ }
384
+
385
+ const sampleQuery = normalizeSampleName(sample_id);
386
+ const maxResults = Math.min(limit || 5, 10);
387
+
388
+ const scopedSamples = getSampleEntries({
389
+ product: normalizedProduct,
390
+ edition: normalizedEdition,
391
+ platform: normalizedPlatform
392
+ });
393
+
394
+ let matches = scopedSamples.filter((entry) => {
395
+ const entryId = getSampleIdFromUri(entry.uri);
396
+ return entryId && entryId.toLowerCase() === sampleQuery.toLowerCase();
397
+ });
398
+
399
+ if (matches.length === 0) {
400
+ matches = await searchResources({
401
+ query: sample_id,
402
+ product: normalizedProduct,
403
+ edition: normalizedEdition,
404
+ platform: normalizedPlatform,
405
+ type: "sample",
406
+ limit: maxResults
407
+ });
408
+ }
409
+
410
+ const selected = matches.slice(0, maxResults);
411
+ if (selected.length === 0) {
412
+ const suggestions = await getSampleSuggestions({
413
+ query: sample_id,
414
+ product: normalizedProduct,
415
+ edition: normalizedEdition,
416
+ platform: normalizedPlatform,
417
+ limit: maxResults
418
+ });
419
+
420
+ const content = [{
421
+ type: "text",
422
+ text: suggestions.length
423
+ ? `No exact sample match for "${sample_id}". Related samples:`
424
+ : `No samples found for "${sample_id}". Try list_samples or search.`
425
+ }];
426
+
427
+ for (const entry of suggestions) {
428
+ const sampleId = getSampleIdFromUri(entry.uri);
429
+ content.push({
430
+ type: "resource_link",
431
+ uri: entry.uri,
432
+ name: entry.title,
433
+ description: `${entry.type.toUpperCase()} | ${formatScopeLabel(entry)} | v${entry.version}${formatScoreLabel(entry)} | sample_id: ${sampleId || "n/a"}`,
434
+ mimeType: entry.mimeType,
435
+ annotations: {
436
+ audience: ["assistant"],
437
+ priority: 0.6
438
+ }
439
+ });
440
+ }
441
+
442
+ if (suggestions.length) {
443
+ const plainLines = suggestions.map((entry, index) => {
444
+ const sampleId = getSampleIdFromUri(entry.uri);
445
+ const sampleNote = sampleId ? ` (sample_id: ${sampleId})` : "";
446
+ const scoreNote = formatScoreNote(entry);
447
+ return `- ${index + 1}. ${entry.uri}${sampleNote}${scoreNote}`;
448
+ });
449
+ content.push({
450
+ type: "text",
451
+ text: ["Plain URIs (copy/paste):", ...plainLines].join("\n")
452
+ });
453
+ }
454
+
455
+ return { isError: true, content };
456
+ }
457
+
458
+ const payload = selected.map((entry) => ({
459
+ sample_id: getSampleIdFromUri(entry.uri),
460
+ uri: entry.uri,
461
+ product: entry.product,
462
+ edition: getDisplayEdition(entry.edition),
463
+ platform: getDisplayPlatform(entry.platform),
464
+ version: entry.version,
465
+ title: entry.title,
466
+ summary: entry.summary
467
+ }));
468
+
469
+ const lines = [
470
+ `Found ${selected.length} match(es) for "${sample_id}".`,
471
+ "Plain URIs (copy/paste):",
472
+ ...selected.map((entry, index) => {
473
+ const sampleId = getSampleIdFromUri(entry.uri);
474
+ const sampleNote = sampleId ? ` (sample_id: ${sampleId})` : "";
475
+ const scoreNote = formatScoreNote(entry);
476
+ return `- ${index + 1}. ${entry.uri}${sampleNote}${scoreNote}`;
477
+ })
478
+ ];
479
+
480
+ const output = {
481
+ query: sample_id,
482
+ returned: payload.length,
483
+ samples: payload
484
+ };
485
+
486
+ const content = [{
487
+ type: "text",
488
+ text: `${lines.join("\n")}\n\nJSON:\n${JSON.stringify(output, null, 2)}`
489
+ }];
490
+
491
+ for (const entry of selected) {
492
+ const sampleId = getSampleIdFromUri(entry.uri);
493
+ content.push({
494
+ type: "resource_link",
495
+ uri: entry.uri,
496
+ name: entry.title,
497
+ description: `${entry.type.toUpperCase()} | ${formatScopeLabel(entry)} | v${entry.version}${formatScoreLabel(entry)} | sample_id: ${sampleId || "n/a"}`,
498
+ mimeType: entry.mimeType,
499
+ annotations: {
500
+ audience: ["assistant"],
501
+ priority: 0.8
502
+ }
503
+ });
504
+ }
505
+
506
+ return { content };
507
+ }
508
+ );
509
+
510
+ // ============================================================================
511
+ // TOOL: resolve_version
512
+ // ============================================================================
513
+
514
+ server.registerTool(
515
+ "resolve_version",
516
+ {
517
+ title: "Resolve Version",
518
+ description: "Resolve a concrete latest-major version for a product/edition/platform.",
519
+ inputSchema: {
520
+ product: z.string().describe("Product: dbr, dwt, or ddv"),
521
+ edition: z.string().optional().describe("Edition: mobile, web, server/desktop"),
522
+ platform: z.string().optional().describe("Platform: android, ios, maui, react-native, flutter, js, python, cpp, java, dotnet, nodejs, angular, blazor, capacitor, electron, es6, native-ts, next, nuxt, pwa, react, requirejs, svelte, vue, webview"),
523
+ constraint: z.string().optional().describe("Version constraint, e.g., latest, 11.x, 10"),
524
+ feature: z.string().optional().describe("Optional feature hint")
525
+ }
526
+ },
527
+ async ({ product, edition, platform, constraint, feature }) => {
528
+ const normalizedProduct = normalizeProduct(product);
529
+ const normalizedPlatform = normalizePlatform(platform);
530
+ const normalizedEdition = normalizeEdition(edition, normalizedPlatform, normalizedProduct);
531
+
532
+ if (!["dbr", "dwt", "ddv"].includes(normalizedProduct)) {
533
+ return {
534
+ isError: true,
535
+ content: [{ type: "text", text: `Unknown product "${product}". Use dbr, dwt, or ddv.` }]
536
+ };
537
+ }
538
+
539
+ const policy = ensureLatestMajor({
540
+ product: normalizedProduct,
541
+ version: constraint,
542
+ query: feature,
543
+ edition: normalizedEdition,
544
+ platform: normalizedPlatform
545
+ });
546
+
547
+ if (!policy.ok) {
548
+ return { isError: true, content: [{ type: "text", text: policy.message }] };
549
+ }
550
+
551
+ if (normalizedProduct === "dbr") {
552
+ if (!normalizedEdition) {
553
+ const lines = [
554
+ "# DBR Version Resolution",
555
+ `- Latest major: v${LATEST_MAJOR.dbr}`,
556
+ `- Mobile: ${LATEST_VERSIONS.dbr.mobile}`,
557
+ `- Web: ${LATEST_VERSIONS.dbr.web}`,
558
+ `- Server/Desktop: ${LATEST_VERSIONS.dbr.server}`,
559
+ "",
560
+ "Specify edition/platform to resolve a single version."
561
+ ];
562
+ return { content: [{ type: "text", text: lines.join("\n") }] };
563
+ }
564
+
565
+ const resolved = LATEST_VERSIONS.dbr[normalizedEdition];
566
+ if (!resolved) {
567
+ return {
568
+ isError: true,
569
+ content: [{ type: "text", text: `Edition "${normalizedEdition}" is not hosted by this MCP server.` }]
570
+ };
571
+ }
572
+
573
+ const displayPlatform = normalizedPlatform === "web" ? "js" : normalizedPlatform;
574
+ const lines = [
575
+ "# DBR Version Resolution",
576
+ `- Edition: ${normalizedEdition}`,
577
+ displayPlatform ? `- Platform: ${displayPlatform}` : "",
578
+ `- Latest major: v${LATEST_MAJOR.dbr}`,
579
+ `- Resolved version: ${resolved}`
580
+ ].filter(Boolean);
581
+
582
+ return { content: [{ type: "text", text: lines.join("\n") }] };
583
+ }
584
+
585
+ if (normalizedProduct === "dwt") {
586
+ const lines = [
587
+ "# DWT Version Resolution",
588
+ `- Latest major: v${LATEST_MAJOR.dwt}`,
589
+ `- Resolved version: ${LATEST_VERSIONS.dwt.web}`
590
+ ];
591
+ return { content: [{ type: "text", text: lines.join("\n") }] };
592
+ }
593
+
594
+ const lines = [
595
+ "# DDV Version Resolution",
596
+ `- Latest major: v${LATEST_MAJOR.ddv}`,
597
+ `- Resolved version: ${LATEST_VERSIONS.ddv.web}`
598
+ ];
599
+
600
+ return { content: [{ type: "text", text: lines.join("\n") }] };
601
+ }
602
+ );
603
+
604
+ // ============================================================================
605
+ // TOOL: get_quickstart
606
+ // ============================================================================
607
+
608
+ server.registerTool(
609
+ "get_quickstart",
610
+ {
611
+ title: "Get Quickstart",
612
+ description: "Opinionated quickstart for a target product/edition/platform.",
613
+ inputSchema: {
614
+ product: z.string().describe("Product: dbr, dwt, or ddv"),
615
+ edition: z.string().optional().describe("Edition: mobile, web, server/desktop"),
616
+ platform: z.string().optional().describe("Platform: android, ios, maui, react-native, flutter, js, python, cpp, java, dotnet, nodejs, angular, blazor, capacitor, electron, es6, native-ts, next, nuxt, pwa, react, requirejs, svelte, vue, webview"),
617
+ language: z.string().optional().describe("Language hint: kotlin, java, swift, js, ts, python, cpp, csharp, react, vue, angular"),
618
+ version: z.string().optional().describe("Version constraint"),
619
+ api_level: z.string().optional().describe("API level: high-level or low-level (mobile only)"),
620
+ scenario: z.string().optional().describe("Scenario: camera, image, single, multiple, react, etc.")
621
+ }
622
+ },
623
+ async ({ product, edition, platform, language, version, api_level, scenario }) => {
624
+ const normalizedProduct = normalizeProduct(product);
625
+ const normalizedPlatform = normalizePlatform(platform);
626
+ const normalizedEdition = normalizeEdition(edition, normalizedPlatform, normalizedProduct);
627
+ const policy = ensureLatestMajor({
628
+ product: normalizedProduct,
629
+ version,
630
+ query: scenario,
631
+ edition: normalizedEdition,
632
+ platform: normalizedPlatform
633
+ });
634
+
635
+ if (!policy.ok) {
636
+ return { isError: true, content: [{ type: "text", text: policy.message }] };
637
+ }
638
+
639
+ if (normalizedProduct === "dbr" && normalizedEdition === "server") {
640
+ const sdkEntry = registry.sdks["dbr-server"];
641
+ const scenarioLower = (scenario || "").toLowerCase();
642
+ const sampleName = scenarioLower.includes("video") ? "video_decoding" : "read_an_image";
643
+ const samplePath = getDbrServerSamplePath("python", sampleName);
644
+
645
+ if (!existsSync(samplePath)) {
646
+ return { isError: true, content: [{ type: "text", text: `Sample not found: ${sampleName}.` }] };
647
+ }
648
+
649
+ const content = readCodeFile(samplePath);
650
+
651
+ return {
652
+ content: [{
653
+ type: "text",
654
+ text: [
655
+ "# Quick Start: DBR Server (Python)",
656
+ "",
657
+ `**SDK Version:** ${sdkEntry.version}`,
658
+ `**Trial License:** \`${registry.trial_license}\``,
659
+ "",
660
+ "## Install",
661
+ "```bash",
662
+ sdkEntry.platforms.python.installation.pip,
663
+ "```",
664
+ "",
665
+ `## ${sampleName}.py`,
666
+ "```python",
667
+ content,
668
+ "```",
669
+ "",
670
+ `Docs: ${sdkEntry.platforms.python.docs["user-guide"]}`
671
+ ].join("\n")
672
+ }]
673
+ };
674
+ }
675
+
676
+ if (normalizedProduct === "dbr" && normalizedEdition === "web") {
677
+ const sdkEntry = registry.sdks["dbr-web"];
678
+ const scenarioLower = (scenario || "").toLowerCase();
679
+ const sampleName = scenarioLower.includes("image") ? "read-an-image" : "hello-world";
680
+ const samplePath = getWebSamplePath("root", sampleName);
681
+
682
+ if (!samplePath || !existsSync(samplePath)) {
683
+ return { isError: true, content: [{ type: "text", text: `Sample not found: ${sampleName}.` }] };
684
+ }
685
+
686
+ const content = readCodeFile(samplePath);
687
+
688
+ return {
689
+ content: [{
690
+ type: "text",
691
+ text: [
692
+ "# Quick Start: DBR Web",
693
+ "",
694
+ `**SDK Version:** ${sdkEntry.version}`,
695
+ `**Trial License:** \`${registry.trial_license}\``,
696
+ "",
697
+ "## Option 1: CDN",
698
+ "```html",
699
+ `<script src="${sdkEntry.platforms.web.installation.cdn}"></script>`,
700
+ "```",
701
+ "",
702
+ "## Option 2: NPM",
703
+ "```bash",
704
+ sdkEntry.platforms.web.installation.npm,
705
+ "```",
706
+ "",
707
+ `## ${sampleName}.html`,
708
+ "```html",
709
+ content,
710
+ "```",
711
+ "",
712
+ `Docs: ${sdkEntry.platforms.web.docs["user-guide"]}`
713
+ ].join("\n")
714
+ }]
715
+ };
716
+ }
717
+
718
+ if (normalizedProduct === "dbr" && normalizedEdition === "mobile") {
719
+ const sdkEntry = registry.sdks["dbr-mobile"];
720
+ const targetPlatform = normalizedPlatform || "android";
721
+ const level = normalizeApiLevel(api_level || scenario);
722
+ const scenarioLower = (scenario || "").toLowerCase();
723
+
724
+ let sampleName = "ScanSingleBarcode";
725
+ if (scenarioLower.includes("multiple") || scenarioLower.includes("batch")) sampleName = "ScanMultipleBarcodes";
726
+ else if (scenarioLower.includes("image") || scenarioLower.includes("file")) sampleName = "DecodeFromAnImage";
727
+
728
+ if (level === "low-level") {
729
+ if (sampleName === "ScanSingleBarcode" || sampleName === "ScanMultipleBarcodes") {
730
+ sampleName = "DecodeWithCameraEnhancer";
731
+ }
732
+ }
733
+
734
+ const samplePath = getMobileSamplePath(targetPlatform, level, sampleName);
735
+ if (!existsSync(samplePath)) {
736
+ return { isError: true, content: [{ type: "text", text: `Sample not found: ${sampleName}.` }] };
737
+ }
738
+
739
+ const mainFile = getMainCodeFile(targetPlatform, samplePath);
740
+ if (!mainFile) {
741
+ return { isError: true, content: [{ type: "text", text: "Could not find main code file." }] };
742
+ }
743
+
744
+ const content = readCodeFile(mainFile.path);
745
+ const langExt = mainFile.filename.split(".").pop();
746
+
747
+ let deps = "";
748
+ if (targetPlatform === "android") {
749
+ deps = `
750
+ ## Dependencies
751
+
752
+ **Project build.gradle**
753
+ \`\`\`groovy
754
+ allprojects {
755
+ repositories {
756
+ google()
757
+ mavenCentral()
758
+ maven { url "${registry.maven_url}" }
759
+ }
760
+ }
761
+ \`\`\`
762
+
763
+ **App build.gradle**
764
+ \`\`\`groovy
765
+ dependencies {
766
+ implementation 'com.dynamsoft:barcodereaderbundle:${sdkEntry.version}'
767
+ }
768
+ \`\`\`
769
+
770
+ **AndroidManifest.xml**
771
+ \`\`\`xml
772
+ <uses-permission android:name="android.permission.CAMERA" />
773
+ \`\`\``;
774
+ } else {
775
+ deps = `
776
+ ## Dependencies
777
+
778
+ **Podfile**
779
+ \`\`\`ruby
780
+ platform :ios, '11.0'
781
+ use_frameworks!
782
+
783
+ target 'YourApp' do
784
+ pod 'DynamsoftBarcodeReaderBundle'
785
+ end
786
+ \`\`\`
787
+
788
+ **Info.plist**
789
+ \`\`\`xml
790
+ <key>NSCameraUsageDescription</key>
791
+ <string>Camera access for barcode scanning</string>
792
+ \`\`\``;
793
+ }
794
+
795
+ const output = [
796
+ "# Quick Start: DBR Mobile",
797
+ "",
798
+ `**SDK Version:** ${sdkEntry.version}`,
799
+ `**API Level:** ${level}`,
800
+ `**Trial License:** \`${registry.trial_license}\``,
801
+ "",
802
+ deps,
803
+ "",
804
+ `## ${mainFile.filename}`,
805
+ "```" + langExt,
806
+ content,
807
+ "```",
808
+ "",
809
+ `Docs: ${sdkEntry.platforms[targetPlatform]?.docs[level]?.["user-guide"] || "N/A"}`
810
+ ];
811
+
812
+ return { content: [{ type: "text", text: output.join("\n") }] };
813
+ }
814
+
815
+ if (normalizedProduct === "dwt") {
816
+ const sdkEntry = registry.sdks["dwt"];
817
+ const samplePath = getDwtSamplePath("scan", "basic-scan");
818
+
819
+ if (!samplePath || !existsSync(samplePath)) {
820
+ return { isError: true, content: [{ type: "text", text: "Sample not found: basic-scan." }] };
821
+ }
822
+
823
+ const content = readCodeFile(samplePath);
824
+
825
+ return {
826
+ content: [{
827
+ type: "text",
828
+ text: [
829
+ "# Quick Start: Dynamic Web TWAIN",
830
+ "",
831
+ `**SDK Version:** ${sdkEntry.version}`,
832
+ `**Trial License:** \`${registry.trial_license}\``,
833
+ "",
834
+ "## Option 1: CDN",
835
+ "```html",
836
+ `<script src="${sdkEntry.platforms.web.installation.cdn}"></script>`,
837
+ "```",
838
+ "",
839
+ "## Option 2: NPM",
840
+ "```bash",
841
+ sdkEntry.platforms.web.installation.npm,
842
+ "```",
843
+ "",
844
+ "## basic-scan.html",
845
+ "```html",
846
+ content,
847
+ "```",
848
+ "",
849
+ `Docs: ${sdkEntry.platforms.web.docs["user-guide"]}`
850
+ ].join("\n")
851
+ }]
852
+ };
853
+ }
854
+
855
+ if (normalizedProduct === "ddv") {
856
+ const sdkEntry = registry.sdks["ddv"];
857
+ const hint = `${scenario || ""} ${language || ""}`.toLowerCase();
858
+ let sampleName = "hello-world";
859
+
860
+ if (hint.includes("react")) sampleName = "react-vite";
861
+ else if (hint.includes("vue")) sampleName = "vue";
862
+ else if (hint.includes("angular")) sampleName = "angular";
863
+ else if (hint.includes("next")) sampleName = "next";
864
+
865
+ const samplePath = getDdvSamplePath(sampleName);
866
+ if (!samplePath || !existsSync(samplePath)) {
867
+ return { isError: true, content: [{ type: "text", text: `Sample not found: ${sampleName}.` }] };
868
+ }
869
+
870
+ let sampleContent = "";
871
+ let fence = "text";
872
+ const stat = statSync(samplePath);
873
+ if (stat.isDirectory()) {
874
+ const readmePath = join(samplePath, "README.md");
875
+ if (existsSync(readmePath)) {
876
+ sampleContent = readCodeFile(readmePath);
877
+ fence = "markdown";
878
+ } else {
879
+ const codeFiles = findCodeFilesInSample(samplePath);
880
+ if (codeFiles.length > 0) {
881
+ const preferredNames = [
882
+ "main.tsx",
883
+ "main.jsx",
884
+ "main.ts",
885
+ "main.js",
886
+ "App.tsx",
887
+ "App.jsx",
888
+ "App.vue"
889
+ ];
890
+ const preferred = codeFiles.find((file) => preferredNames.includes(file.filename)) || codeFiles[0];
891
+ sampleContent = readCodeFile(preferred.path);
892
+ fence = preferred.extension ? preferred.extension.replace(".", "") : "text";
893
+ } else {
894
+ sampleContent = "Sample found, but no code files detected.";
895
+ }
896
+ }
897
+ } else {
898
+ sampleContent = readCodeFile(samplePath);
899
+ fence = extname(samplePath).replace(".", "") || "text";
900
+ }
901
+
902
+ return {
903
+ content: [{
904
+ type: "text",
905
+ text: [
906
+ "# Quick Start: Dynamsoft Document Viewer",
907
+ "",
908
+ `**SDK Version:** ${sdkEntry.version}`,
909
+ `**Trial License:** \`${registry.trial_license}\``,
910
+ "",
911
+ "## Option 1: CDN",
912
+ "```html",
913
+ `<script src="${sdkEntry.platforms.web.installation.cdn}"></script>`,
914
+ "```",
915
+ "",
916
+ "## Option 2: NPM",
917
+ "```bash",
918
+ sdkEntry.platforms.web.installation.npm,
919
+ "```",
920
+ "",
921
+ `## ${sampleName}`,
922
+ "```" + fence,
923
+ sampleContent,
924
+ "```",
925
+ "",
926
+ `Docs: ${sdkEntry.platforms.web.docs["user-guide"]}`
927
+ ].join("\n")
928
+ }]
929
+ };
930
+ }
931
+
932
+ return {
933
+ isError: true,
934
+ content: [{ type: "text", text: "Unsupported product/edition for quickstart." }]
935
+ };
936
+ }
937
+ );
938
+
939
+ // ============================================================================
940
+ // TOOL: generate_project
941
+ // ============================================================================
942
+
943
+ server.registerTool(
944
+ "generate_project",
945
+ {
946
+ title: "Generate Project",
947
+ description: "Generate a project structure from a sample and return files inline (no zip/download).",
948
+ inputSchema: {
949
+ product: z.string().describe("Product: dbr, dwt, or ddv"),
950
+ edition: z.string().optional().describe("Edition: mobile, web, server/desktop"),
951
+ platform: z.string().optional().describe("Platform: android, ios, maui, react-native, flutter, js, python, cpp, java, dotnet, nodejs, angular, blazor, capacitor, electron, es6, native-ts, next, nuxt, pwa, react, requirejs, svelte, vue, webview"),
952
+ version: z.string().optional().describe("Version constraint"),
953
+ sample_id: z.string().optional().describe("Sample identifier (name or path)"),
954
+ resource_uri: z.string().optional().describe("Resource URI returned by search"),
955
+ api_level: z.string().optional().describe("API level: high-level or low-level (mobile only)")
956
+ }
957
+ },
958
+ async ({ product, edition, platform, version, sample_id, resource_uri, api_level }) => {
959
+ const normalizedProduct = normalizeProduct(product);
960
+ const normalizedPlatform = normalizePlatform(platform);
961
+ const normalizedEdition = normalizeEdition(edition, normalizedPlatform, normalizedProduct);
962
+
963
+ const policy = ensureLatestMajor({
964
+ product: normalizedProduct,
965
+ version,
966
+ query: sample_id,
967
+ edition: normalizedEdition,
968
+ platform: normalizedPlatform
969
+ });
970
+
971
+ if (!policy.ok) {
972
+ return { isError: true, content: [{ type: "text", text: policy.message }] };
973
+ }
974
+
975
+ let sampleInfo = null;
976
+ if (resource_uri) {
977
+ const parsed = parseResourceUri(resource_uri);
978
+ if (!parsed) {
979
+ return {
980
+ isError: true,
981
+ content: [{
982
+ type: "text",
983
+ text: "resource_uri must be a sample://... URI. Use search or list_samples to get a valid sample URI."
984
+ }]
985
+ };
986
+ }
987
+ if (parsed.scheme !== "sample") {
988
+ return {
989
+ isError: true,
990
+ content: [{
991
+ type: "text",
992
+ text: "resource_uri must use the sample:// scheme. For doc:// URIs, use resources/read instead."
993
+ }]
994
+ };
995
+ }
996
+ sampleInfo = parseSampleUri(resource_uri);
997
+ if (!sampleInfo) {
998
+ return {
999
+ isError: true,
1000
+ content: [{
1001
+ type: "text",
1002
+ text: "Invalid sample URI format. Use search or list_samples to obtain a valid sample:// URI."
1003
+ }]
1004
+ };
1005
+ }
1006
+ }
1007
+
1008
+ let samplePath = null;
1009
+ let sampleLabel = "";
1010
+ let sampleQuery = "";
1011
+
1012
+ if (sampleInfo) {
1013
+ sampleLabel = sampleInfo.sampleName || resource_uri;
1014
+ sampleQuery = sampleInfo.sampleName || sample_id || "";
1015
+ if (sampleInfo.product === "dbr" && sampleInfo.edition === "mobile") {
1016
+ samplePath = getMobileSamplePath(sampleInfo.platform, sampleInfo.level, sampleInfo.sampleName);
1017
+ } else if (sampleInfo.product === "dbr" && sampleInfo.edition === "web") {
1018
+ samplePath = getWebSamplePath(sampleInfo.category, sampleInfo.sampleName);
1019
+ } else if (sampleInfo.product === "dbr" && (sampleInfo.edition === "python" || sampleInfo.edition === "server")) {
1020
+ samplePath = getDbrServerSamplePath(sampleInfo.platform, sampleInfo.sampleName);
1021
+ } else if (sampleInfo.product === "dwt") {
1022
+ samplePath = getDwtSamplePath(sampleInfo.category, sampleInfo.sampleName);
1023
+ } else if (sampleInfo.product === "ddv") {
1024
+ samplePath = getDdvSamplePath(sampleInfo.sampleName);
1025
+ }
1026
+ } else if (sample_id) {
1027
+ if (!normalizedProduct || !normalizedEdition) {
1028
+ return {
1029
+ isError: true,
1030
+ content: [{
1031
+ type: "text",
1032
+ text: "Specify product/edition or provide resource_uri. Use list_samples or get_index to discover valid scopes."
1033
+ }]
1034
+ };
1035
+ }
1036
+
1037
+ const level = normalizeApiLevel(api_level);
1038
+ const sampleName = normalizeSampleName(sample_id);
1039
+ sampleLabel = sampleName;
1040
+ sampleQuery = sampleName;
1041
+
1042
+ if (normalizedProduct === "dbr" && normalizedEdition === "mobile") {
1043
+ const targetPlatform = normalizedPlatform || "android";
1044
+ const primaryPath = getMobileSamplePath(targetPlatform, level, sampleName);
1045
+ const altLevel = level === "high-level" ? "low-level" : "high-level";
1046
+ const alternatePath = getMobileSamplePath(targetPlatform, altLevel, sampleName);
1047
+ samplePath = existsSync(primaryPath) ? primaryPath : (existsSync(alternatePath) ? alternatePath : null);
1048
+ } else if (normalizedProduct === "dbr" && normalizedEdition === "web") {
1049
+ samplePath = getWebSamplePath(undefined, sampleName);
1050
+ } else if (normalizedProduct === "dbr" && normalizedEdition === "server") {
1051
+ samplePath = getDbrServerSamplePath(normalizedPlatform || "python", sampleName);
1052
+ } else if (normalizedProduct === "dwt") {
1053
+ const categories = discoverDwtSamples();
1054
+ let foundCategory = "";
1055
+ for (const [category, samples] of Object.entries(categories)) {
1056
+ if (samples.includes(sampleName)) {
1057
+ foundCategory = category;
1058
+ break;
1059
+ }
1060
+ }
1061
+ samplePath = foundCategory ? getDwtSamplePath(foundCategory, sampleName) : null;
1062
+ } else if (normalizedProduct === "ddv") {
1063
+ samplePath = getDdvSamplePath(sampleName);
1064
+ }
1065
+ } else {
1066
+ return { isError: true, content: [{ type: "text", text: "Provide sample_id or resource_uri." }] };
1067
+ }
1068
+
1069
+ if (!samplePath || !existsSync(samplePath)) {
1070
+ const suggestions = await getSampleSuggestions({
1071
+ query: sampleQuery,
1072
+ product: normalizedProduct,
1073
+ edition: normalizedEdition,
1074
+ platform: normalizedPlatform,
1075
+ limit: 5
1076
+ });
1077
+
1078
+ const content = [{
1079
+ type: "text",
1080
+ text: [
1081
+ `Sample not found for "${sampleLabel}".`,
1082
+ suggestions.length ? "Related samples:" : "No related samples found. Try search or get_index."
1083
+ ].join("\n")
1084
+ }];
1085
+
1086
+ for (const entry of suggestions) {
1087
+ const versionLabel = entry.version ? `v${entry.version}` : "n/a";
1088
+ const scopeLabel = formatScopeLabel(entry);
1089
+ const sampleId = entry.type === "sample" ? getSampleIdFromUri(entry.uri) : "";
1090
+ const sampleHint = sampleId ? ` | sample_id: ${sampleId}` : "";
1091
+ content.push({
1092
+ type: "resource_link",
1093
+ uri: entry.uri,
1094
+ name: entry.title,
1095
+ description: `${entry.type.toUpperCase()} | ${scopeLabel} | ${versionLabel} - ${entry.summary}${sampleHint}`,
1096
+ mimeType: entry.mimeType,
1097
+ annotations: {
1098
+ audience: ["assistant"],
1099
+ priority: 0.6
1100
+ }
1101
+ });
1102
+ }
1103
+
1104
+ if (suggestions.length) {
1105
+ const plainLines = suggestions.map((entry, index) => {
1106
+ const sampleId = entry.type === "sample" ? getSampleIdFromUri(entry.uri) : "";
1107
+ const sampleNote = sampleId ? ` sample_id=${sampleId}` : "";
1108
+ return `- ${index + 1}. ${entry.uri}${sampleNote}`;
1109
+ });
1110
+ content.push({
1111
+ type: "text",
1112
+ text: ["Plain URIs (copy/paste):", ...plainLines].join("\n")
1113
+ });
1114
+ }
1115
+
1116
+ return { isError: true, content };
1117
+ }
1118
+
1119
+ const textExtensions = [
1120
+ ".java", ".kt", ".swift", ".m", ".h", ".xml", ".gradle", ".properties",
1121
+ ".pro", ".json", ".plist", ".storyboard", ".xib", ".gitignore", ".md",
1122
+ ".js", ".jsx", ".ts", ".tsx", ".vue", ".cjs", ".html", ".css"
1123
+ ];
1124
+
1125
+ const files = [];
1126
+ const stat = statSync(samplePath);
1127
+ const rootDir = stat.isDirectory() ? samplePath : dirname(samplePath);
1128
+
1129
+ function addFile(fullPath) {
1130
+ const ext = "." + fullPath.split(".").pop();
1131
+ const baseName = fullPath.split(/[\\/]/).pop();
1132
+ if (!textExtensions.includes(ext) && !["gradlew", "Podfile"].includes(baseName)) {
1133
+ return;
1134
+ }
1135
+ try {
1136
+ const content = readFileSync(fullPath, "utf-8");
1137
+ const normalized = content.replace(/\r\n/g, "\n");
1138
+ files.push({
1139
+ path: relative(rootDir, fullPath),
1140
+ content: normalized,
1141
+ ext: ext.replace(".", "")
1142
+ });
1143
+ } catch (e) {
1144
+ // Ignore binary or unreadable files
1145
+ }
1146
+ }
1147
+
1148
+ function walk(dir) {
1149
+ const entries = readdirSync(dir);
1150
+ for (const entry of entries) {
1151
+ if (["build", ".gradle", ".idea", ".git", "node_modules", "Pods", "DerivedData", "__pycache__"].includes(entry)) {
1152
+ continue;
1153
+ }
1154
+ const fullPath = join(dir, entry);
1155
+ const entryStat = statSync(fullPath);
1156
+ if (entryStat.isDirectory()) {
1157
+ walk(fullPath);
1158
+ } else {
1159
+ addFile(fullPath);
1160
+ }
1161
+ }
1162
+ }
1163
+
1164
+ if (stat.isDirectory()) {
1165
+ walk(samplePath);
1166
+ } else {
1167
+ addFile(samplePath);
1168
+ }
1169
+
1170
+ const validFiles = files.filter((f) => f.content.length < 50000);
1171
+
1172
+ const output = [
1173
+ `# Project Generation: ${sampleLabel}`,
1174
+ "",
1175
+ "This output contains the file structure for the project.",
1176
+ "Note: This tool returns files inline and does not create a downloadable zip.",
1177
+ ""
1178
+ ];
1179
+
1180
+ for (const file of validFiles) {
1181
+ output.push(`## ${file.path}`);
1182
+ output.push("```" + (file.ext || "text"));
1183
+ output.push(file.content);
1184
+ output.push("```");
1185
+ output.push("");
1186
+ }
1187
+
1188
+ return { content: [{ type: "text", text: output.join("\n") }] };
1189
+ }
1190
+ );
1191
+ // ============================================================================
1192
+ // MCP Resources (tool-discovered, lazy-read)
1193
+ // ============================================================================
1194
+
1195
+ server.server.registerCapabilities({
1196
+ resources: {
1197
+ listChanged: false,
1198
+ subscribe: true
1199
+ }
1200
+ });
1201
+
1202
+ server.server.setRequestHandler(ListResourcesRequestSchema, async () => {
1203
+ // Only surface a small, pinned set to avoid bloating the context window.
1204
+ const resources = getPinnedResources().map((r) => ({
1205
+ uri: r.uri,
1206
+ name: r.title,
1207
+ description: r.summary,
1208
+ mimeType: r.mimeType
1209
+ }));
1210
+ return { resources };
1211
+ });
1212
+
1213
+ server.server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
1214
+ const parsed = parseResourceUri(request.params.uri);
1215
+ if (parsed && ["dbr", "dwt", "ddv"].includes(parsed.product)) {
1216
+ const policy = ensureLatestMajor({
1217
+ product: parsed.product,
1218
+ version: parsed.version,
1219
+ edition: parsed.edition,
1220
+ platform: parsed.platform
1221
+ });
1222
+ if (!policy.ok) {
1223
+ throw new Error(policy.message);
1224
+ }
1225
+ }
1226
+ const resource = await readResourceContent(request.params.uri);
1227
+ if (!resource) {
1228
+ throw new Error(`Resource not found: ${request.params.uri}`);
1229
+ }
1230
+ return { contents: [resource] };
1231
+ });
1232
+
1233
+ server.server.setRequestHandler(SubscribeRequestSchema, async () => ({}));
1234
+ server.server.setRequestHandler(UnsubscribeRequestSchema, async () => ({}));
1235
+
1236
+ // ============================================================================
1237
+ // Start Server
1238
+ // ============================================================================
1239
+
1240
+ const transport = new StdioServerTransport();
1241
+ await server.connect(transport);
1242
+
1243
+ if (ragConfig.prewarm) {
1244
+ if (ragConfig.prewarmBlock) {
1245
+ await prewarmRagIndex();
1246
+ } else {
1247
+ void prewarmRagIndex();
1248
+ }
1249
+ }
1250
+