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

@superherocheesecake/loader

v1.1.6

Published

   

Downloads

9

Readme

#Loader 🐧🐧🐧

   

Tutorial: Introduction & Context

Welcome to the README of the SHCC-Loader module. We hope you enjoy using it, we created this for your happiness. This loader was created to be used with a more configurable setup. So you only include the loaders that you actually need for a project and you can write your own loaders (see "Create loader"). To achieve this a little bit more configuration is needed than other loaders. But don't worry, we'll walk you through it, hand by hand and step by step in this tutorial.

   

Tutorial: Getting started

In this tutorial we'll create a loader for images and sounds. The image loader will be configured globally while the sound load will be configured manually to show the difference.   First of all we need to install three packages; the global loader module, the image loader and the sound loader.

   

  npm install --save @superherocheesecake/loader @superherocheesecake/loaders-image-xhr-loader @superherocheesecake/loaders-howler-loader

   

Tutorial: Setup

So we need to define a global rule for the images as we want all the image files to use the "Image XHR Loader" by default. To set rules you can use a regex match on the source values. Ideally you configure this in a main or index file as the rules will apply to the entire SHCC-Loader Module.

   

  // Define global rules preferable in the main.js or index.js

  // Import Loader package
  import { loader } from '@superherocheesecake/loader';

  // Import Image XHR Loader package
  import ImageXHRLoader from '@superherocheesecake/loaders-image-xhr-loader';

  // Define rules based on source value regex, you can add as many as you want. 
  // In this case we add only the Image XHR Loader for .png, .jpeg, .jpg and .gif files. 
  loader.use([
    {test: /\.(png|jpeg|jpg|gif)$/, loader: ImageXHRLoader},
  ]);

   

Tutorial: Setup advanced

To take a small side step of the tutorial. A more common setup is to add a Data XHR Loader, Image XHR Loader and optionally a Sound Howler Loader. This configuration should be enough for most of the cases.

   

  // Import Loader package
  import { loader } from '@superherocheesecake/loader';

  // Import loader packages
  import DataXHRLoader from '@superherocheesecake/loaders-object-loader';
  import ImageXHRLoader from '@superherocheesecake/loaders-image-xhr-loader';
  import SoundHowlerLoader from '@superherocheesecake/loaders-howler-loader';

  // Set global rule set. 
  loader.use([
      {test: /\.json$/, loader: DataXHRLoader},
      {test: /\.(png|jpeg|jpg|gif)$/, loader: ImageXHRLoader},
      {test: /\.(ogg|mp3)$/, loader: SoundHowlerLoader},
  ]);

   

Tutorial: Loader

Let's continue with the actual tutorial, we've now set the configuration so we can create the loader and add resources. Since we don't define the Sound Howler Loader in the global ruleset we need to include it when we add the sound resources.

   

  import { loader } from '@superherocheesecake/loader';
  import ImageXHRLoader from '@superherocheesecake/loaders-image-xhr-loader';
  import SoundHowlerLoader from '@superherocheesecake/loaders-howler-loader';

  // Define global rules
  loader.use([
    {test: /\.(png|jpeg|jpg|gif)$/, loader: ImageXHRLoader},
  ]);

  // Load image resource, we don't need to pass the loader argument since it's set in global rule set. 
  loader.load({id: 'image', source: 'image.jpeg'}).addEventListener('loaded', function(resource) {});
  
  // Load sound resource, we need to pass the loader argument sincs it's not set in global rule set. 
  loader.load({id: 'sound', source: 'sound.mp3', loader: SoundHowlerLoader}).addEventListener('loaded', function(resource) {});

   

Tutorial: Queue

OK let's be honest this is pretty awesome right? But not really pratical because on most of the websites we want to load multiple resources at once on the start. But ofcourse we've thought about this as well, introducing the "queue" functionality. Let's see how that looks like in action.

   

  import loader, {QUEUE_STATE} from '@superherocheesecake/loader';
  import ImageXHRLoader from '@superherocheesecake/loaders-image-xhr-loader';
  import SoundHowlerLoader from '@superherocheesecake/loaders-howler-loader';

  // Define global rules
  loader.use([
    {test: /\.(png|jpeg|jpg|gif)$/, loader: ImageXHRLoader},
  ]);

  // Create a new Queue and pass resources
  const queue = loader.queue([
    {id: 'image', source: 'image.jpeg'},
    {id: 'image', source: 'image.jpeg'},
  ]);

  // Listen to queue state
  queue.addEventListener('stateChange', function(state) {
    switch (state) {
      case QUEUE_STATE.LOADING: {
        // Show preloader
        break;
      }
      case QUEUE_STATE.COMPLETED: {
        // Hide preloader
        // Start application
        break;
      }
    }
  });

  // Load queue
  queue.load();

   

