mirror of
https://github.com/element-plus/element-plus.git
synced 2025-12-19 09:09:40 +08:00
* chore: upgrade deps * chore: replace __ExtractPublicPropTypes with ExtractPublicPropTypes * fix: get rid of type errors * fix: resolve test errors with @vue/test-utils v2.4.6 * fix: resolve test errors with Vue 3.5.22 * ci: set pnpm flag * chore: update the Vue peer dependency version * Apply suggestion from @tolking Co-authored-by: qiang <qw13131wang@gmail.com> * docs: update example code Co-authored-by: warmthsea <2586244885@qq.com> * chore: remove csstype (#22487) * chore: fix merge code type error * chore: fix test:ssr error - Cannot read properties of undefined (reading 'getSSRProps') * chore: fix typecheck:vitest error * chore: update pnpm yaml file * test: fix collapse accordion error * chore: update deps * chore: fix type error * chore: lock file * chore: sync change sync with the remove of vue macro * refactor: use computed instead of eagerComputed * fix: timeline.test.tsx typecheck * chore: clean lock file try dont throw CodeFactor issues in ci did: - rm pnpm-lock.yaml - rm -rf ./**/node_modules - pnpm store prune - pnpm cache delete - pnpm install Also stay in 3.1.0 for vue-tsc in order to avoid the warnings of template refs, see https://github.com/vuejs/language-tools/issues/5815 * chore: format code --------- Co-authored-by: Dsaquel <291874700n@gmail.com> Co-authored-by: qiang <qw13131wang@gmail.com> Co-authored-by: warmthsea <2586244885@qq.com> Co-authored-by: Noblet Ouways <91417411+Dsaquel@users.noreply.github.com> Co-authored-by: sea <45450994+warmthsea@users.noreply.github.com> Co-authored-by: btea <2356281422@qq.com>
116 lines
3.1 KiB
Bash
Executable File
116 lines
3.1 KiB
Bash
Executable File
#! /bin/bash
|
|
|
|
NAME=$(echo $1 | sed -E "s/([A-Z])/-\1/g" | sed -E "s/^-//g" | sed -E "s/_/-/g" | tr "A-Z" "a-z")
|
|
|
|
FILE_PATH=$(cd "$(dirname "${BASH_SOURCE[0]}")/../packages" && pwd)
|
|
|
|
re="[[:space:]]+"
|
|
|
|
if [ "$#" -ne 1 ] || [[ $NAME =~ $re ]] || [ "$NAME" == "" ]; then
|
|
echo "Usage: pnpm gen \${name} with no space"
|
|
exit 1
|
|
fi
|
|
|
|
DIRNAME="$FILE_PATH/components/$NAME"
|
|
INPUT_NAME=$NAME
|
|
|
|
if [ -d "$DIRNAME" ]; then
|
|
echo "$NAME component already exists, please change it"
|
|
exit 1
|
|
fi
|
|
|
|
NAME=$(echo $NAME | awk -F'-' '{ for(i=1; i<=NF; i++) { $i = toupper(substr($i,1,1)) tolower(substr($i,2)) } print $0 }' OFS='')
|
|
PROP_NAME=$(echo "${NAME:0:1}" | tr '[:upper:]' '[:lower:]')${NAME:1}
|
|
|
|
mkdir -p "$DIRNAME"
|
|
mkdir -p "$DIRNAME/src"
|
|
mkdir -p "$DIRNAME/style"
|
|
mkdir -p "$DIRNAME/__tests__"
|
|
|
|
cat > $DIRNAME/src/$INPUT_NAME.vue <<EOF
|
|
<template>
|
|
<div>
|
|
<slot />
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts" setup>
|
|
import { ${PROP_NAME}Emits, ${PROP_NAME}Props } from './$INPUT_NAME'
|
|
|
|
defineOptions({
|
|
name: 'El$NAME',
|
|
})
|
|
|
|
const props = defineProps(${PROP_NAME}Props)
|
|
const emit = defineEmits(${PROP_NAME}Emits)
|
|
|
|
// init here
|
|
</script>
|
|
EOF
|
|
|
|
cat > $DIRNAME/src/$INPUT_NAME.ts <<EOF
|
|
import { buildProps } from '@element-plus/utils'
|
|
|
|
import type { ExtractPropTypes, ExtractPublicPropTypes } from 'vue'
|
|
|
|
export const ${PROP_NAME}Props = buildProps({} as const)
|
|
export type ${NAME}Props = ExtractPropTypes<typeof ${PROP_NAME}Props>
|
|
export type ${NAME}PropsPublic = ExtractPublicPropTypes<typeof ${PROP_NAME}Props>
|
|
|
|
export const ${PROP_NAME}Emits = {}
|
|
export type ${NAME}Emits = typeof ${PROP_NAME}Emits
|
|
EOF
|
|
|
|
cat > $DIRNAME/src/instance.ts <<EOF
|
|
import type $NAME from './$INPUT_NAME.vue'
|
|
|
|
export type ${NAME}Instance = InstanceType<typeof $NAME> & unknown
|
|
EOF
|
|
|
|
cat <<EOF >"$DIRNAME/index.ts"
|
|
import { withInstall } from '@element-plus/utils'
|
|
import $NAME from './src/$INPUT_NAME.vue'
|
|
import type { SFCWithInstall } from '@element-plus/utils'
|
|
|
|
export const El$NAME: SFCWithInstall<typeof $NAME> = withInstall($NAME)
|
|
export default El$NAME
|
|
|
|
export * from './src/$INPUT_NAME'
|
|
export type { ${NAME}Instance } from './src/instance'
|
|
EOF
|
|
|
|
cat > $DIRNAME/__tests__/$INPUT_NAME.test.tsx <<EOF
|
|
import { mount } from '@vue/test-utils'
|
|
import { describe, expect, test } from 'vitest'
|
|
import $NAME from '../src/$INPUT_NAME.vue'
|
|
|
|
const AXIOM = 'Rem is the best girl'
|
|
|
|
describe('$NAME.vue', () => {
|
|
test('render test', () => {
|
|
const wrapper = mount(() => <$NAME>{AXIOM}</$NAME>)
|
|
|
|
expect(wrapper.text()).toEqual(AXIOM)
|
|
})
|
|
})
|
|
EOF
|
|
|
|
cat > $DIRNAME/style/index.ts <<EOF
|
|
import '@element-plus/components/base/style'
|
|
import '@element-plus/theme-chalk/src/$INPUT_NAME.scss'
|
|
EOF
|
|
|
|
cat > $DIRNAME/style/css.ts <<EOF
|
|
import '@element-plus/components/base/style/css'
|
|
import '@element-plus/theme-chalk/el-$INPUT_NAME.css'
|
|
EOF
|
|
|
|
cat > $FILE_PATH/theme-chalk/src/$INPUT_NAME.scss <<EOF
|
|
EOF
|
|
|
|
perl -0777 -pi -e "s/\n\n/\nexport * from '.\/$INPUT_NAME'\n\n/" $FILE_PATH/components/index.ts
|
|
|
|
TYPE_PATH=$(cd "$(dirname "${BASH_SOURCE[0]}")/../typings" && pwd)
|
|
|
|
perl -0777 -pi -e "s/\n\s+}/\n El$NAME: typeof import('element-plus')['El$NAME']\n }/" $TYPE_PATH/global.d.ts
|