couchbase 4.2.3 → 4.2.5-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/CMakeLists.txt +136 -11
  2. package/deps/couchbase-cxx-client/CMakeLists.txt +54 -4
  3. package/deps/couchbase-cxx-client/README.md +1 -0
  4. package/deps/couchbase-cxx-client/bin/create-search-index +164 -0
  5. package/deps/couchbase-cxx-client/bin/init-cluster +55 -10
  6. package/deps/couchbase-cxx-client/bin/run-unit-tests +62 -6
  7. package/deps/couchbase-cxx-client/bin/travel-sample-index-v6.json +184 -0
  8. package/deps/couchbase-cxx-client/bin/travel-sample-index.json +188 -0
  9. package/deps/couchbase-cxx-client/cmake/Documentation.cmake +0 -1
  10. package/deps/couchbase-cxx-client/cmake/OpenSSL.cmake +98 -3
  11. package/deps/couchbase-cxx-client/cmake/Testing.cmake +8 -0
  12. package/deps/couchbase-cxx-client/cmake/build_config.hxx.in +3 -0
  13. package/deps/couchbase-cxx-client/core/bucket.cxx +183 -152
  14. package/deps/couchbase-cxx-client/core/bucket.hxx +17 -4
  15. package/deps/couchbase-cxx-client/core/cluster.hxx +18 -1
  16. package/deps/couchbase-cxx-client/core/cluster_options.hxx +1 -0
  17. package/deps/couchbase-cxx-client/core/error_context/key_value.cxx +2 -1
  18. package/deps/couchbase-cxx-client/core/error_context/key_value.hxx +10 -12
  19. package/deps/couchbase-cxx-client/core/error_context/search.hxx +1 -1
  20. package/deps/couchbase-cxx-client/core/impl/analytics.cxx +1 -0
  21. package/deps/couchbase-cxx-client/core/impl/boolean_field_query.cxx +40 -0
  22. package/deps/couchbase-cxx-client/core/impl/boolean_query.cxx +62 -0
  23. package/deps/couchbase-cxx-client/core/impl/cluster.cxx +1 -0
  24. package/deps/couchbase-cxx-client/core/impl/conjunction_query.cxx +51 -0
  25. package/deps/couchbase-cxx-client/core/impl/date_range.cxx +89 -0
  26. package/deps/couchbase-cxx-client/core/impl/date_range_facet.cxx +54 -0
  27. package/deps/couchbase-cxx-client/core/impl/date_range_facet_result.cxx +64 -0
  28. package/deps/couchbase-cxx-client/core/impl/date_range_query.cxx +125 -0
  29. package/deps/couchbase-cxx-client/core/impl/disjunction_query.cxx +51 -0
  30. package/deps/couchbase-cxx-client/core/impl/encoded_search_facet.hxx +29 -0
  31. package/deps/couchbase-cxx-client/core/impl/encoded_search_query.hxx +29 -0
  32. package/deps/couchbase-cxx-client/core/impl/encoded_search_sort.hxx +29 -0
  33. package/deps/couchbase-cxx-client/core/impl/geo_bounding_box_query.cxx +46 -0
  34. package/deps/couchbase-cxx-client/core/impl/geo_distance_query.cxx +43 -0
  35. package/deps/couchbase-cxx-client/core/impl/geo_polygon_query.cxx +46 -0
  36. package/deps/couchbase-cxx-client/core/impl/internal_date_range_facet_result.cxx +80 -0
  37. package/deps/couchbase-cxx-client/core/impl/internal_date_range_facet_result.hxx +48 -0
  38. package/deps/couchbase-cxx-client/core/impl/internal_numeric_range_facet_result.cxx +80 -0
  39. package/deps/couchbase-cxx-client/core/impl/internal_numeric_range_facet_result.hxx +48 -0
  40. package/deps/couchbase-cxx-client/core/impl/internal_search_error_context.cxx +141 -0
  41. package/deps/couchbase-cxx-client/core/impl/internal_search_error_context.hxx +61 -0
  42. package/deps/couchbase-cxx-client/core/impl/internal_search_meta_data.cxx +60 -0
  43. package/deps/couchbase-cxx-client/core/impl/internal_search_meta_data.hxx +41 -0
  44. package/deps/couchbase-cxx-client/core/impl/internal_search_result.cxx +84 -0
  45. package/deps/couchbase-cxx-client/core/impl/internal_search_result.hxx +43 -0
  46. package/deps/couchbase-cxx-client/core/impl/internal_search_row.cxx +82 -0
  47. package/deps/couchbase-cxx-client/core/impl/internal_search_row.hxx +56 -0
  48. package/deps/couchbase-cxx-client/core/impl/internal_search_row_location.hxx +32 -0
  49. package/deps/couchbase-cxx-client/core/impl/internal_search_row_locations.cxx +137 -0
  50. package/deps/couchbase-cxx-client/core/impl/internal_search_row_locations.hxx +45 -0
  51. package/deps/couchbase-cxx-client/core/impl/internal_term_facet_result.cxx +80 -0
  52. package/deps/couchbase-cxx-client/core/impl/internal_term_facet_result.hxx +48 -0
  53. package/deps/couchbase-cxx-client/core/impl/key_value_error_context.cxx +98 -0
  54. package/deps/couchbase-cxx-client/core/impl/match_all_query.cxx +35 -0
  55. package/deps/couchbase-cxx-client/core/impl/match_none_query.cxx +35 -0
  56. package/deps/couchbase-cxx-client/core/impl/match_phrase_query.cxx +43 -0
  57. package/deps/couchbase-cxx-client/core/impl/match_query.cxx +59 -0
  58. package/deps/couchbase-cxx-client/core/impl/numeric_range.cxx +49 -0
  59. package/deps/couchbase-cxx-client/core/impl/numeric_range_facet.cxx +54 -0
  60. package/deps/couchbase-cxx-client/core/impl/numeric_range_facet_result.cxx +64 -0
  61. package/deps/couchbase-cxx-client/core/impl/numeric_range_query.cxx +56 -0
  62. package/deps/couchbase-cxx-client/core/impl/phrase_query.cxx +42 -0
  63. package/deps/couchbase-cxx-client/core/impl/prefix_query.cxx +40 -0
  64. package/deps/couchbase-cxx-client/core/impl/query_error_context.cxx +75 -0
  65. package/deps/couchbase-cxx-client/core/impl/query_string_query.cxx +37 -0
  66. package/deps/couchbase-cxx-client/core/impl/regexp_query.cxx +40 -0
  67. package/deps/couchbase-cxx-client/core/impl/search.cxx +191 -0
  68. package/deps/couchbase-cxx-client/core/impl/search_error_context.cxx +147 -0
  69. package/deps/couchbase-cxx-client/core/impl/search_meta_data.cxx +46 -0
  70. package/deps/couchbase-cxx-client/core/impl/search_result.cxx +66 -0
  71. package/deps/couchbase-cxx-client/core/impl/search_row.cxx +74 -0
  72. package/deps/couchbase-cxx-client/core/impl/search_row_location.cxx +64 -0
  73. package/deps/couchbase-cxx-client/core/impl/search_row_locations.cxx +66 -0
  74. package/deps/couchbase-cxx-client/core/impl/search_sort_field.cxx +104 -0
  75. package/deps/couchbase-cxx-client/core/impl/search_sort_id.cxx +43 -0
  76. package/deps/couchbase-cxx-client/core/impl/search_sort_score.cxx +43 -0
  77. package/deps/couchbase-cxx-client/core/impl/term_facet.cxx +36 -0
  78. package/deps/couchbase-cxx-client/core/impl/term_facet_result.cxx +64 -0
  79. package/deps/couchbase-cxx-client/core/impl/term_query.cxx +56 -0
  80. package/deps/couchbase-cxx-client/core/impl/term_range_query.cxx +57 -0
  81. package/deps/couchbase-cxx-client/core/impl/wildcard_query.cxx +40 -0
  82. package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +9 -2
  83. package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +54 -37
  84. package/deps/couchbase-cxx-client/core/io/mcbp_session.hxx +4 -3
  85. package/deps/couchbase-cxx-client/core/json_string.hxx +5 -0
  86. package/deps/couchbase-cxx-client/core/meta/version.cxx +18 -4
  87. package/deps/couchbase-cxx-client/core/mozilla_ca_bundle.hxx +39 -0
  88. package/deps/couchbase-cxx-client/core/operations/document_search.cxx +3 -1
  89. package/deps/couchbase-cxx-client/core/operations/document_search.hxx +1 -1
  90. package/deps/couchbase-cxx-client/core/protocol/client_request.hxx +11 -2
  91. package/deps/couchbase-cxx-client/core/protocol/client_response.hxx +1 -0
  92. package/deps/couchbase-cxx-client/core/utils/connection_string.cxx +59 -46
  93. package/deps/couchbase-cxx-client/core/utils/connection_string.hxx +1 -0
  94. package/deps/couchbase-cxx-client/couchbase/analytics_error_context.hxx +1 -1
  95. package/deps/couchbase-cxx-client/couchbase/boolean_field_query.hxx +77 -0
  96. package/deps/couchbase-cxx-client/couchbase/boolean_query.hxx +223 -0
  97. package/deps/couchbase-cxx-client/couchbase/cluster.hxx +39 -0
  98. package/deps/couchbase-cxx-client/couchbase/conjunction_query.hxx +88 -0
  99. package/deps/couchbase-cxx-client/couchbase/date_range.hxx +69 -0
  100. package/deps/couchbase-cxx-client/couchbase/date_range_facet.hxx +56 -0
  101. package/deps/couchbase-cxx-client/couchbase/date_range_facet_result.hxx +55 -0
  102. package/deps/couchbase-cxx-client/couchbase/date_range_query.hxx +265 -0
  103. package/deps/couchbase-cxx-client/couchbase/disjunction_query.hxx +109 -0
  104. package/deps/couchbase-cxx-client/couchbase/doc_id_query.hxx +111 -0
  105. package/deps/couchbase-cxx-client/couchbase/error_context.hxx +17 -8
  106. package/deps/couchbase-cxx-client/couchbase/fmt/analytics_scan_consistency.hxx +52 -0
  107. package/deps/couchbase-cxx-client/{core/topology/error_map_fmt.hxx → couchbase/fmt/key_value_error_map_attribute.hxx} +21 -21
  108. package/deps/couchbase-cxx-client/couchbase/fmt/search_scan_consistency.hxx +49 -0
  109. package/deps/couchbase-cxx-client/couchbase/geo_bounding_box_query.hxx +107 -0
  110. package/deps/couchbase-cxx-client/couchbase/geo_distance_query.hxx +109 -0
  111. package/deps/couchbase-cxx-client/couchbase/geo_point.hxx +32 -0
  112. package/deps/couchbase-cxx-client/couchbase/geo_polygon_query.hxx +85 -0
  113. package/deps/couchbase-cxx-client/couchbase/highlight_style.hxx +45 -0
  114. package/deps/couchbase-cxx-client/couchbase/key_value_error_context.hxx +7 -2
  115. package/deps/couchbase-cxx-client/couchbase/manager_error_context.hxx +1 -1
  116. package/deps/couchbase-cxx-client/couchbase/match_all_query.hxx +43 -0
  117. package/deps/couchbase-cxx-client/couchbase/match_none_query.hxx +43 -0
  118. package/deps/couchbase-cxx-client/couchbase/match_operator.hxx +45 -0
  119. package/deps/couchbase-cxx-client/couchbase/match_phrase_query.hxx +108 -0
  120. package/deps/couchbase-cxx-client/couchbase/match_query.hxx +163 -0
  121. package/deps/couchbase-cxx-client/couchbase/numeric_range.hxx +58 -0
  122. package/deps/couchbase-cxx-client/couchbase/numeric_range_facet.hxx +56 -0
  123. package/deps/couchbase-cxx-client/couchbase/numeric_range_facet_result.hxx +55 -0
  124. package/deps/couchbase-cxx-client/couchbase/numeric_range_query.hxx +143 -0
  125. package/deps/couchbase-cxx-client/couchbase/phrase_query.hxx +93 -0
  126. package/deps/couchbase-cxx-client/couchbase/prefix_query.hxx +82 -0
  127. package/deps/couchbase-cxx-client/couchbase/query_error_context.hxx +3 -1
  128. package/deps/couchbase-cxx-client/couchbase/query_string_query.hxx +72 -0
  129. package/deps/couchbase-cxx-client/couchbase/regexp_query.hxx +82 -0
  130. package/deps/couchbase-cxx-client/couchbase/scope.hxx +39 -0
  131. package/deps/couchbase-cxx-client/couchbase/search_date_range.hxx +68 -0
  132. package/deps/couchbase-cxx-client/couchbase/search_error_context.hxx +138 -0
  133. package/deps/couchbase-cxx-client/couchbase/search_facet.hxx +60 -0
  134. package/deps/couchbase-cxx-client/couchbase/search_facet_result.hxx +50 -0
  135. package/deps/couchbase-cxx-client/couchbase/search_meta_data.hxx +85 -0
  136. package/deps/couchbase-cxx-client/couchbase/search_metrics.hxx +127 -0
  137. package/deps/couchbase-cxx-client/couchbase/search_numeric_range.hxx +69 -0
  138. package/deps/couchbase-cxx-client/couchbase/search_options.hxx +509 -0
  139. package/deps/couchbase-cxx-client/couchbase/search_query.hxx +69 -0
  140. package/deps/couchbase-cxx-client/couchbase/search_result.hxx +77 -0
  141. package/deps/couchbase-cxx-client/couchbase/search_row.hxx +104 -0
  142. package/deps/couchbase-cxx-client/couchbase/search_row_location.hxx +55 -0
  143. package/deps/couchbase-cxx-client/couchbase/search_row_locations.hxx +86 -0
  144. package/deps/couchbase-cxx-client/couchbase/search_scan_consistency.hxx +34 -0
  145. package/deps/couchbase-cxx-client/couchbase/search_sort.hxx +58 -0
  146. package/deps/couchbase-cxx-client/couchbase/search_sort_field.hxx +117 -0
  147. package/deps/couchbase-cxx-client/couchbase/search_sort_field_missing.hxx +26 -0
  148. package/deps/couchbase-cxx-client/couchbase/search_sort_field_mode.hxx +27 -0
  149. package/deps/couchbase-cxx-client/couchbase/search_sort_field_type.hxx +28 -0
  150. package/deps/couchbase-cxx-client/couchbase/search_sort_id.hxx +60 -0
  151. package/deps/couchbase-cxx-client/couchbase/search_sort_score.hxx +60 -0
  152. package/deps/couchbase-cxx-client/couchbase/search_term_range.hxx +51 -0
  153. package/deps/couchbase-cxx-client/couchbase/security_options.hxx +3 -0
  154. package/deps/couchbase-cxx-client/couchbase/subdocument_error_context.hxx +4 -2
  155. package/deps/couchbase-cxx-client/couchbase/term_facet.hxx +48 -0
  156. package/deps/couchbase-cxx-client/couchbase/term_facet_result.hxx +55 -0
  157. package/deps/couchbase-cxx-client/couchbase/term_query.hxx +151 -0
  158. package/deps/couchbase-cxx-client/couchbase/term_range_query.hxx +142 -0
  159. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_options.hxx +1 -1
  160. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_query_options.hxx +2 -1
  161. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_result.hxx +1 -1
  162. package/deps/couchbase-cxx-client/couchbase/transactions.hxx +3 -3
  163. package/deps/couchbase-cxx-client/couchbase/wildcard_query.hxx +83 -0
  164. package/deps/couchbase-cxx-client/docs/Doxyfile.in +1 -1
  165. package/deps/couchbase-cxx-client/docs/cbc-analytics.md +2 -2
  166. package/deps/couchbase-cxx-client/docs/cbc-get.md +3 -2
  167. package/deps/couchbase-cxx-client/docs/cbc-pillowfight.md +7 -2
  168. package/deps/couchbase-cxx-client/docs/cbc-query.md +2 -2
  169. package/deps/couchbase-cxx-client/docs/cbc.md +3 -3
  170. package/deps/couchbase-cxx-client/docs/cli.hxx +5 -5
  171. package/deps/couchbase-cxx-client/docs/mainpage.hxx +42 -5
  172. package/deps/couchbase-cxx-client/test/CMakeLists.txt +1 -0
  173. package/deps/couchbase-cxx-client/test/test_integration_analytics.cxx +28 -6
  174. package/deps/couchbase-cxx-client/test/test_integration_collections.cxx +7 -3
  175. package/deps/couchbase-cxx-client/test/test_integration_connect.cxx +7 -3
  176. package/deps/couchbase-cxx-client/test/test_integration_crud.cxx +13 -3
  177. package/deps/couchbase-cxx-client/test/test_integration_diagnostics.cxx +8 -2
  178. package/deps/couchbase-cxx-client/test/test_integration_durability.cxx +12 -7
  179. package/deps/couchbase-cxx-client/test/test_integration_examples.cxx +283 -11
  180. package/deps/couchbase-cxx-client/test/test_integration_management.cxx +140 -88
  181. package/deps/couchbase-cxx-client/test/test_integration_query.cxx +67 -9
  182. package/deps/couchbase-cxx-client/test/test_integration_range_scan.cxx +12 -12
  183. package/deps/couchbase-cxx-client/test/test_integration_read_replica.cxx +48 -11
  184. package/deps/couchbase-cxx-client/test/test_integration_search.cxx +19 -1
  185. package/deps/couchbase-cxx-client/test/test_integration_subdoc.cxx +60 -9
  186. package/deps/couchbase-cxx-client/test/test_integration_tracer.cxx +3 -0
  187. package/deps/couchbase-cxx-client/test/test_integration_transcoders.cxx +4 -0
  188. package/deps/couchbase-cxx-client/test/test_transaction_examples.cxx +100 -85
  189. package/deps/couchbase-cxx-client/test/test_unit_connection_string.cxx +29 -0
  190. package/deps/couchbase-cxx-client/test/test_unit_search.cxx +427 -0
  191. package/deps/couchbase-cxx-client/test/utils/integration_test_guard.cxx +2 -1
  192. package/deps/couchbase-cxx-client/test/utils/logger.cxx +3 -1
  193. package/deps/couchbase-cxx-client/test/utils/server_version.hxx +31 -15
  194. package/deps/couchbase-cxx-client/test/utils/test_context.cxx +8 -0
  195. package/deps/couchbase-cxx-client/tools/get.cxx +9 -8
  196. package/deps/couchbase-cxx-client/tools/pillowfight.cxx +175 -75
  197. package/deps/couchbase-cxx-client/tools/version.cxx +4 -2
  198. package/dist/binding.d.ts +1 -1
  199. package/dist/binding.js +3 -2
  200. package/package.json +96 -1
  201. package/scripts/createPlatformPackages.js +108 -0
  202. package/scripts/install.js +45 -0
  203. package/scripts/prebuilds.js +249 -0
  204. package/scripts/prune.js +124 -0
  205. package/src/jstocbpp_autogen.hpp +3 -2
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env node
2
+
3
+ const path = require('path')
4
+ var proc = require('child_process')
5
+ const prebuilds = require('./prebuilds')
6
+
7
+ if (hasLocalPrebuild()) {
8
+ const destination = path.join(
9
+ path.resolve(__dirname, '..'),
10
+ 'build',
11
+ 'Release'
12
+ )
13
+ const source = getLocalPrebuild()
14
+ // on either success or failure of resolving local prebuild we still confirm we have a prebuild
15
+ prebuilds.resolveLocalPrebuild(source, destination).then(installPrebuild())
16
+ } else {
17
+ installPrebuild()
18
+ }
19
+
20
+ function getLocalPrebuild() {
21
+ const localPrebuildsName = `npm_config_couchbase_local_prebuilds`
22
+ return process.env[localPrebuildsName]
23
+ }
24
+
25
+ function hasLocalPrebuild() {
26
+ return typeof getLocalPrebuild() === 'string'
27
+ }
28
+
29
+ function installPrebuild() {
30
+ try {
31
+ prebuilds.resolvePrebuild(path.resolve(__dirname, '..'), false)
32
+ process.exit(0)
33
+ } catch (err) {
34
+ const cmakejs = path.join(
35
+ require.resolve('cmake-js/package.json'),
36
+ '..',
37
+ require('cmake-js/package.json').bin['cmake-js']
38
+ )
39
+ // @TODO: is spawning sync a problem? Seemed to be easiest way to get Ctrl-C to kill the whole build process
40
+ const cmakejsProc = proc.spawnSync(process.execPath, [cmakejs, 'compile'], {
41
+ stdio: 'inherit',
42
+ })
43
+ process.exit(cmakejsProc.status)
44
+ }
45
+ }
@@ -0,0 +1,249 @@
1
+ const fs = require('fs')
2
+ const path = require('path')
3
+ const zlib = require('zlib')
4
+ const stream = require('stream')
5
+ const { promisify } = require('util')
6
+ const pipe = promisify(stream.pipeline)
7
+
8
+ // Workaround to fix webpack's build warnings: 'the request of a dependency is an expression'
9
+ const runtimeRequire =
10
+ typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require
11
+
12
+ const openSSLVersions = ['openssl1', 'openssl3']
13
+ const supportedPlatforms = ['darwin', 'linux', 'linuxmusl', 'win32']
14
+ const supportedArches = ['x64', 'arm64']
15
+
16
+ const runtime = isElectron() ? 'electron' : 'node'
17
+ const nodeVersion = getNodeVersion()
18
+ const nodeVersionMajor = getNodeMajorVersion(nodeVersion)
19
+ const arch = process.arch
20
+ const platform = process.platform
21
+ const libc = getLinuxType(platform)
22
+ const sslType = getSSLType(runtime, nodeVersion)
23
+
24
+ function getLocalPrebuild(dir) {
25
+ const localPrebuildDir = path.join(dir, 'build/Release')
26
+ const files = readdirSync(localPrebuildDir).filter(matchBuild)
27
+ return files[0] && path.join(localPrebuildDir, files[0])
28
+ }
29
+
30
+ function getLinuxType(platform) {
31
+ if (platform !== 'linux') {
32
+ return ''
33
+ }
34
+ return `linux${isAlpine(platform) ? 'musl' : ''}`
35
+ }
36
+
37
+ function getNodeMajorVersion(version) {
38
+ const tokens = version.split('.')
39
+ return parseInt(tokens[0])
40
+ }
41
+
42
+ function getNodeVersion() {
43
+ return process.version.replace('v', '')
44
+ }
45
+
46
+ function getPrebuildsInfo(dir) {
47
+ dir = path.resolve(dir || '.')
48
+ const info = {
49
+ packageDir: path.join(dir, 'package.json'),
50
+ platformPackageDir: undefined,
51
+ }
52
+
53
+ const packageName = JSON.parse(fs.readFileSync(info.packageDir)).name
54
+ if (packageName !== undefined) {
55
+ const allowedPlatformPkg = `${packageName}-${
56
+ platform === 'linux' ? libc : platform
57
+ }-${arch}-${sslType}`
58
+ const fullPlatformPkgName = `@${packageName}/${allowedPlatformPkg}`
59
+ const packageRequire = require('module').createRequire(
60
+ path.join(dir, 'package.json')
61
+ )
62
+ info.packageDir = path.dirname(path.join(dir, 'package.json'))
63
+ info.platformPackageDir = path.dirname(
64
+ packageRequire.resolve(fullPlatformPkgName)
65
+ )
66
+ }
67
+ return info
68
+ }
69
+
70
+ function getSSLType(runtime, version) {
71
+ if (runtime === 'electron') {
72
+ return 'boringssl'
73
+ }
74
+
75
+ const major = getNodeMajorVersion(version)
76
+ if (major >= 18) {
77
+ return 'openssl3'
78
+ }
79
+ return 'openssl1'
80
+ }
81
+
82
+ function getSupportedPlatformPackages(packageName) {
83
+ packageName = packageName || 'couchbase'
84
+ if (packageName !== 'couchbase') {
85
+ throw new Error(
86
+ 'Cannot build supported platform packages for package other than couchbase.'
87
+ )
88
+ }
89
+
90
+ const packageNames = []
91
+ // format: <platform>-<arch>-<runtime>-<SSL Type>
92
+ supportedPlatforms.forEach((plat) => {
93
+ supportedArches.forEach((arch) => {
94
+ if (plat === 'win32' && arch === 'arm64') return
95
+ openSSLVersions.forEach((ssl) => {
96
+ packageNames.push(`${packageName}-${plat}-${arch}-${ssl}`)
97
+ })
98
+ packageNames.push(`${packageName}-${plat}-${arch}-boringssl`)
99
+ })
100
+ })
101
+ return packageNames
102
+ }
103
+
104
+ function isAlpine(platform) {
105
+ return platform === 'linux' && fs.existsSync('/etc/alpine-release')
106
+ }
107
+
108
+ function isElectron() {
109
+ if (process.versions && process.versions.electron) return true
110
+ if (process.env.ELECTRON_RUN_AS_NODE) return true
111
+ return (
112
+ typeof window !== 'undefined' &&
113
+ window.process &&
114
+ window.process.type === 'renderer'
115
+ )
116
+ }
117
+
118
+ function loadPrebuild(dir) {
119
+ return runtimeRequire(resolvePrebuild(dir))
120
+ }
121
+
122
+ function matchBuild(name) {
123
+ return /\.node$/.test(name)
124
+ }
125
+
126
+ function matchingPlatformPrebuild(filename) {
127
+ if (['index.js', 'package.json', 'README.md'].includes(filename)) {
128
+ return false
129
+ }
130
+ const tokens = filename.split('-')
131
+ // filename format:
132
+ // couchbase-v<pkg-version>-<runtime>-v<runtime-version>-<platform>-<arch>-<ssltype>.node
133
+ if (tokens.length < 7) return false
134
+ const prebuildSSL = tokens[tokens.length - 1].replace('.node', '')
135
+ if (runtime === 'electron') {
136
+ if (prebuildSSL !== 'boringssl') return false
137
+ } else {
138
+ if (nodeVersionMajor >= 18 && prebuildSSL !== 'openssl3') return false
139
+ if (nodeVersionMajor < 18 && prebuildSSL !== 'openssl1') return false
140
+ }
141
+ if (tokens[tokens.length - 2] !== arch) return false
142
+ const platCompare = platform === 'linux' ? libc : platform
143
+ if (tokens[tokens.length - 3] !== platCompare) return false
144
+ if (!matchBuild(filename)) return false
145
+ // yay -- found a match!
146
+ return true
147
+ }
148
+
149
+ function matchPrebuild(name) {
150
+ return /\.tar\.gz$/.test(name) || matchBuild(name)
151
+ }
152
+
153
+ function readdirSync(dir) {
154
+ try {
155
+ return fs.readdirSync(dir)
156
+ } catch (err) {
157
+ return []
158
+ }
159
+ }
160
+
161
+ async function resolveLocalPrebuild(src, dest) {
162
+ if (fs.existsSync(src)) {
163
+ const prebuilds = readdirSync(src).filter(matchPrebuild)
164
+ if (prebuilds && prebuilds.length >= 1) {
165
+ if (!fs.existsSync(dest)) {
166
+ fs.mkdirSync(dest, { recursive: true })
167
+ }
168
+ const prebuild = prebuilds[0]
169
+ let prebuildDestName = prebuild
170
+ if (prebuild.endsWith('.tar.gz')) {
171
+ const gzip = zlib.createGunzip()
172
+ const source = fs.createReadStream(src)
173
+ prebuildDestName = `${prebuild.substring(0, prebuild.length - 7)}.node`
174
+ const destination = fs.createWriteStream(
175
+ path.join(src, prebuildDestName)
176
+ )
177
+ await pipe(source, gzip, destination)
178
+ }
179
+ try {
180
+ fs.copyFileSync(
181
+ path.join(src, prebuild),
182
+ path.join(dest, prebuildDestName)
183
+ )
184
+ } catch (_) {}
185
+ }
186
+ }
187
+ }
188
+
189
+ function resolvePrebuild(dir, runtimeResolve = true) {
190
+ dir = path.resolve(dir || '.')
191
+ try {
192
+ const localPrebuild = getLocalPrebuild(dir)
193
+ if (localPrebuild) {
194
+ return localPrebuild
195
+ }
196
+
197
+ const packageName = runtimeResolve
198
+ ? runtimeRequire(path.join(dir, 'package.json')).name
199
+ : JSON.parse(fs.readFileSync(path.join(dir, 'package.json'))).name
200
+ if (packageName !== undefined) {
201
+ const supportedPackages = getSupportedPlatformPackages(packageName)
202
+ const platformPkg = `${packageName}-${
203
+ platform === 'linux' ? libc : platform
204
+ }-${arch}-${sslType}`
205
+ if (supportedPackages.includes(platformPkg)) {
206
+ const fullPlatformPkgName = `@${packageName}/${platformPkg}`
207
+ const packageRequire = require('module').createRequire(
208
+ path.join(dir, 'package.json')
209
+ )
210
+ const platformPackagesDir = path.dirname(
211
+ packageRequire.resolve(fullPlatformPkgName)
212
+ )
213
+ if (platformPackagesDir !== undefined) {
214
+ const platformPrebuild = readdirSync(platformPackagesDir).filter(
215
+ matchingPlatformPrebuild
216
+ )
217
+ if (platformPrebuild && platformPrebuild.length == 1) {
218
+ return path.join(platformPackagesDir, platformPrebuild[0])
219
+ }
220
+ }
221
+ }
222
+ }
223
+ } catch (_) {}
224
+
225
+ let target = [
226
+ `platform=${platform}`,
227
+ `arch=${arch}`,
228
+ `runtime=${runtime}`,
229
+ `nodeVersion=${nodeVersion}`,
230
+ `sslType=${sslType}`,
231
+ ]
232
+ if (libc) {
233
+ target.push(`libc=${libc}`)
234
+ }
235
+ if (typeof __webpack_require__ === 'function') {
236
+ target.push('webpack=true')
237
+ }
238
+ throw new Error(
239
+ `Could not find native build for ${target.join(', ')} loaded from ${dir}.`
240
+ )
241
+ }
242
+
243
+ module.exports = {
244
+ getPrebuildsInfo,
245
+ getSupportedPlatformPackages,
246
+ loadPrebuild,
247
+ resolveLocalPrebuild,
248
+ resolvePrebuild,
249
+ }
@@ -0,0 +1,124 @@
1
+ const fs = require('fs')
2
+ const path = require('path')
3
+ const prebuilds = require('./prebuilds')
4
+
5
+ function getMismatchedPlatformPackagesInfo(
6
+ platformPackagesDir,
7
+ expectedPlatformPackage
8
+ ) {
9
+ let message = `Checking for platform packages in ${platformPackagesDir} `
10
+ message += `that do not match the expected platform package (${expectedPlatformPackage}).`
11
+ console.log(message)
12
+ let mismatches = []
13
+ try {
14
+ const files = fs.readdirSync(platformPackagesDir)
15
+ files.forEach((file) => {
16
+ if (file === expectedPlatformPackage) {
17
+ return
18
+ }
19
+ const stats = fs.statSync(path.join(platformPackagesDir, file))
20
+ if (!stats.isDirectory()) {
21
+ return
22
+ }
23
+ const filePath = path.join(platformPackagesDir, file)
24
+ const size = getDirectorySize(filePath)
25
+ console.log(`Found mismatch: Path=${filePath}`)
26
+ const platformPackage = path.basename(filePath)
27
+ mismatches.push({
28
+ name: platformPackage,
29
+ dir: filePath,
30
+ size: size,
31
+ })
32
+ })
33
+ } catch (err) {
34
+ console.error(`Error trying to delete mismatched platform packages.`, err)
35
+ }
36
+ return mismatches
37
+ }
38
+
39
+ function getDirectorySize(dir) {
40
+ let size = 0
41
+ const dirContents = fs.readdirSync(dir)
42
+ dirContents.forEach((content) => {
43
+ const contentPath = path.join(dir, content)
44
+ const stats = fs.statSync(contentPath)
45
+ if (stats.isFile()) {
46
+ size += stats.size
47
+ } else if (stats.isDirectory()) {
48
+ size += getDirectorySize(contentPath)
49
+ }
50
+ })
51
+
52
+ return size
53
+ }
54
+
55
+ function getPrebuildsInfo() {
56
+ try {
57
+ const prebuildsInfo = prebuilds.getPrebuildsInfo()
58
+ return prebuildsInfo
59
+ } catch (err) {
60
+ console.error('Error trying to obtain couchbase prebuilds info.', err)
61
+ return undefined
62
+ }
63
+ }
64
+
65
+ function pruneCouchbaseHelp() {
66
+ const prebuildsInfo = getPrebuildsInfo()
67
+ const platformPackagesDir = path.dirname(prebuildsInfo.platformPackageDir)
68
+ const expectedPlatformPackage = path.basename(
69
+ prebuildsInfo.platformPackageDir
70
+ )
71
+
72
+ const mismatchedPlatPkgs = getMismatchedPlatformPackagesInfo(
73
+ platformPackagesDir,
74
+ expectedPlatformPackage
75
+ )
76
+ const cbDeps = {
77
+ dir: path.join(prebuildsInfo.packageDir, 'deps'),
78
+ size: undefined,
79
+ }
80
+ const cbSrc = {
81
+ dir: path.join(prebuildsInfo.packageDir, 'src'),
82
+ size: undefined,
83
+ }
84
+ try {
85
+ cbDeps.size = getDirectorySize(cbDeps.dir)
86
+ } catch (_) {
87
+ console.log('Couchbase deps/ not found.')
88
+ }
89
+ try {
90
+ cbSrc.size = getDirectorySize(cbSrc.dir)
91
+ } catch (_) {
92
+ console.log('Couchbase src/ not found.')
93
+ }
94
+
95
+ console.log('\nRecommendations for pruning:\n')
96
+ if (mismatchedPlatPkgs.length > 0) {
97
+ for (const pkg of mismatchedPlatPkgs) {
98
+ const sizeMb = pkg.size / 1024 / 1024
99
+ console.log(
100
+ `Removing mismatched platform=${pkg.name} (path=${
101
+ pkg.dir
102
+ }) saves ~${sizeMb.toFixed(2)} MB on disk.`
103
+ )
104
+ }
105
+ }
106
+ if (cbDeps.size) {
107
+ const sizeMb = cbDeps.size / 1024 / 1024
108
+ console.log(
109
+ `Removing Couchbase deps/ (path=${cbDeps.dir}) saves ~${sizeMb.toFixed(
110
+ 2
111
+ )} MB on disk.`
112
+ )
113
+ }
114
+ if (cbSrc.size) {
115
+ const sizeMb = cbSrc.size / 1024 / 1024
116
+ console.log(
117
+ `Removing Couchbase src/ (path=${cbSrc.dir}) saves ~${sizeMb.toFixed(
118
+ 2
119
+ )} MB on disk.`
120
+ )
121
+ }
122
+ }
123
+
124
+ pruneCouchbaseHelp()
@@ -3723,7 +3723,7 @@ struct js_to_cbpp_t<couchbase::core::operations::search_request> {
3723
3723
  jsObj.Get("limit"));
