From 78a5eceda7be9468de0895b21a79aa6f1bf7c52b Mon Sep 17 00:00:00 2001 From: hufeng Date: Mon, 16 May 2022 22:22:49 +0800 Subject: [PATCH] Switch ts-loader's module to ESM Signed-off-by: hufeng Change-Id: I76cb403661677e3bfb4f610178a10e23470989d7 --- compiler/src/resolve_ohm_url.ts | 20 ++++- compiler/src/validate_ui_syntax.ts | 83 +++++++++---------- compiler/test/ut/import/importAllEts.ts | 30 +------ compiler/test/ut/import/importEts.ts | 46 +++------- compiler/test/ut/import/importExportEts.ts | 15 ++-- compiler/test/ut/import/importTs.ts | 15 ++-- .../render_component/if/if.ts | 10 +-- .../render_decorator/@styles/@stylesExport.ts | 6 +- compiler/tsconfig.json | 2 +- 9 files changed, 86 insertions(+), 141 deletions(-) diff --git a/compiler/src/resolve_ohm_url.ts b/compiler/src/resolve_ohm_url.ts index 8a906b1..dbf0845 100644 --- a/compiler/src/resolve_ohm_url.ts +++ b/compiler/src/resolve_ohm_url.ts @@ -36,8 +36,8 @@ export function isOhmUrl(moduleRequest: string): boolean { return /^@(\S+):/.test(moduleRequest) ? true : false; } -function addExtension(file: string): string { - if (path.extname(file) != '') { +function addExtension(file: string, srcPath: string): string { + if (path.extname(file) !== '') { return file; } @@ -46,9 +46,15 @@ function addExtension(file: string): string { extension = '.ets'; } if (fs.existsSync(file + '.ts') && fs.statSync(file + '.ts').isFile()) { + if (extension != '.d.ts') { + logger.error(red, `ETS:ERROR Failed to compile with files with same name ${srcPath} in the same directory`, reset); + } extension = '.ts'; } if (fs.existsSync(file + '.js') && fs.statSync(file + '.js').isFile()) { + if (extension != '.d.ts') { + logger.error(red, `ETS:ERROR Failed to compile with files with same name ${srcPath} in the same directory`, reset); + } extension = '.js'; } return file + extension; @@ -58,8 +64,16 @@ export function resolveSourceFile(ohmUrl: string): string { const result = ohmUrl.match(REG_OHM_URL); let moduleName = result[2]; let srcKind = result[3]; + let file = path.join(projectConfig.projectPath, '../../../../../', moduleName, 'src/main', srcKind, result[4]); - file = addExtension(file); + + if (projectConfig.aceBuildJson) { + const buildJson = JSON.parse(fs.readFileSync(projectConfig.aceBuildJson).toString()); + const modulePath = buildJson.modulePathMap[moduleName]; + file = path.join(modulePath, 'src/main', srcKind, result[4]); + } + + file = addExtension(file, result[4]); if (!fs.existsSync(file) || !fs.statSync(file).isFile()) { logger.error(red, `ETS:ERROR Failed to resolve existed file by this ohm url ${ohmUrl} `, reset); diff --git a/compiler/src/validate_ui_syntax.ts b/compiler/src/validate_ui_syntax.ts index a7b9564..a3fcb3e 100644 --- a/compiler/src/validate_ui_syntax.ts +++ b/compiler/src/validate_ui_syntax.ts @@ -874,28 +874,32 @@ function replaceOhmUrl(isSystemModule: boolean, item: string, importValue: strin switch(urlType) { case 'bundle': { let urlResult = url.match(/^(\S+)\/(\S+)\/(\S+)\/(\S+)$/); - let moduleKind = urlResult[3]; - if (moduleKind == 'lib') { - item = replaceLibSo(importValue, moduleRequest, sourcePath); + if (urlResult) { + let moduleKind = urlResult[3]; + if (moduleKind === 'lib') { + item = replaceLibSo(importValue, moduleRequest, sourcePath); + } } break; } case 'module': { let urlResult = url.match(/^(\S+)\/(\S+)\/(\S+)$/); - let moduleName = urlResult[1]; - let moduleKind = urlResult[2]; - let modulePath = urlResult[3]; - const configJsonFile: string = projectConfig.aceModuleJsonPath ? projectConfig.aceModuleJsonPath : - path.join(projectConfig.projectPath, '../../../../../', moduleName, 'src/main/config.json'); - let bundleName = getPackageInfo(configJsonFile)[0]; - moduleRequest = `@bundle:${bundleName}/${moduleName}/${moduleKind}/${modulePath}`; - item = moduleKind == 'lib' ? - replaceLibSo(importValue, moduleRequest, sourcePath) : item.replace(/['"](\S+)['"]/, '\"' + moduleRequest + '\"'); + if (urlResult) { + let moduleName = urlResult[1]; + let moduleKind = urlResult[2]; + let modulePath = urlResult[3]; + const configJsonFile: string = projectConfig.aceModuleJsonPath ? projectConfig.aceModuleJsonPath : + path.join(projectConfig.projectPath, '../../../../../', moduleName, 'src/main/config.json'); + let bundleName = getPackageInfo(configJsonFile)[0]; + moduleRequest = `@bundle:${bundleName}/${moduleName}/${moduleKind}/${modulePath}`; + item = moduleKind === 'lib' ? replaceLibSo(importValue, moduleRequest, sourcePath) : + item.replace(/['"](\S+)['"]/, '\"' + moduleRequest + '\"'); + } break; } case 'ohos': { url = url.replace('/', '.'); - let urlResult = url.match(/^system\.(\S+)/) + let urlResult = url.match(/^system\.(\S+)/); moduleRequest = urlResult ? `@${url}` : `@ohos.${url}`; if (!isSystemModule) { item = item.replace(/['"](\S+)['"]/, '\"' + moduleRequest + '\"'); @@ -912,20 +916,24 @@ function replaceOhmUrl(isSystemModule: boolean, item: string, importValue: strin } case 'local': { let result = sourcePath.match(/(\S+)(\/|\\)src(\/|\\)main(\/|\\)(ets|js)(\/|\\)(\S+)/); - const configJsonFile: string = projectConfig.aceModuleJsonPath ? projectConfig.aceModuleJsonPath : - path.join(result[1], 'src/main/config.json'); - let packageInfo = getPackageInfo(configJsonFile); - let urlResult = url.match(/^\/(ets|js|lib|node_modules)\/(\S+)$/); - let moduleKind = urlResult[1]; - let modulePath = urlResult[2]; - if (moduleKind == 'lib') { - item = replaceLibSo(importValue, modulePath, sourcePath); - } else if (moduleKind == 'node_modules') { - moduleRequest = `${modulePath}`; - item = item.replace(/['"](\S+)['"]/, '\"' + moduleRequest + '\"'); - } else { - moduleRequest = `@bundle:${packageInfo[0]}/${packageInfo[1]}/${moduleKind}/${modulePath}`; - item = item.replace(/['"](\S+)['"]/, '\"' + moduleRequest + '\"'); + if (result) { + const configJsonFile: string = projectConfig.aceModuleJsonPath ? projectConfig.aceModuleJsonPath : + path.join(result[1], 'src/main/config.json'); + let packageInfo = getPackageInfo(configJsonFile); + let urlResult = url.match(/^\/(ets|js|lib|node_modules)\/(\S+)$/); + if (urlResult) { + let moduleKind = urlResult[1]; + let modulePath = urlResult[2]; + if (moduleKind === 'lib') { + item = replaceLibSo(importValue, modulePath, sourcePath); + } else if (moduleKind === 'node_modules') { + moduleRequest = `${modulePath}`; + item = item.replace(/['"](\S+)['"]/, '\"' + moduleRequest + '\"'); + } else { + moduleRequest = `@bundle:${packageInfo[0]}/${packageInfo[1]}/${moduleKind}/${modulePath}`; + item = item.replace(/['"](\S+)['"]/, '\"' + moduleRequest + '\"'); + } + } } break; } @@ -954,17 +962,14 @@ function replaceRelativePath(item:string, moduleRequest: string, sourcePath: str export function processSystemApi(content: string, isProcessAllowList: boolean = false, sourcePath: string = null, isSystemModule: boolean = false): string { - const systemValueCollection: Set = new Set(); - const REG_IMPORT_DECL = isProcessAllowList ? - /(import|const)\s+(.+)\s*=\s*(\_\_importDefault\()?require\(\s*['"]@(system|ohos)\.(\S+)['"]\s*\)(\))?/g : + const REG_IMPORT_DECL = isProcessAllowList ? /import\s+(.+)\s+from\s+['"]@(system|ohos)\.(\S+)['"]/g : /(import|export)\s+(.+)\s+from\s+['"](\S+)['"]|import\s+(.+)\s*=\s*require\(\s*['"](\S+)['"]\s*\)/g; const processedContent: string = content.replace(REG_IMPORT_DECL, (item, item1, item2, item3, item4, item5) => { - let importValue: string = isProcessAllowList ? item2 : item2 || item4; + let importValue: string = isProcessAllowList ? item1 : item2 || item4; if (isProcessAllowList) { - systemValueCollection.add(importValue); - return replaceSystemApi(item, importValue, item4, item5); + return replaceSystemApi(item, importValue, item2, item3); } let moduleRequest: string = item3 || item5; @@ -989,17 +994,7 @@ export function processSystemApi(content: string, isProcessAllowList: boolean = // node_modules return item; }); - return isProcessAllowList ? processInnerModule(processedContent, systemValueCollection) : processedContent; -} - -function processInnerModule(content: string, systemValueCollection: Set): string { - systemValueCollection.forEach(element => { - const target: string = element.trim() + '.default'; - while (content.includes(target)) { - content = content.replace(target, element.trim()); - } - }); - return content; + return processedContent; } const VALIDATE_MODULE_REG: RegExp = new RegExp('^(' + VALIDATE_MODULE.join('|') + ')'); diff --git a/compiler/test/ut/import/importAllEts.ts b/compiler/test/ut/import/importAllEts.ts index 17441fd..fc7a23c 100644 --- a/compiler/test/ut/import/importAllEts.ts +++ b/compiler/test/ut/import/importAllEts.ts @@ -49,36 +49,12 @@ struct ImportTest { ` exports.expectResult = -`"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const AllComponent = __importStar(require("./test/pages/NamespaceComponent")); -const TsModule_1 = __importDefault(require("./test/pages/TsModule")); +`import * as AllComponent from './test/pages/NamespaceComponent'; +import TsModule from './test/pages/TsModule'; class ImportTest extends View { constructor(compilerAssignedUniqueChildId, parent, params) { super(compilerAssignedUniqueChildId, parent); - this.__myState1 = new ObservedPropertyObject(new TsModule_1.default(1).method(), this, "myState1"); + this.__myState1 = new ObservedPropertyObject(new TsModule(1).method(), this, "myState1"); this.__myState2 = new ObservedPropertySimple(0, this, "myState2"); this.__myState3 = new ObservedPropertySimple(false, this, "myState3"); this.__myState4 = new ObservedPropertySimple('ImportTest', this, "myState4"); diff --git a/compiler/test/ut/import/importEts.ts b/compiler/test/ut/import/importEts.ts index f57ba18..9536544 100644 --- a/compiler/test/ut/import/importEts.ts +++ b/compiler/test/ut/import/importEts.ts @@ -21,7 +21,7 @@ LinkComponentDefault, { LinkComponent3 } from './test/pages/LinkComponent' import DefaultComponent from "./test/pages/DefaultComponent" -import AMDComponentDefault = require('./test/pages/AMDComponent') +import AMDComponentDefault from "./test/pages/AMDComponent" import TsModule from './test/pages/TsModule' @Entry @@ -99,38 +99,14 @@ struct ImportTest { ` exports.expectResult = -`"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const LinkComponent_1 = __importStar(require("./test/pages/LinkComponent")); -const DefaultComponent_1 = __importDefault(require("./test/pages/DefaultComponent")); -const AMDComponentDefault = require("./test/pages/AMDComponent"); -const TsModule_1 = __importDefault(require("./test/pages/TsModule")); +`import LinkComponentDefault, { LinkComponent as LinkComponent1Ref, LinkComponent2 as LinkComponent2Ref, LinkComponent3 } from './test/pages/LinkComponent'; +import DefaultComponent from "./test/pages/DefaultComponent"; +import AMDComponentDefault from "./test/pages/AMDComponent"; +import TsModule from './test/pages/TsModule'; class ImportTest extends View { constructor(compilerAssignedUniqueChildId, parent, params) { super(compilerAssignedUniqueChildId, parent); - this.__myState1 = new ObservedPropertyObject(new TsModule_1.default(1).method(), this, "myState1"); + this.__myState1 = new ObservedPropertyObject(new TsModule(1).method(), this, "myState1"); this.__myState2 = new ObservedPropertySimple(0, this, "myState2"); this.__myState3 = new ObservedPropertySimple(false, this, "myState3"); this.__myState4 = new ObservedPropertySimple('ImportTest', this, "myState4"); @@ -185,7 +161,7 @@ class ImportTest extends View { Column.create(); let earlierCreatedChild_2 = this.findChildById("2"); if (earlierCreatedChild_2 == undefined) { - View.create(new LinkComponent_1.LinkComponent2("2", this, { + View.create(new LinkComponent2Ref("2", this, { LinkComponent2Link1: this.__myState1, LinkComponent2Link2: this.__myState2, LinkComponent2Link3: this.__myState3, @@ -211,7 +187,7 @@ class ImportTest extends View { Text.pop(); let earlierCreatedChild_3 = this.findChildById("3"); if (earlierCreatedChild_3 == undefined) { - View.create(new LinkComponent_1.LinkComponent("3", this, { + View.create(new LinkComponent1Ref("3", this, { LinkComponent1Link1: this.__myState1, LinkComponent1Link2: this.__myState2, LinkComponent1Link3: this.__myState3, @@ -233,7 +209,7 @@ class ImportTest extends View { } let earlierCreatedChild_4 = this.findChildById("4"); if (earlierCreatedChild_4 == undefined) { - View.create(new DefaultComponent_1.default("4", this, { + View.create(new DefaultComponent("4", this, { DefaultComponentLink1: this.__myState1, DefaultComponentLink2: this.__myState2, DefaultComponentLink3: this.__myState3, @@ -251,7 +227,7 @@ class ImportTest extends View { } let earlierCreatedChild_5 = this.findChildById("5"); if (earlierCreatedChild_5 == undefined) { - View.create(new LinkComponent_1.default("5", this, { + View.create(new LinkComponentDefault("5", this, { LinkComponent3Link1: this.__myState1, LinkComponent3Link2: this.__myState2, LinkComponent3Link3: this.__myState3, @@ -291,7 +267,7 @@ class ImportTest extends View { } let earlierCreatedChild_7 = this.findChildById("7"); if (earlierCreatedChild_7 == undefined) { - View.create(new LinkComponent_1.LinkComponent3("7", this, { + View.create(new LinkComponent3("7", this, { LinkComponent3Link1: this.__myState1, LinkComponent3Link2: this.__myState2, LinkComponent3Link3: this.__myState3, diff --git a/compiler/test/ut/import/importExportEts.ts b/compiler/test/ut/import/importExportEts.ts index 652a822..8b11bb5 100644 --- a/compiler/test/ut/import/importExportEts.ts +++ b/compiler/test/ut/import/importExportEts.ts @@ -53,17 +53,12 @@ struct ImportTest { ` exports.expectResult = -`"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const ExportStarComponent_1 = require("./test/pages/ExportStarComponent"); -const TsModule_1 = __importDefault(require("./test/pages/TsModule")); +`import { AllStarComponent } from './test/pages/ExportStarComponent'; +import TsModule from './test/pages/TsModule'; class ImportTest extends View { constructor(compilerAssignedUniqueChildId, parent, params) { super(compilerAssignedUniqueChildId, parent); - this.__myState1 = new ObservedPropertyObject(new TsModule_1.default(1).method(), this, "myState1"); + this.__myState1 = new ObservedPropertyObject(new TsModule(1).method(), this, "myState1"); this.__myState2 = new ObservedPropertySimple(0, this, "myState2"); this.__myState3 = new ObservedPropertySimple(false, this, "myState3"); this.__myState4 = new ObservedPropertySimple('ImportTest', this, "myState4"); @@ -118,7 +113,7 @@ class ImportTest extends View { Column.create(); let earlierCreatedChild_2 = this.findChildById("2"); if (earlierCreatedChild_2 == undefined) { - View.create(new ExportStarComponent_1.AllStarComponent.ExportComponent("2", this, { + View.create(new AllStarComponent.ExportComponent("2", this, { ExportComponent1Link1: this.__myState1, ExportComponent1Link2: this.__myState2, ExportComponent1Link3: this.__myState3, @@ -140,7 +135,7 @@ class ImportTest extends View { } let earlierCreatedChild_3 = this.findChildById("3"); if (earlierCreatedChild_3 == undefined) { - View.create(new ExportStarComponent_1.AllStarComponent.default("3", this, { + View.create(new AllStarComponent.default("3", this, { ExportComponent4Link1: this.__myState1, ExportComponent4Link2: this.__myState2, ExportComponent4Link3: this.__myState3, diff --git a/compiler/test/ut/import/importTs.ts b/compiler/test/ut/import/importTs.ts index ad5e964..40570ff 100644 --- a/compiler/test/ut/import/importTs.ts +++ b/compiler/test/ut/import/importTs.ts @@ -53,17 +53,12 @@ struct ImportTest { ` exports.expectResult = -`"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const ExportStarComponent_1 = require("./test/pages/ExportStarComponent"); -const TsModule_1 = __importDefault(require("./test/pages/TsModule")); +`import { AllStarComponent } from './test/pages/ExportStarComponent'; +import TsModule from './test/pages/TsModule'; class ImportTest extends View { constructor(compilerAssignedUniqueChildId, parent, params) { super(compilerAssignedUniqueChildId, parent); - this.__myState1 = new ObservedPropertyObject(new TsModule_1.default(1).method(), this, "myState1"); + this.__myState1 = new ObservedPropertyObject(new TsModule(1).method(), this, "myState1"); this.__myState2 = new ObservedPropertySimple(0, this, "myState2"); this.__myState3 = new ObservedPropertySimple(false, this, "myState3"); this.__myState4 = new ObservedPropertySimple('ImportTest', this, "myState4"); @@ -118,7 +113,7 @@ class ImportTest extends View { Column.create(); let earlierCreatedChild_2 = this.findChildById("2"); if (earlierCreatedChild_2 == undefined) { - View.create(new ExportStarComponent_1.AllStarComponent.ExportComponent("2", this, { + View.create(new AllStarComponent.ExportComponent("2", this, { ExportComponent1Link1: this.__myState1, ExportComponent1Link2: this.__myState2, ExportComponent1Link3: this.__myState3, @@ -140,7 +135,7 @@ class ImportTest extends View { } let earlierCreatedChild_3 = this.findChildById("3"); if (earlierCreatedChild_3 == undefined) { - View.create(new ExportStarComponent_1.AllStarComponent.default("3", this, { + View.create(new AllStarComponent.default("3", this, { ExportComponent4Link1: this.__myState1, ExportComponent4Link2: this.__myState2, ExportComponent4Link3: this.__myState3, diff --git a/compiler/test/ut/inner_commponent_transform/render_component/if/if.ts b/compiler/test/ut/inner_commponent_transform/render_component/if/if.ts index 16dda28..539115c 100644 --- a/compiler/test/ut/inner_commponent_transform/render_component/if/if.ts +++ b/compiler/test/ut/inner_commponent_transform/render_component/if/if.ts @@ -52,10 +52,8 @@ struct MyComponent { ` exports.expectResult = -`"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const TestComponent_1 = require("./test/pages/TestComponent"); -const TsModule_1 = require("./test/pages/TsModule"); +`import { TestComponent } from './test/pages/TestComponent'; +import { Animal } from './test/pages/TsModule'; class MyComponent extends View { constructor(compilerAssignedUniqueChildId, parent, params) { super(compilerAssignedUniqueChildId, parent); @@ -110,11 +108,11 @@ class MyComponent extends View { } If.pop(); If.create(); - if (TsModule_1.Animal.Dog) { + if (Animal.Dog) { If.branchId(0); let earlierCreatedChild_2 = this.findChildById("2"); if (earlierCreatedChild_2 == undefined) { - View.create(new TestComponent_1.TestComponent("2", this, { content: 'if (import enum)' })); + View.create(new TestComponent("2", this, { content: 'if (import enum)' })); } else { earlierCreatedChild_2.updateWithValueParams({ diff --git a/compiler/test/ut/render_decorator/@styles/@stylesExport.ts b/compiler/test/ut/render_decorator/@styles/@stylesExport.ts index df32684..45d3e8a 100644 --- a/compiler/test/ut/render_decorator/@styles/@stylesExport.ts +++ b/compiler/test/ut/render_decorator/@styles/@stylesExport.ts @@ -55,10 +55,7 @@ export struct FancyUseExp { ` exports.expectResult = -`"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FancyUseExp = void 0; -class FancyUseExp extends View { +`export class FancyUseExp extends View { constructor(compilerAssignedUniqueChildId, parent, params) { super(compilerAssignedUniqueChildId, parent); this.__enable = new ObservedPropertySimple(true, this, "enable"); @@ -109,6 +106,5 @@ class FancyUseExp extends View { Column.pop(); } } -exports.FancyUseExp = FancyUseExp; loadDocument(new FancyUseExp("1", undefined, {})); ` diff --git a/compiler/tsconfig.json b/compiler/tsconfig.json index 09ad1cd..b37d725 100644 --- a/compiler/tsconfig.json +++ b/compiler/tsconfig.json @@ -557,7 +557,7 @@ "resolveJsonModule": true, "skipLibCheck": true, "sourceMap": true, - "module": "commonjs", + "module": "es2020", "target": "es2017", "types": [], "typeRoots": [],