braid-text 0.2.110 → 0.2.112
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/index.js +87 -1
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -9,7 +9,10 @@ function create_braid_text() {
|
|
|
9
9
|
db_folder: './braid-text-db',
|
|
10
10
|
length_cache_size: 10,
|
|
11
11
|
meta_file_save_period_ms: 1000,
|
|
12
|
-
cache: {}
|
|
12
|
+
cache: {},
|
|
13
|
+
backups: false,
|
|
14
|
+
backups_folder: './braid-text-backups',
|
|
15
|
+
backups_interval: 60 * 1000
|
|
13
16
|
}
|
|
14
17
|
|
|
15
18
|
let waiting_puts = 0
|
|
@@ -1299,10 +1302,92 @@ function create_braid_text() {
|
|
|
1299
1302
|
var files = (await fs.promises.readdir(braid_text.db_folder))
|
|
1300
1303
|
.filter(x => /\.\d+$/.test(x))
|
|
1301
1304
|
init_filename_mapping(files)
|
|
1305
|
+
|
|
1306
|
+
// Start backups if enabled
|
|
1307
|
+
if (braid_text.backups) backup_init()
|
|
1302
1308
|
})()
|
|
1303
1309
|
await db_folder_init.p
|
|
1304
1310
|
}
|
|
1305
1311
|
|
|
1312
|
+
function backup_init() {
|
|
1313
|
+
if (backup_init.started) return
|
|
1314
|
+
backup_init.started = true
|
|
1315
|
+
|
|
1316
|
+
async function backup_braid_text_db() {
|
|
1317
|
+
var path = require('path')
|
|
1318
|
+
var src_dir = braid_text.db_folder
|
|
1319
|
+
var backup_dir = braid_text.backups_folder
|
|
1320
|
+
|
|
1321
|
+
// Create backup dir if it doesn't exist
|
|
1322
|
+
await fs.promises.mkdir(backup_dir, { recursive: true })
|
|
1323
|
+
|
|
1324
|
+
// Get current date string
|
|
1325
|
+
var d = new Date()
|
|
1326
|
+
var y = d.getYear() + 1900
|
|
1327
|
+
var m = d.getMonth() + 1
|
|
1328
|
+
if (m < 10) m = '0' + m
|
|
1329
|
+
var day = d.getDate()
|
|
1330
|
+
if (day < 10) day = '0' + day
|
|
1331
|
+
var date = y + '-' + m + '-' + day
|
|
1332
|
+
|
|
1333
|
+
// Read files in src_dir (non-recursive)
|
|
1334
|
+
var files
|
|
1335
|
+
try {
|
|
1336
|
+
files = await fs.promises.readdir(src_dir)
|
|
1337
|
+
} catch (e) { return }
|
|
1338
|
+
|
|
1339
|
+
for (var file of files) {
|
|
1340
|
+
// Only process files ending with .N where N is an integer
|
|
1341
|
+
var match = file.match(/^(.+)\.(\d+)$/)
|
|
1342
|
+
if (!match) continue
|
|
1343
|
+
|
|
1344
|
+
var base_name = match[1]
|
|
1345
|
+
var src_path = path.join(src_dir, file)
|
|
1346
|
+
|
|
1347
|
+
// Get source file stats
|
|
1348
|
+
var src_stat
|
|
1349
|
+
try {
|
|
1350
|
+
src_stat = await fs.promises.stat(src_path)
|
|
1351
|
+
} catch (e) { continue }
|
|
1352
|
+
|
|
1353
|
+
// Skip directories
|
|
1354
|
+
if (!src_stat.isFile()) continue
|
|
1355
|
+
|
|
1356
|
+
// Create backup subdir for this base_name if needed
|
|
1357
|
+
var file_backup_dir = path.join(backup_dir, base_name)
|
|
1358
|
+
await fs.promises.mkdir(file_backup_dir, { recursive: true })
|
|
1359
|
+
|
|
1360
|
+
// Check if we need to backup (compare mtime with most recent backup)
|
|
1361
|
+
var backup_path = path.join(file_backup_dir, date)
|
|
1362
|
+
var needs_backup = true
|
|
1363
|
+
|
|
1364
|
+
try {
|
|
1365
|
+
// Find the latest backup file (sorted by date name)
|
|
1366
|
+
var backups = await fs.promises.readdir(file_backup_dir)
|
|
1367
|
+
if (backups.length > 0) {
|
|
1368
|
+
backups.sort()
|
|
1369
|
+
var latest_backup = backups[backups.length - 1]
|
|
1370
|
+
var latest_backup_path = path.join(file_backup_dir, latest_backup)
|
|
1371
|
+
var backup_stat = await fs.promises.stat(latest_backup_path)
|
|
1372
|
+
// Only backup if source is newer than latest backup
|
|
1373
|
+
if (src_stat.mtimeMs <= backup_stat.mtimeMs)
|
|
1374
|
+
needs_backup = false
|
|
1375
|
+
}
|
|
1376
|
+
} catch (e) {
|
|
1377
|
+
// Backup dir empty or doesn't exist, so we need to create backup
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1380
|
+
if (needs_backup) {
|
|
1381
|
+
require('child_process').execFile(
|
|
1382
|
+
'/bin/cp', [src_path, backup_path])
|
|
1383
|
+
}
|
|
1384
|
+
}
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1387
|
+
backup_braid_text_db()
|
|
1388
|
+
setInterval(backup_braid_text_db, braid_text.backups_interval)
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1306
1391
|
async function get_files_for_key(key) {
|
|
1307
1392
|
await db_folder_init()
|
|
1308
1393
|
try {
|
|
@@ -2852,6 +2937,7 @@ function create_braid_text() {
|
|
|
2852
2937
|
braid_text.get_resource = get_resource
|
|
2853
2938
|
|
|
2854
2939
|
braid_text.db_folder_init = db_folder_init
|
|
2940
|
+
braid_text.backup_init = backup_init
|
|
2855
2941
|
braid_text.encode_filename = encode_filename
|
|
2856
2942
|
braid_text.decode_filename = decode_filename
|
|
2857
2943
|
|