3724
3724
  js_to_cbpp<std::optional<std::uint32_t>>(cppObj.skip,
3725
3725
  jsObj.Get("skip"));
3726
- js_to_cbpp<bool>(cppObj.explain, jsObj.Get("explain"));
3726
+ js_to_cbpp<std::optional<bool>>(cppObj.explain, jsObj.Get("explain"));
3727
3727
  js_to_cbpp<bool>(cppObj.disable_scoring, jsObj.Get("disable_scoring"));
3728
3728
  js_to_cbpp<bool>(cppObj.include_locations,
3729
3729
  jsObj.Get("include_locations"));
@@ -3767,7 +3767,8 @@ struct js_to_cbpp_t<couchbase::core::operations::search_request> {
3767
3767
  cbpp_to_js<std::optional<std::uint32_t>>(env, cppObj.limit));
3768
3768
  resObj.Set("skip",
3769
3769
  cbpp_to_js<std::optional<std::uint32_t>>(env, cppObj.skip));
3770
- resObj.Set("explain", cbpp_to_js<bool>(env, cppObj.explain));
3770
+ resObj.Set("explain",
3771
+ cbpp_to_js<std::optional<bool>>(env, cppObj.explain));
3771
3772
  resObj.Set("disable_scoring",
3772
3773
  cbpp_to_js<bool>(env, cppObj.disable_scoring));
3773
3774
  resObj.Set("include_locations",