@mailwoman/map-tui 9.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.
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @copyright Sister Software.
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+ /**
7
+ * PMTiles archive reader for map-tui.
8
+ *
9
+ * TileSource wraps a local `.pmtiles` file (node:fs/promises FileHandle) behind the pmtiles `Source` interface, decodes
10
+ * each requested tile's MVT payload via ./mvt.ts, and keeps a small LRU cache of decoded tiles so repeated draws of the
11
+ * same viewport don't re-decode.
12
+ */
13
+ import { open } from "node:fs/promises";
14
+ import { PMTiles } from "pmtiles";
15
+ import { decodeMVT } from "./mvt.js";
16
+ class FilePMTilesSource {
17
+ path;
18
+ handle;
19
+ constructor(path, handle) {
20
+ this.path = path;
21
+ this.handle = handle;
22
+ }
23
+ getKey() {
24
+ return this.path;
25
+ }
26
+ async getBytes(offset, length) {
27
+ const buffer = Buffer.alloc(length);
28
+ const { bytesRead } = await this.handle.read(buffer, 0, length, offset);
29
+ return { data: buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + bytesRead) };
30
+ }
31
+ }
32
+ const TILE_CACHE_LIMIT = 64;
33
+ export class TileSource {
34
+ minZoom;
35
+ maxZoom;
36
+ /**
37
+ * Plain-text attribution from archive metadata (HTML tags stripped); empty string when absent.
38
+ */
39
+ attribution;
40
+ handle;
41
+ pmtiles;
42
+ cache = new Map();
43
+ constructor(handle, pmtiles, minZoom, maxZoom, attribution) {
44
+ this.handle = handle;
45
+ this.pmtiles = pmtiles;
46
+ this.minZoom = minZoom;
47
+ this.maxZoom = maxZoom;
48
+ this.attribution = attribution;
49
+ }
50
+ static async open(path) {
51
+ const handle = await open(path, "r");
52
+ const pmtiles = new PMTiles(new FilePMTilesSource(path, handle));
53
+ const [header, metadata] = await Promise.all([pmtiles.getHeader(), pmtiles.getMetadata()]);
54
+ const attribution = typeof metadata === "object" &&
55
+ metadata !== null &&
56
+ "attribution" in metadata &&
57
+ typeof metadata.attribution === "string"
58
+ ? metadata.attribution.replaceAll(/<[^>]+>/gu, "").trim()
59
+ : "";
60
+ return new TileSource(handle, pmtiles, header.minZoom, header.maxZoom, attribution);
61
+ }
62
+ /**
63
+ * Decoded tile, LRU-cached (64 entries). null = tile absent from the archive.
64
+ */
65
+ async getTile(z, x, y) {
66
+ const key = `${z}/${x}/${y}`;
67
+ const cached = this.cache.get(key);
68
+ if (cached != null) {
69
+ // Refresh recency by re-inserting at the end of iteration order.
70
+ this.cache.delete(key);
71
+ this.cache.set(key, cached);
72
+ return cached.tile;
73
+ }
74
+ const response = await this.pmtiles.getZxy(z, x, y);
75
+ const tile = response != null ? { layers: decodeMVT(new Uint8Array(response.data)) } : null;
76
+ this.cache.set(key, { tile });
77
+ if (this.cache.size > TILE_CACHE_LIMIT) {
78
+ const oldestKey = this.cache.keys().next().value;
79
+ if (typeof oldestKey === "string") {
80
+ this.cache.delete(oldestKey);
81
+ }
82
+ }
83
+ return tile;
84
+ }
85
+ async close() {
86
+ await this.handle.close();
87
+ }
88
+ }
89
+ //# sourceMappingURL=tile-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-source.js","sourceRoot":"","sources":["../tile-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"root":["../frame.test.ts","../mercator.test.ts","../raster.test.ts","../renderer.test.ts","../style.test.ts","../tile-source.test.ts"],"version":"6.0.3"}
@@ -0,0 +1 @@
1
+ {"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.es2025.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.es2025.collection.d.ts","../../node_modules/typescript/lib/lib.es2025.float16.d.ts","../../node_modules/typescript/lib/lib.es2025.intl.d.ts","../../node_modules/typescript/lib/lib.es2025.iterator.d.ts","../../node_modules/typescript/lib/lib.es2025.promise.d.ts","../../node_modules/typescript/lib/lib.es2025.regexp.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.date.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.error.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.esnext.temporal.d.ts","../../node_modules/typescript/lib/lib.esnext.typedarrays.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/@sister.software/asciify/out/tui/ansi.d.ts","../../node_modules/@sister.software/asciify/out/utils/LuminanceCharacterMap.d.ts","../../node_modules/@sister.software/asciify/out/tui/common.d.ts","../../node_modules/@sister.software/asciify/out/tui/AsciifyTerminal.d.ts","../../node_modules/@sister.software/asciify/out/tui/braille.d.ts","../../node_modules/@sister.software/asciify/out/tui/index.d.ts","../style.ts","../raster.ts","../frame.ts","../mercator.ts","../../node_modules/@mapbox/point-geometry/index.d.ts","../../node_modules/@types/geojson/index.d.ts","../../node_modules/@mapbox/vector-tile/node_modules/pbf/index.d.ts","../../node_modules/@mapbox/vector-tile/index.d.ts","../../node_modules/pbf/index.d.ts","../mvt.ts","../../node_modules/pmtiles/dist/esm/index.d.ts","../tile-source.ts","../renderer.ts","../index.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/@types/node/web-globals/blob.d.ts","../../node_modules/@types/node/web-globals/console.d.ts","../../node_modules/@types/node/web-globals/crypto.d.ts","../../node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/@types/node/web-globals/encoding.d.ts","../../node_modules/@types/node/web-globals/events.d.ts","../../node_modules/undici-types/utility.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client-stats.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/round-robin-pool.d.ts","../../node_modules/undici-types/h2c-client.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/dispatcher1-wrapper.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-call-history.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/snapshot-agent.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/socks5-proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/cache-interceptor.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/@types/node/web-globals/importmeta.d.ts","../../node_modules/@types/node/web-globals/messaging.d.ts","../../node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/@types/node/web-globals/performance.d.ts","../../node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/@types/node/web-globals/streams.d.ts","../../node_modules/@types/node/web-globals/timers.d.ts","../../node_modules/@types/node/web-globals/url.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/ffi.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/inspector.generated.d.ts","../../node_modules/@types/node/inspector/promises.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/buffer/index.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/path/posix.d.ts","../../node_modules/@types/node/path/win32.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/quic.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/sqlite.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/iter.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/test/reporters.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/util/types.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/zlib/iter.d.ts","../../node_modules/@types/node/index.d.ts"],"fileIdsList":[[93,94,95,109,174,182,187,190,192,193,194,207],[94,95,96,97,103,105,106,109,174,182,187,190,192,193,194,207],[109,174,182,187,190,192,193,194,207],[101,102,109,174,182,187,190,192,193,194,207],[94,109,174,182,187,190,192,193,194,207],[94,95,96,97,103,105,109,174,182,187,190,192,193,194,207],[103,104,109,174,182,187,188,190,192,193,194,207],[98,99,100,109,174,182,187,190,192,193,194,207],[89,90,109,174,182,187,190,192,193,194,207],[88,90,91,92,109,174,182,187,190,192,193,194,207],[109,171,172,174,182,187,190,192,193,194,207],[109,173,174,182,187,190,192,193,194,207],[174,182,187,190,192,193,194,207],[109,174,182,187,190,192,193,194,207,216],[109,174,175,180,182,185,187,190,192,193,194,196,207,212,225],[109,174,175,176,182,185,187,190,192,193,194,207],[109,174,177,182,187,190,192,193,194,207,226],[109,174,178,179,182,187,190,192,193,194,198,207],[109,174,179,182,187,190,192,193,194,207,212,222],[109,174,180,182,185,187,190,192,193,194,196,207],[109,173,174,181,182,187,190,192,193,194,207],[109,174,182,183,187,190,192,193,194,207],[109,174,182,184,185,187,190,192,193,194,207],[109,173,174,182,185,187,190,192,193,194,207],[109,174,182,185,187,188,190,192,193,194,207,212,225],[109,174,182,185,187,188,190,192,193,194,207,212,214,216],[109,161,174,182,185,187,189,190,192,193,194,196,207,212,225],[109,174,182,185,187,189,190,192,193,194,196,207,212,222,225],[109,174,182,187,189,190,191,192,193,194,207,212,222,225],[108,109,110,111,112,113,114,115,116,117,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233],[109,174,182,185,187,190,192,193,194,207],[109,174,182,187,190,192,194,207],[109,174,182,187,190,192,193,194,195,207,225],[109,174,182,185,187,190,192,193,194,196,207,212],[109,174,182,187,190,192,193,194,198,207],[109,174,182,187,190,192,193,194,199,207],[109,174,182,185,187,190,192,193,194,202,207],[109,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232],[109,174,182,187,190,192,193,194,204,207],[109,174,182,187,190,192,193,194,205,207],[109,174,179,182,187,190,192,193,194,196,207,216],[109,174,182,185,187,190,192,193,194,207,208],[109,174,182,187,190,192,193,194,207,209,226,229],[109,174,182,185,187,190,192,193,194,207,212,214,215,216],[109,174,182,187,190,192,193,194,207,213,216],[109,174,182,185,187,190,192,193,194,207,212,214],[109,174,182,185,187,190,192,193,194,207,212,215,216],[109,174,182,187,190,192,193,194,207,216,226],[109,174,182,187,190,192,193,194,207,217],[109,171,174,182,187,190,192,193,194,207,212,219,225],[109,174,182,187,190,192,193,194,207,212,218],[109,174,182,185,187,190,192,193,194,207,220,221],[109,174,182,187,190,192,193,194,207,220,221],[109,174,179,182,187,190,192,193,194,196,207,212,222],[109,174,182,187,190,192,193,194,207,223],[109,174,182,187,190,192,193,194,196,207,224],[109,174,182,187,189,190,192,193,194,205,207,225],[109,174,182,187,190,192,193,194,207,226,227],[109,174,179,182,187,190,192,193,194,207,227],[109,174,182,187,190,192,193,194,207,212,228],[109,174,182,187,190,192,193,194,195,207,229],[109,174,182,187,190,192,193,194,207,230],[109,174,177,182,187,190,192,193,194,207],[109,174,179,182,187,190,192,193,194,207],[109,174,182,187,190,192,193,194,207,226],[109,161,174,182,187,190,192,193,194,207],[109,174,182,187,190,192,193,194,207,225],[109,174,182,187,190,192,193,194,207,231],[109,174,182,187,190,192,193,194,202,207],[109,174,182,187,190,192,193,194,207,221],[109,161,174,182,185,187,188,190,192,193,194,202,207,212,216,225,228,229,231],[109,174,182,187,190,192,193,194,207,212,232],[109,174,182,187,190,192,193,194,207,214,233],[109,124,127,130,131,174,182,187,190,192,193,194,207,225],[109,127,174,182,187,190,192,193,194,207,212,225],[109,127,131,174,182,187,190,192,193,194,207,225],[109,174,182,187,190,192,193,194,207,212],[109,121,174,182,187,190,192,193,194,207],[109,125,174,182,187,190,192,193,194,207],[109,123,124,127,174,182,187,190,192,193,194,207,225],[109,174,182,187,190,192,193,194,196,207,222],[109,174,182,187,190,192,193,194,207,234],[109,121,174,182,187,190,192,193,194,207,234],[109,123,127,174,182,187,190,192,193,194,196,207,225],[109,118,119,120,122,126,174,182,185,187,190,192,193,194,207,212,225],[109,127,174,182,187,190,192,193,194,207],[109,127,136,145,174,182,187,190,192,193,194,207],[109,119,125,174,182,187,190,192,193,194,207],[109,127,155,156,174,182,187,190,192,193,194,207],[109,119,122,127,174,182,187,190,192,193,194,207,216,225,234],[109,123,127,174,182,187,190,192,193,194,207,225],[109,118,174,182,187,190,192,193,194,207],[109,121,122,123,125,126,127,128,129,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,156,157,158,159,160,174,182,187,190,192,193,194,207],[109,127,148,151,174,182,187,190,192,193,194,207],[109,127,136,138,139,174,182,187,190,192,193,194,207],[109,125,127,138,140,174,182,187,190,192,193,194,207],[109,126,174,182,187,190,192,193,194,207],[109,119,121,127,174,182,187,190,192,193,194,207],[109,127,131,138,140,174,182,187,190,192,193,194,207],[109,131,174,182,187,190,192,193,194,207],[109,125,127,130,174,182,187,190,192,193,194,207,225],[109,119,123,127,136,174,182,187,190,192,193,194,207],[109,127,148,174,182,187,190,192,193,194,207],[109,140,174,182,187,190,192,193,194,207],[109,119,123,127,131,174,182,187,190,192,193,194,207],[109,121,127,155,174,182,187,190,192,193,194,207,216,231,234]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"999ca32883495a866aa5737fe1babc764a469e4cde6ee6b136a4b9ae68853e4b","impliedFormat":1},{"version":"17f13ecb98cbc39243f2eee1f16d45cd8ec4706b03ee314f1915f1a8b42f6984","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"30d62269b05b584741f19a5369852d5d34895aa2ac4fd948956f886d15f9cc0d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ffbe6d7b295306b2ba88030f65b74c107d8d99bdcf596ea99c62a02f606108b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"996fb27b15277369c68a4ba46ed138b4e9e839a02fb4ec756f7997629242fd9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"79b712591b270d4778c89706ca2cfc56ddb8c3f895840e477388f1710dc5eda9","affectsGlobalScope":true,"impliedFormat":1},{"version":"20884846cef428b992b9bd032e70a4ef88e349263f63aeddf04dda837a7dba26","affectsGlobalScope":true,"impliedFormat":1},{"version":"5fcab789c73a97cd43828ee3cc94a61264cf24d4c44472ce64ced0e0f148bdb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"db59a81f070c1880ad645b2c0275022baa6a0c4f0acdc58d29d349c6efcf0903","affectsGlobalScope":true,"impliedFormat":1},{"version":"673294292640f5722b700e7d814e17aaf7d93f83a48a2c9b38f33cbc940ad8b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d786b48f934cbca483b3c6d0a798cb43bbb4ada283e76fb22c28e53ae05b9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"142efd4ce210576f777dc34df121777be89eda476942d6d6663b03dcb53be3ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"379bc41580c2d774f82e828c70308f24a005b490c25ba34d679d84bcf05c3d9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed484fb2aa8a1a23d0277056ec3336e0a0b52f9b8d6a961f338a642faf43235d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ffedae1d1c2d53fdbca1c96d3c7dda544281f7d262f99b6880634f8fd8d9820","affectsGlobalScope":true,"impliedFormat":1},{"version":"83a730b125d477dd264df8ba479afab27a3dae7152b005c214ab94dc7ee44fd3","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"1701fb2bbc97eb4730f90be86883667dc2f8dabe3bd18baa5359e32f0efb535f","impliedFormat":99},{"version":"b1aece8721a02e1f6379357c7105df17982b359134280423e174fad2f0144594","impliedFormat":99},{"version":"4d6d7b4e78491a962c7949ce3f8d1432b17a959afa5c2d9eb0512180841133fd","impliedFormat":99},{"version":"49d3b23a17cd1acff369f8d422973e17ed1331c5e192971696cf1d1c86e377eb","impliedFormat":99},{"version":"1feade9471708e6ac55011e7badc9ea908fdac3f8c38a94ebd1832c4d721b782","impliedFormat":99},{"version":"dd1fafc7d239bc44a9e7482b1f73f6230a131a55afe5ce12440fd886b4b9c49d","impliedFormat":99},{"version":"fa7f1771af65e385438f4191c0073fde4f076c4b33f3530c2821f45da5eb7654","signature":"7c35560d3fc87c021c51cc71eb160e5b641d555b5955daec155f31fa814209aa","impliedFormat":99},{"version":"ab83fe1501f7a717e41ca6179cdd1fe4c534e11620174020f17c38c915ea94b3","signature":"0313087ac6f629419bc1e03a180a729be366cbf03649562282e60125451e1887","impliedFormat":99},{"version":"8450a69139d35f16d18330b9798a5f7b3d3e578c6bc623cdadd4e990e56f57f6","signature":"9908194ed39560f97c35b995069954c2da777832dcbb2db9d144354c5d17eba1","impliedFormat":99},{"version":"90bf54670e5ab55a266dc5f7f76a156b9a6f9311f67dd05c6bc306c6106e3edf","signature":"9e97e08331e989e26d783c0e658720761baa39e02c6f92647fc370f07e551510","impliedFormat":99},{"version":"59ffd1f821bf240bbd89c9a10fa2fdaec9716bc292e847864efb7ccecd976d5c","impliedFormat":99},{"version":"d30e67059f5c545c5f8f0cc328a36d2e03b8c4a091b4301bc1d6afb2b1491a3a","impliedFormat":1},{"version":"ca67172160fc1901e8c0b3e9f3f0d7e8d3ab9ec36b774fb3bcbe078086a841e3","impliedFormat":99},{"version":"e48b7cf05ce11136a79ff9b580fc0d17133b566ed1c00c36340edf7b4af698d5","impliedFormat":99},{"version":"b0de63f5dfd4c054ddcdc4e535fa4575addb1fb0ec0d4a9156d16e85679cad21","impliedFormat":99},{"version":"e581f3de56b3ab3a97600b9a19cd95843472c31276f5dcc0ce43aa0dc9e13afc","signature":"09afda6251a7ce0b0f0fcbae5b128026a1bf1f61fab45595f730031fa43a27d6","impliedFormat":99},{"version":"86e03887409461f7ca063e560c7f32908a0dca0a5f906e5456928c464e093219","impliedFormat":99},{"version":"27b4ce29b0657ea4659b1ce9e2d17d90a7861b3c4b913a8fe1a0231fad550574","signature":"be76156b5d845a9ddd2a67354e88819aed2c6b387c65bdb9996959881bedf64d","impliedFormat":99},{"version":"308a4d7e1c866ffcdffc534d3ee7ce07d85a3c76a33035ea012784b0b38f9d55","signature":"e07b8c3a26dba897a8e7af55c4d7805b34b9ebc629ea93c767faf0f364a12565","impliedFormat":99},{"version":"ec1dc62cd749948d321ba2d04d359a65f2406e572f4643c49aa56ecde739b5e2","signature":"e191749c8fd539eedd4c9a9d7cbfe92a6f10a6163c6a1ebdccfdb08d6df54640","impliedFormat":99},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"f53a7652392cf26ebbe4e29fd0672aa87c93bd6d0241289c13fab87b9ac35c8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"b00a630557d1622ad312633bdbfbdb9c6b7220d948dca9f899db30679f160074","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"88809d6c1b9c78d04a133646a6feb926def05a8774c308c7c93bc32ee163d271","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"3ac40516c33b87f751f7507346933081a26cdb8a3e11a6b3aa07d23f803c85db","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"14e9acf826baba0ef4b5665704084896e7bcc06f65a9ab13af7e93d27d6b7069","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"829bc57ee8f287b490ab5bbc5a962fca57e432c1e38ec680ecd3ecaf12800613","impliedFormat":1},{"version":"eec76bf6b9346f3f95fa402621b889489e96930e72295b0369022f332e9b4a6a","impliedFormat":1},{"version":"3a3ff14da53d5013f3e6d8c4ad55225e3649c08786c4421ce639c00d8d589b7d","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"38004e6801340cb890afb8cb5a9fc8972297e7f88ab94026e4b0b3c61fb32f8a","impliedFormat":1},{"version":"d243db6b25788f439e7e2f03c05688e92f46764351673bb0e7b2f3631232e186","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"149f9a9e7f04e67afa0e2a49fc0ff421035c01d6b793cfcae7d2e9f6819431e2","impliedFormat":1},{"version":"e8a9dfa4c75ef6d25df8b40eaa9c31e0a69452aaf2ced4a3f4215dbdbaa876f4","impliedFormat":1},{"version":"a70af845a2eb9dd6e2723e319e14ea7fb28b129ec1361c21509b49305448c323","impliedFormat":1},{"version":"b53dc572d4f187904207ae1166652de47aab8eeb00c254d009cb226863076b56","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"f501234c5aeeeb5d7659412335227466aaacf30b952372d60afeb21c02c96348","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"9ac977503f15bf13ca7c82ad9a32a782f42d43e474824e8b3bffe228fd5f2639","impliedFormat":1},{"version":"8b91ff5bb912be3ea213cbcf0075aace1f5d4ff249a0d227ed673868cb7bfabc","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"7cb4f431a4591b0e23002bed805dc871a874dfed6b9a3994dce68a6df73e6739","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"436d7b4543b340b0f3eef4310d524242e41369b9652aa9c70428767c4dcac455","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"e99963ae1e3a48ca7a7958c02f3e88bb963eb7978c28b68ae6b8c9f03309d83c","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"594ae90cacd813fa392ff80d2e0a8eff4e41f4a136329a940e321399dd8895b4","impliedFormat":1},{"version":"d1f333ade8ff35a409b4984e1f11956fe11c61855b0c7e9b59f0313e48b40c4a","impliedFormat":1},{"version":"0224aa4b3464895d69c413a640a19ac2166778a74eb5eb3b36b021c72d42b274","impliedFormat":1},{"version":"2e6fca0024dd8a076a886d9ec031a936ea59ad878a25b944820495d92f8381dd","affectsGlobalScope":true,"impliedFormat":1},{"version":"177459cba484e2f1e08872a3d2fdbca3162d9d43ca5ec9dc0c946835b55f74be","impliedFormat":1},{"version":"2fbf504c4791f9d32cd766cfe6b605bcda63289b925401953a7900db9af85348","impliedFormat":1},{"version":"ed0fb633cae35948d9e144004299a4bdf1ab912667c787b7fbffcd6d8c7b92a2","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"010eccc3ce4a7ea2e546f6e58cf18c891a50fd3e2a3089f07b3b844230d19a12","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"98fc7231d6c846a8ed19bdef026ddffe5e2182cc818be74899287421ad370a87","impliedFormat":1},{"version":"3a40b5d34e014017539acb92f04cf2bc0aa71e49efb33c66039df93be97842a1","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"8c7e618c2a91ea7f6b5cca272a295864e92c16413be8fc56a943e8c7d5320011","affectsGlobalScope":true,"impliedFormat":1},{"version":"79a85c64bf083c5f4dd7074e804d1000c0c47301b84d48417a224decd681be30","impliedFormat":1},{"version":"9f1e3a76d5f509b5579e567de522b402cb79e201c4f47dcd014451c0580b290d","impliedFormat":1},{"version":"4f1fd541f720030367b5d7ebfea7ae5f9edc8481422993b9a363f459c5412437","impliedFormat":1},{"version":"70f3f8b2dcaf7388f26731a59c79437813e3620b594903525a303cb2a7901016","impliedFormat":1},{"version":"62e8f884c3bc6dff6189b6e662ebe8b238a645938f2df7a97b8a82fca56773a4","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"57a0d1b3d59063d4af2d3f8aac27cfe3c20a0f5d1faf0f8598ccf0b779637939","impliedFormat":1},{"version":"5ff4433a2deae4f85ab1377e90a7554ce6b47ae51c69a84ca30a6e22fae85834","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"97234c5303866576f913d0ccae7d58d6322d9e803c7bf1228a3fda46ab8087b2","affectsGlobalScope":true,"impliedFormat":1},{"version":"93ecf87143cac7b9d05cffc1d6bdc075b7e4fdd48ff05f1fad85043f6ae678d3","impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"6f200afcb82b3e9a54bed6db23f2edf2508cd266801257312c0f124b47f2bdb9","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"39338f84e8c4d0e3de7b3c4a7024fb3925f42100eed5cbe73be58902799dff4d","impliedFormat":1},{"version":"fbf83eb33bf5e329527add92acc65da59323876c702ddccf5f4bf1e848c92369","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"515318bc6e656f75e9e34db625316bfafbafd800dfb1642574af93735a24ad38","impliedFormat":1},{"version":"441b9bb09013654aa3d050e68b06464d8959b473e85868249d9d18f692acd35b","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"55246f15e33ff1e2e9e679b25fa9790a48db55dc63d567fe25fac8b6a0efe911","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"03b7804d69cecd66850abada858ed6d4a59001f8c228a9fe212306ee860a4ff6","impliedFormat":1},{"version":"5b26c4dd672d88336bb929787c9bfb55119e80ba89ec6dc923da1c063892843e","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"987fd1f85dc36f4b2c927aa3db814ac6b452e970f4f55d24ed4ecbb7df09be00","impliedFormat":1},{"version":"f12624a4a8d042b68914eac1b0a16571fc1c523173fcdf2517c65d191bd5a86c","impliedFormat":1},{"version":"b4769767f13a1692a66186e01c3aa186ff808d5ff72ed36eda8c37738fb2ac92","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"683edfc4f2b411ebe04729cb6dc09ddd26fbac2c57771a6d7c55964af776e176","impliedFormat":1},{"version":"1ec3f3a5f04cc42df33274fbe5c0937d9a9e06f249a7a26288d7d54f0763ffd4","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"e47f532d6e1617833f13a5b0710c0089d402c89c2f2b54f324e5a20e418d287a","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"8e2577e7262051fd3c5bd6ca2b2056d358ff8853565720f92455860824c25188","impliedFormat":1},{"version":"7ec8d7d483f7394f9da611b10d3a0e402f76ff5c991261e6ce43a15f81ca4258","impliedFormat":1},{"version":"bb9dbb4b2ad81e3e71ec5ba4314973718555b9d04ba2a17dfbf875efecb8e2c0","impliedFormat":1},{"version":"82c3cc48c692438e41b94d936b8acd75ca97b18c50fa1af8a0715eb9d07d18cd","impliedFormat":1},{"version":"045a210189ec63c5488410b33f9fca53d77d051599d0d6506d8048551399c5f3","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"632c45ccb4cdc2c3a80c7a36a63dd7763016e59cac5e07bfb3e37e3548957028","impliedFormat":1},{"version":"c9a2daf6cd1eb854cd5b9e424247c5e306692055738c2effd35f7871d942b76e","impliedFormat":1},{"version":"afa1c49f8e559e413d57343339db857d2a8159435cf9cf7d4deb41718fff1b88","impliedFormat":1},{"version":"e50a7130339a951e6da9e968ed5521b0997a5b0479e148914087213839b5474c","impliedFormat":1}],"root":[[94,97],103,[105,107]],"options":{"allowImportingTsExtensions":true,"allowJs":true,"allowSyntheticDefaultImports":true,"alwaysStrict":true,"checkJs":true,"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":false,"erasableSyntaxOnly":true,"module":199,"newLine":1,"noFallthroughCasesInSwitch":true,"noUncheckedIndexedAccess":true,"outDir":"./","rewriteRelativeImportExtensions":true,"rootDir":"..","skipDefaultLibCheck":true,"skipLibCheck":true,"sourceMap":true,"strict":true,"target":99,"useUnknownInCatchVariables":true,"verbatimModuleSyntax":true},"referencedMap":[[96,1],[107,2],[97,3],[103,4],[95,5],[106,6],[94,3],[105,7],[98,3],[101,8],[100,3],[91,9],[88,3],[92,3],[90,3],[93,10],[89,3],[99,3],[171,11],[172,11],[173,12],[109,13],[174,14],[175,15],[176,16],[177,17],[178,18],[179,19],[180,20],[181,21],[182,22],[183,22],[184,23],[185,24],[186,3],[187,25],[188,26],[110,3],[108,3],[189,27],[190,28],[191,29],[234,30],[192,31],[193,32],[194,31],[195,33],[196,34],[198,35],[199,36],[200,36],[201,36],[202,37],[203,38],[204,39],[205,40],[206,41],[207,42],[208,42],[209,43],[210,3],[211,3],[212,44],[213,45],[214,46],[215,47],[216,48],[217,49],[218,50],[219,51],[220,52],[221,53],[222,54],[223,55],[224,56],[225,57],[226,58],[227,59],[228,60],[229,61],[230,62],[111,31],[112,3],[113,63],[114,64],[115,3],[116,65],[117,3],[162,66],[163,67],[164,68],[165,68],[166,69],[167,3],[168,14],[169,70],[170,67],[231,71],[232,72],[233,73],[197,3],[102,3],[104,3],[86,3],[87,3],[15,3],[14,3],[2,3],[16,3],[17,3],[18,3],[19,3],[20,3],[21,3],[22,3],[23,3],[3,3],[24,3],[25,3],[4,3],[26,3],[30,3],[27,3],[28,3],[29,3],[31,3],[32,3],[33,3],[5,3],[34,3],[35,3],[36,3],[37,3],[6,3],[41,3],[38,3],[39,3],[40,3],[42,3],[7,3],[43,3],[48,3],[49,3],[44,3],[45,3],[46,3],[47,3],[8,3],[53,3],[50,3],[51,3],[52,3],[54,3],[9,3],[55,3],[56,3],[57,3],[59,3],[58,3],[60,3],[61,3],[10,3],[62,3],[63,3],[64,3],[11,3],[65,3],[66,3],[67,3],[68,3],[69,3],[70,3],[12,3],[71,3],[72,3],[73,3],[74,3],[75,3],[1,3],[76,3],[77,3],[13,3],[78,3],[79,3],[80,3],[81,3],[82,3],[83,3],[84,3],[85,3],[136,74],[150,75],[133,76],[151,77],[160,78],[124,79],[125,80],[123,81],[159,82],[154,83],[158,84],[127,85],[137,86],[147,87],[126,88],[157,89],[121,90],[122,83],[128,86],[129,3],[135,91],[132,86],[119,92],[161,93],[152,94],[140,95],[139,86],[141,96],[144,97],[138,98],[142,99],[155,82],[130,100],[131,101],[145,102],[120,77],[149,103],[148,86],[134,101],[143,104],[146,105],[153,3],[118,3],[156,106]],"latestChangedDtsFile":"./raster.d.ts","version":"6.0.3"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@mailwoman/map-tui",
3
+ "version": "9.1.0",
4
+ "description": "Terminal vector-tile map renderer — braille map frames for TUIs, from PMTiles.",
5
+ "license": "AGPL-3.0-only OR LicenseRef-Commercial",
6
+ "contributors": [
7
+ {
8
+ "name": "Teffen Ellis",
9
+ "email": "teffen@sister.software"
10
+ }
11
+ ],
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://github.com/sister-software/mailwoman.git",
15
+ "directory": "map-tui"
16
+ },
17
+ "files": [
18
+ "out/",
19
+ "*.ts",
20
+ "**/*.ts",
21
+ "!*.test.ts",
22
+ "!**/*.test.ts",
23
+ "!test/",
24
+ "!scripts/",
25
+ "!__snapshots__/"
26
+ ],
27
+ "type": "module",
28
+ "exports": {
29
+ "./package.json": "./package.json",
30
+ ".": {
31
+ "node": "./index.ts",
32
+ "default": "./out/index.js",
33
+ "types": "./out/index.d.ts"
34
+ }
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "dependencies": {
40
+ "@mapbox/vector-tile": "^2.0.3",
41
+ "@sister.software/asciify": "^4.1.0",
42
+ "pbf": "^4.0.1",
43
+ "pmtiles": "^4.5.0"
44
+ },
45
+ "engines": {
46
+ "node": ">=24.18.0"
47
+ }
48
+ }
package/raster.ts ADDED
@@ -0,0 +1,213 @@
1
+ /**
2
+ * @copyright Sister Software.
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ */
6
+
7
+ /**
8
+ * RGBA pixel rasterizer for map-tui's debug view.
9
+ *
10
+ * Rasterizes vector geometry (polylines, filled polygons, circles) onto a plain RGBA byte grid — the shape asciify's
11
+ * rasterize step consumes. Every draw call clips through {@link RGBAGrid.setPixel}, so callers never need to
12
+ * bounds-check geometry themselves. The polyline and circle primitives floor their coordinates to integers on entry;
13
+ * {@link fillPolygon} does not — its scanline edge math keeps ring vertices as given, see its own docstring.
14
+ */
15
+
16
+ import type { RGB } from "./style.ts"
17
+
18
+ /**
19
+ * A row-major RGBA pixel buffer. Alpha starts at 0 (unlit/transparent) everywhere; drawing a pixel sets it to 255,
20
+ * which is how callers (including this module's own tests) distinguish "lit" from "background".
21
+ */
22
+ export class RGBAGrid {
23
+ readonly width: number
24
+ readonly height: number
25
+ /**
26
+ * RGBA, row-major, width * height * 4 bytes — the shape asciify's rasterize consumes.
27
+ */
28
+ readonly data: Uint8ClampedArray
29
+
30
+ constructor(width: number, height: number) {
31
+ this.width = width
32
+ this.height = height
33
+ this.data = new Uint8ClampedArray(width * height * 4)
34
+ }
35
+
36
+ /**
37
+ * Writes a pixel's RGB channels and sets alpha to fully opaque (255). Coordinates outside the grid are silently
38
+ * ignored — this is the one clipping boundary every drawing primitive in this module routes through, so geometry that
39
+ * runs off the grid (or arrives with negative/oversized coordinates) never needs special-casing upstream.
40
+ */
41
+ setPixel(x: number, y: number, color: RGB): void {
42
+ const px = Math.floor(x)
43
+ const py = Math.floor(y)
44
+
45
+ if (px < 0 || px >= this.width || py < 0 || py >= this.height) return
46
+
47
+ const offset = (py * this.width + px) * 4
48
+
49
+ this.data[offset] = color[0]
50
+ this.data[offset + 1] = color[1]
51
+ this.data[offset + 2] = color[2]
52
+ this.data[offset + 3] = 255
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Stamps a `width`-sized square centered on (x, y) — used by {@link drawPolyline} for `width > 1`. `width === 1` callers
58
+ * should use `grid.setPixel` directly rather than pay the square-stamp loop.
59
+ */
60
+ function stampSquare(grid: RGBAGrid, x: number, y: number, color: RGB, width: number): void {
61
+ const half = Math.floor(width / 2)
62
+
63
+ for (let dy = 0; dy < width; dy++) {
64
+ for (let dx = 0; dx < width; dx++) {
65
+ grid.setPixel(x - half + dx, y - half + dy, color)
66
+ }
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Draws a single line segment with the integer Bresenham algorithm. Coordinates are floored on entry; every plotted
72
+ * point routes through `grid.setPixel`, so segments that run partly or fully off-grid clip for free.
73
+ */
74
+ function drawSegment(grid: RGBAGrid, x0: number, y0: number, x1: number, y1: number, color: RGB, width: number): void {
75
+ let x = Math.floor(x0)
76
+ let y = Math.floor(y0)
77
+ const endX = Math.floor(x1)
78
+ const endY = Math.floor(y1)
79
+
80
+ const dx = Math.abs(endX - x)
81
+ const dy = -Math.abs(endY - y)
82
+ const stepX = x < endX ? 1 : -1
83
+ const stepY = y < endY ? 1 : -1
84
+ let error = dx + dy
85
+
86
+ for (;;) {
87
+ if (width > 1) {
88
+ stampSquare(grid, x, y, color, width)
89
+ } else {
90
+ grid.setPixel(x, y, color)
91
+ }
92
+
93
+ if (x === endX && y === endY) break
94
+
95
+ const doubleError = 2 * error
96
+
97
+ if (doubleError >= dy) {
98
+ error += dy
99
+ x += stepX
100
+ }
101
+
102
+ if (doubleError <= dx) {
103
+ error += dx
104
+ y += stepY
105
+ }
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Draws a connected polyline through `points`, one Bresenham segment per consecutive pair. `width > 1` stamps a
111
+ * `width`-sized square at every plotted step instead of a single pixel, thickening the line. Segments that run outside
112
+ * the grid clip through `setPixel` rather than throwing.
113
+ */
114
+ export function drawPolyline(
115
+ grid: RGBAGrid,
116
+ points: ReadonlyArray<{ x: number; y: number }>,
117
+ color: RGB,
118
+ width: number
119
+ ): void {
120
+ for (let index = 0; index < points.length - 1; index++) {
121
+ const a = points[index]!
122
+ const b = points[index + 1]!
123
+
124
+ drawSegment(grid, a.x, a.y, b.x, b.y, color, width)
125
+ }
126
+ }
127
+
128
+ /**
129
+ * Fills one or more polygon rings with the even-odd rule: a pixel is interior when a ray from it crosses an odd number
130
+ * of ring edges. Rings after the first behave as holes wherever they overlap the first ring, and holes nested inside
131
+ * holes fill again, purely as a consequence of the parity count — no explicit hole/outer distinction is tracked.
132
+ * Scanlines sample row centers (`y + 0.5`) rather than integer row coordinates, which is what keeps horizontal edges
133
+ * and grid-aligned polygon boundaries from producing degenerate (zero-width or doubled) intersections. Coordinates are
134
+ * floored to the grid via `setPixel`; edge math itself uses the ring vertices as given.
135
+ */
136
+ export function fillPolygon(
137
+ grid: RGBAGrid,
138
+ rings: ReadonlyArray<ReadonlyArray<{ x: number; y: number }>>,
139
+ color: RGB
140
+ ): void {
141
+ for (let y = 0; y < grid.height; y++) {
142
+ const scanY = y + 0.5
143
+ const intersections: number[] = []
144
+
145
+ for (const ring of rings) {
146
+ for (let i = 0; i < ring.length; i++) {
147
+ const a = ring[i]!
148
+ const b = ring[(i + 1) % ring.length]!
149
+
150
+ // Skip horizontal edges — they contribute no crossing at any non-integer scanY.
151
+ if (a.y === b.y) continue
152
+
153
+ const yMin = Math.min(a.y, b.y)
154
+ const yMax = Math.max(a.y, b.y)
155
+
156
+ if (scanY < yMin || scanY >= yMax) continue
157
+
158
+ const t = (scanY - a.y) / (b.y - a.y)
159
+ intersections.push(a.x + t * (b.x - a.x))
160
+ }
161
+ }
162
+
163
+ intersections.sort((left, right) => left - right)
164
+
165
+ for (let i = 0; i + 1 < intersections.length; i += 2) {
166
+ const startX = Math.ceil(intersections[i]! - 0.5)
167
+ const endX = Math.ceil(intersections[i + 1]! - 0.5)
168
+
169
+ for (let x = startX; x < endX; x++) {
170
+ grid.setPixel(x, y, color)
171
+ }
172
+ }
173
+ }
174
+ }
175
+
176
+ /**
177
+ * Draws a circle's outline (ring, not a filled disc) with the midpoint circle algorithm, plotting all eight symmetric
178
+ * octant points per step. `centerX`/`centerY`/`radius` are floored on entry; every plotted point routes through
179
+ * `setPixel`, so a circle that runs off the grid clips rather than throwing.
180
+ */
181
+ export function drawCircle(grid: RGBAGrid, centerX: number, centerY: number, radius: number, color: RGB): void {
182
+ const cx = Math.floor(centerX)
183
+ const cy = Math.floor(centerY)
184
+ const r = Math.floor(radius)
185
+
186
+ let x = r
187
+ let y = 0
188
+ let error = 1 - r
189
+
190
+ const plotOctants = (px: number, py: number): void => {
191
+ grid.setPixel(cx + px, cy + py, color)
192
+ grid.setPixel(cx - px, cy + py, color)
193
+ grid.setPixel(cx + px, cy - py, color)
194
+ grid.setPixel(cx - px, cy - py, color)
195
+ grid.setPixel(cx + py, cy + px, color)
196
+ grid.setPixel(cx - py, cy + px, color)
197
+ grid.setPixel(cx + py, cy - px, color)
198
+ grid.setPixel(cx - py, cy - px, color)
199
+ }
200
+
201
+ while (x >= y) {
202
+ plotOctants(x, y)
203
+
204
+ y++
205
+
206
+ if (error < 0) {
207
+ error += 2 * y + 1
208
+ } else {
209
+ x--
210
+ error += 2 * (y - x) + 1
211
+ }
212
+ }
213
+ }