npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

notion-plus

v0.1.7

Published

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

Downloads

56

Readme

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