iobroker.javascript 8.9.2 → 9.0.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 (154) hide show
  1. package/README.md +7 -3
  2. package/admin/assets/{createSvgIcon-BdRvDw53.js → createSvgIcon-BQT-7-GS.js} +1 -1
  3. package/admin/assets/{docs-6na4NFtj.js → docs-BrInh2Pn.js} +2 -2
  4. package/admin/assets/index-BzKS5vx-.js +1329 -0
  5. package/admin/assets/index-CfuHVX2B.js +193 -0
  6. package/admin/assets/index-CuCs5aLs.js +5 -0
  7. package/admin/assets/index-tExaxF69.js +930 -0
  8. package/admin/assets/inheritsLoose--KnFDOw1.js +36 -0
  9. package/admin/assets/{useTheme-Cl1QmYFL.js → useTheme-DF6qfrtI.js} +1 -1
  10. package/admin/custom/assets/{Components-ChpTW7sE.js → Components-D9kRsHNY.js} +1 -1
  11. package/admin/custom/assets/{DefaultPropsProvider-CHpMCMgA.js → DefaultPropsProvider-9qubdy-V.js} +2 -2
  12. package/admin/custom/assets/{FilledInput-CtcQVKyj.js → FilledInput-BpuM_GyB.js} +1 -1
  13. package/admin/custom/assets/Tabs-CvEv0KOT.js +138 -0
  14. package/admin/custom/assets/ThemeProvider-DZTpMR8n.js +29 -0
  15. package/admin/custom/assets/{createSvgIcon-C_vAELFU.js → createSvgIcon-BQThUM-f.js} +1 -1
  16. package/admin/custom/assets/hostInit-CrAs5YZS.js +1 -1
  17. package/admin/custom/assets/index-BXmu6lpn.js +904 -0
  18. package/admin/custom/assets/{index-DwsbskQy.js → index-DIWNdd4a.js} +1 -1
  19. package/admin/custom/assets/index-DZqbj5K4.js +55 -0
  20. package/admin/custom/assets/{index-D5apCzjJ.js → index-Dbe-II7_.js} +6 -6
  21. package/admin/custom/assets/index-sawv1cUe.js +1399 -0
  22. package/admin/custom/assets/{virtualExposes-BPncCdUy.js → virtualExposes-BMKIjWrE.js} +2 -2
  23. package/admin/custom/customComponents.js +2 -2
  24. package/admin/custom/i18n/de.json +29 -29
  25. package/admin/custom/i18n/es.json +29 -29
  26. package/admin/custom/i18n/fr.json +29 -29
  27. package/admin/custom/i18n/it.json +29 -29
  28. package/admin/custom/i18n/nl.json +29 -29
  29. package/admin/custom/i18n/pl.json +29 -29
  30. package/admin/custom/i18n/pt.json +29 -29
  31. package/admin/custom/i18n/ru.json +29 -29
  32. package/admin/custom/i18n/uk.json +29 -29
  33. package/admin/custom/i18n/zh-cn.json +29 -29
  34. package/admin/google-blockly/blockly_compressed.js +875 -887
  35. package/admin/google-blockly/blocks_compressed.js +38 -41
  36. package/admin/google-blockly/javascript_compressed.js +19 -54
  37. package/admin/google-blockly/media/delete-icon.svg +1 -0
  38. package/admin/google-blockly/media/foldout-icon.svg +1 -0
  39. package/admin/google-blockly/media/resize-handle.svg +3 -0
  40. package/admin/i18n/de.json +61 -0
  41. package/admin/i18n/en.json +61 -0
  42. package/admin/i18n/es.json +61 -0
  43. package/admin/i18n/fr.json +61 -0
  44. package/admin/i18n/it.json +61 -0
  45. package/admin/i18n/nl.json +61 -0
  46. package/admin/i18n/pl.json +61 -0
  47. package/admin/i18n/pt.json +61 -0
  48. package/admin/i18n/ru.json +61 -0
  49. package/admin/i18n/uk.json +61 -0
  50. package/admin/i18n/zh-cn.json +61 -0
  51. package/admin/jsonConfig.json +2 -0
  52. package/admin/mf-manifest.json +1 -1
  53. package/admin/remoteEntry.js +2 -2
  54. package/admin/tab.html +4 -4
  55. package/admin/vsFont/README.md +1 -1
  56. package/admin/vsFont/createJson.js +1 -1
  57. package/build-backend/lib/consts.js +346 -0
  58. package/build-backend/lib/consts.js.map +1 -0
  59. package/build-backend/lib/convert.js +120 -0
  60. package/build-backend/lib/convert.js.map +1 -0
  61. package/build-backend/lib/debug.js +163 -0
  62. package/build-backend/lib/debug.js.map +1 -0
  63. package/{lib → build-backend/lib}/debugger.js +261 -232
  64. package/build-backend/lib/debugger.js.map +1 -0
  65. package/build-backend/lib/eventObj.js +177 -0
  66. package/build-backend/lib/eventObj.js.map +1 -0
  67. package/build-backend/lib/inspect.js +728 -0
  68. package/build-backend/lib/inspect.js.map +1 -0
  69. package/build-backend/lib/javascript.d.ts +1972 -0
  70. package/{lib → build-backend/lib}/mirror.js +185 -182
  71. package/build-backend/lib/mirror.js.map +1 -0
  72. package/build-backend/lib/nodeModulesManagement.js +25 -0
  73. package/build-backend/lib/nodeModulesManagement.js.map +1 -0
  74. package/build-backend/lib/patternCompareFunctions.js +321 -0
  75. package/build-backend/lib/patternCompareFunctions.js.map +1 -0
  76. package/build-backend/lib/protectFs.js +477 -0
  77. package/build-backend/lib/protectFs.js.map +1 -0
  78. package/build-backend/lib/request.js +89 -0
  79. package/build-backend/lib/request.js.map +1 -0
  80. package/{lib → build-backend/lib}/sandbox.js +2046 -1852
  81. package/build-backend/lib/sandbox.js.map +1 -0
  82. package/build-backend/lib/scheduler.js +553 -0
  83. package/build-backend/lib/scheduler.js.map +1 -0
  84. package/build-backend/lib/tools.js +183 -0
  85. package/build-backend/lib/tools.js.map +1 -0
  86. package/build-backend/lib/typescriptSettings.js +39 -0
  87. package/build-backend/lib/typescriptSettings.js.map +1 -0
  88. package/build-backend/lib/typescriptTools.js +435 -0
  89. package/build-backend/lib/typescriptTools.js.map +1 -0
  90. package/build-backend/lib/utils.js +66 -0
  91. package/build-backend/lib/utils.js.map +1 -0
  92. package/{lib → build-backend/lib}/words.js +23 -30
  93. package/build-backend/lib/words.js.map +1 -0
  94. package/build-backend/main.js +2671 -0
  95. package/build-backend/main.js.map +1 -0
  96. package/build-backend/types.d.ts +742 -0
  97. package/docs/de/README.md +1 -1
  98. package/docs/en/README.md +1 -1
  99. package/docs/en/javascript.md +10 -6
  100. package/docs/en/upgrade-guide.md +5 -2
  101. package/docs/ru/README.md +1 -1
  102. package/install/installTypings.js +34 -47
  103. package/io-package.json +14 -14
  104. package/package.json +14 -14
  105. package/admin/assets/index-DCkkMRRa.js +0 -1335
  106. package/admin/assets/index-DJfSBoBB.js +0 -192
  107. package/admin/assets/index-DTiA4WdK.js +0 -930
  108. package/admin/assets/index-qABB1JVe.js +0 -5
  109. package/admin/assets/inheritsLoose-BW-3V39H.js +0 -36
  110. package/admin/custom/assets/Tabs-C1KOyWRi.js +0 -137
  111. package/admin/custom/assets/ThemeProvider-Buvx5nSd.js +0 -29
  112. package/admin/custom/assets/index-BGCRznKh.js +0 -904
  113. package/admin/custom/assets/index-DfBPYXqA.js +0 -55
  114. package/admin/custom/assets/index-jIr6kOLK.js +0 -1398
  115. package/admin/i18n/de/flat.txt +0 -427
  116. package/admin/i18n/de/translations.json +0 -429
  117. package/admin/i18n/en/flat.txt +0 -427
  118. package/admin/i18n/en/translations.json +0 -429
  119. package/admin/i18n/es/flat.txt +0 -427
  120. package/admin/i18n/es/translations.json +0 -429
  121. package/admin/i18n/flat.txt +0 -427
  122. package/admin/i18n/fr/flat.txt +0 -427
  123. package/admin/i18n/fr/translations.json +0 -429
  124. package/admin/i18n/it/flat.txt +0 -427
  125. package/admin/i18n/it/translations.json +0 -429
  126. package/admin/i18n/nl/flat.txt +0 -427
  127. package/admin/i18n/nl/translations.json +0 -429
  128. package/admin/i18n/pl/flat.txt +0 -427
  129. package/admin/i18n/pl/translations.json +0 -429
  130. package/admin/i18n/pt/flat.txt +0 -427
  131. package/admin/i18n/pt/translations.json +0 -429
  132. package/admin/i18n/ru/flat.txt +0 -427
  133. package/admin/i18n/ru/translations.json +0 -429
  134. package/admin/i18n/uk/flat.txt +0 -427
  135. package/admin/i18n/uk/translations.json +0 -429
  136. package/admin/i18n/zh-cn/flat.txt +0 -427
  137. package/admin/i18n/zh-cn/translations.json +0 -429
  138. package/lib/adapter-config.d.ts +0 -16
  139. package/lib/consts.js +0 -83
  140. package/lib/convert.js +0 -106
  141. package/lib/debug.js +0 -154
  142. package/lib/eventObj.js +0 -201
  143. package/lib/inspect.js +0 -688
  144. package/lib/javascript.d.ts +0 -1858
  145. package/lib/nodeModulesManagement.js +0 -26
  146. package/lib/patternCompareFunctions.js +0 -391
  147. package/lib/protectFs.js +0 -401
  148. package/lib/request.js +0 -72
  149. package/lib/scheduler.js +0 -447
  150. package/lib/tools.js +0 -192
  151. package/lib/typescriptSettings.js +0 -44
  152. package/lib/typescriptTools.js +0 -529
  153. package/lib/utils.js +0 -87
  154. package/main.js +0 -2653
