diff --git a/packages/uni-app-uts/src/plugins/index.ts b/packages/uni-app-uts/src/plugins/index.ts index 0bde72512d35aa56ace5217d3dd594a2b27fc88a..39cb4ebbe4f8944905453cc772d3023c9d58b425 100644 --- a/packages/uni-app-uts/src/plugins/index.ts +++ b/packages/uni-app-uts/src/plugins/index.ts @@ -123,9 +123,11 @@ function normalizeCode(code: string, isMain = false) { return code } return ` -export function main() { - definePageRoutes() - createPage(__uniRoutes[0]) +${code} +export function main(app: IApp) { + defineAppConfig(); + definePageRoutes(); + (createApp()['app'] as VueApp).mount(app); } ` } diff --git a/packages/uni-app-uts/src/plugins/pagesJson.ts b/packages/uni-app-uts/src/plugins/pagesJson.ts index 534b9102938526e59d4175d14d125219e65b90cc..0386a3009c8b57520276ecba6443f76be2501419 100644 --- a/packages/uni-app-uts/src/plugins/pagesJson.ts +++ b/packages/uni-app-uts/src/plugins/pagesJson.ts @@ -4,7 +4,7 @@ import { PAGES_JSON_UTS, normalizePagesJson } from '@dcloudio/uni-cli-shared' import type { OutputAsset } from 'rollup' import type { Plugin } from 'vite' -import { ENTRY_FILENAME, genClassName } from './utils' +import { ENTRY_FILENAME, genClassName, stringifyMap } from './utils' function isPages(id: string) { return id.endsWith(PAGES_JSON_UTS) @@ -40,7 +40,11 @@ export function uniAppPagesPlugin(): Plugin { const className = genClassName(page.path) imports.push(page.path) routes.push( - `{ path: "${page.path}", component: ${className}Class, meta: { isQuit: true, navigationBar: { titleText: "uni-app" } as PageNavigationBar } as PageMeta } as PageRoute` + `{ path: "${ + page.path + }", component: ${className}Class, meta: { isQuit: true } as PageMeta, style: ${stringifyPageStyle( + page.style + )} } as PageRoute` ) }) return `${imports.map((p) => `import('./${p}.uvue')`).join('\n')} @@ -56,14 +60,23 @@ export default 'pages.json'` ${imports .map((p) => { const className = genClassName(p) - return `import { ${className}Class } from './${p}.uvue?type=page'` + return `import ${className}Class from './${p}.uvue?type=page'` }) .join('\n')} function definePageRoutes() { ${routes.map((route) => `__uniRoutes.push(${route})`).join('\n')} } +function defineAppConfig(){ + __uniConfig.entryPagePath = '/${imports[0]}' +} ` } }, } } + +function stringifyPageStyle(pageStyle: UniApp.PagesJsonPageStyle) { + delete pageStyle.isNVue + delete pageStyle.isSubNVue + return stringifyMap(pageStyle) +} diff --git a/packages/uni-app-uts/src/plugins/utils.ts b/packages/uni-app-uts/src/plugins/utils.ts index ffa3a8a16b3a36c65cd7554ea9372b1261382d1d..7b5c3d866c8f88c8eeab134a499f52ced6c4a4eb 100644 --- a/packages/uni-app-uts/src/plugins/utils.ts +++ b/packages/uni-app-uts/src/plugins/utils.ts @@ -29,3 +29,35 @@ export function genClassName(fileName: string) { export function isVue(filename: string) { return filename.endsWith('.vue') || filename.endsWith('.uvue') } + +export function stringifyMap(obj: unknown) { + return mapToInitString(objToMap(obj as Record), true) +} + +function mapToInitString( + map: Map, + ts: boolean = false +): string { + let entries = [] + for (let [key, value] of map) { + if (value instanceof Map) { + entries.push(`["${key}", ${mapToInitString(value, ts)}]`) + } else { + entries.push(`["${key}", ${JSON.stringify(value)}]`) + } + } + return `new Map${ts ? '' : ''}([${entries.join(', ')}])` +} + +function objToMap(obj: Record) { + const map = new Map() + for (const key in obj) { + const value = obj[key] + if (typeof value === 'object') { + map.set(key, objToMap(value as Record)) + } else { + map.set(key, value) + } + } + return map +} diff --git a/packages/uni-app-uts/src/plugins/uvue/code/script.ts b/packages/uni-app-uts/src/plugins/uvue/code/script.ts index 5741bfc99558a80c9267dc8d53c333a4f35f7381..cf1f678f4f213ff8477b6d3b1398f8a5fda024be 100644 --- a/packages/uni-app-uts/src/plugins/uvue/code/script.ts +++ b/packages/uni-app-uts/src/plugins/uvue/code/script.ts @@ -2,18 +2,16 @@ import { SFCDescriptor } from '@vue/compiler-sfc' export function genScript( { script }: SFCDescriptor, - { filename }: { filename: string } + _options: { filename: string } ) { if (!script) { return ` export default {} -export const ${filename}Class = UTSAndroid.getKotlinClass(${filename}) ` } return ( '\n'.repeat(script.loc.start.line - 1) + `${script.content} -export const ${filename}Class = UTSAndroid.getKotlinClass(${filename}) ` ) } diff --git a/packages/uni-components/dist/components.js b/packages/uni-components/dist/components.js index a26585c8fe916b5c5292a508883b6cda54f47f38..f93e7df56ca2aa01ce6c61de7a73a0185981ff1f 100644 --- a/packages/uni-components/dist/components.js +++ b/packages/uni-components/dist/components.js @@ -3237,19 +3237,11 @@ const Switch = /* @__PURE__ */ defineComponent({ watch(() => props2.checked, (val) => { switchChecked.value = val; }); - const listeners = { - onChange(e2) { - switchChecked.value = e2.detail.value; - trigger("change", { - value: switchChecked.value - }); - } - }; const _onClick = ($event, isLabelClick) => { if (props2.disabled) { return; } - switchChecked.value = !switchChecked.value; + switchChecked.value = $event.detail ? $event.detail.value : !switchChecked.value; trigger("change", { value: switchChecked.value }); @@ -3273,7 +3265,9 @@ const Switch = /* @__PURE__ */ defineComponent({ "ref": rootRef }, [type === SwitchType.switch ? createVNode("dc-switch", mergeProps({ dataUncType: "uni-switch" - }, listeners, { + }, { + "onChange": _onClick + }, { checked: switchChecked.value, color, disabled @@ -3284,8 +3278,11 @@ const Switch = /* @__PURE__ */ defineComponent({ color } }, { - checked: switchChecked.value - }, listeners), null) : null]); + checked: switchChecked.value, + disabled + }, { + "onClick": _onClick + }), null) : null]); }; } }); diff --git a/packages/uni-uts-v1/__tests__/compiler.spec.ts b/packages/uni-uts-v1/__tests__/compiler.spec.ts index a3940654eb939c0bc3cf2eccc9b44578d548578e..9e9ee948321dda22824514032d67c9fc2c7b369f 100644 --- a/packages/uni-uts-v1/__tests__/compiler.spec.ts +++ b/packages/uni-uts-v1/__tests__/compiler.spec.ts @@ -23,6 +23,7 @@ describe('compiler', () => { inputDir, outputDir, sourceMap: false, + isPlugin: true, components: {}, }) expect(existsSync(kotlinFile)).toBeTruthy() @@ -37,6 +38,7 @@ describe('compiler', () => { inputDir, outputDir, sourceMap: false, + isPlugin: true, components: {}, }) expect(existsSync(swiftFile)).toBeTruthy() diff --git a/packages/uni-uts-v1/src/index.ts b/packages/uni-uts-v1/src/index.ts index a3a9e41c7d8e18346733eecf6810032d3a91d7a2..d2b7f3ca246037030bf4c44a148fa3bcd5fafa8c 100644 --- a/packages/uni-uts-v1/src/index.ts +++ b/packages/uni-uts-v1/src/index.ts @@ -95,8 +95,13 @@ function createResult( } } +interface CompilerOptions { + isPlugin: boolean +} + export async function compile( - pluginDir: string + pluginDir: string, + { isPlugin }: CompilerOptions = { isPlugin: true } ): Promise { const pkg = resolvePackage(pluginDir) if (!pkg) { @@ -158,7 +163,11 @@ export async function compile( filename = resolvePlatformIndexFilename('app-android', pluginDir, pkg) } if (filename) { - await getCompiler('kotlin').runProd(filename, androidComponents) + await getCompiler('kotlin').runProd( + filename, + androidComponents, + isPlugin + ) if (cacheDir) { // 存储 sourcemap storeSourceMap( @@ -186,7 +195,7 @@ export async function compile( filename = resolvePlatformIndexFilename('app-ios', pluginDir, pkg) } if (filename) { - await getCompiler('swift').runProd(filename, iosComponents) + await getCompiler('swift').runProd(filename, iosComponents, isPlugin) if (cacheDir) { storeSourceMap( 'app-ios', @@ -311,7 +320,11 @@ export async function compile( inputDir, outputDir ) - const res = await getCompiler(compilerType).runDev(filename, components) + const res = await getCompiler(compilerType).runDev( + filename, + components, + isPlugin + ) if (res) { if (isArray(res.deps) && res.deps.length) { // 添加其他文件的依赖 diff --git a/packages/uni-uts-v1/src/kotlin.ts b/packages/uni-uts-v1/src/kotlin.ts index d938e540e530fe7448e8d61ef41e0b6f1d1b52c7..0a89fe5f4c7140cc09a06c6ddf22c95836c24646 100644 --- a/packages/uni-uts-v1/src/kotlin.ts +++ b/packages/uni-uts-v1/src/kotlin.ts @@ -62,7 +62,8 @@ function parseKotlinPackage(filename: string) { export async function runKotlinProd( filename: string, - components: Record + components: Record, + isPlugin = true ) { // 文件有可能是 app-ios 里边的,因为编译到 android 时,为了保证不报错,可能会去读取 ios 下的 uts if (filename.includes('app-ios')) { @@ -75,6 +76,7 @@ export async function runKotlinProd( outputDir, sourceMap: true, components, + isPlugin, }) if (!result) { return @@ -99,7 +101,8 @@ export type RunKotlinDevResult = UTSResult & { export async function runKotlinDev( filename: string, - components: Record + components: Record, + isPlugin = true ): Promise { // 文件有可能是 app-ios 里边的,因为编译到 android 时,为了保证不报错,可能会去读取 ios 下的 uts if (filename.includes('app-ios')) { @@ -112,6 +115,7 @@ export async function runKotlinDev( outputDir, sourceMap: true, components, + isPlugin, })) as RunKotlinDevResult if (!result) { return @@ -305,7 +309,7 @@ const DEFAULT_IMPORTS = [ export async function compile( filename: string, - { inputDir, outputDir, sourceMap, components }: ToKotlinOptions + { inputDir, outputDir, sourceMap, components, isPlugin }: ToKotlinOptions ) { const { bundle, UTSTarget } = getUTSCompiler() // let time = Date.now() @@ -340,7 +344,7 @@ export async function compile( const result = await bundle(UTSTarget.KOTLIN, { input, output: { - isPlugin: true, + isPlugin, outDir: outputDir, package: pluginPackage, sourceMap: sourceMap ? resolveUTSSourceMapPath() : false, diff --git a/packages/uni-uts-v1/src/swift.ts b/packages/uni-uts-v1/src/swift.ts index a0c732ba5c8d26eedaedc05db9c5dede07555efa..661aa0c7324fa7c88065228dd446cc0ab50192e7 100644 --- a/packages/uni-uts-v1/src/swift.ts +++ b/packages/uni-uts-v1/src/swift.ts @@ -35,7 +35,8 @@ function parseSwiftPackage(filename: string) { export async function runSwiftProd( filename: string, - components: Record + components: Record, + isPlugin = true ) { // 文件有可能是 app-android 里边的,因为编译到 ios 时,为了保证不报错,可能会去读取 android 下的 uts if (filename.includes('app-android')) { @@ -48,6 +49,7 @@ export async function runSwiftProd( outputDir, sourceMap: true, components, + isPlugin, }) if (!result) { return @@ -75,7 +77,8 @@ export type RunSwiftDevResult = UTSResult & { let isEnvReady = true export async function runSwiftDev( filename: string, - components: Record + components: Record, + isPlugin = true ) { // 文件有可能是 app-android 里边的,因为编译到 ios 时,为了保证不报错,可能会去读取 android 下的 uts if (filename.includes('app-android')) { @@ -106,6 +109,7 @@ export async function runSwiftDev( outputDir, sourceMap: true, components, + isPlugin, })) as RunSwiftDevResult if (!result) { @@ -165,7 +169,7 @@ function isCliProject(projectPath: string) { export async function compile( filename: string, - { inputDir, outputDir, sourceMap, components }: ToSwiftOptions + { inputDir, outputDir, sourceMap, components, isPlugin }: ToSwiftOptions ) { const { bundle, UTSTarget } = getUTSCompiler() // let time = Date.now() @@ -194,7 +198,7 @@ export async function compile( const result = await bundle(UTSTarget.SWIFT, { input, output: { - isPlugin: true, + isPlugin, outDir: outputDir, package: namespace, sourceMap: sourceMap ? resolveUTSSourceMapPath() : false, diff --git a/packages/uni-uts-v1/src/utils.ts b/packages/uni-uts-v1/src/utils.ts index 47ceb7c5c52ca2158d9e32adeaf6cfe1f6739a0e..bea3ab75eaf753a9eefe2c56e2fbd59a061d5ead 100644 --- a/packages/uni-uts-v1/src/utils.ts +++ b/packages/uni-uts-v1/src/utils.ts @@ -18,6 +18,7 @@ interface ToOptions { outputDir: string sourceMap: boolean components: Record + isPlugin: boolean } export type ToKotlinOptions = ToOptions export type ToSwiftOptions = ToOptions diff --git a/packages/uni-uts-v1/src/uvue/index.ts b/packages/uni-uts-v1/src/uvue/index.ts index 09a81eca9565adb485a7bb89b4b419e5298f2ded..4afe8e469900ae23dd73851dccb834654b5769b5 100644 --- a/packages/uni-uts-v1/src/uvue/index.ts +++ b/packages/uni-uts-v1/src/uvue/index.ts @@ -22,12 +22,7 @@ const DEFAULT_IMPORTS = [ 'io.dcloud.uts.vue.*', 'io.dcloud.uts.vue.shared.*', 'io.dcloud.uts.vue.reactivity.*', - 'io.dcloud.uniapp.appframe.*', - 'io.dcloud.uniapp.interfaces.*', - 'io.dcloud.uniapp.interfaces.htmlex.*', - 'io.dcloud.uniapp.interfaces.htmlex.event.*', - 'io.dcloud.uniapp.dom.*', - 'io.dcloud.uniapp.dom.node.*', + 'io.dcloud.uniapp.runtime.*', ] export interface CompileAppOptions { diff --git a/packages/uts-darwin-arm64/uts.darwin-arm64.node b/packages/uts-darwin-arm64/uts.darwin-arm64.node index 0e6de5c8b4e884904bc92372dc4779a364058c6c..a8dca636f20533937fc4d1dca26da936c6f1c6a2 100755 Binary files a/packages/uts-darwin-arm64/uts.darwin-arm64.node and b/packages/uts-darwin-arm64/uts.darwin-arm64.node differ diff --git a/packages/uts-darwin-x64/uts.darwin-x64.node b/packages/uts-darwin-x64/uts.darwin-x64.node index e61f23aefb2582878e279e3533bfe7f091c10efb..f79201c3c62d476743aa1bba810af6b746ee865f 100755 Binary files a/packages/uts-darwin-x64/uts.darwin-x64.node and b/packages/uts-darwin-x64/uts.darwin-x64.node differ diff --git a/packages/uts-linux-x64-gnu/uts.linux-x64-gnu.node b/packages/uts-linux-x64-gnu/uts.linux-x64-gnu.node index 9a3fe77cd965c3f1c366da928a706f0c9af6a790..3ac92dc7fbbd232137b0ce595294f7eddd381cb3 100755 Binary files a/packages/uts-linux-x64-gnu/uts.linux-x64-gnu.node and b/packages/uts-linux-x64-gnu/uts.linux-x64-gnu.node differ diff --git a/packages/uts-linux-x64-musl/uts.linux-x64-musl.node b/packages/uts-linux-x64-musl/uts.linux-x64-musl.node index 2c08d3b252be1d2b71dffdf89c9171f5648a4a10..852dcd371d0752d55167177fbfbce1067eb45f02 100755 Binary files a/packages/uts-linux-x64-musl/uts.linux-x64-musl.node and b/packages/uts-linux-x64-musl/uts.linux-x64-musl.node differ diff --git a/packages/uts-win32-ia32-msvc/uts.win32-ia32-msvc.node b/packages/uts-win32-ia32-msvc/uts.win32-ia32-msvc.node index 85c1ba218ba9df5b7174dfa970e2730af56ed060..36eaeb423d94ac7d8454e9494ce2d53166b3102b 100644 Binary files a/packages/uts-win32-ia32-msvc/uts.win32-ia32-msvc.node and b/packages/uts-win32-ia32-msvc/uts.win32-ia32-msvc.node differ diff --git a/packages/uts-win32-x64-msvc/uts.win32-x64-msvc.node b/packages/uts-win32-x64-msvc/uts.win32-x64-msvc.node index 0513051d57a43111efc3088eacffc3996ef37724..3ceb58304539714eb63f7c1829e629cd6bb19661 100755 Binary files a/packages/uts-win32-x64-msvc/uts.win32-x64-msvc.node and b/packages/uts-win32-x64-msvc/uts.win32-x64-msvc.node differ