UNPKG

notion-page-tree

Version:

Recursively fetch nested Notion pages from the root page/database/block node.

49 lines (48 loc) 2.26 kB
/// <reference types="node" /> import { NotionClientError } from '@notionhq/client'; import { Entity, FlatEntity, RequestParameters } from '../types'; import { QueryablePromise } from '../utils'; import { QueryDatabaseParameters } from '@notionhq/client/build/src/api-endpoints'; export interface CreateFetchQueueOptions { maxConcurrency?: number; maxRequestDepth?: number; maxBlockDepth?: number; maxRetry?: number; databaseQueryFilter?: QueryDatabaseParameters['filter']; } export interface CreateFetchQueueParameters extends CreateFetchQueueOptions { requestParameters: RequestParameters; } /** * @param maxBlockDepth * Try to keep this variable to 1. * * This is a relative depth between parent page and a block inside it. * Increasing this value will result in better search indexing and nested child page discovery, * but it will also increase request count (more than) EXPONENTIALLY. * Notion API may throw error as it has broader request rate limits. * So if you want to discover nested pages, don't put them under plain blocks, rather put them on the plain level of the parent page. * And if you want better search indexing, put search keywords on the root level of the page or put them on the page property. */ export declare const createFetchQueue: ({ requestParameters, maxConcurrency, maxRequestDepth, maxBlockDepth, maxRetry, databaseQueryFilter }: CreateFetchQueueParameters) => { requestReadyRoutine: NodeJS.Timer; requestPromiseRoutine: NodeJS.Timer; request_ready_queue: { parentToAssign: Entity; parentToRequest: Entity; retry: number; }[]; request_promise_queue: { parentToAssign: Entity; parentToRequest: Entity; children: QueryablePromise<Entity[], NotionClientError>; retry: number; }[]; page_collection: Record<string, FlatEntity>; rootEntity: Entity; }; export declare type createFetchQueueReturnType = ReturnType<typeof createFetchQueue>; export declare function createFetchQueueWatcher({ requestReadyRoutine, requestPromiseRoutine, request_ready_queue, request_promise_queue, page_collection, rootEntity }: createFetchQueueReturnType): Promise<{ page_collection: typeof page_collection; root: Entity; }>;