@gesslar/toolkit 5.9.0 → 5.9.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.
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "name": "gesslar",
6
6
  "url": "https://gesslar.dev"
7
7
  },
8
- "version": "5.9.0",
8
+ "version": "5.9.1",
9
9
  "license": "0BSD",
10
10
  "homepage": "https://github.com/gesslar/toolkit#readme",
11
11
  "repository": {
@@ -11,7 +11,7 @@ import Sass from "./Sass.js"
11
11
  */
12
12
 
13
13
  /**
14
- * @typedef {{modified: Date, raw: string|null, structured: unknown}} CacheData
14
+ * @typedef {{modified: Date, encoding: string, raw: string|null, structured: unknown}} CacheData
15
15
  */
16
16
 
17
17
  /**
@@ -28,13 +28,23 @@ export default class Cache {
28
28
  #cache = new Map()
29
29
 
30
30
  /**
31
- * In-flight reads, keyed by file path and modification time, so that
32
- * concurrent callers coalesce onto one read instead of racing each other.
31
+ * In-flight reads, keyed by file path, generation, encoding and
32
+ * modification time, so that concurrent callers coalesce onto one read
33
+ * instead of racing each other.
33
34
  *
34
35
  * @type {Map<string, Promise<CacheData>>}
35
36
  */
36
37
  #reading = new Map()
37
38
 
39
+ /**
40
+ * Invalidation counter per file path, bumped on every reset. A read that
41
+ * began before a reset carries the older generation, and so knows not to
42
+ * publish itself over the top of that reset.
43
+ *
44
+ * @type {Map<string, number>}
45
+ */
46
+ #generation = new Map()
47
+
38
48
  /**
39
49
  * Removes cached data for a specific file from the #cache map.
40
50
  * Used when files are modified or when cache consistency needs to be
@@ -46,6 +56,7 @@ export default class Cache {
46
56
  */
47
57
  #cleanup(file) {
48
58
  this.#cache.delete(file.path)
59
+ this.#generation.set(file.path, (this.#generation.get(file.path) ?? 0) + 1)
49
60
  }
50
61
 
51
62
  /**
@@ -72,7 +83,8 @@ export default class Cache {
72
83
  if(lastModified === null)
73
84
  throw Sass.new(`No such file '${fileObject}'`)
74
85
 
75
- const rec = await this.#record(fileObject, lastModified, options)
86
+ const rec = await this.#record(
87
+ fileObject, lastModified, options.encoding ?? "utf8")
76
88
 
77
89
  if(kind === "raw")
78
90
  return rec.raw
@@ -88,30 +100,36 @@ export default class Cache {
88
100
  * Resolves the cache record for a file at a given modification time,
89
101
  * reading from disk when no record exists or the existing one is stale.
90
102
  *
91
- * Concurrent callers asking for the same file at the same mtime share a
92
- * single read, and a record only enters the map once its contents are in
93
- * hand. Without both of those, a second caller arriving while the first is
94
- * still awaiting the read would find a record already stamped with the new
95
- * mtime but still holding the previous revision's data, and happily return
96
- * it as fresh.
103
+ * Concurrent callers asking for the same file at the same mtime and
104
+ * encoding share a single read, and a record only enters the map once its
105
+ * contents are in hand. Without both of those, a second caller arriving
106
+ * while the first is still awaiting the read would find a record already
107
+ * stamped with the new mtime but still holding the previous revision's
108
+ * data, and happily return it as fresh.
97
109
  *
98
110
  * @private
99
111
  * @param {FileObject} fileObject - The file object to resolve
100
112
  * @param {Date} lastModified - The file's current modification time
101
- * @param {object} options - Options forwarded to read
113
+ * @param {string} encoding - The encoding to read the file with
102
114
  * @returns {Promise<CacheData>} The populated cache record
103
115
  */
104
- async #record(fileObject, lastModified, options) {
105
- const cached = this.#cache.get(fileObject.path)
116
+ async #record(fileObject, lastModified, encoding) {
117
+ const path = fileObject.path
118
+ const cached = this.#cache.get(path)
106
119
 
