Skip to content

Commit

Permalink
Adapt to what we need
Browse files Browse the repository at this point in the history
  • Loading branch information
Dianliang233 committed Feb 25, 2023
1 parent 493a2fd commit 5300d0e
Show file tree
Hide file tree
Showing 4 changed files with 1,954 additions and 6,751 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Material Design Icons for Material-UI

[![Material Design Icons version](https://img.shields.io/badge/mdi-v7.0.96-blue.svg)](https://github.com/Templarian/MaterialDesign)
[![Material Design Icons version](https://img.shields.io/badge/mdi-v7.1.96-blue.svg)](https://github.com/Templarian/MaterialDesign)
[![Material Design Icons version](https://img.shields.io/badge/mdi--light-v0.2.63-blue.svg)](https://github.com/Templarian/MaterialDesignLight)

This module provides [Material-UI][material-ui] `<SvgIcon />` components for all
Expand Down
155 changes: 98 additions & 57 deletions generate-module.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const babel = require('@babel/core')
const pick = require('lodash.pick')
const filenameMap = require('./filenameMap')

function checkNameClashes (icons) {
function checkNameClashes(icons) {
const caseNameClashes = icons.filter(
(icon) =>
icon.filename == null &&
Expand All @@ -24,21 +24,21 @@ function checkNameClashes (icons) {
}
}

(async () => {
;(async () => {
const icons = Object.entries(require('@mdi/js'))
.filter(([name]) => name.indexOf('mdi') === 0)
.map(([name, path]) => ({
name: name.substr(3), // remove mdi prefix
filename: filenameMap[name.substr(3)],
svgPath: path
svgPath: path,
}))
checkNameClashes(icons)

const lightIcons = Object.entries(require('@mdi/light-js'))
.filter(([name]) => name.indexOf('mdil') === 0)
.map(([name, path]) => ({
name: name.substr(4), // remove mdil prefix
svgPath: path
svgPath: path,
}))
checkNameClashes(lightIcons)

Expand All @@ -51,15 +51,21 @@ function checkNameClashes (icons) {
`

// commonjs module syntax
fse.writeFileSync(path.join(__dirname, 'package', `${filename || name}.js`), babel.transform(code, {
presets: ['@babel/preset-react', '@babel/preset-env'],
plugins: ['@babel/plugin-proposal-class-properties'],
compact: process.env.NODE_ENV === 'production'
}).code)
fse.writeFileSync(
path.join(__dirname, 'package', `${filename || name}.js`),
babel.transform(code, {
presets: ['@babel/preset-react', '@babel/preset-env'],
plugins: ['@babel/plugin-proposal-class-properties'],
compact: process.env.NODE_ENV === 'production',
}).code
)

// typescript definition
fse.writeFileSync(path.join(__dirname, 'package', `${filename || name}.d.ts`), `export { default } from '@mui/material/SvgIcon'
`)
fse.writeFileSync(
path.join(__dirname, 'package', `${filename || name}.d.ts`),
`export { default } from '@mui/material/SvgIcon'
`
)
}

for (const { name, filename, svgPath } of lightIcons) {
Expand All @@ -68,30 +74,44 @@ function checkNameClashes (icons) {
`

// commonjs module syntax
fse.writeFileSync(path.join(__dirname, 'package', 'light', `${filename || name}.js`), babel.transform(code, {
presets: ['@babel/preset-react', '@babel/preset-env'],
plugins: ['@babel/plugin-proposal-class-properties'],
compact: process.env.NODE_ENV === 'production'
}).code)
fse.writeFileSync(
path.join(__dirname, 'package', 'light', `${filename || name}.js`),
babel.transform(code, {
presets: ['@babel/preset-react', '@babel/preset-env'],
plugins: ['@babel/plugin-proposal-class-properties'],
compact: process.env.NODE_ENV === 'production',
}).code
)

// typescript definition
fse.writeFileSync(path.join(__dirname, 'package', 'light', `${filename || name}.d.ts`), `export { default } from '@mui/material/SvgIcon'
`)
fse.writeFileSync(
path.join(__dirname, 'package', 'light', `${filename || name}.d.ts`),
`export { default } from '@mui/material/SvgIcon'
`
)
}

const generateIndexFiles = (destination, icons) => {
// es2015 module syntax
const allExports = icons.map(({ name, filename }) => `export { default as ${name} } from './${filename || name}'`).join('\n')
const allExports = icons
.map(
({ name, filename }) =>
`export { default as ${name} } from './${filename || name}'`
)
.join('\n')
fse.writeFileSync(path.join(destination, 'index.es.js'), allExports)

// typescript index definition (looks exactly the same)
fse.writeFileSync(path.join(destination, 'index.d.ts'), allExports)

// commonjs module
fse.writeFileSync(path.join(destination, 'index.js'), babel.transform(allExports, {
plugins: ['@babel/plugin-transform-modules-commonjs'],
compact: process.env.NODE_ENV === 'production'
}).code)
fse.writeFileSync(
path.join(destination, 'index.js'),
babel.transform(allExports, {
plugins: ['@babel/plugin-transform-modules-commonjs'],
compact: process.env.NODE_ENV === 'production',
}).code
)
}

generateIndexFiles(path.join(__dirname, 'package'), icons)
Expand All @@ -101,45 +121,66 @@ function checkNameClashes (icons) {
fse.mkdirSync(path.join(__dirname, 'package', 'util'))
fse.writeFileSync(
path.join(__dirname, 'package', 'util', 'createIcon.js'),
babel.transform(fse.readFileSync(path.join(__dirname, 'src', 'util', 'createIcon.js')), {
presets: ['@babel/preset-react', '@babel/preset-env'],
plugins: ['@babel/plugin-proposal-class-properties'],
compact: process.env.NODE_ENV === 'production'
}).code
babel.transform(
fse.readFileSync(path.join(__dirname, 'src', 'util', 'createIcon.js')),
{
presets: ['@babel/preset-react', '@babel/preset-env'],
plugins: ['@babel/plugin-proposal-class-properties'],
compact: process.env.NODE_ENV === 'production',
}
).code
)

// update readme
const mdiVersion = require(path.join(require.resolve('@mdi/js'), '..', '..', 'package.json')).version
const mdiLightVersion = require(path.join(require.resolve('@mdi/light-js'), '..', '..', 'package.json')).version
const mdiVersion = require(path.join(
require.resolve('@mdi/js'),
'..',
'..',
'package.json'
)).version
const mdiLightVersion = require(path.join(
require.resolve('@mdi/light-js'),
'..',
'..',
'package.json'
)).version
let readme = await fse.readFile(path.join(__dirname, 'README.md'), 'utf-8')
readme = readme.replace(/img\.shields\.io\/badge\/mdi-v(.+?)-blue\.svg/g, `img.shields.io/badge/mdi-v${mdiVersion}-blue.svg`)
readme = readme.replace(/img\.shields\.io\/badge\/mdi--light-v(.+?)-blue\.svg/g, `img.shields.io/badge/mdi--light-v${mdiLightVersion}-blue.svg`)
readme = readme.replace(
/img\.shields\.io\/badge\/mdi-v(.+?)-blue\.svg/g,
`img.shields.io/badge/mdi-v${mdiVersion}-blue.svg`
)
readme = readme.replace(
/img\.shields\.io\/badge\/mdi--light-v(.+?)-blue\.svg/g,
`img.shields.io/badge/mdi--light-v${mdiLightVersion}-blue.svg`
)
await fse.writeFile(path.join(__dirname, 'README.md'), readme, 'utf-8')

// copy other files
;[
'README.md',
'NOTICE.txt',
'LICENSE.txt',
'.npmignore'
].forEach((file) => fse.copySync(path.join(__dirname, file), path.join(__dirname, 'package', file)))
;['README.md', 'NOTICE.txt', 'LICENSE.txt', '.npmignore'].forEach((file) =>
fse.copySync(
path.join(__dirname, file),
path.join(__dirname, 'package', file)
)
)

const packageJson = require('./package.json')
packageJson.name = 'mdi-material-ui'
fse.writeFileSync(path.join(__dirname, 'package', 'package.json'), JSON.stringify(pick(packageJson, [
'name',
'version',
'description',
'main',
'module',
'jsnext:main',
'sideEffects',
'repository',
'keywords',
'author',
'license',
'bugs',
'homepage',
'peerDependencies'
]), null, 2), 'utf-8')
packageJson.name = '@teahouse-studios/mdi-material-ui'
fse.writeFileSync(
path.join(__dirname, 'package', 'package.json'),
JSON.stringify(
pick(packageJson, [
'name',
'version',
'main',
'module',
'jsnext:main',
'sideEffects',
'license',
'peerDependencies',
]),
null,
2
),
'utf-8'
)
})()
Loading

0 comments on commit 5300d0e

Please sign in to comment.