pkg-dts.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. const path = require('path')
  2. const bundleDts = require('@arshaw/dts-bundle').bundle
  3. const { pkgStructs } = require('./pkg-struct')
  4. exports.bundlPkgDefs = bundlPkgDefs
  5. /*
  6. Assumes granular .d.ts files have already been generated
  7. */
  8. function bundlPkgDefs() {
  9. for (let pkgStruct of pkgStructs) {
  10. bundlePkgDef(pkgStruct)
  11. }
  12. return Promise.resolve() // need to return a promise even tho bundlePkgDef is synchronous
  13. }
  14. function bundlePkgDef(pkgStruct) {
  15. bundleDts({ // synchronous
  16. name: pkgStruct.name,
  17. main: path.join('tmp/tsc-output', pkgStruct.srcDir, 'main.d.ts'),
  18. transformModuleBody: transformDefaultClassExports,
  19. out: path.join(process.cwd(), pkgStruct.distDir, 'main.d.ts') // needs to be absolute, or becomes rel to entry
  20. })
  21. }
  22. // changes the name of the default export to `Default` and exports it as a *named* export.
  23. // this allows ambient declaration merging to grab onto it.
  24. // workaround for https://github.com/Microsoft/TypeScript/issues/14080
  25. function transformDefaultClassExports(moduleBody) {
  26. return moduleBody.replace(/^(\s*)export default (abstract )?class ([\w]+)/mg, function(m0, m1, m2, m3) {
  27. return m1 + 'export { ' + m3 + ' as default, ' + m3 + ' };\n' +
  28. m1 + (m2 || '') + 'class ' + m3
  29. })
  30. }