@nlabs/arkhamjs-storage-node 3.20.5 → 3.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/NodeStorage/NodeStorage.js +106 -193
- package/lib/NodeStorage/NodeStorage.test.js +65 -0
- package/lib/index.js +31 -14
- package/package.json +13 -11
@@ -1,205 +1,118 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
1
|
+
var __create = Object.create;
|
2
|
+
var __defProp = Object.defineProperty;
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
5
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
8
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
9
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
10
|
+
var __spreadValues = (a, b) => {
|
11
|
+
for (var prop in b || (b = {}))
|
12
|
+
if (__hasOwnProp.call(b, prop))
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
14
|
+
if (__getOwnPropSymbols)
|
15
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
16
|
+
if (__propIsEnum.call(b, prop))
|
17
|
+
__defNormalProp(a, prop, b[prop]);
|
18
|
+
}
|
19
|
+
return a;
|
20
|
+
};
|
21
|
+
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
22
|
+
var __export = (target, all) => {
|
23
|
+
for (var name in all)
|
24
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
25
|
+
};
|
26
|
+
var __reExport = (target, module2, copyDefault, desc) => {
|
27
|
+
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
28
|
+
for (let key of __getOwnPropNames(module2))
|
29
|
+
if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
|
30
|
+
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
|
31
|
+
}
|
32
|
+
return target;
|
33
|
+
};
|
34
|
+
var __toESM = (module2, isNodeMode) => {
|
35
|
+
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
|
36
|
+
};
|
37
|
+
var __toCommonJS = /* @__PURE__ */ ((cache) => {
|
38
|
+
return (module2, temp) => {
|
39
|
+
return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
|
40
|
+
};
|
41
|
+
})(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
|
42
|
+
var NodeStorage_exports = {};
|
43
|
+
__export(NodeStorage_exports, {
|
44
|
+
NodeStorage: () => NodeStorage
|
21
45
|
});
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
require("core-js/modules/es.object.define-property.js");
|
31
|
-
|
32
|
-
var _nodePersist = _interopRequireDefault(require("node-persist"));
|
33
|
-
|
34
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
35
|
-
|
36
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
37
|
-
|
38
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
39
|
-
|
40
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
41
|
-
|
42
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
43
|
-
|
44
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
45
|
-
|
46
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
47
|
-
|
48
|
-
var NodeStorage = /*#__PURE__*/function () {
|
49
|
-
function NodeStorage() {
|
50
|
-
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
51
|
-
|
52
|
-
_classCallCheck(this, NodeStorage);
|
53
|
-
|
54
|
-
_defineProperty(this, "options", {
|
55
|
-
dir: '/tmp',
|
56
|
-
encoding: 'utf8',
|
57
|
-
expiredInterval: 3 * 60 * 1000,
|
46
|
+
var import_node_persist = __toESM(require("node-persist"));
|
47
|
+
class NodeStorage {
|
48
|
+
constructor(options = {}) {
|
49
|
+
this.options = {
|
50
|
+
dir: "/tmp",
|
51
|
+
encoding: "utf8",
|
52
|
+
expiredInterval: 3 * 60 * 1e3,
|
58
53
|
forgiveParseErrors: false,
|
59
54
|
logging: false,
|
60
55
|
parse: JSON.parse,
|
61
56
|
stringify: JSON.stringify
|
62
|
-
}
|
63
|
-
|
64
|
-
// Methods
|
57
|
+
};
|
65
58
|
this.clearStorageData = this.clearStorageData.bind(this);
|
66
59
|
this.getStorageData = this.getStorageData.bind(this);
|
67
|
-
this.setStorageData = this.setStorageData.bind(this);
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
_nodePersist["default"].init(this.options);
|
60
|
+
this.setStorageData = this.setStorageData.bind(this);
|
61
|
+
this.options = __spreadValues(__spreadValues({}, this.options), options);
|
62
|
+
import_node_persist.default.init(this.options);
|
72
63
|
}
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
_createClass(NodeStorage, [{
|
81
|
-
key: "clearStorageData",
|
82
|
-
value:
|
83
|
-
/**
|
84
|
-
* Clears all data from storage.
|
85
|
-
*
|
86
|
-
* @returns {Promise<boolean>} Whether data was successfully saved.
|
87
|
-
*/
|
88
|
-
function clearStorageData() {
|
89
|
-
return NodeStorage.clearPersistData();
|
90
|
-
}
|
91
|
-
/**
|
92
|
-
* Get a key value from storage.
|
93
|
-
*
|
94
|
-
* @param {string} key The key for data.
|
95
|
-
* @returns {Promise<any>} the data object associated with the key.
|
96
|
-
*/
|
97
|
-
|
98
|
-
}, {
|
99
|
-
key: "getStorageData",
|
100
|
-
value: function getStorageData(key) {
|
101
|
-
return NodeStorage.getPersistData(key);
|
102
|
-
}
|
103
|
-
/**
|
104
|
-
* Saves data to storage.
|
105
|
-
*
|
106
|
-
* @param {string} key Key to store data.
|
107
|
-
* @param {any} value Data to store.
|
108
|
-
* @returns {Promise<boolean>} Whether data was successfully saved.
|
109
|
-
*/
|
110
|
-
|
111
|
-
}, {
|
112
|
-
key: "setStorageData",
|
113
|
-
value: function setStorageData(key, value) {
|
114
|
-
return NodeStorage.setPersistData(key, value);
|
64
|
+
static clearPersistData() {
|
65
|
+
try {
|
66
|
+
return new Promise((resolve) => {
|
67
|
+
import_node_persist.default.clear().then(() => resolve(true)).catch(() => resolve(false));
|
68
|
+
});
|
69
|
+
} catch (error) {
|
70
|
+
return Promise.resolve(false);
|
115
71
|
}
|
116
|
-
}
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
return resolve(false);
|
125
|
-
});
|
126
|
-
});
|
127
|
-
} catch (error) {
|
128
|
-
return Promise.resolve(false);
|
129
|
-
}
|
130
|
-
}
|
131
|
-
/**
|
132
|
-
* Removes a key from persistent data.
|
133
|
-
*
|
134
|
-
* @param {string} key Key associated with the data to remove.
|
135
|
-
* @returns {Promise<boolean>} Whether data was successfully removed.
|
136
|
-
*/
|
137
|
-
|
138
|
-
}, {
|
139
|
-
key: "delPersistData",
|
140
|
-
value: function delPersistData(key) {
|
141
|
-
try {
|
142
|
-
return new Promise(function (resolve) {
|
143
|
-
_nodePersist["default"].removeItem(key).then(function () {
|
144
|
-
return resolve(true);
|
145
|
-
})["catch"](function () {
|
146
|
-
return resolve(false);
|
147
|
-
});
|
148
|
-
});
|
149
|
-
} catch (error) {
|
150
|
-
return Promise.resolve(false);
|
151
|
-
}
|
72
|
+
}
|
73
|
+
static delPersistData(key) {
|
74
|
+
try {
|
75
|
+
return new Promise((resolve) => {
|
76
|
+
import_node_persist.default.removeItem(key).then(() => resolve(true)).catch(() => resolve(false));
|
77
|
+
});
|
78
|
+
} catch (error) {
|
79
|
+
return Promise.resolve(false);
|
152
80
|
}
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
return new Promise(function (resolve) {
|
165
|
-
_nodePersist["default"].getItem(key).then(function (value) {
|
166
|
-
var updatedValue = value ? JSON.parse(value) : null;
|
167
|
-
resolve(updatedValue);
|
168
|
-
})["catch"](function () {
|
169
|
-
return resolve(null);
|
170
|
-
});
|
171
|
-
});
|
172
|
-
} catch (error) {
|
173
|
-
return Promise.resolve(null);
|
174
|
-
}
|
81
|
+
}
|
82
|
+
static getPersistData(key) {
|
83
|
+
try {
|
84
|
+
return new Promise((resolve) => {
|
85
|
+
import_node_persist.default.getItem(key).then((value) => {
|
86
|
+
const updatedValue = value ? JSON.parse(value) : null;
|
87
|
+
resolve(updatedValue);
|
88
|
+
}).catch(() => resolve(null));
|
89
|
+
});
|
90
|
+
} catch (error) {
|
91
|
+
return Promise.resolve(null);
|
175
92
|
}
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
}, {
|
185
|
-
key: "setPersistData",
|
186
|
-
value: function setPersistData(key, value) {
|
187
|
-
try {
|
188
|
-
return new Promise(function (resolve) {
|
189
|
-
_nodePersist["default"].setItem(key, value).then(function () {
|
190
|
-
return resolve(true);
|
191
|
-
})["catch"](function () {
|
192
|
-
return resolve(false);
|
193
|
-
});
|
194
|
-
});
|
195
|
-
} catch (error) {
|
196
|
-
return Promise.resolve(false);
|
197
|
-
}
|
93
|
+
}
|
94
|
+
static setPersistData(key, value) {
|
95
|
+
try {
|
96
|
+
return new Promise((resolve) => {
|
97
|
+
import_node_persist.default.setItem(key, value).then(() => resolve(true)).catch(() => resolve(false));
|
98
|
+
});
|
99
|
+
} catch (error) {
|
100
|
+
return Promise.resolve(false);
|
198
101
|
}
|
199
|
-
}
|
200
|
-
|
201
|
-
|
202
|
-
}
|
203
|
-
|
204
|
-
|
205
|
-
|
102
|
+
}
|
103
|
+
clearStorageData() {
|
104
|
+
return NodeStorage.clearPersistData();
|
105
|
+
}
|
106
|
+
getStorageData(key) {
|
107
|
+
return NodeStorage.getPersistData(key);
|
108
|
+
}
|
109
|
+
setStorageData(key, value) {
|
110
|
+
return NodeStorage.setPersistData(key, value);
|
111
|
+
}
|
112
|
+
}
|
113
|
+
module.exports = __toCommonJS(NodeStorage_exports);
|
114
|
+
// Annotate the CommonJS export names for ESM import in node:
|
115
|
+
0 && (module.exports = {
|
116
|
+
NodeStorage
|
117
|
+
});
|
118
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL05vZGVTdG9yYWdlL05vZGVTdG9yYWdlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IFBlcnNpc3RTdG9yYWdlLCB7SW5pdE9wdGlvbnN9IGZyb20gJ25vZGUtcGVyc2lzdCc7XG5cbmV4cG9ydCBjbGFzcyBOb2RlU3RvcmFnZSB7XG4gIHByaXZhdGUgb3B0aW9uczogSW5pdE9wdGlvbnMgPSB7XG4gICAgZGlyOiAnL3RtcCcsXG4gICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICBleHBpcmVkSW50ZXJ2YWw6IDMgKiA2MCAqIDEwMDAsXG4gICAgZm9yZ2l2ZVBhcnNlRXJyb3JzOiBmYWxzZSxcbiAgICBsb2dnaW5nOiBmYWxzZSxcbiAgICBwYXJzZTogSlNPTi5wYXJzZSxcbiAgICBzdHJpbmdpZnk6IEpTT04uc3RyaW5naWZ5XG4gIH07XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSW5pdE9wdGlvbnMgPSB7fSkge1xuICAgIC8vIE1ldGhvZHNcbiAgICB0aGlzLmNsZWFyU3RvcmFnZURhdGEgPSB0aGlzLmNsZWFyU3RvcmFnZURhdGEuYmluZCh0aGlzKTtcbiAgICB0aGlzLmdldFN0b3JhZ2VEYXRhID0gdGhpcy5nZXRTdG9yYWdlRGF0YS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc2V0U3RvcmFnZURhdGEgPSB0aGlzLnNldFN0b3JhZ2VEYXRhLmJpbmQodGhpcyk7XG5cbiAgICAvLyBDb25maWd1cmF0aW9uXG4gICAgdGhpcy5vcHRpb25zID0gey4uLnRoaXMub3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgUGVyc2lzdFN0b3JhZ2UuaW5pdCh0aGlzLm9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIGtleXMgZnJvbSBwZXJzaXN0ZW50IGRhdGEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSBXaGV0aGVyIGRhdGEgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkLlxuICAgKi9cbiAgc3RhdGljIGNsZWFyUGVyc2lzdERhdGEoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBQZXJzaXN0U3RvcmFnZS5jbGVhcigpXG4gICAgICAgICAgLnRoZW4oKCkgPT4gcmVzb2x2ZSh0cnVlKSlcbiAgICAgICAgICAuY2F0Y2goKCkgPT4gcmVzb2x2ZShmYWxzZSkpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBrZXkgZnJvbSBwZXJzaXN0ZW50IGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgS2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0YSB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSBXaGV0aGVyIGRhdGEgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkLlxuICAgKi9cbiAgc3RhdGljIGRlbFBlcnNpc3REYXRhKGtleTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBQZXJzaXN0U3RvcmFnZS5yZW1vdmVJdGVtKGtleSlcbiAgICAgICAgICAudGhlbigoKSA9PiByZXNvbHZlKHRydWUpKVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiByZXNvbHZlKGZhbHNlKSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEga2V5IHZhbHVlIGZyb20gcGVyc2lzdGVudCBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgZm9yIGRhdGEuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59IHRoZSBkYXRhIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGtleS5cbiAgICovXG4gIHN0YXRpYyBnZXRQZXJzaXN0RGF0YShrZXk6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBQZXJzaXN0U3RvcmFnZS5nZXRJdGVtKGtleSlcbiAgICAgICAgICAudGhlbigodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZhbHVlID0gdmFsdWUgPyBKU09OLnBhcnNlKHZhbHVlKSA6IG51bGw7XG4gICAgICAgICAgICByZXNvbHZlKHVwZGF0ZWRWYWx1ZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKCkgPT4gcmVzb2x2ZShudWxsKSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBkYXRhIHRvIHBlcnNpc3RlbnQgZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBLZXkgdG8gc3RvcmUgZGF0YS5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIERhdGEgdG8gc3RvcmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSBXaGV0aGVyIGRhdGEgd2FzIHN1Y2Nlc3NmdWxseSBzYXZlZC5cbiAgICovXG4gIHN0YXRpYyBzZXRQZXJzaXN0RGF0YShrZXk6IHN0cmluZywgdmFsdWUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIFBlcnNpc3RTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSlcbiAgICAgICAgICAudGhlbigoKSA9PiByZXNvbHZlKHRydWUpKVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiByZXNvbHZlKGZhbHNlKSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCBkYXRhIGZyb20gc3RvcmFnZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IFdoZXRoZXIgZGF0YSB3YXMgc3VjY2Vzc2Z1bGx5IHNhdmVkLlxuICAgKi9cbiAgY2xlYXJTdG9yYWdlRGF0YSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gTm9kZVN0b3JhZ2UuY2xlYXJQZXJzaXN0RGF0YSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIGtleSB2YWx1ZSBmcm9tIHN0b3JhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBmb3IgZGF0YS5cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn0gdGhlIGRhdGEgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LlxuICAgKi9cbiAgZ2V0U3RvcmFnZURhdGEoa2V5OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBOb2RlU3RvcmFnZS5nZXRQZXJzaXN0RGF0YShrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGRhdGEgdG8gc3RvcmFnZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBLZXkgdG8gc3RvcmUgZGF0YS5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIERhdGEgdG8gc3RvcmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSBXaGV0aGVyIGRhdGEgd2FzIHN1Y2Nlc3NmdWxseSBzYXZlZC5cbiAgICovXG4gIHNldFN0b3JhZ2VEYXRhKGtleTogc3RyaW5nLCB2YWx1ZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBOb2RlU3RvcmFnZS5zZXRQZXJzaXN0RGF0YShrZXksIHZhbHVlKTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBLDBCQUEwQztBQUVuQyxrQkFBa0I7QUFBQSxFQVd2QixZQUFZLFVBQXVCLElBQUk7QUFWL0IsbUJBQXVCO0FBQUEsTUFDN0IsS0FBSztBQUFBLE1BQ0wsVUFBVTtBQUFBLE1BQ1YsaUJBQWlCLElBQUksS0FBSztBQUFBLE1BQzFCLG9CQUFvQjtBQUFBLE1BQ3BCLFNBQVM7QUFBQSxNQUNULE9BQU8sS0FBSztBQUFBLE1BQ1osV0FBVyxLQUFLO0FBQUE7QUFLaEIsU0FBSyxtQkFBbUIsS0FBSyxpQkFBaUIsS0FBSztBQUNuRCxTQUFLLGlCQUFpQixLQUFLLGVBQWUsS0FBSztBQUMvQyxTQUFLLGlCQUFpQixLQUFLLGVBQWUsS0FBSztBQUcvQyxTQUFLLFVBQVUsa0NBQUksS0FBSyxVQUFZO0FBQ3BDLGdDQUFlLEtBQUssS0FBSztBQUFBO0FBQUEsU0FRcEIsbUJBQXFDO0FBQzFDLFFBQUk7QUFDRixhQUFPLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDOUIsb0NBQWUsUUFDWixLQUFLLE1BQU0sUUFBUSxPQUNuQixNQUFNLE1BQU0sUUFBUTtBQUFBO0FBQUEsYUFFbkIsT0FBTjtBQUNBLGFBQU8sUUFBUSxRQUFRO0FBQUE7QUFBQTtBQUFBLFNBVXBCLGVBQWUsS0FBK0I7QUFDbkQsUUFBSTtBQUNGLGFBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM5QixvQ0FBZSxXQUFXLEtBQ3ZCLEtBQUssTUFBTSxRQUFRLE9BQ25CLE1BQU0sTUFBTSxRQUFRO0FBQUE7QUFBQSxhQUVuQixPQUFOO0FBQ0EsYUFBTyxRQUFRLFFBQVE7QUFBQTtBQUFBO0FBQUEsU0FVcEIsZUFBZSxLQUEyQjtBQUMvQyxRQUFJO0FBQ0YsYUFBTyxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzlCLG9DQUFlLFFBQVEsS0FDcEIsS0FBSyxDQUFDLFVBQWtCO0FBQ3ZCLGdCQUFNLGVBQWUsUUFBUSxLQUFLLE1BQU0sU0FBUztBQUNqRCxrQkFBUTtBQUFBLFdBRVQsTUFBTSxNQUFNLFFBQVE7QUFBQTtBQUFBLGFBRW5CLE9BQU47QUFDQSxhQUFPLFFBQVEsUUFBUTtBQUFBO0FBQUE7QUFBQSxTQVdwQixlQUFlLEtBQWEsT0FBeUI7QUFDMUQsUUFBSTtBQUNGLGFBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM5QixvQ0FBZSxRQUFRLEtBQUssT0FDekIsS0FBSyxNQUFNLFFBQVEsT0FDbkIsTUFBTSxNQUFNLFFBQVE7QUFBQTtBQUFBLGFBRW5CLE9BQU47QUFDQSxhQUFPLFFBQVEsUUFBUTtBQUFBO0FBQUE7QUFBQSxFQVMzQixtQkFBcUM7QUFDbkMsV0FBTyxZQUFZO0FBQUE7QUFBQSxFQVNyQixlQUFlLEtBQTJCO0FBQ3hDLFdBQU8sWUFBWSxlQUFlO0FBQUE7QUFBQSxFQVVwQyxlQUFlLEtBQWEsT0FBeUI7QUFDbkQsV0FBTyxZQUFZLGVBQWUsS0FBSztBQUFBO0FBQUE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
@@ -0,0 +1,65 @@
|
|
1
|
+
var __create = Object.create;
|
2
|
+
var __defProp = Object.defineProperty;
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
7
|
+
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
8
|
+
var __reExport = (target, module2, copyDefault, desc) => {
|
9
|
+
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
10
|
+
for (let key of __getOwnPropNames(module2))
|
11
|
+
if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
|
12
|
+
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
|
13
|
+
}
|
14
|
+
return target;
|
15
|
+
};
|
16
|
+
var __toESM = (module2, isNodeMode) => {
|
17
|
+
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
|
18
|
+
};
|
19
|
+
var import_node_persist = __toESM(require("node-persist"));
|
20
|
+
var import_NodeStorage = require("./NodeStorage");
|
21
|
+
describe("NodeStorage", () => {
|
22
|
+
beforeAll(() => {
|
23
|
+
new import_NodeStorage.NodeStorage();
|
24
|
+
});
|
25
|
+
describe(".delPersistData", () => {
|
26
|
+
let storageSpy;
|
27
|
+
beforeAll(() => {
|
28
|
+
storageSpy = jest.spyOn(import_node_persist.default, "removeItem");
|
29
|
+
});
|
30
|
+
afterAll(() => {
|
31
|
+
storageSpy.mockRestore();
|
32
|
+
});
|
33
|
+
it("should delete async data", async () => {
|
34
|
+
await import_NodeStorage.NodeStorage.delPersistData("test");
|
35
|
+
expect(storageSpy.mock.calls.length).toBe(1);
|
36
|
+
});
|
37
|
+
});
|
38
|
+
describe(".getPersistData", () => {
|
39
|
+
let storageSpy;
|
40
|
+
beforeAll(() => {
|
41
|
+
storageSpy = jest.spyOn(import_node_persist.default, "getItem");
|
42
|
+
});
|
43
|
+
afterAll(() => {
|
44
|
+
storageSpy.mockRestore();
|
45
|
+
});
|
46
|
+
it("should delete async data", async () => {
|
47
|
+
await import_NodeStorage.NodeStorage.getPersistData("test");
|
48
|
+
expect(storageSpy.mock.calls.length).toBe(1);
|
49
|
+
});
|
50
|
+
});
|
51
|
+
describe(".setPersistData", () => {
|
52
|
+
let storageSpy;
|
53
|
+
beforeAll(() => {
|
54
|
+
storageSpy = jest.spyOn(import_node_persist.default, "setItem");
|
55
|
+
});
|
56
|
+
afterAll(() => {
|
57
|
+
storageSpy.mockRestore();
|
58
|
+
});
|
59
|
+
it("should delete async data", async () => {
|
60
|
+
await import_NodeStorage.NodeStorage.setPersistData("test", "hello world");
|
61
|
+
expect(storageSpy.mock.calls.length).toBe(1);
|
62
|
+
});
|
63
|
+
});
|
64
|
+
});
|
65
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL05vZGVTdG9yYWdlL05vZGVTdG9yYWdlLnRlc3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCBQZXJzaXN0U3RvcmFnZSBmcm9tICdub2RlLXBlcnNpc3QnO1xuXG5pbXBvcnQge05vZGVTdG9yYWdlfSBmcm9tICcuL05vZGVTdG9yYWdlJztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuZGVzY3JpYmUoJ05vZGVTdG9yYWdlJywgKCkgPT4ge1xuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIG5ldyBOb2RlU3RvcmFnZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnLmRlbFBlcnNpc3REYXRhJywgKCkgPT4ge1xuICAgIGxldCBzdG9yYWdlU3B5O1xuXG4gICAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICAgIC8vIFNweVxuICAgICAgc3RvcmFnZVNweSA9IGplc3Quc3B5T24oUGVyc2lzdFN0b3JhZ2UsICdyZW1vdmVJdGVtJyk7XG4gICAgfSk7XG5cbiAgICBhZnRlckFsbCgoKSA9PiB7XG4gICAgICBzdG9yYWdlU3B5Lm1vY2tSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlbGV0ZSBhc3luYyBkYXRhJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgTm9kZVN0b3JhZ2UuZGVsUGVyc2lzdERhdGEoJ3Rlc3QnKTtcbiAgICAgIGV4cGVjdChzdG9yYWdlU3B5Lm1vY2suY2FsbHMubGVuZ3RoKS50b0JlKDEpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnLmdldFBlcnNpc3REYXRhJywgKCkgPT4ge1xuICAgIGxldCBzdG9yYWdlU3B5O1xuXG4gICAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICAgIC8vIFNweVxuICAgICAgc3RvcmFnZVNweSA9IGplc3Quc3B5T24oUGVyc2lzdFN0b3JhZ2UsICdnZXRJdGVtJyk7XG4gICAgfSk7XG5cbiAgICBhZnRlckFsbCgoKSA9PiB7XG4gICAgICBzdG9yYWdlU3B5Lm1vY2tSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlbGV0ZSBhc3luYyBkYXRhJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgTm9kZVN0b3JhZ2UuZ2V0UGVyc2lzdERhdGEoJ3Rlc3QnKTtcbiAgICAgIGV4cGVjdChzdG9yYWdlU3B5Lm1vY2suY2FsbHMubGVuZ3RoKS50b0JlKDEpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnLnNldFBlcnNpc3REYXRhJywgKCkgPT4ge1xuICAgIGxldCBzdG9yYWdlU3B5O1xuXG4gICAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICAgIC8vIFNweVxuICAgICAgc3RvcmFnZVNweSA9IGplc3Quc3B5T24oUGVyc2lzdFN0b3JhZ2UsICdzZXRJdGVtJyk7XG4gICAgfSk7XG5cbiAgICBhZnRlckFsbCgoKSA9PiB7XG4gICAgICBzdG9yYWdlU3B5Lm1vY2tSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlbGV0ZSBhc3luYyBkYXRhJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgTm9kZVN0b3JhZ2Uuc2V0UGVyc2lzdERhdGEoJ3Rlc3QnLCAnaGVsbG8gd29ybGQnKTtcbiAgICAgIGV4cGVjdChzdG9yYWdlU3B5Lm1vY2suY2FsbHMubGVuZ3RoKS50b0JlKDEpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMEJBQTJCO0FBRTNCLHlCQUEwQjtBQU8xQixTQUFTLGVBQWUsTUFBTTtBQUM1QixZQUFVLE1BQU07QUFDZCxRQUFJO0FBQUE7QUFHTixXQUFTLG1CQUFtQixNQUFNO0FBQ2hDLFFBQUk7QUFFSixjQUFVLE1BQU07QUFFZCxtQkFBYSxLQUFLLE1BQU0sNkJBQWdCO0FBQUE7QUFHMUMsYUFBUyxNQUFNO0FBQ2IsaUJBQVc7QUFBQTtBQUdiLE9BQUcsNEJBQTRCLFlBQVk7QUFDekMsWUFBTSwrQkFBWSxlQUFlO0FBQ2pDLGFBQU8sV0FBVyxLQUFLLE1BQU0sUUFBUSxLQUFLO0FBQUE7QUFBQTtBQUk5QyxXQUFTLG1CQUFtQixNQUFNO0FBQ2hDLFFBQUk7QUFFSixjQUFVLE1BQU07QUFFZCxtQkFBYSxLQUFLLE1BQU0sNkJBQWdCO0FBQUE7QUFHMUMsYUFBUyxNQUFNO0FBQ2IsaUJBQVc7QUFBQTtBQUdiLE9BQUcsNEJBQTRCLFlBQVk7QUFDekMsWUFBTSwrQkFBWSxlQUFlO0FBQ2pDLGFBQU8sV0FBVyxLQUFLLE1BQU0sUUFBUSxLQUFLO0FBQUE7QUFBQTtBQUk5QyxXQUFTLG1CQUFtQixNQUFNO0FBQ2hDLFFBQUk7QUFFSixjQUFVLE1BQU07QUFFZCxtQkFBYSxLQUFLLE1BQU0sNkJBQWdCO0FBQUE7QUFHMUMsYUFBUyxNQUFNO0FBQ2IsaUJBQVc7QUFBQTtBQUdiLE9BQUcsNEJBQTRCLFlBQVk7QUFDekMsWUFBTSwrQkFBWSxlQUFlLFFBQVE7QUFDekMsYUFBTyxXQUFXLEtBQUssTUFBTSxRQUFRLEtBQUs7QUFBQTtBQUFBO0FBQUE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/lib/index.js
CHANGED
@@ -1,16 +1,33 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
1
|
+
var __defProp = Object.defineProperty;
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
5
|
+
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
6
|
+
var __export = (target, all) => {
|
7
|
+
for (var name in all)
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
9
|
+
};
|
10
|
+
var __reExport = (target, module2, copyDefault, desc) => {
|
11
|
+
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
12
|
+
for (let key of __getOwnPropNames(module2))
|
13
|
+
if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
|
14
|
+
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
|
12
15
|
}
|
16
|
+
return target;
|
17
|
+
};
|
18
|
+
var __toCommonJS = /* @__PURE__ */ ((cache) => {
|
19
|
+
return (module2, temp) => {
|
20
|
+
return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
|
21
|
+
};
|
22
|
+
})(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
|
23
|
+
var src_exports = {};
|
24
|
+
__export(src_exports, {
|
25
|
+
NodeStorage: () => import_NodeStorage.NodeStorage
|
26
|
+
});
|
27
|
+
var import_NodeStorage = require("./NodeStorage/NodeStorage");
|
28
|
+
module.exports = __toCommonJS(src_exports);
|
29
|
+
// Annotate the CommonJS export names for ESM import in node:
|
30
|
+
0 && (module.exports = {
|
31
|
+
NodeStorage
|
13
32
|
});
|
14
|
-
|
15
|
-
var _NodeStorage = require("./NodeStorage/NodeStorage");
|
16
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUlBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Tm9kZVN0b3JhZ2V9IGZyb20gJy4vTm9kZVN0b3JhZ2UvTm9kZVN0b3JhZ2UnO1xuXG4vLyBTdG9yYWdlXG5leHBvcnQge05vZGVTdG9yYWdlfTtcbiJdfQ==
|
33
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtOb2RlU3RvcmFnZX0gZnJvbSAnLi9Ob2RlU3RvcmFnZS9Ob2RlU3RvcmFnZSc7XG5cbi8vIFN0b3JhZ2VcbmV4cG9ydCB7Tm9kZVN0b3JhZ2V9O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUEseUJBQTBCOyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/package.json
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
{
|
2
2
|
"name": "@nlabs/arkhamjs-storage-node",
|
3
|
-
"version": "3.
|
3
|
+
"version": "3.23.0",
|
4
4
|
"publishConfig": {
|
5
5
|
"access": "public"
|
6
6
|
},
|
7
7
|
"description": "NodeJS storage for ArkhamJS",
|
8
8
|
"license": "MIT",
|
9
|
-
"main": "index.js",
|
9
|
+
"main": "./lib/index.js",
|
10
|
+
"module": "./lib/index.js",
|
11
|
+
"browser": "./lib/index.js",
|
10
12
|
"types": "./lib/index.d.ts",
|
11
13
|
"keywords": [
|
12
14
|
"arkhamjs",
|
@@ -43,13 +45,13 @@
|
|
43
45
|
"@nlabs/arkhamjs": "^3.20"
|
44
46
|
},
|
45
47
|
"devDependencies": {
|
46
|
-
"@nlabs/arkhamjs": "^3.
|
47
|
-
"@types/jest": "^
|
48
|
-
"@types/node": "^
|
49
|
-
"@types/node-persist": "^3.1.
|
50
|
-
"eslint": "^7.
|
51
|
-
"eslint-config-styleguidejs": "^1.5.
|
52
|
-
"typescript": "^4.
|
53
|
-
},
|
54
|
-
"gitHead": "
|
48
|
+
"@nlabs/arkhamjs": "^3.23.0",
|
49
|
+
"@types/jest": "^27.4.0",
|
50
|
+
"@types/node": "^17.0.18",
|
51
|
+
"@types/node-persist": "^3.1.2",
|
52
|
+
"eslint": "^7.32.0",
|
53
|
+
"eslint-config-styleguidejs": "^1.5.5",
|
54
|
+
"typescript": "^4.5.5"
|
55
|
+
},
|
56
|
+
"gitHead": "337ef3d14c6cf514db1ae5429d9471188f8ec9b9"
|
55
57
|
}
|