@quillmark/registry 0.10.1 → 0.10.2

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.
@@ -15,8 +15,11 @@ export interface QuillRegistryOptions {
15
15
  export declare class QuillRegistry {
16
16
  private source;
17
17
  private engine;
18
- /** In-memory cache of resolved QuillBundle objects, keyed by `name@version`. */
19
- private cache;
18
+ /**
19
+ * In-memory cache of in-flight and settled resolve operations.
20
+ * Keyed by quill ref (`name` or `name@version`).
21
+ */
22
+ private inflight;
20
23
  constructor(options: QuillRegistryOptions);
21
24
  /** Returns the manifest from the underlying source. */
22
25
  getManifest(): Promise<QuillManifest>;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,WAAW,EACX,aAAa,EACb,eAAe,EACf,aAAa,EACb,WAAW,EACX,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAkB;IAChC,gFAAgF;IAChF,OAAO,CAAC,KAAK,CAAuC;gBAExC,OAAO,EAAE,oBAAoB;IAKzC,uDAAuD;IACjD,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC;IAI3C,0EAA0E;IACpE,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAKpD;;;;;;;;;;OAUG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAuChD;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG/B"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,WAAW,EACX,aAAa,EACb,eAAe,EACf,aAAa,EACb,WAAW,EACX,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAkB;IAChC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAgD;gBAEpD,OAAO,EAAE,oBAAoB;IAKzC,uDAAuD;IACjD,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC;IAI3C,0EAA0E;IACpE,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAKpD;;;;;;;;;;OAUG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAmDhD;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG/B"}
package/dist/registry.js CHANGED
@@ -10,8 +10,11 @@
10
10
  export class QuillRegistry {
11
11
  source;
12
12
  engine;
13
- /** In-memory cache of resolved QuillBundle objects, keyed by `name@version`. */
14
- cache = new Map();
13
+ /**
14
+ * In-memory cache of in-flight and settled resolve operations.
15
+ * Keyed by quill ref (`name` or `name@version`).
16
+ */
17
+ inflight = new Map();
15
18
  constructor(options) {
16
19
  this.source = options.source;
17
20
  this.engine = options.engine;
@@ -37,6 +40,10 @@ export class QuillRegistry {
37
40
  * When no version is specified, resolves to latest available.
38
41
  */
39
42
  async resolve(ref) {
43
+ const cachedPromise = this.inflight.get(ref);
44
+ if (cachedPromise) {
45
+ return cachedPromise;
46
+ }
40
47
  // Parse ref into name and optional version
41
48
  const [name, version] = ref.split('@');
42
49
  // 1. Check engine — return immediately if already registered
@@ -45,8 +52,9 @@ export class QuillRegistry {
45
52
  const engineVersion = engineInfo.metadata?.version;
46
53
  if (typeof engineVersion === 'string') {
47
54
  const cacheKey = `${engineInfo.name}@${engineVersion}`;
48
- const cached = this.cache.get(cacheKey);
55
+ const cached = this.inflight.get(cacheKey);
49
56
  if (cached) {
57
+ this.inflight.set(ref, cached);
50
58
  return cached;
51
59
  }
52
60
  }
@@ -54,19 +62,27 @@ export class QuillRegistry {
54
62
  // 2. Check registry cache (only for explicit versioned lookups)
55
63
  if (version) {
56
64
  const cacheKey = `${name}@${version}`;
57
- const cached = this.cache.get(cacheKey);
65
+ const cached = this.inflight.get(cacheKey);
58
66
  if (cached) {
67
+ this.inflight.set(ref, cached);
59
68
  return cached;
60
69
  }
61
70
  }
62
- // 3. Ask source for the bundle
63
- const bundle = await this.source.loadQuill(name, version);
64
- // 4. Register with engine
65
- this.engine.registerQuill(bundle.data);
66
- // Cache the resolved bundle
67
- const cacheKey = `${bundle.name}@${bundle.version}`;
68
- this.cache.set(cacheKey, bundle);
69
- return bundle;
71
+ const resolvePromise = this.source
72
+ .loadQuill(name, version)
73
+ .then((bundle) => {
74
+ this.engine.registerQuill(bundle.data);
75
+ const resolvedKey = `${bundle.name}@${bundle.version}`;
76
+ this.inflight.set(resolvedKey, resolvePromise);
77
+ this.inflight.set(ref, resolvePromise);
78
+ return bundle;
79
+ })
80
+ .catch((error) => {
81
+ this.inflight.delete(ref);
82
+ throw error;
83
+ });
84
+ this.inflight.set(ref, resolvePromise);
85
+ return resolvePromise;
70
86
  }
71
87
  /**
72
88
  * Preloads multiple quills using reference strings (e.g., `name@version`).
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAaA;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAa;IACjB,MAAM,CAAc;IACpB,MAAM,CAAkB;IAChC,gFAAgF;IACxE,KAAK,GAA6B,IAAI,GAAG,EAAE,CAAC;IAEpD,YAAY,OAA6B;QACxC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,WAAW;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,kBAAkB;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACjD,OAAO,QAAQ,CAAC,MAAM,CAAC;IACxB,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,OAAO,CAAC,GAAW;QACxB,2CAA2C;QAC3C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEvC,6DAA6D;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC;YACnD,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;gBACvC,MAAM,QAAQ,GAAG,GAAG,UAAU,CAAC,IAAI,IAAI,aAAa,EAAE,CAAC;gBACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACxC,IAAI,MAAM,EAAE,CAAC;oBACZ,OAAO,MAAM,CAAC;gBACf,CAAC;YACF,CAAC;QACF,CAAC;QAED,gEAAgE;QAChE,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,MAAM,EAAE,CAAC;gBACZ,OAAO,MAAM,CAAC;YACf,CAAC;QACF,CAAC;QAED,+BAA+B;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE1D,0BAA0B;QAC1B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEvC,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEjC,OAAO,MAAM,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,IAAc;QAC3B,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAChD,CAAC;CACD"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAaA;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAa;IACjB,MAAM,CAAc;IACpB,MAAM,CAAkB;IAChC;;;OAGG;IACK,QAAQ,GAAsC,IAAI,GAAG,EAAE,CAAC;IAEhE,YAAY,OAA6B;QACxC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,WAAW;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,kBAAkB;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACjD,OAAO,QAAQ,CAAC,MAAM,CAAC;IACxB,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,OAAO,CAAC,GAAW;QACxB,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,aAAa,EAAE,CAAC;YACnB,OAAO,aAAa,CAAC;QACtB,CAAC;QAED,2CAA2C;QAC3C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEvC,6DAA6D;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC;YACnD,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;gBACvC,MAAM,QAAQ,GAAG,GAAG,UAAU,CAAC,IAAI,IAAI,aAAa,EAAE,CAAC;gBACvD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC3C,IAAI,MAAM,EAAE,CAAC;oBACZ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;oBAC/B,OAAO,MAAM,CAAC;gBACf,CAAC;YACF,CAAC;QACF,CAAC;QAED,gEAAgE;QAChE,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC/B,OAAO,MAAM,CAAC;YACf,CAAC;QACF,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM;aAChC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;aACxB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,WAAW,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACvD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YACvC,OAAO,MAAM,CAAC;QACf,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC;QACb,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QACvC,OAAO,cAAc,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,IAAc;QAC3B,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAChD,CAAC;CACD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillmark/registry",
3
- "version": "0.10.1",
3
+ "version": "0.10.2",
4
4
  "description": "Unified API for discovering, loading, packaging, and registering Quills with the WASM engine",
5
5
  "main": "./dist/index.js",
6
6
  "publishConfig": {