From db3373d63f05ea3f14adbee523aa86d6ea7798e4 Mon Sep 17 00:00:00 2001 From: Vasily Strelyaev Date: Fri, 28 Jul 2023 17:09:59 +0200 Subject: [PATCH] fix: conditional type exports (T1177805) (#3661) * conditional type exports * Fix the filename regexp Co-authored-by: Timofey Traynenkov * typings copying now works for dx-react-grid-export * address Timpohey's remarks * refactor utils -> getPackageInfo --------- Co-authored-by: Timofey Traynenkov --- packages/dx-chart-core/package.json | 10 ++++++++-- packages/dx-core/package.json | 10 ++++++++-- packages/dx-grid-core/package.json | 10 ++++++++-- packages/dx-react-chart-bootstrap4/package.json | 10 ++++++++-- .../dx-react-chart-material-ui/package.json | 10 ++++++++-- packages/dx-react-chart/package.json | 10 ++++++++-- packages/dx-react-core/package.json | 10 ++++++++-- packages/dx-react-grid-bootstrap3/package.json | 10 ++++++++-- packages/dx-react-grid-bootstrap4/package.json | 10 ++++++++-- packages/dx-react-grid-export/merge-dts.js | 10 ++++++++-- packages/dx-react-grid-export/package.json | 10 ++++++++-- packages/dx-react-grid-material-ui/package.json | 10 ++++++++-- packages/dx-react-grid/package.json | 10 ++++++++-- .../dx-react-scheduler-material-ui/package.json | 10 ++++++++-- packages/dx-react-scheduler/package.json | 10 ++++++++-- packages/dx-scheduler-core/package.json | 10 ++++++++-- packages/dx-testing/package.json | 10 ++++++++-- scripts/merge-dts.js | 8 ++++++-- scripts/ts-generator.js | 10 ++++++---- scripts/utils.js | 17 +++++++++++++++++ 20 files changed, 165 insertions(+), 40 deletions(-) create mode 100644 scripts/utils.js diff --git a/packages/dx-chart-core/package.json b/packages/dx-chart-core/package.json index e1d573a1e1..377c67995d 100644 --- a/packages/dx-chart-core/package.json +++ b/packages/dx-chart-core/package.json @@ -17,8 +17,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-chart-core.umd.cjs", - "import": "./dist/dx-chart-core.es.js", + "require": { + "types": "./dist/dx-chart-core.d.cts", + "default": "./dist/dx-chart-core.umd.cjs" + }, + "import": { + "types": "./dist/dx-chart-core.d.ts", + "default": "./dist/dx-chart-core.es.js" + }, "default": "./dist/dx-chart-core.es.js" } }, diff --git a/packages/dx-core/package.json b/packages/dx-core/package.json index ebf8afa325..661bfde327 100644 --- a/packages/dx-core/package.json +++ b/packages/dx-core/package.json @@ -17,8 +17,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-core.umd.cjs", - "module": "./dist/dx-core.es.js", + "require": { + "types": "./dist/dx-core.d.cts", + "default": "./dist/dx-core.umd.cjs" + }, + "import": { + "types": "./dist/dx-core.d.ts", + "default": "./dist/dx-core.es.js" + }, "default": "./dist/dx-core.es.js" } }, diff --git a/packages/dx-grid-core/package.json b/packages/dx-grid-core/package.json index 513a6f63e3..00cde79f49 100644 --- a/packages/dx-grid-core/package.json +++ b/packages/dx-grid-core/package.json @@ -26,8 +26,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-grid-core.umd.cjs", - "import": "./dist/dx-grid-core.es.js", + "require": { + "types": "./dist/dx-grid-core.d.cts", + "default": "./dist/dx-grid-core.umd.cjs" + }, + "import": { + "types": "./dist/dx-grid-core.d.ts", + "default": "./dist/dx-grid-core.es.js" + }, "default": "./dist/dx-grid-core.es.js" } }, diff --git a/packages/dx-react-chart-bootstrap4/package.json b/packages/dx-react-chart-bootstrap4/package.json index 1656409c81..73f2b787f1 100644 --- a/packages/dx-react-chart-bootstrap4/package.json +++ b/packages/dx-react-chart-bootstrap4/package.json @@ -27,8 +27,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-react-chart-bootstrap4.umd.cjs", - "import": "./dist/dx-react-chart-bootstrap4.es.js", + "require": { + "types": "./dist/dx-react-chart-bootstrap4.d.cts", + "default": "./dist/dx-react-chart-bootstrap4.umd.cjs" + }, + "import": { + "types": "./dist/dx-react-chart-bootstrap4.d.ts", + "default": "./dist/dx-react-chart-bootstrap4.es.js" + }, "default": "./dist/dx-react-chart-bootstrap4.es.js" }, "./dist/dx-react-chart-bootstrap4.css": "./dist/dx-react-chart-bootstrap4.css" diff --git a/packages/dx-react-chart-material-ui/package.json b/packages/dx-react-chart-material-ui/package.json index 37d8c28d72..e1726b48e8 100644 --- a/packages/dx-react-chart-material-ui/package.json +++ b/packages/dx-react-chart-material-ui/package.json @@ -30,8 +30,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-react-chart-material-ui.cjs.cjs", - "import": "./dist/dx-react-chart-material-ui.es.js", + "require": { + "types": "./dist/dx-react-chart-material-ui.d.cts", + "default": "./dist/dx-react-chart-material-ui.cjs.cjs" + }, + "import": { + "types": "./dist/dx-react-chart-material-ui.d.ts", + "default": "./dist/dx-react-chart-material-ui.es.js" + }, "default": "./dist/dx-react-chart-material-ui.es.js" } }, diff --git a/packages/dx-react-chart/package.json b/packages/dx-react-chart/package.json index bd0177f70c..8ec164fffb 100644 --- a/packages/dx-react-chart/package.json +++ b/packages/dx-react-chart/package.json @@ -27,8 +27,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-react-chart.umd.cjs", - "import": "./dist/dx-react-chart.es.js", + "require": { + "types": "./dist/dx-react-chart.d.cts", + "default": "./dist/dx-react-chart.umd.cjs" + }, + "import": { + "types": "./dist/dx-react-chart.d.ts", + "default": "./dist/dx-react-chart.es.js" + }, "default": "./dist/dx-react-chart.es.js" } }, diff --git a/packages/dx-react-core/package.json b/packages/dx-react-core/package.json index 77fa21c704..85a49760f3 100644 --- a/packages/dx-react-core/package.json +++ b/packages/dx-react-core/package.json @@ -27,8 +27,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-react-core.umd.cjs", - "import": "./dist/dx-react-core.es.js", + "require": { + "types": "./dist/dx-react-core.d.cts", + "default": "./dist/dx-react-core.umd.cjs" + }, + "import": { + "types": "./dist/dx-react-core.d.ts", + "default": "./dist/dx-react-core.es.js" + }, "default": "./dist/dx-react-core.es.js" } }, diff --git a/packages/dx-react-grid-bootstrap3/package.json b/packages/dx-react-grid-bootstrap3/package.json index b13cec7cc5..22686be93e 100644 --- a/packages/dx-react-grid-bootstrap3/package.json +++ b/packages/dx-react-grid-bootstrap3/package.json @@ -29,8 +29,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-react-grid-bootstrap3.umd.cjs", - "import": "./dist/dx-react-grid-bootstrap3.es.js", + "require": { + "types": "./dist/dx-react-grid-bootstrap3.d.cts", + "default": "./dist/dx-react-grid-bootstrap3.umd.cjs" + }, + "import": { + "types": "./dist/dx-react-grid-bootstrap3.d.ts", + "default": "./dist/dx-react-grid-bootstrap3.es.js" + }, "default": "./dist/dx-react-grid-bootstrap3.es.js" } }, diff --git a/packages/dx-react-grid-bootstrap4/package.json b/packages/dx-react-grid-bootstrap4/package.json index 1a354238e5..48b35d9c8d 100644 --- a/packages/dx-react-grid-bootstrap4/package.json +++ b/packages/dx-react-grid-bootstrap4/package.json @@ -29,8 +29,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-react-grid-bootstrap4.umd.cjs", - "import": "./dist/dx-react-grid-bootstrap4.es.js", + "require": { + "types": "./dist/dx-react-grid-bootstrap4.d.cts", + "default": "./dist/dx-react-grid-bootstrap4.umd.cjs" + }, + "import": { + "types": "./dist/dx-react-grid-bootstrap4.d.ts", + "default": "./dist/dx-react-grid-bootstrap4.es.js" + }, "default": "./dist/dx-react-grid-bootstrap4.es.js" }, "./dist/dx-react-grid-bootstrap4.css": "./dist/dx-react-grid-bootstrap4.css" diff --git a/packages/dx-react-grid-export/merge-dts.js b/packages/dx-react-grid-export/merge-dts.js index f5b2b09063..b5e6590702 100644 --- a/packages/dx-react-grid-export/merge-dts.js +++ b/packages/dx-react-grid-export/merge-dts.js @@ -1,6 +1,12 @@ import { fileURLToPath } from 'url'; -import { dirname } from 'path'; +import { dirname, join } from 'path'; import buildDefinitions from '../../scripts/merge-dts.js'; +import { copyCommonJsTypes, getPackageInfo } from '../../scripts/utils.js'; -buildDefinitions(dirname(fileURLToPath(import.meta.url)), true); +const packageDirectory = dirname(fileURLToPath(import.meta.url)); +const pkg = getPackageInfo(packageDirectory); +const dtsOutFile = join(packageDirectory, pkg.types); + +buildDefinitions(packageDirectory, true); +copyCommonJsTypes(dtsOutFile); diff --git a/packages/dx-react-grid-export/package.json b/packages/dx-react-grid-export/package.json index f6b1dd0263..cdb6dfd54e 100644 --- a/packages/dx-react-grid-export/package.json +++ b/packages/dx-react-grid-export/package.json @@ -29,8 +29,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-react-grid-export.umd.cjs", - "import": "./dist/dx-react-grid-export.es.js", + "require": { + "types": "./dist/dx-react-grid-export.d.cts", + "default": "./dist/dx-react-grid-export.umd.cjs" + }, + "import": { + "types": "./dist/dx-react-grid-export.d.ts", + "default": "./dist/dx-react-grid-export.es.js" + }, "default": "./dist/dx-react-grid-export.es.js" } }, diff --git a/packages/dx-react-grid-material-ui/package.json b/packages/dx-react-grid-material-ui/package.json index 93109ceb73..78d89c7608 100644 --- a/packages/dx-react-grid-material-ui/package.json +++ b/packages/dx-react-grid-material-ui/package.json @@ -30,8 +30,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-react-grid-material-ui.cjs.cjs", - "import": "./dist/dx-react-grid-material-ui.es.js", + "require": { + "types": "./dist/dx-react-grid-material-ui.d.cts", + "default": "./dist/dx-react-grid-material-ui.cjs.cjs" + }, + "import": { + "types": "./dist/dx-react-grid-material-ui.d.ts", + "default": "./dist/dx-react-grid-material-ui.es.js" + }, "default": "./dist/dx-react-grid-material-ui.es.js" } }, diff --git a/packages/dx-react-grid/package.json b/packages/dx-react-grid/package.json index fc3aa08c6f..ca0a1827b9 100644 --- a/packages/dx-react-grid/package.json +++ b/packages/dx-react-grid/package.json @@ -28,8 +28,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-react-grid.umd.cjs", - "import": "./dist/dx-react-grid.es.js", + "require": { + "types": "./dist/dx-react-grid.d.cts", + "default": "./dist/dx-react-grid.umd.cjs" + }, + "import": { + "types": "./dist/dx-react-grid.d.ts", + "default": "./dist/dx-react-grid.es.js" + }, "default": "./dist/dx-react-grid.es.js" } }, diff --git a/packages/dx-react-scheduler-material-ui/package.json b/packages/dx-react-scheduler-material-ui/package.json index 7e25e94179..e12826544a 100644 --- a/packages/dx-react-scheduler-material-ui/package.json +++ b/packages/dx-react-scheduler-material-ui/package.json @@ -28,8 +28,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-react-scheduler-material-ui.cjs.cjs", - "import": "./dist/dx-react-scheduler-material-ui.es.js", + "require": { + "types": "./dist/dx-react-scheduler-material-ui.d.cts", + "default": "./dist/dx-react-scheduler-material-ui.cjs.cjs" + }, + "import": { + "types": "./dist/dx-react-scheduler-material-ui.d.ts", + "default": "./dist/dx-react-scheduler-material-ui.es.js" + }, "default": "./dist/dx-react-scheduler-material-ui.es.js" } }, diff --git a/packages/dx-react-scheduler/package.json b/packages/dx-react-scheduler/package.json index bdea11c442..0245bcf3bb 100644 --- a/packages/dx-react-scheduler/package.json +++ b/packages/dx-react-scheduler/package.json @@ -26,8 +26,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-react-scheduler.umd.cjs", - "import": "./dist/dx-react-scheduler.es.js", + "require": { + "types": "./dist/dx-react-scheduler.d.cts", + "default": "./dist/dx-react-scheduler.umd.cjs" + }, + "import": { + "types": "./dist/dx-react-scheduler.d.ts", + "default": "./dist/dx-react-scheduler.es.js" + }, "default": "./dist/dx-react-scheduler.es.js" } }, diff --git a/packages/dx-scheduler-core/package.json b/packages/dx-scheduler-core/package.json index bf3696683e..2dec821235 100644 --- a/packages/dx-scheduler-core/package.json +++ b/packages/dx-scheduler-core/package.json @@ -25,8 +25,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-scheduler-core.umd.cjs", - "import": "./dist/dx-scheduler-core.es.js", + "require": { + "types": "./dist/dx-scheduler-core.d.cts", + "default": "./dist/dx-scheduler-core.umd.cjs" + }, + "import": { + "types": "./dist/dx-scheduler-core.d.ts", + "default": "./dist/dx-scheduler-core.es.js" + }, "default": "./dist/dx-scheduler-core.es.js" } }, diff --git a/packages/dx-testing/package.json b/packages/dx-testing/package.json index 07dba57b06..8a8998ab6e 100644 --- a/packages/dx-testing/package.json +++ b/packages/dx-testing/package.json @@ -11,8 +11,14 @@ "type": "module", "exports": { ".": { - "require": "./dist/dx-testing.umd.js", - "import": "./dist/dx-testing.es.js", + "require": { + "types": "./dist/dx-testing.d.cts", + "default": "./dist/dx-testing.umd.js" + }, + "import": { + "types": "./dist/dx-testing.d.ts", + "default": "./dist/dx-testing.es.js" + }, "default": "./dist/dx-testing.es.js" } }, diff --git a/scripts/merge-dts.js b/scripts/merge-dts.js index f68f01795d..01b70ef448 100644 --- a/scripts/merge-dts.js +++ b/scripts/merge-dts.js @@ -1,9 +1,11 @@ import { join, sep } from 'path'; -import { readFileSync, existsSync } from 'fs'; +import { existsSync } from 'fs'; import rimraf from 'rimraf'; import replace from 'replace-in-file'; import dts from 'dts-bundle'; +import { copyCommonJsTypes, getPackageInfo } from './utils.js'; + const getIndexDts = (packageDirectory, dtsPath) => { let indexDts = join(dtsPath, 'index.d.ts'); @@ -19,7 +21,7 @@ export default (packageDirectory, skipBundle = false) => { const dtsPath = join(packageDirectory, 'dist', 'dts'); if (!skipBundle) { - const pkg = JSON.parse(readFileSync(join(packageDirectory, 'package.json'))); + const pkg = getPackageInfo(packageDirectory); const dtsOutFile = join(packageDirectory, pkg.types); const indexDts = getIndexDts(packageDirectory, dtsPath); @@ -37,6 +39,8 @@ export default (packageDirectory, skipBundle = false) => { outputAsModuleFolder: true, headerPath: 'none', }); + + copyCommonJsTypes(dtsOutFile); } rimraf(dtsPath, () => {}); diff --git a/scripts/ts-generator.js b/scripts/ts-generator.js index f09e1ad356..a738c15437 100644 --- a/scripts/ts-generator.js +++ b/scripts/ts-generator.js @@ -7,6 +7,7 @@ import { } from 'fs'; import { join } from 'path'; +import { copyCommonJsTypes } from './utils.js'; const ROOT_PATH = join(process.cwd(), 'packages'); const SOURCE_FOLDER = 'docs/reference'; @@ -345,10 +346,11 @@ const generateTypeScriptForPackage = (packageName) => { console.log(`Building TypeScript definitions for '${packageName}-${theme}'.`); const themeDistFolder = join(ROOT_PATH, `${packageName}-${theme}`, TARGET_FOLDER); ensureDirectory(themeDistFolder); - writeFileSync( - join(themeDistFolder, `${packageName}-${theme}.d.ts`), - themesIndexContent, - ); + + const dtsOutFile = join(themeDistFolder, `${packageName}-${theme}.d.ts`); + + writeFileSync(dtsOutFile, themesIndexContent); + copyCommonJsTypes(dtsOutFile); }); }; diff --git a/scripts/utils.js b/scripts/utils.js new file mode 100644 index 0000000000..ef328046ba --- /dev/null +++ b/scripts/utils.js @@ -0,0 +1,17 @@ +import { existsSync, copyFileSync, readFileSync } from 'fs'; +import { join } from 'path'; + +const getCommonJsTypesPath = dtsPath => dtsPath.replace(/\.ts$/, '.cts'); + +export const copyCommonJsTypes = (dtsPath) => { + if (existsSync(dtsPath)) { + copyFileSync(dtsPath, getCommonJsTypesPath(dtsPath)); + } +}; + +export const getPackageInfo = (packageDir) => { + const packagePath = join(packageDir, 'package.json'); + const packageData = readFileSync(packagePath); + + return JSON.parse(packageData); +};