107
- if(cached && cached.modified.getTime() === lastModified.getTime())
120
+ if(cached &&
121
+ cached.modified.getTime() === lastModified.getTime() &&
122
+ cached.encoding === encoding)
108
123
  return cached
109
124
 
110
- const key = `${fileObject.path}\u0000${lastModified.getTime()}`
125
+ const generation = this.#generation.get(path) ?? 0
126
+ const key = [path, generation, encoding, lastModified.getTime()]
127
+ .join("\u0000")
128
+
111
129
  let reading = this.#reading.get(key)
112
130
 
113
131
  if(!reading) {
114
- reading = this.#read(fileObject, lastModified, options)
132
+ reading = this.#read(fileObject, lastModified, encoding, generation)
115
133
  .finally(() => this.#reading.delete(key))
116
134
 
117
135
  this.#reading.set(key, reading)
@@ -126,22 +144,28 @@ export default class Cache {
126
144
  * @private
127
145
  * @param {FileObject} fileObject - The file object to read
128
146
  * @param {Date} lastModified - The modification time the read represents
129
- * @param {object} options - Options forwarded to read
130
- * @param {string} [options.encoding="utf8"] - File encoding
147
+ * @param {string} encoding - The encoding to read the file with
148
+ * @param {number} generation - The invalidation generation this read began in
131
149
  * @returns {Promise<CacheData>} The freshly populated cache record
132
150
  */
133
- async #read(fileObject, lastModified, options) {
134
- const raw = await fileObject.read({
135
- encoding: options.encoding,
136
- skipCache: true,
151
+ async #read(fileObject, lastModified, encoding, generation) {
152
+ const path = fileObject.path
153
+ const raw = await fileObject.read({encoding, skipCache: true})
154
+ const rec = Object.seal({
155
+ modified: lastModified,
156
+ encoding,
157
+ raw,
158
+ structured: null,
137
159
  })
138
160
 
139
- const rec = Object.seal({modified: lastModified, raw, structured: null})
140
- const cached = this.#cache.get(fileObject.path)
161
+ const cached = this.#cache.get(path)
141
162
 
142
- // Don't let a slower read of an older revision clobber a newer one.
143
- if(!cached || cached.modified.getTime() <= lastModified.getTime())
144
- this.#cache.set(fileObject.path, rec)
163
+ // The caller gets this record either way, but it only goes in the map if
164
+ // no reset landed while the read was in flight, and it wouldn't clobber a
165
+ // newer revision that a faster read already published.
166
+ if((this.#generation.get(path) ?? 0) === generation &&
167
+ (!cached || cached.modified.getTime() <= lastModified.getTime()))
168
+ this.#cache.set(path, rec)
145
169
 
146
170
  return rec
147
171
  }
@@ -15,12 +15,6 @@ import FS from "./FileSystem.js"
15
15
  import Sass from "./Sass.js"
16
16
  import Valid from "./Valid.js"
17
17
 
18
- /**
19
- * @typedef {object} GeneratorType
20
- * @property {function(): {value: DirectoryObject, done: boolean}} next
21
- * @property {function(): GeneratorType} [Symbol.iterator]
22
- */
23
-
24
18
  /**
25
19
  * @typedef {object} DirectoryMeta
26
20
  *
@@ -584,7 +578,7 @@ export default class DirectoryObject extends FS {
584
578
  *
585
579
  * @generator
586
580
  * @yields {DirectoryObject} Parent directory objects from current to root
587
- * @returns {GeneratorType}
581
+ * @returns {Generator<DirectoryObject>}
588
582
  */
589
583
  *#walkUp() {
590
584
  const {root, base, dir} = FS.pathParts(this.path)
@@ -606,7 +600,7 @@ export default class DirectoryObject extends FS {
606
600
  * Generator that walks up the directory tree, yielding each parent directory.
607
601
  * Starts from the current directory and yields each parent until reaching the root.
608
602
  *
609
- * @returns {DirectoryObject} Generator yielding parent DirectoryObject instances
603
+ * @returns {IterableIterator<DirectoryObject>} Generator yielding parent DirectoryObject instances
610
604
  * @example
611
605
  * const dir = new DirectoryObject('/path/to/deep/directory')
612
606
  * for(const parent of dir.walkUp) {
@@ -2,6 +2,7 @@ import type FileObject from "./FileObject.js";
2
2
  export type CacheDataType = "raw" | "structured";
3
3
  export type CacheData = {
4
4
  modified: Date;
5
+ encoding: string;
5
6
  raw: string | null;
6
7
  structured: unknown;
7
8
  };
@@ -12,7 +13,7 @@ export type CacheData = {
12
13
  * @typedef {"raw" | "structured"} CacheDataType
13
14
  */
14
15
  /**
15
- * @typedef {{modified: Date, raw: string|null, structured: unknown}} CacheData
16
+ * @typedef {{modified: Date, encoding: string, raw: string|null, structured: unknown}} CacheData
16
17
  */
17
18
  /**
18
19
  * File system cache with automatic invalidation based on modification time.
@@ -55,17 +56,17 @@ export default class Cache {
55
56
  * Resolves the cache record for a file at a given modification time,
56
57
  * reading from disk when no record exists or the existing one is stale.
57
58
  *
58
- * Concurrent callers asking for the same file at the same mtime share a
59
- * single read, and a record only enters the map once its contents are in
60
- * hand. Without both of those, a second caller arriving while the first is
61
- * still awaiting the read would find a record already stamped with the new
62
- * mtime but still holding the previous revision's data, and happily return
63
- * it as fresh.
59
+ * Concurrent callers asking for the same file at the same mtime and
60
+ * encoding share a single read, and a record only enters the map once its
61
+ * contents are in hand. Without both of those, a second caller arriving
62
+ * while the first is still awaiting the read would find a record already
63
+ * stamped with the new mtime but still holding the previous revision's
64
+ * data, and happily return it as fresh.
64
65
  *
65
66
  * @private
66
67
  * @param {FileObject} fileObject - The file object to resolve
67
68
  * @param {Date} lastModified - The file's current modification time
68
- * @param {object} options - Options forwarded to read
69
+ * @param {string} encoding - The encoding to read the file with
69
70
  * @returns {Promise<CacheData>} The populated cache record
70
71
  */
71
72
  private #record;
@@ -75,8 +76,8 @@ export default class Cache {
75
76
  * @private
76
77
  * @param {FileObject} fileObject - The file object to read
77
78
  * @param {Date} lastModified - The modification time the read represents
78
- * @param {object} options - Options forwarded to read
79
- * @param {string} [options.encoding="utf8"] - File encoding
79
+ * @param {string} encoding - The encoding to read the file with
80
+ * @param {number} generation - The invalidation generation this read began in
80
81
  * @returns {Promise<CacheData>} The freshly populated cache record
81
82
  */
82
83
  private #read;
@@ -1 +1 @@
1
- {"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../../src/node/lib/Cache.js"],"names":[],"mappings":"AAKG,OAAQ,KAAA,UAAU,MAAM,iBAAiB,CAAA;AAIzC,YAAgC,aAAa,GAAnC,KAAK,GAAG,YAAY,CAAe;AAI7C,YAAmE,SAAS,GAAlE;IAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,GAAC,IAAI,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAC,CAAW;AAT/E;;GAEG;AAEH;;GAEG;AAEH;;GAEG;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,KAAK;;IAYxB;;;;;;;;OAQG;YACH,QAAQ;IAIR;;;;;;;;;;;;;;OAcG;YACG,cAAc;IAqBpB;;;;;;;;;;;;;;;;OAgBG;YACG,OAAO;IAmBb;;;;;;;;;OASG;YACG,KAAK;IAgBX;;;;;;;;;;;;OAYG;IACG,iBAAiB,CAAC,UAAU,EAJvB,UAIuB,EAAE,OAAO,KAAG,GAHjC,OAAO,CAAC,OAAO,CAAC,CAQ5B;IAED;;;;;;;OAOG;IACG,aAAa,CAAC,UAAU,EAJnB,UAImB,EAAE,OAAO,KAAG,GAH7B,OAAO,CAAC,MAAM,CAAC,CAQ3B;IAED;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAFJ,OAAO,iBAAiB,EAAE,OAEtB,QAId;CACF"}
1
+ {"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../../src/node/lib/Cache.js"],"names":[],"mappings":"AAKG,OAAQ,KAAA,UAAU,MAAM,iBAAiB,CAAA;AAIzC,YAAgC,aAAa,GAAnC,KAAK,GAAG,YAAY,CAAe;AAI7C,YAAqF,SAAS,GAApF;IAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,GAAC,IAAI,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAC,CAAW;AATjG;;GAEG;AAEH;;GAEG;AAEH;;GAEG;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,KAAK;;IAsBxB;;;;;;;;OAQG;YACH,QAAQ;IAKR;;;;;;;;;;;;;;OAcG;YACG,cAAc;IAsBpB;;;;;;;;;;;;;;;;OAgBG;YACG,OAAO;IAyBb;;;;;;;;;OASG;YACG,KAAK;IAsBX;;;;;;;;;;;;OAYG;IACG,iBAAiB,CAAC,UAAU,EAJvB,UAIuB,EAAE,OAAO,KAAG,GAHjC,OAAO,CAAC,OAAO,CAAC,CAQ5B;IAED;;;;;;;OAOG;IACG,aAAa,CAAC,UAAU,EAJnB,UAImB,EAAE,OAAO,KAAG,GAH7B,OAAO,CAAC,MAAM,CAAC,CAQ3B;IAED;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAFJ,OAAO,iBAAiB,EAAE,OAEtB,QAId;CACF"}
@@ -7,16 +7,6 @@ import { URL } from "node:url";
7
7
  import { inspect } from "node:util";
8
8
  import FileObject from "./FileObject.js";
9
9
  import FS from "./FileSystem.js";
10
- export type GeneratorType = {
11
- /**
12
- * (): {value: DirectoryObject, done: boolean}} next
13
- */
14
- : Function;
15
- /**
16
- * (): GeneratorType} [Symbol.iterator]
17
- */
18
- : Function;
19
- };
20
10
  export type DirectoryMeta = {
21
11
  /**
22
12
  * - Always true for directories
@@ -63,11 +53,6 @@ export type DirectoryMeta = {
63
53
  */
64
54
  url: URL | null;
65
55
  };
66
- /**
67
- * @typedef {object} GeneratorType
68
- * @property {function(): {value: DirectoryObject, done: boolean}} next
69
- * @property {function(): GeneratorType} [Symbol.iterator]
70
- */
71
56
  /**
72
57
  * @typedef {object} DirectoryMeta
73
58
  *
@@ -366,7 +351,7 @@ export default class DirectoryObject extends FS {
366
351
  * Generator that walks up the directory tree, yielding each parent directory.
367
352
  * Starts from the current directory and yields each parent until reaching the root.
368
353
  *
369
- * @returns {DirectoryObject} Generator yielding parent DirectoryObject instances
354
+ * @returns {IterableIterator<DirectoryObject>} Generator yielding parent DirectoryObject instances
370
355
  * @example
371
356
  * const dir = new DirectoryObject('/path/to/deep/directory')
372
357
  * for(const parent of dir.walkUp) {
@@ -378,7 +363,7 @@ export default class DirectoryObject extends FS {
378
363
  * // /
379
364
  * }
380
365
  */
381
- get walkUp(): DirectoryObject;
366
+ get walkUp(): IterableIterator<DirectoryObject>;
382
367
  /**
383
368
  * Deletes an empty directory from the filesystem.
384
369
  *
@@ -1 +1 @@
1
- {"version":3,"file":"DirectoryObject.d.ts","sourceRoot":"","sources":["../../../src/node/lib/DirectoryObject.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DirectoryObject.d.ts","sourceRoot":"","sources":["../../../src/node/lib/DirectoryObject.js"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- // @gesslar/toolkit v5.9.0 - ES module bundle
1
+ // @gesslar/toolkit v5.9.1 - ES module bundle
2
2
  /**
3
3
  * @file Tantrum.js
4
4
  *
@@ -1,4 +1,4 @@
1
- // @gesslar/toolkit v5.9.0 - UMD bundle
1
+ // @gesslar/toolkit v5.9.1 - UMD bundle
2
2
  (function (global, factory) {
3
3
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
4
4
  typeof define === 'function' && define.amd ? define(['exports'], factory) :