react-native-nitro-sqlite 9.1.11 → 9.2.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 (112) hide show
  1. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  2. package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
  3. package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
  4. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  5. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  6. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  7. package/android/.gradle/8.9/gc.properties +0 -0
  8. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  9. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  10. package/android/.gradle/vcs-1/gc.properties +0 -0
  11. package/android/CMakeLists.txt +0 -1
  12. package/android/build.gradle +2 -2
  13. package/cpp/NitroSQLiteException.hpp +16 -13
  14. package/cpp/importSqlFile.cpp +2 -2
  15. package/cpp/logs.hpp +14 -12
  16. package/cpp/operations.cpp +29 -28
  17. package/cpp/operations.hpp +1 -1
  18. package/cpp/specs/HybridNativeQueryResult.hpp +1 -1
  19. package/cpp/specs/HybridNitroSQLite.cpp +5 -5
  20. package/cpp/specs/HybridNitroSQLite.hpp +16 -13
  21. package/cpp/sqliteExecuteBatch.cpp +1 -1
  22. package/cpp/types.hpp +3 -3
  23. package/cpp/utils.hpp +2 -3
  24. package/lib/commonjs/DatabaseQueue.js +104 -0
  25. package/lib/commonjs/DatabaseQueue.js.map +1 -0
  26. package/lib/commonjs/NitroSQLiteError.js +50 -0
  27. package/lib/commonjs/NitroSQLiteError.js.map +1 -0
  28. package/lib/commonjs/index.js +9 -1
  29. package/lib/commonjs/index.js.map +1 -1
  30. package/lib/commonjs/nitro.js +1 -2
  31. package/lib/commonjs/nitro.js.map +1 -1
  32. package/lib/commonjs/nullHandling.js +1 -1
  33. package/lib/commonjs/nullHandling.js.map +1 -1
  34. package/lib/commonjs/operations/execute.js +14 -6
  35. package/lib/commonjs/operations/execute.js.map +1 -1
  36. package/lib/commonjs/operations/executeBatch.js +17 -4
  37. package/lib/commonjs/operations/executeBatch.js.map +1 -1
  38. package/lib/commonjs/operations/session.js +17 -15
  39. package/lib/commonjs/operations/session.js.map +1 -1
  40. package/lib/commonjs/operations/transaction.js +26 -54
  41. package/lib/commonjs/operations/transaction.js.map +1 -1
  42. package/lib/commonjs/typeORM.js +1 -2
  43. package/lib/commonjs/typeORM.js.map +1 -1
  44. package/lib/commonjs/types.js.map +1 -1
  45. package/lib/module/DatabaseQueue.js +91 -0
  46. package/lib/module/DatabaseQueue.js.map +1 -0
  47. package/lib/module/NitroSQLiteError.js +45 -0
  48. package/lib/module/NitroSQLiteError.js.map +1 -0
  49. package/lib/module/index.js +2 -1
  50. package/lib/module/index.js.map +1 -1
  51. package/lib/module/nitro.js +0 -1
  52. package/lib/module/nitro.js.map +1 -1
  53. package/lib/module/nullHandling.js +1 -1
  54. package/lib/module/nullHandling.js.map +1 -1
  55. package/lib/module/operations/execute.js +13 -6
  56. package/lib/module/operations/execute.js.map +1 -1
  57. package/lib/module/operations/executeBatch.js +16 -4
  58. package/lib/module/operations/executeBatch.js.map +1 -1
  59. package/lib/module/operations/session.js +17 -14
  60. package/lib/module/operations/session.js.map +1 -1
  61. package/lib/module/operations/transaction.js +25 -54
  62. package/lib/module/operations/transaction.js.map +1 -1
  63. package/lib/module/types.js.map +1 -1
  64. package/lib/typescript/commonjs/DatabaseQueue.d.ts +20 -0
  65. package/lib/typescript/commonjs/DatabaseQueue.d.ts.map +1 -0
  66. package/lib/typescript/commonjs/NitroSQLiteError.d.ts +13 -0
  67. package/lib/typescript/commonjs/NitroSQLiteError.d.ts.map +1 -0
  68. package/lib/typescript/commonjs/index.d.ts +4 -3
  69. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  70. package/lib/typescript/commonjs/nitro.d.ts +0 -5
  71. package/lib/typescript/commonjs/nitro.d.ts.map +1 -1
  72. package/lib/typescript/commonjs/nullHandling.d.ts +1 -1
  73. package/lib/typescript/commonjs/nullHandling.d.ts.map +1 -1
  74. package/lib/typescript/commonjs/operations/execute.d.ts.map +1 -1
  75. package/lib/typescript/commonjs/operations/executeBatch.d.ts.map +1 -1
  76. package/lib/typescript/commonjs/operations/session.d.ts +0 -2
  77. package/lib/typescript/commonjs/operations/session.d.ts.map +1 -1
  78. package/lib/typescript/commonjs/operations/transaction.d.ts +1 -4
  79. package/lib/typescript/commonjs/operations/transaction.d.ts.map +1 -1
  80. package/lib/typescript/commonjs/types.d.ts +1 -1
  81. package/lib/typescript/commonjs/types.d.ts.map +1 -1
  82. package/lib/typescript/module/DatabaseQueue.d.ts +20 -0
  83. package/lib/typescript/module/DatabaseQueue.d.ts.map +1 -0
  84. package/lib/typescript/module/NitroSQLiteError.d.ts +13 -0
  85. package/lib/typescript/module/NitroSQLiteError.d.ts.map +1 -0
  86. package/lib/typescript/module/index.d.ts +4 -3
  87. package/lib/typescript/module/index.d.ts.map +1 -1
  88. package/lib/typescript/module/nitro.d.ts +0 -5
  89. package/lib/typescript/module/nitro.d.ts.map +1 -1
  90. package/lib/typescript/module/nullHandling.d.ts +1 -1
  91. package/lib/typescript/module/nullHandling.d.ts.map +1 -1
  92. package/lib/typescript/module/operations/execute.d.ts.map +1 -1
  93. package/lib/typescript/module/operations/executeBatch.d.ts.map +1 -1
  94. package/lib/typescript/module/operations/session.d.ts +0 -2
  95. package/lib/typescript/module/operations/session.d.ts.map +1 -1
  96. package/lib/typescript/module/operations/transaction.d.ts +1 -4
  97. package/lib/typescript/module/operations/transaction.d.ts.map +1 -1
  98. package/lib/typescript/module/types.d.ts +1 -1
  99. package/lib/typescript/module/types.d.ts.map +1 -1
  100. package/package.json +15 -15
  101. package/src/DatabaseQueue.ts +129 -0
  102. package/src/NitroSQLiteError.ts +45 -0
  103. package/src/index.ts +3 -2
  104. package/src/nitro.ts +0 -6
  105. package/src/nullHandling.ts +8 -4
  106. package/src/operations/execute.ts +27 -19
  107. package/src/operations/executeBatch.ts +30 -10
  108. package/src/operations/session.ts +21 -21
  109. package/src/operations/transaction.ts +42 -85
  110. package/src/specs/NitroSQLite.nitro.ts +5 -5
  111. package/src/typeORM.ts +6 -6
  112. package/src/types.ts +5 -3
