Switch ts-loader's module to ESM

Signed-off-by: hufeng <hufeng20@huawei.com>
Change-Id: I76cb403661677e3bfb4f610178a10e23470989d7
This commit is contained in:
hufeng
2022-05-16 22:22:49 +08:00
parent 3a23fc8465
commit 78a5eceda7
9 changed files with 86 additions and 141 deletions
+17 -3
View File
@@ -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);
+39 -44
View File
@@ -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<string> = 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>): 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('|') + ')');
+3 -27
View File
@@ -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");
+11 -35
View File
@@ -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,
+5 -10
View File
@@ -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,
+5 -10
View File
@@ -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,
@@ -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({
@@ -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, {}));
`
+1 -1
View File
@@ -557,7 +557,7 @@
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"module": "commonjs",
"module": "es2020",
"target": "es2017",
"types": [],
"typeRoots": [],