@happyvertical/smrt-core 0.55.6 → 0.55.8

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 (205) hide show
  1. package/AGENTS.md +2 -1
  2. package/agents/browser-entry.md +44 -0
  3. package/agents/build-knowledge.md +20 -0
  4. package/agents/recipes.md +217 -0
  5. package/agents/revision-guard.md +72 -1
  6. package/dist/audit-context.d.ts.map +1 -1
  7. package/dist/audit-context.js +2 -2
  8. package/dist/audit-context.js.map +1 -1
  9. package/dist/browser.d.ts +2 -1
  10. package/dist/browser.d.ts.map +1 -1
  11. package/dist/browser.js +7 -7
  12. package/dist/cascade.d.ts +1 -1
  13. package/dist/cascade.d.ts.map +1 -1
  14. package/dist/cascade.js +1 -1
  15. package/dist/cascade.js.map +1 -1
  16. package/dist/change-feed.d.ts.map +1 -1
  17. package/dist/change-feed.js +1 -2
  18. package/dist/change-feed.js.map +1 -1
  19. package/dist/class.d.ts +1 -1
  20. package/dist/class.d.ts.map +1 -1
  21. package/dist/class.js +7 -3
  22. package/dist/class.js.map +1 -1
  23. package/dist/collection.d.ts.map +1 -1
  24. package/dist/collection.js +1 -1
  25. package/dist/collection.js.map +1 -1
  26. package/dist/consumer-plugin/index.js +2 -2
  27. package/dist/data-query.d.ts.map +1 -1
  28. package/dist/data-query.js +2 -13
  29. package/dist/data-query.js.map +1 -1
  30. package/dist/database.js +1 -1
  31. package/dist/database.js.map +1 -1
  32. package/dist/dispatch/bus.js +1 -1
  33. package/dist/dispatch/bus.js.map +1 -1
  34. package/dist/embedded-write-queue.d.ts +1 -1
  35. package/dist/embedded-write-queue.d.ts.map +1 -1
  36. package/dist/embedded-write-queue.js +7 -5
  37. package/dist/embedded-write-queue.js.map +1 -1
  38. package/dist/embeddings/hash.js +2 -2
  39. package/dist/embeddings/hash.js.map +1 -1
  40. package/dist/embeddings/storage.d.ts.map +1 -1
  41. package/dist/embeddings/storage.js +1 -2
  42. package/dist/embeddings/storage.js.map +1 -1
  43. package/dist/errors.d.ts.map +1 -1
  44. package/dist/errors.js +1 -0
  45. package/dist/errors.js.map +1 -1
  46. package/dist/generation-snapshot.js +1 -1
  47. package/dist/generators/index.js +1 -1
  48. package/dist/generators/mcp.js +3 -3
  49. package/dist/generators/preflight-route.js +1 -1
  50. package/dist/generators/rest.js +1 -1
  51. package/dist/generators.js +1 -1
  52. package/dist/host.browser.d.ts +12 -0
  53. package/dist/host.browser.d.ts.map +1 -0
  54. package/dist/host.browser.js +30 -0
  55. package/dist/host.browser.js.map +1 -0
  56. package/dist/host.d.ts +18 -0
  57. package/dist/host.d.ts.map +1 -0
  58. package/dist/host.js +15 -0
  59. package/dist/host.js.map +1 -0
  60. package/dist/index.d.ts +1 -0
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +10 -9
  63. package/dist/knowledge.d.ts.map +1 -1
  64. package/dist/knowledge.js +6 -4
  65. package/dist/knowledge.js.map +1 -1
  66. package/dist/manifest/browser-capability.generated.d.ts +14 -0
  67. package/dist/manifest/browser-capability.generated.d.ts.map +1 -0
  68. package/dist/manifest/browser-capability.generated.js +499 -0
  69. package/dist/manifest/browser-capability.generated.js.map +1 -0
  70. package/dist/manifest/discover-base-classes.js +1 -1
  71. package/dist/manifest/discover-smrt-packages.js +1 -1
  72. package/dist/manifest/generator.js +3 -3
  73. package/dist/manifest/index.js +2 -2
  74. package/dist/manifest/local-manifest-reader.d.ts +48 -0
  75. package/dist/manifest/local-manifest-reader.d.ts.map +1 -0
  76. package/dist/manifest/local-manifest-reader.js +81 -0
  77. package/dist/manifest/local-manifest-reader.js.map +1 -0
  78. package/dist/manifest/manager.d.ts +5 -28
  79. package/dist/manifest/manager.d.ts.map +1 -1
  80. package/dist/manifest/manager.js +10 -56
  81. package/dist/manifest/manager.js.map +1 -1
  82. package/dist/manifest/manifest-loader.d.ts +1 -1
  83. package/dist/manifest/manifest-loader.d.ts.map +1 -1
  84. package/dist/manifest/manifest-loader.js +43 -12
  85. package/dist/manifest/manifest-loader.js.map +1 -1
  86. package/dist/manifest/node-host.d.ts +38 -0
  87. package/dist/manifest/node-host.d.ts.map +1 -0
  88. package/dist/manifest/node-host.js +52 -0
  89. package/dist/manifest/node-host.js.map +1 -0
  90. package/dist/manifest/package-manifest-exports.js +1 -1
  91. package/dist/manifest/static-manifest.d.ts.map +1 -1
  92. package/dist/manifest/static-manifest.js +12 -2
  93. package/dist/manifest/static-manifest.js.map +1 -1
  94. package/dist/manifest/store.d.ts +2 -1
  95. package/dist/manifest/store.d.ts.map +1 -1
  96. package/dist/manifest/store.js +7 -4
  97. package/dist/manifest/store.js.map +1 -1
  98. package/dist/manifest.js +1 -1
  99. package/dist/manifest.json +14 -2
  100. package/dist/native-duckdb.d.ts +28 -0
  101. package/dist/native-duckdb.d.ts.map +1 -0
  102. package/dist/native-duckdb.js +51 -0
  103. package/dist/native-duckdb.js.map +1 -0
  104. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/_md.js +169 -0
  105. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/_md.js.map +1 -0
  106. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/_u64.js +13 -0
  107. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/_u64.js.map +1 -0
  108. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/sha2.js +198 -0
  109. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/sha2.js.map +1 -0
  110. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/utils.js +243 -0
  111. package/dist/node_modules/.pnpm/@noble_hashes@2.4.0/node_modules/@noble/hashes/utils.js.map +1 -0
  112. package/dist/object.d.ts +56 -0
  113. package/dist/object.d.ts.map +1 -1
  114. package/dist/object.js +139 -16
  115. package/dist/object.js.map +1 -1
  116. package/dist/postgres-permissions.d.ts.map +1 -1
  117. package/dist/postgres-permissions.js +3 -3
  118. package/dist/postgres-permissions.js.map +1 -1
  119. package/dist/prebuild/index.js +1 -1
  120. package/dist/recipe-demo.d.ts +70 -0
  121. package/dist/recipe-demo.d.ts.map +1 -0
  122. package/dist/recipe-demo.js +130 -0
  123. package/dist/recipe-demo.js.map +1 -0
  124. package/dist/recipe.d.ts +64 -1
  125. package/dist/recipe.d.ts.map +1 -1
  126. package/dist/recipe.js +30 -0
  127. package/dist/recipe.js.map +1 -1
  128. package/dist/registry/class-registration.js +2 -2
  129. package/dist/registry/class-registration.js.map +1 -1
  130. package/dist/registry/db-cache-key.js +4 -5
  131. package/dist/registry/db-cache-key.js.map +1 -1
  132. package/dist/registry/inheritance-resolver.js +1 -1
  133. package/dist/registry/name-resolver.js +1 -1
  134. package/dist/registry/qualified-name-aliases.js +1 -1
  135. package/dist/registry/schema-builder.d.ts.map +1 -1
  136. package/dist/registry/schema-builder.js +3 -3
  137. package/dist/registry/schema-builder.js.map +1 -1
  138. package/dist/registry/types.d.ts +5 -0
  139. package/dist/registry/types.d.ts.map +1 -1
  140. package/dist/registry.d.ts.map +1 -1
  141. package/dist/registry.js +5 -8
  142. package/dist/registry.js.map +1 -1
  143. package/dist/revision-guard.js +1 -1
  144. package/dist/revision-guard.js.map +1 -1
  145. package/dist/scanner/manifest-generator.d.ts.map +1 -1
  146. package/dist/scanner/manifest-generator.js +19 -10
  147. package/dist/scanner/manifest-generator.js.map +1 -1
  148. package/dist/scanner/recipe-demo-pass.d.ts +14 -0
  149. package/dist/scanner/recipe-demo-pass.d.ts.map +1 -0
  150. package/dist/scanner/recipe-demo-pass.js +33 -0
  151. package/dist/scanner/recipe-demo-pass.js.map +1 -0
  152. package/dist/scanner/types.d.ts +9 -1
  153. package/dist/scanner/types.d.ts.map +1 -1
  154. package/dist/scanner/types.js.map +1 -1
  155. package/dist/schema/ddl/duckdb-strategy.d.ts.map +1 -1
  156. package/dist/schema/ddl/duckdb-strategy.js +1 -1
  157. package/dist/schema/ddl/duckdb-strategy.js.map +1 -1
  158. package/dist/schema/foreign-key-planner.d.ts.map +1 -1
  159. package/dist/schema/foreign-key-planner.js +1 -1
  160. package/dist/schema/foreign-key-planner.js.map +1 -1
  161. package/dist/schema/generator.d.ts.map +1 -1
  162. package/dist/schema/generator.js +10 -14
  163. package/dist/schema/generator.js.map +1 -1
  164. package/dist/schema/schema-aggregator.js +1 -1
  165. package/dist/scripts/browser-entry-evaluation.mjs +157 -0
  166. package/dist/smrt-knowledge.json +32 -12
  167. package/dist/system/browser.d.ts +16 -0
  168. package/dist/system/browser.d.ts.map +1 -0
  169. package/dist/system/browser.js +6 -0
  170. package/dist/system/index.d.ts +1 -6
  171. package/dist/system/index.d.ts.map +1 -1
  172. package/dist/system/index.js +2 -1
  173. package/dist/testing/database.js +1 -1
  174. package/dist/tools/index.js +1 -1
  175. package/dist/unchanged-indexed.d.ts +85 -0
  176. package/dist/unchanged-indexed.d.ts.map +1 -0
  177. package/dist/unchanged-indexed.js +219 -0
  178. package/dist/unchanged-indexed.js.map +1 -0
  179. package/dist/utils/async-context.d.ts +22 -0
  180. package/dist/utils/async-context.d.ts.map +1 -0
  181. package/dist/utils/async-context.js +27 -0
  182. package/dist/utils/async-context.js.map +1 -0
  183. package/dist/utils/import-project-vite.js +1 -1
  184. package/dist/utils/import-workspace-module.js +1 -1
  185. package/dist/utils/json.browser.d.ts +18 -0
  186. package/dist/utils/json.browser.d.ts.map +1 -0
  187. package/dist/utils/json.browser.js +47 -0
  188. package/dist/utils/json.browser.js.map +1 -0
  189. package/dist/utils/sha256.d.ts +15 -0
  190. package/dist/utils/sha256.d.ts.map +1 -0
  191. package/dist/utils/sha256.js +29 -0
  192. package/dist/utils/sha256.js.map +1 -0
  193. package/dist/vite-plugin/changes-route.js +1 -1
  194. package/dist/vite-plugin/dev-plane-route.js +1 -1
  195. package/dist/vite-plugin/events-route.js +1 -1
  196. package/dist/vite-plugin/import-build-aware.js +1 -1
  197. package/dist/vite-plugin/index.js +2 -2
  198. package/dist/vite-plugin/resources-route.js +1 -1
  199. package/dist/vite-plugin/sveltekit-generator.js +2 -2
  200. package/dist/vite-plugin/sveltekit-path.js +1 -1
  201. package/dist/vite-plugin/sveltekit-register-injection.js +1 -1
  202. package/dist/vite-plugin/sveltekit-route-coordinator.js +1 -1
  203. package/dist/vite-plugin/sync-apply-route.js +1 -1
  204. package/dist/vite-plugin/web-collections.js +2 -2
  205. package/package.json +21 -11
