@texonom/nutils 1.1.4 → 1.2.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # nutils
2
+
3
+ > Useful utilities for working with Notion data. Isomorphic.
4
+
5
+ [![NPM](https://img.shields.io/npm/v/@texonom/nutils.svg)](https://www.npmjs.com/package/@texonom/nutils) [![Build Status](https://github.com/texonom/notion-node/actions/workflows/test.yml/badge.svg)](https://github.com/texonom/notion-node/actions/workflows/test.yml) [![Prettier Code Formatting](https://img.shields.io/badge/code_style-prettier-brightgreen.svg)](https://prettier.io)
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ pnpm i @texonom/nutils
11
+ ```
12
+
13
+ This package is compatible with both Node.js and client-side web usage.
14
+
15
+ ## Usage
16
+
17
+ ```ts
18
+ import { parsePageId } from '@texonom/nutils'
19
+
20
+ parsePageId('https://www.notion.so/Notion-Tests-067dd719a912471ea9a3ac10710e7fdf')
21
+ // '067dd719-a912-471e-a9a3-ac10710e7fdf'
22
+
23
+ parsePageId('About-d9ae0c6e7cad49a78e21d240cf2e3d04')
24
+ // 'd9ae0c6e-7cad-49a7-8e21-d240cf2e3d04'
25
+
26
+ parsePageId('About-d9ae0c6e7cad49a78e21d240cf2e3d04', { uuid: false })
27
+ // 'd9ae0c6e7cad49a78e21d240cf2e3d04'
28
+ ```
29
+
30
+ ## Docs
31
+
32
+ See the [full docs](https://github.com/texonom/notion-node).
@@ -1 +1 @@
1
- {"program":{"fileNames":["../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.esnext.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.1.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../ntypes/build/core.d.ts","../../ntypes/build/block.d.ts","../../ntypes/build/formula.d.ts","../../ntypes/build/user.d.ts","../../ntypes/build/collection.d.ts","../../ntypes/build/collection-view.d.ts","../../ntypes/build/maps.d.ts","../../ntypes/build/api.d.ts","../../ntypes/build/index.d.ts","../src/get-block-collection-id.ts","../src/get-text-content.ts","../src/get-block-title.ts","../src/get-page-table-of-contents.ts","../src/estimate-page-read-time.ts","../src/format-date.ts","../src/format-notion-date-time.ts","../../../node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.d.ts","../../../node_modules/.pnpm/p-queue@7.3.4/node_modules/p-queue/dist/queue.d.ts","../../../node_modules/.pnpm/p-queue@7.3.4/node_modules/p-queue/dist/options.d.ts","../../../node_modules/.pnpm/p-queue@7.3.4/node_modules/p-queue/dist/priority-queue.d.ts","../../../node_modules/.pnpm/p-queue@7.3.4/node_modules/p-queue/dist/index.d.ts","../src/id-to-uuid.ts","../src/parse-page-id.ts","../src/get-all-pages-in-space.ts","../src/get-block-icon.ts","../src/get-block-parent-page.ts","../src/get-page-property.ts","../src/normalize-title.ts","../src/uuid-to-id.ts","../src/get-canonical-page-id.ts","../src/get-date-value.ts","../src/get-page-breadcrumbs.ts","../src/get-page-content-block-ids.ts","../../../node_modules/.pnpm/is-url-superb@6.1.0/node_modules/is-url-superb/index.d.ts","../src/is-url.ts","../src/get-page-image-urls.ts","../src/get-page-title.ts","../../../node_modules/.pnpm/mem@9.0.2/node_modules/mem/dist/index.d.ts","../../../node_modules/.pnpm/normalize-url@8.0.0/node_modules/normalize-url/index.d.ts","../src/normalize-url.ts","../src/merge-record-maps.ts","../src/index.ts","../../../node_modules/.pnpm/@vitest+utils@0.32.0/node_modules/@vitest/utils/dist/types.d.ts","../../../node_modules/.pnpm/@vitest+utils@0.32.0/node_modules/@vitest/utils/dist/helpers.d.ts","../../../node_modules/.pnpm/pretty-format@27.5.1/node_modules/pretty-format/build/types.d.ts","../../../node_modules/.pnpm/pretty-format@27.5.1/node_modules/pretty-format/build/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@0.32.0/node_modules/@vitest/utils/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+runner@0.32.0/node_modules/@vitest/runner/dist/tasks-045d21eb.d.ts","../../../node_modules/.pnpm/@vitest+runner@0.32.0/node_modules/@vitest/runner/dist/runner-0b317aff.d.ts","../../../node_modules/.pnpm/@vitest+runner@0.32.0/node_modules/@vitest/runner/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@0.32.0/node_modules/@vitest/snapshot/dist/environment-38cdead3.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@0.32.0/node_modules/@vitest/snapshot/dist/index-6461367c.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@0.32.0/node_modules/@vitest/snapshot/dist/index.d.ts","../../../node_modules/.pnpm/@types+chai@4.3.5/node_modules/@types/chai/index.d.ts","../../../node_modules/.pnpm/@vitest+expect@0.32.0/node_modules/@vitest/expect/dist/index.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/dom-events.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/globals.global.d.ts","../../../node_modules/.pnpm/@types+node@18.16.7/node_modules/@types/node/index.d.ts","../../../node_modules/.pnpm/esbuild@0.17.18/node_modules/esbuild/lib/main.d.ts","../../../node_modules/.pnpm/vite@4.3.5_@types+node@18.16.7/node_modules/vite/types/metadata.d.ts","../../../node_modules/.pnpm/vite@4.3.5_@types+node@18.16.7/node_modules/vite/types/hmrpayload.d.ts","../../../node_modules/.pnpm/vite@4.3.5_@types+node@18.16.7/node_modules/vite/types/customevent.d.ts","../../../node_modules/.pnpm/rollup@3.21.2/node_modules/rollup/dist/rollup.d.ts","../../../node_modules/.pnpm/vite@4.3.5_@types+node@18.16.7/node_modules/vite/types/importglob.d.ts","../../../node_modules/.pnpm/source-map-js@1.0.2/node_modules/source-map-js/source-map.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/comment.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/at-rule.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/rule.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/container.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/declaration.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/previous-map.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/input.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/css-syntax-error.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/warning.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/document.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/root.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/lazy-result.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/no-work-result.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/processor.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/result.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/node.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/list.d.ts","../../../node_modules/.pnpm/postcss@8.4.23/node_modules/postcss/lib/postcss.d.ts","../../../node_modules/.pnpm/vite@4.3.5_@types+node@18.16.7/node_modules/vite/dist/node/index.d.ts","../../../node_modules/.pnpm/@vitest+runner@0.32.0/node_modules/@vitest/runner/dist/utils.d.ts","../../../node_modules/.pnpm/@vitest+runner@0.32.0/node_modules/@vitest/runner/utils.d.ts","../../../node_modules/.pnpm/tinybench@2.5.0/node_modules/tinybench/dist/index.d.ts","../../../node_modules/.pnpm/vite-node@0.32.0_@types+node@18.16.7/node_modules/vite-node/dist/types.d-7442d07f.d.ts","../../../node_modules/.pnpm/vite@4.3.5_@types+node@18.16.7/node_modules/vite/types/hot.d.ts","../../../node_modules/.pnpm/vite-node@0.32.0_@types+node@18.16.7/node_modules/vite-node/dist/types-516036fa.d.ts","../../../node_modules/.pnpm/vite-node@0.32.0_@types+node@18.16.7/node_modules/vite-node/dist/client.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@0.32.0/node_modules/@vitest/snapshot/dist/manager.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@0.32.0/node_modules/@vitest/snapshot/manager.d.ts","../../../node_modules/.pnpm/vite-node@0.32.0_@types+node@18.16.7/node_modules/vite-node/dist/server.d.ts","../../../node_modules/.pnpm/vite-node@0.32.0_@types+node@18.16.7/node_modules/vite-node/dist/index.d.ts","../../../node_modules/.pnpm/vitest@0.32.0/node_modules/vitest/dist/types-2b1c412e.d.ts","../../../node_modules/.pnpm/tinyspy@2.1.0/node_modules/tinyspy/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+spy@0.32.0/node_modules/@vitest/spy/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@0.32.0/node_modules/@vitest/snapshot/dist/environment.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@0.32.0/node_modules/@vitest/snapshot/environment.d.ts","../../../node_modules/.pnpm/vitest@0.32.0/node_modules/vitest/dist/config.d.ts","../../../node_modules/.pnpm/vitest@0.32.0/node_modules/vitest/dist/index.d.ts","../src/normalize-url.test.ts","../src/parse-page-id.test.ts"],"fileInfos":[{"version":"f59215c5f1d886b05395ee7aca73e0ac69ddfad2843aa88530e797879d511bad","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","dc48272d7c333ccf58034c0026162576b7d50ea0e69c3b9292f803fc20720fd5","27147504487dc1159369da4f4da8a26406364624fa9bc3db632f7d94a5bae2c3","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","f4e736d6c8d69ae5b3ab0ddfcaa3dc365c3e76909d6660af5b4e979b3934ac20","eeeb3aca31fbadef8b82502484499dfd1757204799a6f5b33116201c810676ec",{"version":"3dda5344576193a4ae48b8d03f105c86f20b2f2aff0a1d1fd7935f5d68649654","affectsGlobalScope":true},{"version":"9d9885c728913c1d16e0d2831b40341d6ad9a0ceecaabc55209b306ad9c736a5","affectsGlobalScope":true},{"version":"17bea081b9c0541f39dd1ae9bc8c78bdd561879a682e60e2f25f688c0ecab248","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"ab22100fdd0d24cfc2cc59d0a00fc8cf449830d9c4030dc54390a46bd562e929","affectsGlobalScope":true},{"version":"f7bd636ae3a4623c503359ada74510c4005df5b36de7f23e1db8a5c543fd176b","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"0c20f4d2358eb679e4ae8a4432bdd96c857a2960fd6800b21ec4008ec59d60ea","affectsGlobalScope":true},{"version":"36ae84ccc0633f7c0787bc6108386c8b773e95d3b052d9464a99cd9b8795fbec","affectsGlobalScope":true},{"version":"82d0d8e269b9eeac02c3bd1c9e884e85d483fcb2cd168bccd6bc54df663da031","affectsGlobalScope":true},{"version":"b8deab98702588840be73d67f02412a2d45a417a3c097b2e96f7f3a42ac483d1","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"376d554d042fb409cb55b5cbaf0b2b4b7e669619493c5d18d5fa8bd67273f82a","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"c4138a3dd7cd6cf1f363ca0f905554e8d81b45844feea17786cdf1626cb8ea06","affectsGlobalScope":true},{"version":"6ff3e2452b055d8f0ec026511c6582b55d935675af67cdb67dd1dc671e8065df","affectsGlobalScope":true},{"version":"03de17b810f426a2f47396b0b99b53a82c1b60e9cba7a7edda47f9bb077882f4","affectsGlobalScope":true},{"version":"8184c6ddf48f0c98429326b428478ecc6143c27f79b79e85740f17e6feb090f1","affectsGlobalScope":true},{"version":"261c4d2cf86ac5a89ad3fb3fafed74cbb6f2f7c1d139b0540933df567d64a6ca","affectsGlobalScope":true},{"version":"6af1425e9973f4924fca986636ac19a0cf9909a7e0d9d3009c349e6244e957b6","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"15a630d6817718a2ddd7088c4f83e4673fde19fa992d2eae2cf51132a302a5d3","affectsGlobalScope":true},{"version":"f06948deb2a51aae25184561c9640fb66afeddb34531a9212d011792b1d19e0a","affectsGlobalScope":true},{"version":"01e0ee7e1f661acedb08b51f8a9b7d7f959e9cdb6441360f06522cc3aea1bf2e","affectsGlobalScope":true},{"version":"ac17a97f816d53d9dd79b0d235e1c0ed54a8cc6a0677e9a3d61efb480b2a3e4e","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"9cc66b0513ad41cb5f5372cca86ef83a0d37d1c1017580b7dace3ea5661836df","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"709efdae0cb5df5f49376cde61daacc95cdd44ae4671da13a540da5088bf3f30","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"61ed9b6d07af959e745fb11f9593ecd743b279418cc8a99448ea3cd5f3b3eb22","affectsGlobalScope":true},{"version":"038a2f66a34ee7a9c2fbc3584c8ab43dff2995f8c68e3f566f4c300d2175e31e","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"f5c92f2c27b06c1a41b88f6db8299205aee52c2a2943f7ed29bd585977f254e8","affectsGlobalScope":true},{"version":"930b0e15811f84e203d3c23508674d5ded88266df4b10abee7b31b2ac77632d2","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"b9ea5778ff8b50d7c04c9890170db34c26a5358cccba36844fe319f50a43a61a","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"25de46552b782d43cb7284df22fe2a265de387cf0248b747a7a1b647d81861f6","affectsGlobalScope":true},{"version":"307c8b7ebbd7f23a92b73a4c6c0a697beca05b06b036c23a34553e5fe65e4fdc","affectsGlobalScope":true},{"version":"189c0703923150aa30673fa3de411346d727cc44a11c75d05d7cf9ef095daa22","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"5b7879c5c0e076c5328cc2dda75320c3e3d98735232ef1e3db378101c16612aa","5cfb158d105b11c748cf6229370846a0331a84a10e2b2e25a0bd327cd39d7b33","57aa4c028ae9d74d0908fd24563ccf6ce4ad3ec4b836fcbd69974adce60eb895","6b7f1146fc9396911257b68198cc560795f80945865d67657f30287affb516b7","b7061fe1870bdbe7145d836fedf1d04925de95c56128dbbf6e8fd2f7012618b5","128c87c13d12d198b7ef5ed39137f7b51cd165294bbeac3eb077d9a774579cd8","e573d7b496cf5db12c6ea980c0538473fd1aee6eb6db945a1cdec42217fa8614","aecdfc97a97a891e7d95620203061aa3aa0788c41ab465fdb2bebe1ddc3cf612","6679e3cd2e955ed99d12909354ed55974c4f8ec3844797bd933f1fcca74a3f7e",{"version":"5e384524751bfca381ccc4b8d378fdf56ba284ae193eee745cc0057889d0304f","signature":"de6c46da6d56110051517954313da3aac4a060b1f6aab6d2c642eeccf02170d2"},{"version":"493515178506057b0f864ccc0164dc7af25007a4cceaa937f30e856cf3678539","signature":"3c23db4cae5a9ff896ae1daaf2c70f52e21bc39974ab3808d9b4caa472c86513"},{"version":"039c2c4a359c3fe3ce7999930872d86605c3c7bd0dbc349f6453f78d07f3f9db","signature":"27ad315fa1507dab58efefbd459e6f4c2a7948b765f1fe00f944b93cd9983c3d"},{"version":"eb2108d9bcf821fa5ca7a604cdb93dbb78a7fbb2fdd8d81ec998afdcdc0ea40f","signature":"98c96bbb5b353d7edd5fc28a73c128bef2e71819d9c0eb3665127d4e039afd1d"},{"version":"d4507bb82df8c3c507e9e3260321e52c7dd321f8a5b25b671a4dfdc9287840f6","signature":"e5ceebcc026a581c43c599603c1f5cfd2074396f28dd4fe317a4909d09db1351"},{"version":"31c633f267577c164025ba5e9544133c31dac20efc062cdfff71bddee0f8d4df","signature":"5bd79d155bbfd1d619f38079fc492d03671369ad38eda03cb270bac9f9f11c1e"},{"version":"150548c5a00159daf1c5887f87a90bfb5993f06d33c229892f31fff0e0370f08","signature":"2e2aac8b5e578a185d09b3d5e15018301bafa2918b75c45970165227ea978fc7"},"b80c780c52524beb13488942543972c8b0e54400e8b59cee0169f38d0fabb968","a77fbecee25688f568e18b43f8f54195d6c278a2a9a687ada5ab3d2f726524eb","e29f2b3a93ca3392fe29fa8e7b93985e854b44fe28e2b5c113f08296095bd6b7","d27956c8b392088a06d882e1edb58aab4d5cf5ab1229b73f99329ab21f352147","90dab905b7ea5ab629b62ec5a4153b3f44469aff5b1f6132edb2802537e5d8a7",{"version":"a0f55c5c0d1ff68027ba67ee7265c9c5177d0241e3c3e53e37085775f6251bd7","signature":"d0a63bb68f17178e7439ce310bac10ae6645eb36d75b4814228fb4baf89fd735"},{"version":"3964ee88e5e8b0236b00311cd3419cf1ad3f2b6cd00a7a8e0de471a218e31347","signature":"d5e23dc821e4ad1edbdfbf488b285715c379f8edb782a3d152492a3c26846454"},{"version":"4e21afff9ffc70c82f2aeed7577e8abe175a174a70ae8a1d85f8e7d0c17b6a1c","signature":"6ae260c9d59d765b78305c3db2f17898ac173169d1696a3085192735f4ec54bb"},{"version":"d46fa202edcd5f48589e27b8f1f1e679b8c9d9a70cfab933e36401f6e032e57d","signature":"238a92a74b98aa7541356f221e227ff5a090bd12963ef6eeb156fbaf23da9fe3"},{"version":"c91ad7ee2b45453a8aa56214242161bf33be23e037a27f452be6d37366374c0c","signature":"18554f9258227ddde964bf8e871b55bef44de70961aafbb17f4b10a061a2c216"},{"version":"aad56beecf24fc25b3f58e12466ac27f6661a986447c1b573a29751c04065d58","signature":"0c00c464eb4aa41a2ca482beb539a52efb21591a541a80edcf4412eae086d2bf"},{"version":"617d99ddfa6823161323a3a71e6d9726f4c1047193e70aead84555ea8676f4ba","signature":"67b0a8d01a987e82acd88854bec6d6bb20716c8c210fdf7e4dffa52113431a79"},{"version":"f7ec0a656fb2b10f1118196c134247def69d5489f08ba45063c85524cbc002aa","signature":"7dbaa3160f1c22d6e229e3d38e18bf33ab7b50d19741931aa21b3a3bdd18b63f"},{"version":"29bd80847a3ae811579acaf903de95bb29e45edbe674585e2544b01dd101605d","signature":"0f30b17795f79ba753be77fe0152a7ccbc2f9183c0849a90b6303a25d60a0763"},{"version":"c88fe45cc07d52740db30cfbbdeacc89c2f077cf08b1bc15ed5c4e24759f4ef4","signature":"12721bd99f42b99fa5908cb23080550c00a4630814410d6d646f7a5f83f1bdf7"},{"version":"9f28e43e07638d4810d8fc3b5d1e21dd3ede7588eb0b43a26ab51f1b9272fd42","signature":"49d49f14ee40a663c1fa6ca7ba8e2a75963bfa1c7a549e82d42d6be94b9bbac8"},{"version":"0027a45dc21de938ca3c436acc8e3b22fd7899184916348b0cab6a3f4e8fb91a","signature":"a432ee0b27a35f843b4802cc805a47e917108e987ab2292275a936e42055e314"},"a87e5902fd92d16a80e0020ac03d6477bc2e7a6f5b0407a73aff6b7aa9e01d55",{"version":"dc7b885af6bd832c8d08622e645782a172a24bb97bf04c6d3db92b55baa20d0f","signature":"1898625646b2cf2e46529298f8ee1da27222180d2ac3261b174ed1c9e9256536"},{"version":"00ceab3c2e7e01b0e72abb0fd476fdce7c37d01ac8b7ad0d2ab421e08589faf6","signature":"ef4a8b9e296a596e2f94f98df4a7e5e8db5873545d97e7ba61c3855c69a152b2"},{"version":"8e7c73350999eb7cef5cca22d81b279028d151b9426546923fe65718373eb4dc","signature":"2f7dd5539c0964595409446eacc423f2fb5b7c0959f9ffd075eefde293ee3b0e"},"274b1fbd4d413479581ee864f2cb714e506f64725fca44afb1789707c509c953","b97b9034d922921957ec6a8193b68dfac3bf563520ebeb67738cd17bafd697a0",{"version":"b731511ef450ace6c32de6c14ac6585cdf75642aad5a3224ead8d4abc50585db","signature":"a3b67d6cc47a9c07b8701daf59dd4f763b280e79a1bc39443bf9b49a9555329b"},{"version":"1429bca7de08240da18d233e03e894191274b6078330f4a26e437f1c0fb13067","signature":"3f88ef93de6bb7cd11af06b1a9029da3e99c9c2ecdcc4ba576961bac88464dac"},{"version":"e4001e46c5b6766d595473110be160bd83b06b0ef59f252304bf4a8018cc04a0","signature":"911c62a35e3522850b8366cd9f6641701437e72ea02472b927a59a62402568ab"},"19ce9ec982b542ef6d04d29ce678aad2fa52a67d8087e9c6cd95a4d6d98784c8","75d3b70589f5e14016a629feef0cd8deb55cab794e8c14bdbd5794c3b08a957e","462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","0beeeb5964025d8564c03cb0bf1a4b60dc40c01f065ad1a4e9030415f5bc7bc2","53c5cd35139198e23fbb3ce42fdf5243a53324467c9f21566aab33e296c9b2b5","f9b2b53f02597ae3daefd09f21402f090398ee4809a9bf5704734909cae57d69","80ceb604a300cd9c8e1d287daa27668df2f30975e86e09fec1e1c38ee91e7dce","73b67d2e87ac7d7baaca64ca33fd1523c0b3c850cb7db5b9c014f1be7996bed1","5d5ae61fce1581fd6424269790a9071e3f8e69b029f5d0fcb46ce618c5dbc565","38a0ccc7106312a9f60e034e7cd8ac218774d8aa65f832cee3363a7e65f99325",{"version":"c3bc5d095c3c22fd20b5a6550b9c9a6d56c3ffbb87ef057ccce7764b6bed4428","affectsGlobalScope":true},{"version":"f8a9a20db7591d129bc42569dc34ae926e43d4a8a2bcad61081ee46ae1c18b0f","affectsGlobalScope":true},"7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"f749812878fecfa53cfc13b36e5d35086fb6377983a9df44175da83ccc23af1f","affectsGlobalScope":true},"7d2e3fea24c712c99c03ad8f556abedbfe105f87f1be10b95dbd409d24bc05a3",{"version":"211e3f15fbced4ab4be19f49ffa990b9ff20d749d33b65ff753be691e7616239","affectsGlobalScope":true},"a61bee062e86568207a22cb56f146b398a2f1e1c2ab68d3498b7bca7e9d85d08","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","e596c9bb2f29a2699fdd4ae89139612652245192f67f45617c5a4b20832aaae9","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","1cdcfc1f624d6c08aa12c73935f6e13f095919cd99edf95752951796eb225729","216717f17c095cde1dc19375e1ab3af0a4a485355860c077a4f9d6ea59fab5b5","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"00dee7cdca8b8420c47ea4a31a34b8e8294013ebc4f463fd941e867e7bf05029","affectsGlobalScope":true},"3256f3cccd578f9e7fe3a28096c505634bebcee8afb738ffa99368e536ca3a0b","1c84b46267610a34028edfd0d035509341751262bac1062857f3c8df7aff7153","7f138842074d0a40681775af008c8452093b68c383c94de31759e853c6d06b5c","a3d541d303ee505053f5dcbf9fafb65cac3d5631037501cd616195863a6c5740","8d3c583a07e0c37e876908c2d5da575019f689df8d9fa4c081d99119d53dba22","2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58",{"version":"e630e5528e899219ae319e83bef54bf3bcb91b01d76861ecf881e8e614b167f0","affectsGlobalScope":true},"bcebb922784739bdb34c18ee51095d25a92b560c78ccd2eaacd6bd00f7443d83","7ee6ed878c4528215c82b664fe0cfe80e8b4da6c0d4cc80869367868774db8b1","b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30",{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true},{"version":"0715e4cd28ad471b2a93f3e552ff51a3ae423417a01a10aa1d3bc7c6b95059d6","affectsGlobalScope":true},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","4f3fdeba4e28e21aa719c081b8dc8f91d47e12e773389b9d35679c08151c9d37","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","f69ff39996a61a0dd10f4bce73272b52e8024a4d58b13ab32bf4712909d0a2b7",{"version":"3c4ba1dd9b12ffa284b565063108f2f031d150ea15b8fafbdc17f5d2a07251f3","affectsGlobalScope":true},"e10177274a35a9d07c825615340b2fcde2f610f53f3fb40269fd196b4288dda6","1422cd9e705adcc09088fda85a900c2b70e3ad36ea85846f68bd1a884cdf4e2b","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"a73ae8c0e62103bb9e21bb6538700881bf135b9a8b125b857ec68edfa0da4ed3","affectsGlobalScope":true},{"version":"e1c1b2fbe236bf7ee3e342eeae7e20efb8988a0ac7da1cbbfa2c1f66b76c3423","affectsGlobalScope":true},"868831cab82b65dfe1d68180e898af1f2101e89ba9b754d1db6fb8cc2fac1921","0fe8985a28f82c450a04a6edf1279d7181c0893f37da7d2a27f8efd4fd5edb03","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa",{"version":"52120bb7e4583612225bdf08e7c12559548170f11e660d33a33623bae9bbdbba","affectsGlobalScope":true},"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"a6dd3dba8e665ac43d279e0fdf5219edda0eed69b5e9a5061f46cd6a65c4f7a1","99d951629f7096dcd79adbaa83a85e3be57613005533bd23029b3aba4ce9383e","8f07f2b6514744ac96e51d7cb8518c0f4de319471237ea10cf688b8d0e9d0225","bcb6ea18f23dae2c48459d7b86d3adccd6898f824fcbf9da08b935f559896580","0aa7220845f5f3902fe043f646f9d9218bd7dd6c4046e8471580866ea6b03aa2","65570ad7e2ac88e024dd1f50844db3b9106e044871529e71d377967e3b590ed7","739c2c46edc112421fc023c24b4898b1f413f792bb6a02b40ba182c648e56c2f","858d0d831826c6eb563df02f7db71c90e26deadd0938652096bea3cc14899700","ae128dd11edfae24d9dfc6bc60390e488cec3792e4dd80115e422b5c2e1524cf","cef246ba183aff9bdb98831690ffcd1603655ea23ce38252e3db3ce3e06d262c","9d110b91e4c091ceee9d360ec425737580fd0d531bdb2d4f77e203c520d4da4c","96826ee13c04e92150ae68c6d89bf6ab7970abeca6e1a41cc59c5dcacefb4526","cb81640e895111bdf71201045f0f6664663cb0120e05a03f91e978b6a4ea2dd7","0d598aeda14bcdaa823b05a043eb7c18045c0a17fc3594d2387a11c09a5ff64b","be0db7e6060868cbabb02b3400fbaad4471d0815ce49d1b0f1e027296017b710","dbdec414a2de11b47a0bc8e2a0a93397235878ca7e6c02b62570e0a72faa878e","d9f79888a9ecee73c3cb33ae3eaaacb973dc96d0537599300d3dcb50ed1a1cf3","7ad14170a7f1f59dbe90ca3747699396f4a320921c7c560aa53f05022221df13","096c2a810f50f8a8b5bbb336ee32476d7882ffd93b2ee50ec5d4c1a9d5c209cf","6be9369a41da87241c164021631f20fe4706daf9f82a33c754974c6f4eade3cd","2eb26714666406e7c6c3ad3482da148781845b50a354a351d28bd5dba1a3f88a","022a6fbd269120763350030e66333f8c084a328ce7d6f6414d9cd49d834cbc77","4f85fea72dfeb24be05b650d680a21bda8324430bbfb437af9452630c9c740c1","179bfe3e835098360fdfa7f1c139c01b83c00410dccac214b3c71f16d949044b","18af117b1a77567a980c6ab6611be835e809300af6b511a2093208dc14ad2f7c","59345c3c2297677cb323f5f70df756776ae8eec2c97e6254e0739f711ab39131","745dc480fe54b1c4f0207d9919020656218dfdab72b99ac5ef3b94666f1b8696","c6afc27e834454b6ebcbc81624c93114a0382cfa37cf0676929b38e3ec24896c","e666e31d323fef5642f87db0da48a83e58f0aaf9e3823e87eabd8ec7e0441a36","caeae351358d6c5b8da971c4ba7973987cbbbe4766081d07394e51c5544c8727","d12ab69ace581804d4f264eabc71094ca8dadfa70ae2bf5ccd54a8d6105ab84b","4d5fb5d6b35f731b2ae4d9d7c592d48e91d6de531dd130628edf4eba16add893","1de42084578cf9832c779e2b9e69b996afaeb723fd4ff82ec22ffd0489e3bd28","69c279f710be119b4dfdfdc16bb7d1be92d9b654f56048677e38cc756f8df8a1","e72396ce544667ab49df38ffb91cb3f80ff17d2ad3df903ec30b1d2ca8ea68de","b7e28e06011460436d5c2ec2996846ac0c451e135357fc5a7269e5665a32fbd7","b7f05af70f9868c1342cc20c54b36758ad7557a1083101411e6bab3ec65d9536","cbb99debad9c60c29d8870826eb695593a67212e3894d7674ed59ff00098b699","4a2798997b873de3407090693f238bf993d4e6084f0cd104c0c70395c5dcbf1b","9a82b3cd322d6b46c2407c162bbfd0b13edc9d23dced719a751a481b985690a0","13446337b269b3a8fdac668f9cf831b313529aea23f26621ecf5097c3e53bb25","f63e23230f3960b712450cf08f0f31e56acdae3ce65e0bf31bfdd6442b29d115","f2d1a59a658165341b0e2b7879aa2e19ea6a709146b2d3f70ee8a07159d3d08e","2de6c96fad4bb4e68240088848e45f7ed6227f2a12337eae76201c0d780a316a","0d701fd5341e0d3ee1a0920099962cc0f3ae8940388539c76d49cfa829fdf79e",{"version":"67df11fb5478a41ff289fc72ae13789a7b4a57f81b9e2ab65ffa297690f98d15","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"9289f24e698d4e17863ea907ec75b1942aa382b6da49c364fd12b9a6614039cc","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"}],"root":[[70,76],[82,93],[95,97],[100,102],214,215],"options":{"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"esModuleInterop":true,"module":99,"noEmitOnError":true,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","sourceMap":true,"strict":false,"target":2,"tsBuildInfoFile":"./.tsbuildinfo"},"fileIdsList":[[162],[116,162],[119,162],[120,125,153,162],[121,132,133,140,150,161,162],[121,122,132,140,162],[123,162],[124,125,133,141,162],[125,150,158,162],[126,128,132,140,162],[127,162],[128,129,162],[132,162],[130,132,162],[132,133,134,150,161,162],[132,133,134,147,150,153,162],[162,166],[128,132,135,140,150,161,162],[132,133,135,136,140,150,158,161,162],[135,137,150,158,161,162],[116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,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],[132,138,162],[139,161,162],[128,132,140,150,162],[141,162],[142,162],[119,143,162],[144,160,162,166],[145,162],[146,162],[132,147,148,162],[147,149,162,164],[120,132,150,151,152,153,162],[120,150,152,162],[150,151,162],[153,162],[154,162],[132,156,157,162],[156,157,162],[125,140,150,158,162],[159,162],[140,160,162],[120,135,146,161,162],[125,162],[150,162,163],[162,164],[162,165],[120,125,132,134,143,150,161,162,164,166],[150,162,167],[107,114,162],[107,108,109,162],[108,162],[107,162],[107,108,162],[162,196],[111,162],[106,111,162],[106,111,112,162],[162,210],[162,203],[162,208],[103,162],[103,104,106,162],[77,78,79,80,162],[78,162],[78,79,162],[162,180],[162,180,192],[162,177,178,179,181,192],[162,183],[162,180,187,191,194],[162,182,194],[162,185,187,190,191,194],[162,185,187,188,190,191,194],[162,177,178,179,180,181,183,184,185,186,187,191,194],[162,176,177,178,179,180,181,183,184,185,186,187,188,190,191,192,193],[162,176,194],[162,187,188,189,191,194],[162,190,194],[162,180,186,191,194],[162,184,192],[105,162],[162,176],[162,199,200,201],[162,195,199,200,201,207],[162,199,200],[132,133,135,137,140,150,158,161,162,167,169,170,171,172,173,174,175,194],[162,172],[162,173],[162,174],[107,110,113,114,115,133,162,166,195,197,198,202,204,205,206,207],[107,110,113,114,115,133,162,166,195,197,198,202,204,205,206,207,209,211,212],[67,162],[61,162],[61,63,162],[61,62,63,64,65,66,67,68,162],[61,62,64,65,66,162],[69,72,73,162],[75,162],[69,81,83,162],[69,162],[69,70,162],[69,70,71,162],[69,72,87,88,89,162],[69,72,85,86,162],[69,85,95,162],[69,71,162],[69,72,162],[70,71,72,73,74,75,76,82,83,84,85,86,87,88,89,90,91,92,93,95,96,97,100,101,162],[94,162],[100,162,213],[98,99,162],[83,162,213],[82,162],[69],[70,71,72,73,74,75,76,82,83,84,85,86,87,88,89,90,91,92,93,95,96,97,100,101],[94]],"referencedMap":[[114,1],[116,2],[117,2],[119,3],[120,4],[121,5],[122,6],[123,7],[124,8],[125,9],[126,10],[127,11],[128,12],[129,12],[131,13],[130,14],[132,13],[133,15],[134,16],[118,17],[168,1],[135,18],[136,19],[137,20],[169,21],[138,22],[139,23],[140,24],[141,25],[142,26],[143,27],[144,28],[145,29],[146,30],[147,31],[148,31],[149,32],[150,33],[152,34],[151,35],[153,36],[154,37],[155,1],[156,38],[157,39],[158,40],[159,41],[160,42],[161,43],[162,44],[163,45],[164,46],[165,47],[166,48],[167,49],[115,50],[110,51],[109,52],[108,53],[196,54],[197,55],[111,1],[210,56],[112,57],[113,58],[203,58],[211,59],[204,60],[209,61],[104,62],[107,63],[103,1],[170,1],[77,1],[94,1],[98,1],[99,1],[81,64],[79,65],[80,66],[78,1],[178,67],[177,68],[180,69],[184,70],[181,68],[186,71],[183,72],[188,73],[193,1],[189,74],[192,75],[194,76],[182,77],[190,78],[191,79],[187,80],[179,67],[185,81],[106,82],[105,1],[174,1],[176,83],[198,1],[208,1],[59,1],[60,1],[12,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[4,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[8,1],[49,1],[46,1],[47,1],[48,1],[50,1],[9,1],[51,1],[52,1],[53,1],[56,1],[54,1],[55,1],[57,1],[10,1],[1,1],[11,1],[58,1],[202,84],[206,84],[205,85],[201,86],[199,1],[195,87],[173,88],[172,1],[200,89],[175,1],[171,90],[212,91],[213,92],[207,91],[68,93],[62,94],[66,94],[65,95],[61,1],[63,94],[69,96],[67,97],[64,94],[74,98],[75,1],[76,99],[84,100],[70,101],[85,102],[86,101],[72,103],[90,104],[91,101],[92,105],[93,101],[96,106],[87,107],[73,107],[97,108],[71,101],[82,1],[102,109],[95,110],[101,101],[88,1],[214,111],[100,112],[215,113],[83,114],[89,1]],"exportedModulesMap":[[114,1],[116,2],[117,2],[119,3],[120,4],[121,5],[122,6],[123,7],[124,8],[125,9],[126,10],[127,11],[128,12],[129,12],[131,13],[130,14],[132,13],[133,15],[134,16],[118,17],[168,1],[135,18],[136,19],[137,20],[169,21],[138,22],[139,23],[140,24],[141,25],[142,26],[143,27],[144,28],[145,29],[146,30],[147,31],[148,31],[149,32],[150,33],[152,34],[151,35],[153,36],[154,37],[155,1],[156,38],[157,39],[158,40],[159,41],[160,42],[161,43],[162,44],[163,45],[164,46],[165,47],[166,48],[167,49],[115,50],[110,51],[109,52],[108,53],[196,54],[197,55],[111,1],[210,56],[112,57],[113,58],[203,58],[211,59],[204,60],[209,61],[104,62],[107,63],[103,1],[170,1],[77,1],[94,1],[98,1],[99,1],[81,64],[79,65],[80,66],[78,1],[178,67],[177,68],[180,69],[184,70],[181,68],[186,71],[183,72],[188,73],[193,1],[189,74],[192,75],[194,76],[182,77],[190,78],[191,79],[187,80],[179,67],[185,81],[106,82],[105,1],[174,1],[176,83],[198,1],[208,1],[59,1],[60,1],[12,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[4,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[8,1],[49,1],[46,1],[47,1],[48,1],[50,1],[9,1],[51,1],[52,1],[53,1],[56,1],[54,1],[55,1],[57,1],[10,1],[1,1],[11,1],[58,1],[202,84],[206,84],[205,85],[201,86],[199,1],[195,87],[173,88],[172,1],[200,89],[175,1],[171,90],[212,91],[213,92],[207,91],[68,93],[62,94],[66,94],[65,95],[61,1],[63,94],[69,96],[67,97],[64,94],[74,115],[84,115],[70,115],[85,115],[86,115],[72,115],[90,115],[91,115],[92,115],[93,115],[96,115],[87,115],[73,115],[97,115],[71,115],[102,116],[95,117],[101,115]],"semanticDiagnosticsPerFile":[114,116,117,119,120,121,122,123,124,125,126,127,128,129,131,130,132,133,134,118,168,135,136,137,169,138,139,140,141,142,143,144,145,146,147,148,149,150,152,151,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,115,110,109,108,196,197,111,210,112,113,203,211,204,209,104,107,103,170,77,94,98,99,81,79,80,78,178,177,180,184,181,186,183,188,193,189,192,194,182,190,191,187,179,185,106,105,174,176,198,208,59,60,12,14,13,2,15,16,17,18,19,20,21,22,3,4,26,23,24,25,27,28,29,5,30,31,32,33,6,37,34,35,36,38,7,39,44,45,40,41,42,43,8,49,46,47,48,50,9,51,52,53,56,54,55,57,10,1,11,58,202,206,205,201,199,195,173,172,200,175,171,212,213,207,68,62,66,65,61,63,69,67,64,74,75,76,84,70,85,86,72,90,91,92,93,96,87,73,97,71,82,102,95,101,88,214,100,215,83,89]},"version":"5.1.3"}
1
+ {"program":{"fileNames":["../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.esnext.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../ntypes/build/core.d.ts","../../ntypes/build/block.d.ts","../../ntypes/build/formula.d.ts","../../ntypes/build/user.d.ts","../../ntypes/build/collection.d.ts","../../ntypes/build/collection-view.d.ts","../../ntypes/build/maps.d.ts","../../ntypes/build/api.d.ts","../../ntypes/build/index.d.ts","../src/get-block-collection-id.ts","../src/get-text-content.ts","../src/get-block-title.ts","../src/get-page-table-of-contents.ts","../src/estimate-page-read-time.ts","../src/find-ancestors.ts","../src/format-date.ts","../src/format-notion-date-time.ts","../../../node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.d.ts","../../../node_modules/.pnpm/p-queue@7.3.4/node_modules/p-queue/dist/queue.d.ts","../../../node_modules/.pnpm/p-queue@7.3.4/node_modules/p-queue/dist/options.d.ts","../../../node_modules/.pnpm/p-queue@7.3.4/node_modules/p-queue/dist/priority-queue.d.ts","../../../node_modules/.pnpm/p-queue@7.3.4/node_modules/p-queue/dist/index.d.ts","../src/id-to-uuid.ts","../src/parse-page-id.ts","../src/get-all-pages-in-space.ts","../src/get-block-icon.ts","../src/get-block-parent-page.ts","../src/get-page-property.ts","../src/normalize-title.ts","../src/uuid-to-id.ts","../src/get-canonical-page-id.ts","../src/get-date-value.ts","../src/get-page-breadcrumbs.ts","../src/get-page-content-block-ids.ts","../../../node_modules/.pnpm/is-url-superb@6.1.0/node_modules/is-url-superb/index.d.ts","../src/is-url.ts","../src/get-page-image-urls.ts","../src/get-page-title.ts","../../../node_modules/.pnpm/mem@9.0.2/node_modules/mem/dist/index.d.ts","../../../node_modules/.pnpm/normalize-url@8.0.0/node_modules/normalize-url/index.d.ts","../src/normalize-url.ts","../src/merge-record-maps.ts","../src/index.ts","../../../node_modules/.pnpm/@vitest+utils@0.34.1/node_modules/@vitest/utils/dist/types.d.ts","../../../node_modules/.pnpm/@vitest+utils@0.34.1/node_modules/@vitest/utils/dist/helpers.d.ts","../../../node_modules/.pnpm/@sinclair+typebox@0.27.8/node_modules/@sinclair/typebox/typebox.d.ts","../../../node_modules/.pnpm/@jest+schemas@29.6.0/node_modules/@jest/schemas/build/index.d.ts","../../../node_modules/.pnpm/pretty-format@29.6.1/node_modules/pretty-format/build/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@0.34.1/node_modules/@vitest/utils/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+runner@0.34.1/node_modules/@vitest/runner/dist/tasks-abce80cc.d.ts","../../../node_modules/.pnpm/@vitest+runner@0.34.1/node_modules/@vitest/runner/dist/types.d.ts","../../../node_modules/.pnpm/@vitest+runner@0.34.1/node_modules/@vitest/runner/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@0.34.1/node_modules/@vitest/snapshot/dist/environment-38cdead3.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@0.34.1/node_modules/@vitest/snapshot/dist/index-6461367c.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@0.34.1/node_modules/@vitest/snapshot/dist/index.d.ts","../../../node_modules/.pnpm/@types+chai@4.3.5/node_modules/@types/chai/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@0.34.1/node_modules/@vitest/utils/dist/diff.d.ts","../../../node_modules/.pnpm/@vitest+utils@0.34.1/node_modules/@vitest/utils/diff.d.ts","../../../node_modules/.pnpm/@vitest+expect@0.34.1/node_modules/@vitest/expect/dist/index.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/dom-events.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/globals.global.d.ts","../../../node_modules/.pnpm/@types+node@18.17.1/node_modules/@types/node/index.d.ts","../../../node_modules/.pnpm/esbuild@0.18.12/node_modules/esbuild/lib/main.d.ts","../../../node_modules/.pnpm/vite@4.4.8_@types+node@18.17.1/node_modules/vite/types/metadata.d.ts","../../../node_modules/.pnpm/vite@4.4.8_@types+node@18.17.1/node_modules/vite/types/hmrpayload.d.ts","../../../node_modules/.pnpm/vite@4.4.8_@types+node@18.17.1/node_modules/vite/types/customevent.d.ts","../../../node_modules/.pnpm/rollup@3.26.2/node_modules/rollup/dist/rollup.d.ts","../../../node_modules/.pnpm/vite@4.4.8_@types+node@18.17.1/node_modules/vite/types/importglob.d.ts","../../../node_modules/.pnpm/source-map-js@1.0.2/node_modules/source-map-js/source-map.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/previous-map.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/input.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/css-syntax-error.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/declaration.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/root.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/warning.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/lazy-result.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/no-work-result.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/processor.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/result.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/document.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/rule.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/node.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/comment.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/container.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/at-rule.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/list.d.ts","../../../node_modules/.pnpm/postcss@8.4.26/node_modules/postcss/lib/postcss.d.ts","../../../node_modules/.pnpm/vite@4.4.8_@types+node@18.17.1/node_modules/vite/dist/node/index.d.ts","../../../node_modules/.pnpm/vite@4.4.8_@types+node@18.17.1/node_modules/vite/types/hot.d.ts","../../../node_modules/.pnpm/vite-node@0.34.1_@types+node@18.17.1/node_modules/vite-node/dist/types.d-7442d07f.d.ts","../../../node_modules/.pnpm/vite-node@0.34.1_@types+node@18.17.1/node_modules/vite-node/dist/types-e8623e9c.d.ts","../../../node_modules/.pnpm/vite-node@0.34.1_@types+node@18.17.1/node_modules/vite-node/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+runner@0.34.1/node_modules/@vitest/runner/dist/utils.d.ts","../../../node_modules/.pnpm/@vitest+runner@0.34.1/node_modules/@vitest/runner/utils.d.ts","../../../node_modules/.pnpm/tinybench@2.5.0/node_modules/tinybench/dist/index.d.ts","../../../node_modules/.pnpm/vite-node@0.34.1_@types+node@18.17.1/node_modules/vite-node/dist/client.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@0.34.1/node_modules/@vitest/snapshot/dist/manager.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@0.34.1/node_modules/@vitest/snapshot/manager.d.ts","../../../node_modules/.pnpm/vite-node@0.34.1_@types+node@18.17.1/node_modules/vite-node/dist/server.d.ts","../../../node_modules/.pnpm/vitest@0.34.1/node_modules/vitest/dist/types-3c7dbfa5.d.ts","../../../node_modules/.pnpm/tinyspy@2.1.1/node_modules/tinyspy/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+spy@0.34.1/node_modules/@vitest/spy/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@0.34.1/node_modules/@vitest/snapshot/dist/environment.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@0.34.1/node_modules/@vitest/snapshot/environment.d.ts","../../../node_modules/.pnpm/vitest@0.34.1/node_modules/vitest/dist/config.d.ts","../../../node_modules/.pnpm/vitest@0.34.1/node_modules/vitest/dist/index.d.ts","../src/normalize-url.test.ts","../src/parse-page-id.test.ts"],"fileInfos":[{"version":"f59215c5f1d886b05395ee7aca73e0ac69ddfad2843aa88530e797879d511bad","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","dc48272d7c333ccf58034c0026162576b7d50ea0e69c3b9292f803fc20720fd5","27147504487dc1159369da4f4da8a26406364624fa9bc3db632f7d94a5bae2c3","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","f4e736d6c8d69ae5b3ab0ddfcaa3dc365c3e76909d6660af5b4e979b3934ac20","eeeb3aca31fbadef8b82502484499dfd1757204799a6f5b33116201c810676ec",{"version":"3dda5344576193a4ae48b8d03f105c86f20b2f2aff0a1d1fd7935f5d68649654","affectsGlobalScope":true},{"version":"9d9885c728913c1d16e0d2831b40341d6ad9a0ceecaabc55209b306ad9c736a5","affectsGlobalScope":true},{"version":"17bea081b9c0541f39dd1ae9bc8c78bdd561879a682e60e2f25f688c0ecab248","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"ab22100fdd0d24cfc2cc59d0a00fc8cf449830d9c4030dc54390a46bd562e929","affectsGlobalScope":true},{"version":"f7bd636ae3a4623c503359ada74510c4005df5b36de7f23e1db8a5c543fd176b","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"0c20f4d2358eb679e4ae8a4432bdd96c857a2960fd6800b21ec4008ec59d60ea","affectsGlobalScope":true},{"version":"36ae84ccc0633f7c0787bc6108386c8b773e95d3b052d9464a99cd9b8795fbec","affectsGlobalScope":true},{"version":"82d0d8e269b9eeac02c3bd1c9e884e85d483fcb2cd168bccd6bc54df663da031","affectsGlobalScope":true},{"version":"b8deab98702588840be73d67f02412a2d45a417a3c097b2e96f7f3a42ac483d1","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"376d554d042fb409cb55b5cbaf0b2b4b7e669619493c5d18d5fa8bd67273f82a","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"c4138a3dd7cd6cf1f363ca0f905554e8d81b45844feea17786cdf1626cb8ea06","affectsGlobalScope":true},{"version":"6ff3e2452b055d8f0ec026511c6582b55d935675af67cdb67dd1dc671e8065df","affectsGlobalScope":true},{"version":"03de17b810f426a2f47396b0b99b53a82c1b60e9cba7a7edda47f9bb077882f4","affectsGlobalScope":true},{"version":"8184c6ddf48f0c98429326b428478ecc6143c27f79b79e85740f17e6feb090f1","affectsGlobalScope":true},{"version":"261c4d2cf86ac5a89ad3fb3fafed74cbb6f2f7c1d139b0540933df567d64a6ca","affectsGlobalScope":true},{"version":"6af1425e9973f4924fca986636ac19a0cf9909a7e0d9d3009c349e6244e957b6","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"15a630d6817718a2ddd7088c4f83e4673fde19fa992d2eae2cf51132a302a5d3","affectsGlobalScope":true},{"version":"f06948deb2a51aae25184561c9640fb66afeddb34531a9212d011792b1d19e0a","affectsGlobalScope":true},{"version":"01e0ee7e1f661acedb08b51f8a9b7d7f959e9cdb6441360f06522cc3aea1bf2e","affectsGlobalScope":true},{"version":"ac17a97f816d53d9dd79b0d235e1c0ed54a8cc6a0677e9a3d61efb480b2a3e4e","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"9cc66b0513ad41cb5f5372cca86ef83a0d37d1c1017580b7dace3ea5661836df","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"709efdae0cb5df5f49376cde61daacc95cdd44ae4671da13a540da5088bf3f30","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"61ed9b6d07af959e745fb11f9593ecd743b279418cc8a99448ea3cd5f3b3eb22","affectsGlobalScope":true},{"version":"038a2f66a34ee7a9c2fbc3584c8ab43dff2995f8c68e3f566f4c300d2175e31e","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"f5c92f2c27b06c1a41b88f6db8299205aee52c2a2943f7ed29bd585977f254e8","affectsGlobalScope":true},{"version":"930b0e15811f84e203d3c23508674d5ded88266df4b10abee7b31b2ac77632d2","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"b9ea5778ff8b50d7c04c9890170db34c26a5358cccba36844fe319f50a43a61a","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"25de46552b782d43cb7284df22fe2a265de387cf0248b747a7a1b647d81861f6","affectsGlobalScope":true},{"version":"307c8b7ebbd7f23a92b73a4c6c0a697beca05b06b036c23a34553e5fe65e4fdc","affectsGlobalScope":true},{"version":"189c0703923150aa30673fa3de411346d727cc44a11c75d05d7cf9ef095daa22","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"d5a33c52d381fc00f5842490ffcf406e0f5b9dd801b016fadcb232bb4d347fdf","4673a6e2546f15b6c9664f9c360d74e79650dc9cb072a03a21b4690a1c236fb9","57aa4c028ae9d74d0908fd24563ccf6ce4ad3ec4b836fcbd69974adce60eb895","6b7f1146fc9396911257b68198cc560795f80945865d67657f30287affb516b7","b7061fe1870bdbe7145d836fedf1d04925de95c56128dbbf6e8fd2f7012618b5","b4e975657af1b37e99cac0753713e6425a16a7725790542838e9d48b0dd836b4","af7948154230b42e85802e14fbcf6b58e9fe15409178639f96be3c6990335f08","b798a298a669d510455b1c9fb6ae952333edaba0dae2672be9edd84aea4d600d","6679e3cd2e955ed99d12909354ed55974c4f8ec3844797bd933f1fcca74a3f7e",{"version":"361d16c23a2857601506d722a8ff0073ac3c2ea5f3e1ffbd64676542e1b59177","signature":"378fe5a4170fafa7f3baf5533e67278ba91511b985fce75743baae5750c27f92"},{"version":"2f06056f429b57986d7a52f78e4e3b9fd852f0fe31ade04cbed5f09aba862132","signature":"ce054f4c301b70dccc81c975be0fa43f0e79e1f75dfc8c562304d5b93708791d"},{"version":"b68e1de6cc26a369431c986be342071f7bb4ab205617f3e66f86ed97ddd81e38","signature":"1e5484e66de5a329c31f68da34c12b0b1f189c75fa8e99e2aa174d1488f74e0f"},{"version":"d113b7c3fe1b66396ba61ce7df71506e1d78b2ea7ba643bbd659b9bfce41cb50","signature":"95a7513b3da87413d3594496a6279eba65a8ed5233853edad1f63a467ecf7ed6"},{"version":"d4507bb82df8c3c507e9e3260321e52c7dd321f8a5b25b671a4dfdc9287840f6","signature":"e5ceebcc026a581c43c599603c1f5cfd2074396f28dd4fe317a4909d09db1351"},{"version":"848a218cdd6b872ba8ea0d0a4ac3c65b69daad4884ab798d6ab0603ccce6eea3","signature":"fe0a3dd89bcd2beb12d399d8b4efd4c3e1bfc501e331794ad515d06f66529a9c"},{"version":"31c633f267577c164025ba5e9544133c31dac20efc062cdfff71bddee0f8d4df","signature":"5bd79d155bbfd1d619f38079fc492d03671369ad38eda03cb270bac9f9f11c1e"},{"version":"150548c5a00159daf1c5887f87a90bfb5993f06d33c229892f31fff0e0370f08","signature":"2e2aac8b5e578a185d09b3d5e15018301bafa2918b75c45970165227ea978fc7"},"b80c780c52524beb13488942543972c8b0e54400e8b59cee0169f38d0fabb968","a77fbecee25688f568e18b43f8f54195d6c278a2a9a687ada5ab3d2f726524eb","e29f2b3a93ca3392fe29fa8e7b93985e854b44fe28e2b5c113f08296095bd6b7","d27956c8b392088a06d882e1edb58aab4d5cf5ab1229b73f99329ab21f352147","90dab905b7ea5ab629b62ec5a4153b3f44469aff5b1f6132edb2802537e5d8a7",{"version":"a0f55c5c0d1ff68027ba67ee7265c9c5177d0241e3c3e53e37085775f6251bd7","signature":"d0a63bb68f17178e7439ce310bac10ae6645eb36d75b4814228fb4baf89fd735"},{"version":"3964ee88e5e8b0236b00311cd3419cf1ad3f2b6cd00a7a8e0de471a218e31347","signature":"d5e23dc821e4ad1edbdfbf488b285715c379f8edb782a3d152492a3c26846454"},{"version":"9929350584fedc860cbdb62e7dcc56728bab609fa37a6ece9ca0d522b2d104c1","signature":"54f842d1b732f806af1148c4d9a1f877825c69940765436efa980f6e07c78105"},{"version":"8000b182fea653052e7a48682918413b93cc33f87dd7f3c4c74bf05805d08c6f","signature":"16ad8386f1a40f681389a7899257f6aab2d808a11ea83765c26ca1748ecc8870"},{"version":"21d073b526c461770c0a744f6515bde7e53af6d572892be9a9a9851b38d4afbf","signature":"4ba10429273c86123081ff55a49a2cd40faf68b36714f9ba1bb783ba15b44246"},{"version":"aad56beecf24fc25b3f58e12466ac27f6661a986447c1b573a29751c04065d58","signature":"0c00c464eb4aa41a2ca482beb539a52efb21591a541a80edcf4412eae086d2bf"},{"version":"617d99ddfa6823161323a3a71e6d9726f4c1047193e70aead84555ea8676f4ba","signature":"67b0a8d01a987e82acd88854bec6d6bb20716c8c210fdf7e4dffa52113431a79"},{"version":"f7ec0a656fb2b10f1118196c134247def69d5489f08ba45063c85524cbc002aa","signature":"7dbaa3160f1c22d6e229e3d38e18bf33ab7b50d19741931aa21b3a3bdd18b63f"},{"version":"87069934c3740a18779a74e72825c292922e75d4087099d991861ecc382ec7d0","signature":"0f30b17795f79ba753be77fe0152a7ccbc2f9183c0849a90b6303a25d60a0763"},{"version":"ea92952c6e512d46746b112ab1a93e7916e5f3b64510104d3598eabce8793ef6","signature":"0b587f15462dc13b7ee1322f3dd6d2309bef0977337e4effeae2ae6c37224660"},{"version":"1e7cd7cdcc29c9670b462ab9ab221d66c47818e62b22af982bcd502344527c19","signature":"8d9efd4466755e273a92a18d39b5558206f4653348b37627b3ca9135f830d9e9"},{"version":"00c7ddea224be69f96837059c56e6c85999f75991bffd7388558eba0fb2e0ae9","signature":"2c37671313573b1310d3af3675add12acba622f34cd1527306a7cb386a3be2f1"},"a87e5902fd92d16a80e0020ac03d6477bc2e7a6f5b0407a73aff6b7aa9e01d55",{"version":"dc7b885af6bd832c8d08622e645782a172a24bb97bf04c6d3db92b55baa20d0f","signature":"1898625646b2cf2e46529298f8ee1da27222180d2ac3261b174ed1c9e9256536"},{"version":"bee94f78f44164001ca6ff2d4fd723d8cd53bd92c102d7f9b2fcf24449e82bbc","signature":"fe543d080d1755c5e9482f0c98675f1ca4175b42a4c871e1587bf97fb0695642"},{"version":"8e7c73350999eb7cef5cca22d81b279028d151b9426546923fe65718373eb4dc","signature":"2f7dd5539c0964595409446eacc423f2fb5b7c0959f9ffd075eefde293ee3b0e"},"274b1fbd4d413479581ee864f2cb714e506f64725fca44afb1789707c509c953","b97b9034d922921957ec6a8193b68dfac3bf563520ebeb67738cd17bafd697a0",{"version":"b731511ef450ace6c32de6c14ac6585cdf75642aad5a3224ead8d4abc50585db","signature":"a3b67d6cc47a9c07b8701daf59dd4f763b280e79a1bc39443bf9b49a9555329b"},{"version":"1429bca7de08240da18d233e03e894191274b6078330f4a26e437f1c0fb13067","signature":"3f88ef93de6bb7cd11af06b1a9029da3e99c9c2ecdcc4ba576961bac88464dac"},{"version":"87c989972cabf18dc503903955d69db5d0f4da660fd9ee57f614b3fe40f0093f","signature":"f8e018232d5d4aef8e0ab20103155109e2dd7c93dc32c0857145dae5e3a687fe"},"19ce9ec982b542ef6d04d29ce678aad2fa52a67d8087e9c6cd95a4d6d98784c8","75d3b70589f5e14016a629feef0cd8deb55cab794e8c14bdbd5794c3b08a957e","c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","64c9980a5c0f4627b7189eeece6816bb68e1c5c62a06d59ce6742f3328cfe854","acf1068cf9f861280669578ced81d6f6701609b6e8c46c983fd1c3b62ca1c129","5599d7a8727ecc5c463176c284c76b4a93ed79df3cc617548998d2d5c4b57c12","866223f4c6921da309cafb3441ff835d787ab52747825e2371b404458b1bd7b9","73b67d2e87ac7d7baaca64ca33fd1523c0b3c850cb7db5b9c014f1be7996bed1","5d5ae61fce1581fd6424269790a9071e3f8e69b029f5d0fcb46ce618c5dbc565","38a0ccc7106312a9f60e034e7cd8ac218774d8aa65f832cee3363a7e65f99325",{"version":"c3bc5d095c3c22fd20b5a6550b9c9a6d56c3ffbb87ef057ccce7764b6bed4428","affectsGlobalScope":true},"bff48cd8ff6b53727de810bd00a11e04975b1bc9c7677f3fe839159565ad1546","05c7aef6a4e496b93c2e682cced8903c0dfe6340d04f3fe616176e2782193435",{"version":"47c8c25482eb4844ac9c11758f9a6c0112ecb1c7216f91e3463772e73f989a63","affectsGlobalScope":true},"ba8691cf6bea9d53e6bf6cbc22af964a9633a21793981a1be3dce65e7a714d8b","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"bce910d9164785c9f0d4dcea4be359f5f92130c7c7833dea6138ab1db310a1f9","affectsGlobalScope":true},"7d2e3fea24c712c99c03ad8f556abedbfe105f87f1be10b95dbd409d24bc05a3",{"version":"7c387a02bf156d8d45667134d32518ac3ca1b99ca50ca9deff2c1a03eb6d1a81","affectsGlobalScope":true},"3719525a8f6ab731e3dfd585d9f87df55ec7d50d461df84f74eb4d68bb165244","f993522fd7d01ae1ead930091fe35130b8415720d6c2123dc2a7e8eb11bb3cba",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","b787b5b54349a24f07d089b612a9fb8ff024dbbe991ff52ea2b188a6b1230644","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","1cdcfc1f624d6c08aa12c73935f6e13f095919cd99edf95752951796eb225729","df6d4b6ba1e64f682091862faa30104e93891f9e7202d006bf5e7a88ab4a0dbe","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"c2fcbd6fad600e96fee8c5df1a62e908d477f5b47a9374b2bab7e74f52cfcc92","affectsGlobalScope":true},"5e3f2470ce8038c4005ff1baff18a69848383f431d6817d453e70d66e037f4a2","cc68e79b99f80e4dfd01967ec96be69efb0ff5bd7f779d9a2cc09dfe590ffd28","91d3d8f536f22dcaeeace0fc6f3544d3562e266a27cf3a2fe280b8051af5d006","9503113febdd737095465792cc074d541902c82c0aea3922f940de18784812ad","8d3c583a07e0c37e876908c2d5da575019f689df8d9fa4c081d99119d53dba22","2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58",{"version":"e630e5528e899219ae319e83bef54bf3bcb91b01d76861ecf881e8e614b167f0","affectsGlobalScope":true},"bcebb922784739bdb34c18ee51095d25a92b560c78ccd2eaacd6bd00f7443d83","7ee6ed878c4528215c82b664fe0cfe80e8b4da6c0d4cc80869367868774db8b1","b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30",{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true},{"version":"0715e4cd28ad471b2a93f3e552ff51a3ae423417a01a10aa1d3bc7c6b95059d6","affectsGlobalScope":true},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","ff1bad1849903b15fba47f3c29bdec5f97324874c93933a89b2bca28a23977fb","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda",{"version":"d9b4afd96c3c0ff70e90d05ef022e582b102e665e9029d34940472dc3058360e","affectsGlobalScope":true},{"version":"3c4ba1dd9b12ffa284b565063108f2f031d150ea15b8fafbdc17f5d2a07251f3","affectsGlobalScope":true},"e10177274a35a9d07c825615340b2fcde2f610f53f3fb40269fd196b4288dda6","1422cd9e705adcc09088fda85a900c2b70e3ad36ea85846f68bd1a884cdf4e2b","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"22d7b95cb63dead43834ae20ee492c9c8b6d90db3957d21665199f0efb1d3e26","affectsGlobalScope":true},{"version":"a9fc1469744055a3435f203123246b96c094e7ff8c4e1c3863829d9b705b7a34","affectsGlobalScope":true},"868831cab82b65dfe1d68180e898af1f2101e89ba9b754d1db6fb8cc2fac1921","0fe8985a28f82c450a04a6edf1279d7181c0893f37da7d2a27f8efd4fd5edb03","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa",{"version":"52120bb7e4583612225bdf08e7c12559548170f11e660d33a33623bae9bbdbba","affectsGlobalScope":true},"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"d5be4343a9ace4611f04a6fffd91ceba91265fa15bfb0149306e0a6963e1a015","3b8ac5f54f287ac748e109a2639392ee70ae7e9a3f58ee637e21e1b3d57bed03","8f07f2b6514744ac96e51d7cb8518c0f4de319471237ea10cf688b8d0e9d0225","bcb6ea18f23dae2c48459d7b86d3adccd6898f824fcbf9da08b935f559896580","1363ba7d52f2353d0c4306d0ecdaf171bf4509c0148842f9fd8d3986c098a2eb","aae7ec197d95633437bc3023739cd955344559932ae07c25fea7600c2eb0e2f0","739c2c46edc112421fc023c24b4898b1f413f792bb6a02b40ba182c648e56c2f","858d0d831826c6eb563df02f7db71c90e26deadd0938652096bea3cc14899700","8885cf05f3e2abf117590bbb951dcf6359e3e5ac462af1c901cfd24c6a6472e2","e4de16da5082cd440c0e19bcf219c5c4a7f3c3104d97db3bb6ee5b9c2a9a1bdd","5e92a2e8ba5cbcdfd9e51428f94f7bd0ab6e45c9805b1c9552b64abaffad3ce3","53ca39fe70232633759dd3006fc5f467ecda540252c0c819ab53e9f6ad97b226","e7174a839d4732630d904a8b488f22380e5bcf1d6405d1f59614e10795eca17d","7ec359bbc29b69d4063fe7dad0baaf35f1856f914db16b3f4f6e3e1bca4099fa","1fa3342736ff551848cdcd8edeece95b2016448364b3e9ad1cb70e86e28f42a1","5ca9f5cc0104446228a0c6c1f353d49a9b92d40fa7096479595d62061e8279c9","4c1eed2b08adb0d98eb9551d426c43e3426282aa544559d30e05e5998e46321b","436598e80d4957d007b84bd7255394057848ab310895e2dcaebc5debb932fdbc","74f2815d9e1b8530120dcad409ed5f706df8513c4d93e99fc6213997aa4dd60e","9d1f36ccd354f2e286b909bf01d626a3a28dd6590770303a18afa7796fe50db9","c4bc6a572f9d763ac7fa0d839be3de80273a67660e2002e3225e00ef716b4f37","106e607866d6c3e9a497a696ac949c3e2ec46b6e7dda35aabe76100bf740833b","b854943ab33d8d8afab99b3a205aaec4f908e4f4b1b840097db95aed0bb3b16d","d4514d11e7d11c53da7d43b948654d6e608a3d93d666a36f8d01e18ece04c9bd","3d65182eff7bbb16de1a69e17651c51083f740af11a1a92359be6dab939e8bcf","78537f1b16692afdddef1b5c8981cea4a1be030eaca482bd5566b44cffa5192b","5af924defa85825aa63f023b562727d5bc7f91e71363e3f7ae24392bede17066","4d5fb5d6b35f731b2ae4d9d7c592d48e91d6de531dd130628edf4eba16add893","d12ab69ace581804d4f264eabc71094ca8dadfa70ae2bf5ccd54a8d6105ab84b","d757ef86e18b87094ad733c2a1ed7acc21878f5feb931bea64643f40a84e688c","6cb8dc4e3d4357c8badd567bd090aceedcd0d2afa4987f46471ba602956af034","8b0943864dafdf38b7c8cfbc736c04c5e65653837d85177aebde0732f34be8be","e666e31d323fef5642f87db0da48a83e58f0aaf9e3823e87eabd8ec7e0441a36","caeae351358d6c5b8da971c4ba7973987cbbbe4766081d07394e51c5544c8727","a23dd1a2177fda8e2d0e79874f4a150353d10e60ea3e9c690d7ca05b4775e542","e72396ce544667ab49df38ffb91cb3f80ff17d2ad3df903ec30b1d2ca8ea68de","b7e28e06011460436d5c2ec2996846ac0c451e135357fc5a7269e5665a32fbd7","647550b021976e287be83dd5c1a0919d2d99c47ffc470c80880f670ca4f395ab","d979524749bd1873e4e7a63b9551381711855a1bd5fc4be394b64568de6adc6d","9a82b3cd322d6b46c2407c162bbfd0b13edc9d23dced719a751a481b985690a0","13446337b269b3a8fdac668f9cf831b313529aea23f26621ecf5097c3e53bb25","f63e23230f3960b712450cf08f0f31e56acdae3ce65e0bf31bfdd6442b29d115","f2d1a59a658165341b0e2b7879aa2e19ea6a709146b2d3f70ee8a07159d3d08e","46e1ed17157235f8bf123517f691d1f93c6bffda998f6cd9fee470f2968b58c9","ba88974db5ce05013d08e521d5d1c2266ed5bfafac02763d18e15b3ced925c88",{"version":"67df11fb5478a41ff289fc72ae13789a7b4a57f81b9e2ab65ffa297690f98d15","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"9289f24e698d4e17863ea907ec75b1942aa382b6da49c364fd12b9a6614039cc","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"}],"root":[[70,77],[83,94],[96,98],[101,103],218,219],"options":{"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"esModuleInterop":true,"module":99,"noEmitOnError":true,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","sourceMap":true,"strict":false,"target":2,"tsBuildInfoFile":"./.tsbuildinfo"},"fileIdsList":[[106,166],[166],[120,166],[123,166],[124,129,157,166],[125,136,137,144,154,165,166],[125,126,136,144,166],[127,166],[128,129,137,145,166],[129,154,162,166],[130,132,136,144,166],[131,166],[132,133,166],[136,166],[134,136,166],[136,137,138,154,165,166],[136,137,138,151,154,157,166],[166,170],[132,136,139,144,154,165,166],[136,137,139,140,144,154,162,165,166],[139,141,154,162,165,166],[120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,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],[136,142,166],[143,165,166],[132,136,144,154,166],[145,166],[146,166],[123,147,166],[148,164,166,170],[149,166],[150,166],[136,151,152,166],[151,153,166,168],[124,136,154,155,156,157,166],[124,154,156,166],[154,155,166],[157,166],[158,166],[154,166],[136,160,161,166],[160,161,166],[129,144,154,162,166],[163,166],[144,164,166],[124,139,150,165,166],[129,166],[154,166,167],[166,168],[166,169],[124,129,136,138,147,154,165,166,168,170],[154,166,171],[109,116,118,166],[109,110,111,166],[109,166],[109,110,166],[166,204],[113,166],[108,113,166],[108,113,114,166],[166,214],[166,208],[166,212],[117,166],[108,166],[104,166],[104,105,108,166],[78,79,80,81,166],[79,166],[79,80,166],[166,195],[166,193,195],[166,184,192,193,194,196],[166,182],[166,185,190,195,198],[166,181,198],[166,185,186,189,190,198],[166,185,186,187,189,190,198],[166,182,183,184,185,186,190,191,192,194,195,196,198],[166,180,182,183,184,185,186,187,189,190,191,192,193,194,195,196,197],[166,180,198],[166,185,187,188,190,198],[166,189,198],[166,190,191,195,198],[166,183,193],[107,166],[166,180],[166,200,201,202],[166,199,200,201,202,211],[166,200,201],[136,137,139,141,144,154,162,165,166,171,173,174,175,176,177,178,179,198],[166,176],[166,177],[166,178],[109,112,115,116,119,137,166,170,175,178,199,203,205,206,207,209,210,211],[109,112,115,116,119,137,166,170,175,178,199,203,205,206,207,209,210,211,213,215,216],[67,166],[61,166],[61,63,166],[61,62,63,64,65,66,67,68,166],[61,62,64,65,66,166],[69,72,73,166],[69,166],[76,166],[69,82,84,166],[69,70,166],[69,70,71,166],[69,72,88,89,90,166],[69,72,86,87,166],[69,86,96,166],[69,71,166],[69,72,166],[70,71,72,73,74,75,76,77,83,84,85,86,87,88,89,90,91,92,93,94,96,97,98,101,102,166],[95,166],[101,166,217],[99,100,166],[84,166,217],[83,166],[69],[70,71,72,73,74,75,76,77,83,84,85,86,87,88,89,90,91,92,93,94,96,97,98,101,102],[95]],"referencedMap":[[107,1],[106,2],[116,2],[120,3],[121,3],[123,4],[124,5],[125,6],[126,7],[127,8],[128,9],[129,10],[130,11],[131,12],[132,13],[133,13],[135,14],[134,15],[136,14],[137,16],[138,17],[122,18],[172,2],[139,19],[140,20],[141,21],[173,22],[142,23],[143,24],[144,25],[145,26],[146,27],[147,28],[148,29],[149,30],[150,31],[151,32],[152,32],[153,33],[154,34],[156,35],[155,36],[157,37],[158,38],[159,39],[160,40],[161,41],[162,42],[163,43],[164,44],[165,45],[166,46],[167,47],[168,48],[169,49],[170,50],[171,51],[119,52],[112,53],[110,54],[111,55],[204,55],[205,56],[113,2],[214,57],[114,58],[115,59],[208,59],[215,60],[209,61],[213,62],[118,63],[117,64],[105,65],[109,66],[104,2],[174,2],[78,2],[95,2],[99,2],[100,2],[82,67],[80,68],[81,69],[79,2],[196,70],[194,71],[195,72],[183,73],[184,71],[191,74],[182,75],[187,76],[197,2],[188,77],[193,78],[198,79],[181,80],[189,81],[190,82],[185,83],[192,70],[186,84],[108,85],[178,2],[180,86],[206,2],[212,2],[59,2],[60,2],[12,2],[14,2],[13,2],[2,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[3,2],[4,2],[26,2],[23,2],[24,2],[25,2],[27,2],[28,2],[29,2],[5,2],[30,2],[31,2],[32,2],[33,2],[6,2],[37,2],[34,2],[35,2],[36,2],[38,2],[7,2],[39,2],[44,2],[45,2],[40,2],[41,2],[42,2],[43,2],[8,2],[49,2],[46,2],[47,2],[48,2],[50,2],[9,2],[51,2],[52,2],[53,2],[56,2],[54,2],[55,2],[57,2],[10,2],[1,2],[11,2],[58,2],[207,87],[203,87],[210,88],[202,89],[201,2],[199,90],[177,91],[176,2],[200,92],[179,2],[175,93],[216,94],[217,95],[211,94],[68,96],[62,97],[66,97],[65,98],[61,2],[63,97],[69,99],[67,100],[64,97],[74,101],[75,102],[76,2],[77,103],[85,104],[70,102],[86,105],[87,102],[72,106],[91,107],[92,102],[93,108],[94,102],[97,109],[88,110],[73,110],[98,111],[71,102],[83,2],[103,112],[96,113],[102,102],[89,2],[218,114],[101,115],[219,116],[84,117],[90,2]],"exportedModulesMap":[[107,1],[106,2],[116,2],[120,3],[121,3],[123,4],[124,5],[125,6],[126,7],[127,8],[128,9],[129,10],[130,11],[131,12],[132,13],[133,13],[135,14],[134,15],[136,14],[137,16],[138,17],[122,18],[172,2],[139,19],[140,20],[141,21],[173,22],[142,23],[143,24],[144,25],[145,26],[146,27],[147,28],[148,29],[149,30],[150,31],[151,32],[152,32],[153,33],[154,34],[156,35],[155,36],[157,37],[158,38],[159,39],[160,40],[161,41],[162,42],[163,43],[164,44],[165,45],[166,46],[167,47],[168,48],[169,49],[170,50],[171,51],[119,52],[112,53],[110,54],[111,55],[204,55],[205,56],[113,2],[214,57],[114,58],[115,59],[208,59],[215,60],[209,61],[213,62],[118,63],[117,64],[105,65],[109,66],[104,2],[174,2],[78,2],[95,2],[99,2],[100,2],[82,67],[80,68],[81,69],[79,2],[196,70],[194,71],[195,72],[183,73],[184,71],[191,74],[182,75],[187,76],[197,2],[188,77],[193,78],[198,79],[181,80],[189,81],[190,82],[185,83],[192,70],[186,84],[108,85],[178,2],[180,86],[206,2],[212,2],[59,2],[60,2],[12,2],[14,2],[13,2],[2,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[3,2],[4,2],[26,2],[23,2],[24,2],[25,2],[27,2],[28,2],[29,2],[5,2],[30,2],[31,2],[32,2],[33,2],[6,2],[37,2],[34,2],[35,2],[36,2],[38,2],[7,2],[39,2],[44,2],[45,2],[40,2],[41,2],[42,2],[43,2],[8,2],[49,2],[46,2],[47,2],[48,2],[50,2],[9,2],[51,2],[52,2],[53,2],[56,2],[54,2],[55,2],[57,2],[10,2],[1,2],[11,2],[58,2],[207,87],[203,87],[210,88],[202,89],[201,2],[199,90],[177,91],[176,2],[200,92],[179,2],[175,93],[216,94],[217,95],[211,94],[68,96],[62,97],[66,97],[65,98],[61,2],[63,97],[69,99],[67,100],[64,97],[74,118],[75,118],[85,118],[70,118],[86,118],[87,118],[72,118],[91,118],[92,118],[93,118],[94,118],[97,118],[88,118],[73,118],[98,118],[71,118],[103,119],[96,120],[102,118]],"semanticDiagnosticsPerFile":[107,106,116,120,121,123,124,125,126,127,128,129,130,131,132,133,135,134,136,137,138,122,172,139,140,141,173,142,143,144,145,146,147,148,149,150,151,152,153,154,156,155,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,119,112,110,111,204,205,113,214,114,115,208,215,209,213,118,117,105,109,104,174,78,95,99,100,82,80,81,79,196,194,195,183,184,191,182,187,197,188,193,198,181,189,190,185,192,186,108,178,180,206,212,59,60,12,14,13,2,15,16,17,18,19,20,21,22,3,4,26,23,24,25,27,28,29,5,30,31,32,33,6,37,34,35,36,38,7,39,44,45,40,41,42,43,8,49,46,47,48,50,9,51,52,53,56,54,55,57,10,1,11,58,207,203,210,202,201,199,177,176,200,179,175,216,217,211,68,62,66,65,61,63,69,67,64,74,75,76,77,85,70,86,87,72,91,92,93,94,97,88,73,98,71,83,103,96,102,89,218,101,219,84,90]},"version":"5.1.6"}
@@ -0,0 +1,3 @@
1
+ import type { ExtendedRecordMap, Block, Collection } from '@texonom/ntypes';
2
+ export declare function findAncestors(recordMap: ExtendedRecordMap, block: Block | Collection, list?: string[]): string[];
3
+ //# sourceMappingURL=find-ancestors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-ancestors.d.ts","sourceRoot":"","sources":["../src/find-ancestors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE3E,wBAAgB,aAAa,CAAC,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,GAAG,UAAU,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAQpH"}
@@ -1,4 +1,4 @@
1
- import { ExtendedRecordMap, PageMap } from '@texonom/ntypes';
1
+ import type { ExtendedRecordMap, PageMap } from '@texonom/ntypes';
2
2
  /**
3
3
  * Performs a traversal over a given Notion workspace starting from a seed page.
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"get-all-pages-in-space.d.ts","sourceRoot":"","sources":["../src/get-all-pages-in-space.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAK5D;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,EACvD,EACE,WAAe,EACf,mBAA0B,EAC1B,YAAmB,EACpB,GAAE;IACD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;CACjB,GACL,OAAO,CAAC,OAAO,CAAC,CAiElB"}
1
+ {"version":3,"file":"get-all-pages-in-space.d.ts","sourceRoot":"","sources":["../src/get-all-pages-in-space.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAEjE;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,EACvD,EACE,WAAe,EACf,mBAA0B,EAC1B,YAAmB,EACpB,GAAE;IACD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;CACjB,GACL,OAAO,CAAC,OAAO,CAAC,CAiElB"}
@@ -1,3 +1,3 @@
1
- import { Block, ExtendedRecordMap } from '@texonom/ntypes';
1
+ import type { Block, ExtendedRecordMap } from '@texonom/ntypes';
2
2
  export declare function getBlockCollectionId(block: Block, recordMap: ExtendedRecordMap): string | null;
3
3
  //# sourceMappingURL=get-block-collection-id.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-block-collection-id.d.ts","sourceRoot":"","sources":["../src/get-block-collection-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAE1D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAe9F"}
1
+ {"version":3,"file":"get-block-collection-id.d.ts","sourceRoot":"","sources":["../src/get-block-collection-id.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAE/D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAe9F"}
@@ -1,3 +1,3 @@
1
- import { Block, ExtendedRecordMap } from '@texonom/ntypes';
1
+ import type { Block, ExtendedRecordMap } from '@texonom/ntypes';
2
2
  export declare function getBlockIcon(block: Block, recordMap: ExtendedRecordMap): string;
3
3
  //# sourceMappingURL=get-block-icon.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-block-icon.d.ts","sourceRoot":"","sources":["../src/get-block-icon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAa,MAAM,iBAAiB,CAAA;AAIrE,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,UAatE"}
1
+ {"version":3,"file":"get-block-icon.d.ts","sourceRoot":"","sources":["../src/get-block-icon.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAa,MAAM,iBAAiB,CAAA;AAE1E,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,UAatE"}
@@ -1,11 +1,11 @@
1
- import * as types from '@texonom/ntypes';
1
+ import type { Block, ExtendedRecordMap, PageBlock } from '@texonom/ntypes';
2
2
  /**
3
3
  * Returns the parent page block containing a given page.
4
4
  *
5
5
  * Note that many times this will not be the direct parent block since
6
6
  * some non-page content blocks can contain sub-blocks.
7
7
  */
8
- export declare const getBlockParentPage: (block: types.Block, recordMap: types.ExtendedRecordMap, { inclusive }?: {
8
+ export declare const getBlockParentPage: (block: Block, recordMap: ExtendedRecordMap, { inclusive }?: {
9
9
  inclusive?: boolean;
10
- }) => types.PageBlock | null;
10
+ }) => PageBlock | null;
11
11
  //# sourceMappingURL=get-block-parent-page.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-block-parent-page.d.ts","sourceRoot":"","sources":["../src/get-block-parent-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AAExC;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,UACtB,MAAM,KAAK,aACP,MAAM,iBAAiB;gBAIpB,OAAO;MAEpB,MAAM,SAAS,GAAG,IAqBpB,CAAA"}
1
+ {"version":3,"file":"get-block-parent-page.d.ts","sourceRoot":"","sources":["../src/get-block-parent-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAA;AAEtF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,UACtB,KAAK,aACD,iBAAiB;gBAId,OAAO;MAEpB,SAAS,GAAG,IAoBd,CAAA"}
@@ -1,3 +1,3 @@
1
- import { Block, ExtendedRecordMap } from '@texonom/ntypes';
1
+ import type { Block, ExtendedRecordMap } from '@texonom/ntypes';
2
2
  export declare function getBlockTitle(block: Block, recordMap: ExtendedRecordMap): string;
3
3
  //# sourceMappingURL=get-block-title.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-block-title.d.ts","sourceRoot":"","sources":["../src/get-block-title.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAK1D,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,UAcvE"}
1
+ {"version":3,"file":"get-block-title.d.ts","sourceRoot":"","sources":["../src/get-block-title.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAE/D,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,UAWvE"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-canonical-page-id.d.ts","sourceRoot":"","sources":["../src/get-canonical-page-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAOnD;;GAEG;AACH,eAAO,MAAM,kBAAkB,WACrB,MAAM,aACH,iBAAiB;WACF,OAAO;MAChC,MAAM,GAAG,IAkBX,CAAA"}
1
+ {"version":3,"file":"get-canonical-page-id.d.ts","sourceRoot":"","sources":["../src/get-canonical-page-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAOnD;;GAEG;AACH,eAAO,MAAM,kBAAkB,WACrB,MAAM,aACH,iBAAiB;WACF,OAAO;MAChC,MAAM,GAAG,IAgBX,CAAA"}
@@ -1,6 +1,6 @@
1
- import * as types from '@texonom/ntypes';
1
+ import type { FormattedDate } from '@texonom/ntypes';
2
2
  /**
3
3
  * Attempts to find a valid date from a given property.
4
4
  */
5
- export declare const getDateValue: (prop: any[]) => types.FormattedDate | null;
5
+ export declare const getDateValue: (prop: any[]) => FormattedDate | null;
6
6
  //# sourceMappingURL=get-date-value.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-date-value.d.ts","sourceRoot":"","sources":["../src/get-date-value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AAExC;;GAEG;AACH,eAAO,MAAM,YAAY,SAAU,GAAG,EAAE,KAAG,MAAM,aAAa,GAAG,IAUhE,CAAA"}
1
+ {"version":3,"file":"get-date-value.d.ts","sourceRoot":"","sources":["../src/get-date-value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEpD;;GAEG;AACH,eAAO,MAAM,YAAY,SAAU,GAAG,EAAE,KAAG,aAAa,GAAG,IAU1D,CAAA"}
@@ -1,3 +1,3 @@
1
- import * as types from '@texonom/ntypes';
2
- export declare const getPageBreadcrumbs: (recordMap: types.ExtendedRecordMap, activePageId: string) => Array<any> | null;
1
+ import type { ExtendedRecordMap } from '@texonom/ntypes';
2
+ export declare const getPageBreadcrumbs: (recordMap: ExtendedRecordMap, activePageId: string) => Array<any> | null;
3
3
  //# sourceMappingURL=get-page-breadcrumbs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-page-breadcrumbs.d.ts","sourceRoot":"","sources":["../src/get-page-breadcrumbs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AAMxC,eAAO,MAAM,kBAAkB,cAAe,MAAM,iBAAiB,gBAAgB,MAAM,KAAG,MAAM,GAAG,CAAC,GAAG,IAoC1G,CAAA"}
1
+ {"version":3,"file":"get-page-breadcrumbs.d.ts","sourceRoot":"","sources":["../src/get-page-breadcrumbs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,eAAO,MAAM,kBAAkB,cAAe,iBAAiB,gBAAgB,MAAM,KAAG,MAAM,GAAG,CAAC,GAAG,IAoCpG,CAAA"}
@@ -1,6 +1,10 @@
1
- import * as types from '@texonom/ntypes';
1
+ import type { ExtendedRecordMap } from '@texonom/ntypes';
2
2
  /**
3
3
  * Gets the IDs of all blocks contained on a page starting from a root block ID.
4
4
  */
5
- export declare const getPageContentBlockIds: (recordMap: types.ExtendedRecordMap, blockId?: string) => string[];
5
+ export declare const getPageContentBlockIds: (recordMap: ExtendedRecordMap, blockId?: string) => string[];
6
+ /**
7
+ * Gets the IDs of all blocks contained on a page starting from a root block ID.
8
+ */
9
+ export declare const getPageContentUserIds: (recordMap: ExtendedRecordMap, blockId?: string) => string[];
6
10
  //# sourceMappingURL=get-page-content-block-ids.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-page-content-block-ids.d.ts","sourceRoot":"","sources":["../src/get-page-content-block-ids.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AAExC;;GAEG;AACH,eAAO,MAAM,sBAAsB,cAAe,MAAM,iBAAiB,YAAY,MAAM,KAAG,MAAM,EA+CnG,CAAA"}
1
+ {"version":3,"file":"get-page-content-block-ids.d.ts","sourceRoot":"","sources":["../src/get-page-content-block-ids.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAc,MAAM,iBAAiB,CAAA;AAEpE;;GAEG;AACH,eAAO,MAAM,sBAAsB,cAAe,iBAAiB,YAAY,MAAM,KAAG,MAAM,EAoC7F,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,cAAe,iBAAiB,YAAY,MAAM,KAAG,MAAM,EAoB5F,CAAA"}
@@ -1,8 +1,8 @@
1
- import * as types from '@texonom/ntypes';
1
+ import type { Block, ExtendedRecordMap } from '@texonom/ntypes';
2
2
  /**
3
3
  * Gets URLs of all images contained on the given page.
4
4
  */
5
- export declare const getPageImageUrls: (recordMap: types.ExtendedRecordMap, { mapImageUrl }: {
6
- mapImageUrl: (url: string, block: types.Block) => string | null;
5
+ export declare const getPageImageUrls: (recordMap: ExtendedRecordMap, { mapImageUrl }: {
6
+ mapImageUrl: (url: string, block: Block) => string | null;
7
7
  }) => string[];
8
8
  //# sourceMappingURL=get-page-image-urls.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-page-image-urls.d.ts","sourceRoot":"","sources":["../src/get-page-image-urls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AAKxC;;GAEG;AACH,eAAO,MAAM,gBAAgB,cAChB,MAAM,iBAAiB;uBAIb,MAAM,SAAS,MAAM,KAAK,KAAK,MAAM,GAAG,IAAI;MAEhE,MAAM,EA8DR,CAAA"}
1
+ {"version":3,"file":"get-page-image-urls.d.ts","sourceRoot":"","sources":["../src/get-page-image-urls.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAE/D;;GAEG;AACH,eAAO,MAAM,gBAAgB,cAChB,iBAAiB;uBAIP,MAAM,SAAS,KAAK,KAAK,MAAM,GAAG,IAAI;MAE1D,MAAM,EA8DR,CAAA"}
@@ -1,7 +1,7 @@
1
- import * as types from '@texonom/ntypes';
1
+ import type { ID, BlockType, PageBlock, ExtendedRecordMap } from '@texonom/ntypes';
2
2
  export interface TableOfContentsEntry {
3
- id: types.ID;
4
- type: types.BlockType;
3
+ id: ID;
4
+ type: BlockType;
5
5
  text: string;
6
6
  indentLevel: number;
7
7
  }
@@ -9,5 +9,5 @@ export interface TableOfContentsEntry {
9
9
  * Gets the metadata for a table of contents block by parsing the page's
10
10
  * H1, H2, and H3 elements.
11
11
  */
12
- export declare const getPageTableOfContents: (page: types.PageBlock, recordMap: types.ExtendedRecordMap) => Array<TableOfContentsEntry>;
12
+ export declare const getPageTableOfContents: (page: PageBlock, recordMap: ExtendedRecordMap) => Array<TableOfContentsEntry>;
13
13
  //# sourceMappingURL=get-page-table-of-contents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-page-table-of-contents.d.ts","sourceRoot":"","sources":["../src/get-page-table-of-contents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AAIxC,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAA;IACZ,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB;AAQD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,SAC3B,MAAM,SAAS,aACV,MAAM,iBAAiB,KACjC,MAAM,oBAAoB,CAyD5B,CAAA"}
1
+ {"version":3,"file":"get-page-table-of-contents.d.ts","sourceRoot":"","sources":["../src/get-page-table-of-contents.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAElF,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,EAAE,CAAA;IACN,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB;AAQD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,SAAU,SAAS,aAAa,iBAAiB,KAAG,MAAM,oBAAoB,CAyDhH,CAAA"}
@@ -1,9 +1,9 @@
1
- import * as types from '@texonom/ntypes';
1
+ import type { Decoration } from '@texonom/ntypes';
2
2
  /**
3
3
  * Gets the raw, unformatted text content of a block's content value.
4
4
  *
5
5
  * This is useful, for instance, for extracting a block's `title` without any
6
6
  * rich text formatting.
7
7
  */
8
- export declare const getTextContent: (text?: types.Decoration[]) => string;
8
+ export declare const getTextContent: (text?: Decoration[]) => string;
9
9
  //# sourceMappingURL=get-text-content.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-text-content.d.ts","sourceRoot":"","sources":["../src/get-text-content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AAExC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,UAAW,MAAM,UAAU,EAAE,KAAG,MAK1D,CAAA"}
1
+ {"version":3,"file":"get-text-content.d.ts","sourceRoot":"","sources":["../src/get-text-content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,UAAW,UAAU,EAAE,KAAG,MAKpD,CAAA"}
package/build/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
- import * as types from '@texonom/ntypes';
2
- import { Block, ExtendedRecordMap, PageMap } from '@texonom/ntypes';
1
+ import { Decoration, Block, ExtendedRecordMap, FormattedDate, PageBlock, ID, BlockType, PageMap, Collection } from '@texonom/ntypes';
3
2
  export { default as isUrl } from 'is-url-superb';
4
3
 
5
4
  /**
@@ -8,7 +7,7 @@ export { default as isUrl } from 'is-url-superb';
8
7
  * This is useful, for instance, for extracting a block's `title` without any
9
8
  * rich text formatting.
10
9
  */
11
- declare const getTextContent: (text?: types.Decoration[]) => string;
10
+ declare const getTextContent: (text?: Decoration[]) => string;
12
11
 
13
12
  declare function getBlockTitle(block: Block, recordMap: ExtendedRecordMap): string;
14
13
 
@@ -36,7 +35,7 @@ declare function getPageProperty<T = string | number | boolean | string[] | numb
36
35
  /**
37
36
  * Attempts to find a valid date from a given property.
38
37
  */
39
- declare const getDateValue: (prop: any[]) => types.FormattedDate | null;
38
+ declare const getDateValue: (prop: any[]) => FormattedDate | null;
40
39
 
41
40
  /**
42
41
  * Returns the parent page block containing a given page.
@@ -44,13 +43,13 @@ declare const getDateValue: (prop: any[]) => types.FormattedDate | null;
44
43
  * Note that many times this will not be the direct parent block since
45
44
  * some non-page content blocks can contain sub-blocks.
46
45
  */
47
- declare const getBlockParentPage: (block: types.Block, recordMap: types.ExtendedRecordMap, { inclusive }?: {
46
+ declare const getBlockParentPage: (block: Block, recordMap: ExtendedRecordMap, { inclusive }?: {
48
47
  inclusive?: boolean;
49
- }) => types.PageBlock | null;
48
+ }) => PageBlock | null;
50
49
 
51
50
  interface TableOfContentsEntry {
52
- id: types.ID;
53
- type: types.BlockType;
51
+ id: ID;
52
+ type: BlockType;
54
53
  text: string;
55
54
  indentLevel: number;
56
55
  }
@@ -58,12 +57,16 @@ interface TableOfContentsEntry {
58
57
  * Gets the metadata for a table of contents block by parsing the page's
59
58
  * H1, H2, and H3 elements.
60
59
  */
61
- declare const getPageTableOfContents: (page: types.PageBlock, recordMap: types.ExtendedRecordMap) => Array<TableOfContentsEntry>;
60
+ declare const getPageTableOfContents: (page: PageBlock, recordMap: ExtendedRecordMap) => Array<TableOfContentsEntry>;
62
61
 
63
62
  /**
64
63
  * Gets the IDs of all blocks contained on a page starting from a root block ID.
65
64
  */
66
- declare const getPageContentBlockIds: (recordMap: types.ExtendedRecordMap, blockId?: string) => string[];
65
+ declare const getPageContentBlockIds: (recordMap: ExtendedRecordMap, blockId?: string) => string[];
66
+ /**
67
+ * Gets the IDs of all blocks contained on a page starting from a root block ID.
68
+ */
69
+ declare const getPageContentUserIds: (recordMap: ExtendedRecordMap, blockId?: string) => string[];
67
70
 
68
71
  /**
69
72
  * Robustly extracts the notion page ID from a notion URL or pathname suffix.
@@ -106,13 +109,13 @@ declare const getCanonicalPageId: (pageId: string, recordMap: ExtendedRecordMap,
106
109
  uuid?: boolean;
107
110
  }) => string | null;
108
111
 
109
- declare const getPageBreadcrumbs: (recordMap: types.ExtendedRecordMap, activePageId: string) => Array<any> | null;
112
+ declare const getPageBreadcrumbs: (recordMap: ExtendedRecordMap, activePageId: string) => Array<any> | null;
110
113
 
111
114
  /**
112
115
  * Gets URLs of all images contained on the given page.
113
116
  */
114
- declare const getPageImageUrls: (recordMap: types.ExtendedRecordMap, { mapImageUrl }: {
115
- mapImageUrl: (url: string, block: types.Block) => string | null;
117
+ declare const getPageImageUrls: (recordMap: ExtendedRecordMap, { mapImageUrl }: {
118
+ mapImageUrl: (url: string, block: Block) => string | null;
116
119
  }) => string[];
117
120
 
118
121
  declare const normalizeUrl: (url?: string) => string;
@@ -133,6 +136,8 @@ interface NotionDateTime {
133
136
  }
134
137
  declare const formatNotionDateTime: (datetime: NotionDateTime) => string;
135
138
 
139
+ declare function findAncestors(recordMap: ExtendedRecordMap, block: Block | Collection, list?: string[]): string[];
140
+
136
141
  type EstimatePageReadTimeOptions = {
137
142
  wordsPerMinute?: number;
138
143
  imageReadTimeInSeconds?: number;
@@ -166,4 +171,4 @@ declare function estimatePageReadTime(block: Block, recordMap: ExtendedRecordMap
166
171
  */
167
172
  declare function estimatePageReadTimeAsHumanizedString(block: Block, recordMap: ExtendedRecordMap, opts: EstimatePageReadTimeOptions): string;
168
173
 
169
- export { NotionDateTime, TableOfContentsEntry, estimatePageReadTime, estimatePageReadTimeAsHumanizedString, formatDate, formatNotionDateTime, getAllPagesInSpace, getBlockCollectionId, getBlockIcon, getBlockParentPage, getBlockTitle, getCanonicalPageId, getDateValue, getPageBreadcrumbs, getPageContentBlockIds, getPageImageUrls, getPageProperty, getPageTableOfContents, getPageTitle, getTextContent, idToUuid, mergeRecordMaps, normalizeTitle, normalizeUrl, parsePageId, uuidToId };
174
+ export { NotionDateTime, TableOfContentsEntry, estimatePageReadTime, estimatePageReadTimeAsHumanizedString, findAncestors, formatDate, formatNotionDateTime, getAllPagesInSpace, getBlockCollectionId, getBlockIcon, getBlockParentPage, getBlockTitle, getCanonicalPageId, getDateValue, getPageBreadcrumbs, getPageContentBlockIds, getPageContentUserIds, getPageImageUrls, getPageProperty, getPageTableOfContents, getPageTitle, getTextContent, idToUuid, mergeRecordMaps, normalizeTitle, normalizeUrl, parsePageId, uuidToId };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,2BAA2B,CAAA;AACzC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,2BAA2B,CAAA;AACzC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,2BAA2B,CAAA;AACzC,cAAc,kBAAkB,CAAA;AAChC,cAAc,2BAA2B,CAAA"}
package/build/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var q=Object.defineProperty,N=Object.defineProperties;var V=Object.getOwnPropertyDescriptors;var $=Object.getOwnPropertySymbols;var H=Object.prototype.hasOwnProperty,Q=Object.prototype.propertyIsEnumerable;var D=(e,t,o)=>t in e?q(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,g=(e,t)=>{for(var o in t||(t={}))H.call(t,o)&&D(e,o,t[o]);if($)for(var o of $(t))Q.call(t,o)&&D(e,o,t[o]);return e},U=(e,t)=>N(e,V(t));var R=(e,t,o)=>new Promise((n,s)=>{var r=c=>{try{m(o.next(c))}catch(l){s(l)}},a=c=>{try{m(o.throw(c))}catch(l){s(l)}},m=c=>c.done?n(c.value):Promise.resolve(c.value).then(r,a);m((o=o.apply(e,t)).next())});var h=e=>{var t;return e?Array.isArray(e)?(t=e==null?void 0:e.reduce((o,n)=>o+(n[0]!=="\u204D"&&n[0]!=="\u2023"?n[0]:""),""))!=null?t:"":e:""};function w(e,t){var s,r,a,m,c,l,i;let o=e.collection_id||((r=(s=e.format)==null?void 0:s.collection_pointer)==null?void 0:r.id);if(o)return o;let n=(a=e==null?void 0:e.view_ids)==null?void 0:a[0];if(n){let u=(c=(m=t.collection_view)==null?void 0:m[n])==null?void 0:c.value;if(u)return(i=(l=u.format)==null?void 0:l.collection_pointer)==null?void 0:i.id}return null}function v(e,t){var o,n;if((o=e.properties)!=null&&o.title)return h(e.properties.title);if(e.type==="collection_view_page"||e.type==="collection_view"){let s=w(e,t);if(s){let r=(n=t.collection[s])==null?void 0:n.value;if(r)return h(r.name)}}return""}function B(e,t){var o,n,s;if((o=e.format)!=null&&o.page_icon)return(n=e.format)==null?void 0:n.page_icon;if(e.type==="collection_view_page"||e.type==="collection_view"){let r=w(e,t);if(r){let a=(s=t.collection[r])==null?void 0:s.value;if(a)return a.icon}}return null}function pe(e){var o;let t=(o=e.block[Object.keys(e.block)[0]])==null?void 0:o.value;return t?v(t,e):null}function P(e,t,o){var n;try{if(!t.properties||!Object.keys(o.collection))return null;let s=(n=o.collection[t.parent_id])==null?void 0:n.value;if(s){let r=e.toLowerCase(),a=Object.keys(s.schema).find(l=>{var i,u;return((u=(i=s.schema[l])==null?void 0:i.name)==null?void 0:u.toLowerCase())===r});if(!a)return null;let{type:m}=s.schema[a],c=h(t.properties[a]);switch(m){case"created_time":return t.created_time;case"multi_select":return c.split(",");case"date":{let i=t.properties[a][0][1][0][1];if(i.type=="datetime")return new Date(`${i.start_date} ${i.start_time}`).getTime();if(i.type=="date")return new Date(i.start_date).getTime();if(i.type=="datetimerange"){let{start_date:u,start_time:y,end_date:f,end_time:T}=i,b=new Date(`${u} ${y}`).getTime(),d=new Date(`${f} ${T}`).getTime();return[b,d]}else{let u=new Date(i.start_date).getTime(),y=new Date(i.end_date).getTime();return[u,y]}}case"checkbox":return c=="Yes";case"last_edited_time":return t.last_edited_time;default:return c}}}catch(s){}return null}var Y=e=>{if(e&&Array.isArray(e)){if(e[0]==="d")return e[1];for(let t of e){let o=Y(t);if(o)return o}}return null};var O=(e,t,{inclusive:o=!1}={})=>{var s,r;let n=e;for(;n!=null;){if(o&&(n==null?void 0:n.type)==="page")return n;let a=n.parent_id,m=n.parent_table;if(!a)break;if(m==="collection")n=(s=t.collection[a])==null?void 0:s.value;else if(n=(r=t.block[a])==null?void 0:r.value,(n==null?void 0:n.type)==="page")return n}return null};var Z={header:0,sub_header:1,sub_sub_header:2},S=(e,t)=>{var s;let o=((s=e.content)!=null?s:[]).map(r=>{var m,c;let a=(m=t.block[r])==null?void 0:m.value;if(a){let{type:l}=a;if(l==="header"||l==="sub_header"||l==="sub_sub_header")return{id:r,type:l,text:h((c=a.properties)==null?void 0:c.title),indentLevel:Z[l]}}return null}).filter(Boolean),n=[{actual:-1,effective:-1}];for(let r of o){let{indentLevel:a}=r,m=a;do{let c=n[n.length-1],{actual:l,effective:i}=c;if(m>l)r.indentLevel=i+1,n.push({actual:m,effective:r.indentLevel});else if(m===l){r.indentLevel=i;break}else n.pop()}while(!0)}return o};var Te=(e,t)=>{let o=t||Object.keys(e.block)[0],n=new Set;function s(r){var u,y,f,T;if(n.has(r))return;n.add(r);let a=(u=e.block[r])==null?void 0:u.value;if(!a)return;let{content:m,type:c,properties:l,format:i}=a;if(l)for(let b of Object.keys(l)){let d=l[b];d.map(k=>{var _,I;let p=(I=(_=k==null?void 0:k[0])==null?void 0:_[1])==null?void 0:I[0];(p==null?void 0:p[0])==="p"&&p[1]&&s(p[1])});let x=(f=(y=d==null?void 0:d[0])==null?void 0:y[1])==null?void 0:f[0];(x==null?void 0:x[0])==="p"&&x[1]&&s(x[1])}if(i){let b=(T=i.transclusion_reference_pointer)==null?void 0:T.id;b&&s(b)}if(!(!m||!Array.isArray(m))&&!(r!==o&&(c==="page"||c==="collection_view_page")))for(let b of m)s(b)}return s(o),Array.from(n)};var L=(e="")=>`${e.substr(0,8)}-${e.substr(8,4)}-${e.substr(12,4)}-${e.substr(16,4)}-${e.substr(20)}`;var G=/\b([a-f0-9]{32})\b/,J=/\b([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})\b/,W=(e="",{uuid:t=!0}={})=>{if(!e)return null;e=e.split("?")[0];let o=e.match(G);if(o)return t?L(o[1]):o[1];let n=e.match(J);return n?t?n[1]:n[1].replace(/-/g,""):null};var M=e=>e.replace(/-/g,"");import K from"p-queue";function Ee(a,m,c){return R(this,arguments,function*(e,t,o,{concurrency:n=4,traverseCollections:s=!0,targetPageId:r=null}={}){let l={},i=new Set,u=new K({concurrency:n});function y(f){return R(this,null,function*(){r&&i.has(r)||(f=W(f),f&&!l[f]&&!i.has(f)&&(i.add(f),u.add(()=>R(this,null,function*(){var T,b;try{if(r&&i.has(r)&&f!==r)return;let d=yield o(f);if(!d)return;let x=(b=(T=d.block[f])==null?void 0:T.value)==null?void 0:b.space_id;if(x){if(!t)t=x;else if(t!==x)return}if(Object.keys(d.block).filter(k=>{var _;let p=(_=d.block[k])==null?void 0:_.value;return!(!p||p.type!=="page"&&p.type!=="collection_view_page"||t&&p.space_id&&p.space_id!==t)}).forEach(k=>y(k)),s)for(let k of Object.values(d.collection_query))for(let p of Object.values(k)){let{blockIds:_}=p;if(_)for(let I of _)y(I)}l[f]=d}catch(d){console.warn("page load error",{pageId:f,spaceId:t},d.statusCode,d.message),l[f]=null}i.delete(f)}))))})}return yield y(e),yield u.onIdle(),l})}var z=e=>(e||"").replace(/ /g,"-").replace(/[^a-zA-Z0-9-\u4e00-\u9FFF\u3041-\u3096\u30A1-\u30FC\u3000-\u303F]/g,"").replace(/--/g,"-").replace(/-$/,"").replace(/^-/,"").trim().toLowerCase();var We=(e,t,{uuid:o=!0}={})=>{var r;if(!e||!t)return null;let n=M(e),s=(r=t.block[e])==null?void 0:r.value;if(s){let a=P("slug",s,t)||P("Slug",s,t)||z(v(s,t));if(a)return o?`${a}-${n}`:a}return n};var je=(e,t)=>{var r;let o=e.block,n=[],s=t;do{let a=(r=o[s])==null?void 0:r.value;if(!a)break;let m=v(a,e),c=B(a,e);if(!(m||c))break;n.push({block:a,active:s===t,pageId:s,title:m,icon:c});let l=O(a,e),i=l==null?void 0:l.id;if(!i)break;s=i}while(!0);return n.reverse(),n};import A from"is-url-superb";var Ye=(e,{mapImageUrl:t})=>{let n=Object.keys(e.block).flatMap(s=>{var m,c,l,i,u,y,f,T,b,d,x;let r=(m=e.block[s])==null?void 0:m.value,a=[];if(r){if(r.type==="image"){let _=((c=e.signed_urls)==null?void 0:c[r.id])||((u=(i=(l=r.properties)==null?void 0:l.source)==null?void 0:i[0])==null?void 0:u[0]);_.includes("file.notion.so")&&(_=(T=(f=(y=r.properties)==null?void 0:y.source)==null?void 0:f[0])==null?void 0:T[0]),_&&a.push({block:r,url:_})}if((b=r.format)!=null&&b.page_cover){let p=r.format.page_cover;a.push({block:r,url:p})}if((d=r.format)!=null&&d.bookmark_cover){let p=r.format.bookmark_cover;a.push({block:r,url:p})}if((x=r.format)!=null&&x.bookmark_icon){let p=r.format.bookmark_icon;a.push({block:r,url:p})}let k=B(r,e);k&&A(k)&&a.push({block:r,url:k})}return a}).filter(Boolean).map(({block:s,url:r})=>t(r,s)).filter(Boolean);return Array.from(new Set(n))};import X from"mem";import ee from"normalize-url";var te=X(e=>{if(!e)return"";try{if(e.startsWith("https://www.notion.so/image/")){let t=new URL(e),o=decodeURIComponent(t.pathname.substr(7)),n=te(o);t.pathname=`/image/${encodeURIComponent(n)}`,e=t.toString()}return ee(e,{stripProtocol:!0,stripWWW:!0,stripHash:!0,stripTextFragment:!0,removeQueryParameters:!0})}catch(t){return""}});function Xe(e,t){return{block:g(g({},e.block),t.block),collection:g(g({},e.collection),t.collection),collection_view:g(g({},e.collection_view),t.collection_view),notion_user:g(g({},e.notion_user),t.notion_user),collection_query:g(g({},e.collection_query),t.collection_query),signed_urls:g(g({},e.signed_urls),t.signed_urls),preview_images:g(g({},e.preview_images),t.preview_images)}}var F=(e,{month:t="short"}={})=>{let o=new Date(e);return`${o.toLocaleString("en-US",{month:t})} ${o.getUTCDate()}, ${o.getUTCFullYear()}`};var rt=e=>{let t=`${e.start_time||""} ${e.start_date} ${e.time_zone||""}`;return F(t)};function oe(e,t,{wordsPerMinute:o=275,imageReadTimeInSeconds:n=12}={}){let s=C(e,t),r=s.numWords/o,m=(s.numImages>10?s.numImages/2*(n+3)+(s.numImages-10)*3:s.numImages/2*(2*n+(1-s.numImages)))/60,c=r+m;return U(g({},s),{totalWordsReadTimeInMinutes:r,totalImageReadTimeInMinutes:m,totalReadTimeInMinutes:c})}function ct(e,t,o){let n=oe(e,t,o);return ne(n.totalReadTimeInMinutes)}function C(e,t){var n,s,r,a;let o={numWords:0,numImages:0};if(!e)return o;for(let m of e.content||[]){let c=(n=t.block[m])==null?void 0:n.value,l=!1;if(c){switch(c.type){case"quote":case"alias":case"header":case"sub_header":case"sub_sub_header":{let i=v(c,t);o.numWords+=E(i);break}case"callout":case"toggle":case"to_do":case"bulleted_list":case"numbered_list":case"text":{let i=v(c,t);o.numWords+=E(i),l=!0;break}case"embed":case"tweet":case"maps":case"pdf":case"figma":case"typeform":case"codepen":case"excalidraw":case"gist":case"video":case"drive":case"audio":case"file":case"image":o.numImages+=1;break;case"bookmark":o.numImages+=.25;break;case"code":o.numImages+=2;break;case"table":case"collection_view":o.numImages+=2;break;case"column":case"column_list":case"transclusion_container":l=!0;break;case"table_of_contents":{let i=e;if(!i)continue;let u=S(i,t);for(let y of u)o.numWords+=E(y.text);break}case"transclusion_reference":{let i=(r=(s=c==null?void 0:c.format)==null?void 0:s.transclusion_reference_pointer)==null?void 0:r.id;if(!i)continue;let u=(a=t.block[i])==null?void 0:a.value;u&&j(o,C(u,t));break}default:break}l&&j(o,C(c,t))}}return o}function j(e,t){e.numWords+=t.numWords,e.numImages+=t.numImages}function E(e){return e?(e.match(/\w+/g)||[]).length:0}function ne(e){return e<.5?"less than a minute":e<1.5?"1 minute":`${Math.ceil(e)} minutes`}export{oe as estimatePageReadTime,ct as estimatePageReadTimeAsHumanizedString,F as formatDate,rt as formatNotionDateTime,Ee as getAllPagesInSpace,w as getBlockCollectionId,B as getBlockIcon,O as getBlockParentPage,v as getBlockTitle,We as getCanonicalPageId,Y as getDateValue,je as getPageBreadcrumbs,Te as getPageContentBlockIds,Ye as getPageImageUrls,P as getPageProperty,S as getPageTableOfContents,pe as getPageTitle,h as getTextContent,L as idToUuid,A as isUrl,Xe as mergeRecordMaps,z as normalizeTitle,te as normalizeUrl,W as parsePageId,M as uuidToId};
1
+ var q=Object.defineProperty,N=Object.defineProperties;var V=Object.getOwnPropertyDescriptors;var E=Object.getOwnPropertySymbols;var H=Object.prototype.hasOwnProperty,Q=Object.prototype.propertyIsEnumerable;var C=(e,t,o)=>t in e?q(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,y=(e,t)=>{for(var o in t||(t={}))H.call(t,o)&&C(e,o,t[o]);if(E)for(var o of E(t))Q.call(t,o)&&C(e,o,t[o]);return e},D=(e,t)=>N(e,V(t));var I=(e,t,o)=>new Promise((n,r)=>{var s=c=>{try{m(o.next(c))}catch(l){r(l)}},a=c=>{try{m(o.throw(c))}catch(l){r(l)}},m=c=>c.done?n(c.value):Promise.resolve(c.value).then(s,a);m((o=o.apply(e,t)).next())});var v=e=>{var t;return e?Array.isArray(e)?(t=e==null?void 0:e.reduce((o,n)=>o+(n[0]!=="\u204D"&&n[0]!=="\u2023"?n[0]:""),""))!=null?t:"":e:""};function h(e,t){var r,s,a,m,c,l,i;let o=e.collection_id||((s=(r=e.format)==null?void 0:r.collection_pointer)==null?void 0:s.id);if(o)return o;let n=(a=e==null?void 0:e.view_ids)==null?void 0:a[0];if(n){let u=(c=(m=t.collection_view)==null?void 0:m[n])==null?void 0:c.value;if(u)return(i=(l=u.format)==null?void 0:l.collection_pointer)==null?void 0:i.id}return null}function R(e,t){var o,n;if((o=e.properties)!=null&&o.title)return v(e.properties.title);if(e.type==="collection_view_page"||e.type==="collection_view"){let r=h(e,t);if(r){let s=(n=t.collection[r])==null?void 0:n.value;if(s)return v(s.name)}}return""}function B(e,t){var o,n,r;if((o=e.format)!=null&&o.page_icon)return(n=e.format)==null?void 0:n.page_icon;if(e.type==="collection_view_page"||e.type==="collection_view"){let s=h(e,t);if(s){let a=(r=t.collection[s])==null?void 0:r.value;if(a)return a.icon}}return null}function de(e){var o;let t=(o=e.block[Object.keys(e.block)[0]])==null?void 0:o.value;return t?R(t,e):null}function $(e,t,o){var n;try{if(!t.properties||!Object.keys(o.collection))return null;let r=(n=o.collection[t.parent_id])==null?void 0:n.value;if(r){let s=e.toLowerCase(),a=Object.keys(r.schema).find(l=>{var i,u;return((u=(i=r.schema[l])==null?void 0:i.name)==null?void 0:u.toLowerCase())===s});if(!a)return null;let{type:m}=r.schema[a],c=v(t.properties[a]);switch(m){case"created_time":return t.created_time;case"multi_select":return c.split(",");case"date":{let i=t.properties[a][0][1][0][1];if(i.type=="datetime")return new Date(`${i.start_date} ${i.start_time}`).getTime();if(i.type=="date")return new Date(i.start_date).getTime();if(i.type=="datetimerange"){let{start_date:u,start_time:x,end_date:p,end_time:k}=i,b=new Date(`${u} ${x}`).getTime(),f=new Date(`${p} ${k}`).getTime();return[b,f]}else{let u=new Date(i.start_date).getTime(),x=new Date(i.end_date).getTime();return[u,x]}}case"checkbox":return c=="Yes";case"last_edited_time":return t.last_edited_time;default:return c}}}catch(r){}return null}var Y=e=>{if(e&&Array.isArray(e)){if(e[0]==="d")return e[1];for(let t of e){let o=Y(t);if(o)return o}}return null};var U=(e,t,{inclusive:o=!1}={})=>{var r,s;let n=e;for(;n!=null;){if(o&&(n==null?void 0:n.type)==="page")return n;let a=n.parent_id,m=n.parent_table;if(!a)break;if(m==="collection")n=(r=t.collection[a])==null?void 0:r.value;else if(n=(s=t.block[a])==null?void 0:s.value,(n==null?void 0:n.type)==="page")return n}return null};var Z={header:0,sub_header:1,sub_sub_header:2},O=(e,t)=>{var r;let o=((r=e.content)!=null?r:[]).map(s=>{var m,c;let a=(m=t.block[s])==null?void 0:m.value;if(a){let{type:l}=a;if(l==="header"||l==="sub_header"||l==="sub_sub_header")return{id:s,type:l,text:v((c=a.properties)==null?void 0:c.title),indentLevel:Z[l]}}return null}).filter(Boolean),n=[{actual:-1,effective:-1}];for(let s of o){let{indentLevel:a}=s,m=a;do{let c=n[n.length-1],{actual:l,effective:i}=c;if(m>l)s.indentLevel=i+1,n.push({actual:m,effective:s.indentLevel});else if(m===l){s.indentLevel=i;break}else n.pop()}while(!0)}return o};var Re=(e,t)=>{let o=t||Object.keys(e.block)[0],n=new Set;function r(s,a=!1){var x,p;if(n.has(s)||(n.add(s),!a))return;let m=(x=e.block[s])==null?void 0:x.value;if(!m)return;let{content:c,type:l,properties:i,format:u}=m;if(i)for(let k of Object.keys(i)){let b=i[k];b.map(f=>{var _,g;let d=(g=(_=f==null?void 0:f[0])==null?void 0:_[1])==null?void 0:g[0];(d==null?void 0:d[0])==="p"&&d[1]&&r(d[1])}),b.map(f=>{var _;let d=(_=f==null?void 0:f[1])==null?void 0:_[0];((d==null?void 0:d[0])==="p"||(d==null?void 0:d[0])==="eoi")&&d[1]&&r(d[1])})}if(u){let k=(p=u.transclusion_reference_pointer)==null?void 0:p.id;k&&r(k)}if(!(!c||!Array.isArray(c))&&!(s!==o&&(l==="page"||l==="collection_view_page")))for(let k of c)r(k)}return r(o,!0),Array.from(n)},ve=(e,t)=>{var a;let o=t||Object.keys(e.block)[0],n=new Set,r=(a=e.block[o])==null?void 0:a.value;r!=null&&r.created_by_id&&n.add(r==null?void 0:r.created_by_id),r!=null&&r.last_edited_by_id&&n.add(r==null?void 0:r.last_edited_by_id);let{properties:s}=r;if(s)for(let m of Object.keys(s))s[m].map(l=>{var u;let i=(u=l==null?void 0:l[1])==null?void 0:u[0];(i==null?void 0:i[0])==="u"&&i[1]&&n.add(i[1])});return Array.from(n)};var M=(e="")=>`${e.substr(0,8)}-${e.substr(8,4)}-${e.substr(12,4)}-${e.substr(16,4)}-${e.substr(20)}`;var G=/\b([a-f0-9]{32})\b/,J=/\b([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})\b/,S=(e="",{uuid:t=!0}={})=>{if(!e)return null;e=e.split("?")[0];let o=e.match(G);if(o)return t?M(o[1]):o[1];let n=e.match(J);return n?t?n[1]:n[1].replace(/-/g,""):null};var L=e=>e.replace(/-/g,"");import K from"p-queue";function De(a,m,c){return I(this,arguments,function*(e,t,o,{concurrency:n=4,traverseCollections:r=!0,targetPageId:s=null}={}){let l={},i=new Set,u=new K({concurrency:n});function x(p){return I(this,null,function*(){s&&i.has(s)||(p=S(p),p&&!l[p]&&!i.has(p)&&(i.add(p),u.add(()=>I(this,null,function*(){var k,b;try{if(s&&i.has(s)&&p!==s)return;let f=yield o(p);if(!f)return;let d=(b=(k=f.block[p])==null?void 0:k.value)==null?void 0:b.space_id;if(d){if(!t)t=d;else if(t!==d)return}if(Object.keys(f.block).filter(_=>{var T;let g=(T=f.block[_])==null?void 0:T.value;return!(!g||g.type!=="page"&&g.type!=="collection_view_page"||t&&g.space_id&&g.space_id!==t)}).forEach(_=>x(_)),r)for(let _ of Object.values(f.collection_query))for(let g of Object.values(_)){let{blockIds:T}=g;if(T)for(let z of T)x(z)}l[p]=f}catch(f){console.warn("page load error",{pageId:p,spaceId:t},f.statusCode,f.message),l[p]=null}i.delete(p)}))))})}return yield x(e),yield u.onIdle(),l})}var W=e=>(e||"").replace(/ /g,"-").replace(/[^a-zA-Z0-9-\u4e00-\u9FFF\u3041-\u3096\u30A1-\u30FC\u3000-\u303F]/g,"").replace(/--/g,"-").replace(/-$/,"").replace(/^-/,"").trim().toLowerCase();var Ae=(e,t,{uuid:o=!0}={})=>{var s;if(!e||!t)return null;let n=L(e),r=(s=t.block[e])==null?void 0:s.value;if(r){let a=$("slug",r,t)||W(R(r,t));if(a)return o?`${a}-${n}`:a}return n};var Ne=(e,t)=>{var s;let o=e.block,n=[],r=t;do{let a=(s=o[r])==null?void 0:s.value;if(!a)break;let m=R(a,e),c=B(a,e);if(!(m||c))break;n.push({block:a,active:r===t,pageId:r,title:m,icon:c});let l=U(a,e),i=l==null?void 0:l.id;if(!i)break;r=i}while(!0);return n.reverse(),n};import A from"is-url-superb";var Ge=(e,{mapImageUrl:t})=>{let n=Object.keys(e.block).flatMap(r=>{var m,c,l,i,u,x,p,k,b,f,d;let s=(m=e.block[r])==null?void 0:m.value,a=[];if(s){if(s.type==="image"){let T=((c=e.signed_urls)==null?void 0:c[s.id])||((u=(i=(l=s.properties)==null?void 0:l.source)==null?void 0:i[0])==null?void 0:u[0]);T.includes("file.notion.so")&&(T=(k=(p=(x=s.properties)==null?void 0:x.source)==null?void 0:p[0])==null?void 0:k[0]),T&&a.push({block:s,url:T})}if((b=s.format)!=null&&b.page_cover){let g=s.format.page_cover;a.push({block:s,url:g})}if((f=s.format)!=null&&f.bookmark_cover){let g=s.format.bookmark_cover;a.push({block:s,url:g})}if((d=s.format)!=null&&d.bookmark_icon){let g=s.format.bookmark_icon;a.push({block:s,url:g})}let _=B(s,e);_&&A(_)&&a.push({block:s,url:_})}return a}).filter(Boolean).map(({block:r,url:s})=>t(s,r)).filter(Boolean);return Array.from(new Set(n))};import X from"mem";import ee from"normalize-url";var te=X(e=>{if(!e)return"";try{if(e.startsWith("https://www.notion.so/image/")){let t=new URL(e),o=decodeURIComponent(t.pathname.substr(7)),n=te(o);t.pathname=`/image/${encodeURIComponent(n)}`,e=t.toString()}return ee(e,{stripProtocol:!0,stripWWW:!0,stripHash:!0,stripTextFragment:!0,removeQueryParameters:!0})}catch(t){return""}});function tt(e,t){return{block:y(y({},e.block),t.block),collection:y(y({},e.collection),t.collection),collection_view:y(y({},e.collection_view),t.collection_view),notion_user:y(y({},e.notion_user),t.notion_user),collection_query:y(y({},e.collection_query),t.collection_query),signed_urls:y(y({},e.signed_urls),t.signed_urls),preview_images:y(y({},e.preview_images),t.preview_images)}}var j=(e,{month:t="short"}={})=>{let o=new Date(e);return`${o.toLocaleString("en-US",{month:t})} ${o.getUTCDate()}, ${o.getUTCFullYear()}`};var it=e=>{let t=`${e.start_time||""} ${e.start_date} ${e.time_zone||""}`;return j(t)};function oe(e,t,o=[]){var n;if(t.parent_id){o.push(t.parent_id);let r=t.parent_table;if((n=e[r][t.parent_id])!=null&&n.value)return oe(e,e[r][t.parent_id].value,o)}return o}function ne(e,t,{wordsPerMinute:o=275,imageReadTimeInSeconds:n=12}={}){let r=P(e,t),s=r.numWords/o,m=(r.numImages>10?r.numImages/2*(n+3)+(r.numImages-10)*3:r.numImages/2*(2*n+(1-r.numImages)))/60,c=s+m;return D(y({},r),{totalWordsReadTimeInMinutes:s,totalImageReadTimeInMinutes:m,totalReadTimeInMinutes:c})}function ut(e,t,o){let n=ne(e,t,o);return re(n.totalReadTimeInMinutes)}function P(e,t){var n,r,s,a;let o={numWords:0,numImages:0};if(!e)return o;for(let m of e.content||[]){let c=(n=t.block[m])==null?void 0:n.value,l=!1;if(c){switch(c.type){case"quote":case"alias":case"header":case"sub_header":case"sub_sub_header":{let i=R(c,t);o.numWords+=w(i);break}case"callout":case"toggle":case"to_do":case"bulleted_list":case"numbered_list":case"text":{let i=R(c,t);o.numWords+=w(i),l=!0;break}case"embed":case"tweet":case"maps":case"pdf":case"figma":case"typeform":case"codepen":case"excalidraw":case"gist":case"video":case"drive":case"audio":case"file":case"image":o.numImages+=1;break;case"bookmark":o.numImages+=.25;break;case"code":o.numImages+=2;break;case"table":case"collection_view":o.numImages+=2;break;case"column":case"column_list":case"transclusion_container":l=!0;break;case"table_of_contents":{let i=e;if(!i)continue;let u=O(i,t);for(let x of u)o.numWords+=w(x.text);break}case"transclusion_reference":{let i=(s=(r=c==null?void 0:c.format)==null?void 0:r.transclusion_reference_pointer)==null?void 0:s.id;if(!i)continue;let u=(a=t.block[i])==null?void 0:a.value;u&&F(o,P(u,t));break}default:break}l&&F(o,P(c,t))}}return o}function F(e,t){e.numWords+=t.numWords,e.numImages+=t.numImages}function w(e){return e?(e.match(/\w+/g)||[]).length:0}function re(e){return e<.5?"less than a minute":e<1.5?"1 minute":`${Math.ceil(e)} minutes`}export{ne as estimatePageReadTime,ut as estimatePageReadTimeAsHumanizedString,oe as findAncestors,j as formatDate,it as formatNotionDateTime,De as getAllPagesInSpace,h as getBlockCollectionId,B as getBlockIcon,U as getBlockParentPage,R as getBlockTitle,Ae as getCanonicalPageId,Y as getDateValue,Ne as getPageBreadcrumbs,Re as getPageContentBlockIds,ve as getPageContentUserIds,Ge as getPageImageUrls,$ as getPageProperty,O as getPageTableOfContents,de as getPageTitle,v as getTextContent,M as idToUuid,A as isUrl,tt as mergeRecordMaps,W as normalizeTitle,te as normalizeUrl,S as parsePageId,L as uuidToId};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/get-text-content.ts","../src/get-block-collection-id.ts","../src/get-block-title.ts","../src/get-block-icon.ts","../src/get-page-title.ts","../src/get-page-property.ts","../src/get-date-value.ts","../src/get-block-parent-page.ts","../src/get-page-table-of-contents.ts","../src/get-page-content-block-ids.ts","../src/id-to-uuid.ts","../src/parse-page-id.ts","../src/uuid-to-id.ts","../src/get-all-pages-in-space.ts","../src/normalize-title.ts","../src/get-canonical-page-id.ts","../src/get-page-breadcrumbs.ts","../src/is-url.ts","../src/get-page-image-urls.ts","../src/normalize-url.ts","../src/merge-record-maps.ts","../src/format-date.ts","../src/format-notion-date-time.ts","../src/estimate-page-read-time.ts"],"sourcesContent":["import * as types from '@texonom/ntypes'\n\n/**\n * Gets the raw, unformatted text content of a block's content value.\n *\n * This is useful, for instance, for extracting a block's `title` without any\n * rich text formatting.\n */\nexport const getTextContent = (text?: types.Decoration[]): string => {\n if (!text) return ''\n else if (Array.isArray(text))\n return text?.reduce((prev, current) => prev + (current[0] !== '⁍' && current[0] !== '‣' ? current[0] : ''), '') ?? ''\n else return text\n}\n","import { Block, ExtendedRecordMap } from '@texonom/ntypes'\n\nexport function getBlockCollectionId(block: Block, recordMap: ExtendedRecordMap): string | null {\n const collectionId = (block as any).collection_id || (block as any).format?.collection_pointer?.id\n\n if (collectionId) return collectionId\n\n const collectionViewId = (block as any)?.view_ids?.[0]\n if (collectionViewId) {\n const collectionView = recordMap.collection_view?.[collectionViewId]?.value\n if (collectionView) {\n const collectionId = collectionView.format?.collection_pointer?.id\n return collectionId\n }\n }\n\n return null\n}\n","import { Block, ExtendedRecordMap } from '@texonom/ntypes'\n\nimport { getBlockCollectionId } from './get-block-collection-id'\nimport { getTextContent } from './get-text-content'\n\nexport function getBlockTitle(block: Block, recordMap: ExtendedRecordMap) {\n if (block.properties?.title) return getTextContent(block.properties.title)\n\n if (block.type === 'collection_view_page' || block.type === 'collection_view') {\n const collectionId = getBlockCollectionId(block, recordMap)\n\n if (collectionId) {\n const collection = recordMap.collection[collectionId]?.value\n\n if (collection) return getTextContent(collection.name)\n }\n }\n\n return ''\n}\n","import { Block, ExtendedRecordMap, PageBlock } from '@texonom/ntypes'\n\nimport { getBlockCollectionId } from './get-block-collection-id'\n\nexport function getBlockIcon(block: Block, recordMap: ExtendedRecordMap) {\n if ((block as PageBlock).format?.page_icon) return (block as PageBlock).format?.page_icon\n\n if (block.type === 'collection_view_page' || block.type === 'collection_view') {\n const collectionId = getBlockCollectionId(block, recordMap)\n if (collectionId) {\n const collection = recordMap.collection[collectionId]?.value\n\n if (collection) return collection.icon\n }\n }\n\n return null\n}\n","import { ExtendedRecordMap } from '@texonom/ntypes'\n\nimport { getBlockTitle } from './get-block-title'\n\nexport function getPageTitle(recordMap: ExtendedRecordMap) {\n const pageBlock = recordMap.block[Object.keys(recordMap.block)[0]]?.value\n\n if (pageBlock) return getBlockTitle(pageBlock, recordMap)\n\n return null\n}\n","import { Block, DateFormat, ExtendedRecordMap } from '@texonom/ntypes'\n\nimport { getTextContent } from './get-text-content'\n\n/**\n * Gets the value of a collection property for a given page (collection item).\n *\n * @param propertyName property name\n * @param block Page block, often be first block in blockMap\n * @param recordMap\n * @returns - The return value types will follow the following principles:\n * 1. if property is date type, it will return `number` or `number[]`(depends on `End Date` switch)\n * 2. property is text-like will return `string`\n * 3. multi select property will return `string[]`\n * 4. checkbox property return `boolean`\n * @todo complete all no-text property type\n */\nexport function getPageProperty<T = string | number | boolean | string[] | number[]>(\n propertyName: string,\n block: Block,\n recordMap: ExtendedRecordMap\n): T\nexport function getPageProperty(propertyName: string, block: Block, recordMap: ExtendedRecordMap) {\n try {\n if (!block.properties || !Object.keys(recordMap.collection))\n // console.warn(\n // `block ${block.id} has no properties or this recordMap has no collection record`\n // )\n return null\n\n const collection = recordMap.collection[block.parent_id]?.value\n\n if (collection) {\n const propertyNameL = propertyName.toLowerCase()\n const propertyId = Object.keys(collection.schema).find(\n key => collection.schema[key]?.name?.toLowerCase() === propertyNameL\n )\n\n if (!propertyId) return null\n\n const { type } = collection.schema[propertyId]\n const content = getTextContent(block.properties[propertyId])\n\n switch (type) {\n case 'created_time':\n return block.created_time\n\n case 'multi_select':\n return content.split(',')\n\n case 'date': {\n const property = block.properties[propertyId] as [['‣', [DateFormat]]]\n const formatDate = property[0][1][0][1]\n\n if (formatDate.type == 'datetime') {\n return new Date(`${formatDate.start_date} ${formatDate.start_time}`).getTime()\n } else if (formatDate.type == 'date') {\n return new Date(formatDate.start_date).getTime()\n } else if (formatDate.type == 'datetimerange') {\n const { start_date, start_time, end_date, end_time } = formatDate\n const startTime = new Date(`${start_date} ${start_time}`).getTime()\n const endTime = new Date(`${end_date} ${end_time}`).getTime()\n return [startTime, endTime]\n } else {\n const startTime = new Date(formatDate.start_date).getTime()\n const endTime = new Date(formatDate.end_date).getTime()\n return [startTime, endTime]\n }\n }\n\n case 'checkbox':\n return content == 'Yes'\n\n case 'last_edited_time':\n return block.last_edited_time\n\n default:\n return content\n }\n }\n } catch {\n // ensure that no matter what, we don't throw errors because of an unexpected\n // collection data format\n }\n\n return null\n}\n","import * as types from '@texonom/ntypes'\n\n/**\n * Attempts to find a valid date from a given property.\n */\nexport const getDateValue = (prop: any[]): types.FormattedDate | null => {\n if (prop && Array.isArray(prop))\n if (prop[0] === 'd') return prop[1]\n else\n for (const v of prop) {\n const value = getDateValue(v)\n if (value) return value\n }\n\n return null\n}\n","import * as types from '@texonom/ntypes'\n\n/**\n * Returns the parent page block containing a given page.\n *\n * Note that many times this will not be the direct parent block since\n * some non-page content blocks can contain sub-blocks.\n */\nexport const getBlockParentPage = (\n block: types.Block,\n recordMap: types.ExtendedRecordMap,\n {\n inclusive = false\n }: {\n inclusive?: boolean\n } = {}\n): types.PageBlock | null => {\n let currentRecord: types.Block | types.Collection = block\n\n while (currentRecord != null) {\n if (inclusive && (currentRecord as types.Block)?.type === 'page') return currentRecord as types.PageBlock\n\n const parentId: string = currentRecord.parent_id\n const parentTable = currentRecord.parent_table\n\n if (!parentId) break\n\n if (parentTable === 'collection') {\n currentRecord = recordMap.collection[parentId]?.value\n } else {\n currentRecord = recordMap.block[parentId]?.value\n\n if ((currentRecord as types.Block)?.type === 'page') return currentRecord as types.PageBlock\n }\n }\n\n return null\n}\n","import * as types from '@texonom/ntypes'\n\nimport { getTextContent } from './get-text-content'\n\nexport interface TableOfContentsEntry {\n id: types.ID\n type: types.BlockType\n text: string\n indentLevel: number\n}\n\nconst indentLevels = {\n header: 0,\n sub_header: 1,\n sub_sub_header: 2\n}\n\n/**\n * Gets the metadata for a table of contents block by parsing the page's\n * H1, H2, and H3 elements.\n */\nexport const getPageTableOfContents = (\n page: types.PageBlock,\n recordMap: types.ExtendedRecordMap\n): Array<TableOfContentsEntry> => {\n const toc = (page.content ?? [])\n .map((blockId: string) => {\n const block = recordMap.block[blockId]?.value\n\n if (block) {\n const { type } = block\n\n if (type === 'header' || type === 'sub_header' || type === 'sub_sub_header')\n return {\n id: blockId,\n type,\n text: getTextContent(block.properties?.title),\n indentLevel: indentLevels[type]\n }\n }\n\n return null\n })\n .filter(Boolean) as Array<TableOfContentsEntry>\n\n const indentLevelStack = [\n {\n actual: -1,\n effective: -1\n }\n ]\n\n // Adjust indent levels to always change smoothly.\n // This is a little tricky, but the key is that when increasing indent levels,\n // they should never jump more than one at a time.\n for (const tocItem of toc) {\n const { indentLevel } = tocItem\n const actual = indentLevel\n\n do {\n const prevIndent = indentLevelStack[indentLevelStack.length - 1]\n const { actual: prevActual, effective: prevEffective } = prevIndent\n\n if (actual > prevActual) {\n tocItem.indentLevel = prevEffective + 1\n indentLevelStack.push({\n actual,\n effective: tocItem.indentLevel\n })\n } else if (actual === prevActual) {\n tocItem.indentLevel = prevEffective\n break\n } else {\n indentLevelStack.pop()\n }\n\n // eslint-disable-next-line no-constant-condition\n } while (true)\n }\n\n return toc\n}\n","import * as types from '@texonom/ntypes'\n\n/**\n * Gets the IDs of all blocks contained on a page starting from a root block ID.\n */\nexport const getPageContentBlockIds = (recordMap: types.ExtendedRecordMap, blockId?: string): string[] => {\n const rootBlockId = blockId || Object.keys(recordMap.block)[0]\n const contentBlockIds = new Set<string>()\n\n function addContentBlocks(blockId: string) {\n if (contentBlockIds.has(blockId)) return\n contentBlockIds.add(blockId)\n\n const block = recordMap.block[blockId]?.value\n if (!block) return\n\n const { content, type, properties, format } = block\n if (properties)\n // TODO: this needs some love, especially for resolving relation properties\n // see this collection_view_page for an example: 8a586d253f984b85b48254da84465d23\n for (const key of Object.keys(properties)) {\n const p = properties[key]\n p.map((d: any) => {\n const value = d?.[0]?.[1]?.[0]\n if (value?.[0] === 'p' && value[1]) addContentBlocks(value[1])\n })\n\n // [[\"‣\", [[\"p\", \"841918aa-f2a3-4d4c-b5ad-64b0f57c47b8\"]]]]\n const value = p?.[0]?.[1]?.[0]\n\n if (value?.[0] === 'p' && value[1]) addContentBlocks(value[1])\n }\n\n if (format) {\n const referenceId = format.transclusion_reference_pointer?.id\n if (referenceId) addContentBlocks(referenceId)\n }\n\n if (!content || !Array.isArray(content))\n // no child content blocks to recurse on\n return\n\n if (blockId !== rootBlockId)\n if (type === 'page' || type === 'collection_view_page')\n // ignore the content of other pages and collections\n return\n\n for (const blockId of content) addContentBlocks(blockId)\n }\n\n addContentBlocks(rootBlockId)\n return Array.from(contentBlockIds)\n}\n","export const idToUuid = (id = '') =>\n `${id.substr(0, 8)}-${id.substr(8, 4)}-${id.substr(12, 4)}-${id.substr(16, 4)}-${id.substr(20)}`\n","import { idToUuid } from './id-to-uuid'\n\nconst pageIdRe = /\\b([a-f0-9]{32})\\b/\nconst pageId2Re = /\\b([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})\\b/\n\n/**\n * Robustly extracts the notion page ID from a notion URL or pathname suffix.\n *\n * Defaults to returning a UUID (with dashes).\n */\nexport const parsePageId = (id: string | null = '', { uuid = true }: { uuid?: boolean } = {}) => {\n if (!id) return null\n\n id = id.split('?')[0]\n const match = id.match(pageIdRe)\n\n if (match) return uuid ? idToUuid(match[1]) : match[1]\n\n const match2 = id.match(pageId2Re)\n if (match2) return uuid ? match2[1] : match2[1].replace(/-/g, '')\n\n return null\n}\n","export const uuidToId = (uuid: string) => uuid.replace(/-/g, '')\n","import { ExtendedRecordMap, PageMap } from '@texonom/ntypes'\nimport PQueue from 'p-queue'\n\nimport { parsePageId } from './parse-page-id'\n\n/**\n * Performs a traversal over a given Notion workspace starting from a seed page.\n *\n * Returns a map containing all of the pages that are reachable from the seed\n * page in the space.\n *\n * If `rootSpaceId` is not defined, the space ID of the root page will be used\n * to scope traversal.\n *\n *\n * @param rootPageId - Page ID to start from.\n * @param rootSpaceId - Space ID to scope traversal.\n * @param getPage - Function used to fetch a single page.\n * @param opts - Optional config\n */\nexport async function getAllPagesInSpace(\n rootPageId: string,\n rootSpaceId: string | undefined,\n getPage: (pageId: string) => Promise<ExtendedRecordMap>,\n {\n concurrency = 4,\n traverseCollections = true,\n targetPageId = null\n }: {\n concurrency?: number\n traverseCollections?: boolean\n targetPageId?: string\n } = {}\n): Promise<PageMap> {\n const pages: PageMap = {}\n const pendingPageIds = new Set<string>()\n const queue = new PQueue({ concurrency })\n\n async function processPage(pageId: string) {\n if (targetPageId && pendingPageIds.has(targetPageId)) return\n\n pageId = parsePageId(pageId) as string\n\n if (pageId && !pages[pageId] && !pendingPageIds.has(pageId)) {\n pendingPageIds.add(pageId)\n\n queue.add(async () => {\n try {\n if (targetPageId && pendingPageIds.has(targetPageId) && pageId !== targetPageId) return\n\n const page = await getPage(pageId)\n if (!page) return\n\n const spaceId = page.block[pageId]?.value?.space_id\n\n if (spaceId)\n if (!rootSpaceId) rootSpaceId = spaceId\n else if (rootSpaceId !== spaceId) return\n\n Object.keys(page.block)\n .filter(key => {\n const block = page.block[key]?.value\n if (!block) return false\n\n if (block.type !== 'page' && block.type !== 'collection_view_page') return false\n\n // the space id check is important to limit traversal because pages\n // can reference pages in other spaces\n if (rootSpaceId && block.space_id && block.space_id !== rootSpaceId) return false\n\n return true\n })\n .forEach(subPageId => processPage(subPageId))\n\n // traverse collection item pages as they may contain subpages as well\n if (traverseCollections)\n for (const collectionViews of Object.values(page.collection_query))\n for (const collectionData of Object.values(collectionViews)) {\n const { blockIds } = collectionData\n\n if (blockIds) for (const collectionItemId of blockIds) processPage(collectionItemId)\n }\n\n pages[pageId] = page\n } catch (err) {\n console.warn('page load error', { pageId, spaceId: rootSpaceId }, err.statusCode, err.message)\n pages[pageId] = null\n }\n\n pendingPageIds.delete(pageId)\n })\n }\n }\n\n await processPage(rootPageId)\n await queue.onIdle()\n\n return pages\n}\n","export const normalizeTitle = (title?: string | null): string => {\n return (title || '')\n .replace(/ /g, '-')\n .replace(/[^a-zA-Z0-9-\\u4e00-\\u9FFF\\u3041-\\u3096\\u30A1-\\u30FC\\u3000-\\u303F]/g, '')\n .replace(/--/g, '-')\n .replace(/-$/, '')\n .replace(/^-/, '')\n .trim()\n .toLowerCase()\n}\n","import { ExtendedRecordMap } from '@texonom/ntypes'\n\nimport { getBlockTitle } from './get-block-title'\nimport { getPageProperty } from './get-page-property'\nimport { normalizeTitle } from './normalize-title'\nimport { uuidToId } from './uuid-to-id'\n\n/**\n * Gets the canonical, display-friendly version of a page's ID for use in URLs.\n */\nexport const getCanonicalPageId = (\n pageId: string,\n recordMap: ExtendedRecordMap,\n { uuid = true }: { uuid?: boolean } = {}\n): string | null => {\n if (!pageId || !recordMap) return null\n\n const id = uuidToId(pageId)\n const block = recordMap.block[pageId]?.value\n\n if (block) {\n const slug =\n (getPageProperty('slug', block, recordMap) as string | null) ||\n (getPageProperty('Slug', block, recordMap) as string | null) ||\n normalizeTitle(getBlockTitle(block, recordMap))\n\n if (slug)\n if (uuid) return `${slug}-${id}`\n else return slug\n }\n\n return id\n}\n","import * as types from '@texonom/ntypes'\n\nimport { getBlockIcon } from './get-block-icon'\nimport { getBlockParentPage } from './get-block-parent-page'\nimport { getBlockTitle } from './get-block-title'\n\nexport const getPageBreadcrumbs = (recordMap: types.ExtendedRecordMap, activePageId: string): Array<any> | null => {\n const blockMap = recordMap.block\n const breadcrumbs = []\n\n let currentPageId = activePageId\n\n do {\n const block = blockMap[currentPageId]?.value\n if (!block) break\n\n const title = getBlockTitle(block, recordMap)\n const icon = getBlockIcon(block, recordMap)\n\n if (!(title || icon)) break\n\n breadcrumbs.push({\n block,\n active: currentPageId === activePageId,\n pageId: currentPageId,\n title,\n icon\n })\n\n const parentBlock = getBlockParentPage(block, recordMap)\n const parentId = parentBlock?.id\n\n if (!parentId) break\n\n currentPageId = parentId\n\n // eslint-disable-next-line no-constant-condition\n } while (true)\n\n breadcrumbs.reverse()\n\n return breadcrumbs\n}\n","import isUrl from 'is-url-superb'\n\nexport { isUrl }\n","import * as types from '@texonom/ntypes'\n\nimport { getBlockIcon } from './get-block-icon'\nimport { isUrl } from './is-url'\n\n/**\n * Gets URLs of all images contained on the given page.\n */\nexport const getPageImageUrls = (\n recordMap: types.ExtendedRecordMap,\n {\n mapImageUrl\n }: {\n mapImageUrl: (url: string, block: types.Block) => string | null\n }\n): string[] => {\n const blockIds = Object.keys(recordMap.block)\n const imageUrls: string[] = blockIds\n .flatMap(blockId => {\n const block = recordMap.block[blockId]?.value\n const images: Array<{ block: types.Block; url: string }> = []\n\n if (block) {\n if (block.type === 'image') {\n const signedUrl = recordMap.signed_urls?.[block.id]\n let source = signedUrl || block.properties?.source?.[0]?.[0]\n if (source.includes('file.notion.so')) source = block.properties?.source?.[0]?.[0]\n\n if (source)\n images.push({\n block,\n url: source\n })\n }\n\n if ((block.format as any)?.page_cover) {\n const source = (block.format as any).page_cover\n\n images.push({\n block,\n url: source\n })\n }\n\n if ((block.format as any)?.bookmark_cover) {\n const source = (block.format as any).bookmark_cover\n\n images.push({\n block,\n url: source\n })\n }\n\n if ((block.format as any)?.bookmark_icon) {\n const source = (block.format as any).bookmark_icon\n\n images.push({\n block,\n url: source\n })\n }\n\n const pageIcon = getBlockIcon(block, recordMap)\n if (pageIcon && isUrl(pageIcon))\n images.push({\n block,\n url: pageIcon\n })\n }\n\n return images\n })\n .filter(Boolean)\n .map(({ block, url }) => mapImageUrl(url, block))\n .filter(Boolean)\n\n return Array.from(new Set(imageUrls))\n}\n","import mem from 'mem'\nimport normalizeUrlImpl from 'normalize-url'\n\nexport const normalizeUrl = mem((url?: string) => {\n if (!url) return ''\n\n try {\n if (url.startsWith('https://www.notion.so/image/')) {\n const u = new URL(url)\n const subUrl = decodeURIComponent(u.pathname.substr('/image/'.length))\n const normalizedSubUrl = normalizeUrl(subUrl)\n u.pathname = `/image/${encodeURIComponent(normalizedSubUrl)}`\n url = u.toString()\n }\n\n return normalizeUrlImpl(url, {\n stripProtocol: true,\n stripWWW: true,\n stripHash: true,\n stripTextFragment: true,\n removeQueryParameters: true\n })\n } catch (err) {\n return ''\n }\n})\n","import { ExtendedRecordMap } from '@texonom/ntypes'\n\nexport function mergeRecordMaps(recordMapA: ExtendedRecordMap, recordMapB: ExtendedRecordMap): ExtendedRecordMap {\n const mergedRecordMap: ExtendedRecordMap = {\n block: {\n ...recordMapA.block,\n ...recordMapB.block\n },\n collection: {\n ...recordMapA.collection,\n ...recordMapB.collection\n },\n collection_view: {\n ...recordMapA.collection_view,\n ...recordMapB.collection_view\n },\n notion_user: {\n ...recordMapA.notion_user,\n ...recordMapB.notion_user\n },\n collection_query: {\n ...recordMapA.collection_query,\n ...recordMapB.collection_query\n },\n signed_urls: {\n ...recordMapA.signed_urls,\n ...recordMapB.signed_urls\n },\n preview_images: {\n ...recordMapA.preview_images,\n ...recordMapB.preview_images\n }\n }\n\n return mergedRecordMap\n}\n","export const formatDate = (input: string | number, { month = 'short' }: { month?: 'long' | 'short' } = {}) => {\n const date = new Date(input)\n const monthLocale = date.toLocaleString('en-US', { month })\n return `${monthLocale} ${date.getUTCDate()}, ${date.getUTCFullYear()}`\n}\n","import { formatDate } from './format-date'\n\nexport interface NotionDateTime {\n type: 'datetime'\n start_date: string\n start_time?: string\n time_zone?: string\n}\n\nexport const formatNotionDateTime = (datetime: NotionDateTime) => {\n const dateString = `${datetime.start_time || ''} ${datetime.start_date} ${datetime.time_zone || ''}`\n return formatDate(dateString)\n}\n","import { Block, ExtendedRecordMap, PageBlock } from '@texonom/ntypes'\n\nimport { getBlockTitle } from './get-block-title'\nimport { getPageTableOfContents } from './get-page-table-of-contents'\n\ntype EstimatePageReadTimeOptions = {\n wordsPerMinute?: number\n imageReadTimeInSeconds?: number\n}\n\ntype ContentStats = {\n numWords: number\n numImages: number\n}\n\ntype PageReadTimeEstimate = ContentStats & {\n totalWordsReadTimeInMinutes: number\n totalImageReadTimeInMinutes: number\n totalReadTimeInMinutes: number\n}\n\n/**\n * Returns an estimate for the time it would take for a person to read the content\n * in the given Notion page.\n *\n * Uses Medium for inspiration.\n *\n * @see https://blog.medium.com/read-time-and-you-bc2048ab620c\n * @see https://github.com/ngryman/reading-time\n *\n * TODO: handle non-english content.\n */\nexport function estimatePageReadTime(\n block: Block,\n recordMap: ExtendedRecordMap,\n { wordsPerMinute = 275, imageReadTimeInSeconds = 12 }: EstimatePageReadTimeOptions = {}\n): PageReadTimeEstimate {\n const stats = getBlockContentStats(block, recordMap)\n const totalWordsReadTimeInMinutes = stats.numWords / wordsPerMinute\n const totalImageReadTimeInSeconds =\n stats.numImages > 10\n ? (stats.numImages / 2) * (imageReadTimeInSeconds + 3) + (stats.numImages - 10) * 3 // n/2(a+b) + 3 sec/image\n : (stats.numImages / 2) * (2 * imageReadTimeInSeconds + (1 - stats.numImages)) // n/2[2a+(n-1)d]\n const totalImageReadTimeInMinutes = totalImageReadTimeInSeconds / 60\n\n const totalReadTimeInMinutes = totalWordsReadTimeInMinutes + totalImageReadTimeInMinutes\n\n return {\n ...stats,\n totalWordsReadTimeInMinutes,\n totalImageReadTimeInMinutes,\n totalReadTimeInMinutes\n }\n}\n\n/**\n * Same as `estimatePageReadTime`, except it returns the total time estimate as\n * a human-readable string.\n *\n * For example, \"9 minutes\" or \"less than a minute\".\n */\nexport function estimatePageReadTimeAsHumanizedString(\n block: Block,\n recordMap: ExtendedRecordMap,\n opts: EstimatePageReadTimeOptions\n) {\n const estimate = estimatePageReadTime(block, recordMap, opts)\n return humanizeReadTime(estimate.totalReadTimeInMinutes)\n}\n\nfunction getBlockContentStats(block: Block, recordMap: ExtendedRecordMap): ContentStats {\n const stats: ContentStats = {\n numWords: 0,\n numImages: 0\n }\n\n if (!block) return stats\n\n for (const childId of block.content || []) {\n const child = recordMap.block[childId]?.value\n let recurse = false\n if (!child) continue\n\n switch (child.type) {\n case 'quote':\n // fallthrough\n case 'alias':\n // fallthrough\n case 'header':\n // fallthrough\n case 'sub_header':\n // fallthrough\n case 'sub_sub_header': {\n const title = getBlockTitle(child, recordMap)\n stats.numWords += countWordsInText(title)\n break\n }\n\n case 'callout':\n // fallthrough\n case 'toggle':\n // fallthrough\n case 'to_do':\n // fallthrough\n case 'bulleted_list':\n // fallthrough\n case 'numbered_list':\n // fallthrough\n case 'text': {\n const title = getBlockTitle(child, recordMap)\n stats.numWords += countWordsInText(title)\n recurse = true\n break\n }\n\n case 'embed':\n // fallthrough\n case 'tweet':\n // fallthrough\n case 'maps':\n // fallthrough\n case 'pdf':\n // fallthrough\n case 'figma':\n // fallthrough\n case 'typeform':\n // fallthrough\n case 'codepen':\n // fallthrough\n case 'excalidraw':\n // fallthrough\n case 'gist':\n // fallthrough\n case 'video':\n // fallthrough\n case 'drive':\n // fallthrough\n case 'audio':\n // fallthrough\n case 'file':\n // fallthrough\n case 'image':\n // treat all embeds as images\n stats.numImages += 1\n break\n\n case 'bookmark':\n // treat bookmarks as quarter images since they aren't as content-ful as embedd images\n stats.numImages += 0.25\n break\n\n case 'code':\n // treat code blocks as double the complexity of images\n stats.numImages += 2\n break\n\n case 'table':\n // fallthrough\n case 'collection_view':\n // treat collection views as double the complexity of images\n stats.numImages += 2\n break\n\n case 'column':\n // fallthrough\n case 'column_list':\n // fallthrough\n case 'transclusion_container':\n recurse = true\n break\n\n case 'table_of_contents': {\n const page = block as PageBlock\n if (!page) continue\n\n const toc = getPageTableOfContents(page, recordMap)\n for (const tocItem of toc) stats.numWords += countWordsInText(tocItem.text)\n\n break\n }\n\n case 'transclusion_reference': {\n const referencePointerId = child?.format?.transclusion_reference_pointer?.id\n\n if (!referencePointerId) continue\n\n const referenceBlock = recordMap.block[referencePointerId]?.value\n if (referenceBlock) mergeContentStats(stats, getBlockContentStats(referenceBlock, recordMap))\n\n break\n }\n\n default:\n // ignore unrecognized blocks\n break\n }\n\n if (recurse) mergeContentStats(stats, getBlockContentStats(child, recordMap))\n }\n\n return stats\n}\n\nfunction mergeContentStats(statsA: ContentStats, statsB: ContentStats) {\n statsA.numWords += statsB.numWords\n statsA.numImages += statsB.numImages\n}\n\nfunction countWordsInText(text: string): number {\n if (!text) return 0\n\n return (text.match(/\\w+/g) || []).length\n}\n\nfunction humanizeReadTime(time: number): string {\n if (time < 0.5) return 'less than a minute'\n\n if (time < 1.5) return '1 minute'\n\n return `${Math.ceil(time)} minutes`\n}\n"],"mappings":"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","names":["getTextContent","text","_a","prev","current","getBlockCollectionId","block","recordMap","_a","_b","_c","_d","_e","_f","_g","collectionId","collectionViewId","collectionView","getBlockTitle","block","recordMap","_a","_b","getTextContent","collectionId","getBlockCollectionId","collection","getBlockIcon","block","recordMap","_a","_b","_c","collectionId","getBlockCollectionId","collection","getPageTitle","recordMap","_a","pageBlock","getBlockTitle","getPageProperty","propertyName","block","recordMap","_a","collection","propertyNameL","propertyId","key","_b","type","content","getTextContent","formatDate","start_date","start_time","end_date","end_time","startTime","endTime","e","getDateValue","prop","v","value","getBlockParentPage","block","recordMap","inclusive","_a","_b","currentRecord","parentId","parentTable","indentLevels","getPageTableOfContents","page","recordMap","_a","toc","blockId","_b","block","type","getTextContent","indentLevelStack","tocItem","indentLevel","actual","prevIndent","prevActual","prevEffective","getPageContentBlockIds","recordMap","blockId","rootBlockId","contentBlockIds","addContentBlocks","_a","_b","_c","_d","block","content","type","properties","format","key","p","d","value","referenceId","idToUuid","id","pageIdRe","pageId2Re","parsePageId","id","uuid","match","idToUuid","match2","uuidToId","uuid","PQueue","getAllPagesInSpace","_0","_1","_2","__async","rootPageId","rootSpaceId","getPage","concurrency","traverseCollections","targetPageId","pages","pendingPageIds","queue","PQueue","processPage","pageId","parsePageId","_a","_b","page","spaceId","key","block","subPageId","collectionViews","collectionData","blockIds","collectionItemId","err","normalizeTitle","title","getCanonicalPageId","pageId","recordMap","uuid","_a","id","uuidToId","block","slug","getPageProperty","normalizeTitle","getBlockTitle","getPageBreadcrumbs","recordMap","activePageId","_a","blockMap","breadcrumbs","currentPageId","block","title","getBlockTitle","icon","getBlockIcon","parentBlock","getBlockParentPage","parentId","isUrl","getPageImageUrls","recordMap","mapImageUrl","imageUrls","blockId","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","block","images","source","pageIcon","getBlockIcon","isUrl","url","mem","normalizeUrlImpl","normalizeUrl","url","u","subUrl","normalizedSubUrl","err","mergeRecordMaps","recordMapA","recordMapB","__spreadValues","formatDate","input","month","date","formatNotionDateTime","datetime","dateString","formatDate","estimatePageReadTime","block","recordMap","wordsPerMinute","imageReadTimeInSeconds","stats","getBlockContentStats","totalWordsReadTimeInMinutes","totalImageReadTimeInMinutes","totalReadTimeInMinutes","__spreadProps","__spreadValues","estimatePageReadTimeAsHumanizedString","opts","estimate","humanizeReadTime","_a","_b","_c","_d","childId","child","recurse","title","getBlockTitle","countWordsInText","page","toc","getPageTableOfContents","tocItem","referencePointerId","referenceBlock","mergeContentStats","statsA","statsB","text","time"]}
1
+ {"version":3,"sources":["../src/get-text-content.ts","../src/get-block-collection-id.ts","../src/get-block-title.ts","../src/get-block-icon.ts","../src/get-page-title.ts","../src/get-page-property.ts","../src/get-date-value.ts","../src/get-block-parent-page.ts","../src/get-page-table-of-contents.ts","../src/get-page-content-block-ids.ts","../src/id-to-uuid.ts","../src/parse-page-id.ts","../src/uuid-to-id.ts","../src/get-all-pages-in-space.ts","../src/normalize-title.ts","../src/get-canonical-page-id.ts","../src/get-page-breadcrumbs.ts","../src/is-url.ts","../src/get-page-image-urls.ts","../src/normalize-url.ts","../src/merge-record-maps.ts","../src/format-date.ts","../src/format-notion-date-time.ts","../src/find-ancestors.ts","../src/estimate-page-read-time.ts"],"sourcesContent":["import type { Decoration } from '@texonom/ntypes'\n\n/**\n * Gets the raw, unformatted text content of a block's content value.\n *\n * This is useful, for instance, for extracting a block's `title` without any\n * rich text formatting.\n */\nexport const getTextContent = (text?: Decoration[]): string => {\n if (!text) return ''\n else if (Array.isArray(text))\n return text?.reduce((prev, current) => prev + (current[0] !== '⁍' && current[0] !== '‣' ? current[0] : ''), '') ?? ''\n else return text\n}\n","import type { Block, ExtendedRecordMap } from '@texonom/ntypes'\n\nexport function getBlockCollectionId(block: Block, recordMap: ExtendedRecordMap): string | null {\n const collectionId = (block as any).collection_id || (block as any).format?.collection_pointer?.id\n\n if (collectionId) return collectionId\n\n const collectionViewId = (block as any)?.view_ids?.[0]\n if (collectionViewId) {\n const collectionView = recordMap.collection_view?.[collectionViewId]?.value\n if (collectionView) {\n const collectionId = collectionView.format?.collection_pointer?.id\n return collectionId\n }\n }\n\n return null\n}\n","import { getBlockCollectionId } from './get-block-collection-id'\nimport { getTextContent } from './get-text-content'\n\nimport type { Block, ExtendedRecordMap } from '@texonom/ntypes'\n\nexport function getBlockTitle(block: Block, recordMap: ExtendedRecordMap) {\n if (block.properties?.title) return getTextContent(block.properties.title)\n\n if (block.type === 'collection_view_page' || block.type === 'collection_view') {\n const collectionId = getBlockCollectionId(block, recordMap)\n if (collectionId) {\n const collection = recordMap.collection[collectionId]?.value\n if (collection) return getTextContent(collection.name)\n }\n }\n return ''\n}\n","import { getBlockCollectionId } from './get-block-collection-id'\n\nimport type { Block, ExtendedRecordMap, PageBlock } from '@texonom/ntypes'\n\nexport function getBlockIcon(block: Block, recordMap: ExtendedRecordMap) {\n if ((block as PageBlock).format?.page_icon) return (block as PageBlock).format?.page_icon\n\n if (block.type === 'collection_view_page' || block.type === 'collection_view') {\n const collectionId = getBlockCollectionId(block, recordMap)\n if (collectionId) {\n const collection = recordMap.collection[collectionId]?.value\n\n if (collection) return collection.icon\n }\n }\n\n return null\n}\n","import { ExtendedRecordMap } from '@texonom/ntypes'\n\nimport { getBlockTitle } from './get-block-title'\n\nexport function getPageTitle(recordMap: ExtendedRecordMap) {\n const pageBlock = recordMap.block[Object.keys(recordMap.block)[0]]?.value\n\n if (pageBlock) return getBlockTitle(pageBlock, recordMap)\n\n return null\n}\n","import { Block, DateFormat, ExtendedRecordMap } from '@texonom/ntypes'\n\nimport { getTextContent } from './get-text-content'\n\n/**\n * Gets the value of a collection property for a given page (collection item).\n *\n * @param propertyName property name\n * @param block Page block, often be first block in blockMap\n * @param recordMap\n * @returns - The return value types will follow the following principles:\n * 1. if property is date type, it will return `number` or `number[]`(depends on `End Date` switch)\n * 2. property is text-like will return `string`\n * 3. multi select property will return `string[]`\n * 4. checkbox property return `boolean`\n * @todo complete all no-text property type\n */\nexport function getPageProperty<T = string | number | boolean | string[] | number[]>(\n propertyName: string,\n block: Block,\n recordMap: ExtendedRecordMap\n): T\nexport function getPageProperty(propertyName: string, block: Block, recordMap: ExtendedRecordMap) {\n try {\n if (!block.properties || !Object.keys(recordMap.collection))\n // console.warn(\n // `block ${block.id} has no properties or this recordMap has no collection record`\n // )\n return null\n\n const collection = recordMap.collection[block.parent_id]?.value\n\n if (collection) {\n const propertyNameL = propertyName.toLowerCase()\n const propertyId = Object.keys(collection.schema).find(\n key => collection.schema[key]?.name?.toLowerCase() === propertyNameL\n )\n\n if (!propertyId) return null\n\n const { type } = collection.schema[propertyId]\n const content = getTextContent(block.properties[propertyId])\n\n switch (type) {\n case 'created_time':\n return block.created_time\n\n case 'multi_select':\n return content.split(',')\n\n case 'date': {\n const property = block.properties[propertyId] as [['‣', [DateFormat]]]\n const formatDate = property[0][1][0][1]\n\n if (formatDate.type == 'datetime') {\n return new Date(`${formatDate.start_date} ${formatDate.start_time}`).getTime()\n } else if (formatDate.type == 'date') {\n return new Date(formatDate.start_date).getTime()\n } else if (formatDate.type == 'datetimerange') {\n const { start_date, start_time, end_date, end_time } = formatDate\n const startTime = new Date(`${start_date} ${start_time}`).getTime()\n const endTime = new Date(`${end_date} ${end_time}`).getTime()\n return [startTime, endTime]\n } else {\n const startTime = new Date(formatDate.start_date).getTime()\n const endTime = new Date(formatDate.end_date).getTime()\n return [startTime, endTime]\n }\n }\n\n case 'checkbox':\n return content == 'Yes'\n\n case 'last_edited_time':\n return block.last_edited_time\n\n default:\n return content\n }\n }\n } catch {\n // ensure that no matter what, we don't throw errors because of an unexpected\n // collection data format\n }\n\n return null\n}\n","import type { FormattedDate } from '@texonom/ntypes'\n\n/**\n * Attempts to find a valid date from a given property.\n */\nexport const getDateValue = (prop: any[]): FormattedDate | null => {\n if (prop && Array.isArray(prop))\n if (prop[0] === 'd') return prop[1]\n else\n for (const v of prop) {\n const value = getDateValue(v)\n if (value) return value\n }\n\n return null\n}\n","import type { Block, ExtendedRecordMap, PageBlock, Collection } from '@texonom/ntypes'\n\n/**\n * Returns the parent page block containing a given page.\n *\n * Note that many times this will not be the direct parent block since\n * some non-page content blocks can contain sub-blocks.\n */\nexport const getBlockParentPage = (\n block: Block,\n recordMap: ExtendedRecordMap,\n {\n inclusive = false\n }: {\n inclusive?: boolean\n } = {}\n): PageBlock | null => {\n let currentRecord: Block | Collection = block\n\n while (currentRecord != null) {\n if (inclusive && (currentRecord as Block)?.type === 'page') return currentRecord as PageBlock\n\n const parentId: string = currentRecord.parent_id\n const parentTable = currentRecord.parent_table\n\n if (!parentId) break\n\n if (parentTable === 'collection') {\n currentRecord = recordMap.collection[parentId]?.value\n } else {\n currentRecord = recordMap.block[parentId]?.value\n if ((currentRecord as Block)?.type === 'page') return currentRecord as PageBlock\n }\n }\n\n return null\n}\n","import { getTextContent } from './get-text-content'\n\nimport type { ID, BlockType, PageBlock, ExtendedRecordMap } from '@texonom/ntypes'\n\nexport interface TableOfContentsEntry {\n id: ID\n type: BlockType\n text: string\n indentLevel: number\n}\n\nconst indentLevels = {\n header: 0,\n sub_header: 1,\n sub_sub_header: 2\n}\n\n/**\n * Gets the metadata for a table of contents block by parsing the page's\n * H1, H2, and H3 elements.\n */\nexport const getPageTableOfContents = (page: PageBlock, recordMap: ExtendedRecordMap): Array<TableOfContentsEntry> => {\n const toc = (page.content ?? [])\n .map((blockId: string) => {\n const block = recordMap.block[blockId]?.value\n\n if (block) {\n const { type } = block\n\n if (type === 'header' || type === 'sub_header' || type === 'sub_sub_header')\n return {\n id: blockId,\n type,\n text: getTextContent(block.properties?.title),\n indentLevel: indentLevels[type]\n }\n }\n\n return null\n })\n .filter(Boolean) as Array<TableOfContentsEntry>\n\n const indentLevelStack = [\n {\n actual: -1,\n effective: -1\n }\n ]\n\n // Adjust indent levels to always change smoothly.\n // This is a little tricky, but the key is that when increasing indent levels,\n // they should never jump more than one at a time.\n for (const tocItem of toc) {\n const { indentLevel } = tocItem\n const actual = indentLevel\n\n do {\n const prevIndent = indentLevelStack[indentLevelStack.length - 1]\n const { actual: prevActual, effective: prevEffective } = prevIndent\n\n if (actual > prevActual) {\n tocItem.indentLevel = prevEffective + 1\n indentLevelStack.push({\n actual,\n effective: tocItem.indentLevel\n })\n } else if (actual === prevActual) {\n tocItem.indentLevel = prevEffective\n break\n } else {\n indentLevelStack.pop()\n }\n\n // eslint-disable-next-line no-constant-condition\n } while (true)\n }\n\n return toc\n}\n","import type { ExtendedRecordMap, Decoration } from '@texonom/ntypes'\n\n/**\n * Gets the IDs of all blocks contained on a page starting from a root block ID.\n */\nexport const getPageContentBlockIds = (recordMap: ExtendedRecordMap, blockId?: string): string[] => {\n const rootBlockId = blockId || Object.keys(recordMap.block)[0]\n const contentBlockIds = new Set<string>()\n\n function addContentBlocks(blockId: string, nested = false) {\n if (contentBlockIds.has(blockId)) return\n contentBlockIds.add(blockId)\n if (!nested) return\n const block = recordMap.block[blockId]?.value\n if (!block) return\n const { content, type, properties, format } = block\n if (properties)\n for (const key of Object.keys(properties)) {\n const p = properties[key]\n p.map((d: Decoration) => {\n const value = d?.[0]?.[1]?.[0]\n if (value?.[0] === 'p' && value[1]) addContentBlocks(value[1])\n })\n p.map((d: Decoration) => {\n const value = d?.[1]?.[0]\n if ((value?.[0] === 'p' || value?.[0] === 'eoi') && value[1]) addContentBlocks(value[1])\n })\n }\n\n if (format) {\n const referenceId = format.transclusion_reference_pointer?.id\n if (referenceId) addContentBlocks(referenceId)\n }\n // no child content blocks to recurse on\n if (!content || !Array.isArray(content)) return\n // ignore the content of other pages and collections\n if (blockId !== rootBlockId) if (type === 'page' || type === 'collection_view_page') return\n for (const blockId of content) addContentBlocks(blockId)\n }\n addContentBlocks(rootBlockId, true)\n return Array.from(contentBlockIds)\n}\n\n/**\n * Gets the IDs of all blocks contained on a page starting from a root block ID.\n */\nexport const getPageContentUserIds = (recordMap: ExtendedRecordMap, blockId?: string): string[] => {\n const rootBlockId = blockId || Object.keys(recordMap.block)[0]\n const contentUserIDs = new Set<string>()\n const block = recordMap.block[rootBlockId]?.value\n\n if (block?.created_by_id) contentUserIDs.add(block?.created_by_id)\n if (block?.last_edited_by_id) contentUserIDs.add(block?.last_edited_by_id)\n\n // Property\n const { properties } = block\n if (properties)\n for (const key of Object.keys(properties)) {\n const p = properties[key]\n p.map((d: Decoration) => {\n const value = d?.[1]?.[0]\n if (value?.[0] === 'u' && value[1]) contentUserIDs.add(value[1])\n })\n }\n\n return Array.from(contentUserIDs)\n}\n","export const idToUuid = (id = '') =>\n `${id.substr(0, 8)}-${id.substr(8, 4)}-${id.substr(12, 4)}-${id.substr(16, 4)}-${id.substr(20)}`\n","import { idToUuid } from './id-to-uuid'\n\nconst pageIdRe = /\\b([a-f0-9]{32})\\b/\nconst pageId2Re = /\\b([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})\\b/\n\n/**\n * Robustly extracts the notion page ID from a notion URL or pathname suffix.\n *\n * Defaults to returning a UUID (with dashes).\n */\nexport const parsePageId = (id: string | null = '', { uuid = true }: { uuid?: boolean } = {}) => {\n if (!id) return null\n\n id = id.split('?')[0]\n const match = id.match(pageIdRe)\n\n if (match) return uuid ? idToUuid(match[1]) : match[1]\n\n const match2 = id.match(pageId2Re)\n if (match2) return uuid ? match2[1] : match2[1].replace(/-/g, '')\n\n return null\n}\n","export const uuidToId = (uuid: string) => uuid.replace(/-/g, '')\n","import PQueue from 'p-queue'\n\nimport { parsePageId } from './parse-page-id'\n\nimport type { ExtendedRecordMap, PageMap } from '@texonom/ntypes'\n\n/**\n * Performs a traversal over a given Notion workspace starting from a seed page.\n *\n * Returns a map containing all of the pages that are reachable from the seed\n * page in the space.\n *\n * If `rootSpaceId` is not defined, the space ID of the root page will be used\n * to scope traversal.\n *\n *\n * @param rootPageId - Page ID to start from.\n * @param rootSpaceId - Space ID to scope traversal.\n * @param getPage - Function used to fetch a single page.\n * @param opts - Optional config\n */\nexport async function getAllPagesInSpace(\n rootPageId: string,\n rootSpaceId: string | undefined,\n getPage: (pageId: string) => Promise<ExtendedRecordMap>,\n {\n concurrency = 4,\n traverseCollections = true,\n targetPageId = null\n }: {\n concurrency?: number\n traverseCollections?: boolean\n targetPageId?: string\n } = {}\n): Promise<PageMap> {\n const pages: PageMap = {}\n const pendingPageIds = new Set<string>()\n const queue = new PQueue({ concurrency })\n\n async function processPage(pageId: string) {\n if (targetPageId && pendingPageIds.has(targetPageId)) return\n\n pageId = parsePageId(pageId) as string\n\n if (pageId && !pages[pageId] && !pendingPageIds.has(pageId)) {\n pendingPageIds.add(pageId)\n\n queue.add(async () => {\n try {\n if (targetPageId && pendingPageIds.has(targetPageId) && pageId !== targetPageId) return\n\n const page = await getPage(pageId)\n if (!page) return\n\n const spaceId = page.block[pageId]?.value?.space_id\n\n if (spaceId)\n if (!rootSpaceId) rootSpaceId = spaceId\n else if (rootSpaceId !== spaceId) return\n\n Object.keys(page.block)\n .filter(key => {\n const block = page.block[key]?.value\n if (!block) return false\n\n if (block.type !== 'page' && block.type !== 'collection_view_page') return false\n\n // the space id check is important to limit traversal because pages\n // can reference pages in other spaces\n if (rootSpaceId && block.space_id && block.space_id !== rootSpaceId) return false\n\n return true\n })\n .forEach(subPageId => processPage(subPageId))\n\n // traverse collection item pages as they may contain subpages as well\n if (traverseCollections)\n for (const collectionViews of Object.values(page.collection_query))\n for (const collectionData of Object.values(collectionViews)) {\n const { blockIds } = collectionData\n\n if (blockIds) for (const collectionItemId of blockIds) processPage(collectionItemId)\n }\n\n pages[pageId] = page\n } catch (err) {\n console.warn('page load error', { pageId, spaceId: rootSpaceId }, err.statusCode, err.message)\n pages[pageId] = null\n }\n\n pendingPageIds.delete(pageId)\n })\n }\n }\n\n await processPage(rootPageId)\n await queue.onIdle()\n\n return pages\n}\n","export const normalizeTitle = (title?: string | null): string => {\n return (title || '')\n .replace(/ /g, '-')\n .replace(/[^a-zA-Z0-9-\\u4e00-\\u9FFF\\u3041-\\u3096\\u30A1-\\u30FC\\u3000-\\u303F]/g, '')\n .replace(/--/g, '-')\n .replace(/-$/, '')\n .replace(/^-/, '')\n .trim()\n .toLowerCase()\n}\n","import { ExtendedRecordMap } from '@texonom/ntypes'\n\nimport { getBlockTitle } from './get-block-title'\nimport { getPageProperty } from './get-page-property'\nimport { normalizeTitle } from './normalize-title'\nimport { uuidToId } from './uuid-to-id'\n\n/**\n * Gets the canonical, display-friendly version of a page's ID for use in URLs.\n */\nexport const getCanonicalPageId = (\n pageId: string,\n recordMap: ExtendedRecordMap,\n { uuid = true }: { uuid?: boolean } = {}\n): string | null => {\n if (!pageId || !recordMap) return null\n\n const id = uuidToId(pageId)\n const block = recordMap.block[pageId]?.value\n\n if (block) {\n const slug =\n (getPageProperty('slug', block, recordMap) as string | null) || normalizeTitle(getBlockTitle(block, recordMap))\n\n if (slug)\n if (uuid) return `${slug}-${id}`\n else return slug\n }\n\n return id\n}\n","import { getBlockIcon } from './get-block-icon'\nimport { getBlockParentPage } from './get-block-parent-page'\nimport { getBlockTitle } from './get-block-title'\n\nimport type { ExtendedRecordMap } from '@texonom/ntypes'\n\nexport const getPageBreadcrumbs = (recordMap: ExtendedRecordMap, activePageId: string): Array<any> | null => {\n const blockMap = recordMap.block\n const breadcrumbs = []\n\n let currentPageId = activePageId\n\n do {\n const block = blockMap[currentPageId]?.value\n if (!block) break\n\n const title = getBlockTitle(block, recordMap)\n const icon = getBlockIcon(block, recordMap)\n\n if (!(title || icon)) break\n\n breadcrumbs.push({\n block,\n active: currentPageId === activePageId,\n pageId: currentPageId,\n title,\n icon\n })\n\n const parentBlock = getBlockParentPage(block, recordMap)\n const parentId = parentBlock?.id\n\n if (!parentId) break\n\n currentPageId = parentId\n\n // eslint-disable-next-line no-constant-condition\n } while (true)\n\n breadcrumbs.reverse()\n\n return breadcrumbs\n}\n","import isUrl from 'is-url-superb'\n\nexport { isUrl }\n","import { getBlockIcon } from './get-block-icon'\nimport { isUrl } from './is-url'\n\nimport type { Block, ExtendedRecordMap } from '@texonom/ntypes'\n\n/**\n * Gets URLs of all images contained on the given page.\n */\nexport const getPageImageUrls = (\n recordMap: ExtendedRecordMap,\n {\n mapImageUrl\n }: {\n mapImageUrl: (url: string, block: Block) => string | null\n }\n): string[] => {\n const blockIds = Object.keys(recordMap.block)\n const imageUrls: string[] = blockIds\n .flatMap(blockId => {\n const block = recordMap.block[blockId]?.value\n const images: Array<{ block: Block; url: string }> = []\n\n if (block) {\n if (block.type === 'image') {\n const signedUrl = recordMap.signed_urls?.[block.id]\n let source = signedUrl || block.properties?.source?.[0]?.[0]\n if (source.includes('file.notion.so')) source = block.properties?.source?.[0]?.[0]\n\n if (source)\n images.push({\n block,\n url: source\n })\n }\n\n if ((block.format as any)?.page_cover) {\n const source = (block.format as any).page_cover\n\n images.push({\n block,\n url: source\n })\n }\n\n if ((block.format as any)?.bookmark_cover) {\n const source = (block.format as any).bookmark_cover\n\n images.push({\n block,\n url: source\n })\n }\n\n if ((block.format as any)?.bookmark_icon) {\n const source = (block.format as any).bookmark_icon\n\n images.push({\n block,\n url: source\n })\n }\n\n const pageIcon = getBlockIcon(block, recordMap)\n if (pageIcon && isUrl(pageIcon))\n images.push({\n block,\n url: pageIcon\n })\n }\n\n return images\n })\n .filter(Boolean)\n .map(({ block, url }) => mapImageUrl(url, block))\n .filter(Boolean)\n\n return Array.from(new Set(imageUrls))\n}\n","import mem from 'mem'\nimport normalizeUrlImpl from 'normalize-url'\n\nexport const normalizeUrl = mem((url?: string) => {\n if (!url) return ''\n\n try {\n if (url.startsWith('https://www.notion.so/image/')) {\n const u = new URL(url)\n const subUrl = decodeURIComponent(u.pathname.substr('/image/'.length))\n const normalizedSubUrl = normalizeUrl(subUrl)\n u.pathname = `/image/${encodeURIComponent(normalizedSubUrl)}`\n url = u.toString()\n }\n\n return normalizeUrlImpl(url, {\n stripProtocol: true,\n stripWWW: true,\n stripHash: true,\n stripTextFragment: true,\n removeQueryParameters: true\n })\n } catch (err) {\n return ''\n }\n})\n","import { ExtendedRecordMap } from '@texonom/ntypes'\n\nexport function mergeRecordMaps(recordMapA: ExtendedRecordMap, recordMapB: ExtendedRecordMap): ExtendedRecordMap {\n const mergedRecordMap: ExtendedRecordMap = {\n block: {\n ...recordMapA.block,\n ...recordMapB.block\n },\n collection: {\n ...recordMapA.collection,\n ...recordMapB.collection\n },\n collection_view: {\n ...recordMapA.collection_view,\n ...recordMapB.collection_view\n },\n notion_user: {\n ...recordMapA.notion_user,\n ...recordMapB.notion_user\n },\n collection_query: {\n ...recordMapA.collection_query,\n ...recordMapB.collection_query\n },\n signed_urls: {\n ...recordMapA.signed_urls,\n ...recordMapB.signed_urls\n },\n preview_images: {\n ...recordMapA.preview_images,\n ...recordMapB.preview_images\n }\n }\n\n return mergedRecordMap\n}\n","export const formatDate = (input: string | number, { month = 'short' }: { month?: 'long' | 'short' } = {}) => {\n const date = new Date(input)\n const monthLocale = date.toLocaleString('en-US', { month })\n return `${monthLocale} ${date.getUTCDate()}, ${date.getUTCFullYear()}`\n}\n","import { formatDate } from './format-date'\n\nexport interface NotionDateTime {\n type: 'datetime'\n start_date: string\n start_time?: string\n time_zone?: string\n}\n\nexport const formatNotionDateTime = (datetime: NotionDateTime) => {\n const dateString = `${datetime.start_time || ''} ${datetime.start_date} ${datetime.time_zone || ''}`\n return formatDate(dateString)\n}\n","import type { ExtendedRecordMap, Block, Collection } from '@texonom/ntypes'\n\nexport function findAncestors(recordMap: ExtendedRecordMap, block: Block | Collection, list: string[] = []): string[] {\n if (block.parent_id) {\n list.push(block.parent_id)\n const table = block.parent_table as 'block' | 'collection'\n if (recordMap[table][block.parent_id]?.value)\n return findAncestors(recordMap, recordMap[table][block.parent_id].value, list)\n }\n return list\n}\n","import { Block, ExtendedRecordMap, PageBlock } from '@texonom/ntypes'\n\nimport { getBlockTitle } from './get-block-title'\nimport { getPageTableOfContents } from './get-page-table-of-contents'\n\ntype EstimatePageReadTimeOptions = {\n wordsPerMinute?: number\n imageReadTimeInSeconds?: number\n}\n\ntype ContentStats = {\n numWords: number\n numImages: number\n}\n\ntype PageReadTimeEstimate = ContentStats & {\n totalWordsReadTimeInMinutes: number\n totalImageReadTimeInMinutes: number\n totalReadTimeInMinutes: number\n}\n\n/**\n * Returns an estimate for the time it would take for a person to read the content\n * in the given Notion page.\n *\n * Uses Medium for inspiration.\n *\n * @see https://blog.medium.com/read-time-and-you-bc2048ab620c\n * @see https://github.com/ngryman/reading-time\n *\n * TODO: handle non-english content.\n */\nexport function estimatePageReadTime(\n block: Block,\n recordMap: ExtendedRecordMap,\n { wordsPerMinute = 275, imageReadTimeInSeconds = 12 }: EstimatePageReadTimeOptions = {}\n): PageReadTimeEstimate {\n const stats = getBlockContentStats(block, recordMap)\n const totalWordsReadTimeInMinutes = stats.numWords / wordsPerMinute\n const totalImageReadTimeInSeconds =\n stats.numImages > 10\n ? (stats.numImages / 2) * (imageReadTimeInSeconds + 3) + (stats.numImages - 10) * 3 // n/2(a+b) + 3 sec/image\n : (stats.numImages / 2) * (2 * imageReadTimeInSeconds + (1 - stats.numImages)) // n/2[2a+(n-1)d]\n const totalImageReadTimeInMinutes = totalImageReadTimeInSeconds / 60\n\n const totalReadTimeInMinutes = totalWordsReadTimeInMinutes + totalImageReadTimeInMinutes\n\n return {\n ...stats,\n totalWordsReadTimeInMinutes,\n totalImageReadTimeInMinutes,\n totalReadTimeInMinutes\n }\n}\n\n/**\n * Same as `estimatePageReadTime`, except it returns the total time estimate as\n * a human-readable string.\n *\n * For example, \"9 minutes\" or \"less than a minute\".\n */\nexport function estimatePageReadTimeAsHumanizedString(\n block: Block,\n recordMap: ExtendedRecordMap,\n opts: EstimatePageReadTimeOptions\n) {\n const estimate = estimatePageReadTime(block, recordMap, opts)\n return humanizeReadTime(estimate.totalReadTimeInMinutes)\n}\n\nfunction getBlockContentStats(block: Block, recordMap: ExtendedRecordMap): ContentStats {\n const stats: ContentStats = {\n numWords: 0,\n numImages: 0\n }\n\n if (!block) return stats\n\n for (const childId of block.content || []) {\n const child = recordMap.block[childId]?.value\n let recurse = false\n if (!child) continue\n\n switch (child.type) {\n case 'quote':\n // fallthrough\n case 'alias':\n // fallthrough\n case 'header':\n // fallthrough\n case 'sub_header':\n // fallthrough\n case 'sub_sub_header': {\n const title = getBlockTitle(child, recordMap)\n stats.numWords += countWordsInText(title)\n break\n }\n\n case 'callout':\n // fallthrough\n case 'toggle':\n // fallthrough\n case 'to_do':\n // fallthrough\n case 'bulleted_list':\n // fallthrough\n case 'numbered_list':\n // fallthrough\n case 'text': {\n const title = getBlockTitle(child, recordMap)\n stats.numWords += countWordsInText(title)\n recurse = true\n break\n }\n\n case 'embed':\n // fallthrough\n case 'tweet':\n // fallthrough\n case 'maps':\n // fallthrough\n case 'pdf':\n // fallthrough\n case 'figma':\n // fallthrough\n case 'typeform':\n // fallthrough\n case 'codepen':\n // fallthrough\n case 'excalidraw':\n // fallthrough\n case 'gist':\n // fallthrough\n case 'video':\n // fallthrough\n case 'drive':\n // fallthrough\n case 'audio':\n // fallthrough\n case 'file':\n // fallthrough\n case 'image':\n // treat all embeds as images\n stats.numImages += 1\n break\n\n case 'bookmark':\n // treat bookmarks as quarter images since they aren't as content-ful as embedd images\n stats.numImages += 0.25\n break\n\n case 'code':\n // treat code blocks as double the complexity of images\n stats.numImages += 2\n break\n\n case 'table':\n // fallthrough\n case 'collection_view':\n // treat collection views as double the complexity of images\n stats.numImages += 2\n break\n\n case 'column':\n // fallthrough\n case 'column_list':\n // fallthrough\n case 'transclusion_container':\n recurse = true\n break\n\n case 'table_of_contents': {\n const page = block as PageBlock\n if (!page) continue\n\n const toc = getPageTableOfContents(page, recordMap)\n for (const tocItem of toc) stats.numWords += countWordsInText(tocItem.text)\n\n break\n }\n\n case 'transclusion_reference': {\n const referencePointerId = child?.format?.transclusion_reference_pointer?.id\n\n if (!referencePointerId) continue\n\n const referenceBlock = recordMap.block[referencePointerId]?.value\n if (referenceBlock) mergeContentStats(stats, getBlockContentStats(referenceBlock, recordMap))\n\n break\n }\n\n default:\n // ignore unrecognized blocks\n break\n }\n\n if (recurse) mergeContentStats(stats, getBlockContentStats(child, recordMap))\n }\n\n return stats\n}\n\nfunction mergeContentStats(statsA: ContentStats, statsB: ContentStats) {\n statsA.numWords += statsB.numWords\n statsA.numImages += statsB.numImages\n}\n\nfunction countWordsInText(text: string): number {\n if (!text) return 0\n\n return (text.match(/\\w+/g) || []).length\n}\n\nfunction humanizeReadTime(time: number): string {\n if (time < 0.5) return 'less than a minute'\n\n if (time < 1.5) return '1 minute'\n\n return `${Math.ceil(time)} minutes`\n}\n"],"mappings":"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","names":["getTextContent","text","_a","prev","current","getBlockCollectionId","block","recordMap","_a","_b","_c","_d","_e","_f","_g","collectionId","collectionViewId","collectionView","getBlockTitle","block","recordMap","_a","_b","getTextContent","collectionId","getBlockCollectionId","collection","getBlockIcon","block","recordMap","_a","_b","_c","collectionId","getBlockCollectionId","collection","getPageTitle","recordMap","_a","pageBlock","getBlockTitle","getPageProperty","propertyName","block","recordMap","_a","collection","propertyNameL","propertyId","key","_b","type","content","getTextContent","formatDate","start_date","start_time","end_date","end_time","startTime","endTime","e","getDateValue","prop","v","value","getBlockParentPage","block","recordMap","inclusive","_a","_b","currentRecord","parentId","parentTable","indentLevels","getPageTableOfContents","page","recordMap","_a","toc","blockId","_b","block","type","getTextContent","indentLevelStack","tocItem","indentLevel","actual","prevIndent","prevActual","prevEffective","getPageContentBlockIds","recordMap","blockId","rootBlockId","contentBlockIds","addContentBlocks","nested","_a","_b","block","content","type","properties","format","key","p","d","value","referenceId","getPageContentUserIds","contentUserIDs","idToUuid","id","pageIdRe","pageId2Re","parsePageId","id","uuid","match","idToUuid","match2","uuidToId","uuid","PQueue","getAllPagesInSpace","_0","_1","_2","__async","rootPageId","rootSpaceId","getPage","concurrency","traverseCollections","targetPageId","pages","pendingPageIds","queue","PQueue","processPage","pageId","parsePageId","_a","_b","page","spaceId","key","block","subPageId","collectionViews","collectionData","blockIds","collectionItemId","err","normalizeTitle","title","getCanonicalPageId","pageId","recordMap","uuid","_a","id","uuidToId","block","slug","getPageProperty","normalizeTitle","getBlockTitle","getPageBreadcrumbs","recordMap","activePageId","_a","blockMap","breadcrumbs","currentPageId","block","title","getBlockTitle","icon","getBlockIcon","parentBlock","getBlockParentPage","parentId","isUrl","getPageImageUrls","recordMap","mapImageUrl","imageUrls","blockId","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","block","images","source","pageIcon","getBlockIcon","isUrl","url","mem","normalizeUrlImpl","normalizeUrl","url","u","subUrl","normalizedSubUrl","err","mergeRecordMaps","recordMapA","recordMapB","__spreadValues","formatDate","input","month","date","formatNotionDateTime","datetime","dateString","formatDate","findAncestors","recordMap","block","list","_a","table","estimatePageReadTime","block","recordMap","wordsPerMinute","imageReadTimeInSeconds","stats","getBlockContentStats","totalWordsReadTimeInMinutes","totalImageReadTimeInMinutes","totalReadTimeInMinutes","__spreadProps","__spreadValues","estimatePageReadTimeAsHumanizedString","opts","estimate","humanizeReadTime","_a","_b","_c","_d","childId","child","recurse","title","getBlockTitle","countWordsInText","page","toc","getPageTableOfContents","tocItem","referencePointerId","referenceBlock","mergeContentStats","statsA","statsB","text","time"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@texonom/nutils",
3
- "version": "1.1.4",
3
+ "version": "1.2.0-alpha.0",
4
4
  "type": "module",
5
5
  "description": "Useful utilities for working with Notion data. Isomorphic.",
6
6
  "repository": "texonom/notion-node",
@@ -27,7 +27,7 @@
27
27
  "mem": "^9.0.2",
28
28
  "normalize-url": "^8.0.0",
29
29
  "p-queue": "^7.3.4",
30
- "@texonom/ntypes": "^1.1.4"
30
+ "@texonom/ntypes": "^1.2.0-alpha.0"
31
31
  },
32
32
  "standard-version": {
33
33
  "skip": {
package/readme.md DELETED
@@ -1,42 +0,0 @@
1
- <p align="center">
2
- <img alt="React Notion X" src="https://raw.githubusercontent.com/texonom/notion-node/master/media/notion-ts.png" width="689">
3
- </p>
4
-
5
- # nutils
6
-
7
- > Useful utilities for working with Notion data. Isomorphic.
8
-
9
- [![NPM](https://img.shields.io/npm/v/nutils.svg)](https://www.npmjs.com/package/nutils) [![Build Status](https://github.com/texonom/notion-node/actions/workflows/test.yml/badge.svg)](https://github.com/texonom/notion-node/actions/workflows/test.yml) [![Prettier Code Formatting](https://img.shields.io/badge/code_style-prettier-brightgreen.svg)](https://prettier.io)
10
-
11
- ## Install
12
-
13
- ```bash
14
- npm install nutils
15
- ```
16
-
17
- This package is compatible with both Node.js and client-side web usage.
18
-
19
- ## Usage
20
-
21
- ```ts
22
- import { parsePageId } from '@texonom/nutils'
23
-
24
- parsePageId('https://www.notion.so/Notion-Tests-067dd719a912471ea9a3ac10710e7fdf')
25
- // '067dd719-a912-471e-a9a3-ac10710e7fdf'
26
-
27
- parsePageId('About-d9ae0c6e7cad49a78e21d240cf2e3d04')
28
- // 'd9ae0c6e-7cad-49a7-8e21-d240cf2e3d04'
29
-
30
- parsePageId('About-d9ae0c6e7cad49a78e21d240cf2e3d04', { uuid: false })
31
- // 'd9ae0c6e7cad49a78e21d240cf2e3d04'
32
- ```
33
-
34
- ## Docs
35
-
36
- See the [full docs](https://github.com/texonom/notion-node).
37
-
38
- ## License
39
-
40
- MIT © [Travis Fischer](https://transitivebullsh.it)
41
-
42
- Support my OSS work by <a href="https://twitter.com/transitive_bs">following me on twitter <img src="https://storage.googleapis.com/saasify-assets/twitter-logo.svg" alt="twitter" height="24px" align="center"></a>