@blazedpath/commons 0.0.4

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 (224) hide show
  1. package/README.md +3 -0
  2. package/blz-base/health/index.js +215 -0
  3. package/blz-base/index.js +1466 -0
  4. package/blz-cache/LruCache.js +44 -0
  5. package/blz-cache/index.js +29 -0
  6. package/blz-config/index.js +434 -0
  7. package/blz-core/index.js +364 -0
  8. package/blz-cryptography/index.js +54 -0
  9. package/blz-datetimes/index.js +356 -0
  10. package/blz-file/example.dat +2545 -0
  11. package/blz-file/fileService.js +205 -0
  12. package/blz-file/index.js +94 -0
  13. package/blz-file/index.test.js +31 -0
  14. package/blz-file/lab.js +33 -0
  15. package/blz-hazelcast/index.js +189 -0
  16. package/blz-hazelcast/lib/credentials.js +25 -0
  17. package/blz-hazelcast/lib/credentialsFactory.js +12 -0
  18. package/blz-hazelcast/lib/hazelcastCache.js +234 -0
  19. package/blz-iterable/index.js +446 -0
  20. package/blz-json-schema/index.js +11 -0
  21. package/blz-jwt/index.js +121 -0
  22. package/blz-kafka/index.js +522 -0
  23. package/blz-math/index.js +131 -0
  24. package/blz-mongodb/index.js +326 -0
  25. package/blz-rds/__test__/scape.test.js +58 -0
  26. package/blz-rds/blz-rds-executor.js +578 -0
  27. package/blz-rds/blz-rds-helper.js +310 -0
  28. package/blz-rds/commands/core/add.js +13 -0
  29. package/blz-rds/commands/core/and.js +18 -0
  30. package/blz-rds/commands/core/asc.js +10 -0
  31. package/blz-rds/commands/core/avg.js +10 -0
  32. package/blz-rds/commands/core/column-ref.js +8 -0
  33. package/blz-rds/commands/core/count-distinct.js +10 -0
  34. package/blz-rds/commands/core/count.js +10 -0
  35. package/blz-rds/commands/core/decimal.js +8 -0
  36. package/blz-rds/commands/core/desc.js +10 -0
  37. package/blz-rds/commands/core/distinct.js +10 -0
  38. package/blz-rds/commands/core/divide.js +11 -0
  39. package/blz-rds/commands/core/embedded-exists.js +17 -0
  40. package/blz-rds/commands/core/embedded-select.js +17 -0
  41. package/blz-rds/commands/core/equals.js +9 -0
  42. package/blz-rds/commands/core/false.js +8 -0
  43. package/blz-rds/commands/core/greater-or-equal.js +9 -0
  44. package/blz-rds/commands/core/greater.js +9 -0
  45. package/blz-rds/commands/core/in.js +9 -0
  46. package/blz-rds/commands/core/integer.js +8 -0
  47. package/blz-rds/commands/core/is-not-null.js +11 -0
  48. package/blz-rds/commands/core/is-null-or-value.js +10 -0
  49. package/blz-rds/commands/core/is-null.js +11 -0
  50. package/blz-rds/commands/core/less-or-equal.js +9 -0
  51. package/blz-rds/commands/core/less-unary.js +12 -0
  52. package/blz-rds/commands/core/less.js +9 -0
  53. package/blz-rds/commands/core/like.js +12 -0
  54. package/blz-rds/commands/core/max.js +10 -0
  55. package/blz-rds/commands/core/min.js +10 -0
  56. package/blz-rds/commands/core/multiply.js +13 -0
  57. package/blz-rds/commands/core/not-equals.js +9 -0
  58. package/blz-rds/commands/core/not-in.js +9 -0
  59. package/blz-rds/commands/core/not.js +13 -0
  60. package/blz-rds/commands/core/null.js +8 -0
  61. package/blz-rds/commands/core/nvl.js +11 -0
  62. package/blz-rds/commands/core/or.js +13 -0
  63. package/blz-rds/commands/core/parameter.js +34 -0
  64. package/blz-rds/commands/core/remainder.js +16 -0
  65. package/blz-rds/commands/core/string.js +8 -0
  66. package/blz-rds/commands/core/subtract.js +13 -0
  67. package/blz-rds/commands/core/sum.js +10 -0
  68. package/blz-rds/commands/core/true.js +8 -0
  69. package/blz-rds/commands/core/tuple.js +13 -0
  70. package/blz-rds/commands/datetimes/add-days.js +11 -0
  71. package/blz-rds/commands/datetimes/add-hours.js +11 -0
  72. package/blz-rds/commands/datetimes/add-milliseconds.js +11 -0
  73. package/blz-rds/commands/datetimes/add-minutes.js +11 -0
  74. package/blz-rds/commands/datetimes/add-months.js +11 -0
  75. package/blz-rds/commands/datetimes/add-seconds.js +11 -0
  76. package/blz-rds/commands/datetimes/add-years.js +11 -0
  77. package/blz-rds/commands/datetimes/date-diff.js +11 -0
  78. package/blz-rds/commands/datetimes/date.js +12 -0
  79. package/blz-rds/commands/datetimes/datetime-diff.js +11 -0
  80. package/blz-rds/commands/datetimes/datetime.js +15 -0
  81. package/blz-rds/commands/datetimes/day.js +10 -0
  82. package/blz-rds/commands/datetimes/hour.js +10 -0
  83. package/blz-rds/commands/datetimes/millisecond.js +10 -0
  84. package/blz-rds/commands/datetimes/minute.js +10 -0
  85. package/blz-rds/commands/datetimes/month-text.js +10 -0
  86. package/blz-rds/commands/datetimes/month.js +10 -0
  87. package/blz-rds/commands/datetimes/now.js +9 -0
  88. package/blz-rds/commands/datetimes/second.js +10 -0
  89. package/blz-rds/commands/datetimes/subtract-days.js +11 -0
  90. package/blz-rds/commands/datetimes/subtract-hours.js +11 -0
  91. package/blz-rds/commands/datetimes/subtract-milliseconds.js +11 -0
  92. package/blz-rds/commands/datetimes/subtract-minutes.js +11 -0
  93. package/blz-rds/commands/datetimes/subtract-seconds.js +11 -0
  94. package/blz-rds/commands/datetimes/time-diff.js +11 -0
  95. package/blz-rds/commands/datetimes/time.js +13 -0
  96. package/blz-rds/commands/datetimes/today.js +9 -0
  97. package/blz-rds/commands/datetimes/week-day-text.js +10 -0
  98. package/blz-rds/commands/datetimes/week-day.js +10 -0
  99. package/blz-rds/commands/datetimes/week.js +10 -0
  100. package/blz-rds/commands/datetimes/year.js +10 -0
  101. package/blz-rds/commands/math/abs.js +10 -0
  102. package/blz-rds/commands/math/acos.js +10 -0
  103. package/blz-rds/commands/math/asin.js +10 -0
  104. package/blz-rds/commands/math/atan.js +10 -0
  105. package/blz-rds/commands/math/atan2.js +11 -0
  106. package/blz-rds/commands/math/ceil.js +10 -0
  107. package/blz-rds/commands/math/cos.js +10 -0
  108. package/blz-rds/commands/math/cosh.js +10 -0
  109. package/blz-rds/commands/math/exp.js +10 -0
  110. package/blz-rds/commands/math/floor.js +10 -0
  111. package/blz-rds/commands/math/log.js +18 -0
  112. package/blz-rds/commands/math/log10.js +10 -0
  113. package/blz-rds/commands/math/pow.js +11 -0
  114. package/blz-rds/commands/math/random.js +9 -0
  115. package/blz-rds/commands/math/round.js +18 -0
  116. package/blz-rds/commands/math/sign.js +10 -0
  117. package/blz-rds/commands/math/sin.js +10 -0
  118. package/blz-rds/commands/math/sinh.js +10 -0
  119. package/blz-rds/commands/math/sqrt.js +10 -0
  120. package/blz-rds/commands/math/tan.js +10 -0
  121. package/blz-rds/commands/math/tanh.js +10 -0
  122. package/blz-rds/commands/math/trunc.js +18 -0
  123. package/blz-rds/commands/strings/concat.js +20 -0
  124. package/blz-rds/commands/strings/contains.js +12 -0
  125. package/blz-rds/commands/strings/ends-with.js +12 -0
  126. package/blz-rds/commands/strings/index-of.js +11 -0
  127. package/blz-rds/commands/strings/is-null-or-empty.js +11 -0
  128. package/blz-rds/commands/strings/is-null-or-white-space.js +11 -0
  129. package/blz-rds/commands/strings/join.js +22 -0
  130. package/blz-rds/commands/strings/last-index-of.js +11 -0
  131. package/blz-rds/commands/strings/length.js +10 -0
  132. package/blz-rds/commands/strings/pad-left.js +20 -0
  133. package/blz-rds/commands/strings/pad-right.js +20 -0
  134. package/blz-rds/commands/strings/replace.js +12 -0
  135. package/blz-rds/commands/strings/starts-with.js +12 -0
  136. package/blz-rds/commands/strings/substring.js +12 -0
  137. package/blz-rds/commands/strings/to-lower.js +10 -0
  138. package/blz-rds/commands/strings/to-upper.js +10 -0
  139. package/blz-rds/commands/strings/trim-end.js +10 -0
  140. package/blz-rds/commands/strings/trim-start.js +10 -0
  141. package/blz-rds/commands/strings/trim.js +10 -0
  142. package/blz-rds/index.js +744 -0
  143. package/blz-rds-mysql/base.js +857 -0
  144. package/blz-rds-mysql/connection-manager.js +129 -0
  145. package/blz-rds-mysql/execute-bulk-insert.js +35 -0
  146. package/blz-rds-mysql/execute-bulk-merge.js +45 -0
  147. package/blz-rds-mysql/execute-non-query.js +34 -0
  148. package/blz-rds-mysql/execute-query.js +50 -0
  149. package/blz-rds-mysql/index.js +41 -0
  150. package/blz-rds-mysql/stored-procedure.js +207 -0
  151. package/blz-rds-mysql/syntaxis.json +114 -0
  152. package/blz-rds-mysqlx/base.js +846 -0
  153. package/blz-rds-mysqlx/connection-manager.js +141 -0
  154. package/blz-rds-mysqlx/execute-bulk-insert.js +35 -0
  155. package/blz-rds-mysqlx/execute-bulk-merge.js +45 -0
  156. package/blz-rds-mysqlx/execute-non-query.js +29 -0
  157. package/blz-rds-mysqlx/execute-query.js +39 -0
  158. package/blz-rds-mysqlx/index.js +41 -0
  159. package/blz-rds-mysqlx/stored-procedure.js +179 -0
  160. package/blz-rds-mysqlx/syntaxis.json +105 -0
  161. package/blz-rds-oracle/index.js +540 -0
  162. package/blz-rds-oracle/syntaxis.json +112 -0
  163. package/blz-rds-postgres/base.js +861 -0
  164. package/blz-rds-postgres/connection-manager.js +225 -0
  165. package/blz-rds-postgres/execute-bulk-insert.js +81 -0
  166. package/blz-rds-postgres/execute-bulk-merge.js +93 -0
  167. package/blz-rds-postgres/execute-non-query.js +23 -0
  168. package/blz-rds-postgres/execute-query.js +37 -0
  169. package/blz-rds-postgres/index.js +41 -0
  170. package/blz-rds-postgres/result-set.js +51 -0
  171. package/blz-rds-postgres/stored-procedure.js +116 -0
  172. package/blz-rds-postgres/syntaxis.json +114 -0
  173. package/blz-redis/index.js +217 -0
  174. package/blz-redis/lib/redisCache.js +265 -0
  175. package/blz-regex/index.js +25 -0
  176. package/blz-security/.eslintrc.js +15 -0
  177. package/blz-security/__test__/AuthorizationKpn.yaml +1043 -0
  178. package/blz-security/__test__/FinancingSetting.yaml +177 -0
  179. package/blz-security/__test__/KpnConfigPortal.yaml +330 -0
  180. package/blz-security/__test__/OrderManagement.yaml +5190 -0
  181. package/blz-security/__test__/Security.yaml +128 -0
  182. package/blz-security/__test__/autorization.test.js +105 -0
  183. package/blz-security/__test__/orderManagement.test.js +26 -0
  184. package/blz-security/__test__/secureUrl.test.js +79 -0
  185. package/blz-security/__test__/solveMergeRule.test.js +109 -0
  186. package/blz-security/__test__/sqlInjectionGuard.test.js +203 -0
  187. package/blz-security/__test__/xssGuard.test.js +204 -0
  188. package/blz-security/authorizationService.js +536 -0
  189. package/blz-security/config/global.js +8 -0
  190. package/blz-security/config/welcome +8 -0
  191. package/blz-security/doc/README.md +75 -0
  192. package/blz-security/filescanner/index.js +46 -0
  193. package/blz-security/helpers/consts.js +229 -0
  194. package/blz-security/helpers/utils.js +267 -0
  195. package/blz-security/implementations/cache.js +90 -0
  196. package/blz-security/implementations/oidc.js +404 -0
  197. package/blz-security/implementations/pkceCacheStore.js +23 -0
  198. package/blz-security/implementations/saml.js +10 -0
  199. package/blz-security/implementations/uma.js +63 -0
  200. package/blz-security/implementations/webAuthn.js +9 -0
  201. package/blz-security/implementations/wstg.js +72 -0
  202. package/blz-security/index.js +77 -0
  203. package/blz-security/lab/index.js +27 -0
  204. package/blz-security/middleware/HapiServerAzureAd.js +641 -0
  205. package/blz-security/middleware/HapiServerKeycloak.js +840 -0
  206. package/blz-security/middleware/HapiServerSimToken.js +247 -0
  207. package/blz-security/middleware/hapi.js +515 -0
  208. package/blz-security/middleware/hapiServer.js +974 -0
  209. package/blz-security/navigationMemoryRepository.js +15 -0
  210. package/blz-security/navigationMongoDbRepository.js +73 -0
  211. package/blz-security/secureUrlService.js +47 -0
  212. package/blz-security/securityService.js +409 -0
  213. package/blz-security/sqlInjectionGuard.js +162 -0
  214. package/blz-security/templates/forbidden.html +0 -0
  215. package/blz-security/templates/session-iframe-azure-ad.html +7 -0
  216. package/blz-security/templates/session-iframe.html +73 -0
  217. package/blz-security/templates/unauthorized.html +1 -0
  218. package/blz-security/xssGuard.js +87 -0
  219. package/blz-strings/index.js +167 -0
  220. package/blz-uuid/index.js +7 -0
  221. package/blz-yaml/index.js +19 -0
  222. package/index.js +84 -0
  223. package/package.json +97 -0
  224. package/process-managers/index.js +422 -0