@@ -0,0 +1,81 @@
1
+ import { existsSync, join, readFileSync } from "./node-host.js";
2
+ import { createLogger } from "@happyvertical/logger";
3
+ //#region src/manifest/local-manifest-reader.ts
4
+ /** Resolved through the lazy Node host: absent files on a host without one. */
5
+ var hostFileAccess = {
6
+ existsSync,
7
+ readFileSync
8
+ };
9
+ var logger = createLogger({ level: "info" });
10
+ /**
11
+ * Reads SMRT manifests for a project from the standard locations.
12
+ *
13
+ * @remarks
14
+ * The read half of `ManifestManager`, split out so the registry's manifest
15
+ * discovery does not pull the write and generation half (`node:fs` writes,
16
+ * the AST scanner) into a browser bundle (#2838). Filesystem access goes
17
+ * through `node-host.ts`, so without a Node host every load finds nothing.
18
+ *
19
+ * Manifests are JSON files containing class/field metadata produced by the AST scanner.
20
+ * Dev manifests live at `.smrt/manifest.json`; build manifests at `dist/manifest.json`.
21
+ * Workspace packages may also provide a checked-in source manifest at
22
+ * `src/manifest/manifest.json`. When loading a local project, the dev path takes
23
+ * priority; for external packages (dependencies), the build path takes priority
24
+ * to avoid pulling in test objects.
25
+ */
26
+ var LocalManifestReader = class {
27
+ projectRoot;
28
+ files;
29
+ constructor(projectRoot, files = hostFileAccess) {
30
+ this.projectRoot = projectRoot;
31
+ this.files = files;
32
+ }
33
+ /**
34
+ * Get the standard output path for the manifest based on mode.
35
+ */
36
+ getOutputPath(mode) {
37
+ if (mode === "dev") return join(this.projectRoot, ".smrt/manifest.json");
38
+ if (mode === "source") return join(this.projectRoot, "src/manifest/manifest.json");
39
+ return join(this.projectRoot, "dist/manifest.json");
40
+ }
41
+ /**
42
+ * Loads the local manifest from the standard locations.
43
+ * Priority: .smrt/manifest.json -> dist/manifest.json -> src/manifest/manifest.json
44
+ */
45
+ loadLocal() {
46
+ return this._loadFromPaths([
47
+ this.getOutputPath("dev"),
48
+ this.getOutputPath("build"),
49
+ this.getOutputPath("source")
50
+ ]);
51
+ }
52
+ /**
53
+ * Loads the manifest for an external package (dependency).
54
+ * Priority: dist/manifest.json -> .smrt/manifest.json -> src/manifest/manifest.json
55
+ *
56
+ * External packages should prefer their production (dist) manifest
57
+ * over the dev/test (.smrt) manifest to avoid pulling in test objects
58
+ * and transitive dependencies. In a workspace, the checked-in source manifest
59
+ * provides the same package metadata even when the sibling package has not been built yet.
60
+ */
61
+ loadForExternalPackage() {
62
+ return this._loadFromPaths([
63
+ this.getOutputPath("build"),
64
+ this.getOutputPath("dev"),
65
+ this.getOutputPath("source")
66
+ ]);
67
+ }
68
+ _loadFromPaths(paths) {
69
+ for (const path of paths) if (this.files.existsSync(path)) try {
70
+ const content = this.files.readFileSync(path, "utf-8");
71
+ return JSON.parse(content);
72
+ } catch (error) {
73
+ logger.error(`[ManifestManager] Failed to read manifest at ${path}`, { error });
74
+ }
75
+ return null;
76
+ }
77
+ };
78
+ //#endregion
79
+ export { LocalManifestReader };
80
+
81
+ //# sourceMappingURL=local-manifest-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-manifest-reader.js","names":[],"sources":["../../src/manifest/local-manifest-reader.ts"],"sourcesContent":["import { createLogger } from '@happyvertical/logger';\nimport type { SmartObjectManifest } from '../scanner/types.js';\nimport { existsSync, join, readFileSync } from './node-host.js';\n\n/** The two filesystem reads a manifest load needs. */\nexport interface ManifestFileAccess {\n existsSync(path: string): boolean;\n readFileSync(path: string, encoding: 'utf-8'): string;\n}\n\n/** Resolved through the lazy Node host: absent files on a host without one. */\nconst hostFileAccess: ManifestFileAccess = { existsSync, readFileSync };\n\nconst logger = createLogger({ level: 'info' });\n\n/**\n * Reads SMRT manifests for a project from the standard locations.\n *\n * @remarks\n * The read half of `ManifestManager`, split out so the registry's manifest\n * discovery does not pull the write and generation half (`node:fs` writes,\n * the AST scanner) into a browser bundle (#2838). Filesystem access goes\n * through `node-host.ts`, so without a Node host every load finds nothing.\n *\n * Manifests are JSON files containing class/field metadata produced by the AST scanner.\n * Dev manifests live at `.smrt/manifest.json`; build manifests at `dist/manifest.json`.\n * Workspace packages may also provide a checked-in source manifest at\n * `src/manifest/manifest.json`. When loading a local project, the dev path takes\n * priority; for external packages (dependencies), the build path takes priority\n * to avoid pulling in test objects.\n */\nexport class LocalManifestReader {\n constructor(\n protected projectRoot: string,\n private readonly files: ManifestFileAccess = hostFileAccess,\n ) {}\n\n /**\n * Get the standard output path for the manifest based on mode.\n */\n getOutputPath(mode: 'dev' | 'build' | 'source'): string {\n if (mode === 'dev') {\n return join(this.projectRoot, '.smrt/manifest.json');\n }\n if (mode === 'source') {\n return join(this.projectRoot, 'src/manifest/manifest.json');\n }\n return join(this.projectRoot, 'dist/manifest.json');\n }\n\n /**\n * Loads the local manifest from the standard locations.\n * Priority: .smrt/manifest.json -> dist/manifest.json -> src/manifest/manifest.json\n */\n loadLocal(): SmartObjectManifest | null {\n return this._loadFromPaths([\n this.getOutputPath('dev'),\n this.getOutputPath('build'),\n this.getOutputPath('source'),\n ]);\n }\n\n /**\n * Loads the manifest for an external package (dependency).\n * Priority: dist/manifest.json -> .smrt/manifest.json -> src/manifest/manifest.json\n *\n * External packages should prefer their production (dist) manifest\n * over the dev/test (.smrt) manifest to avoid pulling in test objects\n * and transitive dependencies. In a workspace, the checked-in source manifest\n * provides the same package metadata even when the sibling package has not been built yet.\n */\n loadForExternalPackage(): SmartObjectManifest | null {\n return this._loadFromPaths([\n this.getOutputPath('build'),\n this.getOutputPath('dev'),\n this.getOutputPath('source'),\n ]);\n }\n\n private _loadFromPaths(paths: string[]): SmartObjectManifest | null {\n for (const path of paths) {\n if (this.files.existsSync(path)) {\n try {\n const content = this.files.readFileSync(path, 'utf-8');\n return JSON.parse(content);\n } catch (error) {\n logger.error(`[ManifestManager] Failed to read manifest at ${path}`, {\n error,\n });\n }\n }\n }\n\n return null;\n }\n}\n"],"mappings":";;;;AAWA,IAAM,iBAAqC;CAAE;CAAY;AAAa;AAEtE,IAAM,SAAS,aAAa,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;;;;;;;;AAkB7C,IAAa,sBAAb,MAAiC;CAEnB;CACO;CAFnB,YACE,aACA,QAA6C,gBAC7C;EAFU,KAAA,cAAA;EACO,KAAA,QAAA;CAChB;;;;CAKH,cAAc,MAA0C;EACtD,IAAI,SAAS,OACX,OAAO,KAAK,KAAK,aAAa,qBAAqB;EAErD,IAAI,SAAS,UACX,OAAO,KAAK,KAAK,aAAa,4BAA4B;EAE5D,OAAO,KAAK,KAAK,aAAa,oBAAoB;CACpD;;;;;CAMA,YAAwC;EACtC,OAAO,KAAK,eAAe;GACzB,KAAK,cAAc,KAAK;GACxB,KAAK,cAAc,OAAO;GAC1B,KAAK,cAAc,QAAQ;EAC7B,CAAC;CACH;;;;;;;;;;CAWA,yBAAqD;EACnD,OAAO,KAAK,eAAe;GACzB,KAAK,cAAc,OAAO;GAC1B,KAAK,cAAc,KAAK;GACxB,KAAK,cAAc,QAAQ;EAC7B,CAAC;CACH;CAEA,eAAuB,OAA6C;EAClE,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,MAAM,WAAW,IAAI,GAC5B,IAAI;GACF,MAAM,UAAU,KAAK,MAAM,aAAa,MAAM,OAAO;GACrD,OAAO,KAAK,MAAM,OAAO;EAC3B,SAAS,OAAO;GACd,OAAO,MAAM,gDAAgD,QAAQ,EACnE,MACF,CAAC;EACH;EAIJ,OAAO;CACT;AACF"}
@@ -1,38 +1,15 @@
1
1
  import type { ScanResult, SmartObjectManifest } from '../scanner/types.js';
