@nuintun/bundler
    TypeScript icon, indicating that this package has built-in type declarations

    3.0.2 • Public • Published

    bundler

    An async file dependency bundle parser

    NPM Version Node Version Dependencies

    API

    new Bundler(options: Options) => Bundler

    options?.oncycle: (path: string, referrer: string) => void

    found circularly dependency callback function

    options.resolve(path: string, referrer: string) => string

    path resolve function

    options.parse(path: string) => { contents?: any, dependencies?: string[] }

    file dependencies parse function, support async function

    new Bundler(options: Options).parse(input: string) => Promise<File[]>

    input: string

    path of input file

    Examples

    const Bundler = require('@nuintun/bundler');
    
    const files = {
      '/src/1.js': { contents: 'file 1', dependencies: ['2.js', '4.js'] },
      '/src/2.js': { contents: 'file 2', dependencies: ['./3.js', './5.js'] },
      '/src/3.js': { contents: 'file 3', dependencies: ['/src/4.js', '/src/6.js'] },
      '/src/4.js': { contents: 'file 4', dependencies: ['5.js', './7.js'] },
      '/src/5.js': { contents: 'file 5', dependencies: ['6.js', '/src/8.js'] },
      '/src/6.js': { contents: 'file 6', dependencies: ['./7.js', '/src/9.js'] },
      '/src/7.js': { contents: 'file 7', dependencies: ['8.js'] },
      '/src/8.js': { contents: 'file 8', dependencies: ['./9.js'] },
      '/src/9.js': { contents: 'file 9', dependencies: [] }
    };
    
    const bunder = new Bundler({
      resolve: (path, referrer) => {
        if (/^\//.test(path)) return path;
    
        const dirname = referrer.replace(/\/[^\/]+$/, '');
    
        return `${dirname}/${path}`.replace(/(\.\/)+/g, '');
      },
      parse: path => {
        return new Promise(resolve => {
          const delay = 20;
    
          setTimeout(() => resolve(files[path]), delay);
    
          console.log(`Read: %o, Waiting: %oms`, path, delay);
        });
      }
    });
    
    async function parse(input) {
      try {
        console.log(await bunder.parse(input));
      } catch (error) {
        console.error(error);
      }
    }
    
    parse('/src/1.js');
    
    // Output: [
    //  {
    //    path: '/src/9.js',
    //    contents: 'file 9',
    //    dependencies: []
    //  },
    //  {
    //    path: '/src/8.js',
    //    contents: 'file 8',
    //    dependencies: ['./9.js']
    //  },
    //  {
    //    path: '/src/7.js',
    //    contents: 'file 7',
    //    dependencies: ['8.js']
    //  },
    //  {
    //    path: '/src/6.js',
    //    contents: 'file 6',
    //    dependencies: ['./7.js', '/src/9.js']
    //  },
    //  {
    //    path: '/src/5.js',
    //    contents: 'file 5',
    //    dependencies: ['6.js', '/src/8.js']
    //  },
    //  {
    //    path: '/src/4.js',
    //    contents: 'file 4',
    //    dependencies: ['5.js', './7.js']
    //  },
    //  {
    //    path: '/src/3.js',
    //    contents: 'file 3',
    //    dependencies: ['/src/4.js', '/src/6.js']
    //  },
    //  {
    //    path: '/src/2.js',
    //    contents: 'file 2',
    //    dependencies: ['./3.js', './5.js']
    //  },
    //  {
    //    path: '/src/1.js',
    //    contents: 'file 1',
    //    dependencies: ['2.js', '4.js']
    //  }
    //]

    Keywords

    Install

    npm i @nuintun/bundler

    DownloadsWeekly Downloads

    0

    Version

    3.0.2

    License

    MIT

    Unpacked Size

    10.8 kB

    Total Files

    5

    Last publish

    Collaborators

    • nuintun