I’ve been asked to gradually add TypeScript type definitions for an existing package written in JavaScript and owned by us. It is built with rollup.
The library is organised as follows:
MyLib
|----/backend
| |----index.js
| |----index.js.map
|
|----/frontend
| |----index.js
| |----index.js.map
|
|----/lib
| |----index.js
| |----index.js.map
|
|----/src
| |----index.js
| |----common.js
| |----be.js
| |----fe.js
| |----/components
| | |----ComponentA.js
| |----/services
| | |----/nestErrorExceptions
| | | |----index.js
| | | |----ResultNotFoundException.js
| | |----/slugify
| | | |----index.js
|
|----package.json
|
|----rollup.config.js
|
|----etc...
// src/index.js
module.exports = {
...(process.env.PLATFORM === 'BACKEND'
? require('../backend')
: process.env.PLATFORM === 'FRONTEND' ? require('../frontend') : {})
}
// src/common.js
import slugify from './services/slugify'
export default {
slugify,
}
// src/be.js
import common from './common'
import NestErrorExceptions from './services/nestErrorExceptions'
export default {
...common,
NestErrorExceptions,
}
// src/fe.js
import common from './common'
import ComponentA from './components/ComponentA'
export default {
...common,
ComponentA,
}
It is built with the following rollup config:
// rollup.config.js
import resolve from '@rollup/plugin-node-resolve'
import commonjs from '@rollup/plugin-commonjs'
import json from '@rollup/plugin-json'
import { babel } from '@rollup/plugin-babel'
import { terser } from 'rollup-plugin-terser'
import pkg from './package.json'
export default [
{
input: 'src/fe.js',
output: {
name: 'my-lib-fe',
dir: 'frontend',
entryFileNames: 'index.js',
format: 'umd',
sourcemap: true
},
plugins: [
resolve(),
json(),
babel({ babelHelpers: 'bundled', exclude: 'node_modules/**' }),
commonjs(),
terser()
]
},
{
input: 'src/be.js',
output: {
dir: 'backend',
entryFileNames: 'index.js',
format: 'cjs',
exports: 'default',
sourcemap: true
},
plugins: [
// resolve(), // not to resolve nestjs
json(),
babel({ babelHelpers: 'bundled', exclude: 'node_modules/**' }),
commonjs(),
terser()
]
},
{
input: 'src/index.js',
output: {
name: 'my-lib',
dir: pkg.main, // 'lib'
format: 'cjs',
sourcemap: true
},
plugins: [
json(),
babel({ babelHelpers: 'bundled', exclude: 'node_modules/**' }),
terser()
]
},
]
I’ve written some .d.ts
files along side, such as src/services/nestErrorExceptions/ResultNotFoundException.d.ts
MyLib
|----/backend
| |----index.js
| |----index.js.map
|
|----/frontend
| |----index.js
| |----index.js.map
|
|----/lib
| |----index.js
| |----index.js.map
|
|----/src
| |----index.js
| |----common.js
| |----be.js
| |----fe.js
| |----/components
| | |----ComponentA.js
| |----/services
| | |----/nestErrorExceptions
| | | |----index.js
| | | |----ResultNotFoundException.js
| | | |----ResultNotFoundException.d.ts
| | |----/slugify
| | | |----index.js
|
|----package.json
|
|----rollup.config.js
|
|----etc...
// src/services/nestErrorExceptions/ResultNotFoundException.d.ts
import { HttpException } from '@nestjs/common'
export declare class ResultNotFoundException extends HttpException {
constructor(location: string, err: unknown)
}
Now how can I configure rollup (or some plugin) to take those definitions and bring them (eventually merged?) into the lib
/ backend
/ frontend
directory?