File without changes
@@ -0,0 +1,2 @@
1
+ #Tue Oct 07 18:18:23 WEST 2025
2
+ gradle.version=8.9
File without changes
@@ -66,7 +66,6 @@ endif()
66
66
  target_compile_options(
67
67
  ${CMAKE_PROJECT_NAME}
68
68
  PRIVATE
69
- -DLOG_TAG=\"ReactNative\"
70
69
  -fexceptions
71
70
  -frtti
72
71
  -fstack-protector-all
@@ -140,8 +140,8 @@ android {
140
140
  }
141
141
 
142
142
  compileOptions {
143
- sourceCompatibility JavaVersion.VERSION_1_8
144
- targetCompatibility JavaVersion.VERSION_1_8
143
+ sourceCompatibility JavaVersion.VERSION_17
144
+ targetCompatibility JavaVersion.VERSION_17
145
145
  }
146
146
 
147
147
  sourceSets {
@@ -1,8 +1,12 @@
1
1
  #pragma once
2
2
 
3
- #include <string>
4
- #include <iostream>
5
3
  #include <exception>
4
+ #include <iostream>
5
+ #include <string>
6
+ #include <optional>
7
+
8
+ const std::string NITRO_SQLITE_EXCEPTION_PREFIX = "[NativeNitroSQLiteException]";
9
+
6
10
 
7
11
  enum NitroSQLiteExceptionType {
8
12
  UnknownError,
@@ -15,14 +19,13 @@ enum NitroSQLiteExceptionType {
15
19
  };
16
20
 
17
21
  inline std::unordered_map<NitroSQLiteExceptionType, std::string> exceptionTypeStrings = {
18
- {UnknownError, "UnknownError"},
19
- {DatabaseCannotBeOpened, "DatabaseCannotBeOpened"},
20
- {DatabaseNotOpen, "DatabaseNotOpen"},
21
- {UnableToAttachToDatabase, "UnableToAttachToDatabase"},
22
- {SqlExecutionError, "SqlExecutionError"},
23
- {CouldNotLoadFile, "CouldNotLoadFile"},
24
- {NoBatchCommandsProvided, "NoBatchCommandsProvided"}
25
- };
22
+ {UnknownError, "UnknownError"},
23
+ {DatabaseCannotBeOpened, "DatabaseCannotBeOpened"},
24
+ {DatabaseNotOpen, "DatabaseNotOpen"},
25
+ {UnableToAttachToDatabase, "UnableToAttachToDatabase"},
26
+ {SqlExecutionError, "SqlExecutionError"},
27
+ {CouldNotLoadFile, "CouldNotLoadFile"},
28
+ {NoBatchCommandsProvided, "NoBatchCommandsProvided"}};
26
29
 
27
30
  inline std::string typeToString(NitroSQLiteExceptionType type) {
28
31
  return exceptionTypeStrings[type];
@@ -30,11 +33,11 @@ inline std::string typeToString(NitroSQLiteExceptionType type) {
30
33
 
31
34
  class NitroSQLiteException : public std::exception {
32
35
  public:
33
- explicit NitroSQLiteException(const char* message): NitroSQLiteException(NitroSQLiteExceptionType::UnknownError, message) {}
34
- explicit NitroSQLiteException(const std::string& message): NitroSQLiteException(NitroSQLiteExceptionType::UnknownError, message) {}
36
+ explicit NitroSQLiteException(const char* message) : NitroSQLiteException(NitroSQLiteExceptionType::UnknownError, message) {}
37
+ explicit NitroSQLiteException(const std::string& message) : NitroSQLiteException(NitroSQLiteExceptionType::UnknownError, message) {}
35
38
  NitroSQLiteException(const NitroSQLiteExceptionType& type, const char* message) : NitroSQLiteException(type, std::string(message)) {}
36
39
  NitroSQLiteException(const NitroSQLiteExceptionType& type, const std::string& message)
37
- : _exceptionString("[" + typeToString(type) + "] " + message) {}
40
+ : _exceptionString(NITRO_SQLITE_EXCEPTION_PREFIX + "[" + typeToString(type) + "] " + message) {}
38
41
 
39
42
  private:
40
43
  const std::string _exceptionString;
@@ -3,10 +3,10 @@
3
3
  */
4
4
 
5
5
  #include "importSqlFile.hpp"
6
- #include <fstream>
7
- #include <iostream>
8
6
  #include "NitroSQLiteException.hpp"
9
7
  #include "operations.hpp"
8
+ #include <fstream>
9
+ #include <iostream>
10
10
 
11
11
  namespace margelo::rnnitrosqlite {
12
12
 
package/cpp/logs.hpp CHANGED
@@ -1,37 +1,39 @@
1
+ #pragma once
2
+
3
+ #define NITRO_SQLITE_LOG_TAG "react-native-nitro-sqlite"
4
+
1
5
  #ifdef ANDROID
2
6
  // LOGS ANDROID
3
7
  #include <android/log.h>
4
- #define LOG_TAG "react-native-nitro-sqlite"
5
- #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)
6
- #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
7
- #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
8
- #define LOGW(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)
9
- #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
8
+ #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, NITRO_SQLITE_LOG_TAG, __VA_ARGS__)
9
+ #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, NITRO_SQLITE_LOG_TAG, __VA_ARGS__)
10
+ #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, NITRO_SQLITE_LOG_TAG, __VA_ARGS__)
11
+ #define LOGW(...) __android_log_print(ANDROID_LOG_WARN, NITRO_SQLITE_LOG_TAG, __VA_ARGS__)
12
+ #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, NITRO_SQLITE_LOG_TAG, __VA_ARGS__)
10
13
  #define LOGSIMPLE(...)
11
14
  #else
12
15
  // LOGS NO ANDROID
13
16
  #include <stdio.h>
14
- #define LOG_TAG "react-native-nitro-sqlite"
15
17
  #define LOGV(...) \
16
18
  printf(" "); \
17
19
  printf(__VA_ARGS__); \
18
- printf("\t - <%s> \n", LOG_TAG);
20
+ printf("\t - <%s> \n", NITRO_SQLITE_LOG_TAG);
19
21
  #define LOGD(...) \
20
22
  printf(" "); \
21
23
  printf(__VA_ARGS__); \
22
- printf("\t - <%s> \n", LOG_TAG);
24
+ printf("\t - <%s> \n", NITRO_SQLITE_LOG_TAG);
23
25
  #define LOGI(...) \
24
26
  printf(" "); \
25
27
  printf(__VA_ARGS__); \
26
- printf("\t - <%s> \n", LOG_TAG);
28
+ printf("\t - <%s> \n", NITRO_SQLITE_LOG_TAG);
27
29
  #define LOGW(...) \
28
30
  printf(" * Warning: "); \
29
31
  printf(__VA_ARGS__); \
30
- printf("\t - <%s> \n", LOG_TAG);
32
+ printf("\t - <%s> \n", NITRO_SQLITE_LOG_TAG);
31
33
  #define LOGE(...) \
32
34
  printf(" *** Error: "); \
33
35
  printf(__VA_ARGS__); \
34
- printf("\t - <%s> \n", LOG_TAG);
36
+ printf("\t - <%s> \n", NITRO_SQLITE_LOG_TAG);
35
37
  #define LOGSIMPLE(...) \
36
38
  printf(" "); \
37
39
  printf(__VA_ARGS__);
@@ -1,16 +1,16 @@
1
1
  #include "operations.hpp"
2
+ #include "NitroSQLiteException.hpp"
2
3
  #include "logs.hpp"
3
4
  #include "utils.hpp"
4
5
  #include <NitroModules/ArrayBuffer.hpp>
5
6
  #include <cmath>
6
7
  #include <ctime>
7
8
  #include <iostream>
8
- #include <optional>
9
9
  #include <map>
10
+ #include <optional>
10
11
  #include <sqlite3.h>
11
12
  #include <sstream>
12
13
  #include <unistd.h>
13
- #include "NitroSQLiteException.hpp"
14
14
 
15
15
  using namespace facebook;
16
16
  using namespace margelo::nitro;
@@ -59,7 +59,7 @@ void sqliteCloseAll() {
59
59
  }
60
60
 
61
61
  void sqliteAttachDb(const std::string& mainDBName, const std::string& docPath, const std::string& databaseToAttach,
62
- const std::string& alias) {
62
+ const std::string& alias) {
63
63
  /**
64
64
  * There is no need to check if mainDBName is opened because sqliteExecuteLiteral will do that.
65
65
  * */
@@ -69,7 +69,8 @@ void sqliteAttachDb(const std::string& mainDBName, const std::string& docPath, c
69
69
  try {
70
70
  sqliteExecuteLiteral(mainDBName, statement);
71
71
  } catch (NitroSQLiteException& e) {
72
- throw NitroSQLiteException(NitroSQLiteExceptionType::UnableToAttachToDatabase, mainDBName + " was unable to attach another database: " + std::string(e.what()));
72
+ throw NitroSQLiteException(NitroSQLiteExceptionType::UnableToAttachToDatabase,
73
+ mainDBName + " was unable to attach another database: " + std::string(e.what()));
73
74
  }
74
75
  }
75
76
 
@@ -82,7 +83,8 @@ void sqliteDetachDb(const std::string& mainDBName, const std::string& alias) {
82
83
  try {
83
84
  sqliteExecuteLiteral(mainDBName, statement);
84
85
  } catch (NitroSQLiteException& e) {
85
- throw NitroSQLiteException(NitroSQLiteExceptionType::UnableToAttachToDatabase, mainDBName + " was unable to detach database: " + std::string(e.what()));
86
+ throw NitroSQLiteException(NitroSQLiteExceptionType::UnableToAttachToDatabase,
87
+ mainDBName + " was unable to detach database: " + std::string(e.what()));
86
88
  }
87
89
  }
88
90
 
@@ -101,7 +103,7 @@ void sqliteRemoveDb(const std::string& dbName, const std::string& docPath) {
101
103
 
102
104
  void bindStatement(sqlite3_stmt* statement, const SQLiteQueryParams& values) {
103
105
  for (int valueIndex = 0; valueIndex < values.size(); valueIndex++) {
104
- int sqliteIndex = valueIndex+1;
106
+ int sqliteIndex = valueIndex + 1;
105
107
  SQLiteValue value = values.at(valueIndex);
106
108
  if (std::holds_alternative<SQLiteNullValue>(value)) {
107
109
  sqlite3_bind_null(statement, sqliteIndex);
@@ -119,7 +121,8 @@ void bindStatement(sqlite3_stmt* statement, const SQLiteQueryParams& values) {
119
121
  }
120
122
  }
121
123
 
122
- SQLiteExecuteQueryResult sqliteExecute(const std::string& dbName, const std::string& query, const std::optional<SQLiteQueryParams>& params) {
124
+ SQLiteExecuteQueryResult sqliteExecute(const std::string& dbName, const std::string& query,
125
+ const std::optional<SQLiteQueryParams>& params) {
123
126
  if (dbMap.count(dbName) == 0) {
124
127
  throw NitroSQLiteException::DatabaseNotOpen(dbName);
125
128
  }
@@ -196,21 +199,21 @@ SQLiteExecuteQueryResult sqliteExecute(const std::string& dbName, const std::str
196
199
  results.push_back(std::move(row));
197
200
  break;
198
201
  case SQLITE_DONE:
199
- i = 0;
200
- count = sqlite3_column_count(statement);
201
- while (i < count) {
202
- column_name = sqlite3_column_name(statement, i);
203
- const char* tp = sqlite3_column_decltype(statement, i);
204
- column_declared_type = mapSQLiteTypeToColumnType(tp);
205
- auto columnMeta = SQLiteQueryColumnMetadata(std::move(column_name), std::move(column_declared_type), i);
206
-
207
- if (!metadata) {
208
- metadata = std::make_optional<SQLiteQueryTableMetadata>();
209
- }
210
- metadata->insert({column_name, columnMeta});
211
- i++;
202
+ i = 0;
203
+ count = sqlite3_column_count(statement);
204
+ while (i < count) {
205
+ column_name = sqlite3_column_name(statement, i);
206
+ const char* tp = sqlite3_column_decltype(statement, i);
207
+ column_declared_type = mapSQLiteTypeToColumnType(tp);
208
+ auto columnMeta = SQLiteQueryColumnMetadata(std::move(column_name), std::move(column_declared_type), i);
209
+
210
+ if (!metadata) {
211
+ metadata = std::make_optional<SQLiteQueryTableMetadata>();
212
212
  }
213
- isConsuming = false;
213
+ metadata->insert({column_name, columnMeta});
214
+ i++;
215
+ }
216
+ isConsuming = false;
214
217
  break;
215
218
  default:
216
219
  isFailed = true;
@@ -226,12 +229,10 @@ SQLiteExecuteQueryResult sqliteExecute(const std::string& dbName, const std::str
226
229
 
227
230
  int rowsAffected = sqlite3_changes(db);
228
231
  long long latestInsertRowId = sqlite3_last_insert_rowid(db);
229
- return {
230
- .rowsAffected = rowsAffected,
231
- .insertId = static_cast<double>(latestInsertRowId),
232
- .results = std::move(results),
233
- .metadata = std::move(metadata)
234
- };
232
+ return {.rowsAffected = rowsAffected,
233
+ .insertId = static_cast<double>(latestInsertRowId),
234
+ .results = std::move(results),
235
+ .metadata = std::move(metadata)};
235
236
  }
236
237
 
237
238
  SQLiteOperationResult sqliteExecuteLiteral(const std::string& dbName, const std::string& query) {
@@ -256,7 +257,7 @@ SQLiteOperationResult sqliteExecuteLiteral(const std::string& dbName, const std:
256
257
  bool isConsuming = true;
257
258
  bool isFailed = false;
258
259
 
259
- int result, i, count, column_type;
260
+ int result;
260
261
  std::string column_name;
261
262
 
262
263
  while (isConsuming) {
@@ -11,7 +11,7 @@ void sqliteCloseDb(const std::string& dbName);
11
11
  void sqliteRemoveDb(const std::string& dbName, const std::string& docPath);
12
12
 
13
13
  void sqliteAttachDb(const std::string& mainDBName, const std::string& docPath, const std::string& databaseToAttach,
14
- const std::string& alias);
14
+ const std::string& alias);
15
15
 
16
16
  void sqliteDetachDb(const std::string& mainDBName, const std::string& alias);
17
17
 
@@ -11,7 +11,7 @@ namespace margelo::nitro::rnnitrosqlite {
11
11
  class HybridNativeQueryResult : public HybridNativeQueryResultSpec {
12
12
  public:
13
13
  HybridNativeQueryResult() : HybridObject(TAG) {}
14
- HybridNativeQueryResult(SQLiteExecuteQueryResult&& result): HybridObject(TAG), _result(std::move(result)) {}
14
+ HybridNativeQueryResult(SQLiteExecuteQueryResult&& result) : HybridObject(TAG), _result(std::move(result)) {}
15
15
 
16
16
  private:
17
17
  SQLiteExecuteQueryResult _result;
@@ -1,11 +1,11 @@
1
1
  #include "HybridNitroSQLite.hpp"
2
2
  #include "HybridNativeQueryResult.hpp"
3
3
  #include "NitroSQLiteException.hpp"
4
+ #include "importSqlFile.hpp"
4
5
  #include "logs.hpp"
5
6
  #include "macros.hpp"
6
- #include "sqliteExecuteBatch.hpp"
7
- #include "importSqlFile.hpp"
8
7
  #include "operations.hpp"
8
+ #include "sqliteExecuteBatch.hpp"
9
9
  #include <iostream>
10
10
  #include <map>
11
11
  #include <string>
@@ -53,13 +53,13 @@ void HybridNitroSQLite::detach(const std::string& mainDbName, const std::string&
53
53
  using ExecuteQueryResult = std::shared_ptr<HybridNativeQueryResultSpec>;
54
54
 
55
55
  ExecuteQueryResult HybridNitroSQLite::execute(const std::string& dbName, const std::string& query,
56
- const std::optional<SQLiteQueryParams>& params) {
56
+ const std::optional<SQLiteQueryParams>& params) {
57
57
  SQLiteExecuteQueryResult result = sqliteExecute(dbName, query, params);
58
58
  return std::make_shared<HybridNativeQueryResult>(std::move(result));
59
59
  };
60
60
 
61
- std::shared_ptr<Promise<std::shared_ptr<HybridNativeQueryResultSpec>>> HybridNitroSQLite::executeAsync(const std::string& dbName, const std::string& query,
62
- const std::optional<SQLiteQueryParams>& params) {
61
+ std::shared_ptr<Promise<std::shared_ptr<HybridNativeQueryResultSpec>>>
62
+ HybridNitroSQLite::executeAsync(const std::string& dbName, const std::string& query, const std::optional<SQLiteQueryParams>& params) {
63
63
  return Promise<std::shared_ptr<HybridNativeQueryResultSpec>>::async([=, this]() -> std::shared_ptr<HybridNativeQueryResultSpec> {
64
64
  auto result = execute(dbName, query, params);
65
65
  return result;
@@ -1,7 +1,7 @@
1
1
  #pragma once
2
2
 
3
- #include "HybridNitroSQLiteSpec.hpp"
4
3
  #include "HybridNativeQueryResultSpec.hpp"
4
+ #include "HybridNitroSQLiteSpec.hpp"
5
5
  #include "types.hpp"
6
6
 
7
7
  using namespace margelo::rnnitrosqlite;
@@ -13,28 +13,31 @@ public:
13
13
  HybridNitroSQLite() : HybridObject(TAG) {}
14
14
 
15
15
  public:
16
- static std::string docPath;
16
+ static std::string docPath;
17
17
 
18
18
  public:
19
19
  // Methods
20
20
  void open(const std::string& dbName, const std::optional<std::string>& location) override;
21
-
21
+
22
22
  void close(const std::string& dbName) override;
23
-
23
+
24
24
  void drop(const std::string& dbName, const std::optional<std::string>& location) override;
25
-
25
+
26
26
  void attach(const std::string& mainDbName, const std::string& dbNameToAttach, const std::string& alias,
27
27
  const std::optional<std::string>& location) override;
28
-
28
+
29
29
  void detach(const std::string& mainDbName, const std::string& alias) override;
30
-
31
- std::shared_ptr<HybridNativeQueryResultSpec> execute(const std::string& dbName, const std::string& query, const std::optional<SQLiteQueryParams>& params) override;
32
-
33
- std::shared_ptr<Promise<std::shared_ptr<HybridNativeQueryResultSpec>>> executeAsync(const std::string& dbName, const std::string& query, const std::optional<SQLiteQueryParams>& params) override;
34
-
30
+
31
+ std::shared_ptr<HybridNativeQueryResultSpec> execute(const std::string& dbName, const std::string& query,
32
+ const std::optional<SQLiteQueryParams>& params) override;
33
+
34
+ std::shared_ptr<Promise<std::shared_ptr<HybridNativeQueryResultSpec>>>
35
+ executeAsync(const std::string& dbName, const std::string& query, const std::optional<SQLiteQueryParams>& params) override;
36
+
35
37
  BatchQueryResult executeBatch(const std::string& dbName, const std::vector<NativeBatchQueryCommand>& commands) override;
36
- std::shared_ptr<Promise<BatchQueryResult>> executeBatchAsync(const std::string& dbName, const std::vector<NativeBatchQueryCommand>& commands) override;
37
-
38
+ std::shared_ptr<Promise<BatchQueryResult>> executeBatchAsync(const std::string& dbName,
39
+ const std::vector<NativeBatchQueryCommand>& commands) override;
40
+
38
41
  FileLoadResult loadFile(const std::string& dbName, const std::string& location) override;
39
42
  std::shared_ptr<Promise<FileLoadResult>> loadFileAsync(const std::string& dbName, const std::string& location) override;
40
43
  };
@@ -2,9 +2,9 @@
2
2
  * SQL Batch execution implementation using default sqliteBridge implementation
3
3
  */
4
4
  #include "sqliteExecuteBatch.hpp"
5
+ #include "NitroSQLiteException.hpp"
5
6
  #include "operations.hpp"
6
7
  #include <utility>
7
- #include "NitroSQLiteException.hpp"
8
8
 
9
9
  namespace margelo::rnnitrosqlite {
10
10
 
package/cpp/types.hpp CHANGED
@@ -1,10 +1,10 @@
1
1
  #pragma once
2
2
 
3
- #include <string>
4
- #include <NitroModules/ArrayBuffer.hpp>
5
- #include "SQLiteQueryColumnMetadata.hpp"
6
3
  #include "ColumnType.hpp"
7
4
  #include "SQLiteNullValue.hpp"
5
+ #include "SQLiteQueryColumnMetadata.hpp"
6
+ #include <NitroModules/ArrayBuffer.hpp>
7
+ #include <string>
8
8
 
9
9
  using namespace margelo::nitro;
10
10
  using namespace margelo::nitro::rnnitrosqlite;
package/cpp/utils.hpp CHANGED
@@ -1,8 +1,7 @@
1
1
  #pragma once
2
2
 
3
-
4
- #include <sys/stat.h>
5
3
  #include <string>
4
+ #include <sys/stat.h>
6
5
 
7
6
  namespace margelo::rnnitrosqlite {
8
7
 
@@ -58,4 +57,4 @@ std::string get_db_path(const std::string& dbName, const std::string& docPath) {
58
57
  return docPath + "/" + dbName;
59
58
  }
60
59
 
61
- }
60
+ } // namespace margelo::rnnitrosqlite
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.closeDatabase = closeDatabase;
7
+ exports.closeDatabaseQueue = closeDatabaseQueue;
8
+ exports.getDatabaseQueue = getDatabaseQueue;
9
+ exports.isDatabaseOpen = isDatabaseOpen;
10
+ exports.openDatabase = openDatabase;
11
+ exports.openDatabaseQueue = openDatabaseQueue;
12
+ exports.queueOperationAsync = queueOperationAsync;
13
+ exports.startOperationSync = startOperationSync;
14
+ exports.throwIfDatabaseIsNotOpen = throwIfDatabaseIsNotOpen;
15
+ var _NitroSQLiteError = _interopRequireDefault(require("./NitroSQLiteError.js"));
16
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
+ const databaseQueues = new Map();
18
+ function openDatabaseQueue(dbName) {
19
+ if (isDatabaseOpen(dbName)) {
20
+ throw new _NitroSQLiteError.default(`Database ${dbName} is already open. There is already a connection to the database.`);
21
+ }
22
+ databaseQueues.set(dbName, {
23
+ queue: [],
24
+ inProgress: false
25
+ });
26
+ }
27
+ function closeDatabaseQueue(dbName) {
28
+ const databaseQueue = getDatabaseQueue(dbName);
29
+ if (databaseQueue.inProgress || databaseQueue.queue.length > 0) {
30
+ console.warn(`Database queue for ${dbName} has operations in the queue. Closing anyway.`);
31
+ }
32
+ databaseQueues.delete(dbName);
33
+ }
34
+ function isDatabaseOpen(dbName) {
35
+ return databaseQueues.has(dbName);
36
+ }
37
+ function throwIfDatabaseIsNotOpen(dbName) {
38
+ if (!isDatabaseOpen(dbName)) throw new _NitroSQLiteError.default(`Database ${dbName} is not open. There is no connection to the database.`);
39
+ }
40
+ function getDatabaseQueue(dbName) {
41
+ throwIfDatabaseIsNotOpen(dbName);
42
+ const queue = databaseQueues.get(dbName);
43
+ return queue;
44
+ }
45
+ function openDatabase(dbName) {
46
+ databaseQueues.set(dbName, {
47
+ queue: [],
48
+ inProgress: false
49
+ });
50
+ }
51
+ function closeDatabase(dbName) {
52
+ databaseQueues.delete(dbName);
53
+ }
54
+ function queueOperationAsync(dbName, callback) {
55
+ const databaseQueue = getDatabaseQueue(dbName);
56
+ return new Promise((resolve, reject) => {
57
+ async function start() {
58
+ try {
59
+ const result = await callback();
60
+ resolve(result);
61
+ } catch (error) {
62
+ reject(error);
63
+ } finally {
64
+ databaseQueue.inProgress = false;
65
+ startOperationAsync(dbName);
66
+ }
67
+ }
68
+ const operation = {
69
+ start
70
+ };
71
+ databaseQueue.queue.push(operation);
72
+ startOperationAsync(dbName);
73
+ });
74
+ }
75
+ function startOperationAsync(dbName) {
76
+ const queue = getDatabaseQueue(dbName);
77
+
78
+ // Queue is empty or in progress. Bail out.
79
+ if (queue.inProgress || queue.queue.length === 0) {
80
+ return;
81
+ }
82
+ queue.inProgress = true;
83
+ const operation = queue.queue.shift();
84
+ setImmediate(() => {
85
+ operation.start();
86
+ });
87
+ }
88
+ function startOperationSync(dbName, callback) {
89
+ const databaseQueue = getDatabaseQueue(dbName);
90
+
91
+ // Database is busy - cannot execute synchronously
92
+ if (databaseQueue.inProgress || databaseQueue.queue.length > 0) {
93
+ throw new _NitroSQLiteError.default(`Cannot run synchronous operation on database. Database ${dbName} is busy with another operation.`);
94
+ }
95
+
96
+ // Execute synchronously
97
+ databaseQueue.inProgress = true;
98
+ try {
99
+ return callback();
100
+ } finally {
101
+ databaseQueue.inProgress = false;
102
+ }
103
+ }
104
+ //# sourceMappingURL=DatabaseQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_NitroSQLiteError","_interopRequireDefault","require","e","__esModule","default","databaseQueues","Map","openDatabaseQueue","dbName","isDatabaseOpen","NitroSQLiteError","set","queue","inProgress","closeDatabaseQueue","databaseQueue","getDatabaseQueue","length","console","warn","delete","has","throwIfDatabaseIsNotOpen","get","openDatabase","closeDatabase","queueOperationAsync","callback","Promise","resolve","reject","start","result","error","startOperationAsync","operation","push","shift","setImmediate","startOperationSync"],"sourceRoot":"../../src","sources":["DatabaseQueue.ts"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,iBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAcjD,MAAMG,cAAc,GAAG,IAAIC,GAAG,CAAwB,CAAC;AAEhD,SAASC,iBAAiBA,CAACC,MAAc,EAAE;EAChD,IAAIC,cAAc,CAACD,MAAM,CAAC,EAAE;IAC1B,MAAM,IAAIE,yBAAgB,CACxB,YAAYF,MAAM,kEACpB,CAAC;EACH;EAEAH,cAAc,CAACM,GAAG,CAACH,MAAM,EAAE;IAAEI,KAAK,EAAE,EAAE;IAAEC,UAAU,EAAE;EAAM,CAAC,CAAC;AAC9D;AAEO,SAASC,kBAAkBA,CAACN,MAAc,EAAE;EACjD,MAAMO,aAAa,GAAGC,gBAAgB,CAACR,MAAM,CAAC;EAE9C,IAAIO,aAAa,CAACF,UAAU,IAAIE,aAAa,CAACH,KAAK,CAACK,MAAM,GAAG,CAAC,EAAE;IAC9DC,OAAO,CAACC,IAAI,CACV,sBAAsBX,MAAM,+CAC9B,CAAC;EACH;EAEAH,cAAc,CAACe,MAAM,CAACZ,MAAM,CAAC;AAC/B;AAEO,SAASC,cAAcA,CAACD,MAAc,EAAE;EAC7C,OAAOH,cAAc,CAACgB,GAAG,CAACb,MAAM,CAAC;AACnC;AAEO,SAASc,wBAAwBA,CAACd,MAAc,EAAE;EACvD,IAAI,CAACC,cAAc,CAACD,MAAM,CAAC,EACzB,MAAM,IAAIE,yBAAgB,CACxB,YAAYF,MAAM,uDACpB,CAAC;AACL;AAEO,SAASQ,gBAAgBA,CAACR,MAAc,EAAE;EAC/Cc,wBAAwB,CAACd,MAAM,CAAC;EAEhC,MAAMI,KAAK,GAAGP,cAAc,CAACkB,GAAG,CAACf,MAAM,CAAE;EACzC,OAAOI,KAAK;AACd;AAEO,SAASY,YAAYA,CAAChB,MAAc,EAAE;EAC3CH,cAAc,CAACM,GAAG,CAACH,MAAM,EAAE;IAAEI,KAAK,EAAE,EAAE;IAAEC,UAAU,EAAE;EAAM,CAAC,CAAC;AAC9D;AAEO,SAASY,aAAaA,CAACjB,MAAc,EAAE;EAC5CH,cAAc,CAACe,MAAM,CAACZ,MAAM,CAAC;AAC/B;AAEO,SAASkB,mBAAmBA,CACjClB,MAAc,EACdmB,QAA+B,EAC/B;EACA,MAAMZ,aAAa,GAAGC,gBAAgB,CAACR,MAAM,CAAC;EAE9C,OAAO,IAAIoB,OAAO,CAAS,CAACC,OAAO,EAAEC,MAAM,KAAK;IAC9C,eAAeC,KAAKA,CAAA,EAAG;MACrB,IAAI;QACF,MAAMC,MAAM,GAAG,MAAML,QAAQ,CAAC,CAAC;QAC/BE,OAAO,CAACG,MAAM,CAAC;MACjB,CAAC,CAAC,OAAOC,KAAK,EAAE;QACdH,MAAM,CAACG,KAAK,CAAC;MACf,CAAC,SAAS;QACRlB,aAAa,CAACF,UAAU,GAAG,KAAK;QAChCqB,mBAAmB,CAAC1B,MAAM,CAAC;MAC7B;IACF;IAEA,MAAM2B,SAA0B,GAAG;MACjCJ;IACF,CAAC;IAEDhB,aAAa,CAACH,KAAK,CAACwB,IAAI,CAACD,SAAS,CAAC;IACnCD,mBAAmB,CAAC1B,MAAM,CAAC;EAC7B,CAAC,CAAC;AACJ;AAEA,SAAS0B,mBAAmBA,CAAC1B,MAAc,EAAE;EAC3C,MAAMI,KAAK,GAAGI,gBAAgB,CAACR,MAAM,CAAC;;EAEtC;EACA,IAAII,KAAK,CAACC,UAAU,IAAID,KAAK,CAACA,KAAK,CAACK,MAAM,KAAK,CAAC,EAAE;IAChD;EACF;EAEAL,KAAK,CAACC,UAAU,GAAG,IAAI;EAEvB,MAAMsB,SAAS,GAAGvB,KAAK,CAACA,KAAK,CAACyB,KAAK,CAAC,CAAE;EACtCC,YAAY,CAAC,MAAM;IACjBH,SAAS,CAACJ,KAAK,CAAC,CAAC;EACnB,CAAC,CAAC;AACJ;AAEO,SAASQ,kBAAkBA,CAGhC/B,MAAc,EAAEmB,QAA2B,EAAE;EAC7C,MAAMZ,aAAa,GAAGC,gBAAgB,CAACR,MAAM,CAAC;;EAE9C;EACA,IAAIO,aAAa,CAACF,UAAU,IAAIE,aAAa,CAACH,KAAK,CAACK,MAAM,GAAG,CAAC,EAAE;IAC9D,MAAM,IAAIP,yBAAgB,CACxB,0DAA0DF,MAAM,kCAClE,CAAC;EACH;;EAEA;EACAO,aAAa,CAACF,UAAU,GAAG,IAAI;EAC/B,IAAI;IACF,OAAOc,QAAQ,CAAC,CAAC;EACnB,CAAC,SAAS;IACRZ,aAAa,CAACF,UAAU,GAAG,KAAK;EAClC;AACF","ignoreList":[]}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ const NITRO_SQLITE_ERROR_NAME = 'NitroSQLiteError';
8
+
9
+ /**
10
+ * Custom error class for NitroSQLite operations
11
+ * Extends the native Error class with proper prototype chain and error handling
12
+ */
13
+ class NitroSQLiteError extends Error {
14
+ constructor(message, options) {
15
+ super(message, options);
16
+ this.name = NITRO_SQLITE_ERROR_NAME;
17
+
18
+ // Maintains proper prototype chain for instanceof checks
19
+ Object.setPrototypeOf(this, NitroSQLiteError.prototype);
20
+ }
21
+
22
+ /**
23
+ * Converts an unknown error to a NitroSQLiteError
24
+ * Preserves stack traces and error causes when available
25
+ */
26
+ static fromError(error) {
27
+ if (error instanceof NitroSQLiteError) {
28
+ return error;
29
+ }
30
+ if (error instanceof Error) {
31
+ const nitroSQLiteError = new NitroSQLiteError(error.message, {
32
+ cause: error.cause
33
+ });
34
+
35
+ // Preserve original stack trace if available
36
+ if (error.stack) {
37
+ nitroSQLiteError.stack = error.stack;
38
+ }
39
+ return nitroSQLiteError;
40
+ }
41
+ if (typeof error === 'string') {
42
+ return new NitroSQLiteError(error);
43
+ }
44
+ return new NitroSQLiteError('Unknown error occurred', {
45
+ cause: error
46
+ });
47
+ }
48
+ }
49
+ exports.default = NitroSQLiteError;
50
+ //# sourceMappingURL=NitroSQLiteError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NITRO_SQLITE_ERROR_NAME","NitroSQLiteError","Error","constructor","message","options","name","Object","setPrototypeOf","prototype","fromError","error","nitroSQLiteError","cause","stack","exports","default"],"sourceRoot":"../../src","sources":["NitroSQLiteError.ts"],"mappings":";;;;;;AAAA,MAAMA,uBAAuB,GAAG,kBAA2B;;AAE3D;AACA;AACA;AACA;AACe,MAAMC,gBAAgB,SAASC,KAAK,CAAC;EAClDC,WAAWA,CAACC,OAAe,EAAEC,OAAsB,EAAE;IACnD,KAAK,CAACD,OAAO,EAAEC,OAAO,CAAC;IACvB,IAAI,CAACC,IAAI,GAAGN,uBAAuB;;IAEnC;IACAO,MAAM,CAACC,cAAc,CAAC,IAAI,EAAEP,gBAAgB,CAACQ,SAAS,CAAC;EACzD;;EAEA;AACF;AACA;AACA;EACE,OAAOC,SAASA,CAACC,KAAc,EAAoB;IACjD,IAAIA,KAAK,YAAYV,gBAAgB,EAAE;MACrC,OAAOU,KAAK;IACd;IAEA,IAAIA,KAAK,YAAYT,KAAK,EAAE;MAC1B,MAAMU,gBAAgB,GAAG,IAAIX,gBAAgB,CAACU,KAAK,CAACP,OAAO,EAAE;QAC3DS,KAAK,EAAEF,KAAK,CAACE;MACf,CAAC,CAAC;;MAEF;MACA,IAAIF,KAAK,CAACG,KAAK,EAAE;QACfF,gBAAgB,CAACE,KAAK,GAAGH,KAAK,CAACG,KAAK;MACtC;MACA,OAAOF,gBAAgB;IACzB;IAEA,IAAI,OAAOD,KAAK,KAAK,QAAQ,EAAE;MAC7B,OAAO,IAAIV,gBAAgB,CAACU,KAAK,CAAC;IACpC;IAEA,OAAO,IAAIV,gBAAgB,CAAC,wBAAwB,EAAE;MACpDY,KAAK,EAAEF;IACT,CAAC,CAAC;EACJ;AACF;AAACI,OAAA,CAAAC,OAAA,GAAAf,gBAAA","ignoreList":[]}
@@ -10,6 +10,12 @@ Object.defineProperty(exports, "NITRO_SQLITE_NULL", {
10
10
  }
11
11
  });
12
12
  exports.NitroSQLite = void 0;
13
+ Object.defineProperty(exports, "NitroSQLiteError", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _NitroSQLiteError.default;
17
+ }
18
+ });
13
19
  Object.defineProperty(exports, "enableSimpleNullHandling", {
14
20
  enumerable: true,
15
21
  get: function () {
@@ -46,8 +52,10 @@ var _session = require("./operations/session.js");
46
52
  var _execute = require("./operations/execute.js");
47
53
  var _OnLoad = require("./OnLoad");
48
54
  var _executeBatch = require("./operations/executeBatch.js");
49
- var _typeORM = require("./typeORM.js");
50
55
  var _nullHandling = require("./nullHandling.js");
56
+ var _NitroSQLiteError = _interopRequireDefault(require("./NitroSQLiteError.js"));
57
+ var _typeORM = require("./typeORM.js");
58
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
51
59
  (0, _OnLoad.init)();
52
60
  const NitroSQLite = exports.NitroSQLite = {
53
61
  ..._nitro.HybridNitroSQLite,
@@ -1 +1 @@
1
- {"version":3,"names":["_transaction","require","_nitro","_session","_execute","_OnLoad","_executeBatch","_typeORM","_nullHandling","init","NitroSQLite","exports","HybridNitroSQLite","native","open","transaction","execute","executeAsync","executeBatch","executeBatchAsync"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AAEA,IAAAM,QAAA,GAAAN,OAAA;AAmBA,IAAAO,aAAA,GAAAP,OAAA;AAjBA,IAAAQ,YAAI,EAAC,CAAC;AAEC,MAAMC,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG;EACzB,GAAGE,wBAAiB;EACpBC,MAAM,EAAED,wBAAiB;EACzB;EACA;EACAE,IAAI,EAAJA,aAAI;EACJ;EACAC,WAAW,EAAXA,wBAAW;EACXC,OAAO,EAAPA,gBAAO;EACPC,YAAY,EAAZA,qBAAY;EACZC,YAAY,EAAZA,0BAAY;EACZC,iBAAiB,EAAjBA;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_transaction","require","_nitro","_session","_execute","_OnLoad","_executeBatch","_nullHandling","_NitroSQLiteError","_interopRequireDefault","_typeORM","e","__esModule","default","init","NitroSQLite","exports","HybridNitroSQLite","native","open","transaction","execute","executeAsync","executeBatch","executeBatchAsync"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AAmBA,IAAAM,aAAA,GAAAN,OAAA;AAMA,IAAAO,iBAAA,GAAAC,sBAAA,CAAAR,OAAA;AAEA,IAAAS,QAAA,GAAAT,OAAA;AAAyC,SAAAQ,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAzBzC,IAAAG,YAAI,EAAC,CAAC;AAEC,MAAMC,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG;EACzB,GAAGE,wBAAiB;EACpBC,MAAM,EAAED,wBAAiB;EACzB;EACA;EACAE,IAAI,EAAJA,aAAI;EACJ;EACAC,WAAW,EAAXA,wBAAW;EACXC,OAAO,EAAPA,gBAAO;EACPC,YAAY,EAAZA,qBAAY;EACZC,YAAY,EAAZA,0BAAY;EACZC,iBAAiB,EAAjBA;AACF,CAAC","ignoreList":[]}