Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,15 @@
"typescript": "^4.7.4"
},
"scripts": {
"build": "yarn clean && yarn build:generate && yarn build:esm && yarn build:subpaths && yarn build:cjs",
"build": "yarn clean && yarn build:generate && yarn build:esm && yarn build:subpaths && yarn build:cjs && yarn build:single:packages",
"build:cjs": "tsc --build --verbose packages/tsconfig.cjs.json",
"build:esm": "tsc --build --verbose packages/tsconfig.json",
"build:integration": "lerna run build:demo-app --stream",
"build:docs": "yarn workspace @patternfly/react-docs build:docs",
"build:generate": "lerna run generate --parallel --stream",
"build:subpaths": "lerna run subpaths --parallel --stream",
"build:umd": "lerna run build:umd --parallel --stream",
"build:single:packages": "lerna run build:single:packages",
"clean": "yarn clean:build && lerna run clean --parallel",
"clean:build": "rimraf .cache .eslintcache coverage",
"generate": "yarn plop",
Expand Down
3 changes: 2 additions & 1 deletion packages/react-charts/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@
"react-dom": "^17 || ^18"
},
"scripts": {
"clean": "rimraf dist"
"clean": "rimraf dist",
"build:single:packages" : "node ../../scripts/build-single-packages.js --config single-packages.config.json"
},
"devDependencies": {
"@types/lodash": "^4.14.157",
Expand Down
17 changes: 17 additions & 0 deletions packages/react-charts/single-packages.config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"packageName": "@patternfly/react-charts",
"modules": [
{
"name": "dist/esm",
"type": "esm"
},
{
"name": "dist/js",
"type": "cjs"
}
],
"exclude": [
"dist/esm/deprecated/index.js",
"dist/esm/next/index.js"
]
}
1 change: 1 addition & 0 deletions packages/react-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"homepage": "https://github.com/patternfly/patternfly-react#readme",
"scripts": {
"build:umd": "rollup -c --environment IS_PRODUCTION",
"build:single:packages" : "node ../../scripts/build-single-packages.js --config single-packages.config.json",
"clean": "rimraf dist",
"generate": "node scripts/copyStyles.js",
"subpaths": "node scripts/createSubpaths.js"
Expand Down
14 changes: 14 additions & 0 deletions packages/react-core/single-packages.config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"packageName": "@patternfly/react-core",
"modules": [
{
"name": "dist/esm",
"type": "esm"
},
{
"name": "dist/js",
"type": "cjs"
}
],
"exclude": []
}
1 change: 1 addition & 0 deletions packages/react-table/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
"homepage": "https://github.com/patternfly/patternfly-react/tree/main/packages/react-table#readme",
"scripts": {
"build:umd": "rollup -c --environment IS_PRODUCTION",
"build:single:packages" : "node ../../scripts/build-single-packages.js --config single-packages.config.json",
"clean": "rimraf dist",
"subpaths": "node scripts/createSubpaths.js"
},
Expand Down
21 changes: 21 additions & 0 deletions packages/react-table/single-packages.config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"packageName": "@patternfly/react-table",
"modules": [
{
"name": "components",
"type": "esm"
},
{
"name": "deprecated",
"type": "esm"
},
{
"name": "dist/js",
"type": "cjs"
}
],
"exclude": [
"dist/esm/deprecated/index.js",
"dist/esm/next/index.js"
]
}
81 changes: 81 additions & 0 deletions scripts/build-single-packages.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/* eslint-disable no-console */
const fse = require('fs-extra');
const glob = require('glob');

const root = process.cwd();
const packageJson = require(`${root}/package.json`);

if (!(process.argv.includes('--config') && process.argv.indexOf('--config') + 1 < process.argv.length)) {
console.log('--config is required followed by the config file name');
process.exit(1);
}

const configJson = require(`${root}/${process.argv[process.argv.indexOf('--config') + 1]}`);

const foldersexclude = configJson.exclude ? configJson.exclude : []

if (!configJson.modules || configJson.modules.length === 0) {
console.log('modules are required');
process.exit(1);
}

const components = configJson.modules.map(module => ({
files: glob
.sync(`${root}/${module.name}/**/**/index.js`)
.filter((item) => !foldersexclude.some((name) => item.includes(name)))
.map((name) => name.replace(/\/$/, '')),
type: module.type
}));

async function createPackage(component, dist) {
const cmds = [];
const destFile = component.replace(/index.js/g, 'package.json');
const pathAsArray = component.split('/');
const esmRelative = `.${component.split(`${root}`)[1]}`;

const packageName = configJson.packageName;
if (!packageName) {
console.log("packageName is required!")
process.exit(1);
}

let componentName = pathAsArray[pathAsArray.length - 2];
if (pathAsArray.includes("next")) {
componentName = `${componentName.toLowerCase()}-next-${dist}`;
} else if (pathAsArray.includes("deprecated")) {
componentName = `${componentName.toLowerCase()}-deprecated-${dist}`;
} else {
componentName = `${componentName.toLowerCase()}-${dist}`;
}

const content = {
name: `${packageName}-${componentName}`,
main: 'index.js',
module: esmRelative,
typings: 'index.d.ts',
version: packageJson.version
};

cmds.push(fse.writeJSON(destFile, content));

return Promise.all(cmds);
}

async function generatePackages(components, dist) {
const cmds = components.map((component) => createPackage(component, dist));
return Promise.all(cmds);
}

async function run(components, dist) {
try {
await generatePackages(components, dist);
} catch (error) {
console.log(error)
process.exit(1);
}
}

components.forEach(component => {
run(component.files, component.type);
});