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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@easy-editor/plugin-datasource

v1.0.4

Published

DataSource plugin for EasyEditor

Downloads

13

Readme

@easy-editor/plugin-datasource

DataSource plugin for EasyEditor. This plugin provides data fetching and management capabilities for connecting your editor components to external data sources via API requests and custom handlers.

Features

Data Source Management

The plugin enables easy management of data sources with features like:

  • Multiple request types (fetch, custom)
  • Synchronous and asynchronous data loading
  • Request parameters handling
  • Headers and timeout configuration
  • Data transformation with handlers

Runtime Data States

Manage the lifecycle of your data with built-in state tracking:

| State | Description | |-------|-------------| | Initial | Data source is initialized but not yet loaded | | Loading | Data is currently being fetched | | Loaded | Data has been successfully loaded | | Error | An error occurred during data fetching |

Custom Data Handlers

Transform and process fetched data with customizable handlers:

  • Process API responses before using in your components
  • Handle errors with custom error handlers
  • Implement pre-fetch logic with willFetch handlers
  • Control fetching conditions with shouldFetch handlers

Usage Example

import DataSourcePlugin from '@easy-editor/plugin-datasource';

// Initialize the plugin with default configuration
const plugin = DataSourcePlugin();

// Or with custom request handlers
const customPlugin = DataSourcePlugin({
  requestHandlersMap: {
    // Override default fetch handler
    fetch: (options) => {
      // Custom fetch implementation
      return customFetchFunction(options);
    },
    // Add a custom GraphQL handler
    graphql: (options) => {
      return graphqlClient.request(options.uri, options.params);
    }
  },
  // Add a default data handler for all requests
  defaultDataHandler: (response) => {
    // Transform all responses
    return response.data.results;
  }
});

Runtime Example

Using data sources:

// Define your data sources
const dataSources = {
  list: [
    {
      id: 'userList',
      type: 'fetch',
      isInit: true, // Load on initialization
      options: () => ({
        uri: 'https://api.example.com/users',
        method: 'GET',
        params: {
          page: 1,
          limit: 10
        }
      }),
      dataHandler: (response) => {
        return response.data.users;
      }
    },
    {
      id: 'productData',
      type: 'fetch',
      isInit: false, // Load on demand
      options: () => ({
        uri: 'https://api.example.com/products',
        method: 'GET'
      })
    }
  ]
};

Configuration Options

The plugin accepts a configuration object with the following properties:

Request Handlers Map

{
  requestHandlersMap?: {
    [key: string]: (
      options: RuntimeOptionsConfig,
      context?: IDataSourceRuntimeContext
    ) => Promise<any>
  }
}

By default, the plugin includes a fetch handler that uses the universal-request library.

Default Data Handler

{
  defaultDataHandler?: (
    response: { data: any, [key: string]: any }
  ) => Promise<any>
}

API

Data Source Configuration

Each data source can be configured with:

  • id: Unique identifier for the data source
  • type: Request type (fetch, custom, etc.)
  • isInit: Whether to load data on initialization
  • isSync: Whether data loading is synchronous
  • options: Function returning request configuration
  • willFetch: Pre-fetch handler for modifying request options
  • shouldFetch: Condition function determining if fetch should occur
  • dataHandler: Function to process successful responses
  • errorHandler: Function to handle errors

Data Source Methods

Each runtime data source provides:

  • load(params?): Load or reload data, optionally with new parameters
  • status: Current status (initial, loading, loaded, error)
  • data: The loaded data (when available)
  • error: Error information (when an error occurs)
  • isLoading: Boolean indicator for loading state