API reference: Loader

(method) load(config)

Returns Resource instance

The loader is optional, if you have defined the loader already in the configuration the loader will use that loader. The loader option will overwrite the global loader config.

config (loader.load)

Name | Type | Required | Desc ------------- | ------------- | ------------- | ------------- id | String | true | The id that identifies the asset, should unique throughout the whole app. source | String | true | The entry point of the asset, a url to the to be resolved asset. loader | Loader (see loaders) | false | Loader that will be used to load the asset. If global config (rules) is set you don't need to specify this. Setting this will overwrite the global config (rules). options | Object | false | Optional object that will pass to the config of the loader.load method.

example (loader.load)

  import { loader } from '@superherocheesecake/loader';
  import ImageXHRLoader from '@superherocheesecake/loaders-image-xhr-loader';


  // Load resource
  loader.load({id: 'backgroundImage', source: 'server.com/background-image.ext', loader: ImageXHRLoader});

 

(method) get(config)

Returns Resource instance

Get resource by id.

config (loader.get)

Name | Type | Required | Desc ------------- | ------------- | ------------- | ------------- id | String | true | The id that identifies the asset.

example (loader.get)

  import { loader } from '@superherocheesecake/loader';
  import ImageXHRLoader from '@superherocheesecake/loaders-image-xhr-loader';
  
  loader.load({id: 'backgroundImage', source: 'server.com/background-image.ext', loader: ImageXHRLoader});

  // Get resource
  loader.get('backgroundImage');

 

(method) getResult(config)

Returns loader's response

Get resource result by id.

config (loader.getResult)

Name | Type | Required | Desc ------------- | ------------- | ------------- | ------------- id | String | true | The id that identifies the asset.

example (loader.getResult)

  import { loader } from '@superherocheesecake/loader';
  import ImageXHRLoader from '@superherocheesecake/loaders-image-xhr-loader';
  
  // Loader is a singleton
  loader.load({id: 'backgroundImage', source: 'server.com/background-image.ext', loader: ImageXHRLoader});

  // Get resource result
  loader.getResult('backgroundImage');

 

(method) queue([])

Returns Queue instance

Will create a queue instance (see Queue).

example (loader.queue)

  import { loader } from '@superherocheesecake/loader';
  import ImageXHRLoader from '@superherocheesecake/loaders-image-xhr-loader';


  // Create queue
  const queue = loader.queue([
    {id: 'backgroundImage', source: 'server.com/background-image.ext', loader: ImageXHRLoader}
    {id: 'backgroundImageTwo', source: 'server.com/background-image-two.ext', loader: ImageXHRLoader}
  ]);

 

(property) resources

The collection of resources added to the loader.

 

(property) rules

The collection of rules asigned to the loader.

   

Queue

(method) add

Returns Resource instance

Add resource to queue.

config (Queue.add)

Name | Type | Required | Desc ------------- | ------------- | ------------- | ------------- id | String | true | The id that identifies the asset, should unique throughout the whole app. source | String | true | The entry point of the asset, a url to the to be resolved asset. loader | Loader (see loaders) | false | Loader that will be used to load the asset. If global config (rules) is set you don't need to specify this. Setting this will overwrite the global config (rules). options | Object | false | Optional object that will pass to the config of the loader.load method.

example (Queue.add)

  import { loader } from '@superherocheesecake/loader';
  import ImageXHRLoader from '@superherocheesecake/loaders-image-xhr-loader';

  // Create queue
  const queue = loader.queue();
  
  // Add resource to queue pool manually
  queue.add({id: 'backgroundImage', source: 'server.com/background-image.ext', loader: ImageXHRLoader});

 

(method) load

Returns Queue instance

Loads all the resources added to the queue.

example (Queue.load)

  import { loader } from '@superherocheesecake/loader';
  import ImageXHRLoader from '@superherocheesecake/loaders-image-xhr-loader';

  // Create queue
  const queue = loader.queue([
    {id: 'backgroundImage', source: 'server.com/background-image.ext', loader: ImageXHRLoader}
    {id: 'backgroundImageTwo', source: 'server.com/background-image-two.ext', loader: ImageXHRLoader}
  ]);
  
  // Load queue
  queue.load();

 

