"Fifty-eight percent of people put pets in family and holiday portraits.""More than 1 in 3 American families own a dog.""In Australia, a man who was arrested for drug possession argued his civil rights were violated when the drug-sniffing dog nuzzled his crotch. While the judge dismissed the charges, they were later reinstated when a prosecutor pointed out that in the animal kingdom, crotch nuzzling was a friendly gesture.""Is something wet? Unlike humans who sweat everywhere, dogs only sweat through the pads of their feet.""It’s been demonstrated that dogs can reduce both physical and emotional anxiety."
"Fifty-eight percent of people put pets in family and holiday portraits.""More than 1 in 3 American families own a dog.""In Australia, a man who was arrested for drug possession argued his civil rights were violated when the drug-sniffing dog nuzzled his crotch. While the judge dismissed the charges, they were later reinstated when a prosecutor pointed out that in the animal kingdom, crotch nuzzling was a friendly gesture.""Is something wet? Unlike humans who sweat everywhere, dogs only sweat through the pads of their feet.""It’s been demonstrated that dogs can reduce both physical and emotional anxiety."
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