discord-message-transcript-base 1.3.1-dev.3.35 → 1.3.2-dev.0.49

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 @@
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.full.d.ts","../src/core/customMessages.ts","../src/types/types.ts","../src/core/sanitizer.ts","../src/core/markdown.ts","../src/renderers/html/css.ts","../src/renderers/html/js.ts","../package.json","../src/assets/highlightJsHash.json","../src/assets/transcriptHash.json","../src/renderers/html/html.ts","../src/core/output.ts","../src/index.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/utility.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/h2c-client.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/path/posix.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/path/win32.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/quic.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/test/reporters.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/util/types.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@25.2.2/node_modules/@types/node/index.d.ts"],"fileIdsList":[[92,151,152,154,162,166,169,171,172,173,185],[92,153,154,162,166,169,171,172,173,185],[154,162,166,169,171,172,173,185],[92,154,162,166,169,171,172,173,185,193],[92,154,155,160,162,165,166,169,171,172,173,175,185,190,202],[92,154,155,156,162,165,166,169,171,172,173,185],[92,154,162,166,169,171,172,173,185],[92,154,157,162,166,169,171,172,173,185,203],[92,154,158,159,162,166,169,171,172,173,176,185],[92,154,159,162,166,169,171,172,173,185,190,199],[92,154,160,162,165,166,169,171,172,173,175,185],[92,153,154,161,162,166,169,171,172,173,185],[92,154,162,163,166,169,171,172,173,185],[92,154,162,164,165,166,169,171,172,173,185],[92,153,154,162,165,166,169,171,172,173,185],[92,154,162,165,166,167,169,171,172,173,185,190,202],[92,154,162,165,166,167,169,171,172,173,185,190,193],[92,141,154,162,165,166,168,169,171,172,173,175,185,190,202],[92,154,162,165,166,168,169,171,172,173,175,185,190,199,202],[92,154,162,166,168,169,170,171,172,173,185,190,199,202],[90,91,92,93,94,95,96,97,98,99,100,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,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,197,198,199,200,201,202,203,204,205,206,207,208,209],[92,154,162,165,166,169,171,172,173,185],[92,154,162,166,169,171,173,185],[92,154,162,166,169,171,172,173,174,185,202],[92,154,162,165,166,169,171,172,173,175,185,190],[92,154,162,166,169,171,172,173,176,185],[92,154,162,166,169,171,172,173,177,185],[92,154,162,165,166,169,171,172,173,180,185],[92,151,152,153,154,155,156,157,158,159,160,161,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,197,198,199,200,201,202,203,204,205,206,207,208,209],[92,154,162,166,169,171,172,173,182,185],[92,154,162,166,169,171,172,173,183,185],[92,154,159,162,166,169,171,172,173,175,185,193],[92,154,162,165,166,169,171,172,173,185,186],[92,154,162,166,169,171,172,173,185,187,203,206],[92,154,162,165,166,169,171,172,173,185,190,192,193],[92,154,162,166,169,171,172,173,185,191,193],[92,154,162,166,169,171,172,173,185,193,203],[92,154,162,166,169,171,172,173,185,194],[92,151,154,162,166,169,171,172,173,185,190,196],[92,154,162,166,169,171,172,173,185,190,195],[92,154,162,165,166,169,171,172,173,185,197,198],[92,154,162,166,169,171,172,173,185,197,198],[92,154,159,162,166,169,171,172,173,175,185,190,199],[92,154,162,166,169,171,172,173,185,200],[92,154,162,166,169,171,172,173,175,185,201],[92,154,162,166,168,169,171,172,173,183,185,202],[92,154,162,166,169,171,172,173,185,203,204],[92,154,159,162,166,169,171,172,173,185,204],[92,154,162,166,169,171,172,173,185,190,205],[92,154,162,166,169,171,172,173,174,185,206],[92,154,162,166,169,171,172,173,185,207],[92,154,157,162,166,169,171,172,173,185],[92,154,159,162,166,169,171,172,173,185],[92,154,162,166,169,171,172,173,185,203],[92,141,154,162,166,169,171,172,173,185],[92,154,162,166,169,171,172,173,185,202],[92,154,162,166,169,171,172,173,185,208],[92,154,162,166,169,171,172,173,180,185],[92,154,162,166,169,171,172,173,185,198],[92,141,154,162,165,166,167,169,171,172,173,180,185,190,193,202,205,206,208],[92,154,162,166,169,171,172,173,185,190,209],[92,107,110,113,114,154,162,166,169,171,172,173,185,202],[92,110,154,162,166,169,171,172,173,185,190,202],[92,110,114,154,162,166,169,171,172,173,185,202],[92,154,162,166,169,171,172,173,185,190],[92,104,154,162,166,169,171,172,173,185],[92,108,154,162,166,169,171,172,173,185],[92,106,107,110,154,162,166,169,171,172,173,185,202],[92,154,162,166,169,171,172,173,175,185,199],[92,154,162,166,169,171,172,173,185,210],[92,104,154,162,166,169,171,172,173,185,210],[92,106,110,154,162,166,169,171,172,173,175,185,202],[92,101,102,103,105,109,154,162,165,166,169,171,172,173,185,190,202],[92,110,118,126,154,162,166,169,171,172,173,185],[92,102,108,154,162,166,169,171,172,173,185],[92,110,135,136,154,162,166,169,171,172,173,185],[92,102,105,110,154,162,166,169,171,172,173,185,193,202,210],[92,110,154,162,166,169,171,172,173,185],[92,106,110,154,162,166,169,171,172,173,185,202],[92,101,154,162,166,169,171,172,173,185],[92,104,105,106,108,109,110,111,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,136,137,138,139,140,154,162,166,169,171,172,173,185],[92,110,128,131,154,162,166,169,171,172,173,185],[92,110,118,119,120,154,162,166,169,171,172,173,185],[92,108,110,119,121,154,162,166,169,171,172,173,185],[92,109,154,162,166,169,171,172,173,185],[92,102,104,110,154,162,166,169,171,172,173,185],[92,110,114,119,121,154,162,166,169,171,172,173,185],[92,114,154,162,166,169,171,172,173,185],[92,108,110,113,154,162,166,169,171,172,173,185,202],[92,102,106,110,118,154,162,166,169,171,172,173,185],[92,110,128,154,162,166,169,171,172,173,185],[92,121,154,162,166,169,171,172,173,185],[92,104,110,135,154,162,166,169,171,172,173,185,193,208,210],[79,80,92,154,162,166,169,171,172,173,185],[79,87,92,154,162,166,169,171,172,173,185,190],[79,92,154,162,166,169,171,172,173,185],[78,79,80,88,92,154,162,166,169,171,172,173,185],[79,80,81,82,83,84,85,86,92,154,162,166,169,171,172,173,185]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3e9cef4eed59f8a2249ed834ba4aabe9d0d4e9037d4679487fa17dad99004a3","impliedFormat":1},{"version":"fcb9ed0bb2f97b0f497063459f6095a3fe4aebbd267bd734678959c462615c86","signature":"1546a67c35e2eeda068ebb569b13c6e192644162fc1d4aa0446428611e4c0c61","impliedFormat":99},{"version":"f24049572a149041d6d1de5353de4bf0645e89f1ab9fa778873951eba29c52e3","signature":"7368871c87728996d4503055176503fee0859b8a04f8ece307fc679bc208ba03","impliedFormat":99},{"version":"331c316fae74d351c8f9864232a1a0c212cfbe9d935ff7b3a964ac7a65f9af6a","signature":"3d12029b09824f25557f99cf6d22b2a4f8d1aad7098d2118d7a5f838b18ab086","impliedFormat":99},{"version":"38e9630dadf5d89869b12b90cd800b58430b4911da4aaf434724f2be40ad5c58","signature":"bec8645577b2dccf53cfa77f02aa11040da4949f4daa45dbb9742f61936e714b","impliedFormat":99},{"version":"a2af9903878f8dfc5f898ac2be107c92481a5ab938c140a0a1574348ac221635","signature":"f5e5e7cac96c5ef0c8f8be75fcd2feadfe6b50759a503fffbef67aa3855db4d2","impliedFormat":99},{"version":"638b4f98ca4ceca9c3edecbd4352f4a25c934fb721e38eb3212fe2c3a513bf01","signature":"1b2d773dede1b13e9b6ba1b056c95f8c6036e5c5bb6ae28140399028488c6b4c","impliedFormat":99},"55b35add0e8d5dd1e26d0c7d05180a472bd33f505792b89cf86a40acd74174c0","13a4d29acf18ceae10f3357c5bc9fb581fcb90acee78d3af1879155a9542950d","036b6a04444dc3efbdb156959283915cda342de20cbbb8d34f2406d80d36d9cb",{"version":"21c36b42b26eeb1a0d0d026084613c574460f3a339c267a5d1a3e30022c30138","signature":"072b32918416a249f48cce06279a5fb89e2153065cc4a949207694e012198d4e","impliedFormat":99},{"version":"2c44dcab943232df700578512c9d28c40f834a9c6a4fea25ba61c29ff0c32738","signature":"5ede2b6af431c5c5b7cca3ea2f9e654d50ca8ae75c27a499c268672a4603d49b","impliedFormat":99},{"version":"385046ef7ff55722f4c5373b951cc230f8a77e014ca745ebc138e96a3094381c","signature":"5f0c3790f87cef2b80fa00627214217f502f7ca1af1c9ba341766dee4676c513","impliedFormat":99},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","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":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","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":"435b3711465425770ed2ee2f1cf00ce071835265e0851a7dc4600ab4b007550e","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"237ba5ac2a95702a114a309e39c53a5bddff5f6333b325db9764df9b34f3502b","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"1d024184fb57c58c5c91823f9d10b4915a4867b7934e89115fd0d861a9df27c8","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"b0b69c61b0f0ec8ca15db4c8c41f6e77f4cacb784d42bca948f42dea33e8757e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f96a48183254c00d24575401f1a761b4ce4927d927407e7862a83e06ce5d6964","impliedFormat":1},{"version":"cc25940cfb27aa538e60d465f98bb5068d4d7d33131861ace43f04fe6947d68f","impliedFormat":1},{"version":"f83fb2b1338afbb3f9d733c7d6e8b135826c41b0518867df0c0ace18ae1aa270","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"757227c8b345c57d76f7f0e3bbad7a91ffca23f1b2547cbed9e10025816c9cb7","impliedFormat":1},{"version":"42a05d8f239f74587d4926aba8cc54792eed8e8a442c7adc9b38b516642aadfe","impliedFormat":1},{"version":"5d21b58d60383cc6ab9ad3d3e265d7d25af24a2c9b506247e0e50b0a884920be","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"ae6757460f37078884b1571a3de3ebaf724d827d7e1d53626c02b3c2a408ac63","affectsGlobalScope":true,"impliedFormat":1},{"version":"9451a46a89ed209e2e08329e6cac59f89356eae79a7230f916d8cc38725407c7","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"e236b5eba291f51bdf32c231673e6cab81b5410850e61f51a7a524dddadc0f95","impliedFormat":1},{"version":"f7ba0e839daa0702e3ff1a1a871c0d8ea2d586ce684dd8a72c786c36a680b1d9","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"af4ab0aa8908fc9a655bb833d3bc28e117c4f0e1038c5a891546158beb25accb","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"f64deb26664af64dc274637343bde8d82f930c77af05a412c7d310b77207a448","impliedFormat":1},{"version":"ed4f674fc8c0c993cc7e145069ac44129e03519b910c62be206a0cc777bdc60b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"17d06eb5709839c7ce719f0c38ada6f308fb433f2cd6d8c87b35856e07400950","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"2a00d005e3af99cd1cfa75220e60c61b04bfb6be7ca7453bfe2ef6cca37cc03c","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"14d4bd22d1b05824971b98f7e91b2484c90f1a684805c330476641417c3d9735","impliedFormat":1},{"version":"c3877fef8a43cd434f9728f25a97575b0eb73d92f38b5c87c840daccc3e21d97","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"1dbd83860e7634f9c236647f45dbc5d3c4f9eba8827d87209d6e9826fdf4dbd5","impliedFormat":1},{"version":"41ef7992c555671a8fe54db302788adefa191ded810a50329b79d20a6772d14c","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"b37f83e7deea729aa9ce5593f78905afb45b7532fdff63041d374f60059e7852","impliedFormat":1},{"version":"e1cb68f3ef3a8dd7b2a9dfb3de482ed6c0f1586ba0db4e7d73c1d2147b6ffc51","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1}],"root":[[78,83],[85,89]],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"module":199,"outDir":"./","rootDir":"../src","strict":true,"target":11,"tsBuildInfoFile":"./.tsbuildinfo"},"referencedMap":[[151,1],[152,1],[153,2],[92,3],[154,4],[155,5],[156,6],[90,7],[157,8],[158,9],[159,10],[160,11],[161,12],[162,13],[163,13],[164,14],[165,15],[166,16],[167,17],[93,7],[91,7],[168,18],[169,19],[170,20],[210,21],[171,22],[172,23],[173,22],[174,24],[175,25],[176,26],[177,27],[178,27],[179,27],[180,28],[181,29],[182,30],[183,31],[184,32],[185,33],[186,33],[187,34],[188,7],[189,7],[190,35],[191,36],[192,35],[193,37],[194,38],[195,39],[196,40],[197,41],[198,42],[199,43],[200,44],[201,45],[202,46],[203,47],[204,48],[205,49],[206,50],[207,51],[94,22],[95,7],[96,52],[97,53],[98,7],[99,54],[100,7],[142,55],[143,56],[144,57],[145,57],[146,58],[147,7],[148,4],[149,59],[150,56],[208,60],[209,61],[75,7],[76,7],[14,7],[12,7],[13,7],[18,7],[17,7],[2,7],[19,7],[20,7],[21,7],[22,7],[23,7],[24,7],[25,7],[26,7],[3,7],[27,7],[28,7],[4,7],[29,7],[33,7],[30,7],[31,7],[32,7],[34,7],[35,7],[36,7],[5,7],[37,7],[38,7],[39,7],[40,7],[6,7],[44,7],[41,7],[42,7],[43,7],[45,7],[7,7],[46,7],[51,7],[52,7],[47,7],[48,7],[49,7],[50,7],[8,7],[56,7],[53,7],[54,7],[55,7],[57,7],[9,7],[58,7],[59,7],[60,7],[62,7],[61,7],[63,7],[64,7],[10,7],[65,7],[66,7],[67,7],[11,7],[77,7],[68,7],[69,7],[70,7],[71,7],[72,7],[1,7],[73,7],[74,7],[16,7],[15,7],[118,62],[130,63],[116,64],[131,65],[140,66],[107,67],[108,68],[106,69],[139,70],[134,71],[138,72],[110,73],[127,74],[109,75],[137,76],[104,77],[105,71],[111,78],[112,7],[117,79],[115,78],[102,80],[141,81],[132,82],[121,83],[120,78],[122,84],[125,85],[119,86],[123,87],[135,70],[113,88],[114,89],[126,90],[103,65],[129,91],[128,78],[124,92],[133,7],[101,7],[136,93],[84,7],[85,7],[86,7],[78,7],[81,94],[88,95],[80,96],[89,97],[82,7],[87,98],[83,7],[79,65]],"latestChangedDtsFile":"./index.d.ts","version":"5.9.3"}
@@ -0,0 +1,4 @@
1
+ {
2
+ "style": "sha384-oaMLBGEzBOJx3UHwac0cVndtX5fxGQIfnAeFZ35RTgqPcYlbprH9o9PUV/F8Le07",
3
+ "script": "sha384-RH2xi4eIQ/gjtbs9fUXM68sLSi99C7ZWBRX1vDrVv6GQXRibxXLbwO2NGZB74MbU"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "style": "sha384-sieTQL0d0WMn/tLMJhko7f4+Q8PX4jaFv+2XUvAjaJSzrqxHbNTVTlGM0VgSNx6B",
3
+ "script": "sha384-nsR9EEpsguyguSEjhfhY0Pue/edFNLR4KgThCw2G6fNLkQlc3FDhg0Gm52mgHJbJ"
4
+ }
@@ -1,2 +1,2 @@
1
- import { ArrayMentions } from "../types/types.js";
1
+ import { ArrayMentions } from "@/types";
2
2
  export declare function markdownToHTML(text: string, mentions: ArrayMentions, everyone: boolean, dateFormat: Intl.DateTimeFormat): string;
