braid-text 0.0.5 → 0.0.6

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 (2) hide show
  1. package/index.js +26 -25
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -167,7 +167,13 @@ braid_text.serve = async (req, res, options = {}) => {
167
167
  }
168
168
 
169
169
  braid_text.get = async (key, options) => {
170
- if (!options) return get_resource.cache?.[key]?.doc.get()
170
+ if (!options) {
171
+ let x = get_resource.cache?.[key]?.doc.get()
172
+ if (x !== undefined) return x
173
+ // if it doesn't exist on disk, don't create it in this case
174
+ if (!(await get_files_for_key(key)).length) return
175
+ return (await get_resource(key)).doc.get()
176
+ }
171
177
 
172
178
  let resource = (typeof key == 'string') ? await get_resource(key) : key
173
179
 
@@ -503,12 +509,9 @@ async function get_resource(key) {
503
509
  resource.doc = new Doc("server")
504
510
 
505
511
  let { change, delete_me } = braid_text.db_folder
506
- ? await file_sync(
507
- braid_text.db_folder,
508
- encode_filename(key),
512
+ ? await file_sync(key,
509
513
  (bytes) => resource.doc.mergeBytes(bytes),
510
- () => resource.doc.toBytes()
511
- )
514
+ () => resource.doc.toBytes())
512
515
  : { change: () => { }, delete_me: () => { } }
513
516
 
514
517
  resource.db_delta = change
@@ -524,32 +527,30 @@ async function get_resource(key) {
524
527
  return (cache[key] = resource)
525
528
  }
526
529
 
527
- async function file_sync(db_folder, filename_base, process_delta, get_init) {
530
+ async function get_files_for_key(key) {
531
+ try {
532
+ let re = new RegExp("^" + encode_filename(key).replace(/[^a-zA-Z0-9]/g, "\\$&") + "\\.\\d+$")
533
+ return (await fs.promises.readdir(braid_text.db_folder))
534
+ .filter((a) => re.test(a))
535
+ .map((a) => `${braid_text.db_folder}/${a}`)
536
+ } catch (e) { return [] }
537
+ }
538
+
539
+ async function file_sync(key, process_delta, get_init) {
528
540
  let currentNumber = 0
529
541
  let currentSize = 0
530
542
  let threshold = 0
531
543
 
532
544
  // Ensure the existence of db_folder
533
545
  try {
534
- await fs.promises.access(db_folder);
546
+ await fs.promises.access(braid_text.db_folder);
535
547
  } catch (err) {
536
- if (err.code === 'ENOENT') {
537
- await fs.promises.mkdir(db_folder, { recursive: true });
538
- } else {
539
- throw err;
540
- }
548
+ await fs.promises.mkdir(braid_text.db_folder, { recursive: true });
541
549
  }
542
550
 
543
551
  // Read existing files and sort by numbers.
544
- async function get_sorted_files() {
545
- let re = new RegExp("^" + filename_base.replace(/[^a-zA-Z0-9]/g, "\\$&") + "\\.\\d+$")
546
- return (await fs.promises.readdir(db_folder))
547
- .filter((a) => re.test(a))
548
- .sort((a, b) => parseInt(a.match(/\d+$/)[0]) - parseInt(b.match(/\d+$/)[0]))
549
- .map((a) => `${db_folder}/${a}`)
550
- }
551
-
552
- const files = await get_sorted_files()
552
+ const files = (await get_files_for_key(key))
553
+ .sort((a, b) => parseInt(a.match(/\d+$/)[0]) - parseInt(b.match(/\d+$/)[0]))
553
554
 
554
555
  // Try to process files starting from the highest number.
555
556
  let done = false
@@ -590,7 +591,7 @@ async function file_sync(db_folder, filename_base, process_delta, get_init) {
590
591
  return {
591
592
  change: async (bytes) => {
592
593
  currentSize += bytes.length + 4 // we account for the extra 4 bytes for uint32
593
- const filename = `${db_folder}/${filename_base}.${currentNumber}`
594
+ const filename = `${braid_text.db_folder}/${encode_filename(key)}.${currentNumber}`
594
595
  if (currentSize < threshold) {
595
596
  console.log(`appending to db..`)
596
597
 
@@ -609,7 +610,7 @@ async function file_sync(db_folder, filename_base, process_delta, get_init) {
609
610
  const buffer = Buffer.allocUnsafe(4)
610
611
  buffer.writeUInt32LE(init.length, 0)
611
612
 
612
- const newFilename = `${db_folder}/${filename_base}.${currentNumber}`
613
+ const newFilename = `${braid_text.db_folder}/${encode_filename(key)}.${currentNumber}`
613
614
  await fs.promises.writeFile(newFilename, buffer)
614
615
  await fs.promises.appendFile(newFilename, init)
615
616
 
@@ -628,7 +629,7 @@ async function file_sync(db_folder, filename_base, process_delta, get_init) {
628
629
  delete_me: async () => {
629
630
  await Promise.all(
630
631
  (
631
- await get_sorted_files()
632
+ await get_files_for_key(key)
632
633
  ).map((file) => {
633
634
  return new Promise((resolve, reject) => {
634
635
  fs.unlink(file, (err) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "braid-text",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "description": "Library for collaborative text over http using braid.",
5
5
  "author": "Braid Working Group",
6
6
  "repository": "braid-org/braidjs",