Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into fix-compounded-component-type
- Loading branch information
Showing
2,722 changed files
with
418,442 additions
and
421,904 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,195 +1,32 @@ | ||
const fs = require('fs'); | ||
const path = require('path'); | ||
const defaultVars = require('./scripts/default-vars'); | ||
const darkVars = require('./scripts/dark-vars'); | ||
const compactVars = require('./scripts/compact-vars'); | ||
|
||
function generateThemeFileContent(theme) { | ||
return `const { ${theme}ThemeSingle } = require('./theme');\nconst defaultTheme = require('./default-theme');\n | ||
module.exports = { | ||
...defaultTheme, | ||
...${theme}ThemeSingle | ||
}`; | ||
} | ||
|
||
// We need compile additional content for antd user | ||
function finalizeCompile() { | ||
if (fs.existsSync(path.join(__dirname, './lib'))) { | ||
// Build a entry less file to dist/antd.less | ||
const componentsPath = path.join(process.cwd(), 'components'); | ||
let componentsLessContent = ''; | ||
// Build components in one file: lib/style/components.less | ||
fs.readdir(componentsPath, (err, files) => { | ||
files.forEach(file => { | ||
if (fs.existsSync(path.join(componentsPath, file, 'style', 'index.less'))) { | ||
componentsLessContent += `@import "../${path.posix.join( | ||
file, | ||
'style', | ||
'index-pure.less', | ||
)}";\n`; | ||
} | ||
}); | ||
fs.writeFileSync( | ||
path.join(process.cwd(), 'lib', 'style', 'components.less'), | ||
componentsLessContent, | ||
); | ||
}); | ||
} | ||
} | ||
|
||
function buildThemeFile(theme, vars) { | ||
// Build less entry file: dist/antd.${theme}.less | ||
if (theme !== 'default') { | ||
fs.writeFileSync( | ||
path.join(process.cwd(), 'dist', `antd.${theme}.less`), | ||
`@import "../lib/style/${theme}.less";\n@import "../lib/style/components.less";`, | ||
); | ||
// eslint-disable-next-line no-console | ||
console.log(`Built a entry less file to dist/antd.${theme}.less`); | ||
} else { | ||
fs.writeFileSync( | ||
path.join(process.cwd(), 'dist', `default-theme.js`), | ||
`module.exports = ${JSON.stringify(vars, null, 2)};\n`, | ||
if (fs.existsSync(path.join(__dirname, './es'))) { | ||
// Build less entry file: dist/antd.less | ||
fs.copyFileSync( | ||
path.join(process.cwd(), 'components', 'style', 'reset.css'), | ||
path.join(process.cwd(), 'es', 'style', 'reset.css'), | ||
); | ||
return; | ||
} | ||
|
||
// Build ${theme}.js: dist/${theme}-theme.js, for less-loader | ||
|
||
fs.writeFileSync( | ||
path.join(process.cwd(), 'dist', `theme.js`), | ||
`const ${theme}ThemeSingle = ${JSON.stringify(vars, null, 2)};\n`, | ||
{ | ||
flag: 'a', | ||
}, | ||
); | ||
|
||
fs.writeFileSync( | ||
path.join(process.cwd(), 'dist', `${theme}-theme.js`), | ||
generateThemeFileContent(theme), | ||
); | ||
|
||
// eslint-disable-next-line no-console | ||
console.log(`Built a ${theme} theme js file to dist/${theme}-theme.js`); | ||
} | ||
|
||
function finalizeDist() { | ||
if (fs.existsSync(path.join(__dirname, './dist'))) { | ||
// Build less entry file: dist/antd.less | ||
fs.writeFileSync( | ||
path.join(process.cwd(), 'dist', 'antd.less'), | ||
'@import "../lib/style/default.less";\n@import "../lib/style/components.less";', | ||
); | ||
// eslint-disable-next-line no-console | ||
fs.writeFileSync( | ||
path.join(process.cwd(), 'dist', 'theme.js'), | ||
`const defaultTheme = require('./default-theme.js');\n`, | ||
); | ||
// eslint-disable-next-line no-console | ||
console.log('Built a entry less file to dist/antd.less'); | ||
buildThemeFile('default', defaultVars); | ||
buildThemeFile('dark', darkVars); | ||
buildThemeFile('compact', compactVars); | ||
buildThemeFile('variable', {}); | ||
fs.writeFileSync( | ||
path.join(process.cwd(), 'dist', `theme.js`), | ||
` | ||
function getThemeVariables(options = {}) { | ||
let themeVar = { | ||
'hack': \`true;@import "\${require.resolve('antd/lib/style/color/colorPalette.less')}";\`, | ||
...defaultTheme | ||
}; | ||
if(options.dark) { | ||
themeVar = { | ||
...themeVar, | ||
...darkThemeSingle | ||
} | ||
} | ||
if(options.compact){ | ||
themeVar = { | ||
...themeVar, | ||
...compactThemeSingle | ||
} | ||
} | ||
return themeVar; | ||
} | ||
module.exports = { | ||
darkThemeSingle, | ||
compactThemeSingle, | ||
getThemeVariables | ||
}`, | ||
{ | ||
flag: 'a', | ||
}, | ||
fs.copyFileSync( | ||
path.join(process.cwd(), 'components', 'style', 'reset.css'), | ||
path.join(process.cwd(), 'dist', 'reset.css'), | ||
); | ||
} | ||
} | ||
|
||
function isComponentStyleEntry(file) { | ||
return file.path.match(/style(\/|\\)index\.tsx/); | ||
} | ||
|
||
function needTransformStyle(content) { | ||
return content.includes('../../style/index.less') || content.includes('./index.less'); | ||
} | ||
|
||
module.exports = { | ||
compile: { | ||
includeLessFile: [/(\/|\\)components(\/|\\)style(\/|\\)default.less$/], | ||
transformTSFile(file) { | ||
if (isComponentStyleEntry(file)) { | ||
let content = file.contents.toString(); | ||
|
||
if (needTransformStyle(content)) { | ||
const cloneFile = file.clone(); | ||
|
||
// Origin | ||
content = content.replace('../../style/index.less', '../../style/default.less'); | ||
cloneFile.contents = Buffer.from(content); | ||
|
||
return cloneFile; | ||
} | ||
} | ||
}, | ||
transformFile(file) { | ||
if (isComponentStyleEntry(file)) { | ||
const indexLessFilePath = file.path.replace('index.tsx', 'index.less'); | ||
|
||
if (fs.existsSync(indexLessFilePath)) { | ||
// We put origin `index.less` file to `index-pure.less` | ||
const pureFile = file.clone(); | ||
pureFile.contents = Buffer.from(fs.readFileSync(indexLessFilePath, 'utf8')); | ||
pureFile.path = pureFile.path.replace('index.tsx', 'index-pure.less'); | ||
|
||
// Rewrite `index.less` file with `root-entry-name` | ||
const indexLessFile = file.clone(); | ||
indexLessFile.contents = Buffer.from( | ||
[ | ||
// Inject variable | ||
'@root-entry-name: default;', | ||
// Point to origin file | ||
"@import './index-pure.less';", | ||
].join('\n\n'), | ||
); | ||
indexLessFile.path = indexLessFile.path.replace('index.tsx', 'index.less'); | ||
|
||
return [indexLessFile, pureFile]; | ||
} | ||
} | ||
|
||
return []; | ||
}, | ||
lessConfig: { | ||
modifyVars: { | ||
'root-entry-name': 'default', | ||
}, | ||
}, | ||
finalize: finalizeCompile, | ||
}, | ||
dist: { | ||
finalize: finalizeDist, | ||
}, | ||
generateThemeFileContent, | ||
bail: true, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
import * as React from 'react'; | ||
import { useLocale as useDumiLocale } from 'dumi'; | ||
|
||
export interface LocaleMap<Key extends string> { | ||
cn: Record<Key, string>; | ||
en: Record<Key, string>; | ||
} | ||
|
||
export default function useLocale<Key extends string>( | ||
localeMap?: LocaleMap<Key>, | ||
): [Record<Key, string>, 'cn' | 'en'] { | ||
const { id } = useDumiLocale(); | ||
const localeType = id === 'zh-CN' ? 'cn' : ('en' as const); | ||
return [localeMap?.[localeType]!, localeType]; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
import { useLocation as useDumiLocation } from 'dumi'; | ||
import * as React from 'react'; | ||
import useLocale from './useLocale'; | ||
|
||
function clearPath(path: string) { | ||
return path.replace('-cn', '').replace(/\/$/, ''); | ||
} | ||
|
||
export default function useLocation() { | ||
const location = useDumiLocation(); | ||
const { search } = location; | ||
const [, localeType] = useLocale(); | ||
|
||
const getLink = React.useCallback( | ||
(path: string, hash?: string | { cn: string; en: string }) => { | ||
let pathname = clearPath(path); | ||
|
||
if (localeType === 'cn') { | ||
pathname = `${pathname}-cn`; | ||
} | ||
|
||
if (search) { | ||
pathname = `${pathname}${search}`; | ||
} | ||
|
||
if (hash) { | ||
let hashStr: string; | ||
if (typeof hash === 'object') { | ||
hashStr = hash[localeType]; | ||
} else { | ||
hashStr = hash; | ||
} | ||
|
||
pathname = `${pathname}#${hashStr}`; | ||
} | ||
|
||
return pathname; | ||
}, | ||
[localeType, search], | ||
); | ||
|
||
return { | ||
...location, | ||
pathname: clearPath(location.pathname), | ||
getLink, | ||
}; | ||
} |
Oops, something went wrong.