(method) get

Returns Resource instance

Find a resource in the queue from id.

config (Queue.get)

Name | Type | Required | Desc ------------- | ------------- | ------------- | ------------- id | String | true | The id that identifies the asset.

example (Queue.get)

  import { loader } from '@superherocheesecake/loader';
  import ImageXHRLoader from '@superherocheesecake/loaders-image-xhr-loader';


  // Create queue
  const queue = loader.queue([
    {id: 'backgroundImage', source: 'server.com/background-image.ext', loader: ImageXHRLoader}
    {id: 'backgroundImageTwo', source: 'server.com/background-image-two.ext', loader: ImageXHRLoader}
  ]);

  // Load queue
  queue.load();

  // Get resource from queue
  queue.get('backgroundImage');

 

(method) getResult

Returns loader's response

Get resource by id from queue.

config (loader.getResult)

Name | Type | Required | Desc ------------- | ------------- | ------------- | ------------- id | String | true | The id that identifies the asset.

**example (loader.getResult) **

  import { loader } from '@superherocheesecake/loader';
  import ImageXHRLoader from '@superherocheesecake/loaders-image-xhr-loader';

  // Create queue
  const queue = loader.queue([
    {id: 'backgroundImage', source: 'server.com/background-image.ext', loader: ImageXHRLoader}
    {id: 'backgroundImageTwo', source: 'server.com/background-image-two.ext', loader: ImageXHRLoader}
  ]);

  // Load queue
  queue.load();

  // Get resource result from queue
  queue.getResult('backgroundImage');

 

(property) state

The state of the queue, values (compare with Loader.QUEUE_STATE):

Name | Value ------------- | ------------- INITIAL | 'Initial' LOADING | 'Loading' COMPLETED | 'Completed'

 

(property) progress

Value from 0.0 to 1.0, progress of amount of resources loaded in account of the total queue length.

 

(event) progress

Dispatches an event when the progress is updated.

 

(event) stateChange

Dispatches an event when the queue state changes.

 

(event) loading

Dispatches an event when the queue starts loading.

 

(event) completed

Dispatches an event when the queue completes loading.

   

Resource

(method) load

Returns Resource instance

Loads the resource.

example (Resource.load)

  import { loader } from '@superherocheesecake/loader';
  import ImageXHRLoader from '@superherocheesecake/loaders-image-xhr-loader';
  
  // Add resource
  const resource = loader.add({id: 'backgroundImage', source: 'server.com/background-image.ext', loader: ImageXHRLoader});

  // Load single resource
  resource.load();

 

(property) state

The state of the resource, values (compare with Loader.RESOURCE_STATE):

Name | Value ------------- | ------------- INITIAL | 'Initial' LOADING | 'Loading' LOADED | 'Loaded' FAILED | 'Failed'

 

(event) stateChange

Dispatches an event when the resource state changes.

 

(event) loading

Dispatches an event when the resource starts loading.

 

(event) loaded

Dispatches an event when the resource is loaded.

 

(event) failed

Dispatches an event when the resource has failed to load.

   

Loaders

   

Create loader

Loader Class

Name | Desc ------------- | ------------- onLoaded | (setter) The callback that needs to be executed when loaded (invoked from, Resource instance) onFailed | (setter) The callback that needs to be executed when failed to load (invoked from, Resource instance) isSupported | (method) Returns boolean, if false it will use the fallback loader. load | (method) Function that is invoked when the resource load is invoked.

example

  
  class LoaderName {

    set onLoaded(callback) {
      this._callbacks.onLoaded = callback;
    }
    set onFailed(callback) {
      this._callbacks.onFailed = callback;
    }

    constructor() {
      this._callbacks = {};
    }

    isSupported() {

      // Check if supported, return true if supported, false if not...
      return true;

    }

    load(source, options {}) {

        // Load code here ...

        // If loaded dispatch this.loaded();
        // If failed dispatch this.failed();

        this.loaded();

    }

    loaded() {
      if (this._callbacks.onLoaded) this._callbacks.onLoaded();
    }
    
    failed() {
      if (this._callbacks.onFailed) this._callbacks.onFailed();
    }

  }
  

   

##Build After updating the code you should run npm run build to make it es5 compatible.