homebridge-plugin-utils 2.0.0 → 2.1.0

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 (83) hide show
  1. package/dist/backpressure.d.ts +1 -1
  2. package/dist/backpressure.js +4 -4
  3. package/dist/backpressure.js.map +1 -1
  4. package/dist/cli/index.d.ts +73 -2
  5. package/dist/cli/index.js +221 -25
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/clock-double.js +2 -2
  8. package/dist/clock-double.js.map +1 -1
  9. package/dist/disposable-stack.d.ts +59 -0
  10. package/dist/disposable-stack.js +155 -0
  11. package/dist/disposable-stack.js.map +1 -0
  12. package/dist/docChrome.d.ts +260 -0
  13. package/dist/docChrome.js +361 -0
  14. package/dist/docChrome.js.map +1 -0
  15. package/dist/featureOptions-docs.d.ts +2 -2
  16. package/dist/featureOptions-docs.js +1 -1
  17. package/dist/featureOptions.d.ts +5 -5
  18. package/dist/featureOptions.js +6 -6
  19. package/dist/ffmpeg/exec.d.ts +2 -2
  20. package/dist/ffmpeg/exec.js +2 -2
  21. package/dist/ffmpeg/mp4-assembler.d.ts +45 -4
  22. package/dist/ffmpeg/mp4-assembler.js +45 -8
  23. package/dist/ffmpeg/mp4-assembler.js.map +1 -1
  24. package/dist/ffmpeg/mp4-parser.d.ts +1 -1
  25. package/dist/ffmpeg/mp4-parser.js +1 -1
  26. package/dist/ffmpeg/options.js +3 -3
  27. package/dist/ffmpeg/options.js.map +1 -1
  28. package/dist/ffmpeg/process.d.ts +1 -1
  29. package/dist/ffmpeg/process.js +4 -4
  30. package/dist/ffmpeg/process.js.map +1 -1
  31. package/dist/ffmpeg/record.d.ts +26 -1
  32. package/dist/ffmpeg/record.js +12 -0
  33. package/dist/ffmpeg/record.js.map +1 -1
  34. package/dist/ffmpeg/recording-process-double.d.ts +13 -0
  35. package/dist/ffmpeg/recording-process-double.js +22 -0
  36. package/dist/ffmpeg/recording-process-double.js.map +1 -1
  37. package/dist/ffmpeg/rtp-parser.d.ts +1 -1
  38. package/dist/ffmpeg/rtp-parser.js +1 -1
  39. package/dist/ffmpeg/rtp.d.ts +4 -4
  40. package/dist/ffmpeg/rtp.js +7 -6
  41. package/dist/ffmpeg/rtp.js.map +1 -1
  42. package/dist/ffmpeg/stream.js +1 -1
  43. package/dist/ffmpeg/stream.js.map +1 -1
  44. package/dist/index.d.ts +1 -0
  45. package/dist/index.js +1 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/logclient/auth.d.ts +3 -3
  48. package/dist/logclient/auth.js +2 -2
  49. package/dist/logclient/auth.js.map +1 -1
  50. package/dist/logclient/cli-run.js +2 -2
  51. package/dist/logclient/cli-run.js.map +1 -1
  52. package/dist/logclient/cli.js +2 -2
  53. package/dist/logclient/client.js +2 -2
  54. package/dist/logclient/client.js.map +1 -1
  55. package/dist/logclient/rest.js +1 -1
  56. package/dist/logclient/socket-double.d.ts +1 -1
  57. package/dist/logclient/socket-double.js +1 -1
  58. package/dist/logclient/socket.js +5 -5
  59. package/dist/logclient/socket.js.map +1 -1
  60. package/dist/logclient/time-window.d.ts +1 -1
  61. package/dist/mqttClient.d.ts +1 -1
  62. package/dist/mqttClient.js +3 -3
  63. package/dist/mqttClient.js.map +1 -1
  64. package/dist/ui/featureOptions.js +6 -6
  65. package/dist/ui/pluginConfigSession.mjs +1 -1
  66. package/dist/ui/webUi-featureOptions/effects/persist.mjs +2 -2
  67. package/dist/ui/webUi-featureOptions/effects/theme.mjs +1 -1
  68. package/dist/ui/webUi-featureOptions/effects/tokens.mjs +1 -1
  69. package/dist/ui/webUi-featureOptions/rendering.mjs +2 -2
  70. package/dist/ui/webUi-featureOptions/selectors.mjs +3 -3
  71. package/dist/ui/webUi-featureOptions/state.mjs +6 -6
  72. package/dist/ui/webUi-featureOptions/store.mjs +1 -1
  73. package/dist/ui/webUi-featureOptions/utils.mjs +14 -1
  74. package/dist/ui/webUi-featureOptions/views/connectionError.mjs +1 -1
  75. package/dist/ui/webUi-featureOptions/views/nav.mjs +42 -28
  76. package/dist/ui/webUi-featureOptions/views/options.mjs +2 -2
  77. package/dist/ui/webUi-featureOptions/views/search.mjs +2 -2
  78. package/dist/ui/webUi-featureOptions.mjs +57 -32
  79. package/dist/ui/webUi.mjs +43 -11
  80. package/dist/util.d.ts +89 -12
  81. package/dist/util.js +62 -14
  82. package/dist/util.js.map +1 -1
  83. package/package.json +9 -9
@@ -4,7 +4,7 @@ import type { Writable } from "node:stream";
4
4
  * Thrown synchronously by {@link BackpressureWriter.write} when the pending queue is already at the configured {@link BackpressureWriterInit.highWaterMark} and
5
5
  * accepting the new chunk would push it over.
6
6
  *
7
- * Separate from the "writer has aborted" and "underlying stream is dead" failure modes so callers can discriminate backpressure-overflow (back off and retry later)
7
+ * Separate from the "writer has aborted" and "underlying stream is dead" failure modes so callers can distinguish backpressure-overflow (back off and retry later)
8
8
  * from terminal failures (give up or escalate) by type rather than by inspecting error message text.
