Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/timocov/dts-bundle-generator
A tool to generate a single bundle of dts with types tree-shaking
https://github.com/timocov/dts-bundle-generator
bundle definition dts typescript typescript-definitions
Last synced: 9 days ago
JSON representation
A tool to generate a single bundle of dts with types tree-shaking
- Host: GitHub
- URL: https://github.com/timocov/dts-bundle-generator
- Owner: timocov
- License: mit
- Created: 2017-03-15T11:35:29.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-08-27T21:19:51.000Z (3 months ago)
- Last Synced: 2024-10-29T22:23:39.949Z (13 days ago)
- Topics: bundle, definition, dts, typescript, typescript-definitions
- Language: TypeScript
- Homepage:
- Size: 709 KB
- Stars: 760
- Watchers: 6
- Forks: 39
- Open Issues: 20
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- awesome-list - dts-bundle-generator
README
# DTS Bundle Generator
[![GH Actions][ci-img]][ci-link]
[![npm version][npm-version-img]][npm-link]
[![Downloads][npm-downloads-img]][npm-link]Small tool to generate a dts bundle from your ts code.
For example:
```ts
// a.ts
export class A {}
``````ts
// b.ts
export class B {}
``````ts
// entry.ts
import { A } from './a';
import { B } from './b';declare function makeA(): A;
export function makeB(): B {
makeA();
return new B();
}
```When you run `dts-bundle-generator -o my.d.ts entry.ts` in `my.d.ts` you will get the following:
```ts
declare class B {
}
export declare function makeB(): B;
```## Installation
1. Install the package from `npm`:
```bash
npm install --save-dev dts-bundle-generator
```or
```bash
npm install -g dts-bundle-generator
```1. Enable `declaration` compiler option in `tsconfig.json`
## Usage
```
Usage: dts-bundle-generator [options]Options:
--help Show help [boolean]
--out-file, -o File name of generated d.ts [string]
--verbose Enable verbose logging [boolean] [default: false]
--silent Disable any logging except errors [boolean] [default: false]
--no-check Skip validation of generated d.ts file [boolean] [default: false]
--fail-on-class Fail if generated dts contains class declaration
[boolean] [default: false]
--external-inlines Array of package names from node_modules to inline typings from.
Used types will be inlined into the output file [array]
--external-imports Array of package names from node_modules to import typings from.
Used types will be imported using "import { First, Second } from
'library-name';".
By default all libraries will be imported (except inlined libraries
and libraries from @types) [array]
--external-types Array of package names from @types to import typings from via the
triple-slash reference directive.
By default all packages are allowed and will be used according to
their usages [array]
--umd-module-name Name of the UMD module. If specified then `export as namespace
ModuleName;` will be emitted [string]
--project Path to the tsconfig.json file that will be used for the
compilation [string]
--sort Sort output nodes [boolean] [default: false]
--inline-declare-global Enables inlining of `declare global` statements contained in files
which should be inlined (all local files and packages from
`--external-inlines`) [boolean] [default: false]
--inline-declare-externals Enables inlining of `declare module` statements of the global
modules (e.g. `declare module 'external-module' {}`, but NOT
`declare module './internal-module' {}`) contained in files which
should be inlined (all local files and packages from inlined
libraries) [boolean] [default: false]
--disable-symlinks-following (EXPERIMENTAL) Disables resolving of symlinks to the original path.
See https://github.com/timocov/dts-bundle-generator/issues/39 for
more information [boolean] [default: false]
--respect-preserve-const-enum Enables stripping the `const` keyword from every direct-exported
(or re-exported) from entry file `const enum`. See
https://github.com/timocov/dts-bundle-generator/issues/110 for more
information [boolean] [default: false]
--export-referenced-types By default all interfaces, types and const enums are marked as
exported even if they aren't exported directly. This option allows
you to disable this behavior so a node will be exported if it is
exported from root source file only. [boolean] [default: true]
--config File path to the generator config file [string]
--no-banner Allows remove "Generated by dts-bundle-generator" comment from the
output [boolean] [default: false]
--version Show version number [boolean]
```### Examples
To generate a dts bundle for a single entry file:
```bash
./node_modules/.bin/dts-bundle-generator -o my.d.ts path/to/your/entry-file.ts
```To generate a dts bundle for multiple entry files:
```bash
./node_modules/.bin/dts-bundle-generator path/to/your/entry-file.ts path/to/your/entry-file-2.ts
```To generate a dts bundle for a single entry file with external inlines and imports:
```bash
./node_modules/.bin/dts-bundle-generator \
--external-inlines=@mycompany/internal-project \
--external-imports=@angular/core rxjs \
-- path/to/your/entry-file.ts
```> [!NOTE]
> Note that, as in the above example, the arguments accepting arrays (like `--external-inlines` or `--external-imports`) accept multiple values separated by spaces. Since the input file(s) are positional arguments, you need to put the `--` separator before it when it is preceded by an argument that accepts multiple values. Otherwise you will get an error (`Error: No input files specified`).To generate a dts bundle for a single entry file with external types:
```bash
./node_modules/.bin/dts-bundle-generator --external-types=jquery path/to/your/entry-file.ts
```## Config file
It is unnecessary, but you can use config file for the tool. See [config documentation](src/config-file/README.md) for more information.
## Why
If you have modules then you can create definitions by default using `tsc`, but `tsc` generates them for each module separately.
Yeah, you can use `outFile` (for `amd` and `system`), but generated code looks like this:```ts
declare module "a" {
export class A {
}
}
declare module "b" {
export class B {
}
}
declare module "entry" {
import { B } from "b";
export function makeB(): B;
}
```but:
1. `A` is not used at all and most probably you do not want to export it.
1. If you bundle your code in a way when all modules are merged (like when using Webpack or Rollup) then there should be no such modules as `a` or `b` (actually `entry` too) in the resulting file.[ci-img]: https://github.com/timocov/dts-bundle-generator/workflows/CI%20Test/badge.svg?branch=master
[ci-link]: https://github.com/timocov/dts-bundle-generator/actions?query=branch%3Amaster[npm-version-img]: https://badge.fury.io/js/dts-bundle-generator.svg
[npm-downloads-img]: https://img.shields.io/npm/dm/dts-bundle-generator.svg
[npm-link]: https://www.npmjs.com/package/dts-bundle-generator