@motiontr/motiondb 1.0.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/README.md +328 -0
- package/dist/Database.d.ts +137 -0
- package/dist/Database.js +405 -0
- package/dist/Database.js.map +1 -0
- package/dist/MotionDB.d.ts +89 -0
- package/dist/MotionDB.js +278 -0
- package/dist/MotionDB.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/path.d.ts +22 -0
- package/dist/path.js +119 -0
- package/dist/path.js.map +1 -0
- package/package.json +37 -0
package/dist/MotionDB.js
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MotionDB = void 0;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const node_util_1 = require("node:util");
|
|
9
|
+
const Database_1 = require("./Database");
|
|
10
|
+
/** Aynı dosyayı paylaşan tüm instance'lar tek motor kullanır (veri çakışmasın diye). */
|
|
11
|
+
const engines = new Map();
|
|
12
|
+
function engineFor(filePath, options) {
|
|
13
|
+
const key = node_path_1.default.resolve(filePath);
|
|
14
|
+
const existing = engines.get(key);
|
|
15
|
+
if (existing)
|
|
16
|
+
return existing;
|
|
17
|
+
const engine = new Database_1.JSONDatabase({
|
|
18
|
+
path: key,
|
|
19
|
+
spaces: options.spaces ?? 2,
|
|
20
|
+
// MotionDB her işlemde kendisi yazar (deferWrites açıksa erteler)
|
|
21
|
+
autosave: false,
|
|
22
|
+
debounce: 0,
|
|
23
|
+
createIfMissing: true,
|
|
24
|
+
onCorrupt: options.onCorrupt ?? 'throw',
|
|
25
|
+
});
|
|
26
|
+
engines.set(key, engine);
|
|
27
|
+
return engine;
|
|
28
|
+
}
|
|
29
|
+
const isPlainObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
30
|
+
const needString = (value, which) => {
|
|
31
|
+
if (typeof value !== 'string') {
|
|
32
|
+
throw new Error(`First argument (${which}) needs to be a string`);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const needValue = (value) => {
|
|
36
|
+
if (value == null)
|
|
37
|
+
throw new Error('Missing second argument (value)');
|
|
38
|
+
};
|
|
39
|
+
class MotionDB {
|
|
40
|
+
constructor(options = {}) {
|
|
41
|
+
this.options = { filePath: options.filePath ?? './data.json', ...options };
|
|
42
|
+
this.json = engineFor(this.options.filePath, options);
|
|
43
|
+
this.tableName = options.table ?? 'json';
|
|
44
|
+
this.normalKeys = options.normalKeys ?? false;
|
|
45
|
+
this.deferWrites = options.deferWrites ?? false;
|
|
46
|
+
}
|
|
47
|
+
/** Dosyanın mutlak yolu */
|
|
48
|
+
get file() {
|
|
49
|
+
return this.json.file;
|
|
50
|
+
}
|
|
51
|
+
/** Altta yatan motor (JSONDatabase) — low-level erişim için */
|
|
52
|
+
get engine() {
|
|
53
|
+
return this.json;
|
|
54
|
+
}
|
|
55
|
+
/** Dosyayı yükler, yoksa oluşturur (sync I/O yerine Promise döner). */
|
|
56
|
+
async init() {
|
|
57
|
+
this.json.load();
|
|
58
|
+
if (!this.deferWrites)
|
|
59
|
+
await this.json.save();
|
|
60
|
+
}
|
|
61
|
+
// ------------------------------------------------------------- yardımcılar
|
|
62
|
+
/**
|
|
63
|
+
* Tablonun dosya içindeki yolu: kök anahtar = tablo adı.
|
|
64
|
+
* `{"json": {"myKey": ...}, "guilds": {...}}`
|
|
65
|
+
*/
|
|
66
|
+
get root() {
|
|
67
|
+
return [this.tableName];
|
|
68
|
+
}
|
|
69
|
+
/** Dot notation kuralı: `a.b.c` → ['a','b','c'] (`normalKeys` açıkken nokta literaldir) */
|
|
70
|
+
segments(key) {
|
|
71
|
+
if (this.normalKeys || !key.includes('.'))
|
|
72
|
+
return [key];
|
|
73
|
+
return key.split('.');
|
|
74
|
+
}
|
|
75
|
+
rowPath(key) {
|
|
76
|
+
return [...this.root, ...this.segments(key)];
|
|
77
|
+
}
|
|
78
|
+
/** Tablo nesnesini döndürür, yoksa (veya yanlış tipteyse) `{}` olarak kurar. */
|
|
79
|
+
rows() {
|
|
80
|
+
const current = this.json.get(this.root);
|
|
81
|
+
if (isPlainObject(current))
|
|
82
|
+
return current;
|
|
83
|
+
this.json.set(this.root, {});
|
|
84
|
+
return {};
|
|
85
|
+
}
|
|
86
|
+
async persist() {
|
|
87
|
+
if (!this.deferWrites)
|
|
88
|
+
await this.json.save();
|
|
89
|
+
}
|
|
90
|
+
// ----------------------------------------------------------------- CRUD
|
|
91
|
+
async get(key) {
|
|
92
|
+
needString(key, 'key');
|
|
93
|
+
const value = this.json.get(this.rowPath(key));
|
|
94
|
+
return (value === undefined ? null : value);
|
|
95
|
+
}
|
|
96
|
+
async set(key, value) {
|
|
97
|
+
needString(key, 'key');
|
|
98
|
+
needValue(value);
|
|
99
|
+
this.rows(); // tablo nesnesini garanti altına al
|
|
100
|
+
this.json.set(this.rowPath(key), value);
|
|
101
|
+
await this.persist();
|
|
102
|
+
return value;
|
|
103
|
+
}
|
|
104
|
+
async has(key) {
|
|
105
|
+
return (await this.get(key)) != null;
|
|
106
|
+
}
|
|
107
|
+
async delete(key) {
|
|
108
|
+
needString(key, 'key');
|
|
109
|
+
const existed = this.json.delete(this.rowPath(key));
|
|
110
|
+
if (existed)
|
|
111
|
+
await this.persist();
|
|
112
|
+
return existed ? 1 : 0;
|
|
113
|
+
}
|
|
114
|
+
/** Tablodaki tüm satırları siler, silinen satır sayısını döner. */
|
|
115
|
+
async deleteAll() {
|
|
116
|
+
const count = Object.keys(this.rows()).length;
|
|
117
|
+
this.json.set(this.root, {});
|
|
118
|
+
await this.persist();
|
|
119
|
+
return count;
|
|
120
|
+
}
|
|
121
|
+
/** Yoksa oluşturur, varsa mevcut değeri döner. */
|
|
122
|
+
async ensure(key, defaultValue) {
|
|
123
|
+
needString(key, 'key');
|
|
124
|
+
needValue(defaultValue);
|
|
125
|
+
const current = await this.get(key);
|
|
126
|
+
if (current != null)
|
|
127
|
+
return current;
|
|
128
|
+
return this.set(key, defaultValue);
|
|
129
|
+
}
|
|
130
|
+
// ---------------------------------------------------------------- sayılar
|
|
131
|
+
async addSubtract(key, value, sub = false) {
|
|
132
|
+
needString(key, 'key');
|
|
133
|
+
needValue(value);
|
|
134
|
+
let currentNumber = await this.get(key);
|
|
135
|
+
if (currentNumber == null)
|
|
136
|
+
currentNumber = 0;
|
|
137
|
+
if (typeof currentNumber != 'number') {
|
|
138
|
+
try {
|
|
139
|
+
currentNumber = parseFloat(currentNumber);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
throw new Error(`Current value with key: (${key}) is not a number and couldn't be parsed to a number`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (typeof currentNumber !== 'number' || Number.isNaN(currentNumber)) {
|
|
146
|
+
throw new Error(`Current value with key: (${key}) is not a number and couldn't be parsed to a number`);
|
|
147
|
+
}
|
|
148
|
+
if (typeof value != 'number') {
|
|
149
|
+
try {
|
|
150
|
+
value = parseFloat(value);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
throw new Error(`Value to add/subtract with key: (${key}) is not a number and couldn't be parsed to a number`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const next = sub ? currentNumber - value : currentNumber + value;
|
|
157
|
+
await this.set(key, next);
|
|
158
|
+
return next;
|
|
159
|
+
}
|
|
160
|
+
async add(key, value) {
|
|
161
|
+
return this.addSubtract(key, value);
|
|
162
|
+
}
|
|
163
|
+
async sub(key, value) {
|
|
164
|
+
return this.addSubtract(key, value, true);
|
|
165
|
+
}
|
|
166
|
+
/** `add` ile aynı (bonus) */
|
|
167
|
+
async increment(key, value = 1) {
|
|
168
|
+
return this.add(key, value);
|
|
169
|
+
}
|
|
170
|
+
/** `sub` ile aynı (bonus) */
|
|
171
|
+
async decrement(key, value = 1) {
|
|
172
|
+
return this.sub(key, value);
|
|
173
|
+
}
|
|
174
|
+
// ----------------------------------------------------------------- diziler
|
|
175
|
+
async getArray(key) {
|
|
176
|
+
const current = (await this.get(key)) ?? [];
|
|
177
|
+
if (!Array.isArray(current)) {
|
|
178
|
+
throw new Error(`Current value with key: (${key}) is not an array`);
|
|
179
|
+
}
|
|
180
|
+
return current;
|
|
181
|
+
}
|
|
182
|
+
async push(key, ...values) {
|
|
183
|
+
needString(key, 'key');
|
|
184
|
+
if (values.length === 0)
|
|
185
|
+
throw new Error('Missing second argument (value)');
|
|
186
|
+
const currentArr = await this.getArray(key);
|
|
187
|
+
currentArr.push(...values);
|
|
188
|
+
return this.set(key, currentArr);
|
|
189
|
+
}
|
|
190
|
+
async unshift(key, value) {
|
|
191
|
+
needString(key, 'key');
|
|
192
|
+
needValue(value);
|
|
193
|
+
let currentArr = await this.getArray(key);
|
|
194
|
+
if (Array.isArray(value))
|
|
195
|
+
currentArr = value.concat(currentArr);
|
|
196
|
+
else
|
|
197
|
+
currentArr.unshift(value);
|
|
198
|
+
return this.set(key, currentArr);
|
|
199
|
+
}
|
|
200
|
+
async pop(key) {
|
|
201
|
+
needString(key, 'key');
|
|
202
|
+
const currentArr = await this.getArray(key);
|
|
203
|
+
const value = currentArr.pop();
|
|
204
|
+
await this.set(key, currentArr);
|
|
205
|
+
return value;
|
|
206
|
+
}
|
|
207
|
+
async shift(key) {
|
|
208
|
+
needString(key, 'key');
|
|
209
|
+
const currentArr = await this.getArray(key);
|
|
210
|
+
const value = currentArr.shift();
|
|
211
|
+
await this.set(key, currentArr);
|
|
212
|
+
return value;
|
|
213
|
+
}
|
|
214
|
+
async pull(key, value, once = false) {
|
|
215
|
+
needString(key, 'key');
|
|
216
|
+
needValue(value);
|
|
217
|
+
const currentArr = await this.getArray(key);
|
|
218
|
+
const match = typeof value === 'function'
|
|
219
|
+
? (item, index) => value(item, String(index))
|
|
220
|
+
: Array.isArray(value)
|
|
221
|
+
? (item) => value.some((v) => (0, node_util_1.isDeepStrictEqual)(v, item))
|
|
222
|
+
: (item) => (0, node_util_1.isDeepStrictEqual)(item, value);
|
|
223
|
+
if (once) {
|
|
224
|
+
const index = currentArr.findIndex((item, i) => match(item, i));
|
|
225
|
+
if (index !== -1)
|
|
226
|
+
currentArr.splice(index, 1);
|
|
227
|
+
return this.set(key, currentArr);
|
|
228
|
+
}
|
|
229
|
+
return this.set(key, currentArr.filter((item, i) => !match(item, i)));
|
|
230
|
+
}
|
|
231
|
+
// ------------------------------------------------------------------ sorgular
|
|
232
|
+
async all() {
|
|
233
|
+
return Object.entries(this.rows()).map(([id, value]) => ({ id, value: value }));
|
|
234
|
+
}
|
|
235
|
+
async startsWith(query, key = '') {
|
|
236
|
+
needString(query, 'query');
|
|
237
|
+
needString(key, 'key');
|
|
238
|
+
const source = key === '' ? await this.all() : ((await this.get(key)) ?? []);
|
|
239
|
+
if (!Array.isArray(source))
|
|
240
|
+
return [];
|
|
241
|
+
return source.filter((row) => row?.id?.startsWith(query));
|
|
242
|
+
}
|
|
243
|
+
/** Anahtar sayısını döner (bonus) */
|
|
244
|
+
async count() {
|
|
245
|
+
return Object.keys(this.rows()).length;
|
|
246
|
+
}
|
|
247
|
+
// ------------------------------------------------------------------ tablolar
|
|
248
|
+
table(table) {
|
|
249
|
+
needString(table, 'table');
|
|
250
|
+
const options = { ...this.options, table, normalKeys: this.normalKeys };
|
|
251
|
+
return new MotionDB(options);
|
|
252
|
+
}
|
|
253
|
+
useNormalKeys(activate) {
|
|
254
|
+
this.normalKeys = Boolean(activate);
|
|
255
|
+
}
|
|
256
|
+
static createSingleton(options = {}) {
|
|
257
|
+
if (!this.instance)
|
|
258
|
+
this.instance = new MotionDB(options);
|
|
259
|
+
return this.instance;
|
|
260
|
+
}
|
|
261
|
+
// ------------------------------------------------------------------ kalıcılık
|
|
262
|
+
/** Bekleyen değişiklikleri diske yazar */
|
|
263
|
+
flush() {
|
|
264
|
+
return this.json.save();
|
|
265
|
+
}
|
|
266
|
+
/** Bekleyen değişiklikleri senkron olarak diske yazar */
|
|
267
|
+
flushSync() {
|
|
268
|
+
this.json.flushSync();
|
|
269
|
+
return this;
|
|
270
|
+
}
|
|
271
|
+
/** Motor olaylarını dinle: 'save' | 'load' | 'change' | 'error' */
|
|
272
|
+
on(event, listener) {
|
|
273
|
+
this.json.on(event, listener);
|
|
274
|
+
return this;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
exports.MotionDB = MotionDB;
|
|
278
|
+
//# sourceMappingURL=MotionDB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MotionDB.js","sourceRoot":"","sources":["../src/MotionDB.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { JSONDatabase, type DatabaseOptions, type DatabaseChange, type DatabaseEvents, type CorruptPolicy, } from './Database';
|
|
2
|
+
export { MotionDB, type MotionDBOptions, type MotionRow, } from './MotionDB';
|
|
3
|
+
export { parsePath, type PathInput, type PathSegment, } from './path';
|
|
4
|
+
export { MotionDB as default } from './MotionDB';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = exports.parsePath = exports.MotionDB = exports.JSONDatabase = void 0;
|
|
4
|
+
var Database_1 = require("./Database");
|
|
5
|
+
Object.defineProperty(exports, "JSONDatabase", { enumerable: true, get: function () { return Database_1.JSONDatabase; } });
|
|
6
|
+
var MotionDB_1 = require("./MotionDB");
|
|
7
|
+
Object.defineProperty(exports, "MotionDB", { enumerable: true, get: function () { return MotionDB_1.MotionDB; } });
|
|
8
|
+
var path_1 = require("./path");
|
|
9
|
+
Object.defineProperty(exports, "parsePath", { enumerable: true, get: function () { return path_1.parsePath; } });
|
|
10
|
+
var MotionDB_2 = require("./MotionDB");
|
|
11
|
+
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return MotionDB_2.MotionDB; } });
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAMoB;AALlB,wGAAA,YAAY,OAAA;AAOd,uCAIoB;AAHlB,oGAAA,QAAQ,OAAA;AAKV,+BAIgB;AAHd,iGAAA,SAAS,OAAA;AAKX,uCAAiD;AAAxC,mGAAA,QAAQ,OAAW"}
|
package/dist/path.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dot-path yardımcıları: "guilds.123456.prefix" veya 'users["a.b"].coins' gibi
|
|
3
|
+
* yolları segment dizisine çevirir ve nesne üzerinde okuma/yazma yapar.
|
|
4
|
+
*/
|
|
5
|
+
export type PathSegment = string | number;
|
|
6
|
+
export type PathInput = string | readonly PathSegment[];
|
|
7
|
+
/**
|
|
8
|
+
* Segmentin dizi indeksi olup olmadığı.
|
|
9
|
+
*
|
|
10
|
+
* NOT: Discord snowflake ID'leri (ör. `123456789012345678`) tamamen rakamlardan
|
|
11
|
+
* oluşur ama dizi indeksi DEĞİLDIR. `JSON.stringify` bunları dizi içinde
|
|
12
|
+
* temsil edemediği için sessizce veri kaybına yol açardı — bu yüzden yalnızca
|
|
13
|
+
* geçerli Uint32 indeksleri dizi, geri kalanı (büyük ID'ler) nesne anahtarı sayılır.
|
|
14
|
+
* Ayrıca hiçbir segment otomatik olarak number'a çevrilmez.
|
|
15
|
+
*/
|
|
16
|
+
export declare function isIndex(segment: PathSegment): boolean;
|
|
17
|
+
export declare function parsePath(input: PathInput): PathSegment[];
|
|
18
|
+
export declare function getAt(root: unknown, segments: readonly PathSegment[]): unknown;
|
|
19
|
+
export declare function hasAt(root: unknown, segments: readonly PathSegment[]): boolean;
|
|
20
|
+
export declare function setAt(root: unknown, segments: readonly PathSegment[], value: unknown): void;
|
|
21
|
+
/** Var olan dalları silmez, sadece hedef anahtarı siler. */
|
|
22
|
+
export declare function deleteAt(root: unknown, segments: readonly PathSegment[]): boolean;
|
package/dist/path.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Dot-path yardımcıları: "guilds.123456.prefix" veya 'users["a.b"].coins' gibi
|
|
4
|
+
* yolları segment dizisine çevirir ve nesne üzerinde okuma/yazma yapar.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.isIndex = isIndex;
|
|
8
|
+
exports.parsePath = parsePath;
|
|
9
|
+
exports.getAt = getAt;
|
|
10
|
+
exports.hasAt = hasAt;
|
|
11
|
+
exports.setAt = setAt;
|
|
12
|
+
exports.deleteAt = deleteAt;
|
|
13
|
+
/** `a.b[0].c` | `a["b.c"]` | `a['b.c']` | `a[12]` */
|
|
14
|
+
const TOKEN_RE = /[^.[\]]+|\[["']([^"']+)["']\]|\[(-?\d+)\]/g;
|
|
15
|
+
const INDEX_RE = /^\d+$/;
|
|
16
|
+
/** Geçerli bir dizi indeksi eşiği: 0 .. 4294967294 */
|
|
17
|
+
const MAX_ARRAY_INDEX = 4294967295;
|
|
18
|
+
/**
|
|
19
|
+
* Segmentin dizi indeksi olup olmadığı.
|
|
20
|
+
*
|
|
21
|
+
* NOT: Discord snowflake ID'leri (ör. `123456789012345678`) tamamen rakamlardan
|
|
22
|
+
* oluşur ama dizi indeksi DEĞİLDIR. `JSON.stringify` bunları dizi içinde
|
|
23
|
+
* temsil edemediği için sessizce veri kaybına yol açardı — bu yüzden yalnızca
|
|
24
|
+
* geçerli Uint32 indeksleri dizi, geri kalanı (büyük ID'ler) nesne anahtarı sayılır.
|
|
25
|
+
* Ayrıca hiçbir segment otomatik olarak number'a çevrilmez.
|
|
26
|
+
*/
|
|
27
|
+
function isIndex(segment) {
|
|
28
|
+
if (typeof segment === 'number') {
|
|
29
|
+
return Number.isInteger(segment) && segment >= 0 && segment < MAX_ARRAY_INDEX;
|
|
30
|
+
}
|
|
31
|
+
if (!INDEX_RE.test(segment))
|
|
32
|
+
return false;
|
|
33
|
+
return Number(segment) < MAX_ARRAY_INDEX;
|
|
34
|
+
}
|
|
35
|
+
function parsePath(input) {
|
|
36
|
+
if (Array.isArray(input)) {
|
|
37
|
+
const segments = input.map((s) => s);
|
|
38
|
+
if (segments.length === 0)
|
|
39
|
+
throw new TypeError('[motiondb] Path boş olamaz.');
|
|
40
|
+
return segments;
|
|
41
|
+
}
|
|
42
|
+
const raw = String(input).trim();
|
|
43
|
+
if (raw.length === 0)
|
|
44
|
+
throw new TypeError('[motiondb] Path boş olamaz.');
|
|
45
|
+
const segments = [];
|
|
46
|
+
TOKEN_RE.lastIndex = 0;
|
|
47
|
+
let match;
|
|
48
|
+
while ((match = TOKEN_RE.exec(raw)) !== null) {
|
|
49
|
+
// Tüm segmentler string olarak kalır (büyük ID'lerde kayıp olmasın diye)
|
|
50
|
+
if (match[1] !== undefined)
|
|
51
|
+
segments.push(match[1]);
|
|
52
|
+
else if (match[2] !== undefined)
|
|
53
|
+
segments.push(match[2]);
|
|
54
|
+
else
|
|
55
|
+
segments.push(match[0]);
|
|
56
|
+
}
|
|
57
|
+
if (segments.length === 0)
|
|
58
|
+
throw new TypeError(`[motiondb] Geçersiz path: "${raw}"`);
|
|
59
|
+
return segments;
|
|
60
|
+
}
|
|
61
|
+
function getAt(root, segments) {
|
|
62
|
+
let current = root;
|
|
63
|
+
for (const segment of segments) {
|
|
64
|
+
if (current === null || typeof current !== 'object')
|
|
65
|
+
return undefined;
|
|
66
|
+
current = current[segment];
|
|
67
|
+
}
|
|
68
|
+
return current;
|
|
69
|
+
}
|
|
70
|
+
function hasAt(root, segments) {
|
|
71
|
+
let current = root;
|
|
72
|
+
for (let i = 0; i < segments.length; i++) {
|
|
73
|
+
if (current === null || typeof current !== 'object')
|
|
74
|
+
return false;
|
|
75
|
+
if (!(segments[i] in current))
|
|
76
|
+
return false;
|
|
77
|
+
current = current[segments[i]];
|
|
78
|
+
}
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
function setAt(root, segments, value) {
|
|
82
|
+
if (segments.length === 0)
|
|
83
|
+
throw new TypeError('[motiondb] Path boş olamaz.');
|
|
84
|
+
let current = root;
|
|
85
|
+
for (let i = 0; i < segments.length - 1; i++) {
|
|
86
|
+
const segment = segments[i];
|
|
87
|
+
const existing = current[segment];
|
|
88
|
+
if (existing === null || typeof existing !== 'object') {
|
|
89
|
+
current[segment] = isIndex(segments[i + 1]) ? [] : {};
|
|
90
|
+
}
|
|
91
|
+
else if (Array.isArray(existing) && !isIndex(segments[i + 1])) {
|
|
92
|
+
// Dizi içinde string anahtar saklanamaz (JSON'a yazımda kaybolurdu) → nesneye çevir
|
|
93
|
+
const converted = {};
|
|
94
|
+
for (const [key, value] of Object.entries(existing))
|
|
95
|
+
converted[key] = value;
|
|
96
|
+
current[segment] = converted;
|
|
97
|
+
}
|
|
98
|
+
current = current[segment];
|
|
99
|
+
}
|
|
100
|
+
current[segments[segments.length - 1]] = value;
|
|
101
|
+
}
|
|
102
|
+
/** Var olan dalları silmez, sadece hedef anahtarı siler. */
|
|
103
|
+
function deleteAt(root, segments) {
|
|
104
|
+
if (segments.length === 0)
|
|
105
|
+
return false;
|
|
106
|
+
let current = root;
|
|
107
|
+
for (let i = 0; i < segments.length - 1; i++) {
|
|
108
|
+
if (current === null || typeof current !== 'object')
|
|
109
|
+
return false;
|
|
110
|
+
current = current[segments[i]];
|
|
111
|
+
}
|
|
112
|
+
if (current === null || typeof current !== 'object')
|
|
113
|
+
return false;
|
|
114
|
+
if (!(segments[segments.length - 1] in current))
|
|
115
|
+
return false;
|
|
116
|
+
delete current[segments[segments.length - 1]];
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=path.js.map
|
package/dist/path.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@motiontr/motiondb",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Discord botları için hızlı, atomik ve kullanımı kolay JSON veritabanı (SQLite yok, tek dosya)",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"example": "node examples/basic.js",
|
|
14
|
+
"example:api": "node examples/api.js",
|
|
15
|
+
"test": "node tests/db.test.js && node tests/motiondb.test.js",
|
|
16
|
+
"prepublishOnly": "npm run build && npm test"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"discord",
|
|
20
|
+
"discord.js",
|
|
21
|
+
"json",
|
|
22
|
+
"database",
|
|
23
|
+
"db",
|
|
24
|
+
"motiondb"
|
|
25
|
+
],
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=16.9"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/node": "^26.6.3",
|
|
35
|
+
"typescript": "^5.4.5"
|
|
36
|
+
}
|
|
37
|
+
}
|