@@ -1,13 +1,35 @@
1
1
  import { sanitize } from "./sanitizer.js";
2
+ // Tokens
2
3
  const BLOCK_TOKEN = "\0CB\0";
3
4
  const LINE_TOKEN = "\0CL\0";
4
5
  const BLOCK_REGEX = /\0CB\0(\d+)\0CB\0/g;
5
6
  const LINE_REGEX = /\0CL\0(\d+)\0CL\0/g;
7
+ // Regex
8
+ const INLINE_REGEX = /(\*\*\*(?:(?!\*\*\*)[\s\S])+\*\*\*|\*\*(?:(?!\*\*)[\s\S])+\*\*|__(?:(?!__)[\s\S])+__|\*(?:[^*\n]+)\*|_(?:[^_\n]+)_|~~(?:(?!~~)[\s\S])+~~|\|\|(?:(?!\|\|)[\s\S])+\|\|)/g;
9
+ ;
10
+ const CODE_BLOCK = /```(?:(\S+)\n)?((?:(?!```)[\s\S])+)```/g;
11
+ const CODE_LINE = /`([^`\n]+?)`/g;
12
+ const MULTI_CITATION_START = /^[ \t]*>>>/m;
13
+ const CITATION_SINGLE_BLOCK = /(^[ \t]*> ?.*(?:\n[ \t]*> ?.*)*)/gm;
14
+ const CITATION_PREFIX = /^[ \t]*((?:>)+)/;
15
+ const CITATION_STRIP_PREFIX = /^[ \t]*> ?/;
16
+ const REMOVE_TRIPLE_CITATION = /^[ \t]*>>> ?/;
17
+ const HEADERS = /^(#{1,3}) (.+?)(?=\n|$)/gm;
18
+ const SUBTEXT = /^-# (.*)(?=\n|$)/gm;
19
+ const LIST = /^(\s*)[-*] (.*)(?=\n|$)/gm;
20
+ const MASKED_LINK = /\[([^\]]+)\]\((https?:\/\/[^\s]+)\)/g;
21
+ const NORMAL_LINK = /(?<!href=")(https?:\/\/[^\s]+)/g;
22
+ const USER_MENTION = /&lt;@!?(\d+)&gt;/g;
23
+ const ROLE_MENTION = /&lt;@&amp;(\d+)&gt;/g;
24
+ const CHANNEL_MENTION = /&lt;#(\d+)&gt;/g;
25
+ const TIMESTAMP = /&lt;t:(\d+)(?::([tTdDfFR]))?&gt;/g;
26
+ const BREAK_LINE = /\n/g;
27
+ const UNECESSARY_BREAK_LINE = /(<\/(?:p|h[1-3]|blockquote)>)\s*<br>/g;
6
28
  export function markdownToHTML(text, mentions, everyone, dateFormat) {
7
29
  const codeBlock = [];
8
30
  const codeLine = [];
9
31
  // Code Block (```)
10
- text = text.replace(/```(?:(\S+)\n)?([\s\S]+?)```/g, (_m, lang, code) => {
32
+ text = text.replace(CODE_BLOCK, (_m, lang, code) => {
11
33
  const rawLang = lang?.toLowerCase();
12
34
  const normalizedLang = rawLang ? (LANGUAGE_ALIAS[rawLang] ?? rawLang) : null;
13
35
  const language = normalizedLang && SUPPORTED_LANGUAGES.has(rawLang) ? normalizedLang : 'plaintext';
@@ -15,75 +37,68 @@ export function markdownToHTML(text, mentions, everyone, dateFormat) {
15
37
  return `${BLOCK_TOKEN}${codeBlock.length}${BLOCK_TOKEN}`;
16
38
  });
17
39
  // Code line (`)
18
- text = text.replace(/`([^`\n]+?)`/g, (_m, code) => {
40
+ text = text.replace(CODE_LINE, (_m, code) => {
19
41
  codeLine.push(`<code>${sanitize(code)}</code>`);
20
42
  return `${LINE_TOKEN}${codeLine.length}${LINE_TOKEN}`;
21
43
  });
22
44
  text = sanitize(text);
23
45
  // Citation (> | >>>)
24
- const tripleCitationIndex = text.search(/^[ \t]*&gt;&gt;&gt;/m);
46
+ const tripleCitationIndex = text.search(MULTI_CITATION_START);
25
47
  if (tripleCitationIndex !== -1) {
26
48
  const lineStartIndex = text.lastIndexOf('\n', tripleCitationIndex) + 1;
27
49
  let beforePart = text.substring(0, lineStartIndex);
28
50
  let afterPart = text.substring(lineStartIndex);
29
- beforePart = beforePart.replace(/(^[ \t]*&gt; ?.*(?:\n[ \t]*&gt; ?.*)*)/gm, (match) => {
51
+ beforePart = beforePart.replace(CITATION_SINGLE_BLOCK, (match) => {
30
52
  return singleCitation(match);
31
53
  });
32
- afterPart = afterPart.replace(/^[ \t]*&gt;&gt;&gt; ?/, '');
54
+ afterPart = afterPart.replace(REMOVE_TRIPLE_CITATION, '');
33
55
  const afterHtml = `<blockquote class="quote-multi">${afterPart}</blockquote>`;
34
56
  text = beforePart + afterHtml;
35
57
  }
36
58
  else {
37
- text = text.replace(/(^[ \t]*&gt; ?.*(?:\n[ \t]*&gt; ?.*)*)/gm, (match) => {
59
+ text = text.replace(CITATION_SINGLE_BLOCK, (match) => {
38
60
  return singleCitation(match);
39
61
  });
40
62
  }
41
63
  // Headers (#)
42
- text = text.replace(/^### (.*)(?=\n|$)/gm, `<h3>$1</h3>`);
43
- text = text.replace(/^## (.*)(?=\n|$)/gm, `<h2>$1</h2>`);
44
- text = text.replace(/^# (.*)(?=\n|$)/gm, `<h1>$1</h1>`);
64
+ text = text.replace(HEADERS, (_m, hashes, content) => {
65
+ const level = hashes.length;
66
+ return `<h${level}>${content}</h${level}>`;
67
+ });
45
68
  // Subtext(-#)
46
- text = text.replace(/^-# (.*)(?=\n|$)/gm, `<p class="subtext">$1</p>`);
69
+ text = text.replace(SUBTEXT, `<p class="subtext">$1</p>`);
47
70
  // List (- | *)
48
- text = text.replace(/^(\s*)[-*] (.*)(?=\n|$)/gm, (_m, indentation, text) => {
71
+ text = text.replace(LIST, (_m, indentation, text) => {
49
72
  const isSubItem = indentation.length > 0;
50
73
  const bullet = isSubItem ? '◦' : '•';
51
74
  return `<p class="pList">${indentation}${bullet} ${text}</p>`;
52
75
  });
53
- // Spoiler (||)
54
- text = text.replace(/\|\|(.*?)\|\|/gs, `<span class="spoilerMsg">$1</span>`);
55
- // Bold & Italic (***)
56
- text = text.replace(/\*\*\*(.*?)\*\*\*/gs, `<strong><em>$1</em></strong>`);
57
- // Bold (**)
58
- text = text.replace(/\*\*(.*?)\*\*/gs, `<strong>$1</strong>`);
59
- // Underline(__)
60
- text = text.replace(/__(.*?)__/gs, `<u>$1</u>`);
61
- // Italic (*)
62
- text = text.replace(/\*(.*?)\*/gs, `<em>$1</em>`);
63
- text = text.replace(/\_(.*?)\_/gs, `<em>$1</em>`);
64
- // Strikethrough (~~)
65
- text = text.replace(/~~(.*?)~~/gs, `<s>$1</s>`);
76
+ if (text.includes("||") || text.includes("*") || text.includes("_") || text.includes("~~")) {
77
+ text = parseInline(text);
78
+ }
66
79
  // Links ([]() && https)
67
- text = text.replace(/\[([^\]]+)\]\((https?:\/\/[^\s]+)\)/g, (_m, text, link) => `<a href="${link}" target="_blank" rel="noopener noreferrer">${text}</a>`);
68
- text = text.replace(/(?<!href=")(https?:\/\/[^\s]+)/g, (_m, link) => `<a href="${link}" target="_blank" rel="noopener noreferrer">${link}</a>`);
80
+ if (text.includes("http")) {
81
+ text = text.replace(MASKED_LINK, (_m, text, link) => `<a href="${link}" target="_blank" rel="noopener noreferrer">${text}</a>`);
82
+ text = text.replace(NORMAL_LINK, (_m, link) => `<a href="${link}" target="_blank" rel="noopener noreferrer">${link}</a>`);
83
+ }
69
84
  // Mentions (@)
70
- if (mentions.users.length != 0) {
85
+ if (mentions.users.length != 0 && text.includes("<@")) {
71
86
  const users = new Map(mentions.users.map(user => [user.id, user]));
72
- text = text.replace(/&lt;@!?(\d+)&gt;/g, (_m, id) => {
87
+ text = text.replace(USER_MENTION, (_m, id) => {
73
88
  let user = users.get(id);
74
89
  return user ? `<span class="mention" style="color: ${user.color ?? "#dbdee1"}">@${user.name}</span> ` : `<span class="mention"><@${id}></span> `;
75
90
  });
76
91
  }
77
- if (mentions.roles.length != 0) {
92
+ if (mentions.roles.length != 0 && text.includes("<@&")) {
78
93
  const roles = new Map(mentions.roles.map(role => [role.id, role]));
79
- text = text.replace(/&lt;@&amp;(\d+)&gt;/g, (_m, id) => {
94
+ text = text.replace(ROLE_MENTION, (_m, id) => {
80
95
  const role = roles.get(id);
81
96
  return role ? `<span class="mention" style="color: ${role.color}">@${role.name}</span> ` : `<span class="mention"><@&${id}></span> `;
82
97
  });
83
98
  }
84
- if (mentions.channels.length != 0) {
99
+ if (mentions.channels.length != 0 && text.includes("<#")) {
85
100
  const channels = new Map(mentions.channels.map(channel => [channel.id, channel]));
86
- text = text.replace(/&lt;#(\d+)&gt;/g, (_m, id) => {
101
+ text = text.replace(CHANNEL_MENTION, (_m, id) => {
87
102
  const channel = channels.get(id);
88
103
  return channel && channel.name ? `<span class="mention">#${channel.name}</span> ` : `<span class="mention"><#${id}></span> `;
89
104
  });
@@ -94,49 +109,51 @@ export function markdownToHTML(text, mentions, everyone, dateFormat) {
94
109
  }
95
110
  // Timestamp
96
111
  const { locale, timeZone } = dateFormat.resolvedOptions();
97
- text = text.replace(/&lt;t:(\d+)(?::([tTdDfFR]))?&gt;/g, (_m, timestamp, format) => {
98
- const date = new Date(parseInt(timestamp, 10) * 1000);
99
- const style = format || 'f';
100
- const isoString = date.toISOString();
101
- const titleFormatter = new Intl.DateTimeFormat(locale, {
102
- dateStyle: 'full',
103
- timeStyle: 'full',
104
- timeZone: timeZone,
105
- });
106
- const fullDateForTitle = titleFormatter.format(date);
107
- if (style === 'R') {
108
- const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });
109
- const seconds = Math.floor((date.getTime() - Date.now()) / 1000);
110
- const minutes = Math.floor(seconds / 60);
111
- const hours = Math.floor(minutes / 60);
112
- const days = Math.floor(hours / 24);
113
- let relativeString;
114
- if (Math.abs(days) > 30)
115
- relativeString = rtf.format(Math.floor(days / 30.44), 'month');
116
- else if (Math.abs(days) > 0)
117
- relativeString = rtf.format(days, 'day');
118
- else if (Math.abs(hours) > 0)
119
- relativeString = rtf.format(hours, 'hour');
120
- else if (Math.abs(minutes) > 0)
121
- relativeString = rtf.format(minutes, 'minute');
122
- else
123
- relativeString = rtf.format(seconds, 'second');
124
- return `<time datetime="${isoString}" title="${fullDateForTitle}">${relativeString}</time>`;
125
- }
126
- else if (isStyleKey(style)) {
127
- const formatter = new Intl.DateTimeFormat(locale, {
128
- ...styleOptions[style],
112
+ if (text.includes("<t:")) {
113
+ text = text.replace(TIMESTAMP, (_m, timestamp, format) => {
114
+ const date = new Date(parseInt(timestamp, 10) * 1000);
115
+ const style = format || 'f';
116
+ const isoString = date.toISOString();
117
+ const titleFormatter = new Intl.DateTimeFormat(locale, {
118
+ dateStyle: 'full',
119
+ timeStyle: 'full',
129
120
  timeZone: timeZone,
130
121
  });
131
- const formattedDate = formatter.format(date);
132
- return `<time datetime="${isoString}" title="${fullDateForTitle}">${formattedDate}</time>`;
133
- }
134
- return _m;
135
- });
122
+ const fullDateForTitle = titleFormatter.format(date);
123
+ if (style === 'R') {
124
+ const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });
125
+ const seconds = Math.floor((date.getTime() - Date.now()) / 1000);
126
+ const minutes = Math.floor(seconds / 60);
127
+ const hours = Math.floor(minutes / 60);
128
+ const days = Math.floor(hours / 24);
129
+ let relativeString;
130
+ if (Math.abs(days) > 30)
131
+ relativeString = rtf.format(Math.floor(days / 30.44), 'month');
132
+ else if (Math.abs(days) > 0)
133
+ relativeString = rtf.format(days, 'day');
134
+ else if (Math.abs(hours) > 0)
135
+ relativeString = rtf.format(hours, 'hour');
136
+ else if (Math.abs(minutes) > 0)
137
+ relativeString = rtf.format(minutes, 'minute');
138
+ else
139
+ relativeString = rtf.format(seconds, 'second');
140
+ return `<time datetime="${isoString}" title="${fullDateForTitle}">${relativeString}</time>`;
141
+ }
142
+ else if (isStyleKey(style)) {
143
+ const formatter = new Intl.DateTimeFormat(locale, {
144
+ ...styleOptions[style],
145
+ timeZone: timeZone,
146
+ });
147
+ const formattedDate = formatter.format(date);
148
+ return `<time datetime="${isoString}" title="${fullDateForTitle}">${formattedDate}</time>`;
149
+ }
150
+ return _m;
151
+ });
152
+ }
136
153
  // Break Line
137
- text = text.replace(/\n/g, '<br>');
154
+ text = text.replace(BREAK_LINE, '<br>');
138
155
  // Clear Unecessary Break Line
139
- text = text.replace(/(<\/(?:p|h[1-3]|blockquote)>)\s*<br>/g, '$1');
156
+ text = text.replace(UNECESSARY_BREAK_LINE, '$1');
140
157
  // Remove Placeholders
141
158
  text = text.replace(BLOCK_REGEX, (_m, number) => {
142
159
  return codeBlock[Number(number) - 1] ?? "";
@@ -151,10 +168,10 @@ function singleCitation(match) {
151
168
  const result = [];
152
169
  let currentBlock = [];
153
170
  for (const line of lines) {
154
- const prefixMatch = line.match(/^[ \t]*((?:&gt;)+)/);
171
+ const prefixMatch = line.match(CITATION_PREFIX);
155
172
  const len = prefixMatch ? prefixMatch[1].length : 0;
156
173
  if (len === 4) { // Is a single '>'
157
- currentBlock.push(line.replace(/^[ \t]*&gt; ?/, ''));
174
+ currentBlock.push(line.replace(CITATION_STRIP_PREFIX, ''));
158
175
  }
159
176
  else { // Is '>>' or something else
160
177
  if (currentBlock.length > 0) {
@@ -169,6 +186,46 @@ function singleCitation(match) {
169
186
  }
170
187
  return result.join('\n');
171
188
  }
189
+ function parseInline(text) {
190
+ return text.replace(INLINE_REGEX, (match) => {
191
+ // Spoiler
192
+ if (match.startsWith("||")) {
193
+ const c = match.slice(2, -2);
194
+ return `<span class="spoilerMsg">${c}</span>`;
195
+ }
196
+ // Bold & Italic (***)
197
+ if (match.startsWith("***")) {
198
+ const c = match.slice(3, -3);
199
+ return `<strong><em>${c}</em></strong>`;
200
+ }
201
+ // Bold (**)
202
+ if (match.startsWith("**")) {
203
+ const c = match.slice(2, -2);
204
+ return `<strong>${c}</strong>`;
205
+ }
206
+ // Underline (__)
207
+ if (match.startsWith("__")) {
208
+ const c = match.slice(2, -2);
209
+ return `<u>${c}</u>`;
210
+ }
211
+ // Italic (*)
212
+ if (match.startsWith("*")) {
213
+ const c = match.slice(1, -1);
214
+ return `<em>${c}</em>`;
215
+ }
216
+ // Italic (_)
217
+ if (match.startsWith("_")) {
218
+ const c = match.slice(1, -1);
219
+ return `<em>${c}</em>`;
220
+ }
221
+ // Strikethrough (~~)
222
+ if (match.startsWith("~~")) {
223
+ const c = match.slice(2, -2);
224
+ return `<s>${c}</s>`;
225
+ }
226
+ return match;
227
+ });
228
+ }
172
229
  // Check if styleKey is valid
173
230
  const styleOptions = {
174
231
  't': { timeStyle: 'short' },
@@ -1,3 +1,3 @@
1
- import { JsonData, Uploadable } from "../types/types.js";
1
+ import { JsonData, Uploadable } from "@/types";
2
2
  import Stream from 'stream';
3
3
  export declare function output(json: JsonData): Promise<string | Stream | Buffer | Uploadable>;
@@ -1,5 +1,5 @@
1
1
  import { Readable } from 'stream';
2
- import { Html } from "../renderers/html/html.js";
2
+ import { Html } from "@/renderers/html/html.js";
3
3
  export async function output(json) {
4
4
  const objectHTML = new Html(json);
5
5
  const stringHTML = await objectHTML.toHTML();
@@ -1,9 +1,5 @@
1
- import { hexColor, JsonAttachment, LookupResult, TranscriptOptionsBase } from "../types/types.js";
1
+ import { hexColor } from "@/types";
2
2
  export declare const FALLBACK_PIXEL = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
3
3
  export declare function sanitize(text: string): string;
4
4
  export declare function isValidHexColor(colorInput: string, canReturnNull: false): hexColor;
5
5
  export declare function isValidHexColor(colorInput: string | null, canReturnNull: true): hexColor | null;
6
- export declare function resolveImageURL(url: string, options: TranscriptOptionsBase, canReturnNull: false, attachments?: JsonAttachment[]): Promise<string>;
7
- export declare function resolveImageURL(url: string | null, options: TranscriptOptionsBase, canReturnNull: true, attachments?: JsonAttachment[]): Promise<string | null>;
8
- export declare function isSafeForHTML(url: string, options: TranscriptOptionsBase): Promise<boolean>;
9
- export declare function resolveAllIps(host: string): Promise<LookupResult[]>;
@@ -1,158 +1,26 @@
1
- import net from "node:net";
2
- import { CustomWarn } from "./customMessages.js";
3
- import { Resolver } from "dns/promises";
4
1
  export const FALLBACK_PIXEL = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
5
- const DNS_SERVERS = ["1.1.1.1", "8.8.8.8"];
6
- const DNS_LOOKUP_TIMEOUT = 5000;
7
- const TRUSTED_DISCORD_HOSTS = ["discordapp.com", "discordapp.net"];
2
+ const HEX_REGEX = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
3
+ const DEFAULT_COLOR = "#000000";
4
+ const SANITIZE_REGEX = /[&<>"']/g;
5
+ const SANITIZE_MAP = {
6
+ "&": "&amp;",
7
+ "<": "&lt;",
8
+ ">": "&gt;",
9
+ '"': "&quot;",
10
+ "'": "&#39;",
11
+ };
8
12
  export function sanitize(text) {
9
- return text
10
- .replace(/&/g, "&amp;")
11
- .replace(/</g, "&lt;")
12
- .replace(/>/g, "&gt;")
13
- .replace(/"/g, "&quot;")
14
- .replace(/'/g, "&#39;");
13
+ return text.replace(SANITIZE_REGEX, ch => SANITIZE_MAP[ch]);
15
14
  }
16
15
  export function isValidHexColor(colorInput, canReturnNull) {
17
16
  if (!colorInput)
18
- return null;
19
- const hexColorRegex = /^#([A-Fa-f0-9]{3,4}|[A-Fa-f0-9]{6}([A-Fa-f0-9]{2})?)$/;
17
+ return canReturnNull ? null : DEFAULT_COLOR;
20
18
  let color = colorInput.trim();
21
- if (/^[A-Fa-f0-9]+$/.test(color)) {
22
- color = "#" + color;
23
- }
24
- if (hexColorRegex.test(color)) {
25
- return color;
26
- }
27
- if (canReturnNull) {
28
- return null;
29
- }
30
- return "#000000"; // Falback to a default hexColor if can't be null
31
- }
32
- export async function resolveImageURL(url, options, canReturnNull, attachments) {
33
- if (!url)
34
- return null;
35
- // Resolve attachment:// references to actual attachment URL
36
- if (url.startsWith("attachment://")) {
37
- const name = url.slice("attachment://".length).trim();
38
- const found = attachments?.find(a => a.name === name);
39
- if (found && await isSafeForHTML(found.url, options))
40
- return found.url;
41
- return FALLBACK_PIXEL;
42
- }
43
- if (await isSafeForHTML(url, options))
44
- return url;
45
- if (canReturnNull)
46
- return null;
47
- return FALLBACK_PIXEL;
48
- }
49
- export async function isSafeForHTML(url, options) {
50
- const { safeMode, disableWarnings } = options;
51
- if (!safeMode)
52
- return true;
53
- let u;
54
- try {
55
- u = new URL(url);
56
- }
57
- catch {
58
- CustomWarn(`Unsafe URL rejected: Invalid URL format\nURL: ${url}`, disableWarnings);
59
- return false;
60
- }
61
- const host = u.hostname.toLowerCase();
62
- // If is from discord accept
63
- if (isTrustedDiscordHost(host))
64
- return true;
65
- // Don't accept if isn't https or http
66
- if (!["http:", "https:"].includes(u.protocol)) {
67
- CustomWarn(`Unsafe URL rejected: Invalid protocol "${u.protocol}"\nURL: ${url}`, disableWarnings);
68
- return false;
69
- }
70
- if (u.username || u.password) {
71
- CustomWarn(`Unsafe URL rejected: Contains username or password\nURL: ${url}`, disableWarnings);
72
- return false;
73
- }
74
- if (u.port && !["80", "443", ""].includes(u.port)) {
75
- CustomWarn(`Unsafe URL rejected: Invalid port "${u.port}"\nURL: ${url}`, disableWarnings);
76
- return false;
77
- }
78
- // Block localhost and loopback addresses (SSRF protection)
79
- if (host === "localhost" ||
80
- host === "127.0.0.1" ||
81
- host.startsWith("0.")) {
82
- CustomWarn(`Unsafe URL rejected: Blacklisted host "${host}"\nURL: ${url}`, disableWarnings);
83
- return false;
84
- }
85
- let ips;
86
- try {
87
- ips = await resolveAllIps(host);
88
- }
89
- catch (e) {
90
- CustomWarn(`Unsafe URL rejected: DNS lookup failed or timed out for host "${host}". Error: ${e.message}\nURL: ${url}`, disableWarnings);
91
- return false;
92
- }
93
- // Block private/internal network IPs (SSRF protection)
94
- for (const ip of ips) {
95
- if (isPrivateIp(ip.address)) {
96
- CustomWarn(`Unsafe URL rejected: Private IP address "${ip.address}" resolved for host "${host}"\nURL: ${url}`, disableWarnings);
97
- return false;
98
- }
99
- }
100
- const path = u.pathname.toLowerCase();
101
- // External SVGs can execute scripts → allow only from Discord CDN
102
- if (path.endsWith(".svg")) {
103
- CustomWarn(`Unsafe URL rejected: External SVG not from Discord CDN\nURL: ${url}`, disableWarnings);
104
- return false;
105
- }
106
- return true;
107
- }
108
- export async function resolveAllIps(host) {
109
- const resolver = new Resolver();
110
- resolver.setServers(DNS_SERVERS);
111
- const lookupPromise = (async () => {
112
- const results = [];
113
- const [v4, v6] = await Promise.allSettled([
114
- resolver.resolve4(host),
115
- resolver.resolve6(host)
116
- ]);
117
- if (v4.status === "fulfilled") {
118
- for (const ip of v4.value) {
119
- results.push({ address: ip, family: 4 });
120
- }
121
- }
122
- if (v6.status === "fulfilled") {
123
- for (const ip of v6.value) {
124
- results.push({ address: ip, family: 6 });
125
- }
126
- }
127
- if (results.length === 0) {
128
- throw new Error(`No DNS records found for ${host}`);
129
- }
130
- return results;
131
- })();
132
- const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error(`DNS timeout for ${host}`)), DNS_LOOKUP_TIMEOUT));
133
- return Promise.race([lookupPromise, timeoutPromise]);
134
- }
135
- function isPrivateIp(ip) {
136
- if (!net.isIP(ip))
137
- return true;
138
- // Detects private IPv6 ranges
139
- if (ip.includes(":")) {
140
- return (ip === "::1" ||
141
- ip.startsWith("fc") ||
142
- ip.startsWith("fd") ||
143
- ip.startsWith("fe80"));
144
- }
145
- const parts = ip.split(".").map(Number);
146
- // Detects private IPv4 ranges
147
- return (parts[0] === 10 ||
148
- parts[0] === 127 ||
149
- (parts[0] === 192 && parts[1] === 168) ||
150
- (parts[0] === 169 && parts[1] === 254) ||
151
- (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31));
152
- }
153
- function isTrustedDiscordHost(host) {
154
- host = host.toLowerCase();
155
- return TRUSTED_DISCORD_HOSTS.some(trusted => {
156
- return host === trusted || host.endsWith("." + trusted);
157
- });
19
+ // Add '#' if don't come with
20
+ if (!color.startsWith('#'))
21
+ color = `#${color}`;
22
+ const isValid = HEX_REGEX.test(color);
23
+ if (isValid)
24
+ return color.toLowerCase();
25
+ return canReturnNull ? null : DEFAULT_COLOR; // Falback to a default hexColor if can't be null
158
26
  }
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- import { ConvertTranscriptOptions, ReturnTypeBase, OutputTypeBase } from "./types/types.js";
2
- export * from './types/types.js';
3
- export { CustomError, CustomWarn } from "./core/customMessages.js";
4
- export { output as outputBase } from "./core/output.js";
1
+ import { ConvertTranscriptOptions, ReturnTypeBase, OutputTypeBase } from "@/types";
2
+ export * from '@/types';
3
+ export { CustomError, CustomWarn } from "@/core/customMessages.js";
4
+ export { output as outputBase } from "@/core/output.js";
5
+ export { FALLBACK_PIXEL, isValidHexColor, sanitize } from "@/core/sanitizer.js";
5
6
  /**
6
7
  * Converts a JSON transcript string into an HTML transcript.
7
8
  * Depending on the `returnType` option, this function can return a `string`, a `Buffer`, a `Stream`, or an `Uploadable` object.
package/dist/index.js CHANGED
@@ -1,9 +1,10 @@
1
- import { CustomError } from "./core/customMessages.js";
2
- import { output } from "./core/output.js";
3
- import { ReturnTypeBase, ReturnFormat } from "./types/types.js";
4
- export * from './types/types.js';
5
- export { CustomError, CustomWarn } from "./core/customMessages.js";
6
- export { output as outputBase } from "./core/output.js";
1
+ import { CustomError } from "@/core/customMessages.js";
2
+ import { output } from "@/core/output.js";
3
+ import { ReturnTypeBase, ReturnFormat } from "@/types";
4
+ export * from '@/types';
5
+ export { CustomError, CustomWarn } from "@/core/customMessages.js";
6
+ export { output as outputBase } from "@/core/output.js";
7
+ export { FALLBACK_PIXEL, isValidHexColor, sanitize } from "@/core/sanitizer.js";
7
8
  /**
8
9
  * Converts a JSON transcript string into an HTML transcript.
9
10
  * Depending on the `returnType` option, this function can return a `string`, a `Buffer`, a `Stream`, or an `Uploadable` object.
@@ -1,11 +1,40 @@
1
- import { markdownToHTML } from "../../core/markdown.js";
1
+ import { markdownToHTML } from "@/core/markdown.js";
2
2
  import { JsonButtonStyle, JsonComponentType } from "../../types/types.js";
3
3
  import { ACTIONROW_CSS, ATTACHMENT_CSS, BUTTON_CSS, COMPONENTS_CSS, COMPONENTSV2_CSS, DEFAULT_CSS, EMBED_CSS, MESSAGE_CSS, POLL_CSS, POLL_RESULT_EMBED_CSS, REACTIONS_CSS } from "./css.js";
4
4
  import { script } from "./js.js";
5
- import packageJson from "./../../../package.json" with { type: 'json' };
6
- import { sanitize } from "../../core/sanitizer.js";
7
- const COUNT_UNIT = ["KB", "MB", "GB", "TB"];
8
- const BUTTON_COLOR = ["black", "#5865f2", "#323538", "#32c05f", "#be3638", "#323538", "#5865f2"];
5
+ import packageJson from "package.json" with { type: 'json' };
6
+ import { sanitize } from "@/core/sanitizer.js";
7
+ import highlightHash from "@/assets/highlightJsHash.json" with { type: 'json' };
8
+ import transcriptHash from "@/assets/transcriptHash.json" with { type: 'json' };
9
+ const FILE_SIZE_UNIT = ["KB", "MB", "GB", "TB"];
10
+ const FILE_SIZE_THRESHOLD = 512;
11
+ const BUTTON_COLORS = {
12
+ 1: "#5865f2", // Primary
13
+ 2: "#323538", // Secondary
14
+ 3: "#32c05f", // Sucess
15
+ 4: "#be3638", // Danger
16
+ 5: "#323538", // Link
17
+ 6: "#5865f2" // Premium
18
+ };
19
+ const ICONS = {
20
+ Reply: "reply-icon",
21
+ Download: "download-icon",
22
+ Link: "link-icon",
23
+ };
24
+ const TEXT = {
25
+ TranscriptFooter: 'Transcript generated by <a href="https://github.com/HenriqueMairesse/discord-message-transcript">discord-message-transcript</a>',
26
+ Spoiler: "SPOILER",
27
+ File: {
28
+ DefaultName: "attachment",
29
+ Unavailable: {
30
+ Video: "Video unavailable",
31
+ Audio: "Audio unavailable",
32
+ }
33
+ },
34
+ Pool: {
35
+ Closed: " • Poll closed",
36
+ }
37
+ };
9
38
  export class Html {
10
39
  data;
11
40
  dateFormat;
@@ -80,7 +109,7 @@ export class Html {
80
109
  <div class="messageDiv" id="${sanitize(message.id)}" data-author-id="${sanitize(message.authorId)}">
81
110
  ${message.references && message.references.messageId ?
82
111
  `<div class="messageReply" data-id="${sanitize(message.references.messageId)}">
83
- <svg class="messageReplySvg"><use href="#reply-icon"></use></svg>
112
+ <svg class="messageReplySvg"><use href="#${ICONS.Reply}"></use></svg>
84
113
  <img class="messageReplyImg" src="">
85
114
  <div class="replyBadges"></div>
86
115
  <div class="messageReplyText"></div>
@@ -127,9 +156,9 @@ export class Html {
127
156
  <meta charset="UTF-8" />
128
157
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
129
158
  <title>${sanitize(options.fileName)}</title>
130
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.11.1/build/styles/atom-one-dark.min.css">
131
- <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.11.1/build/highlight.min.js"></script>
132
- ${options.selfContained ? `<style>${cssContent}</style>` : `<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/discord-message-transcript-base@${packageJson.version}/dist/assets/style.css">`}
159
+ <link rel="stylesheet" integrity="${highlightHash.style}" crossorigin="anonymous" href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.11.1/build/styles/atom-one-dark.min.css">
160
+ <script integrity="${highlightHash.script}" crossorigin="anonymous" src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.11.1/build/highlight.min.js"></script>
161
+ ${options.selfContained ? `<style>${cssContent}</style>` : `<link rel="stylesheet" integrity="${transcriptHash.style}" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/discord-message-transcript-base@${packageJson.version}/dist/assets/style.css">`}
133
162
  </head>
134
163
  <body>
135
164
  ${this.svgBuilder()}
@@ -141,12 +170,12 @@ export class Html {
141
170
  </main>
142
171
  ${options.watermark ? `<footer>
143
172
  <br>
144
- <div style="padding: 1rem 0; font-weight: 700; text-align: center; font-size: 1.5rem; background-color: #2b2d31;">Transcript generated by <a href="https://github.com/HenriqueMairesse/discord-message-transcript">discord-message-transcript</a></div>
173
+ <div style="padding: 1rem 0; font-weight: 700; text-align: center; font-size: 1.5rem; background-color: #2b2d31;">${TEXT.TranscriptFooter}</div>
145
174
  </footer> ` : ""}
146
175
  <script id="authorData" type="application/json">
147
176
  ${JSON.stringify({ authors: this.data.authors })}
148
177
  </script>
149
- ${options.selfContained ? `<script>${jsContent}</script>` : `<script src="https://cdn.jsdelivr.net/npm/discord-message-transcript-base@${packageJson.version}/dist/assets/script.js"></script>`}
178
+ ${options.selfContained ? `<script>${jsContent}</script>` : `<script integrity="${transcriptHash.script}" crossorigin="anonymous" src="https://cdn.jsdelivr.net/npm/discord-message-transcript-base@${packageJson.version}/dist/assets/script.js"></script>`}
150
179
  </body>
151
180
  </html>
152
181
  `;
@@ -155,7 +184,7 @@ export class Html {
155
184
  const totalVotes = poll.answers.reduce((acc, answer) => acc + answer.count, 0);
156
185
  let footerText = `${totalVotes} votes`;
157
186
  if (poll.isFinalized) {
158
- footerText += ` • Poll closed`;
187
+ footerText += TEXT.Pool.Closed;
159
188
  }
160
189
  else if (poll.expiry) {
161
190
  footerText += ` • ${poll.expiry}`;
@@ -263,7 +292,7 @@ export class Html {
263
292
  html = `<video class="attachmentVideo" controls src="${attachment.url}"></video>`;
264
293
  }
265
294
  else {
266
- html = `<div class="attachmentVideoUnavailable">Video unavailable</div>`;
295
+ html = `<div class="attachmentVideoUnavailable">${TEXT.File.Unavailable.Video}</div>`;
267
296
  }
268
297
  }
269
298
  else if (attachment.contentType?.startsWith('audio/')) {
@@ -271,28 +300,28 @@ export class Html {
271
300
  html = `<audio class="attachmentAudio" controls src="${attachment.url}"></audio>`;
272
301
  }
273
302
  else {
274
- html = `<div class="attachmentAudioUnavailable">Audio unavailable</div>`;
303
+ html = `<div class="attachmentAudioUnavailable">${TEXT.File.Unavailable.Audio}</div>`;
275
304
  }
276
305
  }
277
306
  else {
278
307
  let fileSize = attachment.size / 1024;
279
308
  let count = 0;
280
- while (fileSize > 512 && count < COUNT_UNIT.length - 1) {
309
+ while (fileSize > FILE_SIZE_THRESHOLD && count < FILE_SIZE_UNIT.length - 1) {
281
310
  fileSize = fileSize / 1024;
282
311
  count++;
283
312
  }
284
313
  html = `
285
314
  <div class="attachmentFile">
286
315
  <div class="attachmentFileInfo">
287
- <p class="attachmentFileName">${attachment.name ? sanitize(attachment.name) : 'attachment'}</p>
288
- <div class="attachmentFileSize">${fileSize.toFixed(2)} ${COUNT_UNIT[count]}</div>
316
+ <p class="attachmentFileName">${attachment.name ? sanitize(attachment.name) : TEXT.File.DefaultName}</p>
317
+ <div class="attachmentFileSize">${fileSize.toFixed(2)} ${FILE_SIZE_UNIT[count]}</div>
289
318
  </div>
290
319
  ${attachment.url != "" ?
291
320
  `<a class="attachmentDownload" href="${attachment.url}" target="_blank">
292
- <svg class="attachmentDownloadIcon"><use href="#download-icon"></use></svg>
321
+ <svg class="attachmentDownloadIcon"><use href="#${ICONS.Download}"></use></svg>
293
322
  </a>` :
294
323
  `<span class="attachmentDownload">
295
- <svg class="attachmentDownloadIcon"><use href="#download-icon"></use></svg>
324
+ <svg class="attachmentDownloadIcon"><use href="#${ICONS.Download}"></use></svg>
296
325
  </span>`}
297
326
  </div>
298
327
  `;
@@ -325,22 +354,22 @@ export class Html {
325
354
  case JsonComponentType.File: {
326
355
  let fileSize = (component.size ?? 0) / 1024;
327
356
  let count = 0;
328
- while (fileSize > 512 && count < COUNT_UNIT.length - 1) {
357
+ while (fileSize > FILE_SIZE_THRESHOLD && count < FILE_SIZE_UNIT.length - 1) {
329
358
  fileSize = fileSize / 1024;
330
359
  count++;
331
360
  }
332
361
  const html = `
333
362
  <div class="attachmentFile">
334
363
  <div class="attachmentFileInfo">
335
- <p class="attachmentFileName">${component.fileName ? sanitize(component.fileName) : 'file'}</p>
336
- <div class="attachmentFileSize">${fileSize.toFixed(2)} ${COUNT_UNIT[count]}</div>
364
+ <p class="attachmentFileName">${component.fileName ? sanitize(component.fileName) : TEXT.File.DefaultName}</p>
365
+ <div class="attachmentFileSize">${fileSize.toFixed(2)} ${FILE_SIZE_UNIT[count]}</div>
337
366
  </div>
338
367
  ${component.url != "" ?
339
368
  `<a class="attachmentDownload" href="${component.url}" target="_blank">
340
- <svg class="attachmentDownloadIcon"><use href="#download-icon"></use></svg>
369
+ <svg class="attachmentDownloadIcon"><use href="#${ICONS.Download}"></use></svg>
341
370
  </a>` :
342
371
  `<span class="attachmentDownload">
343
- <svg class="attachmentDownloadIcon"><use href="#download-icon"></use></svg>
372
+ <svg class="attachmentDownloadIcon"><use href="#${ICONS.Download}"></use></svg>
344
373
  </span>`}
345
374
  </div>
346
375
  `;
@@ -365,12 +394,11 @@ export class Html {
365
394
  <div class="sectionLeft">
366
395
  ${this.componentBuilder(message, component.components)}
367
396
  </div>
368
- <div class="sectionRight">
397
+ ${component.accessory ? `<div class="sectionRight">
369
398
  ${component.accessory.type == JsonComponentType.Button ? this.buttonBuilder(component.accessory)
370
- : component.accessory.type == JsonComponentType.Thumbnail ? this.spoilerAttachmentBuilder(component.accessory.spoiler, `
371
- <img class="sectionThumbnail" src="${component.accessory.media.url}">
372
- `) : ""}
373
- </div>
399
+ : component.accessory.type == JsonComponentType.Thumbnail ? this.spoilerAttachmentBuilder(component.accessory.spoiler, `<img class="sectionThumbnail" src="${component.accessory.media.url}">`)
400
+ : ""}
401
+ </div>` : ""}
374
402
  </div>
375
403
  `;
376
404
  }
@@ -387,12 +415,12 @@ export class Html {
387
415
  }
388
416
  buttonBuilder(button) {
389
417
  return `
390
- <div class="button" style="background-color: ${BUTTON_COLOR[button.style]}">
418
+ <div class="button" style="background-color: ${BUTTON_COLORS[button.style]}">
391
419
  ${button.style == JsonButtonStyle.Link && button.url ? `
392
420
  <a class="buttonLink" href="${sanitize(button.url)}" target="_blank">
393
421
  ${button.emoji ? `<p class="buttonEmoji">${sanitize(button.emoji)}</p>` : ""}
394
422
  ${button.label ? `<p class="buttonLabel">${sanitize(button.label)}</p>` : ""}
395
- <svg class="buttonLinkIcon"><use href="#link-icon"></use></svg>
423
+ <svg class="buttonLinkIcon"><use href="#${ICONS.Link}"></use></svg>
396
424
  </a>` : `
397
425
  ${button.emoji ? `<p class="buttonEmoji">${sanitize(button.emoji)}</p>` : ""}
398
426
  ${button.label ? `<p class="buttonLabel">${sanitize(button.label)}</p>` : ""}
@@ -432,22 +460,22 @@ export class Html {
432
460
  `;
433
461
  }
434
462
  spoilerAttachmentBuilder(spoiler, html) {
435
- return spoiler ? `<div class="spoilerAttachment"><div class="spoilerAttachmentOverlay">SPOILER</div><div class="spoilerAttachmentContent">${html}</div></div>` : html;
463
+ return spoiler ? `<div class="spoilerAttachment"><div class="spoilerAttachmentOverlay">${TEXT.Spoiler}</div><div class="spoilerAttachmentContent">${html}</div></div>` : html;
436
464
  }
437
465
  svgBuilder() {
438
466
  const { options } = this.data;
439
467
  return `
440
468
  <svg style="display: none;">
441
469
  <defs>
442
- <symbol id="reply-icon" viewBox="0 0 16 16" fill="none">
470
+ <symbol id="${ICONS.Reply}" viewBox="0 0 16 16" fill="none">
443
471
  <g transform="rotate(90 8 8)">
444
472
  <path d="M6 2V9C6 11.5 8.5 14 11 14H14" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
445
473
  </g>
446
474
  </symbol>
447
- ${options.includeAttachments ? `<symbol id="download-icon" viewBox="0 -960 960 960">
475
+ ${options.includeAttachments ? `<symbol id="${ICONS.Download}" viewBox="0 -960 960 960">
448
476
  <path d="m720-120 160-160-56-56-64 64v-167h-80v167l-64-64-56 56 160 160ZM560 0v-80h320V0H560ZM240-160q-33 0-56.5-23.5T160-240v-560q0-33 23.5-56.5T240-880h280l240 240v121h-80v-81H480v-200H240v560h240v80H240Zm0-80v-560 560Z"/>
449
477
  </symbol> ` : ""}
450
- ${options.includeButtons ? `<symbol id="link-icon" viewBox="0 -960 960 960" fill="#e3e3e3">
478
+ ${options.includeButtons ? `<symbol id="${ICONS.Link}" viewBox="0 -960 960 960" fill="#e3e3e3">
451
479
  <path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h280v80H200v560h560v-280h80v280q0 33-23.5 56.5T760-120H200Zm188-212-56-56 372-372H560v-80h280v280h-80v-144L388-332Z"/>
452
480
  </symbol>` : ""}
453
481
  </defs>
@@ -19,13 +19,6 @@ export type JsonV2Component = JsonContainerComponent | JsonFileComponent | JsonM
19
19
  * A hexColor type
20
20
  */
21
21
  export type hexColor = `#${string}`;
22
- /**
23
- * Result from dns.lookup
24
- */
25
- export type LookupResult = {
26
- address: string;
27
- family: 4 | 6;
28
- };
29
22
  /**
30
23
  * A union of all possible timestamp styles for formatting dates and times in Discord.
31
24
  */
@@ -166,6 +159,7 @@ export interface TranscriptOptionsBase {
166
159
  safeMode: boolean;
167
160
  /**
168
161
  * Whether to save images as base64.
162
+ * Only saves images with less than 25mb for safety - 25mb is a good security size to an image
169
163
  */
170
164
  saveImages: boolean;
171
165
  /**
@@ -651,7 +645,7 @@ export interface JsonSectionComponent {
651
645
  /**
652
646
  * The accessory component on the right side of the section.
653
647
  */
654
- accessory: JsonButtonComponent | JsonThumbnailComponent;
648
+ accessory: JsonButtonComponent | JsonThumbnailComponent | null;
655
649
  /**
656
650
  * The components inside the section.
657
651
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "discord-message-transcript-base",
3
- "version": "1.3.1-dev.3.35",
3
+ "version": "1.3.2-dev.0.49",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -28,15 +28,11 @@
28
28
  "url": "https://github.com/HenriqueMairesse/discord-message-transcript/issues"
29
29
  },
30
30
  "homepage": "https://github.com/HenriqueMairesse/discord-message-transcript#readme",
31
- "devDependencies": {
32
- "@types/node": "^25.0.6",
33
- "typescript": "^5.9.3"
34
- },
35
31
  "publishConfig": {
36
32
  "access": "public"
37
33
  },
38
34
  "scripts": {
39
- "test": "echo \"Error: no test specified\" && exit 1",
40
- "build": "tsc && node scripts/copy.js"
35
+ "clean": "rimraf dist",
36
+ "build": "pnpm run clean && node scripts/updateHashTranscript.js && tsc -b && node scripts/copy.js"
41
37
  }
42
38
  }
@@ -1,3 +0,0 @@
1
- export declare class CustomError extends Error {
2
- constructor(message: string);
3
- }
@@ -1,7 +0,0 @@
1
- export class CustomError extends Error {
2
- constructor(message) {
3
- super(`[discord-message-transcript] ${message}`);
4
- this.name = 'DiscordMessageTranscriptError';
5
- Object.setPrototypeOf(this, CustomError.prototype);
6
- }
7
- }
@@ -1,2 +0,0 @@
1
- import { ReturnType, ReturnTypeBase } from "../types/types.js";
2
- export declare function returnTypeMapper(type: ReturnType): ReturnTypeBase;
@@ -1,16 +0,0 @@
1
- import { ReturnType, ReturnTypeBase } from "../types/types.js";
2
- import { CustomError } from "./error.js";
3
- export function returnTypeMapper(type) {
4
- switch (type) {
5
- case ReturnType.Buffer:
6
- return ReturnTypeBase.Buffer;
7
- case ReturnType.Stream:
8
- return ReturnTypeBase.Stream;
9
- case ReturnType.String:
10
- return ReturnTypeBase.String;
11
- case ReturnType.Uploadable:
12
- return ReturnTypeBase.Uploadable;
13
- default:
14
- throw new CustomError(`Can't convert ReturnType.Attachment to ReturnTypeBase!`);
15
- }
16
- }
@@ -1 +0,0 @@
1
- export declare const MINIFIED_CSS = "body{background-color:#3a3c43;color:#dbdee1;font-family:\"Whitney\",\"Helvetica Neue\",Helvetica,Arial,sans-serif;margin:0;padding:0;width:100%}header{height:fit-content;border-bottom:2px solid black;margin-top:2rem;padding-left:2rem;padding-bottom:1rem;display:flex;flex-direction:column;display:flex;flex-direction:row}a{text-decoration:none;color:#1E90FF}p{margin:0}h1{margin:.5rem 0}h2{margin:.3rem 0}h3{margin:.15rem}h4{margin:0}code{border:1px solid #202225;border-radius:.25rem}blockquote{margin:.5rem 0;border-left:.25rem solid #4f545c;padding:.4rem .6rem;border-radius:.25rem;color:#9f9fa6}.c1{display:flex;align-items:baseline;gap:.5rem}.c2{background-color:#5865f2;color:white;font-weight:600;font-size:80%;padding:.1rem .35rem;border-radius:.25rem;letter-spacing:.03rem;height:fit-content;width:fit-content;align-self:flex-start}.c3{background-color:#747F8D50;color:white;font-weight:600;font-size:70%;padding:.1rem .35rem;border-radius:.25rem;letter-spacing:.03rem;height:fit-content;width:fit-content;align-self:center}.c4{background-color:#5664fa41;padding:.2rem;border-radius:.25rem;transition:background-color .2s ease}.c4:hover{background-color:#5664fa7e}.c5{width:7rem;height:7rem;border-radius:50%;background-color:#4f545c;display:flex;align-items:center;justify-content:center;font-size:3rem;font-weight:600}.c6{display:flex;flex-direction:column;gap:.2rem;padding:.5rem;border-radius:1rem}.c6.highlight,.c6:hover{background-color:#40434b;transition:background-color .3s ease-in-out}.c7{display:flex;flex-direction:row;gap:1rem;padding:.5rem;border-radius:.25rem}.c8{width:3.5rem;height:3.5rem;border-radius:50%}.c9{display:flex;flex-direction:column;gap:.25rem}.c10{display:flex;flex-direction:row;gap:.75rem}.c11{margin:0}.c12{color:#999;font-size:77.5%;align-self:center}.c13{line-height:1.5}.c14{white-space:pre-wrap}.c15{font-size:85%;color:#808080}.c16{display:inline-block;background-color:#202225;color:#202225;padding:0 .2rem;border-radius:.2rem;cursor:pointer;transition:background-color .1s ease-in-out,color .1s ease-in-out}.c16.revealed{background-color:transparent;color:inherit}.c17{display:flex;align-items:center;gap:.5rem;font-size:.8rem;color:#b5bac1;cursor:pointer;margin-left:2rem}.c18{flex-shrink:0;width:2.25rem;height:2.25rem;color:#b5bac1}.c19{width:1.75rem;height:1.75rem;border-radius:50%;flex-shrink:0}.c20{font-weight:600;color:#dbdee1;margin-right:.3rem}.c21{background-color:#5865f2;color:white;font-weight:600;font-size:70%;padding:.1rem .3rem;border-radius:.25rem;letter-spacing:.03rem;height:fit-content;align-self:center;flex-shrink:0}.c22{flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#b5bac1;font-size:.75rem}.c23{background-color:#2b2d31;border:.15rem solid #2b2d31;border-left:.25rem solid;border-radius:.25rem;padding:.5rem .75rem;margin-top:.5rem;display:flex;flex-direction:column;gap:.5rem;max-width:40rem;min-width:30rem}.c23 a{color:#00aff4;text-decoration:none}.c23 a:hover{text-decoration:underline}.c24{display:flex;justify-content:space-between;align-items:flex-start;gap:.5rem}.c25{display:flex;flex-direction:column;gap:.25rem}.c26{display:flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:500;color:#fff;margin-bottom:.5rem}.c27{width:1.5rem;height:1.5rem;border-radius:50%}.c28{color:#fff;font-weight:500}.c29{font-size:1rem;font-weight:700;color:#fff;margin-bottom:.75rem}.c30{max-width:80px;max-height:80px;object-fit:contain;border-radius:.25rem;flex-shrink:0}.c31{font-size:.875rem;color:#dcddde}.c32{display:flex;flex-wrap:wrap;gap:.5rem}.c33{flex:1;min-width:150px}.c34{font-size:.75rem;font-weight:700;color:#fff;margin-bottom:.25rem}.c35{font-size:.875rem;color:#dcddde}.c36{margin-top:.5rem;max-width:100%;height:auto}.c36 img{max-width:100%;max-height:300px;object-fit:contain;border-radius:.25rem}.c37{display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:#999;margin-top:.5rem}.c38{width:1.25rem;height:1.25rem;border-radius:50%}.c39{color:#999}.c40,.c41{max-width:400px;height:auto;border-radius:.25rem;margin-top:.5rem}.c42{width:300px;margin-top:.5rem}.c43{background-color:#2b2d31;border:1px solid #202225;border-radius:.75rem;padding:.75rem;display:flex;align-items:center;gap:.75rem;max-width:400px;margin-top:.5rem;width:fit-content}.c44{width:2.5rem;height:2.5rem;fill:#b9bbbe;flex-shrink:0}.c45{display:flex;flex-direction:column;gap:.1rem;overflow:hidden;flex-grow:1}.c46{color:#fff;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.c47{font-size:.75rem;color:#72767d}.c48{display:block;flex-shrink:0}.c49{width:1.5rem;height:1.5rem;fill:#b9bbbe;transition:fill .2s ease}.c48:hover .c49{fill:#fff}.c50{position:relative;display:inline-block;border-radius:.5rem;overflow:hidden;cursor:pointer}.c50 .c51{filter:blur(64px);pointer-events:none;transition:filter .2s ease;width:100%;height:100%}.c50 .c52{position:absolute;inset:0;background:rgba(32,34,37,.85);color:#fff;font-weight:600;letter-spacing:.05em;display:flex;align-items:center;justify-content:center;z-index:2;user-select:none}.c50.revealed .c51{filter:none;pointer-events:auto}.c50.revealed .c52{display:none}.c53{display:flex;gap:.5rem;margin-top:.5rem}.c54{display:flex;align-items:center;gap:.5rem;padding:0 .8rem;height:2.5rem;border-radius:.6rem;color:white;font-weight:600;cursor:pointer;transition:filter .2s ease}.c54:hover{filter:brightness(1.1)}.c55{font-size:1.25rem}.c56{font-size:.875rem}.c57{display:flex;align-items:center;gap:.5rem;color:white;font-weight:600}.c58{width:1.25rem;height:1.25rem}.c59{width:100%;position:relative}.c60{background-color:#2b2d31;border:1px solid #202225;border-radius:.75rem;padding:.75rem;min-width:17.5rem;cursor:pointer;user-select:none}.c61{color:#808080}.c62{display:none;position:absolute;top:100%;left:0;width:100%;background-color:#2b2d31;border:1px solid #202225;border-radius:1rem;margin-top:.25rem;padding:.5rem;z-index:10;box-sizing:border-box}.c59.active .c62{display:block}.c63{display:flex;align-items:center;gap:.5rem;padding:.75rem;border-radius:.75rem;cursor:pointer;transition:background-color .2s ease}.c63:hover{background-color:#4f545c}.c64{font-size:1.25rem}.c65{display:flex;flex-direction:column}.c66{font-weight:500}.c67{font-size:.75rem;color:#808080}.c68{display:flex;flex-wrap:wrap;gap:.25rem;width:100%;max-width:40rem;aspect-ratio:1/1;border:1px solid #202225;padding:.35rem;overflow:hidden}.c69{flex-grow:1;flex-basis:0;min-width:30%;display:flex}.c70{width:100%;height:100%;object-fit:cover;display:block;border-radius:1rem}.c71{background-color:#2b2d31;border-radius:.5rem;padding:1rem;max-width:40rem;min-width:30rem;border-left:.25rem solid}.c72{display:flex;flex-direction:row;justify-content:space-between;padding:.5rem 0}.c73{margin-right:.5rem;margin-left:1rem}.c74{width:5rem;height:5rem;border-radius:.5rem}.c75{padding:.5rem 0}.c76{border:1px solid #808080}.c77{background-color:#2b2d31;border-radius:.5rem;padding:1rem;margin-top:.5rem;max-width:40rem;min-width:25rem}.c78{font-size:1.1rem;font-weight:700;margin-bottom:1rem;display:flex;align-items:center;gap:.5rem}.c79{display:flex;flex-direction:column;gap:.5rem}.c80{background-color:#3a3c42;border-radius:.3rem;padding:.75rem;cursor:pointer;border:1px solid transparent;transition:border-color .2s ease;position:relative;overflow:hidden}.c80:hover{border-color:#4d515a}.c81{position:absolute;top:0;left:0;height:100%;background-color:#5664fa7a;border-radius:.2rem;z-index:1}.c82{position:relative;z-index:2;display:flex;align-items:center;justify-content:space-between}.c83{display:flex;align-items:center;gap:.5rem}.c84{font-size:1.25rem}.c85{font-weight:500}.c86{font-size:.8rem;color:#b5bac1;font-weight:700}.c87{margin-top:1rem;font-size:.75rem;color:#949ba4}.c88{background-color:#2b2d31;border-radius:.5rem;padding:1rem;margin-top:.5rem;border:1px solid #3a3c42;min-width:20rem;max-width:40rem;display:flex;flex-direction:row;justify-content:space-between}.c89{display:flex;align-items:center;gap:.5rem;font-size:1rem;font-weight:600;margin-bottom:.4rem}.c90{color:#57f287;font-size:1.1em}.c91{font-size:.9rem;color:#b5bac1}.c92{margin-right:.5rem;margin-left:1rem;align-self:center}.c93{background-color:black;color:white;padding:.5rem 1rem;border-radius:.3rem;text-decoration:none;font-weight:500;transition:background-color .2s ease;cursor:pointer}.c93:hover{filter:brightness(1.1)}.c94{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.5rem}.c95{align-items:center;background-color:#2b2d31;border:1px solid #3a3c42;border-radius:1rem;padding:.25rem .6rem;font-size:1rem;color:#dcddde;font-weight:700;cursor:pointer}.c95:hover{filter:brightness(1.1)}";
@@ -1 +0,0 @@
1
- export const MINIFIED_CSS = `body{background-color:#3a3c43;color:#dbdee1;font-family:"Whitney","Helvetica Neue",Helvetica,Arial,sans-serif;margin:0;padding:0;width:100%}header{height:fit-content;border-bottom:2px solid black;margin-top:2rem;padding-left:2rem;padding-bottom:1rem;display:flex;flex-direction:column;display:flex;flex-direction:row}a{text-decoration:none;color:#1E90FF}p{margin:0}h1{margin:.5rem 0}h2{margin:.3rem 0}h3{margin:.15rem}h4{margin:0}code{border:1px solid #202225;border-radius:.25rem}blockquote{margin:.5rem 0;border-left:.25rem solid #4f545c;padding:.4rem .6rem;border-radius:.25rem;color:#9f9fa6}.c1{display:flex;align-items:baseline;gap:.5rem}.c2{background-color:#5865f2;color:white;font-weight:600;font-size:80%;padding:.1rem .35rem;border-radius:.25rem;letter-spacing:.03rem;height:fit-content;width:fit-content;align-self:flex-start}.c3{background-color:#747F8D50;color:white;font-weight:600;font-size:70%;padding:.1rem .35rem;border-radius:.25rem;letter-spacing:.03rem;height:fit-content;width:fit-content;align-self:center}.c4{background-color:#5664fa41;padding:.2rem;border-radius:.25rem;transition:background-color .2s ease}.c4:hover{background-color:#5664fa7e}.c5{width:7rem;height:7rem;border-radius:50%;background-color:#4f545c;display:flex;align-items:center;justify-content:center;font-size:3rem;font-weight:600}.c6{display:flex;flex-direction:column;gap:.2rem;padding:.5rem;border-radius:1rem}.c6.highlight,.c6:hover{background-color:#40434b;transition:background-color .3s ease-in-out}.c7{display:flex;flex-direction:row;gap:1rem;padding:.5rem;border-radius:.25rem}.c8{width:3.5rem;height:3.5rem;border-radius:50%}.c9{display:flex;flex-direction:column;gap:.25rem}.c10{display:flex;flex-direction:row;gap:.75rem}.c11{margin:0}.c12{color:#999;font-size:77.5%;align-self:center}.c13{line-height:1.5}.c14{white-space:pre-wrap}.c15{font-size:85%;color:#808080}.c16{display:inline-block;background-color:#202225;color:#202225;padding:0 .2rem;border-radius:.2rem;cursor:pointer;transition:background-color .1s ease-in-out,color .1s ease-in-out}.c16.revealed{background-color:transparent;color:inherit}.c17{display:flex;align-items:center;gap:.5rem;font-size:.8rem;color:#b5bac1;cursor:pointer;margin-left:2rem}.c18{flex-shrink:0;width:2.25rem;height:2.25rem;color:#b5bac1}.c19{width:1.75rem;height:1.75rem;border-radius:50%;flex-shrink:0}.c20{font-weight:600;color:#dbdee1;margin-right:.3rem}.c21{background-color:#5865f2;color:white;font-weight:600;font-size:70%;padding:.1rem .3rem;border-radius:.25rem;letter-spacing:.03rem;height:fit-content;align-self:center;flex-shrink:0}.c22{flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#b5bac1;font-size:.75rem}.c23{background-color:#2b2d31;border:.15rem solid #2b2d31;border-left:.25rem solid;border-radius:.25rem;padding:.5rem .75rem;margin-top:.5rem;display:flex;flex-direction:column;gap:.5rem;max-width:40rem;min-width:30rem}.c23 a{color:#00aff4;text-decoration:none}.c23 a:hover{text-decoration:underline}.c24{display:flex;justify-content:space-between;align-items:flex-start;gap:.5rem}.c25{display:flex;flex-direction:column;gap:.25rem}.c26{display:flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:500;color:#fff;margin-bottom:.5rem}.c27{width:1.5rem;height:1.5rem;border-radius:50%}.c28{color:#fff;font-weight:500}.c29{font-size:1rem;font-weight:700;color:#fff;margin-bottom:.75rem}.c30{max-width:80px;max-height:80px;object-fit:contain;border-radius:.25rem;flex-shrink:0}.c31{font-size:.875rem;color:#dcddde}.c32{display:flex;flex-wrap:wrap;gap:.5rem}.c33{flex:1;min-width:150px}.c34{font-size:.75rem;font-weight:700;color:#fff;margin-bottom:.25rem}.c35{font-size:.875rem;color:#dcddde}.c36{margin-top:.5rem;max-width:100%;height:auto}.c36 img{max-width:100%;max-height:300px;object-fit:contain;border-radius:.25rem}.c37{display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:#999;margin-top:.5rem}.c38{width:1.25rem;height:1.25rem;border-radius:50%}.c39{color:#999}.c40,.c41{max-width:400px;height:auto;border-radius:.25rem;margin-top:.5rem}.c42{width:300px;margin-top:.5rem}.c43{background-color:#2b2d31;border:1px solid #202225;border-radius:.75rem;padding:.75rem;display:flex;align-items:center;gap:.75rem;max-width:400px;margin-top:.5rem;width:fit-content}.c44{width:2.5rem;height:2.5rem;fill:#b9bbbe;flex-shrink:0}.c45{display:flex;flex-direction:column;gap:.1rem;overflow:hidden;flex-grow:1}.c46{color:#fff;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.c47{font-size:.75rem;color:#72767d}.c48{display:block;flex-shrink:0}.c49{width:1.5rem;height:1.5rem;fill:#b9bbbe;transition:fill .2s ease}.c48:hover .c49{fill:#fff}.c50{position:relative;display:inline-block;border-radius:.5rem;overflow:hidden;cursor:pointer}.c50 .c51{filter:blur(64px);pointer-events:none;transition:filter .2s ease;width:100%;height:100%}.c50 .c52{position:absolute;inset:0;background:rgba(32,34,37,.85);color:#fff;font-weight:600;letter-spacing:.05em;display:flex;align-items:center;justify-content:center;z-index:2;user-select:none}.c50.revealed .c51{filter:none;pointer-events:auto}.c50.revealed .c52{display:none}.c53{display:flex;gap:.5rem;margin-top:.5rem}.c54{display:flex;align-items:center;gap:.5rem;padding:0 .8rem;height:2.5rem;border-radius:.6rem;color:white;font-weight:600;cursor:pointer;transition:filter .2s ease}.c54:hover{filter:brightness(1.1)}.c55{font-size:1.25rem}.c56{font-size:.875rem}.c57{display:flex;align-items:center;gap:.5rem;color:white;font-weight:600}.c58{width:1.25rem;height:1.25rem}.c59{width:100%;position:relative}.c60{background-color:#2b2d31;border:1px solid #202225;border-radius:.75rem;padding:.75rem;min-width:17.5rem;cursor:pointer;user-select:none}.c61{color:#808080}.c62{display:none;position:absolute;top:100%;left:0;width:100%;background-color:#2b2d31;border:1px solid #202225;border-radius:1rem;margin-top:.25rem;padding:.5rem;z-index:10;box-sizing:border-box}.c59.active .c62{display:block}.c63{display:flex;align-items:center;gap:.5rem;padding:.75rem;border-radius:.75rem;cursor:pointer;transition:background-color .2s ease}.c63:hover{background-color:#4f545c}.c64{font-size:1.25rem}.c65{display:flex;flex-direction:column}.c66{font-weight:500}.c67{font-size:.75rem;color:#808080}.c68{display:flex;flex-wrap:wrap;gap:.25rem;width:100%;max-width:40rem;aspect-ratio:1/1;border:1px solid #202225;padding:.35rem;overflow:hidden}.c69{flex-grow:1;flex-basis:0;min-width:30%;display:flex}.c70{width:100%;height:100%;object-fit:cover;display:block;border-radius:1rem}.c71{background-color:#2b2d31;border-radius:.5rem;padding:1rem;max-width:40rem;min-width:30rem;border-left:.25rem solid}.c72{display:flex;flex-direction:row;justify-content:space-between;padding:.5rem 0}.c73{margin-right:.5rem;margin-left:1rem}.c74{width:5rem;height:5rem;border-radius:.5rem}.c75{padding:.5rem 0}.c76{border:1px solid #808080}.c77{background-color:#2b2d31;border-radius:.5rem;padding:1rem;margin-top:.5rem;max-width:40rem;min-width:25rem}.c78{font-size:1.1rem;font-weight:700;margin-bottom:1rem;display:flex;align-items:center;gap:.5rem}.c79{display:flex;flex-direction:column;gap:.5rem}.c80{background-color:#3a3c42;border-radius:.3rem;padding:.75rem;cursor:pointer;border:1px solid transparent;transition:border-color .2s ease;position:relative;overflow:hidden}.c80:hover{border-color:#4d515a}.c81{position:absolute;top:0;left:0;height:100%;background-color:#5664fa7a;border-radius:.2rem;z-index:1}.c82{position:relative;z-index:2;display:flex;align-items:center;justify-content:space-between}.c83{display:flex;align-items:center;gap:.5rem}.c84{font-size:1.25rem}.c85{font-weight:500}.c86{font-size:.8rem;color:#b5bac1;font-weight:700}.c87{margin-top:1rem;font-size:.75rem;color:#949ba4}.c88{background-color:#2b2d31;border-radius:.5rem;padding:1rem;margin-top:.5rem;border:1px solid #3a3c42;min-width:20rem;max-width:40rem;display:flex;flex-direction:row;justify-content:space-between}.c89{display:flex;align-items:center;gap:.5rem;font-size:1rem;font-weight:600;margin-bottom:.4rem}.c90{color:#57f287;font-size:1.1em}.c91{font-size:.9rem;color:#b5bac1}.c92{margin-right:.5rem;margin-left:1rem;align-self:center}.c93{background-color:black;color:white;padding:.5rem 1rem;border-radius:.3rem;text-decoration:none;font-weight:500;transition:background-color .2s ease;cursor:pointer}.c93:hover{filter:brightness(1.1)}.c94{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.5rem}.c95{align-items:center;background-color:#2b2d31;border:1px solid #3a3c42;border-radius:1rem;padding:.25rem .6rem;font-size:1rem;color:#dcddde;font-weight:700;cursor:pointer}.c95:hover{filter:brightness(1.1)}`;