Skip to content

ersanyamarya/notion-plus

Repository files navigation

Notion Plus

Notion Plus is an Object-Relational Mapping (ORM) library for TypeScript that provides a simple and intuitive way to interact with Notion databases. With Notion Plus, you can define database schemas using TypeScript interfaces, and perform CRUD operations on those databases using a fluent API.

Features

  • Retrieve a database from Notion using the database ID
  • Query a page and retrieve its properties and metadata
  • Create a new page in the database with specified properties
  • Update an existing page in the database with new properties
  • Archive an existing page in the database

Installation

# Using npm
npm install notion-plus

# Using yarn
yarn add notion-plus

Usage

import { NotionPlus, Schema } from 'notion-plus'

const notionPlus = NotionPlus.getInstance(process.env.NOTION_TOKEN)
const databaseId = process.env.DB_ID

interface User {
  'First Name': string
  'Last Name': string
  Email: string
  'Company Name': string
}

const userSchema = new Schema<User>({
  'First Name': 'title',
  'Last Name': 'rich_text',
  Email: 'email',
  'Company Name': 'rich_text',
})

const userModel = notionPlus.getModel<User>(databaseId, userSchema)

// new Model<User>(notion, databaseId, userSchema)

const main = async () => {
  const users = await userModel.find({
    pageSize: 1,
    sorts: [
      {
        property: 'First Name',
        direction: 'ascending',
      },
    ],
    filter: {
      property: 'First Name',
      title: {
        contains: 'John',
      },
    },
    // metadata: true,
  })
  console.log(users)
}
main()

The EnumPropertyTypes enum (Supported Types)

The following property types are supported:

Type Description
title A title for a page or database item.
rich_text Formatted text with inline styling.
checkbox A boolean checkbox.
select A single-select dropdown.
multi_select A multi-select dropdown.
number A number value.
date A date or date-time value.
string A plain text string.
boolean A boolean value.
files A file url.
email An email address.
url A URL.
phone_number A phone number.
created_by The user who created the page or database item.
created_time The time the page or database item was created.
status The status of a page or database item.
unique_id A unique id for database.

The NotionPlus Class

The NotionPlus class is the main class in the notion-plus library. It provides a wrapper around the Notion API and exposes various methods to interact with Notion databases and pages.

Creating a new NotionPlus instance

import { NotionPlus } from 'notion-plus';

const notionPlus = NotionPlus.getInstance(process.env.NOTION_TOKEN);

Constructor

Creates a new instance of the NotionPlus class.

Name Type Description
notionToken string The API key for your Notion integration.

Since the NotionPlus class is a singleton, you should use the getInstance() method to create a new instance.

Methods

getModel<T>(databaseId: string, schema: Schema<T>): Model<T>

Returns a Model<T> instance for the specified database ID and schema. If a Model<T> instance for the specified database ID and schema has already been created, it returns the existing instance.

Name Type Description
databaseId string The ID of the Notion database.
schema Schema The schema of the Notion database.

getNotionClient(): Client

Returns the Client instance used by the NotionPlus class.

getDatabases(databaseId: string, filter?: QueryDatabaseParameters['filter'], pageSize?: number, sorts: QueryDatabaseParameters['sorts'] = []): Promise<QueryDatabaseResponse>

Queries a Notion database for its properties and returns the results.

Name Type Description
databaseId string The ID of the Notion database to query.
filter QueryDatabaseParameters['filter'] (optional) The filter to apply to the query.
pageSize number (optional) The number of items to return per page.
sorts QueryDatabaseParameters['sorts'] (optional, default: []) The sorting criteria for the query.

getPageProps(pageId: string, propertyId: string): Promise<GetPagePropertyResponse>

Retrieves the specified property value for a Notion page.

Name Type Description
pageId string The ID of the Notion page.
propertyId string The ID of the property to retrieve.

updateNotionPage(pageId: string, properties: UpdatePageParameters['properties']): Promise<UpdatePageResponse>

Updates the properties of a Notion page.

Name Type Description
pageId string The ID of the Notion page.
properties UpdatePageParameters['properties'] An object containing the updated page properties.

createNotionPage(databaseId: string, properties: CreatePageParameters['properties']): Promise<CreatePageResponse>

Creates a new Notion page in the specified database.

Name Type Description
databaseId string The ID of the Notion database.
properties CreatePageParameters['properties'] (must include all required properties) An object containing the page properties.

archiveNotionPage(pageId: string): Promise<ArchivePageResponse>

Archives a Notion page.

Name Type Description
pageId string The ID of the page.

The Schema Class

Name Description
notionSchema: NotionSchema<T & NotionRecord> The notion schema for the Notion database.
constructor(notionSchema: NotionSchema<T>) Creates a new Schema instance with the specified notionSchema.

The Schema class is a simple class with a single property notionSchema of type NotionSchema<T & NotionRecord>, and a constructor that initializes this property. The NotionSchema type is a mapped type that maps the keys of T to EnumPropertyTypes.

The Schema class is used in the NotionPlus class to define the schema for a Notion database

Creating a new Schema instance

import { Schema } from 'notion-plus';

interface User {
  'First Name': string;
  'Last Name': string;
  Email: string;
}

const userSchema = new Schema<User>({
  'First Name': 'title',
  'Last Name': 'rich_text',
  Email: 'email',
});

The Model<T> Class

A class representing a Notion database model with typed properties.

Constructor

Parameter Type Description
notionPlus NotionPlus An instance of NotionPlus class used to communicate with Notion API.
databaseId string The ID of the Notion database.
schema Schema<T> An instance of Schema class representing the typed schema of the Notion database.

Methods

Method Parameters Return value Description
find { filter?, pageSize?, sorts?, metadata? } Promise<FilterResponse<T>> Finds and returns a filtered list of database items.
create item: Partial<T>, metaData = false Promise<T & NotionRecord> Creates a new item in the database.
update id: string, data: Partial<T>, metaData = false Promise<T & NotionRecord> Updates an existing item in the database.
archive id: string, metaData = false Promise<T & NotionRecord> Archives an existing item in the database.

archive(id: string, metaData?: boolean): Promise<T | Record<string, unknown>>

Developer:

LinkedIn GitHub

About

An ORM for notion Database

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published