@@ -0,0 +1,477 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const nodeFS = __importStar(require("node:fs"));
37
+ const node_path_1 = require("node:path");
38
+ class ProtectFs {
39
+ log;
40
+ ioBrokerDataDir;
41
+ promises;
42
+ constants;
43
+ constructor(log, ioBrokerDataDir) {
44
+ this.ioBrokerDataDir = ioBrokerDataDir;
45
+ this.log = log || {
46
+ silly: (message) => console.log(message),
47
+ debug: (message) => console.debug(message),
48
+ info: (message) => console.info(message),
49
+ warn: (message) => console.warn(message),
50
+ error: (message) => console.error(message),
51
+ level: 'info',
52
+ };
53
+ this.promises = {
54
+ access: async (path, mode) => {
55
+ this.#checkProtected(path, true);
56
+ return nodeFS.promises.access(path, mode);
57
+ },
58
+ cp: async (source, destination, opts) => {
59
+ this.#checkProtected(source, false);
60
+ this.#checkProtected(destination, false);
61
+ return nodeFS.promises.cp(source, destination, opts);
62
+ },
63
+ readFile: async (path, options) => {
64
+ this.#checkProtected(path, true);
65
+ return nodeFS.promises.readFile(path, options); // async function readFile(path, options) {
66
+ },
67
+ readlink: async (path, options) => {
68
+ this.#checkProtected(path, true);
69
+ return nodeFS.promises.readlink(path, options); // async function readlink(path, options) {
70
+ },
71
+ symlink: async (target, path, type) => {
72
+ this.#checkProtected(target, true);
73
+ this.#checkProtected(path, false);
74
+ return nodeFS.promises.symlink(target, path, type); // async function symlink(target, path, type_) {
75
+ },
76
+ writeFile: async (file, data, options) => {
77
+ this.#checkProtected(file, true);
78
+ return nodeFS.promises.writeFile.call(this, file, data, options); // async function writeFile(path, data, options) {
79
+ },
80
+ unlink: async (path) => {
81
+ this.#checkProtected(path, false);
82
+ return nodeFS.promises.unlink.call(this, path); // async function unlink(path) {
83
+ },
84
+ appendFile: async (path, data, options) => {
85
+ this.#checkProtected(path, false);
86
+ return nodeFS.promises.appendFile.call(this, path, data, options); // async function appendFile(path, data, options) {
87
+ },
88
+ chmod: async (path, mode) => {
89
+ this.#checkProtected(path, false);
90
+ return nodeFS.promises.chmod.call(this, path, mode); // async function chmod(path, mode) {
91
+ },
92
+ copyFile: async (src, dest, mode) => {
93
+ this.#checkProtected(src, false);
94
+ this.#checkProtected(dest, false);
95
+ return nodeFS.promises.copyFile.call(this, src, dest, mode); // async function copyFile(src, dest, mode) {
96
+ },
97
+ rename: async (oldPath, newPath) => {
98
+ this.#checkProtected(oldPath, false);
99
+ this.#checkProtected(newPath, false);
100
+ return nodeFS.promises.rename.call(this, oldPath, newPath); // async function rename(oldPath, newPath) {
101
+ },
102
+ open: async (path, flags, mode) => {
103
+ this.#checkProtected(path, true);
104
+ return nodeFS.promises.open.call(this, path, flags, mode); // async function open(path, flags, mode) {
105
+ },
106
+ truncate: async (path, len) => {
107
+ this.#checkProtected(path, false);
108
+ return nodeFS.promises.truncate.call(this, path, len); // async function truncate(path, len = 0) {
109
+ },
110
+ stat: async (path, opts) => {
111
+ this.#checkProtected(path, true);
112
+ const result = await nodeFS.promises.stat.call(this, path, opts); // async function stat(path, options = { bigint: false }) {
113
+ return result;
114
+ },
115
+ utimes: async (path, atime, mtime) => {
116
+ this.#checkProtected(path, false);
117
+ return nodeFS.promises.utimes.call(this, path, atime, mtime); // async function utimes(path, atime, mtime) {
118
+ },
119
+ readdir: async (path, options) => {
120
+ this.#checkProtected(path, true);
121
+ // @ts-expect-error fix later
122
+ return nodeFS.promises.readdir.call(this, path, options || { encoding: null, withFileTypes: true }); // async function readdir(path, options) {
123
+ },
124
+ lchmod: async (path, mode) => {
125
+ this.#checkProtected(path, false);
126
+ return nodeFS.promises.lchmod.call(this, path, mode); // async function lchmod(path, mode) {
127
+ },
128
+ lchown: async (path, uid, gid) => {
129
+ this.#checkProtected(path, false);
130
+ return nodeFS.promises.lchown.call(this, path, uid, gid); // async function lchown(path, uid, gid) {
131
+ },
132
+ link: async (existingPath, newPath) => {
133
+ this.#checkProtected(existingPath, false);
134
+ this.#checkProtected(newPath, false);
135
+ return nodeFS.promises.link.call(this, existingPath, newPath); // async function link(existingPath, newPath) {
136
+ },
137
+ lstat: async (path, opts) => {
138
+ this.#checkProtected(path, true);
139
+ const res = await nodeFS.promises.lstat.call(this, path, opts); // async function lstat(path, options = { bigint: false }) {
140
+ return res;
141
+ },
142
+ lutimes: async (path, atime, mtime) => {
143
+ this.#checkProtected(path, false);
144
+ return nodeFS.promises.lutimes.call(this, path, atime, mtime); // async function lutimes(path, atime, mtime) {
145
+ },
146
+ mkdir: async (path, options) => {
147
+ this.#checkProtected(path, false);
148
+ return nodeFS.promises.mkdir.call(this, path, options); // async function mkdir(path, options) {
149
+ },
150
+ mkdtemp: async (prefix, options) => {
151
+ this.#checkProtected(prefix, false);
152
+ const tmp = await nodeFS.promises.mkdtemp.call(this, prefix, options); // async function mkdtemp(prefix, options) {
153
+ return tmp.toString();
154
+ },
155
+ rm: async (path, options) => {
156
+ this.#checkProtected(path, false);
157
+ return nodeFS.promises.rm.call(this, path, options); // async function rm(path, options) {
158
+ },
159
+ rmdir: async (path, options) => {
160
+ this.#checkProtected(path, false);
161
+ return nodeFS.promises.rmdir.call(this, path, options); // async function rmdir(path, options) {
162
+ },
163
+ };
164
+ // Add missing constants
165
+ this.constants = nodeFS.constants;
166
+ // Add missing functions
167
+ for (const m in nodeFS) {
168
+ if (typeof nodeFS[m] === 'function' &&
169
+ Object.hasOwn(nodeFS, m) &&
170
+ !Object.hasOwn(Object.getPrototypeOf(this), 'appendFile')) {
171
+ // console.debug(`Missing function in ProtectFS: ${m} - adding from node:fs`);
172
+ // @ts-expect-error Elsewise we must implement EVERY function in fs
173
+ this[m] = nodeFS[m];
174
+ }
175
+ }
176
+ for (const m in nodeFS.promises) {
177
+ if (typeof nodeFS.promises[m] === 'function' &&
178
+ Object.hasOwn(nodeFS.promises, m) &&
179
+ !Object.hasOwn(this.promises, m)) {
180
+ // console.debug(`Missing function in ProtectFS: ${m} - adding from node:fs/promises`);
181
+ // @ts-expect-error Elsewise we must implement EVERY function in fs
182
+ this.promises[m] = nodeFS.promises[m];
183
+ }
184
+ }
185
+ }
186
+ #checkProtected(file, readOnly) {
187
+ if (file.fd) {
188
+ return;
189
+ }
190
+ const filePath = (0, node_path_1.normalize)(file.toString());
191
+ // todo: protect against file://...
192
+ if (filePath.endsWith(`-data${node_path_1.sep}objects.json`) || filePath.endsWith(`-data${node_path_1.sep}objects.jsonl`)) {
193
+ this.log.error(`May not read ${file.toString()}`);
194
+ throw new Error('Permission denied');
195
+ }
196
+ if (!readOnly && filePath.startsWith((0, node_path_1.join)(this.ioBrokerDataDir, 'files'))) {
197
+ this.log.error(`May not read ${file.toString()} - use writeFile instead`);
198
+ throw new Error('Permission denied');
199
+ }
200
+ }
201
+ access(path, callback) {
202
+ this.#checkProtected(path, true);
203
+ return nodeFS.access(path, callback);
204
+ }
205
+ accessSync(path, mode) {
206
+ this.#checkProtected(path, true);
207
+ return nodeFS.accessSync(path, mode); // function accessSync(path, mode) {
208
+ }
209
+ cp(source, destination, opts, callback) {
210
+ this.#checkProtected(source, false);
211
+ this.#checkProtected(destination, false);
212
+ if (callback) {
213
+ return nodeFS.cp(source, destination, opts, callback);
214
+ }
215
+ if (typeof opts === 'function') {
216
+ return nodeFS.cp(source, destination, opts);
217
+ }
218
+ return nodeFS.cp(source, destination, opts);
219
+ }
220
+ cpSync(source, destination, opts) {
221
+ this.#checkProtected(source, false);
222
+ this.#checkProtected(destination, false);
223
+ return nodeFS.cpSync.call(this, source, destination, opts); // function cpSync(src, dest, options) {
224
+ }
225
+ readFile(path, callback) {
226
+ if (typeof path !== 'number') {
227
+ this.#checkProtected(path, true);
228
+ }
229
+ return nodeFS.readFile.call(this, path, callback); // function readFile(path, options, callback) {
230
+ }
231
+ readFileSync(path, options) {
232
+ if (typeof path !== 'number') {
233
+ this.#checkProtected(path, true);
234
+ }
235
+ return nodeFS.readFileSync.call(this, path, options); // function readFileSync(path, options) {
236
+ }
237
+ readlink(path, callback) {
238
+ this.#checkProtected(path, true);
239
+ return nodeFS.readlink.call(this, path, callback); // function readlink(path, options, callback) {
240
+ }
241
+ readlinkSync(path, options) {
242
+ this.#checkProtected(path, true);
243
+ return nodeFS.readlinkSync.call(this, path, options); // function readlinkSync(path, options) {
244
+ }
245
+ symlink(target, path, type, callback) {
246
+ this.#checkProtected(target, true);
247
+ this.#checkProtected(path, false);
248
+ if (typeof callback === 'function') {
249
+ // @ts-expect-error should work
250
+ return nodeFS.symlink.call(this, target, path, type, callback);
251
+ }
252
+ return nodeFS.symlink.call(this, target, path, type); // function symlink(target, path, type_, callback_) {
253
+ }
254
+ symlinkSync(target, path, type) {
255
+ this.#checkProtected(target, true);
256
+ this.#checkProtected(path, false);
257
+ return nodeFS.symlinkSync.call(this, target, path, type); // function symlinkSync(target, path, type) {
258
+ }
259
+ writeFile(file, data, options, callback) {
260
+ if (typeof file !== 'number') {
261
+ this.#checkProtected(file, false);
262
+ }
263
+ // @ts-expect-error should work
264
+ return nodeFS.writeFile.call(this, file, data, options, callback); // function writeFile(path, data, options, callback) {
265
+ }
266
+ writeFileSync(file, data, options) {
267
+ if (typeof file !== 'number') {
268
+ this.#checkProtected(file, false);
269
+ }
270
+ return nodeFS.writeFileSync.call(this, file, data, options); // function writeFileSync(path, data, options) {
271
+ }
272
+ unlink(path, callback) {
273
+ this.#checkProtected(path, false);
274
+ return nodeFS.unlink.call(this, path, callback); // function unlink(path, callback) {
275
+ }
276
+ unlinkSync(path) {
277
+ this.#checkProtected(path, false);
278
+ return nodeFS.unlinkSync.call(this, path); // function unlinkSync(path) {
279
+ }
280
+ appendFile(file, data, callback) {
281
+ if (typeof file !== 'number') {
282
+ this.#checkProtected(file, false);
283
+ }
284
+ return nodeFS.appendFile.call(this, file, data, callback); // function appendFile(path, data, options, callback) {
285
+ }
286
+ appendFileSync(file, data) {
287
+ if (typeof file !== 'number') {
288
+ this.#checkProtected(file, false);
289
+ }
290
+ return nodeFS.appendFileSync.call(this, file, data); // function appendFileSync(path, data, options) {
291
+ }
292
+ chmod(path, mode, callback) {
293
+ this.#checkProtected(path, false);
294
+ return nodeFS.chmod.call(this, path, mode, callback); // function chmod(path, mode, callback) {
295
+ }
296
+ chmodSync(path, mode) {
297
+ this.#checkProtected(path, false);
298
+ return nodeFS.chmodSync.call(this, path, mode); // function chmodSync(path, mode) {
299
+ }
300
+ chown(path, uid, gid, callback) {
301
+ this.#checkProtected(path, false);
302
+ return nodeFS.chown.call(this, path, uid, gid, callback); // function chown(path, uid, gid, callback) {
303
+ }
304
+ chownSync(path, uid, gid) {
305
+ this.#checkProtected(path, false);
306
+ return nodeFS.chownSync.call(this, path, uid, gid); // function chownSync(path, uid, gid) {
307
+ }
308
+ copyFile(src, dest, mode, callback) {
309
+ this.#checkProtected(src, true);
310
+ this.#checkProtected(dest, false);
311
+ // @ts-expect-error should work
312
+ return nodeFS.copyFile.call(this, src, dest, mode, callback); // function copyFile(src, dest, mode, callback) {
313
+ }
314
+ copyFileSync(src, dest, mode) {
315
+ this.#checkProtected(src, true);
316
+ this.#checkProtected(dest, false);
317
+ return nodeFS.copyFileSync.call(this, src, dest, mode); // function copyFileSync(src, dest, mode) {
318
+ }
319
+ rename(oldPath, newPath, callback) {
320
+ this.#checkProtected(oldPath, false);
321
+ this.#checkProtected(newPath, false);
322
+ return nodeFS.rename.call(this, oldPath, newPath, callback); // function rename(oldPath, newPath, callback) {
323
+ }
324
+ renameSync(oldPath, newPath) {
325
+ this.#checkProtected(oldPath, false);
326
+ this.#checkProtected(newPath, false);
327
+ return nodeFS.renameSync.call(this, oldPath, newPath); // function renameSync(oldPath, newPath) {
328
+ }
329
+ open(path, callback) {
330
+ this.#checkProtected(path, true);
331
+ return nodeFS.open.call(this, path, callback); // function open(path, flags, mode, callback) {
332
+ }
333
+ openSync(path, flags, mode) {
334
+ this.#checkProtected(path, true);
335
+ return nodeFS.openSync.call(this, path, flags, mode); // function openSync(path, flags, mode) {
336
+ }
337
+ truncate(path, callback) {
338
+ this.#checkProtected(path, false);
339
+ return nodeFS.truncate.call(this, path, callback); // function truncate(path, len, callback) {
340
+ }
341
+ truncateSync(path) {
342
+ this.#checkProtected(path, false);
343
+ return nodeFS.truncateSync.call(this, path); // function truncateSync(path, len) {
344
+ }
345
+ exists(path, callback) {
346
+ this.#checkProtected(path, true);
347
+ return nodeFS.exists.call(this, path, callback); // function exists(path, callback) {
348
+ }
349
+ existsSync(path) {
350
+ this.#checkProtected(path, true);
351
+ return nodeFS.existsSync.call(this, path); // function existsSync(path) {
352
+ }
353
+ stat(path, options, callback) {
354
+ this.#checkProtected(path, true);
355
+ // @ts-expect-error should work
356
+ return nodeFS.stat.call(this, path, options, callback); // function stat(path, options = { bigint: false }, callback) {
357
+ }
358
+ statSync(path, options) {
359
+ this.#checkProtected(path, true);
360
+ return nodeFS.statSync.call(this, path, options); // function statSync(path, options = { bigint: false, throwIfNoEntry: true }) {
361
+ }
362
+ utimes(path, atime, mtime, callback) {
363
+ this.#checkProtected(path, false);
364
+ return nodeFS.utimes.call(this, path, atime, mtime, callback); // function utimes(path, atime, mtime, callback) {
365
+ }
366
+ utimesSync(path, atime, mtime) {
367
+ this.#checkProtected(path, false);
368
+ return nodeFS.utimesSync.call(this, path, atime, mtime); // function utimesSync(path, atime, mtime) {
369
+ }
370
+ readdir(path, options, callback) {
371
+ this.#checkProtected(path, true);
372
+ // @ts-expect-error should work
373
+ return nodeFS.readdir.call(this, path, options, callback); // function readdir(path, options, callback) {
374
+ }
375
+ readdirSync(path, options) {
376
+ this.#checkProtected(path, true);
377
+ // @ts-expect-error should work
378
+ return nodeFS.readdirSync.call(this, path, options); // function readdirSync(path, options) {
379
+ }
380
+ createReadStream(path, options) {
381
+ this.#checkProtected(path, true);
382
+ return nodeFS.createReadStream.call(this, path, options); // function createReadStream(path, options) {
383
+ }
384
+ createWriteStream(path, options) {
385
+ this.#checkProtected(path, false);
386
+ return nodeFS.createWriteStream.call(this, path, options); // function createWriteStream(path, options) {
387
+ }
388
+ lchmod(path, mode, callback) {
389
+ this.#checkProtected(path, false);
390
+ return nodeFS.lchmod.call(this, path, mode, callback); // function lchmod(path, mode, callback) {
391
+ }
392
+ lchmodSync(path, mode) {
393
+ this.#checkProtected(path, false);
394
+ return nodeFS.lchmodSync.call(this, path, mode); // function lchmodSync(path, mode) {
395
+ }
396
+ lchown(path, uid, gid, callback) {
397
+ this.#checkProtected(path, false);
398
+ return nodeFS.lchown.call(this, path, uid, gid, callback); // function lchown(path, uid, gid, callback) {
399
+ }
400
+ lchownSync(path, uid, gid) {
401
+ this.#checkProtected(path, false);
402
+ return nodeFS.lchownSync.call(this, path, uid, gid); // function lchownSync(path, uid, gid) {
403
+ }
404
+ link(existingPath, newPath, callback) {
405
+ this.#checkProtected(existingPath, false);
406
+ this.#checkProtected(newPath, false);
407
+ return nodeFS.link.call(this, existingPath, newPath, callback); // function link(existingPath, newPath, callback) {
408
+ }
409
+ linkSync(existingPath, newPath) {
410
+ this.#checkProtected(existingPath, false);
411
+ this.#checkProtected(newPath, false);
412
+ return nodeFS.linkSync.call(this, existingPath, newPath); // function linkSync(existingPath, newPath) {
413
+ }
414
+ lstat(path, options, callback) {
415
+ this.#checkProtected(path, true);
416
+ // @ts-expect-error should work
417
+ return nodeFS.lstat.call(this, path, options, callback); // function lstat(path, options = { bigint: false }, callback) {
418
+ }
419
+ lstatSync(path, options) {
420
+ this.#checkProtected(path, true);
421
+ return nodeFS.lstatSync.call(this, path, options); // function lstatSync(path, options = { bigint: false, throwIfNoEntry: true }) {
422
+ }
423
+ lutimes(path, atime, mtime, callback) {
424
+ this.#checkProtected(path, false);
425
+ return nodeFS.lutimes.call(this, path, atime, mtime, callback); // function lutimes(path, atime, mtime, callback) {
426
+ }
427
+ lutimesSync(path, atime, mtime) {
428
+ this.#checkProtected(path, false);
429
+ return nodeFS.lutimesSync.call(this, path, atime, mtime); // function lutimesSync(path, atime, mtime) {
430
+ }
431
+ mkdir(path, options, callback) {
432
+ this.#checkProtected(path, false);
433
+ // @ts-expect-error should work
434
+ return nodeFS.mkdir.call(this, path, options, callback); // function mkdir(path, options, callback) {
435
+ }
436
+ mkdirSync(path, options) {
437
+ this.#checkProtected(path, false);
438
+ return nodeFS.mkdirSync.call(this, path, options); // function mkdirSync(path, options) {
439
+ }
440
+ mkdtemp(prefix, options, callback) {
441
+ this.#checkProtected(prefix, false);
442
+ // @ts-expect-error should work
443
+ return nodeFS.mkdtemp.call(this, prefix, options, callback); // function mkdtemp(prefix, options, callback) {
444
+ }
445
+ mkdtempSync(prefix, options) {
446
+ this.#checkProtected(prefix, false);
447
+ return nodeFS.mkdtempSync.call(this, prefix, options); // function mkdtempSync(prefix, options) {
448
+ }
449
+ rm(path, options, callback) {
450
+ this.#checkProtected(path, false);
451
+ // @ts-expect-error should work
452
+ return nodeFS.rm.call(this, path, options, callback); // function rm(path, options, callback) {
453
+ }
454
+ rmSync(path, options) {
455
+ this.#checkProtected(path, false);
456
+ return nodeFS.rmSync.call(this, path, options); // function rmSync(path, options) {
457
+ }
458
+ rmdir(path, options, callback) {
459
+ this.#checkProtected(path, false);
460
+ // @ts-expect-error should work
461
+ return nodeFS.rmdir.call(this, path, options, callback); // function rmdir(path, options, callback) {
462
+ }
463
+ rmdirSync(path, options) {
464
+ this.#checkProtected(path, false);
465
+ return nodeFS.rmdirSync.call(this, path, options); // function rmdirSync(path, options) {
466
+ }
467
+ watch(filename, listener) {
468
+ this.#checkProtected(filename, true);
469
+ return nodeFS.watch.call(this, filename, listener); // function watch(filename, options, listener) {
470
+ }
471
+ watchFile(filename, listener) {
472
+ this.#checkProtected(filename, true);
473
+ return nodeFS.watchFile.call(this, filename, listener); // function watchFile(filename, options, listener) {
474
+ }
475
+ }
476
+ exports.default = ProtectFs;
477
+ //# sourceMappingURL=protectFs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protectFs.js","sourceRoot":"","sources":["../../src/lib/protectFs.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BufferEncodingOption,\n CopyOptions,\n Dirent,\n MakeDirectoryOptions,\n Mode,\n ObjectEncodingOptions,\n OpenMode,\n PathLike,\n RmDirOptions,\n RmOptions,\n StatOptions,\n Stats,\n TimeLike,\n CopySyncOptions,\n NoParamCallback,\n PathOrFileDescriptor,\n WriteFileOptions,\n EncodingOption,\n FSWatcher,\n ReadStream,\n StatsListener,\n StatWatcher,\n WatchListener,\n WriteStream,\n} from 'node:fs';\nimport type { Abortable } from 'node:events';\nimport type { FileHandle, FlagAndOpenMode } from 'node:fs/promises';\nimport type { URL } from 'node:url';\nimport type { Stream } from 'node:stream';\n\nimport * as nodeFS from 'node:fs';\nimport { sep, normalize, join } from 'node:path';\n\nexport default class ProtectFs {\n private readonly log: ioBroker.Logger;\n private readonly ioBrokerDataDir: string;\n public readonly promises: {\n access: (path: PathLike, mode?: number) => Promise<void>;\n cp: (source: string | URL, destination: string | URL, opts?: CopyOptions) => Promise<void>;\n readFile: (\n path: PathLike | FileHandle,\n options:\n | ({\n encoding: BufferEncoding;\n flag?: OpenMode | undefined;\n } & Abortable)\n | BufferEncoding,\n ) => Promise<string>;\n readlink: (path: PathLike, options: BufferEncodingOption) => Promise<Buffer>;\n symlink: (target: PathLike, path: PathLike, type?: string | null) => Promise<void>;\n writeFile: (\n file: PathLike | FileHandle,\n data:\n | string\n | NodeJS.ArrayBufferView\n | Iterable<string | NodeJS.ArrayBufferView>\n | AsyncIterable<string | NodeJS.ArrayBufferView>\n | Stream,\n options?:\n | (ObjectEncodingOptions & {\n mode?: Mode | undefined;\n flag?: OpenMode | undefined;\n flush?: boolean | undefined;\n } & Abortable)\n | BufferEncoding\n | null,\n ) => Promise<void>;\n unlink: (path: PathLike) => Promise<void>;\n appendFile: (\n path: PathLike | FileHandle,\n data: string | Uint8Array,\n options?:\n | (ObjectEncodingOptions & FlagAndOpenMode & { flush?: boolean | undefined })\n | BufferEncoding\n | null,\n ) => Promise<void>;\n chmod: (path: PathLike, mode: Mode) => Promise<void>;\n copyFile: (src: PathLike, dest: PathLike, mode?: number) => Promise<void>;\n rename: (oldPath: PathLike, newPath: PathLike) => Promise<void>;\n open: (path: PathLike, flags?: string | number, mode?: Mode) => Promise<FileHandle>;\n truncate: (path: PathLike, len?: number) => Promise<void>;\n stat: (path: PathLike, opts?: StatOptions) => Promise<Stats>;\n utimes: (path: PathLike, atime: TimeLike, mtime: TimeLike) => Promise<void>;\n readdir: (\n path: PathLike,\n options?: ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n ) => Promise<Dirent[]>;\n lchmod: (path: PathLike, mode: Mode) => Promise<void>;\n lchown: (path: PathLike, uid: number, gid: number) => Promise<void>;\n link: (existingPath: PathLike, newPath: PathLike) => Promise<void>;\n lstat: (path: PathLike, opts?: StatOptions) => Promise<Stats>;\n lutimes: (path: PathLike, atime: TimeLike, mtime: TimeLike) => Promise<void>;\n mkdir: (path: PathLike, options?: Mode | MakeDirectoryOptions | null) => Promise<string | undefined>;\n mkdtemp: (prefix: string, options?: ObjectEncodingOptions | BufferEncoding | null) => Promise<string>;\n rm: (path: PathLike, options?: RmOptions) => Promise<void>;\n rmdir: (path: PathLike, options?: RmDirOptions) => Promise<void>;\n };\n public readonly constants: Record<string, number>;\n\n constructor(log: ioBroker.Logger, ioBrokerDataDir: string) {\n this.ioBrokerDataDir = ioBrokerDataDir;\n this.log = log || {\n silly: (message: string): void => console.log(message),\n debug: (message: string): void => console.debug(message),\n info: (message: string): void => console.info(message),\n warn: (message: string): void => console.warn(message),\n error: (message: string): void => console.error(message),\n level: 'info',\n };\n\n this.promises = {\n access: async (path: PathLike, mode?: number): Promise<void> => {\n this.#checkProtected(path, true);\n return nodeFS.promises.access(path, mode);\n },\n cp: async (source: string | URL, destination: string | URL, opts?: CopyOptions): Promise<void> => {\n this.#checkProtected(source, false);\n this.#checkProtected(destination, false);\n return nodeFS.promises.cp(source, destination, opts);\n },\n readFile: async (\n path: PathLike | FileHandle,\n options:\n | ({\n encoding: BufferEncoding;\n flag?: OpenMode | undefined;\n } & Abortable)\n | BufferEncoding,\n ): Promise<string> => {\n this.#checkProtected(path, true);\n return nodeFS.promises.readFile(path, options); // async function readFile(path, options) {\n },\n readlink: async (path: PathLike, options: BufferEncodingOption): Promise<Buffer> => {\n this.#checkProtected(path, true);\n return nodeFS.promises.readlink(path, options); // async function readlink(path, options) {\n },\n symlink: async (target: PathLike, path: PathLike, type?: string | null): Promise<void> => {\n this.#checkProtected(target, true);\n this.#checkProtected(path, false);\n return nodeFS.promises.symlink(target, path, type); // async function symlink(target, path, type_) {\n },\n writeFile: async (\n file: PathLike | FileHandle,\n data:\n | string\n | NodeJS.ArrayBufferView\n | Iterable<string | NodeJS.ArrayBufferView>\n | AsyncIterable<string | NodeJS.ArrayBufferView>\n | Stream,\n options?:\n | (ObjectEncodingOptions & {\n mode?: Mode | undefined;\n flag?: OpenMode | undefined;\n /**\n * If all data is successfully written to the file, and `flush`\n * is `true`, `filehandle.sync()` is used to flush the data.\n *\n * @default false\n */\n flush?: boolean | undefined;\n } & Abortable)\n | BufferEncoding\n | null,\n ): Promise<void> => {\n this.#checkProtected(file, true);\n return nodeFS.promises.writeFile.call(this, file, data, options); // async function writeFile(path, data, options) {\n },\n unlink: async (path: PathLike): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.unlink.call(this, path); // async function unlink(path) {\n },\n appendFile: async (\n path: PathLike | FileHandle,\n data: string | Uint8Array,\n options?:\n | (ObjectEncodingOptions & FlagAndOpenMode & { flush?: boolean | undefined })\n | BufferEncoding\n | null,\n ): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.appendFile.call(this, path, data, options); // async function appendFile(path, data, options) {\n },\n chmod: async (path: PathLike, mode: Mode): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.chmod.call(this, path, mode); // async function chmod(path, mode) {\n },\n copyFile: async (src: PathLike, dest: PathLike, mode?: number): Promise<void> => {\n this.#checkProtected(src, false);\n this.#checkProtected(dest, false);\n return nodeFS.promises.copyFile.call(this, src, dest, mode); // async function copyFile(src, dest, mode) {\n },\n rename: async (oldPath: PathLike, newPath: PathLike): Promise<void> => {\n this.#checkProtected(oldPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.promises.rename.call(this, oldPath, newPath); // async function rename(oldPath, newPath) {\n },\n open: async (path: PathLike, flags?: string | number, mode?: Mode): Promise<FileHandle> => {\n this.#checkProtected(path, true);\n return nodeFS.promises.open.call(this, path, flags, mode); // async function open(path, flags, mode) {\n },\n truncate: async (path: PathLike, len?: number): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.truncate.call(this, path, len); // async function truncate(path, len = 0) {\n },\n stat: async (path: PathLike, opts?: StatOptions): Promise<Stats> => {\n this.#checkProtected(path, true);\n const result = await nodeFS.promises.stat.call(this, path, opts); // async function stat(path, options = { bigint: false }) {\n return result as Stats;\n },\n utimes: async (path: PathLike, atime: TimeLike, mtime: TimeLike): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.utimes.call(this, path, atime, mtime); // async function utimes(path, atime, mtime) {\n },\n readdir: async (\n path: PathLike,\n options?: ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n ): Promise<Dirent[]> => {\n this.#checkProtected(path, true);\n // @ts-expect-error fix later\n return nodeFS.promises.readdir.call(this, path, options || { encoding: null, withFileTypes: true }); // async function readdir(path, options) {\n },\n lchmod: async (path: PathLike, mode: Mode): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.lchmod.call(this, path, mode); // async function lchmod(path, mode) {\n },\n lchown: async (path: PathLike, uid: number, gid: number): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.lchown.call(this, path, uid, gid); // async function lchown(path, uid, gid) {\n },\n link: async (existingPath: PathLike, newPath: PathLike): Promise<void> => {\n this.#checkProtected(existingPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.promises.link.call(this, existingPath, newPath); // async function link(existingPath, newPath) {\n },\n lstat: async (path: PathLike, opts?: StatOptions): Promise<Stats> => {\n this.#checkProtected(path, true);\n const res = await nodeFS.promises.lstat.call(this, path, opts); // async function lstat(path, options = { bigint: false }) {\n return res as Stats;\n },\n lutimes: async (path: PathLike, atime: TimeLike, mtime: TimeLike): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.lutimes.call(this, path, atime, mtime); // async function lutimes(path, atime, mtime) {\n },\n mkdir: async (\n path: PathLike,\n options?: Mode | MakeDirectoryOptions | null,\n ): Promise<string | undefined> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.mkdir.call(this, path, options); // async function mkdir(path, options) {\n },\n mkdtemp: async (\n prefix: string,\n options?: ObjectEncodingOptions | BufferEncoding | null,\n ): Promise<string> => {\n this.#checkProtected(prefix, false);\n const tmp = await nodeFS.promises.mkdtemp.call(this, prefix, options); // async function mkdtemp(prefix, options) {\n return tmp.toString();\n },\n rm: async (path: PathLike, options?: RmOptions): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.rm.call(this, path, options); // async function rm(path, options) {\n },\n rmdir: async (path: PathLike, options?: RmDirOptions): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.rmdir.call(this, path, options); // async function rmdir(path, options) {\n },\n };\n\n // Add missing constants\n this.constants = nodeFS.constants;\n\n // Add missing functions\n for (const m in nodeFS) {\n if (\n typeof (nodeFS as unknown as Record<string, any>)[m] === 'function' &&\n Object.hasOwn(nodeFS, m) &&\n !Object.hasOwn(Object.getPrototypeOf(this), 'appendFile')\n ) {\n // console.debug(`Missing function in ProtectFS: ${m} - adding from node:fs`);\n // @ts-expect-error Elsewise we must implement EVERY function in fs\n this[m] = nodeFS[m];\n }\n }\n\n for (const m in nodeFS.promises) {\n if (\n typeof (nodeFS.promises as unknown as Record<string, any>)[m] === 'function' &&\n Object.hasOwn(nodeFS.promises, m) &&\n !Object.hasOwn(this.promises, m)\n ) {\n // console.debug(`Missing function in ProtectFS: ${m} - adding from node:fs/promises`);\n // @ts-expect-error Elsewise we must implement EVERY function in fs\n this.promises[m] = nodeFS.promises[m];\n }\n }\n }\n\n #checkProtected(file: PathLike | FileHandle, readOnly: boolean): void {\n if ((file as FileHandle).fd) {\n return;\n }\n const filePath = normalize((file as PathLike).toString());\n\n // todo: protect against file://...\n if (filePath.endsWith(`-data${sep}objects.json`) || filePath.endsWith(`-data${sep}objects.jsonl`)) {\n this.log.error(`May not read ${(file as PathLike).toString()}`);\n throw new Error('Permission denied');\n }\n if (!readOnly && filePath.startsWith(join(this.ioBrokerDataDir, 'files'))) {\n this.log.error(`May not read ${(file as PathLike).toString()} - use writeFile instead`);\n throw new Error('Permission denied');\n }\n }\n\n access(path: PathLike, callback: NoParamCallback): void {\n this.#checkProtected(path, true);\n return nodeFS.access(path, callback);\n }\n\n accessSync(path: PathLike, mode?: number): void {\n this.#checkProtected(path, true);\n return nodeFS.accessSync(path, mode); // function accessSync(path, mode) {\n }\n\n cp(\n source: string | URL,\n destination: string | URL,\n opts: CopyOptions | ((err: NodeJS.ErrnoException | null) => void),\n callback?: (err: NodeJS.ErrnoException | null) => void,\n ): void {\n this.#checkProtected(source, false);\n this.#checkProtected(destination, false);\n if (callback) {\n return nodeFS.cp(source, destination, opts as CopyOptions, callback);\n }\n if (typeof opts === 'function') {\n return nodeFS.cp(source, destination, opts);\n }\n return nodeFS.cp(source, destination, opts as (err: NodeJS.ErrnoException | null) => void);\n }\n\n cpSync(source: string | URL, destination: string | URL, opts?: CopySyncOptions): void {\n this.#checkProtected(source, false);\n this.#checkProtected(destination, false);\n return nodeFS.cpSync.call(this, source, destination, opts); // function cpSync(src, dest, options) {\n }\n\n readFile(path: PathOrFileDescriptor, callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void): void {\n if (typeof path !== 'number') {\n this.#checkProtected(path, true);\n }\n return nodeFS.readFile.call(this, path, callback); // function readFile(path, options, callback) {\n }\n\n readFileSync(\n path: PathOrFileDescriptor,\n options:\n | {\n encoding: BufferEncoding;\n flag?: string | undefined;\n }\n | BufferEncoding,\n ): string | Buffer {\n if (typeof path !== 'number') {\n this.#checkProtected(path, true);\n }\n return nodeFS.readFileSync.call(this, path, options); // function readFileSync(path, options) {\n }\n\n readlink(path: PathLike, callback: (err: NodeJS.ErrnoException | null, linkString: string) => void): void {\n this.#checkProtected(path, true);\n return nodeFS.readlink.call(this, path, callback); // function readlink(path, options, callback) {\n }\n\n readlinkSync(path: PathLike, options?: any): string | Buffer {\n this.#checkProtected(path, true);\n return nodeFS.readlinkSync.call(this, path, options); // function readlinkSync(path, options) {\n }\n\n symlink(\n target: PathLike,\n path: PathLike,\n type: 'dir' | 'file' | 'junction' | undefined | null | NoParamCallback,\n callback: NoParamCallback,\n ): void {\n this.#checkProtected(target, true);\n this.#checkProtected(path, false);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.symlink.call(this, target, path, type, callback);\n }\n return nodeFS.symlink.call(this, target, path, type as NoParamCallback); // function symlink(target, path, type_, callback_) {\n }\n\n symlinkSync(target: PathLike, path: PathLike, type?: 'dir' | 'file' | 'junction' | null): void {\n this.#checkProtected(target, true);\n this.#checkProtected(path, false);\n return nodeFS.symlinkSync.call(this, target, path, type); // function symlinkSync(target, path, type) {\n }\n\n writeFile(\n file: PathLike | number,\n data: string | NodeJS.ArrayBufferView,\n options: WriteFileOptions | NoParamCallback,\n callback?: NoParamCallback,\n ): void {\n if (typeof file !== 'number') {\n this.#checkProtected(file, false);\n }\n // @ts-expect-error should work\n return nodeFS.writeFile.call(this, file, data, options, callback); // function writeFile(path, data, options, callback) {\n }\n\n writeFileSync(file: PathLike | number, data: string | NodeJS.ArrayBufferView, options?: WriteFileOptions): void {\n if (typeof file !== 'number') {\n this.#checkProtected(file, false);\n }\n return nodeFS.writeFileSync.call(this, file, data, options); // function writeFileSync(path, data, options) {\n }\n\n unlink(path: PathLike, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.unlink.call(this, path, callback); // function unlink(path, callback) {\n }\n\n unlinkSync(path: PathLike): void {\n this.#checkProtected(path, false);\n return nodeFS.unlinkSync.call(this, path); // function unlinkSync(path) {\n }\n\n appendFile(file: PathLike | number, data: string | Uint8Array, callback: NoParamCallback): void {\n if (typeof file !== 'number') {\n this.#checkProtected(file, false);\n }\n return nodeFS.appendFile.call(this, file, data, callback); // function appendFile(path, data, options, callback) {\n }\n\n appendFileSync(file: PathLike | number, data: string | Uint8Array): void {\n if (typeof file !== 'number') {\n this.#checkProtected(file, false);\n }\n return nodeFS.appendFileSync.call(this, file, data); // function appendFileSync(path, data, options) {\n }\n\n chmod(path: PathLike, mode: Mode, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.chmod.call(this, path, mode, callback); // function chmod(path, mode, callback) {\n }\n\n chmodSync(path: PathLike, mode: Mode): void {\n this.#checkProtected(path, false);\n return nodeFS.chmodSync.call(this, path, mode); // function chmodSync(path, mode) {\n }\n\n chown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.chown.call(this, path, uid, gid, callback); // function chown(path, uid, gid, callback) {\n }\n\n chownSync(path: PathLike, uid: number, gid: number): void {\n this.#checkProtected(path, false);\n return nodeFS.chownSync.call(this, path, uid, gid); // function chownSync(path, uid, gid) {\n }\n\n copyFile(src: PathLike, dest: PathLike, mode: number | NoParamCallback, callback?: NoParamCallback): void {\n this.#checkProtected(src, true);\n this.#checkProtected(dest, false);\n // @ts-expect-error should work\n return nodeFS.copyFile.call(this, src, dest, mode, callback); // function copyFile(src, dest, mode, callback) {\n }\n\n copyFileSync(src: PathLike, dest: PathLike, mode?: number): void {\n this.#checkProtected(src, true);\n this.#checkProtected(dest, false);\n return nodeFS.copyFileSync.call(this, src, dest, mode); // function copyFileSync(src, dest, mode) {\n }\n\n rename(oldPath: PathLike, newPath: PathLike, callback: NoParamCallback): void {\n this.#checkProtected(oldPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.rename.call(this, oldPath, newPath, callback); // function rename(oldPath, newPath, callback) {\n }\n\n renameSync(oldPath: PathLike, newPath: PathLike): void {\n this.#checkProtected(oldPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.renameSync.call(this, oldPath, newPath); // function renameSync(oldPath, newPath) {\n }\n\n open(path: PathLike, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void {\n this.#checkProtected(path, true);\n return nodeFS.open.call(this, path, callback); // function open(path, flags, mode, callback) {\n }\n\n openSync(path: PathLike, flags: OpenMode, mode?: Mode | null): number {\n this.#checkProtected(path, true);\n return nodeFS.openSync.call(this, path, flags, mode); // function openSync(path, flags, mode) {\n }\n\n truncate(path: PathLike, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.truncate.call(this, path, callback); // function truncate(path, len, callback) {\n }\n\n truncateSync(path: PathLike): void {\n this.#checkProtected(path, false);\n return nodeFS.truncateSync.call(this, path); // function truncateSync(path, len) {\n }\n\n exists(path: PathLike, callback: (exists: boolean) => void): void {\n this.#checkProtected(path, true);\n return nodeFS.exists.call(this, path, callback); // function exists(path, callback) {\n }\n\n existsSync(path: PathLike): boolean {\n this.#checkProtected(path, true);\n return nodeFS.existsSync.call(this, path); // function existsSync(path) {\n }\n\n stat(\n path: PathLike,\n options: StatOptions | undefined | ((err: NodeJS.ErrnoException | null, stats: Stats) => void),\n callback?: (err: NodeJS.ErrnoException | null, stats: Stats) => void,\n ): void {\n this.#checkProtected(path, true);\n // @ts-expect-error should work\n return nodeFS.stat.call(this, path, options, callback); // function stat(path, options = { bigint: false }, callback) {\n }\n\n statSync(path: PathLike, options?: StatOptions): Stats {\n this.#checkProtected(path, true);\n return nodeFS.statSync.call(this, path, options); // function statSync(path, options = { bigint: false, throwIfNoEntry: true }) {\n }\n\n utimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.utimes.call(this, path, atime, mtime, callback); // function utimes(path, atime, mtime, callback) {\n }\n\n utimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void {\n this.#checkProtected(path, false);\n return nodeFS.utimesSync.call(this, path, atime, mtime); // function utimesSync(path, atime, mtime) {\n }\n\n readdir(\n path: PathLike,\n options:\n | (ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n })\n | ((err: NodeJS.ErrnoException | null, files: Dirent[]) => void),\n callback?: (err: NodeJS.ErrnoException | null, files: Dirent[]) => void,\n ): void {\n this.#checkProtected(path, true);\n // @ts-expect-error should work\n return nodeFS.readdir.call(this, path, options, callback); // function readdir(path, options, callback) {\n }\n\n readdirSync(\n path: PathLike,\n options?: ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n ): void {\n this.#checkProtected(path, true);\n // @ts-expect-error should work\n return nodeFS.readdirSync.call(this, path, options); // function readdirSync(path, options) {\n }\n\n createReadStream(path: PathLike, options?: BufferEncoding): ReadStream {\n this.#checkProtected(path, true);\n return nodeFS.createReadStream.call(this, path, options); // function createReadStream(path, options) {\n }\n\n createWriteStream(path: PathLike, options?: BufferEncoding): WriteStream {\n this.#checkProtected(path, false);\n return nodeFS.createWriteStream.call(this, path, options); // function createWriteStream(path, options) {\n }\n\n lchmod(path: PathLike, mode: Mode, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.lchmod.call(this, path, mode, callback); // function lchmod(path, mode, callback) {\n }\n\n lchmodSync(path: PathLike, mode: Mode): void {\n this.#checkProtected(path, false);\n return nodeFS.lchmodSync.call(this, path, mode); // function lchmodSync(path, mode) {\n }\n\n lchown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.lchown.call(this, path, uid, gid, callback); // function lchown(path, uid, gid, callback) {\n }\n\n lchownSync(path: PathLike, uid: number, gid: number): void {\n this.#checkProtected(path, false);\n return nodeFS.lchownSync.call(this, path, uid, gid); // function lchownSync(path, uid, gid) {\n }\n\n link(existingPath: PathLike, newPath: PathLike, callback: NoParamCallback): void {\n this.#checkProtected(existingPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.link.call(this, existingPath, newPath, callback); // function link(existingPath, newPath, callback) {\n }\n\n linkSync(existingPath: PathLike, newPath: PathLike): void {\n this.#checkProtected(existingPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.linkSync.call(this, existingPath, newPath); // function linkSync(existingPath, newPath) {\n }\n\n lstat(\n path: PathLike,\n options: StatOptions | undefined | ((err: NodeJS.ErrnoException | null, stats: Stats) => void),\n callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void,\n ): void {\n this.#checkProtected(path, true);\n // @ts-expect-error should work\n return nodeFS.lstat.call(this, path, options, callback); // function lstat(path, options = { bigint: false }, callback) {\n }\n\n lstatSync(path: PathLike, options?: StatOptions): Stats {\n this.#checkProtected(path, true);\n return nodeFS.lstatSync.call(this, path, options); // function lstatSync(path, options = { bigint: false, throwIfNoEntry: true }) {\n }\n\n lutimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.lutimes.call(this, path, atime, mtime, callback); // function lutimes(path, atime, mtime, callback) {\n }\n\n lutimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void {\n this.#checkProtected(path, false);\n return nodeFS.lutimesSync.call(this, path, atime, mtime); // function lutimesSync(path, atime, mtime) {\n }\n\n mkdir(\n path: PathLike,\n options:\n | Mode\n | (MakeDirectoryOptions & {\n recursive: true;\n })\n | null\n | undefined\n | ((err: NodeJS.ErrnoException | null, path?: string) => void),\n callback?: (err: NodeJS.ErrnoException | null, path?: string) => void,\n ): void {\n this.#checkProtected(path, false);\n // @ts-expect-error should work\n return nodeFS.mkdir.call(this, path, options, callback); // function mkdir(path, options, callback) {\n }\n\n mkdirSync(\n path: PathLike,\n options?: MakeDirectoryOptions & {\n recursive: true;\n },\n ): string | undefined {\n this.#checkProtected(path, false);\n return nodeFS.mkdirSync.call(this, path, options); // function mkdirSync(path, options) {\n }\n\n mkdtemp(\n prefix: string,\n options: EncodingOption | ((err: NodeJS.ErrnoException | null, folder: string) => void),\n callback?: (err: NodeJS.ErrnoException | null, folder: string) => void,\n ): void {\n this.#checkProtected(prefix, false);\n // @ts-expect-error should work\n return nodeFS.mkdtemp.call(this, prefix, options, callback); // function mkdtemp(prefix, options, callback) {\n }\n\n mkdtempSync(prefix: string, options?: EncodingOption): string | Buffer {\n this.#checkProtected(prefix, false);\n return nodeFS.mkdtempSync.call(this, prefix, options); // function mkdtempSync(prefix, options) {\n }\n\n rm(path: PathLike, options: RmOptions | NoParamCallback, callback?: NoParamCallback): void {\n this.#checkProtected(path, false);\n // @ts-expect-error should work\n return nodeFS.rm.call(this, path, options, callback); // function rm(path, options, callback) {\n }\n\n rmSync(path: PathLike, options?: RmOptions): void {\n this.#checkProtected(path, false);\n return nodeFS.rmSync.call(this, path, options); // function rmSync(path, options) {\n }\n\n rmdir(path: PathLike, options: RmDirOptions | NoParamCallback, callback?: NoParamCallback): void {\n this.#checkProtected(path, false);\n // @ts-expect-error should work\n return nodeFS.rmdir.call(this, path, options, callback); // function rmdir(path, options, callback) {\n }\n\n rmdirSync(path: PathLike, options?: RmDirOptions): void {\n this.#checkProtected(path, false);\n return nodeFS.rmdirSync.call(this, path, options); // function rmdirSync(path, options) {\n }\n\n watch(filename: PathLike, listener?: WatchListener<string>): FSWatcher {\n this.#checkProtected(filename, true);\n return nodeFS.watch.call(this, filename, listener); // function watch(filename, options, listener) {\n }\n\n watchFile(filename: PathLike, listener: StatsListener): StatWatcher {\n this.#checkProtected(filename, true);\n return nodeFS.watchFile.call(this, filename, listener); // function watchFile(filename, options, listener) {\n }\n}\n"]}