"Search and Rescue dog training begin as games played while puppies.""Rin Tin Tin was the first Hollywood dog star and he really signed his movie contracts – all 22 of them – with a paw-print.""There is a dog-shaped building in New Zealand.""During the Renaissance, detailed portraits of the dog as a symbol of fidelity and loyalty appeared in mythological, allegorical, and religious art throughout Europe, including works by Leonardo da Vinci, Diego Velázquez, Jan van Eyck, and Albrecht Durer.""The best age to bring a puppy home is 8 to 12 weeks."
"Search and Rescue dog training begin as games played while puppies.""Rin Tin Tin was the first Hollywood dog star and he really signed his movie contracts – all 22 of them – with a paw-print.""There is a dog-shaped building in New Zealand.""During the Renaissance, detailed portraits of the dog as a symbol of fidelity and loyalty appeared in mythological, allegorical, and religious art throughout Europe, including works by Leonardo da Vinci, Diego Velázquez, Jan van Eyck, and Albrecht Durer.""The best age to bring a puppy home is 8 to 12 weeks."
Home>Projects>

ts-bundler

Library for bundling typescript files.

TS-BUNDLER

TS-Bundler

This is a (super) lightweight typescript bundle library, which I created for my build tool @puresamari/spb since webpack creates way too much overhead.

Installation

npm i[nstall] [--save[-dev]|-D|-S] @puresamari/ts-bundler

Usage

import { TypescriptBundler } from '@puresamari/ts-bundler';

...

// Create the bundler with the file as attribute (file has to be an absolute path)
const bundler = new TypescriptBundler(file);

The bundlers observe method returns a rxjs observable that contains the following values:

interface {
  output: string,
  map: Map<string, {
    content: string;
    node_module: boolean;
    file: string;
    absolutePath: string;
  }>
}

The observe method takes 2 oparameters:

Example use cases

(To run these please first create a bundler instance like above.)

The examples compile file into test.export.js.

Bundle the module:

import fs from 'fs';

const result = bundler.observe().subscribe(({ output }) => {
  fs.writeFileSync(path.resolve(__dirname, 'test.export.js'), v.output);
});

The same but with file watching and module replacement:

import fs from 'fs';

const result = bundler.observe().subscribe(({ output }) => {
  fs.writeFileSync(path.resolve(__dirname, 'test.export.js'), v.output);
});

bundler.observe(false, true).subscribe(v => {
  v.map.forEach((v, _module) => {
    if (!v?.file || v.node_module) { return; }
    fs.watchFile(v.absolutePath, () => {
      bundler.refreshModule(_module);
    })
  })
});

Bundle once using await:

import fs from 'fs';

fs.writeFileSync(path.resolve(__dirname, 'test.export.js'), await bundle.bundle().output);

Bundle once using promise:

import fs from 'fs';

bundle.bundle().then(({ output }) => fs.writeFileSync(path.resolve(__dirname, 'test.export.js'), output);

Footer