Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support ES module #3595

Merged
merged 16 commits into from
Nov 21, 2022
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 2 additions & 1 deletion .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
],
"rules": {
"arrow-parens": [2, "as-needed", { "requireForBlockBody": true }],
"import/prefer-default-export": "off"
"import/prefer-default-export": "off",
"import/extensions": "off"
}
}
9 changes: 7 additions & 2 deletions babel.config.js → babel.config.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
module.exports = {
{
"presets": [
[ "@babel/preset-env", { "modules": false, "targets": { "browsers": ["last 2 versions"] } } ],
[
"@babel/preset-env",
{
"targets": { "node": "current" }
}
],
"@babel/preset-react"
],
"plugins": [
Expand Down
9 changes: 4 additions & 5 deletions gulpfile.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
var gulp = require('gulp'),
runSequence = require("run-sequence"),
clean = require('gulp-clean'),
rename = require('gulp-rename'),
intercept = require('gulp-intercept');
import gulp from 'gulp';
import clean from 'gulp-clean';
import rename from 'gulp-rename';
import intercept from 'gulp-intercept';

var distPath = 'site/';
var versionTag = process.env.VERSION_TAG;
Expand Down
6 changes: 3 additions & 3 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module.exports = {
export default {
projects: [
'packages/dx-chart-core/',
'packages/dx-core/jest.config.js',
Expand All @@ -21,5 +21,5 @@ module.exports = {
'packages/dx-vue-grid/jest.config.js',
'packages/dx-vue-grid-bootstrap4/jest.config.js',
'packages/dx-vue-grid-demos/jest.config.js',
]
}
],
};
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"type": "git",
"url": "git+https://github.com/DevExpress/devextreme-reactive.git"
},
"type": "module",
"license": "SEE LICENSE IN README.md",
"devDependencies": {
"@microsoft/api-extractor": "7.20.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/dx-chart-core/jest.config.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module.exports = {
export default {
preset: 'ts-jest',
testEnvironment: 'jsdom',
transform: {
Expand Down
7 changes: 5 additions & 2 deletions packages/dx-chart-core/merge-dts.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
const buildDefinitions = require('../../scripts/merge-dts');
import { fileURLToPath } from 'url';
import { dirname } from 'path';

buildDefinitions(__dirname);
import buildDefinitions from '../../scripts/merge-dts.js';

buildDefinitions(dirname(fileURLToPath(import.meta.url)));
10 changes: 9 additions & 1 deletion packages/dx-chart-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@
"type": "git",
"url": "git+https://github.com/DevExpress/devextreme-reactive.git"
},
"type": "module",
"exports": {
".": {
"require": "./dist/dx-chart-core.umd.cjs",
"import": "./dist/dx-chart-core.es.js",
"default": "./dist/dx-chart-core.es.js"
}
},
"keywords": [
"chart",
"d3",
Expand All @@ -23,7 +31,7 @@
"publishConfig": {
"access": "public"
},
"main": "dist/dx-chart-core.umd.js",
"main": "dist/dx-chart-core.umd.cjs",
"module": "dist/dx-chart-core.es.js",
"globalName": "DevExpress.DXChartCore",
"files": [
Expand Down
2 changes: 1 addition & 1 deletion packages/dx-core/jest.config.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module.exports = {
export default {
transform: {
'^.+\\.tsx?$': 'ts-jest',
},
Expand Down
7 changes: 5 additions & 2 deletions packages/dx-core/merge-dts.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
const buildDefinitions = require('../../scripts/merge-dts');
import { fileURLToPath } from 'url';
import { dirname } from 'path';

buildDefinitions(__dirname);
import buildDefinitions from '../../scripts/merge-dts.js';

buildDefinitions(dirname(fileURLToPath(import.meta.url)));
10 changes: 9 additions & 1 deletion packages/dx-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@
"type": "git",
"url": "git+https://github.com/DevExpress/devextreme-reactive.git"
},
"type": "module",
"exports": {
".": {
"require": "./dist/dx-core.umd.cjs",
"module": "./dist/dx-core.es.js",
"default": "./dist/dx-core.es.js"
}
},
"keywords": [
"pluggable",
"reactive",
Expand All @@ -23,7 +31,7 @@
"publishConfig": {
"access": "public"
},
"main": "dist/dx-core.umd.js",
"main": "dist/dx-core.umd.cjs",
"module": "dist/dx-core.es.js",
"globalName": "DevExpress.DXCore",
"files": [
Expand Down
16 changes: 8 additions & 8 deletions packages/dx-demo-shell/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"extends": "../../.eslintrc.react.json",
"env": {
"browser": true
},
"rules": {
"filenames/match-regex": [2, "^[a-z-\\.]+$"],
"no-restricted-imports": ["error", "@mui/material", "@mui/icons-material"]
}
"extends": "../../.eslintrc.react.json",
"env": {
"browser": true
},
"rules": {
"filenames/match-regex": [2, "^[a-z-\\.]+$"],
"no-restricted-imports": ["error", "@mui/material", "@mui/icons-material"]
}
}
24 changes: 10 additions & 14 deletions packages/dx-demo-shell/generate-demos.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,21 @@
const fs = require('fs');
const path = require('path');
const {
import fs from 'fs';
import path from 'path';

import {
generateThemeFilesRegistry,
generateDataHelpersRegistry,
} = require('./scripts/helper-files-parser');
// const mustache = require('mustache');
// const {
// overrideFileIfChanged, getFileContents, writeObjectToFile,
// } = require('./scripts/fs-utils');
const { getCurrentProductName } = require('./scripts/utils');
const {
} from './scripts/helper-files-parser.js';
import { getCurrentProductName } from './scripts/utils.js';
import {
loadDemosToGenerate, generateDemos, removePendingFiles,
} = require('./scripts/demos-generator');
const { generateDemoRegistry } = require('./scripts/registry-generator');
} from './scripts/demos-generator.js';
import { generateDemoRegistry } from './scripts/registry-generator.js';

const THEMES_FOLDER = './src/theme-sources';


const DEMOS_REGISTRY_FILE = './src/demo-registry.js';

const reactCommonPath = `../dx-react-common/src`;
const reactCommonPath = '../dx-react-common/src';
const productDemosFile = productName => `${reactCommonPath}/${productName}-demo-registry.js`;
const productDemoDataFile = productName => `${reactCommonPath}/${productName}-demo-data-registry.js`;
const productThemeComponentsFile = productName => (
Expand Down
1 change: 1 addition & 0 deletions packages/dx-demo-shell/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"url": "https://www.devexpress.com/"
},
"license": "SEE LICENSE IN README.md",
"type": "module",
"main": "dist/index.js",
"module": "dist/index.js",
"styles": "dist/index.css",
Expand Down
24 changes: 9 additions & 15 deletions packages/dx-demo-shell/scripts/demos-generator.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
const fs = require('fs');
const path = require('path');
const mustache = require('mustache');
const {
overrideFileIfChanged, getFileContents, writeObjectToFile,
} = require('./fs-utils');
import fs from 'fs';
import path from 'path';
import mustache from 'mustache';

import { overrideFileIfChanged } from './fs-utils.js';

const DEMOS_FOLDER = './src/demo-sources';
const THEMES_FOLDER = './src/theme-sources';
Expand Down Expand Up @@ -38,7 +37,8 @@ const cancelFileRemoving = (filename) => {
filesToRemove.splice(removeIndex, 1);
}
};
const removePendingFiles = () => {

export const removePendingFiles = () => {
filesToRemove.forEach(file => fs.unlinkSync(file));
};

Expand All @@ -51,7 +51,7 @@ const createFromTemplate = (sourceFilename, outputFilename, data) => {
cancelFileRemoving(outputFilename);
};

const loadDemosToGenerate = (themeNames) => {
export const loadDemosToGenerate = (themeNames) => {
const demos = [];
fs.readdirSync(DEMOS_FOLDER).forEach((sectionName) => {
if (sectionName.startsWith('.')) return;
Expand Down Expand Up @@ -162,7 +162,7 @@ const processPartialContent = (content) => {
return bag;
};

const generateDemos = (demos) => {
export const generateDemos = (demos) => {
demos.forEach(({
sectionName,
demoName,
Expand Down Expand Up @@ -217,9 +217,3 @@ const generateDemos = (demos) => {
}
});
};

module.exports = {
loadDemosToGenerate,
generateDemos,
removePendingFiles,
};
18 changes: 5 additions & 13 deletions packages/dx-demo-shell/scripts/fs-utils.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
const fs = require('fs');
const path = require('path');
import fs from 'fs';

const overrideFileIfChanged = (filename, data) => {
export const overrideFileIfChanged = (filename, data) => {
let existingData;
if (fs.existsSync(filename)) {
existingData = fs.readFileSync(filename, 'utf-8');
Expand All @@ -11,7 +10,7 @@ const overrideFileIfChanged = (filename, data) => {
}
};
const indent = level => ' '.repeat(level * 2);
const getFileContents = filePath => JSON.stringify(String(fs.readFileSync(filePath, 'utf-8')));
export const getFileContents = filePath => JSON.stringify(String(fs.readFileSync(filePath, 'utf-8')));

const stringifyEntity = (entity, level) => {
const type = typeof entity;
Expand Down Expand Up @@ -45,16 +44,9 @@ const stringifyObject = (obj, level) => Object.keys(obj)

const stringify = obj => stringifyEntity(obj, 0);

const writeObjectToFile = (filePath, obj, varName) => {
export const writeObjectToFile = (filePath, obj, varName) => {
overrideFileIfChanged(
filePath,
'/* eslint-disable */\n\n'
+ `module.exports.${varName} = ${stringify(obj)};\n`,
`export const ${varName} = ${stringify(obj)};\n`,
);
};

module.exports = {
overrideFileIfChanged,
getFileContents,
writeObjectToFile,
};
30 changes: 12 additions & 18 deletions packages/dx-demo-shell/scripts/helper-files-parser.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
const fs = require('fs');
const path = require('path');
const {
getFileContents, writeObjectToFile,
} = require('./fs-utils');
const { getCurrentProductName } = require('./utils');
import fs from 'fs';
import path from 'path';

import { getFileContents, writeObjectToFile } from './fs-utils.js';
import { getCurrentProductName } from './utils.js';

const THEME_SOURCES_FOLDER = './src/theme-sources';
const DEMO_DATA_FOLDER = './src/demo-data';
Expand Down Expand Up @@ -63,7 +62,7 @@ const getDepsRecursive = (name, deps = []) => {
return deps;
};

const parseHelperFiles = (source) => {
export const parseHelperFiles = (source) => {
const imports = source.split('import');
const themeComponents = quotify(retrieveImportFiles(
imports, /'.+(theme-sources[^']+?[\w]+\/?[\w-]+)'/,
Expand Down Expand Up @@ -127,7 +126,7 @@ const generateDirRegistry = (dir) => {
}, { deps: {}, files: {} });
};

const generateThemeFilesRegistry = (commonPath) => {
export const generateThemeFilesRegistry = (commonPath) => {
const helperRegistry = fs.readdirSync(THEME_SOURCES_FOLDER).reduce((themeAcc, themeName) => {
const componentsPath = path.join(THEME_SOURCES_FOLDER, themeName, 'components');

Expand All @@ -153,11 +152,14 @@ const generateThemeFilesRegistry = (commonPath) => {
};

const parseDepsVersions = () => {
const deps = require(process.cwd() + '/package.json').dependencies;
const packageJsonPath = path.join(process.cwd(), 'package.json');
const pkg = fs.readFileSync(packageJsonPath).toString();
const { dependencies: deps } = JSON.parse(pkg);

return JSON.stringify(deps);
};

const generateDataHelpersRegistry = (commonPath) => {
export const generateDataHelpersRegistry = (commonPath) => {
const registry = generateDirRegistry(path.normalize(DEMO_DATA_FOLDER));
const depsVersions = parseDepsVersions();
writeObjectToFile(
Expand All @@ -171,11 +173,3 @@ const generateDataHelpersRegistry = (commonPath) => {
'demoData',
);
};

module.exports = {
generateThemeFilesRegistry,
generateDataHelpersRegistry,
// generateHelperFilesRegistry: () => {
// },
parseHelperFiles,
};
15 changes: 4 additions & 11 deletions packages/dx-demo-shell/scripts/registry-generator.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
const path = require('path');
const {
overrideFileIfChanged, getFileContents, writeObjectToFile,
} = require('./fs-utils');
const { getCurrentProductName } = require('./utils');
const { parseHelperFiles } = require('./helper-files-parser');
import { getFileContents, writeObjectToFile } from './fs-utils.js';
import { getCurrentProductName } from './utils.js';
import { parseHelperFiles } from './helper-files-parser.js';

const DEMOS_FOLDER = './src/demo-sources';
const GENERATED_SUFFIX = '.g';
Expand All @@ -19,7 +16,7 @@ const groupBy = (arr, iteratee) => arr
return acc;
}, {});

const generateDemoRegistry = (demos, folderPath, getDemoLink) => {
export const generateDemoRegistry = (demos, folderPath, getDemoLink) => {
const productName = getCurrentProductName();
const structuredDemos = groupBy(demos, element => element.sectionName);
Object.keys(structuredDemos).forEach((sectionName) => {
Expand Down Expand Up @@ -55,7 +52,3 @@ const generateDemoRegistry = (demos, folderPath, getDemoLink) => {

writeObjectToFile(folderPath, sections, 'demos');
};

module.exports = {
generateDemoRegistry,
};
8 changes: 2 additions & 6 deletions packages/dx-demo-shell/scripts/utils.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
const path = require('path');
import path from 'path';

const getCurrentProductName = () => {
export const getCurrentProductName = () => {
const packageName = path.basename(path.resolve('./'));
const productName = packageName.split('-')[2];
return productName;
};

module.exports = {
getCurrentProductName,
};
Loading