9
9
  *
10
10
  * @category Utilities
@@ -17,7 +17,7 @@ import { once } from "node:events";
17
17
  * Thrown synchronously by {@link BackpressureWriter.write} when the pending queue is already at the configured {@link BackpressureWriterInit.highWaterMark} and
18
18
  * accepting the new chunk would push it over.
19
19
  *
20
- * Separate from the "writer has aborted" and "underlying stream is dead" failure modes so callers can discriminate backpressure-overflow (back off and retry later)
20
+ * Separate from the "writer has aborted" and "underlying stream is dead" failure modes so callers can distinguish backpressure-overflow (back off and retry later)
21
21
  * from terminal failures (give up or escalate) by type rather than by inspecting error message text.
22
22
  *
23
23
  * @category Utilities
@@ -109,7 +109,7 @@ export class BackpressureWriter {
109
109
  // Single teardown convergence point. `onAbort` registers the one-shot teardown handler AND handles the pre-aborted-signal edge case where `addEventListener`
110
110
  // would otherwise skip the handler. Rejects every pending entry - including the in-flight entry when the drain loop is parked on
111
111
  // `events.once(stream, "drain", { signal })`. The drain loop's catch branch may also reject the in-flight resolver under the same abort; promise resolvers are
112
- // idempotent after first settlement, so the second call is a no-op. Rejecting from here unconditionally is load-bearing in the stream-error escalation path,
112
+ // inert after first settlement, so the second call is a no-op. Rejecting from here unconditionally is required in the stream-error escalation path,
113
113
  // where the drain loop shifts the in-flight entry before calling `this.#controller.abort(...)` - by the time the listener runs, only the queued entries remain
114
114
  // in the queue, and leaving any of them unrejected would orphan the caller's promise.
115
115
  onAbort(this.signal, () => this.#teardown());
@@ -131,7 +131,7 @@ export class BackpressureWriter {
131
131
  */
132
132
  async write(chunk) {
133
133
  // Pre-aborted short-circuit: a write issued after teardown has nothing live to attach to. Rejecting with the signal's reason keeps semantics uniform with the
134
- // mid-write abort path - callers discriminate on `signal.reason` / `isHbpuAbortReason` in either case.
134
+ // mid-write abort path - callers branch on `signal.reason` / `isHbpuAbortReason` in either case.
135
135
  if (this.signal.aborted) {
136
136
  throw this.signal.reason;
137
137
  }
@@ -256,7 +256,7 @@ export class BackpressureWriter {
256
256
  }
257
257
  }
258
258
  // Teardown convergence point, fired exactly once when `this.signal` aborts. Rejects every pending entry with the signal's reason, regardless of whether the drain
259
- // loop is currently processing. Promise resolvers are idempotent after first settlement, so if the drain loop's catch branch also rejects the in-flight resolver
259
+ // loop is currently processing. Promise resolvers are inert after first settlement, so if the drain loop's catch branch also rejects the in-flight resolver
260
260
  // (e.g., when `events.once(..., { signal })` rejects on the same abort), the second call is a no-op. Draining the queue unconditionally here prevents the
261
261
  // stream-error escalation path from orphaning queued resolvers - `#drain`'s catch shifts the in-flight entry and then calls `this.#controller.abort(...)`, which
262
262
  // fires this listener synchronously while the remaining queued entries are still in the queue.
@@ -1 +1 @@
1
- {"version":3,"file":"backpressure.js","sourceRoot":"","sources":["../src/backpressure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backpressure.js","sourceRoot":"","sources":["../src/backpressure.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,22 @@
1
1
  #!/usr/bin/env node
2
+ /**
3
+ * The homebridge-plugin-utils CLI, exposed to consumers via the `bin` field in `package.json`. A single cohesive module: the content-hash helper, the `prepareUi`,
4
+ * `prepareDocs`, and `prepareChrome` transforms, the `runCli` dispatcher, and the entry-point execution all live here with no inter-file relative VALUE imports.
5
+ *
6
+ * That single-file shape is deliberate, not incidental. A bin is invoked through an `npm`-managed symlink in `node_modules/.bin`; if the entry imported a sibling
7
+ * module by relative path AT LOAD TIME, that import would resolve against the symlink's directory under symlink-preserving or copied-package layouts and fail. With
8
+ * every runtime edge pointing only at `node:` builtins, there is nothing to fracture - the CLI runs identically whether reached directly, through a symlink, through
9
+ * a `file:` dependency, or under `--preserve-symlinks`. The lone `import type` of the renderer's signatures is fully erased by the compiler and emits no runtime edge,
10
+ * so it carries the SSOT types without reintroducing a load-time relative dependency; when `prepareDocs` actually needs the renderer it reaches it through a computed
11
+ * dynamic import the dispatch site supplies, the same indirection the `hblog` bin uses.
12
+ *
13
+ * The module is simultaneously the executable (run via the bin) and a side-effect-free library surface (`prepareUi` / `prepareDocs` / `prepareChrome` / `runCli` /
14
+ * `USAGE`) that the test suite imports. The entry block at the bottom only executes when this module is the program entry point, detected by comparing canonicalized
15
+ * real paths - see its comment for why a raw path comparison is insufficient.
16
+ *
17
+ * @module
18
+ */
19
+ import type { parseDocChromeManifest, parseProjectEntries, renderDevBadges, renderDocIndex, renderMasthead, renderProjects } from "../docChrome.ts";
2
20
  import type { renderFeatureOptionsReference, spliceMarkedRegion } from "../featureOptions-docs.ts";
3
21
  /**
4
22
  * Usage banner shown on no command or an unknown command. Kept as an exported constant so tests assert against its text without
@@ -12,12 +30,12 @@ export declare const USAGE: string;
12
30
  * injects a trailing-slash importmap entry that prefixes every `./lib/` import with the hashed-versioned path. Transitive imports inherit the prefix through
13
31
  * relative-URL resolution, so cache-busting reaches files the importmap never names.
14
32
  *
15
- * The content hash is the load-bearing piece for the maintainer-iteration use case. A semver-only subdir name would stay constant across the maintainer's
33
+ * The content hash is what makes the maintainer-iteration use case work. A semver-only subdir name would stay constant across the maintainer's
16
34
  * edit/rebuild/test cycle (version doesn't bump on every save), and the browser would happily serve cached copies of the stale URLs. Hashing the tree means any
17
35
  * source change produces a different subdir name, which produces different URLs, which forces fresh fetches. Same code path serves the published-release case: a
18
36
  * release ships with a fixed hash, and every consumer fetching it sees the same URL space and caches aggressively within it.
19
37
  *
20
- * Operates idempotently. A re-run against unchanged source content produces the same subdir name + same contents + same manifest. Stale prior-build subdirs are
38
+ * Operates repeatably. A re-run against unchanged source content produces the same subdir name + same contents + same manifest. Stale prior-build subdirs are
21
39
  * removed in the same pass; non-version-shaped entries in the destination are left untouched so a plugin's own files (assets, sibling tooling, README copies)
22
40
  * survive across runs.
23
41
  *
@@ -71,6 +89,58 @@ export declare function prepareDocs({ catalogModulePath, docPath, render, splice
71
89
  render: typeof renderFeatureOptionsReference;
72
90
  splice: typeof spliceMarkedRegion;
73
91
  }): Promise<void>;
92
+ interface DocChromeModule {
93
+ readonly DEV_BADGES_BEGIN: string;
94
+ readonly DEV_BADGES_END: string;
95
+ readonly DOCUMENTATION_BEGIN: string;
96
+ readonly DOCUMENTATION_END: string;
97
+ readonly MASTHEAD_BEGIN: string;
98
+ readonly MASTHEAD_END: string;
99
+ readonly PROJECTS_BEGIN: string;
100
+ readonly PROJECTS_END: string;
101
+ readonly parseDocChromeManifest: typeof parseDocChromeManifest;
102
+ readonly parseProjectEntries: typeof parseProjectEntries;
103
+ readonly renderDevBadges: typeof renderDevBadges;
104
+ readonly renderDocIndex: typeof renderDocIndex;
105
+ readonly renderMasthead: typeof renderMasthead;
106
+ readonly renderProjects: typeof renderProjects;
107
+ }
108
+ /**
109
+ * Stamp a plugin's documentation-chrome regions - the masthead, the documentation index, the dashboard badges, and the project list - across its README, every content
110
+ * doc, and its webUI Support tab, from one per-plugin manifest. This is the multi-region, multi-file counterpart to {@link prepareDocs}: where that regenerates one
111
+ * feature-options region in one doc, this regenerates several named regions in many files, so a plugin's masthead and navigation cannot drift between the surfaces that
112
+ * repeat them.
113
+ *
114
+ * Pure-by-injection like {@link prepareDocs}: the `docChrome` renderers and validator arrive through the injected `chrome` namespace and the splice helper through
115
+ * `splice`, so this function is unit-testable against the real exports without a built `dist/`, and the CLI's single-file no-static-relative-import discipline is
116
+ * preserved. `fetchImpl` is injected (defaulting to the global `fetch`) so the remote project-source path is testable without network access.
117
+ *
118
+ * The manifest is loaded (a typed module or a static JSON file), validated with a field-naming diagnostic, and its optional project source resolved to inline data. The
119
+ * per-file edit plan is then built - the README carries the masthead, the documentation index, and the dashboard badges; each content doc carries the masthead (unless
120
+ * its entry opts out) and a self-omitting footer index; the webUI, when present, carries the documentation index and the project list. Every region is spliced against
121
+ * its own marker pair through the shared, ambiguity-rejecting splice primitive.
122
+ *
123
+ * The write is all-or-nothing across files in the realistic failure mode. Splicing happens entirely in memory first, so a missing or ambiguous marker in any file
124
+ * aborts the run before a single write. The writes then proceed in two phases - every file's new content is staged in a sibling `.tmp`, and only once all temps exist
125
+ * are they renamed over their targets - so a staging failure leaves every original untouched and each promotion is an atomic rename.
126
+ *
127
+ * @param args
128
+ * @param args.chrome - The injected `docChrome` module namespace (its renderers, marker constants, and validators).
129
+ * @param args.fetchImpl - The `fetch` implementation used to resolve a remote project source. Defaults to the global `fetch`; tests inject a fake.
130
+ * @param args.manifestPath - Absolute path to the plugin's manifest - a compiled module or a `.json` file.
131
+ * @param args.pluginRoot - Absolute path to the plugin root that the manifest's surface and file references resolve against.
132
+ * @param args.splice - The injected {@link spliceMarkedRegion} from `featureOptions-docs.ts`.
133
+ *
134
+ * @throws When the manifest is mis-shaped, when a resolved project source is malformed, when a target file cannot be read, or when any region's marker pair is absent or
135
+ * ambiguous - propagating the splice's own framed errors so the dispatch site frames them uniformly.
136
+ */
137
+ export declare function prepareChrome({ chrome, fetchImpl, manifestPath, pluginRoot, splice }: {
138
+ chrome: DocChromeModule;
139
+ fetchImpl?: typeof fetch;
140
+ manifestPath: string;
141
+ pluginRoot: string;
142
+ splice: typeof spliceMarkedRegion;
143
+ }): Promise<void>;
74
144
  /**
75
145
  * Run the CLI against a synthetic argv vector. Returns the process exit code that the entry block propagates. Pure-by-injection: takes its `cwd`, `stderr`, and
76
146
  * `sourceRoot` as arguments rather than reading them from globals, so tests exercise the full dispatch path against a captured stderr, a tmpdir source root, and a
@@ -92,4 +162,5 @@ export declare function runCli({ argv, cwd, sourceRoot, stderr }: {
92
162
  write: (chunk: string) => unknown;
93
163
  };
94
164
  }): Promise<number>;
165
+ export {};
95
166
  //# sourceMappingURL=index.d.ts.map
package/dist/cli/index.js CHANGED
@@ -11,23 +11,6 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
11
11
  }
12
12
  return path;
13
13
  };
14
- /**
15
- * The homebridge-plugin-utils CLI, exposed to consumers via the `bin` field in `package.json`. A single cohesive module: the content-hash helper, the `prepareUi`
16
- * and `prepareDocs` transforms, the `runCli` dispatcher, and the entry-point execution all live here with no inter-file relative VALUE imports.
17
- *
18
- * That single-file shape is deliberate, not incidental. A bin is invoked through an `npm`-managed symlink in `node_modules/.bin`; if the entry imported a sibling
19
- * module by relative path AT LOAD TIME, that import would resolve against the symlink's directory under symlink-preserving or copied-package layouts and fail. With
20
- * every runtime edge pointing only at `node:` builtins, there is nothing to fracture - the CLI runs identically whether reached directly, through a symlink, through
21
- * a `file:` dependency, or under `--preserve-symlinks`. The lone `import type` of the renderer's signatures is fully erased by the compiler and emits no runtime edge,
22
- * so it carries the SSOT types without reintroducing a load-time relative dependency; when `prepareDocs` actually needs the renderer it reaches it through a computed
23
- * dynamic import the dispatch site supplies, the same indirection the `hblog` bin uses.
24
- *
25
- * The module is simultaneously the executable (run via the bin) and a side-effect-free library surface (`prepareUi` / `prepareDocs` / `runCli` / `USAGE`) that the
26
- * test suite imports. The entry block at the bottom only executes when this module is the program entry point, detected by comparing canonicalized real paths - see
27
- * its comment for why a raw path comparison is insufficient.
28
- *
29
- * @module
30
- */
31
14
  import { cp, mkdir, readFile, readdir, rename, rm, stat, writeFile } from "node:fs/promises";
32
15
  import { dirname, join, relative, resolve, sep } from "node:path";
33
16
  import { fileURLToPath, pathToFileURL } from "node:url";
@@ -51,7 +34,8 @@ const HASH_LENGTH = 16;
51
34
  */
52
35
  export const USAGE = "Usage: homebridge-plugin-utils <command> [options]\n\n" +
53
36
  "Commands:\n prepare-ui <destination> Mirror HBPU's webUI into the plugin's lib directory.\n" +
54
- " prepare-docs <catalog-module> [--doc <path>] Generate the Feature Options reference into the plugin's docs.\n";
37
+ " prepare-docs <catalog-module> [--doc <path>] Generate the Feature Options reference into the plugin's docs.\n" +
38
+ " prepare-chrome <manifest> [--root <dir>] Stamp the doc-chrome regions (masthead, nav, badges, projects) across the plugin's docs, README, and webUI.\n";
55
39
  /**
56
40
  * Compute a deterministic content hash over `root`'s file tree. Walks every file in lexicographic order of relative POSIX path so two runs against the same content
57
41
  * produce the same hash regardless of underlying filesystem ordering or the absolute path the tree sits at. Mixes both the relative path and the file bytes into
@@ -102,12 +86,12 @@ async function computeContentHash(root) {
102
86
  * injects a trailing-slash importmap entry that prefixes every `./lib/` import with the hashed-versioned path. Transitive imports inherit the prefix through
103
87
  * relative-URL resolution, so cache-busting reaches files the importmap never names.
104
88
  *
105
- * The content hash is the load-bearing piece for the maintainer-iteration use case. A semver-only subdir name would stay constant across the maintainer's
89
+ * The content hash is what makes the maintainer-iteration use case work. A semver-only subdir name would stay constant across the maintainer's
106
90
  * edit/rebuild/test cycle (version doesn't bump on every save), and the browser would happily serve cached copies of the stale URLs. Hashing the tree means any
107
91
  * source change produces a different subdir name, which produces different URLs, which forces fresh fetches. Same code path serves the published-release case: a
108
92
  * release ships with a fixed hash, and every consumer fetching it sees the same URL space and caches aggressively within it.
109
93
  *
110
- * Operates idempotently. A re-run against unchanged source content produces the same subdir name + same contents + same manifest. Stale prior-build subdirs are
94
+ * Operates repeatably. A re-run against unchanged source content produces the same subdir name + same contents + same manifest. Stale prior-build subdirs are
111
95
  * removed in the same pass; non-version-shaped entries in the destination are left untouched so a plugin's own files (assets, sibling tooling, README copies)
112
96
  * survive across runs.
113
97
  *
@@ -152,7 +136,7 @@ export async function prepareUi({ dest, sourceRoot }) {
152
136
  const absDest = resolve(dest);
153
137
  await mkdir(absDest, { recursive: true });
154
138
  const versionedDest = join(absDest, subdir);
155
- // Idempotent reset of the versioned subdir. Wipe first so the copy step always starts from a known-empty target; the same-content idempotency property is upheld
139
+ // Repeatable reset of the versioned subdir. Wipe first so the copy step always starts from a known-empty target; the same-content stability is upheld
156
140
  // by the hash being a deterministic function of the source, so re-running with unchanged content produces the same subdir name + same contents + same manifest,
157
141
  // even though the implementation re-does the work. `force: true` swallows ENOENT so a first run against an empty destination doesn't surface the missing-target
158
142
  // as an error.
@@ -244,6 +228,185 @@ export async function prepareDocs({ catalogModulePath, docPath, render, splice }
244
228
  await writeFile(docPath + ".tmp", updated, "utf8");
245
229
  await rename(docPath + ".tmp", docPath);
246
230
  }
231
+ // The diagnostic thrown when the manifest's `projects` field is neither an inline array nor a { file } / { url } reference. Named so the two guard clauses in
232
+ // resolveProjects share one message rather than duplicating the string.
233
+ const PROJECTS_SOURCE_ERROR = "The manifest `projects` field must be an array, a { file } reference, or a { url } reference.";
234
+ // Parse JSON, re-throwing a parse failure as a framed error that names where the invalid JSON lives. Plain `JSON.parse` throws a bare `SyntaxError` with no source
235
+ // attribution; wrapping it keeps a malformed manifest or project list reporting the same "names the source" quality as the shape validators.
236
+ function parseJsonFramed(raw, describe) {
237
+ try {
238
+ return JSON.parse(raw);
239
+ }
240
+ catch (error) {
241
+ throw new Error(describe + " is not valid JSON: " + (error instanceof Error ? error.message : String(error)) + ".");
242
+ }
243
+ }
244
+ // Load a documentation-chrome manifest, dispatching on the path's extension: a `.json` file is read and parsed as data, while a `.js`/`.mjs` module is dynamically
245
+ // imported and its `docChrome` (or default) export taken. Both paths converge on one in-memory value the caller validates, so a plugin may author its manifest as a
246
+ // typed module or a static JSON file with no change to the mechanism. The dynamic import goes through a `file:` URL for the same portability reason `prepareDocs`
247
+ // converts the catalog path.
248
+ async function loadDocChromeManifest(manifestPath) {
249
+ if (manifestPath.endsWith(".json")) {
250
+ return parseJsonFramed(await readFile(manifestPath, "utf8"), "Doc-chrome manifest " + manifestPath);
251
+ }
252
+ const namespace = await import(__rewriteRelativeImportExtension(pathToFileURL(manifestPath).href));
253
+ return namespace.docChrome ?? namespace.default;
254
+ }
255
+ // Resolve the manifest's project source to an inline array of entries. The source may be omitted (no project region is stamped), an inline array, a local file relative
256
+ // to the plugin root, or a remote URL fetched at stamp time. The remote form is what lets a family-wide project list live in one external file that every plugin's build
257
+ // pulls from, keeping this library free of any plugin-specific data. The injected `parseEntries` validates the resolved entries and returns them typed, so every
258
+ // manifest-shape check stays the single responsibility of `docChrome.ts`.
259
+ async function resolveProjects(source, { fetchImpl, manifestPath, parseEntries, pluginRoot }) {
260
+ if (source === undefined) {
261
+ return undefined;
262
+ }
263
+ // An inline array is validated against the manifest path, since that is where it was authored.
264
+ if (Array.isArray(source)) {
265
+ return parseEntries(source, manifestPath);
266
+ }
267
+ if ((typeof source !== "object") || (source === null)) {
268
+ throw new Error(PROJECTS_SOURCE_ERROR);
269
+ }
270
+ // A remote reference is fetched at stamp time; a non-OK response is a framed error naming the URL and status. We read the body as text and parse it ourselves so a
271
+ // malformed remote list reports through the same framed-JSON path as a local one.
272
+ if (("url" in source) && (typeof source.url === "string")) {
273
+ const response = await fetchImpl(source.url);
274
+ if (!response.ok) {
275
+ throw new Error("Failed to fetch the project list from " + source.url + ": HTTP " + String(response.status) + ".");
276
+ }
277
+ return parseEntries(parseJsonFramed(await response.text(), "The project list fetched from " + source.url), source.url);
278
+ }
279
+ // A local-file reference is read relative to the plugin root and parsed as JSON.
280
+ if (("file" in source) && (typeof source.file === "string")) {
281
+ const filePath = resolve(pluginRoot, source.file);
282
+ return parseEntries(parseJsonFramed(await readFile(filePath, "utf8"), "The project list at " + filePath), filePath);
283
+ }
284
+ throw new Error(PROJECTS_SOURCE_ERROR);
285
+ }
286
+ /**
287
+ * Stamp a plugin's documentation-chrome regions - the masthead, the documentation index, the dashboard badges, and the project list - across its README, every content
288
+ * doc, and its webUI Support tab, from one per-plugin manifest. This is the multi-region, multi-file counterpart to {@link prepareDocs}: where that regenerates one
289
+ * feature-options region in one doc, this regenerates several named regions in many files, so a plugin's masthead and navigation cannot drift between the surfaces that
290
+ * repeat them.
291
+ *
292
+ * Pure-by-injection like {@link prepareDocs}: the `docChrome` renderers and validator arrive through the injected `chrome` namespace and the splice helper through
293
+ * `splice`, so this function is unit-testable against the real exports without a built `dist/`, and the CLI's single-file no-static-relative-import discipline is
294
+ * preserved. `fetchImpl` is injected (defaulting to the global `fetch`) so the remote project-source path is testable without network access.
295
+ *
296
+ * The manifest is loaded (a typed module or a static JSON file), validated with a field-naming diagnostic, and its optional project source resolved to inline data. The
297
+ * per-file edit plan is then built - the README carries the masthead, the documentation index, and the dashboard badges; each content doc carries the masthead (unless
298
+ * its entry opts out) and a self-omitting footer index; the webUI, when present, carries the documentation index and the project list. Every region is spliced against
299
+ * its own marker pair through the shared, ambiguity-rejecting splice primitive.
300
+ *
301
+ * The write is all-or-nothing across files in the realistic failure mode. Splicing happens entirely in memory first, so a missing or ambiguous marker in any file
302
+ * aborts the run before a single write. The writes then proceed in two phases - every file's new content is staged in a sibling `.tmp`, and only once all temps exist
303
+ * are they renamed over their targets - so a staging failure leaves every original untouched and each promotion is an atomic rename.
304
+ *
305
+ * @param args
306
+ * @param args.chrome - The injected `docChrome` module namespace (its renderers, marker constants, and validators).
307
+ * @param args.fetchImpl - The `fetch` implementation used to resolve a remote project source. Defaults to the global `fetch`; tests inject a fake.
308
+ * @param args.manifestPath - Absolute path to the plugin's manifest - a compiled module or a `.json` file.
309
+ * @param args.pluginRoot - Absolute path to the plugin root that the manifest's surface and file references resolve against.
310
+ * @param args.splice - The injected {@link spliceMarkedRegion} from `featureOptions-docs.ts`.
311
+ *
312
+ * @throws When the manifest is mis-shaped, when a resolved project source is malformed, when a target file cannot be read, or when any region's marker pair is absent or
313
+ * ambiguous - propagating the splice's own framed errors so the dispatch site frames them uniformly.
314
+ */
315
+ export async function prepareChrome({ chrome, fetchImpl = fetch, manifestPath, pluginRoot, splice }) {
316
+ const { DEV_BADGES_BEGIN, DEV_BADGES_END, DOCUMENTATION_BEGIN, DOCUMENTATION_END, MASTHEAD_BEGIN, MASTHEAD_END, PROJECTS_BEGIN, PROJECTS_END, parseDocChromeManifest, parseProjectEntries, renderDevBadges, renderDocIndex, renderMasthead, renderProjects } = chrome;
317
+ // Load and validate the manifest up front so a mis-shaped manifest fails with a diagnostic naming the offending field rather than a downstream render error. Parsing
318
+ // returns the same value typed as a validated manifest, so every field access below is type-checked.
319
+ const manifest = parseDocChromeManifest(await loadDocChromeManifest(manifestPath), manifestPath);
320
+ // Resolve the optional project source to inline data before rendering; the renderers never perform I/O.
321
+ const projects = await resolveProjects(manifest.projects, { fetchImpl, manifestPath, parseEntries: parseProjectEntries, pluginRoot });
322
+ // Build the per-file edit plan. Each target file collects the ordered marked-region splices that apply to it; a file may carry more than one region (the README
323
+ // carries three), each spliced independently against its own marker pair.
324
+ const plan = new Map();
325
+ const addRegion = (path, begin, end, content) => {
326
+ const edits = plan.get(path) ?? [];
327
+ edits.push({ begin, content, end });
328
+ plan.set(path, edits);
329
+ };
330
+ // The README: the masthead, the documentation index, and - when declared - the dashboard badges.
331
+ const readmePath = resolve(pluginRoot, manifest.surfaces?.readme ?? "README.md");
332
+ addRegion(readmePath, MASTHEAD_BEGIN, MASTHEAD_END, renderMasthead(manifest));
333
+ addRegion(readmePath, DOCUMENTATION_BEGIN, DOCUMENTATION_END, renderDocIndex({ manifest, surface: "readme" }));
334
+ if ((manifest.devBadges !== undefined) && (manifest.devBadges.length > 0)) {
335
+ addRegion(readmePath, DEV_BADGES_BEGIN, DEV_BADGES_END, renderDevBadges(manifest));
336
+ }
337
+ // Each content doc: the masthead (unless the entry opts out, as the changelog does) and a self-omitting footer index.
338
+ for (const section of manifest.nav) {
339
+ for (const entry of section.entries) {
340
+ if (entry.kind !== "doc") {
341
+ continue;
342
+ }
343
+ const docPath = resolve(pluginRoot, entry.file);
344
+ if (entry.masthead !== false) {
345
+ addRegion(docPath, MASTHEAD_BEGIN, MASTHEAD_END, renderMasthead(manifest));
346
+ }
347
+ addRegion(docPath, DOCUMENTATION_BEGIN, DOCUMENTATION_END, renderDocIndex({ currentFile: entry.file, manifest, surface: "doc-footer" }));
348
+ }
349
+ }
350
+ // The webUI Support tab is optional: a plugin without a custom config UI has no target to stamp, so we include its regions only when the file exists. The
351
+ // documentation index is always stamped there; the project list only when a source resolved.
352
+ const webuiPath = resolve(pluginRoot, manifest.surfaces?.webui ?? "homebridge-ui/public/index.html");
353
+ let webuiExists = true;
354
+ try {
355
+ await stat(webuiPath);
356
+ }
357
+ catch (error) {
358
+ // A missing webUI is expected for a plugin without a custom config UI; any other stat failure (a permissions error, say) is a genuine problem we must surface rather
359
+ // than silently treat as "no webUI".
360
+ if ((error instanceof Error) && ("code" in error) && (error.code === "ENOENT")) {
361
+ webuiExists = false;
362
+ }
363
+ else {
364
+ throw error;
365
+ }
366
+ }
367
+ if (webuiExists) {
368
+ addRegion(webuiPath, DOCUMENTATION_BEGIN, DOCUMENTATION_END, renderDocIndex({ manifest, surface: "webui" }));
369
+ if (projects !== undefined) {
370
+ addRegion(webuiPath, PROJECTS_BEGIN, PROJECTS_END, renderProjects(projects));
371
+ }
372
+ }
373
+ // Validate-all: read each target and splice every region in memory. Splicing validates each marker pair, so a missing, inverted, or duplicated marker anywhere aborts
374
+ // the whole run here - before any file is written - rather than leaving a partial stamp behind.
375
+ const staged = await Promise.all([...plan].map(async ([path, edits]) => {
376
+ let content;
377
+ try {
378
+ content = await readFile(path, "utf8");
379
+ }
380
+ catch {
381
+ throw new Error("Target file " + path + " could not be read; ensure it exists and carries the required markers.");
382
+ }
383
+ // Splice each region against its own marker pair; a malformed marker throws, rejecting the whole collection (per the validate-all note above).
384
+ for (const edit of edits) {
385
+ content = splice(content, edit.content, { beginMarker: edit.begin, endMarker: edit.end });
386
+ }
387
+ return { content, path };
388
+ }));
389
+ // Write-all in two phases for strong cross-file atomicity. Stage every file's new content in a sibling `.tmp` first; if any staging write fails, remove the temps
390
+ // already written and abort with every original untouched. Only once all temps exist do we rename them over their targets, so the promotion phase - a set of atomic
391
+ // renames - cannot leave a half-spliced file behind.
392
+ const tmpPaths = staged.map(({ path }) => path + ".tmp");
393
+ try {
394
+ await Promise.all(staged.map(({ content, path }) => writeFile(path + ".tmp", content, "utf8")));
395
+ }
396
+ catch (error) {
397
+ await Promise.all(tmpPaths.map((tmpPath) => rm(tmpPath, { force: true })));
398
+ throw error;
399
+ }
400
+ try {
401
+ await Promise.all(staged.map(({ path }) => rename(path + ".tmp", path)));
402
+ }
403
+ catch (error) {
404
+ // A rename-phase failure is rare - every temp staged successfully - but it can leave some targets promoted and others not. Best-effort remove any temp that survives
405
+ // so a failed run does not litter the tree; the already-promoted targets are left as they are, since their content is the intended new content.
406
+ await Promise.all(tmpPaths.map((tmpPath) => rm(tmpPath, { force: true })));
407
+ throw error;
408
+ }
409
+ }
247
410
  /**
248
411
  * Run the CLI against a synthetic argv vector. Returns the process exit code that the entry block propagates. Pure-by-injection: takes its `cwd`, `stderr`, and
249
412
  * `sourceRoot` as arguments rather than reading them from globals, so tests exercise the full dispatch path against a captured stderr, a tmpdir source root, and a
@@ -261,7 +424,7 @@ export async function runCli({ argv, cwd, sourceRoot, stderr }) {
261
424
  // parseArgs runs in strict mode, so an unrecognized flag (e.g. a typo'd `--docs`) throws `ERR_PARSE_ARGS_UNKNOWN_OPTION` here rather than falling through to the
262
425
  // usage banner. That throw is intentionally uncaught - the per-case try/catch blocks below wrap only the subcommand work - so it surfaces as a rejected `runCli`
263
426
  // promise at the entry point, distinct from the default case's banner handling for an unknown positional command.
264
- const { positionals, values } = parseArgs({ allowPositionals: true, args: [...argv], options: { doc: { type: "string" } }, strict: true });
427
+ const { positionals, values } = parseArgs({ allowPositionals: true, args: [...argv], options: { doc: { type: "string" }, root: { type: "string" } }, strict: true });
265
428
  const [command, ...rest] = positionals;
266
429
  switch (command) {
267
430
  case "prepare-ui": {
@@ -310,6 +473,39 @@ export async function runCli({ argv, cwd, sourceRoot, stderr }) {
310
473
  }
311
474
  return 0;
312
475
  }
476
+ case "prepare-chrome": {
477
+ const [manifestArg] = rest;
478
+ if (!manifestArg) {
479
+ stderr.write("homebridge-plugin-utils prepare-chrome: missing required manifest argument.\n");
480
+ return 1;
481
+ }
482
+ // Resolve the manifest path and the plugin root that the manifest's surface and file references resolve against. The root defaults to the working directory.
483
+ const manifestPath = resolve(cwd, manifestArg);
484
+ const pluginRoot = resolve(cwd, values.root ?? ".");
485
+ // Reach HBPU's own doc-chrome renderers and the splice primitive through computed dynamic imports of their compiled modules - never static relative imports - so
486
+ // the single-file bin stays symlink-safe. A failed import means HBPU itself has not been built, a distinct and actionable condition from a downstream failure.
487
+ const chromePath = join(sourceRoot, "dist", "docChrome.js");
488
+ const splicePath = join(sourceRoot, "dist", "featureOptions-docs.js");
489
+ let chrome;
490
+ let splicer;
491
+ try {
492
+ chrome = await import(__rewriteRelativeImportExtension(pathToFileURL(chromePath).href));
493
+ splicer = await import(__rewriteRelativeImportExtension(pathToFileURL(splicePath).href));
494
+ }
495
+ catch {
496
+ stderr.write("homebridge-plugin-utils prepare-chrome: HBPU has not been built: " + chromePath + " or " + splicePath + " is missing. Run `npm run build` in " +
497
+ "HBPU first.\n");
498
+ return 1;
499
+ }
500
+ try {
501
+ await prepareChrome({ chrome, manifestPath, pluginRoot, splice: splicer.spliceMarkedRegion });
502
+ }
503
+ catch (error) {
504
+ stderr.write("homebridge-plugin-utils prepare-chrome: " + (error instanceof Error ? error.message : String(error)) + "\n");
505
+ return 1;
506
+ }
507
+ return 0;
508
+ }
313
509
  default: {
314
510
  stderr.write(USAGE);
315
511
  // A bare `homebridge-plugin-utils` invocation (no command at all) is treated as a help request and exits 0; an unknown command is a misuse and exits 1. Both
@@ -322,11 +518,11 @@ export async function runCli({ argv, cwd, sourceRoot, stderr }) {
322
518
  * Decide whether this module is the program entry point (run as the bin) versus imported as a library (by the test suite). Canonicalizes the real path of both the
323
519
  * launch path (`process.argv[1]`) and this module's own URL before comparing them.
324
520
  *
325
- * The realpath normalization is the load-bearing detail. npm exposes a bin as a symlink in `node_modules/.bin`, so under default Node the launch path is the
521
+ * The realpath normalization is the detail that matters. npm exposes a bin as a symlink in `node_modules/.bin`, so under default Node the launch path is the
326
522
  * symlink while `import.meta.url` is the resolved target - a raw string comparison never matches and the CLI silently does nothing. Canonicalizing both sides
327
523
  * collapses that indirection (and any `file:`-dependency, copied-package, or `--preserve-symlinks` layout) to a single real path, so the check holds however the
328
524
  * launcher reached this file. We keep this explicit realpath comparison rather than deferring to `import.meta.main`: the symlink and copied-package indirection is the
329
- * load-bearing concern the entry-point check exists to handle, and resolving it explicitly keeps that handling visible at the call site.
525
+ * concern the entry-point check exists to handle, and resolving it explicitly keeps that handling visible at the call site.
330
526
  *
331
527
  * @returns `true` when invoked as the program entry, `false` when imported or when the launch path cannot be resolved.
332
528
  */
@@ -344,7 +540,7 @@ function isEntryPoint() {
344
540
  }
345
541
  }
346
542
  // Execute the CLI when this module is the program entry point. When imported by the test suite instead, `isEntryPoint()` is false and the module exposes
347
- // `prepareUi` / `prepareDocs` / `runCli` / `USAGE` as a side-effect-free library surface.
543
+ // `prepareUi` / `prepareDocs` / `prepareChrome` / `runCli` / `USAGE` as a side-effect-free library surface.
348
544
  if (isEntryPoint()) {
349
545
  // Resolve HBPU's package root from this file's real location. The compiled CLI sits at `dist/cli/index.js`; walking two segments up from its real directory
350
546
  // reaches the package root regardless of how the package is installed (a plugin's `node_modules`, a workspace symlink, a global install) or which Node
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import { onAbort } from "./util.js";
7
7
  * Construct the rejection a {@link TestClock} `delay` produces when its signal aborts, matching `node:timers/promises` `setTimeout` exactly: a plain `Error` whose `name`
8
8
  * is `"AbortError"` and whose `code` is the STRING `"ABORT_ERR"`. The real primitive's rejection is a dedicated internal class (not a `DOMException`, whose `code` is the
9
9
  * numeric `20`, and there is no constructable `AbortError` global), so the double cannot match the constructor or prototype identity - it matches the observable `name`
10
- * and `code` a consumer discriminates on, which is the contract that matters.
10
+ * and `code` a consumer branches on, which is the contract that matters.
11
11
  *
12
12
  * @returns The `AbortError`-shaped rejection.
13
13
  */
@@ -129,7 +129,7 @@ export class TestClock {
129
129
  get pending() {
130
130
  return this.#pending.length;
131
131
  }
132
- // Remove `entry` from `#pending` by identity. Idempotent: a guarded `indexOf` + `splice` makes a second removal (e.g. an abort that races a resolve) a safe no-op and
132
+ // Remove `entry` from `#pending` by identity. A guarded `indexOf` + `splice` makes a second removal (e.g. an abort that races a resolve) a safe no-op and
133
133
  // never removes the wrong entry, so `#pending` stays consistent across any resolve-and-abort interleaving.
134
134
  #remove(entry) {
135
135
  const index = this.#pending.indexOf(entry);
@@ -1 +1 @@
1
- {"version":3,"file":"clock-double.js","sourceRoot":"","sources":["../src/clock-double.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC;;;;;;;GAOG;AACH,SAAS,UAAU;IAEjB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAErD,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;IAE1B,+JAA+J;IAC/J,2GAA2G;IAC1G,KAAkC,CAAC,IAAI,GAAG,WAAW,CAAC;IAEvD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,OAAO,SAAS;IAEpB,mFAAmF;IACnF,IAAI,CAAS;IAEb,8JAA8J;IAC9J,oHAAoH;IAC3G,QAAQ,GAAiB,EAAE,CAAC;IAErC;;;;OAIG;IACH,YAAmB,KAAK,GAAG,CAAC;QAE1B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;IACpB,CAAC;IAED;;;;;;;;;;OAUG;IACI,OAAO,CAAC,EAAU;QAEvB,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAEhB,qKAAqK;QACrK,gKAAgK;QAChK,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAEjH,KAAI,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;YAEvB,oKAAoK;YACpK,gGAAgG;YAChG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACI,KAAK,CAAC,EAAU,EAAE,IAA+B;QAEtD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAA+B,OAAO,CAAC,aAAa,EAAE,CAAC;QACzF,MAAM,KAAK,GAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC;QAEhE,gKAAgK;QAChK,qKAAqK;QACrK,6IAA6I;QAC7I,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAG,IAAI,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;YAE9B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;gBAExC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACI,GAAG;QAER,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH,IAAW,OAAO;QAEhB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,sKAAsK;IACtK,2GAA2G;IAC3G,OAAO,CAAC,KAAiB;QAEvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE3C,IAAG,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YAEhB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"clock-double.js","sourceRoot":"","sources":["../src/clock-double.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC;;;;;;;GAOG;AACH,SAAS,UAAU;IAEjB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAErD,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;IAE1B,+JAA+J;IAC/J,2GAA2G;IAC1G,KAAkC,CAAC,IAAI,GAAG,WAAW,CAAC;IAEvD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,OAAO,SAAS;IAEpB,mFAAmF;IACnF,IAAI,CAAS;IAEb,8JAA8J;IAC9J,oHAAoH;IAC3G,QAAQ,GAAiB,EAAE,CAAC;IAErC;;;;OAIG;IACH,YAAmB,KAAK,GAAG,CAAC;QAE1B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;IACpB,CAAC;IAED;;;;;;;;;;OAUG;IACI,OAAO,CAAC,EAAU;QAEvB,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAEhB,qKAAqK;QACrK,gKAAgK;QAChK,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAEjH,KAAI,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;YAEvB,oKAAoK;YACpK,gGAAgG;YAChG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACI,KAAK,CAAC,EAAU,EAAE,IAA+B;QAEtD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAA+B,OAAO,CAAC,aAAa,EAAE,CAAC;QACzF,MAAM,KAAK,GAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC;QAEhE,gKAAgK;QAChK,qKAAqK;QACrK,6IAA6I;QAC7I,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAG,IAAI,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;YAE9B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;gBAExC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACI,GAAG;QAER,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH,IAAW,OAAO;QAEhB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,0JAA0J;IAC1J,2GAA2G;IAC3G,OAAO,CAAC,KAAiB;QAEvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE3C,IAAG,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YAEhB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;CACF"}