/notion-faker

Generate massive amounts of fake contextual data for Notion

Primary LanguageTypeScript

@narkdown/notion-faker

Generate massive amounts of fake contextual data for Notion

codecov XO code style npm version license: MIT

Demo

Demo Notion Page

demo-notion-faker

Why?

To mocking Notion API request data.

Install

$ npm install @narkdown/notion-faker

Usage

const {NotionFaker} = require('@narkdown/notion-faker');

const notionFaker = new NotionFaker({
  seedValue: 100,
  locale: 'en',
});

Example

Prep Work

  1. Create a Notion API Integration
  2. Create Page in Notion to add database.
  3. Create an Example Database with your own properties.
  4. Share Page with your integration
const {Client} = require('@notionhq/client');
const {NotionFaker} = require('@narkdown/notion-faker');

const NOTION_API_KEY = ''; // Notion API Key
const EXAMPLE_DATABASE_ID = ''; // Database for importing Property Scheme.
const PARENT_PAGE_ID = ''; // Parent page to create database.
const ROW_COUNT = 100; // ⚠️ Creating too many pages using the Notion API is a heavy task.

const notion = new Client({auth: NOTION_API_KEY});
const notionFaker = new NotionFaker();

(async () => {
  const {properties: scheme} = await notion.databases.retrieve({
    database_id: EXAMPLE_DATABASE_ID,
  });

  const {id: databaseId} = await notion.databases.create({
    parent: {
      page_id: PARENT_PAGE_ID,
    },
    title: notionFaker.database.title()()(),
    properties: notionFaker.database.properties.propertiesByScheme(scheme),
    icon: notionFaker.icon.emoji(),
    cover: notionFaker.cover()(),
  });

  for (const _ of Array.from({length: ROW_COUNT})) {
    await narkdown.pages.create({
      parent: {database_id: TEST_DATABASE_ID},
      properties: notionFaker.page.properties.propertiesByScheme(scheme),
    });
  }
})();

API

const notionFaker = new NotionFaker(options?)

notionFaker.icon.emoji()

notionFaker.icon.external(methodPath?)(...args?)

notionFaker.cover(methodPath?)(...args?)

notionFaker.database.title(methodPath?)(...args?)(options?)

notionFaker.database.properties

  • title(options?)
  • rich_text(options?)
  • number(options?)
  • select(options?)
  • multi_select(options?)
  • date(options?)
  • files(options?)
  • checkbox(options?)
  • url(options?)
  • email(options?)
  • phone_number(options?)
  • formula(options?)
  • relation(options)
  • rollup(options)
  • people(options?)
  • created_by(options?)
  • created_time(options?)
  • last_edited_by(options?)
  • last_edited_time(options?)
  • propertiesByScheme(propertyScheme)

notionFaker.page.properties

  • title(methodPath?)(...args)(options?),
  • rich_text(methodPath?)(...args)(options?),
  • number(methodPath?)(...args),
  • select(methodPath?)(...args)(options?),
  • multi_select(methodPath?)(...args)(options?),
  • date(methodPath?)(...args)(options?),
  • files(methodPath?)(...args)(options?),
  • checkbox(),
  • url(),
  • email(...args),
  • phone_number(methodPath?)(...args)(options?),
  • propertiesByScheme(propertyScheme)

Support

Database Object

Property Supported
object
id
created_time
last_edited_time
title
icon
cover
properties
parent
url

Page Object

Property Supported
object
id
created_time
last_edited_time
archived
icon
cover
properties ⚠️
parent
url

Property Object

Property Page (Child of Database) Page (Child of Page)
title
rich_text
number
select
multi_select
date
files
checkbox
url
email
phone_number
formula
relation
rollup
people
created_by
created_time
last_edited_by
last_edited_time

Related

License

MIT