diff --git a/arkoala-arkts/.gitlab-ci.yml b/arkoala-arkts/.gitlab-ci.yml index aaaa07fef1cb9651ed71f68ff938e38cc3e708be..2f836098fb20404832f277050cdd7855e5109f7d 100644 --- a/arkoala-arkts/.gitlab-ci.yml +++ b/arkoala-arkts/.gitlab-ci.yml @@ -151,6 +151,23 @@ install node modules (arkoala-arkts): script: - npm run build:common:inc:capi --prefix incremental/common + run capi plugin demo (w/plugin): + stage: build + interruptible: true + extends: + - .linux-vm-shell-task + needs: + - install node modules (arkoala-arkts) + - install node modules (incremental) + - install node modules (interop) + - regenerate plugin-api + before_script: + - !reference [.setup, script] + - npm run panda:sdk:install --prefix arkoala-arkts + # need the library as well as the plugins built + - npm run run --prefix arkoala-arkts/libarkts + script: + - npm run run:user:pure-sts --prefix arkoala-arkts/trivial/user build interop.abc: stage: build diff --git a/arkoala-arkts/arkui/package.json b/arkoala-arkts/arkui/package.json index 2654aa0db48d4d7adeed9d719dbad7a3c6ed97e5..b09a5f0505e878a4166161b0217ba7de4b83e1d4 100644 --- a/arkoala-arkts/arkui/package.json +++ b/arkoala-arkts/arkui/package.json @@ -10,6 +10,6 @@ "build:arkui-no-common:inc": "npm run unmemoize && fast-arktsc --input-files ./arktsconfig-unmemoized.json --output-dir ./build --compiler ../../incremental/tools/panda/arkts/arktsc --link-name arkui-no-common && ninja ${NINJA_OPTIONS} -f build/build.ninja", "build:arkui-no-common": "npm run unmemoize && fast-arktsc --input-files ./arktsconfig-unmemoized.json --output-dir ./build --compiler ../../incremental/tools/panda/arkts/arktsc --link-name arkui-no-common && ninja ${NINJA_OPTIONS} -f build/build.ninja", "unmemoize": "ets-tsc -b ./tsconfig-unmemoize.json && cp -r ./src/generated/arkts ./build/unmemoized/src/generated", - "build:arkui:pure-sts": "../../incremental/tools/panda/arkts/arktsc --arktsconfig arktsconfig-pure-sts.json" + "build:arkui:pure-sts": "mkdir -p build/sts/abc && ../../incremental/tools/panda/arkts/arktsc --arktsconfig arktsconfig-pure-sts.json" } } diff --git a/arkoala-arkts/libarkts/arktsconfig.json b/arkoala-arkts/libarkts/arktsconfig.json index c3868f430adba4d886cc76f2b9bd0bcbdb1138db..85e9e51f6d825c201ca549ce35952deed24d1685 100644 --- a/arkoala-arkts/libarkts/arktsconfig.json +++ b/arkoala-arkts/libarkts/arktsconfig.json @@ -9,7 +9,9 @@ }, { "transform": "./plugins/build/src/parsed-stage-plugin.js", - "stage": "parsed" + "stage": "parsed", + "arkui": "../../../arkui/src/sts" + }, { "transform": "./plugins/build/src/checked-stage-plugin.js", diff --git a/arkoala-arkts/libarkts/plugins/src/component-transformer.ts b/arkoala-arkts/libarkts/plugins/src/component-transformer.ts index 099f0590d5a10c3f7d8c66424e14551b64ff2016..28a48ec8e36c4af891be69761433ca0a5caf68cd 100644 --- a/arkoala-arkts/libarkts/plugins/src/component-transformer.ts +++ b/arkoala-arkts/libarkts/plugins/src/component-transformer.ts @@ -17,7 +17,15 @@ import { nullptr } from "@koalaui/interop"; import * as arkts from "@koalaui/libarkts" import { AbstractVisitor } from "./AbstractVisitor"; +export interface ComponentTransformerOptions{ + arkui: string +} + export class ComponentTransformer extends AbstractVisitor { + constructor(private options?: ComponentTransformerOptions) { + super() + } + private context: { componentNames: string[] } = { componentNames: [] } isComponentStruct(node: arkts.StructDeclaration): boolean { @@ -27,8 +35,8 @@ export class ComponentTransformer extends AbstractVisitor { createImportDeclaration() { return arkts.factory.createImportDeclaration( - // arkts.factory.createStringLiteral('@ohos.arkui.runtime'), - arkts.factory.createStringLiteral('../../../arkui/src/sts/arkui'), + // TODO: es2panda has already resolved the "paths" section + arkts.factory.createStringLiteral(this.options?.arkui ?? '@ohos.arkui.runtime'), [ arkts.factory.createImportSpecifier( arkts.factory.createIdentifier('StructBase'), diff --git a/arkoala-arkts/libarkts/plugins/src/parsed-stage-plugin.ts b/arkoala-arkts/libarkts/plugins/src/parsed-stage-plugin.ts index 79186e945909c20cb6c117396371649e7141fdab..9cd0e6187333fdfd3fa34338d95e94ced346d36a 100644 --- a/arkoala-arkts/libarkts/plugins/src/parsed-stage-plugin.ts +++ b/arkoala-arkts/libarkts/plugins/src/parsed-stage-plugin.ts @@ -1,16 +1,12 @@ import * as ts from "@koalaui/libarkts" -import { PrintVisitor } from './print-visitor' -import { BuilderLambdaTransformer } from './builder-lambda-transformer' -import { ComponentTransformer } from './component-transformer' +import { ComponentTransformer, ComponentTransformerOptions } from './component-transformer' -export interface TransformerOptions { - trace?: boolean, -} export default function exampleTransformer( - userPluginOptions?: TransformerOptions + userPluginOptions?: ComponentTransformerOptions ) { + console.log("WRAPPER: ", userPluginOptions) return (node: ts.EtsScript) => { - return new ComponentTransformer().visitor(node) + return new ComponentTransformer(userPluginOptions).visitor(node) } } diff --git a/arkoala-arkts/libarkts/src/es2panda.ts b/arkoala-arkts/libarkts/src/es2panda.ts index 6dd1435ca21c2633e6b3601c0d2d514d64ecfbfd..2b2743e4806bfb44b43f858b0ed57f4f2ef70178 100644 --- a/arkoala-arkts/libarkts/src/es2panda.ts +++ b/arkoala-arkts/libarkts/src/es2panda.ts @@ -124,11 +124,11 @@ function invokeWithPlugins(configPath: string, filePath: string, outputPath: str function loadPlugin(configDir: string, jsonPlugin: any) { const pluginPath = jsonPlugin.transform ?? throwError(`arktsconfig plugins objects should specify transform`) /** TODO: read and pass plugin options */ - const options = jsonPlugin.options ?? {} const plugin = (pluginPath.startsWith(".") || pluginPath.startsWith("/")) ? path.resolve(configDir, pluginPath) : pluginPath - return require(plugin).default() + const pluginFunction: (config?: any) => any = require(plugin).default(jsonPlugin) + return pluginFunction } function selectPlugins(configDir: string, plugins: any[], stage: string): ((arg: AstNode) => AstNode) | undefined { diff --git a/arkoala-arkts/navigation/user/arktsconfig-pure-sts.json b/arkoala-arkts/navigation/user/arktsconfig-pure-sts.json deleted file mode 100644 index c6c229b254e72094ce8456824a1142c6d9686e4b..0000000000000000000000000000000000000000 --- a/arkoala-arkts/navigation/user/arktsconfig-pure-sts.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "package": "@ohos.example", - "outDir": "build/sts/abc", - "baseUrl": ".", - "paths": { - "@ohos.arkui": ["../arkui/src/sts"] - }, - "plugins": [ - { - "transform": "@koalaui/libarkts/plugins/printer-plugin", - "stage": "parsed" - }, - { - "transform": "@koalaui/libarkts/plugins/parsed-stage-plugin", - "stage": "parsed" - }, - { - "transform": "@koalaui/libarkts/plugins/checked-stage-plugin", - "stage": "checked" - } - ] - }, - "include": [ - "./src/ets/hello.sts" - ] -} diff --git a/arkoala-arkts/navigation/user/package.json b/arkoala-arkts/navigation/user/package.json index 8154ca0995da2d057578de53b0b652f260c516fc..11836c04de0adc6af14197b88dca7800c341a168 100644 --- a/arkoala-arkts/navigation/user/package.json +++ b/arkoala-arkts/navigation/user/package.json @@ -13,7 +13,6 @@ "unmemoize:all": "npm run unmemoize:runtime && npm run unmemoize:arkui-no-common && npm run unmemoize:arkui-common && npm run unmemoize", "build:user": "npm run unmemoize:all && npm run build:user:inc", "build:user:inc": "fast-arktsc --input-files ./arktsconfig-run-unmemoized.json --output-dir ./build --compiler ../../../incremental/tools/panda/arkts/arktsc --link-name user && ninja ${NINJA_OPTIONS} -f build/build.ninja", - "build:user:pure-sts": "../../../incremental/tools/panda/arkts/arktsc-capi --file src/sts/hello.sts --arktsconfig arktsconfig-pure-sts.json --output build/sts/abc/hello.abc --dump-plugin-ast", "pack": "npm run cli-tools:check && cd app && DEVECO_SDK_HOME=../../../../arkoala/ohos-sdk/ohos-sdk ../../command-line-tools/hvigor/bin/hvigorw --no-daemon --mode module -p product=default -p module=user@default assembleHar", "har-arm32": "npm run build:user && npm run --prefix ../../../arkoala/ohos-sdk download && node scripts/build-har.mjs --name user --arch arm32 && npm run pack", "har-arm64": "npm run build:user && npm run --prefix ../../../arkoala/ohos-sdk download && node scripts/build-har.mjs --name user --arch arm64 && npm run pack", diff --git a/arkoala-arkts/shopping/user/package.json b/arkoala-arkts/shopping/user/package.json index 8154ca0995da2d057578de53b0b652f260c516fc..11836c04de0adc6af14197b88dca7800c341a168 100644 --- a/arkoala-arkts/shopping/user/package.json +++ b/arkoala-arkts/shopping/user/package.json @@ -13,7 +13,6 @@ "unmemoize:all": "npm run unmemoize:runtime && npm run unmemoize:arkui-no-common && npm run unmemoize:arkui-common && npm run unmemoize", "build:user": "npm run unmemoize:all && npm run build:user:inc", "build:user:inc": "fast-arktsc --input-files ./arktsconfig-run-unmemoized.json --output-dir ./build --compiler ../../../incremental/tools/panda/arkts/arktsc --link-name user && ninja ${NINJA_OPTIONS} -f build/build.ninja", - "build:user:pure-sts": "../../../incremental/tools/panda/arkts/arktsc-capi --file src/sts/hello.sts --arktsconfig arktsconfig-pure-sts.json --output build/sts/abc/hello.abc --dump-plugin-ast", "pack": "npm run cli-tools:check && cd app && DEVECO_SDK_HOME=../../../../arkoala/ohos-sdk/ohos-sdk ../../command-line-tools/hvigor/bin/hvigorw --no-daemon --mode module -p product=default -p module=user@default assembleHar", "har-arm32": "npm run build:user && npm run --prefix ../../../arkoala/ohos-sdk download && node scripts/build-har.mjs --name user --arch arm32 && npm run pack", "har-arm64": "npm run build:user && npm run --prefix ../../../arkoala/ohos-sdk download && node scripts/build-har.mjs --name user --arch arm64 && npm run pack", diff --git a/arkoala-arkts/trivial/user/arktsconfig-pure-sts.json b/arkoala-arkts/trivial/user/arktsconfig-pure-sts.json index 8a930b0f02dc4fb1d57008d23ca521710a0e6401..551fb7ed8776980bbc9bca07f17a1f373fae2bea 100644 --- a/arkoala-arkts/trivial/user/arktsconfig-pure-sts.json +++ b/arkoala-arkts/trivial/user/arktsconfig-pure-sts.json @@ -4,16 +4,21 @@ "outDir": "build/sts/abc", "baseUrl": ".", "paths": { - "@ohos.arkui": ["../arkui/src/sts/arkui.sts"], - "@ohos.arkui.Button": ["../arkui/src/sts/arkui.sts"], - "@ohos.arkui.Column": ["../arkui/src/sts/arkui.sts"], - "@ohos.arkui.Color": ["../arkui/src/sts/arkui.sts"], - "@ohos.arkui.Text": ["../arkui/src/sts/arkui.sts"] + "@ohos.arkui": ["../../arkui/src/sts"] }, "plugins": [ { - "transform": "../libarkts/examples/build/src/example-parsed-transformer.js", + "transform": "@koalaui/libarkts/plugins/printer-plugin", "stage": "parsed" + }, + { + "transform": "@koalaui/libarkts/plugins/parsed-stage-plugin", + "stage": "parsed", + "arkui": "../../../../arkui/src/sts" + }, + { + "transform": "@koalaui/libarkts/plugins/checked-stage-plugin", + "stage": "checked" } ] }, diff --git a/arkoala-arkts/trivial/user/package.json b/arkoala-arkts/trivial/user/package.json index 8154ca0995da2d057578de53b0b652f260c516fc..d92b95543d13be0b6daac43ef27b04b0ef9dfe57 100644 --- a/arkoala-arkts/trivial/user/package.json +++ b/arkoala-arkts/trivial/user/package.json @@ -13,7 +13,8 @@ "unmemoize:all": "npm run unmemoize:runtime && npm run unmemoize:arkui-no-common && npm run unmemoize:arkui-common && npm run unmemoize", "build:user": "npm run unmemoize:all && npm run build:user:inc", "build:user:inc": "fast-arktsc --input-files ./arktsconfig-run-unmemoized.json --output-dir ./build --compiler ../../../incremental/tools/panda/arkts/arktsc --link-name user && ninja ${NINJA_OPTIONS} -f build/build.ninja", - "build:user:pure-sts": "../../../incremental/tools/panda/arkts/arktsc-capi --file src/sts/hello.sts --arktsconfig arktsconfig-pure-sts.json --output build/sts/abc/hello.abc --dump-plugin-ast", + "build:user:pure-sts": "npm run build:arkui:pure-sts --prefix ../../arkui && ../../../incremental/tools/panda/arkts/arktsc-capi --file src/sts/hello.sts --arktsconfig arktsconfig-pure-sts.json --output build/sts/abc/hello.abc --dump-plugin-ast", + "run:user:pure-sts": "npm run build:user:pure-sts && ../../../incremental/tools/panda/arkts/ark build/sts/abc/hello.abc --ark-boot-files ../../arkui/build/sts/abc/src/sts/arkui.abc:build/sts/abc/hello.abc --ark-entry-point @ohos.example.src.sts.hello.ArkUIEntry::run", "pack": "npm run cli-tools:check && cd app && DEVECO_SDK_HOME=../../../../arkoala/ohos-sdk/ohos-sdk ../../command-line-tools/hvigor/bin/hvigorw --no-daemon --mode module -p product=default -p module=user@default assembleHar", "har-arm32": "npm run build:user && npm run --prefix ../../../arkoala/ohos-sdk download && node scripts/build-har.mjs --name user --arch arm32 && npm run pack", "har-arm64": "npm run build:user && npm run --prefix ../../../arkoala/ohos-sdk download && node scripts/build-har.mjs --name user --arch arm64 && npm run pack", diff --git a/arkoala-arkts/trivial/user/src/sts/hello.sts b/arkoala-arkts/trivial/user/src/sts/hello.sts index 2bf90253cc3ab5996892f170f9fb4ea31831c301..2c01dc061b7901b12b815ea5296dbe371b62089e 100644 --- a/arkoala-arkts/trivial/user/src/sts/hello.sts +++ b/arkoala-arkts/trivial/user/src/sts/hello.sts @@ -25,8 +25,7 @@ struct MyStateSample { } export class ArkUIEntry { - // static mandatory: boolean = ArkUIEntry.run() - static run(): boolean { + static run() { console.log("About to invoke the struct") // The proper call fails because of a compiler frontend bug. // MyStateSample({} as __Options_MyStateSample) @@ -36,6 +35,5 @@ export class ArkUIEntry { {} as __Options_MyStateSample, undefined ) - return true } }