@@ -0,0 +1,205 @@
1
+ const fs = require('fs');
2
+ const path = require('path')
3
+ const readline = require('readline');
4
+ class FileService {
5
+
6
+ join(paths) {
7
+ if (!paths) {
8
+ throw new Error("paths is required");
9
+ }
10
+ return path.join(...paths)
11
+ }
12
+
13
+ async append(filePath,content) {
14
+ if (!filePath) {
15
+ throw new Error("filePath is required");
16
+ }
17
+ if (!content) {
18
+ throw new Error("content is required");
19
+ }
20
+ const fullPath = this.resolvePath(filePath)
21
+ await this.createDirIfNotExists(fullPath)
22
+ await fs.promises.appendFile(fullPath, content);
23
+ }
24
+
25
+ async read(filePath) {
26
+ if (!filePath) {
27
+ throw new Error("filePath is required");
28
+ }
29
+ const fullPath = this.resolvePath(filePath)
30
+ return fs.promises.readFile(fullPath, "utf-8");
31
+ }
32
+
33
+ async appendLines(filePath, lines, start) {
34
+ if (!filePath) {
35
+ throw new Error("filePath is required");
36
+ }
37
+ if (!lines) {
38
+ throw new Error("lines is required");
39
+ }
40
+ const fullPath = this.resolvePath(filePath)
41
+ await this.createDirIfNotExists(fullPath)
42
+ if (start !== undefined && start !== null) {
43
+ const currentContent = await fs.promises.readFile(fullPath, "utf-8");
44
+ const currentLines = currentContent.split('\n');
45
+ currentLines.splice(start, 0, ...lines);
46
+ await fs.promises.writeFile(fullPath, currentLines.join('\n')+'\n');
47
+ } else {
48
+ await fs.promises.appendFile(fullPath, lines.join('\n')+'\n');
49
+ }
50
+ }
51
+
52
+ async readLines(filePath, start, count) {
53
+ if (!filePath) {
54
+ throw new Error("filePath is required");
55
+ }
56
+ const fullPath = this.resolvePath(filePath)
57
+ let lines = []
58
+ if (start !== undefined && start !== null) {
59
+ lines = await this._read(fullPath, start, count );
60
+ } else {
61
+ lines = (await fs.promises.readFile(fullPath, "utf-8")).split('\n')
62
+ }
63
+ return lines.filter(l => l === undefined || l === null || l.trim() !== '')
64
+ }
65
+
66
+ createLineIterable(filePath) {
67
+ if (!filePath) {
68
+ throw new Error("filePath is required");
69
+ }
70
+ const fullPath = this.resolvePath(filePath)
71
+ const fileStream = fs.createReadStream(fullPath);
72
+ const rl = readline.createInterface({
73
+ input: fileStream,
74
+ crlfDelay: Infinity,
75
+ });
76
+
77
+ return {
78
+ [Symbol.iterator]() {
79
+ return {
80
+ next() {
81
+ const line = rl[Symbol.iterator]().next().value;
82
+ return { value: line, done: line === undefined };
83
+ },
84
+ };
85
+ },
86
+ };
87
+ }
88
+
89
+ async remove(filePath) {
90
+ if (!filePath) {
91
+ throw new Error("filePath is required");
92
+ }
93
+ const fullPath = this.resolvePath(filePath)
94
+ await fs.promises.unlink(fullPath);
95
+ }
96
+
97
+ async exists(sourcePath) {
98
+ if (!sourcePath) {
99
+ throw new Error("sourcePath is required");
100
+ }
101
+ try {
102
+ await fs.promises.access(sourcePath);
103
+ return true;
104
+ } catch (error) {
105
+ if (error.code === "ENOENT") {
106
+ return false;
107
+ } else {
108
+ throw error;
109
+ }
110
+ }
111
+ }
112
+
113
+ async lines(filePath) {
114
+ if (!filePath) {
115
+ throw new Error("path is required");
116
+ }
117
+ const fullPath = this.resolvePath(filePath)
118
+ return this._lines(fullPath);
119
+ }
120
+ async size(filePath) {
121
+ if (!filePath) {
122
+ throw new Error("filePath is required");
123
+ }
124
+ const fullPath = this.resolvePath(filePath)
125
+ const statistics = await fs.promises.stat(fullPath)
126
+ return statistics.size
127
+ }
128
+
129
+ async _read(filePath, start, count) {
130
+ return new Promise((resolve, reject) => {
131
+ const reader = readline.createInterface({
132
+ input: fs.createReadStream(filePath),
133
+ crlfDelay: Infinity,
134
+ });
135
+
136
+ let lines = [];
137
+ let lineCount = 0;
138
+
139
+ reader.on("line", (line) => {
140
+ if (lineCount >= start && (!count || lines.length < count)) {
141
+ lines.push(line);
142
+ }
143
+ lineCount++;
144
+ });
145
+
146
+ reader.on("close", () => {
147
+ resolve(lines);
148
+ });
149
+
150
+ reader.on("error", (error) => {
151
+ reject(error);
152
+ });
153
+ });
154
+ }
155
+
156
+
157
+
158
+
159
+
160
+ async _lines(filePath) {
161
+ return new Promise((resolve, reject) => {
162
+ const stream = fs.createReadStream(filePath, { encoding: 'utf-8' });
163
+ let lineCount = 0;
164
+
165
+ stream.on('data', (chunk) => {
166
+ lineCount += (chunk.match(/\n/g) || []).length;
167
+ });
168
+
169
+ stream.on('end', () => {
170
+ resolve(lineCount + 1)
171
+ });
172
+
173
+ stream.on('error', (error) => {
174
+ reject(error);
175
+ });
176
+ });
177
+ }
178
+
179
+ async createDirIfNotExists (sourcePath) {
180
+ const fullPath = this.resolvePath(sourcePath)
181
+ const dirPath = path.dirname(fullPath);
182
+ const exists = await this.exists(dirPath)
183
+ if (exists) { return }
184
+ return new Promise((resolve, reject) => {
185
+ fs.mkdir(dirPath, { recursive: true }, err => err ? reject(err) : resolve())
186
+ })
187
+ }
188
+
189
+ resolvePath (sourcePath) {
190
+ if (!sourcePath) {
191
+ throw new Error("sourcePath is required");
192
+ }
193
+ const _source = sourcePath.trim()
194
+ if (_source.startsWith('.')) {
195
+ return path.join(process.cwd(), sourcePath)
196
+ }
197
+ if (_source.startsWith('~')) {
198
+ return _source.replace('~', process.env.HOME)
199
+ }
200
+ return sourcePath
201
+ }
202
+ }
203
+ const fileService = new FileService()
204
+ exports = module.exports = fileService
205
+ exports.default = fileService
@@ -0,0 +1,94 @@
1
+ const fileService = require('./fileService.js')
2
+ const path = require('path')
3
+ module.exports = typeof module.exports === "undefined" ? {} : module.exports;
4
+
5
+ /**
6
+ * Join parts of path
7
+ * @param {list(string)} paths - parts of path
8
+ * @return {string} - Path joined
9
+ */
10
+ module.exports.pathJoin = async function( paths ) {
11
+ if (!paths) {
12
+ throw new Error("paths is required");
13
+ }
14
+ return path.join(...paths)
15
+ }
16
+
17
+ /**
18
+ * Append data to File
19
+ * @param {string} path - path of file
20
+ * @param {string} content - content of file
21
+ * @return {any}
22
+ */
23
+ module.exports.fileAppend = async function( path, content ) {
24
+ await fileService.append(path,content)
25
+ }
26
+ /**
27
+ * Read file request
28
+ * @param {string} path - Path of file
29
+ * @return {FileReadResponse}
30
+ */
31
+ module.exports.fileRead = async function( path ) {
32
+ return fileService.read(path)
33
+ }
34
+
35
+ /**
36
+ * Append lines to file
37
+ * @param {string} path - Path of file
38
+ * @param {list(string)} lines - lines to append
39
+ * @param {integer} [start] - position to start append
40
+ * @return {any}
41
+ */
42
+ module.exports.fileAppendLines = async function( path, lines, start ) {
43
+ await fileService.appendLines(path,lines, start)
44
+ }
45
+ /**
46
+ * Read lines form file
47
+ * @param {string} path - Path of file
48
+ * @param {integer} [start] - Start position to read
49
+ * @param {integer} [count] - Count lines to read
50
+ * @return {any}
51
+ */
52
+ module.exports.fileReadLines = async function( path, start, count ) {
53
+ return fileService.readLines(path,start, count)
54
+ }
55
+
56
+ /**
57
+ * Create iterable to read lines from file
58
+ * @param {string} path - Path of file
59
+ * @return {any}
60
+ */
61
+ module.exports.fileCreateLineIterable = async function( path ) {
62
+ return fileService.createLineIterable(path)
63
+ }
64
+
65
+
66
+ /**
67
+ * File exists
68
+ * @param {string} path - path of file
69
+ * @return {boolean}
70
+ */
71
+ module.exports.fileExists = async function( path ) {
72
+ return fileService.exists(path)
73
+ }
74
+ /**
75
+ * Lines of file
76
+ * @param {string} path - path of file
77
+ * @return {integer}
78
+ */
79
+ module.exports.fileLines = async function( path ) {
80
+ return fileService.lines(path)
81
+ }
82
+ /**
83
+ * File Size
84
+ * @param {string} path - path of file
85
+ * @return {integer}
86
+ */
87
+ module.exports.fileSize = async function( path ) {
88
+ return fileService.size(path)
89
+ }
90
+
91
+ module.exports.fileRemove = async function( path ) {
92
+ return fileService.remove(path)
93
+ }
94
+
@@ -0,0 +1,31 @@
1
+ const app = require('./index')
2
+ const path = require('path')
3
+ const examplePath = path.join(__dirname, 'example.dat')
4
+ const { v4: uuidv4 } = require('uuid');
5
+
6
+ describe("FileService", () => {
7
+ test('Size',async() => {
8
+ const result = await app.fileSize(examplePath)
9
+ expect(2841450).toStrictEqual(result)
10
+ })
11
+ test('Lines',async () => {
12
+ const result = await app.fileLines(examplePath)
13
+ expect(2546).toStrictEqual(result)
14
+ })
15
+ test('Read and append lines',async () => {
16
+ const content= await app.fileRead(examplePath)
17
+ const targetFilePath = path.join(__dirname, 'example_'+uuidv4()+'.dat')
18
+ await app.fileAppend(targetFilePath,content)
19
+ const chunk1 = await app.fileReadLines(examplePath,0,2)
20
+ const chunk2 = await app.fileReadLines(examplePath,2,1)
21
+ const targetFile2Path = path.join(__dirname, 'example2_'+uuidv4()+'.dat')
22
+ await app.fileAppendLines(targetFile2Path,chunk2)
23
+ await app.fileAppendLines(targetFile2Path,chunk1,0)
24
+ const chunk3 = JSON.stringify(await app.fileReadLines(examplePath,0,3))
25
+ const content2 = JSON.stringify(await app.fileReadLines(targetFile2Path))
26
+ await app.fileRemove(targetFilePath)
27
+ await app.fileRemove(targetFile2Path)
28
+ expect(true).toStrictEqual(chunk3 === content2)
29
+ })
30
+ })
31
+
@@ -0,0 +1,33 @@
1
+ const fileService = require('./fileService.js')
2
+ const { v4: uuidv4 } = require('uuid');
3
+ const path = require('path')
4
+
5
+ const lab = async () => {
6
+ const pathFile = path.join(__dirname, 'example.dat')
7
+ console.log('size: ' + await fileService.size(pathFile))
8
+ console.log('lines: ' + await fileService.lines(pathFile))
9
+
10
+ const content= await fileService.read(pathFile)
11
+ const targetFilePath = path.join(__dirname, 'example_'+uuidv4()+'.dat')
12
+ await fileService.append(targetFilePath,content)
13
+
14
+ const chunk1 = await fileService.readLines(pathFile,0,2)
15
+ const chunk2 = await fileService.readLines(pathFile,2,1)
16
+ const targetFile2Path = path.join(__dirname, 'example2_'+uuidv4()+'.dat')
17
+ await fileService.appendLines(targetFile2Path,chunk2)
18
+ await fileService.appendLines(targetFile2Path,chunk1,0)
19
+
20
+ const chunk3 = JSON.stringify(await fileService.readLines(pathFile,0,3))
21
+ const content2 = JSON.stringify(await fileService.readLines(targetFile2Path))
22
+ if (chunk3 === content2) {
23
+ console.log('content is equal')
24
+ }
25
+ else {
26
+ console.log('content is not equal')
27
+ }
28
+
29
+ await fileService.remove(targetFilePath)
30
+ await fileService.remove(targetFile2Path)
31
+ }
32
+
33
+ lab()
@@ -0,0 +1,189 @@
1
+ const hazelcastCache = require('./lib/hazelcastCache.js');
2
+ const { UsernamePasswordCredentials } = require('./lib/credentials.js');
3
+ const { usernamePasswordCredentialsFactory } = require('./lib/credentialsFactory.js');
4
+ const fs = require('fs-extra');
5
+
6
+ // Hazelcast Client cache
7
+ let hazelcastClients = {};
8
+
9
+ // Gets a Hazelcast Client by connection name
10
+ function getOrCreateHazelcastClient(connection) {
11
+ let hazelcastClient = hazelcastClients[connection.name];
12
+ if (hazelcastClient) {
13
+ return hazelcastClient;
14
+ }
15
+
16
+ let options = {
17
+ connectionName: connection.name,
18
+ connectionOptions: {
19
+ properties: {
20
+ 'hazelcast.logging.level': 'OFF',
21
+ 'hazelcast.client.heartbeat.interval': connection.poolKeepAlive || 10000
22
+ }
23
+ },
24
+ pool: true,
25
+ poolMin: connection.poolMin,
26
+ poolMax: connection.poolMax,
27
+ poolKeepAlive: connection.poolKeepAlive,
28
+ poolAcquireTimeout: connection.poolAcquireTimeout,
29
+ poolRetryDelay: connection.poolRetryDelay
30
+ };
31
+ if (connection.clusterName != null) {
32
+ options.connectionOptions.clusterName = connection.clusterName;
33
+ }
34
+ if (connection.members != null || connection.discoveryToken != null || connection.tls) {
35
+ options.connectionOptions.network = {};
36
+ }
37
+ if (connection.members != null) {
38
+ options.connectionOptions.network.clusterMembers = ensureMembers(connection.members);
39
+ }
40
+ if (connection.discoveryToken != null) {
41
+ options.connectionOptions.network.hazelcastCloud = { discoveryToken: connection.discoveryToken };
42
+ }
43
+ if (connection.tls) {
44
+ options.connectionOptions.network.ssl = { enabled: true };
45
+ if (connection.key || connection.cert || connection.ca || connection.servername || connection.rejectUnauthorized) {
46
+ options.connectionOptions.network.ssl.sslOptionsFactoryProperties = {};
47
+ }
48
+ if (connection.key) {
49
+ options.connectionOptions.network.ssl.sslOptionsFactoryProperties.keyPath = fs.readFileSync(connection.key);
50
+ }
51
+ if (connection.cert) {
52
+ options.connectionOptions.network.ssl.sslOptionsFactoryProperties.certPath = fs.readFileSync(connection.cert);
53
+ }
54
+ if (connection.ca) {
55
+ options.connectionOptions.network.ssl.sslOptionsFactoryProperties.caPath = fs.readFileSync(connection.ca);
56
+ }
57
+ if (connection.servername) {
58
+ options.connectionOptions.network.ssl.sslOptionsFactoryProperties.servername = connection.servername;
59
+ }
60
+ if (!connection.rejectUnauthorized) {
61
+ options.connectionOptions.network.ssl.sslOptionsFactoryProperties.rejectUnauthorized = false;
62
+ }
63
+ }
64
+ if (connection.user != null) {
65
+ options.connectionOptions.serialization = {
66
+ portableFactories: {
67
+ 1: usernamePasswordCredentialsFactory
68
+ }
69
+ },
70
+ options.connectionOptions.customCredentials = new UsernamePasswordCredentials(connection.user, connection.password, connection.endpoint);
71
+ }
72
+ hazelcastClient = hazelcastCache.createHazelcastClient(options);
73
+ hazelcastClients[connection.name] = hazelcastClient;
74
+ return hazelcastClient;
75
+ }
76
+
77
+ function ensureMembers(members) {
78
+ if (members) {
79
+ if (!Array.isArray(members)) {
80
+ if (typeof (members) === 'string') {
81
+ return members.split(',')
82
+ }
83
+ }
84
+ }
85
+ return members;
86
+ }
87
+
88
+ module.exports = {
89
+ hazelcastMapGet: function (connection, name, key) {
90
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
91
+ return hazelcastClient.mapGet(name, key);
92
+ },
93
+ hazelcastMapGetAll:function (connection, name, keys) {
94
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
95
+ return hazelcastClient.mapGetAll(name, keys);
96
+ },
97
+ hazelcastMapSet: function (connection, name, key, value, ttl) {
98
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
99
+ return hazelcastClient.mapSet(name, key, value, ttl);
100
+ },
101
+ hazelcastMapSetAll: function (connection, name, data) {
102
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
103
+ return hazelcastClient.mapSetAll(name, data);
104
+ },
105
+ hazelcastMapDelete: function (connection, name, key) {
106
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
107
+ return hazelcastClient.mapDelete(name, key);
108
+ },
109
+ hazelcastMapSetTtl: function (connection, name, key, ttl) {
110
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
111
+ return hazelcastClient.mapSetTtl(name, key, ttl);
112
+ },
113
+ hazelcastMapGetEntryView: function (connection, name, key) {
114
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
115
+ return hazelcastClient.mapGetEntryView(name, key);
116
+ },
117
+ hazelcastMapContainsKey: function (connection, name, key) {
118
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
119
+ return hazelcastClient.mapContainsKey(name, key);
120
+ },
121
+ hazelcastMapKeySet: function (connection, name) {
122
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
123
+ return hazelcastClient.mapKeySet(name);
124
+ },
125
+ hazelcastMapValues: function (connection, name) {
126
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
127
+ return hazelcastClient.mapValues(name);
128
+ },
129
+ hazelcastMapEntrySet: function (connection, name) {
130
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
131
+ return hazelcastClient.mapEntrySet(name);
132
+ },
133
+ hazelcastMapSize: function (connection, name) {
134
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
135
+ return hazelcastClient.mapSize(name);
136
+ },
137
+ hazelcastMapClear: function (connection, name) {
138
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
139
+ return hazelcastClient.mapClear(name);
140
+ },
141
+ hazelcastMapDestroy: function (connection, name) {
142
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
143
+ return hazelcastClient.mapDestroy(name);
144
+ },
145
+ hazelcastListGet: function (connection, name, index) {
146
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
147
+ return hazelcastClient.listGet(name, index);
148
+ },
149
+ hazelcastListAdd: function (connection, name, element) {
150
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
151
+ return hazelcastClient.listAdd(name, element);
152
+ },
153
+ hazelcastListAddAt: function (connection, name, index, element) {
154
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
155
+ return hazelcastClient.listAddAt(name, index, element);
156
+ },
157
+ hazelcastListAddAll: function (connection, name, elements) {
158
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
159
+ return hazelcastClient.listAddAll(name, elements);
160
+ },
161
+ hazelcastListRemove: function (connection, name, element) {
162
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
163
+ return hazelcastClient.listRemove(name, element);
164
+ },
165
+ hazelcastListRemoveAt: function (connection, name, index) {
166
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
167
+ return hazelcastClient.listRemoveAt(name, index);
168
+ },
169
+ hazelcastListContains: function (connection, name, element) {
170
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
171
+ return hazelcastClient.listContains(name, element);
172
+ },
173
+ hazelcastListIndexOf: function (connection, name, element) {
174
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
175
+ return hazelcastClient.listIndexOf(name, element);
176
+ },
177
+ hazelcastListSize: function (connection, name) {
178
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
179
+ return hazelcastClient.listSize(name);
180
+ },
181
+ hazelcastListClear: function (connection, name) {
182
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
183
+ return hazelcastClient.listClear(name);
184
+ },
185
+ hazelcastListDestroy: function (connection, name) {
186
+ let hazelcastClient = getOrCreateHazelcastClient(connection);
187
+ return hazelcastClient.listDestroy(name);
188
+ }
189
+ };
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ class UsernamePasswordCredentials {
4
+ constructor(username, password, endpoint) {
5
+ this.username = username;
6
+ this.password = password;
7
+ this.endpoint = endpoint;
8
+ this.factoryId = 1;
9
+ this.classId = 1;
10
+ }
11
+
12
+ readPortable(reader) {
13
+ this.username = reader.readString('username');
14
+ this.endpoint = reader.readString('password');
15
+ this.password = reader.readString('endpoint');
16
+ }
17
+
18
+ writePortable(writer) {
19
+ writer.writeString('username', this.username);
20
+ writer.writeString('password', this.password);
21
+ writer.writeString('endpoint', this.endpoint);
22
+ }
23
+ }
24
+
25
+ exports.UsernamePasswordCredentials = UsernamePasswordCredentials;
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ const UsernamePasswordCredentials = require('./credentials');
4
+
5
+ function usernamePasswordCredentialsFactory(classId) {
6
+ if (classId === 1) {
7
+ return new UsernamePasswordCredentials();
8
+ }
9
+ return null;
10
+ }
11
+
12
+ exports.usernamePasswordCredentialsFactory = usernamePasswordCredentialsFactory;