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

@such-code/content-url-loader

v1.1.1

Published

Specific webpack loader to convert received data to url to emitted data or in-lined content.

Downloads

5

Readme

@such-code/content-url-loader

A very specific loader which works similar to url-loader but has different default behaviour and more settings.

Installation

npm i -D @such-code/content-url-loader

Options

/**
 * Type definition for loader options.
 */
export declare type ContentUrlLoaderOptions = {
    /**
     * Return commonjs or es6 module (commonjs by default).
     */
    esModule?: boolean;
    /**
     * Maximal content size to be loaded as content.
     */
    maxSize?: number;
    /**
     * Name of the resource is loaded as an URL.
     */
    name?: string;
    /**
     * Additional name regexp to be referenced in name.
     */
    nameRegExp?: RegExp;
    /**
     * Optional function to force load either as URL or as a content. `true` to load as URL, `false` for content loading
     * `null` for auto mode.
     */
    loadAsUrl?: (($target: string, $resource: string, $context: string, $query: string) => (boolean | null));
    /**
     * Optional function or string to wrap emitted URL. If string is provided, `{{url}}` parameter will be replaced in
     * it. Ex. `<img src="{{url}}">` will return HTML element. Function MUST return valid JS code that will be evaluated
     * at runtime. Function argument is a value with JSON.stringify() applied to it.
     */
    urlWrapper?: string | (($content: string, $resource: string, $context: string, $query: string) => string);
    /**
     * Optional function or string to wrap content. String should contain `{{content}}` which will be replaced. Ex
     * `<span>{{content}}</span>` will return HTML element with a content. Function MUST return valid JS code that will
     * be evaluated.
     */
    contentWrapper?: string | (($content: string, $resource: string, $context: string, $query: string) => string);
    /**
     * Custom path when resource is treated as an URL.
     */
    outputPath?: string | (($target: string, $resource: string, $context: string) => string);
    /**
     * Custom public path for resource when loaded as an URL.
     */
    publicPath?: string | (($target: string, $resource: string, $context: string) => string);
    /**
     * Serialization method. By default content smaller than maxSize will be serialized to string with utf-8 encoding.
     * This behaviour could be overwritten by setting `serialize` param.
     */
    serialize?: 'string' | 'base64' | (($content: Buffer) => string);
};

Example configurations

In this example SVG image will be loaded as <svg> content or <img> with src emitted as separate file.

/** @typedef { import(webpack/declarations/WebpackOptions).WebpackOptions } WebpackOptions */
/** @typedef { import(@such-code/content-url-loader).ContentUrlLoaderOptions } ContentUrlLoaderOptions */

/** @type WebpackOptions */
module.exports = {
    ...otherOptions,
    module: {
        rules: [
            {
                test: /\.svg(\?.*)?$/i,
                use: {
                    loader: '@such-code/content-html-loader',
                    /** @type ContentUrlLoaderOptions */
                    options: {
                        // Less then 5Kb will be loaded as content,
                        maxSize: 5 * 1024,
                        // Anything greater then maxSize will be loaded as url wrapped in <img> tag.
                        urlWrapper: '<img src="{{ url }}">',
                    }
                }
            }
        ]
    }
}

This configuration converts html file resource to two possible objects { template: <file content> } or { templateUrl: <link to emitted resource> }.

/** @typedef { import(webpack/declarations/WebpackOptions).WebpackOptions } WebpackOptions */
/** @typedef { import(@such-code/content-url-loader).ContentUrlLoaderOptions } ContentUrlLoaderOptions */

/** @type WebpackOptions */
module.exports = {
    ...otherOptions,
    module: {
        rules: [
            {
                test: /\.html(\?.*)?$/i,
                use: {
                    loader: '@such-code/content-html-loader',
                    /** @type ContentUrlLoaderOptions */
                    options: {
                        // Less then 10Kb will be loaded as content wrapped as { template: string }.
                        maxSize: 10 * 1024,
                        contentWrapper: $ => '{ "template": ' + $ + '}',
                        // Anything greater then maxSize will be loaded as url wrapped as { templateUrl: string }.
                        urlWrapper: $ => '{ "templateUrl": ' + $ + '}',
                    }
                }
            }
        ]
    }
}