From 621af78d03999d6f43c103657231377465818bff Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Sun, 2 Feb 2025 05:49:19 -0500 Subject: [PATCH 1/7] changed etsconfig --- arkoala-arkts/user/src/ets/etsconfig.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arkoala-arkts/user/src/ets/etsconfig.json b/arkoala-arkts/user/src/ets/etsconfig.json index 2e88d85ca..3b706c4e1 100644 --- a/arkoala-arkts/user/src/ets/etsconfig.json +++ b/arkoala-arkts/user/src/ets/etsconfig.json @@ -1,7 +1,7 @@ { - "extends": "../../../arkui/config/etsconfig-base.json", + "extends": "../arkui/config/etsconfig-base.json", "include": [ - "./**/*.ets" + "src/ets/**/*.ets" ], "compilerOptions": { "types": [], @@ -9,11 +9,11 @@ "rootDirs": [ "." ], - "outDir": "../../build/ets-junk", + "outDir": "./build/ets-junk", "plugins": [ { "transform": "@koalaui/ets-plugin/build/lib/src/ArkExpander.js", - "destination": "../../build/generated", + "destination": "./build/generated", "arkui": "@koalaui/arkts-arkui" } ] -- Gitee From 968ced9415d5b08924b2f0a26e9edcaa49347ee0 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Sun, 2 Feb 2025 05:49:58 -0500 Subject: [PATCH 2/7] moved etsconfig --- arkoala-arkts/user/{src/ets => }/etsconfig.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename arkoala-arkts/user/{src/ets => }/etsconfig.json (100%) diff --git a/arkoala-arkts/user/src/ets/etsconfig.json b/arkoala-arkts/user/etsconfig.json similarity index 100% rename from arkoala-arkts/user/src/ets/etsconfig.json rename to arkoala-arkts/user/etsconfig.json -- Gitee From cdfe9a32d6791eea3ac7197501348415ec48ee5b Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Sun, 2 Feb 2025 06:01:20 -0500 Subject: [PATCH 3/7] Able to compile user --- arkoala-arkts/user/arktsconfig-run-unmemoized.json | 2 +- arkoala-arkts/user/package.json | 2 +- arkoala-arkts/user/tsconfig-unmemoize.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arkoala-arkts/user/arktsconfig-run-unmemoized.json b/arkoala-arkts/user/arktsconfig-run-unmemoized.json index 663efbf66..b682444a9 100644 --- a/arkoala-arkts/user/arktsconfig-run-unmemoized.json +++ b/arkoala-arkts/user/arktsconfig-run-unmemoized.json @@ -5,7 +5,7 @@ "baseUrl": ".", "paths": { "app": [ - "./build/unmemoized/build/generated" + "./build/unmemoized/build/generated/src/ets" ], "@koalaui/compat": [ "../../incremental/compat/src/arkts" diff --git a/arkoala-arkts/user/package.json b/arkoala-arkts/user/package.json index e11160f60..461912718 100644 --- a/arkoala-arkts/user/package.json +++ b/arkoala-arkts/user/package.json @@ -5,7 +5,7 @@ "scripts": { "clean": "rimraf build generated unmemoized js_output abc lib app/user/build", "compile:plugin": "cd ../../arkoala/ets-plugin && npm run compile", - "compile:ets": "npm run compile:plugin && cd src/ets && ets-tsc -p ./etsconfig.json", + "compile:ets": "npm run compile:plugin && ets-tsc -p ./etsconfig.json", "unmemoize": "npm run compile:ets && ets-tsc -p tsconfig-unmemoize.json", "unmemoize:runtime": "npm run unmemoize --prefix ../../incremental/runtime", "unmemoize:arkui-no-common": "npm run unmemoize --prefix ../arkui", diff --git a/arkoala-arkts/user/tsconfig-unmemoize.json b/arkoala-arkts/user/tsconfig-unmemoize.json index cc086dbc0..d95a7d90e 100644 --- a/arkoala-arkts/user/tsconfig-unmemoize.json +++ b/arkoala-arkts/user/tsconfig-unmemoize.json @@ -29,7 +29,7 @@ "../arkui/src/ohos.router.ts" ], "app/*": [ - "./build/generated/*" + "./build/generated/src/ets/*" ] } }, -- Gitee From d660a19c3134a71e1846085ee2d239d1a402e111 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Sun, 2 Feb 2025 06:55:04 -0500 Subject: [PATCH 4/7] moved shopping config --- arkoala-arkts/shopping/{src/ets => }/etsconfig.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename arkoala-arkts/shopping/{src/ets => }/etsconfig.json (100%) diff --git a/arkoala-arkts/shopping/src/ets/etsconfig.json b/arkoala-arkts/shopping/etsconfig.json similarity index 100% rename from arkoala-arkts/shopping/src/ets/etsconfig.json rename to arkoala-arkts/shopping/etsconfig.json -- Gitee From df1979c9b23a675081dbbce207e71a9dbf08aad3 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Sun, 2 Feb 2025 07:25:41 -0500 Subject: [PATCH 5/7] shopping is buildable --- .../shopping/arktsconfig-run-unmemoized.json | 2 +- arkoala-arkts/shopping/etsconfig.json | 15 ++++++--------- arkoala-arkts/shopping/package.json | 2 +- arkoala-arkts/shopping/tsconfig-unmemoize.json | 2 +- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/arkoala-arkts/shopping/arktsconfig-run-unmemoized.json b/arkoala-arkts/shopping/arktsconfig-run-unmemoized.json index 20e3c0651..fc053c3b0 100644 --- a/arkoala-arkts/shopping/arktsconfig-run-unmemoized.json +++ b/arkoala-arkts/shopping/arktsconfig-run-unmemoized.json @@ -5,7 +5,7 @@ "baseUrl": ".", "paths": { "app": [ - "./build/unmemoized/build/generated" + "./build/unmemoized/build/generated/src/ets" ], "@koalaui/compat": [ "../../incremental/compat/src/arkts" diff --git a/arkoala-arkts/shopping/etsconfig.json b/arkoala-arkts/shopping/etsconfig.json index 306a68d20..cdb97ea25 100644 --- a/arkoala-arkts/shopping/etsconfig.json +++ b/arkoala-arkts/shopping/etsconfig.json @@ -1,28 +1,25 @@ { - "extends": "../../../arkui/config/etsconfig-base.json", + "extends": "../arkui/config/etsconfig-base.json", "include": [ - "./**/*.ets" + "./src/ets/**/*.ets" ], "compilerOptions": { "types": [], "baseUrl": ".", - "rootDirs": [ - "." - ], - "outDir": "../../build/ets-junk", + "outDir": "./build/ets-junk", "plugins": [ { "transform": "@koalaui/ets-plugin/build/lib/src/ArkExpander.js", - "destination": "../../build/generated", + "destination": "./build/generated", "arkui": "@koalaui/arkts-arkui" } ], "paths": { "@ohos.*": [ - "../../../../arkoala/arkui-common/interface_sdk-js/api/@ohos.*" + "../../arkoala/arkui-common/interface_sdk-js/api/@ohos.*" ], "@system.*": [ - "../../../../arkoala/arkui-common/interface_sdk-js/api/@system.*" + "../../arkoala/arkui-common/interface_sdk-js/api/@system.*" ] } } diff --git a/arkoala-arkts/shopping/package.json b/arkoala-arkts/shopping/package.json index e6abfb108..41e451f25 100644 --- a/arkoala-arkts/shopping/package.json +++ b/arkoala-arkts/shopping/package.json @@ -5,7 +5,7 @@ "scripts": { "clean": "rimraf build generated unmemoized js_output abc lib app/shopping/build app/shopping/libs", "compile:plugin": "cd ../../arkoala/ets-plugin && npm run compile", - "compile:ets": "npm run compile:plugin && cd src/ets && ets-tsc -p ./etsconfig.json", + "compile:ets": "npm run compile:plugin && ets-tsc -p ./etsconfig.json", "unmemoize": "npm run compile:ets && ets-tsc -p tsconfig-unmemoize.json", "unmemoize:runtime": "npm run unmemoize --prefix ../../incremental/runtime", "unmemoize:arkui-no-common": "npm run unmemoize --prefix ../arkui", diff --git a/arkoala-arkts/shopping/tsconfig-unmemoize.json b/arkoala-arkts/shopping/tsconfig-unmemoize.json index 7ae54a23c..99d345323 100644 --- a/arkoala-arkts/shopping/tsconfig-unmemoize.json +++ b/arkoala-arkts/shopping/tsconfig-unmemoize.json @@ -36,7 +36,7 @@ "../arkui/src/ohos.router.ts" ], "app/*": [ - "./build/generated/*" + "./build/generated/src/ets/*" ] } }, -- Gitee From e2c7a3d099c5c8a67e761d362f89f8a9aacd7207 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Mon, 3 Feb 2025 02:13:56 +0300 Subject: [PATCH 6/7] Started ui2abc --- arkoala-arkts/user/package.json | 2 +- arkoala/ets-plugin/src/ArkExpander.ts | 11 +- incremental/tools/ui2abc/package.json | 24 ++++ incremental/tools/ui2abc/ui2abc.ts | 154 ++++++++++++++++++++++++++ 4 files changed, 186 insertions(+), 5 deletions(-) create mode 100644 incremental/tools/ui2abc/package.json create mode 100644 incremental/tools/ui2abc/ui2abc.ts diff --git a/arkoala-arkts/user/package.json b/arkoala-arkts/user/package.json index 461912718..b629b5e27 100644 --- a/arkoala-arkts/user/package.json +++ b/arkoala-arkts/user/package.json @@ -5,7 +5,7 @@ "scripts": { "clean": "rimraf build generated unmemoized js_output abc lib app/user/build", "compile:plugin": "cd ../../arkoala/ets-plugin && npm run compile", - "compile:ets": "npm run compile:plugin && ets-tsc -p ./etsconfig.json", + "compile:ets": "npm run compile:plugin && ../../incremental/tools/ui2abc/lib/ui2abc.js --config ui2abc.json", "unmemoize": "npm run compile:ets && ets-tsc -p tsconfig-unmemoize.json", "unmemoize:runtime": "npm run unmemoize --prefix ../../incremental/runtime", "unmemoize:arkui-no-common": "npm run unmemoize --prefix ../arkui", diff --git a/arkoala/ets-plugin/src/ArkExpander.ts b/arkoala/ets-plugin/src/ArkExpander.ts index 500f86317..79ee94510 100644 --- a/arkoala/ets-plugin/src/ArkExpander.ts +++ b/arkoala/ets-plugin/src/ArkExpander.ts @@ -179,15 +179,18 @@ export default function arkExpander(program: ts.Program, userPluginOptions: ArkT moduleInfo: userPluginOptions.moduleInfo } const typeChecker = program.getTypeChecker() - prepareDestination(pluginOptions.destination) const entryTracker = new EntryTracker(pluginOptions.source) return (ctx: ts.TransformationContext) => { + const configFile = ctx.getCompilerOptions().configFilePath as string + const destination = path.join(path.dirname(configFile), pluginOptions.destination) + prepareDestination(destination) + return (sourceFile: ts.SourceFile) => { if (!fileIsEligible(sourceFile.fileName)) { console.log("Verbatim TS: ", sourceFile.fileName) - printSourceFile(sourceFile, pluginOptions.source, pluginOptions.destination, ".ts") + printSourceFile(sourceFile, pluginOptions.source, destination, ".ts") return sourceFile } else { console.log("ETS->TS: " + path.normalize(sourceFile.fileName)) @@ -195,9 +198,9 @@ export default function arkExpander(program: ts.Program, userPluginOptions: ArkT let final = arkExpandFile(sourceFile, pluginOptions.arkui, typeChecker, ctx, extras, entryTracker, pluginOptions.moduleInfo) - printSourceFile(final, pluginOptions.source, pluginOptions.destination) + printSourceFile(final, pluginOptions.source, destination) if (pluginOptions.arkui != "@koalaui/arkts-arkui") { - updateRouterDestinationsFile(pluginOptions.destination, entryTracker) + updateRouterDestinationsFile(destination, entryTracker) } // if (structTranslator.entryFile) { diff --git a/incremental/tools/ui2abc/package.json b/incremental/tools/ui2abc/package.json new file mode 100644 index 000000000..cab955f21 --- /dev/null +++ b/incremental/tools/ui2abc/package.json @@ -0,0 +1,24 @@ +{ + "name": "@koalaui/ui2abc", + "version": "1.5.0+devel", + "description": "", + "main": "lib/ui2abc.js", + "bin": "lib/ui2abc.js", + "scripts": { + "clean": "rimraf out lib", + "compile": "npx tsc ui2abc.ts --target esnext --module commonjs --outDir lib && chmod a+x lib/ui2abc.js" + }, + "keywords": [], + "dependencies": { + "commander": "^10.0.0", + "minimatch": "10.0.1" + }, + "devDependencies": { + "@types/node": "^18.0.0", + "typescript": "^4.9.5", + "webpack": "5.95.0", + "copy-webpack-plugin": "12.0.2", + "webpack-cli": "5.1.4", + "rimraf": "^6.0.1" + } +} diff --git a/incremental/tools/ui2abc/ui2abc.ts b/incremental/tools/ui2abc/ui2abc.ts new file mode 100644 index 000000000..78ceb39e5 --- /dev/null +++ b/incremental/tools/ui2abc/ui2abc.ts @@ -0,0 +1,154 @@ +#!/usr/bin/env node + +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { program } from "commander" +import * as fs from "fs" +import * as path from "path" +import { spawnSync } from "child_process" +import { minimatch } from 'minimatch' + + +const readdirSyncRecursive: (dir: string) => string[] = (dir: string) => + fs.readdirSync(dir).reduce((files: string[], file: string) => { + const name = path.join(dir, file) + return fs.lstatSync(name).isDirectory() ? [...files, ...readdirSyncRecursive(name)] : [...files, name] + }, []) + + +function findMatching(base: string, include: string[], exclude: string[]): string[] { + return readdirSyncRecursive(base) + .map(it => path.resolve(it)) + .filter(it => include.some(value => minimatch(it, path.join(base, value), { matchBase: true }))) + .filter(it => !exclude.some(value => minimatch(it, path.join(base, value), { matchBase: true }))) +} + +function findFiles(uiConfigFile: string): string[] { + const config = JSON.parse(fs.readFileSync(uiConfigFile, 'utf8')) + const baseDir = path.resolve(path.dirname(uiConfigFile)) + const include = (config.include as string[]).map(it => it.replace('\\.', '.')) + console.log("include", include) + const exclude = config.exclude ? (config.exclude as string[]).map(it => it.replace('\\.', '.')) : [] + const files = findMatching(baseDir, include, exclude) + return files +} + +function buildDir(configFile: string): string { + const configDir = path.dirname(configFile) + const build = path.resolve(path.join(configDir, "build")) + fs.mkdirSync(build, { recursive: true }) + return build +} + +function generateEtsConfig(inputFile: string, userConfigFile: string, outputFile: string): string { + console.log("userConfigFile", userConfigFile) + const etsConfigDir = buildDir(userConfigFile) + console.log("etsConfigDir", etsConfigDir) + const build = "." + console.log("build", build) + const includeFile = path.relative(etsConfigDir, inputFile) + console.log("includeFile", includeFile) + const baseUrl = "." + console.log("baseUrl", baseUrl) + const destination = `${build}/generated/` + console.log("destination", destination) + + + const etsConfig = { + extends: "@koalaui/arkts-arkui/config/etsconfig-base.json", + include: [ + includeFile + ], + compilerOptions: { + types: [], + baseUrl: baseUrl, + rootDirs: [ + baseUrl + ], + outDir: `${build}/ets-junk`, + plugins: [ + { + transform: "@koalaui/ets-plugin/build/lib/src/ArkExpander.js", + destination: destination, + arkui: "@koalaui/arkts-arkui" + } + ] + } + } + + return JSON.stringify(etsConfig, undefined, 4) +} + +function createEtsConfig(file: string, config: string, output: string): string { + const etsConfigFile = path.join(buildDir(config), "etsconfig.json") + console.log(`Producing ${etsConfigFile}`) + fs.writeFileSync(etsConfigFile, generateEtsConfig(file, config, output)) + return etsConfigFile +} + +function runCmd(command: string, args: string[]) { + + console.log(`${command} ${args.join(" ")}`) + const result = spawnSync(command, args) + console.log(result.stdout.toString()) + console.log(result.stderr.toString()) + if (result.signal) { + console.log(`${command}: signal ${result.signal}`) + return false + } + if (result.status != 0) { + console.log(`${command} returned ${result.status}`) + return false + } + if (result.error) { + console.log("${command} error:", result.error) + return false + } + return true +} +function etsTsc(file: string, etsConfig: string) { + let npx = process.platform === "win32" ? "npx.cmd" : "npx" + return runCmd(npx, ["ets-tsc", "-p", etsConfig]) +} + +function ui2abc(file: string, config: string, output: string) { + const files = findFiles(config) + console.log(files) + files.forEach(file => { + const etsConfig = createEtsConfig(file, config, output) + etsTsc(file, etsConfig) + + /* + const memoConfig = generateMemoConfig(file, config, output) + memoTsc(file, memoConfig, output) + const arktsConfig = generateArktsConfig(file, config, output) + es2panda(file, arktsConfig, output) + */ + }) +} + +export function main() { + const options = program + .option('--file ', 'Path to input .ets file') + .option('--config ', 'Path to arktsconfig.json file') + .option('--output ', 'Path to output .abc file') + .parse() + .opts() + + ui2abc(options.file, options.config, options.output) +} + +main() \ No newline at end of file -- Gitee From 13e3ab9d87f224df2635d3b36f3b0faf08aea273 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Mon, 3 Feb 2025 02:14:27 +0300 Subject: [PATCH 7/7] more --- arkoala-arkts/user/ui2abc.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 arkoala-arkts/user/ui2abc.json diff --git a/arkoala-arkts/user/ui2abc.json b/arkoala-arkts/user/ui2abc.json new file mode 100644 index 000000000..403ce3023 --- /dev/null +++ b/arkoala-arkts/user/ui2abc.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "package": "@koalaui/user", + "outDir": "build/abc", + "baseUrl": "." + }, + "include": [ + "./src/ets/**/*.ets" + ] +} -- Gitee