Skip to content

feat: 增加openinula模板转换脚本 #1567

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

Merged
merged 1 commit into from
Apr 29, 2024
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
8 changes: 6 additions & 2 deletions internals/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,11 @@
"build:entry-react": "esno src/index.ts build:entry-react",
"create:mapping-react": "esno src/commands/create/create-mapping-react.ts",
"build:react": "esno src/index.ts build:react",
"build:chartTheme": "esno src/index.ts build:chartTheme"
"// ----------------------OpenInula脚本---------------------- ": "",
"build:entry-openinula": "esno src/index.ts build:entry-openinula",
"create:mapping-openinula": "esno src/commands/create/create-mapping-openinula.ts",
"build:openinula": "esno src/index.ts build:openinula",
"create:ui-openinula": "esno src/index.ts create:ui-openinula"
},
"dependencies": {
"@vue/babel-helper-vue-jsx-merge-props": "^1.4.0",
Expand All @@ -62,4 +66,4 @@
"vite-plugin-svgr": "^3.2.0",
"vite-svg-loader": "^3.6.0"
}
}
}
10 changes: 10 additions & 0 deletions internals/cli/public/template/openinula/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import [[UNAME]] from './src/index[[SUFFIX]]'
import '@opentiny/vue-theme/[[NAME]]/index.less'
import { version } from './package.json'


[[UNAME]].version = version



export default [[UNAME]]
25 changes: 25 additions & 0 deletions internals/cli/public/template/openinula/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"name": "@opentiny/openinula-[[NAME]]",
"version": "3.[[MINOR]].0",
"description": "",
"main": "lib/index.js",
"module": "index.ts",
"sideEffects": false,
"type": "module",
"scripts": {
"build": "pnpm -w build:ui-openinula $npm_package_name",
"//postversion": "pnpm build"
},
"devDependencies": {
"@opentiny-internal/vue-test-utils": "workspace:*",
"vitest": "^0.31.0"
},
"dependencies": {
"@opentiny/vue-renderless": "workspace:~",
"@opentiny/openinula-common": "workspace:~",
"@opentiny/openinula-icon": "workspace:~",
"@opentiny/vue-theme": "workspace:~",
"@opentiny/vue-theme-mobile": "workspace:~"
},
"license": "MIT"
}
15 changes: 15 additions & 0 deletions internals/cli/public/template/openinula/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import pc from './pc'
import mobile from './mobile'
import mobileFirst from './mobile-first'

export default function (props) {
const { tiny_mode = 'pc' } = props

const S = {
pc,
mobile,
'mobile-first': mobileFirst
}[tiny_mode]

return S(props)
}
38 changes: 38 additions & 0 deletions internals/cli/public/template/openinula/src/mobile-first.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { renderless, api } from '@opentiny/vue-renderless/[[NAME]]/vue'
import { vc, If, Component, Slot, Transition, useSetup, useVm } from '@opentiny/openinula-common'
import { IconClose, IconSuccess, IconError, IconHelp, IconWarning } from '@opentiny/openinula-icon'

const $constants = {

}

export default function [[UNAME]](props) {


const {
_constants,

} = props

const defaultProps = Object.assign(
{

},
props
)

const { ref, current: vm, parent } = useVm()

const { [[API]] } = useSetup({
props: defaultProps,
renderless,
api,
constants: _constants,
vm,
parent
})

return (
[[TEMPLATE]]
)
}
39 changes: 39 additions & 0 deletions internals/cli/public/template/openinula/src/mobile.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { renderless, api } from '@opentiny/vue-renderless/[[NAME]]/vue'
import { vc, If, Component, Slot, Transition, useSetup, useVm } from '@opentiny/openinula-common'
import { IconClose, IconSuccess, IconError, IconHelp, IconWarning } from '@opentiny/openinula-icon'
import '@opentiny/vue-theme-mobile/[[NAME]]/index.less'

const $constants = {

}