2
+ import { LocalManifestReader } from './local-manifest-reader.js';
2
3
  /**
3
4
  * Reads, writes, and generates SMRT manifests for a project.
4
5
  *
5
6
  * @remarks
6
- * Manifests are JSON files containing class/field metadata produced by the AST scanner.
7
- * Dev manifests live at `.smrt/manifest.json`; build manifests at `dist/manifest.json`.
8
- * Workspace packages may also provide a checked-in source manifest at
9
- * `src/manifest/manifest.json`. When loading a local project, the dev path takes
10
- * priority; for external packages (dependencies), the build path takes priority
11
- * to avoid pulling in test objects.
7
+ * Adds writing and generation to {@link LocalManifestReader}, which owns the
8
+ * read side and the manifest locations. This half is Node-only (`node:fs`
9
+ * writes and the AST scanner) and stays out of the registry's browser graph.
12
10
  */
13
- export declare class ManifestManager {
14
- private projectRoot;
11
+ export declare class ManifestManager extends LocalManifestReader {
15
12
  constructor(projectRoot: string);
16
- /**
17
- * Get the standard output path for the manifest based on mode.
18
- */
19
- getOutputPath(mode: 'dev' | 'build' | 'source'): string;
20
- /**
21
- * Loads the local manifest from the standard locations.
22
- * Priority: .smrt/manifest.json -> dist/manifest.json -> src/manifest/manifest.json
23
- */
24
- loadLocal(): SmartObjectManifest | null;
25
- /**
26
- * Loads the manifest for an external package (dependency).
27
- * Priority: dist/manifest.json -> .smrt/manifest.json -> src/manifest/manifest.json
28
- *
29
- * External packages should prefer their production (dist) manifest
30
- * over the dev/test (.smrt) manifest to avoid pulling in test objects
31
- * and transitive dependencies. In a workspace, the checked-in source manifest
32
- * provides the same package metadata even when the sibling package has not been built yet.
33
- */
34
- loadForExternalPackage(): SmartObjectManifest | null;
35
- private _loadFromPaths;
36
13
  /**
37
14
  * Writes a manifest to the standard location.
38
15
  */
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/manifest/manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI3E;;;;;;;;;;GAUG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,MAAM;IAEvC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM;IAUvD;;;OAGG;IACH,SAAS,IAAI,mBAAmB,GAAG,IAAI;IAQvC;;;;;;;;OAQG;IACH,sBAAsB,IAAI,mBAAmB,GAAG,IAAI;IAQpD,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,mBAAmB,EAAE,IAAI,GAAE,KAAK,GAAG,OAAe,GAAG,IAAI;IAczE;;OAEG;IACG,uBAAuB,CAC3B,WAAW,EAAE,UAAU,EAAE,EACzB,OAAO,EAAE;QACP,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACtC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC7B,GACA,OAAO,CAAC,mBAAmB,CAAC;CAMhC"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/manifest/manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;;;;;;GAOG;AACH,qBAAa,eAAgB,SAAQ,mBAAmB;gBAC1C,WAAW,EAAE,MAAM;IAM/B;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,mBAAmB,EAAE,IAAI,GAAE,KAAK,GAAG,OAAe,GAAG,IAAI;IAczE;;OAEG;IACG,uBAAuB,CAC3B,WAAW,EAAE,UAAU,EAAE,EACzB,OAAO,EAAE;QACP,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACtC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC7B,GACA,OAAO,CAAC,mBAAmB,CAAC;CAMhC"}
@@ -1,69 +1,23 @@
1
+ import { LocalManifestReader } from "./local-manifest-reader.js";
1
2
  import { publishAtomicArtifact } from "../consumer-plugin/artifact-publication.js";
2
3
  import { ManifestGenerator } from "../scanner/manifest-generator.js";
3
- import { createLogger } from "@happyvertical/logger";
4
+ import { dirname } from "node:path";
4
5
  import { existsSync, mkdirSync, readFileSync } from "node:fs";
5
- import { dirname, join } from "node:path";
6
6
  //#region src/manifest/manager.ts
7
- var logger = createLogger({ level: "info" });
8
7
  /**
9
8
  * Reads, writes, and generates SMRT manifests for a project.
10
9
  *
11
10
  * @remarks
12
- * Manifests are JSON files containing class/field metadata produced by the AST scanner.
13
- * Dev manifests live at `.smrt/manifest.json`; build manifests at `dist/manifest.json`.
14
- * Workspace packages may also provide a checked-in source manifest at
15
- * `src/manifest/manifest.json`. When loading a local project, the dev path takes
16
- * priority; for external packages (dependencies), the build path takes priority
17
- * to avoid pulling in test objects.
11
+ * Adds writing and generation to {@link LocalManifestReader}, which owns the
12
+ * read side and the manifest locations. This half is Node-only (`node:fs`
13
+ * writes and the AST scanner) and stays out of the registry's browser graph.
18
14
  */
19
- var ManifestManager = class {
20
- projectRoot;
15
+ var ManifestManager = class extends LocalManifestReader {
21
16
  constructor(projectRoot) {
22
- this.projectRoot = projectRoot;
23
- }
24
- /**
25
- * Get the standard output path for the manifest based on mode.
26
- */
27
- getOutputPath(mode) {
28
- if (mode === "dev") return join(this.projectRoot, ".smrt/manifest.json");
29
- if (mode === "source") return join(this.projectRoot, "src/manifest/manifest.json");
30
- return join(this.projectRoot, "dist/manifest.json");
31
- }
32
- /**
33
- * Loads the local manifest from the standard locations.
34
- * Priority: .smrt/manifest.json -> dist/manifest.json -> src/manifest/manifest.json
35
- */
36
- loadLocal() {
37
- return this._loadFromPaths([
38
- this.getOutputPath("dev"),
39
- this.getOutputPath("build"),
40
- this.getOutputPath("source")
41
- ]);
42
- }
43
- /**
44
- * Loads the manifest for an external package (dependency).
45
- * Priority: dist/manifest.json -> .smrt/manifest.json -> src/manifest/manifest.json
46
- *
47
- * External packages should prefer their production (dist) manifest
48
- * over the dev/test (.smrt) manifest to avoid pulling in test objects
49
- * and transitive dependencies. In a workspace, the checked-in source manifest
50
- * provides the same package metadata even when the sibling package has not been built yet.
51
- */
52
- loadForExternalPackage() {
53
- return this._loadFromPaths([
54
- this.getOutputPath("build"),
55
- this.getOutputPath("dev"),
56
- this.getOutputPath("source")
57
- ]);
58
- }
59
- _loadFromPaths(paths) {
60
- for (const path of paths) if (existsSync(path)) try {
61
- const content = readFileSync(path, "utf-8");
62
- return JSON.parse(content);
63
- } catch (error) {
64
- logger.error(`[ManifestManager] Failed to read manifest at ${path}`, { error });
65
- }
66
- return null;
17
+ super(projectRoot, {
18
+ existsSync,
19
+ readFileSync
20
+ });
67
21
  }
68
22
  /**
69
23
  * Writes a manifest to the standard location.
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","names":[],"sources":["../../src/manifest/manager.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { createLogger } from '@happyvertical/logger';\nimport { publishAtomicArtifact } from '../consumer-plugin/artifact-publication.js';\nimport { ManifestGenerator } from '../scanner/manifest-generator.js';\nimport type { ScanResult, SmartObjectManifest } from '../scanner/types.js';\n\nconst logger = createLogger({ level: 'info' });\n\n/**\n * Reads, writes, and generates SMRT manifests for a project.\n *\n * @remarks\n * Manifests are JSON files containing class/field metadata produced by the AST scanner.\n * Dev manifests live at `.smrt/manifest.json`; build manifests at `dist/manifest.json`.\n * Workspace packages may also provide a checked-in source manifest at\n * `src/manifest/manifest.json`. When loading a local project, the dev path takes\n * priority; for external packages (dependencies), the build path takes priority\n * to avoid pulling in test objects.\n */\nexport class ManifestManager {\n constructor(private projectRoot: string) {}\n\n /**\n * Get the standard output path for the manifest based on mode.\n */\n getOutputPath(mode: 'dev' | 'build' | 'source'): string {\n if (mode === 'dev') {\n return join(this.projectRoot, '.smrt/manifest.json');\n }\n if (mode === 'source') {\n return join(this.projectRoot, 'src/manifest/manifest.json');\n }\n return join(this.projectRoot, 'dist/manifest.json');\n }\n\n /**\n * Loads the local manifest from the standard locations.\n * Priority: .smrt/manifest.json -> dist/manifest.json -> src/manifest/manifest.json\n */\n loadLocal(): SmartObjectManifest | null {\n return this._loadFromPaths([\n this.getOutputPath('dev'),\n this.getOutputPath('build'),\n this.getOutputPath('source'),\n ]);\n }\n\n /**\n * Loads the manifest for an external package (dependency).\n * Priority: dist/manifest.json -> .smrt/manifest.json -> src/manifest/manifest.json\n *\n * External packages should prefer their production (dist) manifest\n * over the dev/test (.smrt) manifest to avoid pulling in test objects\n * and transitive dependencies. In a workspace, the checked-in source manifest\n * provides the same package metadata even when the sibling package has not been built yet.\n */\n loadForExternalPackage(): SmartObjectManifest | null {\n return this._loadFromPaths([\n this.getOutputPath('build'),\n this.getOutputPath('dev'),\n this.getOutputPath('source'),\n ]);\n }\n\n private _loadFromPaths(paths: string[]): SmartObjectManifest | null {\n for (const path of paths) {\n if (existsSync(path)) {\n try {\n const content = readFileSync(path, 'utf-8');\n return JSON.parse(content);\n } catch (error) {\n logger.error(`[ManifestManager] Failed to read manifest at ${path}`, {\n error,\n });\n }\n }\n }\n\n return null;\n }\n\n /**\n * Writes a manifest to the standard location.\n */\n write(manifest: SmartObjectManifest, mode: 'dev' | 'build' = 'dev'): void {\n const outputPath = this.getOutputPath(mode);\n const outputDir = dirname(outputPath);\n\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n\n publishAtomicArtifact({\n path: outputPath,\n content: JSON.stringify(manifest, null, 2),\n });\n }\n\n /**\n * Generates a manifest from scan results and writes it.\n */\n async generateFromScanResults(\n scanResults: ScanResult[],\n options: {\n mode: 'dev' | 'build';\n packageName?: string;\n packageVersion?: string;\n packageJson?: Record<string, unknown>;\n smrtDependencies?: string[];\n },\n ): Promise<SmartObjectManifest> {\n const generator = new ManifestGenerator();\n const manifest = generator.generateManifest(scanResults, options);\n this.write(manifest, options.mode);\n return manifest;\n }\n}\n"],"mappings":";;;;;;AAOA,IAAM,SAAS,aAAa,EAAE,OAAO,OAAO,CAAC;;;;;;;;;;;;AAa7C,IAAa,kBAAb,MAA6B;CACP;CAApB,YAAY,aAA6B;EAArB,KAAA,cAAA;CAAsB;;;;CAK1C,cAAc,MAA0C;EACtD,IAAI,SAAS,OACX,OAAO,KAAK,KAAK,aAAa,qBAAqB;EAErD,IAAI,SAAS,UACX,OAAO,KAAK,KAAK,aAAa,4BAA4B;EAE5D,OAAO,KAAK,KAAK,aAAa,oBAAoB;CACpD;;;;;CAMA,YAAwC;EACtC,OAAO,KAAK,eAAe;GACzB,KAAK,cAAc,KAAK;GACxB,KAAK,cAAc,OAAO;GAC1B,KAAK,cAAc,QAAQ;EAC7B,CAAC;CACH;;;;;;;;;;CAWA,yBAAqD;EACnD,OAAO,KAAK,eAAe;GACzB,KAAK,cAAc,OAAO;GAC1B,KAAK,cAAc,KAAK;GACxB,KAAK,cAAc,QAAQ;EAC7B,CAAC;CACH;CAEA,eAAuB,OAA6C;EAClE,KAAK,MAAM,QAAQ,OACjB,IAAI,WAAW,IAAI,GACjB,IAAI;GACF,MAAM,UAAU,aAAa,MAAM,OAAO;GAC1C,OAAO,KAAK,MAAM,OAAO;EAC3B,SAAS,OAAO;GACd,OAAO,MAAM,gDAAgD,QAAQ,EACnE,MACF,CAAC;EACH;EAIJ,OAAO;CACT;;;;CAKA,MAAM,UAA+B,OAAwB,OAAa;EACxE,MAAM,aAAa,KAAK,cAAc,IAAI;EAC1C,MAAM,YAAY,QAAQ,UAAU;EAEpC,IAAI,CAAC,WAAW,SAAS,GACvB,UAAU,WAAW,EAAE,WAAW,KAAK,CAAC;EAG1C,sBAAsB;GACpB,MAAM;GACN,SAAS,KAAK,UAAU,UAAU,MAAM,CAAC;EAC3C,CAAC;CACH;;;;CAKA,MAAM,wBACJ,aACA,SAO8B;EAE9B,MAAM,WAAW,IADK,kBACL,CAAA,CAAU,iBAAiB,aAAa,OAAO;EAChE,KAAK,MAAM,UAAU,QAAQ,IAAI;EACjC,OAAO;CACT;AACF"}
1
+ {"version":3,"file":"manager.js","names":[],"sources":["../../src/manifest/manager.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport { publishAtomicArtifact } from '../consumer-plugin/artifact-publication.js';\nimport { ManifestGenerator } from '../scanner/manifest-generator.js';\nimport type { ScanResult, SmartObjectManifest } from '../scanner/types.js';\nimport { LocalManifestReader } from './local-manifest-reader.js';\n\n/**\n * Reads, writes, and generates SMRT manifests for a project.\n *\n * @remarks\n * Adds writing and generation to {@link LocalManifestReader}, which owns the\n * read side and the manifest locations. This half is Node-only (`node:fs`\n * writes and the AST scanner) and stays out of the registry's browser graph.\n */\nexport class ManifestManager extends LocalManifestReader {\n constructor(projectRoot: string) {\n // Reads go through this module's own `node:fs` binding, not the lazy host\n // the registry's reader uses.\n super(projectRoot, { existsSync, readFileSync });\n }\n\n /**\n * Writes a manifest to the standard location.\n */\n write(manifest: SmartObjectManifest, mode: 'dev' | 'build' = 'dev'): void {\n const outputPath = this.getOutputPath(mode);\n const outputDir = dirname(outputPath);\n\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n\n publishAtomicArtifact({\n path: outputPath,\n content: JSON.stringify(manifest, null, 2),\n });\n }\n\n /**\n * Generates a manifest from scan results and writes it.\n */\n async generateFromScanResults(\n scanResults: ScanResult[],\n options: {\n mode: 'dev' | 'build';\n packageName?: string;\n packageVersion?: string;\n packageJson?: Record<string, unknown>;\n smrtDependencies?: string[];\n },\n ): Promise<SmartObjectManifest> {\n const generator = new ManifestGenerator();\n const manifest = generator.generateManifest(scanResults, options);\n this.write(manifest, options.mode);\n return manifest;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA,IAAa,kBAAb,cAAqC,oBAAoB;CACvD,YAAY,aAAqB;EAG/B,MAAM,aAAa;GAAE;GAAY;EAAa,CAAC;CACjD;;;;CAKA,MAAM,UAA+B,OAAwB,OAAa;EACxE,MAAM,aAAa,KAAK,cAAc,IAAI;EAC1C,MAAM,YAAY,QAAQ,UAAU;EAEpC,IAAI,CAAC,WAAW,SAAS,GACvB,UAAU,WAAW,EAAE,WAAW,KAAK,CAAC;EAG1C,sBAAsB;GACpB,MAAM;GACN,SAAS,KAAK,UAAU,UAAU,MAAM,CAAC;EAC3C,CAAC;CACH;;;;CAKA,MAAM,wBACJ,aACA,SAO8B;EAE9B,MAAM,WAAW,IADK,kBACL,CAAA,CAAU,iBAAiB,aAAa,OAAO;EAChE,KAAK,MAAM,UAAU,QAAQ,IAAI;EACjC,OAAO;CACT;AACF"}
@@ -66,7 +66,7 @@ export declare function loadLocalTestManifestSync(): Manifest | null | undefined
66
66
  /**
67
67
  * The manifest of the project the process runs in (the first of
68
68
  * `<cwd>/.smrt/manifest.json`, `<cwd>/dist/manifest.json`,
69
- * `<cwd>/src/manifest/manifest.json`, as `ManifestManager.loadLocal()` reads
69
+ * `<cwd>/src/manifest/manifest.json`, as `LocalManifestReader.loadLocal()` reads
70
70
  * them), never seeded into the lookup caches. Only consulted to attribute a
71
71
  * decorated class whose declaring file that manifest describes, when no loaded
72
72
  * manifest does: a plain Node/tsx script importing an app's workspace-package
@@ -1 +1 @@
1
- {"version":3,"file":"manifest-loader.d.ts","sourceRoot":"","sources":["../../src/manifest/manifest-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest-loader.d.ts","sourceRoot":"","sources":["../../src/manifest/manifest-loader.ts"],"names":[],"mappings":"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"}
@@ -3,14 +3,12 @@ import "../scanner/types.js";
3
3
  import { parse } from "../utils/json.js";
4
4
  import { createQualifiedName, isQualifiedName, parseQualifiedName } from "../utils/qualified-names.js";
5
5
  import { isDecoratorRuntimeFramePath, isDecoratorRuntimePackageName, isModuleRunnerFramePath, isSmrtCoreFramePath } from "../utils/stack-frames.js";
6
- import { ManifestManager } from "./manager.js";
7
6
  import { getLocalTestManifestCache as getLocalTestManifestCache$1, getManifestCache, getStaticManifestCache as getStaticManifestCache$1, getTestManifestCache as getTestManifestCache$1, isTestEnvironment as isTestEnvironment$1, shouldLoadCoreTestManifest } from "./store.js";
7
+ import { dirname, existsSync, join, readFileSync, readdirSync, require, statSync } from "./node-host.js";
8
+ import { LocalManifestReader } from "./local-manifest-reader.js";
8
9
  import { getDefaultCompositeSource } from "./sources/composite.js";
9
10
  import { ObjectRegistry } from "../registry.js";
10
11
  import { createLogger } from "@happyvertical/logger";
11
- import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
12
- import { createRequire } from "node:module";
13
- import { dirname, join } from "node:path";
14
12
  //#region src/manifest/manifest-loader.ts
15
13
  /**
16
14
  * Manifest Loader - Automatic discovery of external package manifests
@@ -77,7 +75,6 @@ function getSTISiblingCache() {
77
75
  if (!globalThis.__smrtSTISiblingCache) globalThis.__smrtSTISiblingCache = /* @__PURE__ */ new Map();
78
76
  return globalThis.__smrtSTISiblingCache;
79
77
  }
80
- var require = createRequire(import.meta.url);
81
78
  /**
82
79
  * Cached debug flag evaluated once at module load time.
83
80
  * Environment variables don't change at runtime, so this is safe.
@@ -199,13 +196,13 @@ function getTestManifest() {
199
196
  function loadLocalTestManifestSync() {
200
197
  const cached = getLocalTestManifestCache();
201
198
  if (cached !== void 0 && cached !== null) return cached;
202
- const manifest = new ManifestManager(process.cwd()).loadLocal();
199
+ const manifest = new LocalManifestReader(process.cwd()).loadLocal();
203
200
  const testManifestPath = join(process.cwd(), "src/manifest/test-manifest.json");
204
201
  if (manifest) {
205
202
  const objectCount = Object.keys(manifest.objects).length;
206
203
  if (objectCount > 0) {
207
204
  setLocalTestManifestCache(manifest);
208
- debugLog(`[manifest-loader] ✅ Loaded local manifest via ManifestManager (${objectCount} objects)`);
205
+ debugLog(`[manifest-loader] ✅ Loaded local manifest via LocalManifestReader (${objectCount} objects)`);
209
206
  return manifest;
210
207
  }
211
208
  if (existsSync(testManifestPath)) try {
@@ -213,12 +210,12 @@ function loadLocalTestManifestSync() {
213
210
  const testObjectCount = Object.keys(testManifest.objects).length;
214
211
  if (testObjectCount > 0) {
215
212
  setLocalTestManifestCache(testManifest);
216
- debugLog(`[manifest-loader] ✅ Loaded test manifest from ${testManifestPath} (${testObjectCount} objects) - preferred over empty ManifestManager result`);
213
+ debugLog(`[manifest-loader] ✅ Loaded test manifest from ${testManifestPath} (${testObjectCount} objects) - preferred over empty LocalManifestReader result`);
217
214
  return testManifest;
218
215
  }
219
216
  } catch {}
220
217
  setLocalTestManifestCache(manifest);
221
- debugLog(`[manifest-loader] ✅ Loaded local manifest via ManifestManager (${objectCount} objects)`);
218
+ debugLog(`[manifest-loader] ✅ Loaded local manifest via LocalManifestReader (${objectCount} objects)`);
222
219
  return manifest;
223
220
  }
224
221
  if (existsSync(testManifestPath)) try {
@@ -237,7 +234,7 @@ var projectManifestRead;
237
234
  /**
238
235
  * The manifest of the project the process runs in (the first of
239
236
  * `<cwd>/.smrt/manifest.json`, `<cwd>/dist/manifest.json`,
240
- * `<cwd>/src/manifest/manifest.json`, as `ManifestManager.loadLocal()` reads
237
+ * `<cwd>/src/manifest/manifest.json`, as `LocalManifestReader.loadLocal()` reads
241
238
  * them), never seeded into the lookup caches. Only consulted to attribute a
242
239
  * decorated class whose declaring file that manifest describes, when no loaded
243
240
  * manifest does: a plain Node/tsx script importing an app's workspace-package
@@ -247,7 +244,7 @@ var projectManifestRead;
247
244
  */
248
245
  function readProjectManifestSync() {
249
246
  if (typeof process === "undefined" || typeof process.cwd !== "function") return null;
250
- const manager = new ManifestManager(process.cwd());
247
+ const manager = new LocalManifestReader(process.cwd());
251
248
  const path = [
252
249
  manager.getOutputPath("dev"),
253
250
  manager.getOutputPath("build"),
@@ -739,6 +736,40 @@ async function discoverManifestEntry(ctor, className) {
739
736
  if (foundEntries.length === 1) return foundEntries[0].entry;
740
737
  }
741
738
  /**
739
+ * Get all detected manifest collisions
740
+ *
741
+ * @returns Map of class names to array of collision info
742
+ */
743
+ function getManifestCollisions() {
744
+ return new Map(getManifestCollisionsMap());
745
+ }
746
+ /**
747
+ * Clear manifest cache
748
+ *
749
+ * Useful for testing or when packages are updated at runtime.
750
+ */
751
+ function clearManifestCache() {
752
+ setStaticManifestCache(void 0);
753
+ setStaticManifestLoadAttempted(false);
754
+ setTestManifestCache(void 0);
755
+ setTestManifestLoadAttempted(false);
756
+ setLocalTestManifestCache(void 0);
757
+ getManifestCacheMap().clear();
758
+ getManifestCollisionsMap().clear();
759
+ getSTISiblingCache().clear();
760
+ projectManifestRead = void 0;
761
+ }
762
+ /**
763
+ * Get all loaded manifests
764
+ *
765
+ * Returns a copy of the manifest cache for inspection.
766
+ *
767
+ * @returns Array of [packageName, manifest] entries
768
+ */
769
+ function getLoadedManifests() {
770
+ return Array.from(getManifestCacheMap().entries());
771
+ }
772
+ /**
742
773
  * Discover all STI sibling classes that share the same collection (table)
743
774
  *
744
775
  * This is critical for STI schema merging: when one subtype is accessed,
@@ -820,6 +851,6 @@ function discoverSTISiblingsSync(collection) {
820
851
  return siblings;
821
852
  }
822
853
  //#endregion
823
- export { discoverManifestEntry, discoverManifestSync, discoverSTISiblingsSync, findManifestEntryByQualifiedName, getPackageName, loadExternalManifest, loadExternalManifestSync, loadLocalTestManifestSync, loadManifestFromPathSync, lookupInManifest, readProjectManifestSync };
854
+ export { clearManifestCache, discoverManifestEntry, discoverManifestSync, discoverSTISiblingsSync, findManifestEntryByQualifiedName, getLoadedManifests, getManifestCollisions, getPackageName, loadExternalManifest, loadExternalManifestSync, loadLocalTestManifestSync, loadManifestFromPathSync, lookupInManifest, readProjectManifestSync };
824
855
 
825
856
  //# sourceMappingURL=manifest-loader.js.map