export default function [[UNAME]](props) {

const {
_constants,

} = props

const defaultProps = Object.assign(
{

},
props
)


const { ref, current: vm, parent } = useVm()

const { [[API]] } = useSetup({
props: defaultProps,
renderless,
api,
constants: _constants,
vm,
parent
})

return (
[[TEMPLATE]]
)
}
39 changes: 39 additions & 0 deletions internals/cli/public/template/openinula/src/pc.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { renderless, api } from '@opentiny/vue-renderless/[[NAME]]/vue'
import { vc, If, Component, Slot, Transition, useSetup, useVm } from '@opentiny/openinula-common'
import { IconClose, IconSuccess, IconError, IconHelp, IconWarning } from '@opentiny/openinula-icon'
import '@opentiny/vue-theme/[[NAME]]/index.less'

const $constants = {

}

export default function [[UNAME]](props) {

const {
_constants,

} = props

const defaultProps = Object.assign(
{

},
props
)


const { ref, current: vm, parent } = useVm()

const { [[API]] } = useSetup({
props: defaultProps,
renderless,
api,
constants: _constants,
vm,
parent
})

return (
[[TEMPLATE]]
)
}
98 changes: 98 additions & 0 deletions internals/cli/src/commands/build/build-entry-openinula.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/**
* 生成入口文件,包括 pc.js / mobile.js / mobile-first.js / index.js
*/
import fs from 'fs-extra'
import { EOL as endOfLine } from 'node:os'
import { pathFromWorkspaceRoot, capitalizeKebabCase, prettierFormat, logGreen } from '../../shared/utils'
import { getAllModules2 } from './build-ui-openinula'
import handlebarsRender from './handlebars.render'

const version = (({ key }) => {
const packageJSON = fs.readJSONSync(pathFromWorkspaceRoot('packages/openinula/package.json'))
const packageJsonOption = packageJSON[key] || packageJSON

return packageJsonOption
})({ key: 'version' })

const outputDir = 'packages/openinula'

const fileNames = {
all: 'index.ts',
pc: 'pc.ts',
mobile: 'mobile.ts',
'mobile-first': 'mobile-first.ts'
}

function getMainTemplate() {
return `{{{include}}}
import { $prefix } from '@opentiny/openinula-common'

const components = [{{{components}}}]

export const version = '${version}'

export {
{{{components}}}
}

export default {
{{{components}}}
} as any
`
}

function getComponents(mode) {
const modules = getAllModules2()

const components = modules
.filter((item) => item.type === 'component')
.filter((item) => mode === 'all' || !item.mode || item.mode.includes(mode))

return components
}

function createEntry(mode) {
const OUTPUT_PATH = pathFromWorkspaceRoot(outputDir, fileNames[mode])
const MAIN_TEMPLATE = getMainTemplate({ mode })
const includeTemplate: string[] = []
const componentsTemplate: string[] = []
const components = getComponents(mode)
const PKG_PATH = pathFromWorkspaceRoot(outputDir, 'package.json')
const PKGContent = fs.readJSONSync(PKG_PATH)
const PKGDeps = {
'@opentiny/openinula-common': 'workspace:~'
}

components.forEach((item) => {
const component = capitalizeKebabCase(item.name)
PKGDeps[item.importName] = 'workspace:~'
componentsTemplate.push(` ${component}`)
const importName = mode === 'all' ? item.importName : `${item.importName}/src/${mode}`
includeTemplate.push(`import ${item.name} from '${importName}'`)
})

if (mode === 'all') {
PKGContent.dependencies = PKGDeps
fs.writeFileSync(PKG_PATH, JSON.stringify(PKGContent, null, 2))
}

const template = handlebarsRender({
template: MAIN_TEMPLATE,
data: {
include: includeTemplate.join(endOfLine),
components: componentsTemplate.join(',' + endOfLine)
}
})

const output = prettierFormat({ str: template })

fs.writeFileSync(OUTPUT_PATH, output)
}

export function buildEntryOpenInula() {
;['all', 'pc', 'mobile', 'mobile-first'].forEach(createEntry)

logGreen(
`npm run build:entry done. [${outputDir}/index.ts,${outputDir}/pc.ts,${outputDir}/mobile.ts,${outputDir}/mobile-first.ts]`
)
}
Loading