diff --git a/compiler/src/create_ast_node_utils.ts b/compiler/src/create_ast_node_utils.ts index 8df804d7a18c3d5c3c5a9fb749b2aa4f865d32fa..32d7951a8b13431355b9a3085da440c623d92351 100644 --- a/compiler/src/create_ast_node_utils.ts +++ b/compiler/src/create_ast_node_utils.ts @@ -83,7 +83,9 @@ function createImportNodeForModuleInfo(): ts.ImportDeclaration { ts.factory.createNamedImports([ts.factory.createImportSpecifier( false, undefined, ts.factory.createIdentifier('__MODULE_NAME__') ), ts.factory.createImportSpecifier(false, undefined, - ts.factory.createIdentifier('__BUNDLE_NAME__'))]) + ts.factory.createIdentifier('__BUNDLE_NAME__')), + ts.factory.createImportSpecifier(false, undefined, + ts.factory.createIdentifier('__resourceId__'))]) ), ts.factory.createStringLiteral('ModuleInfo'), undefined ); } diff --git a/compiler/src/pre_define.ts b/compiler/src/pre_define.ts index 84468634ed5ffef86f63371e9326c2e2a396cb08..c22852a50c463dda5809192f7a3873abb92a019b 100644 --- a/compiler/src/pre_define.ts +++ b/compiler/src/pre_define.ts @@ -630,6 +630,7 @@ export const BUILDER_TYPE: string = 'BuilderType'; export const FUNCTION: string = 'function'; export const NAME: string = 'name'; +export const __RESOURCEID__: string = '__resourceId__'; export const ROUTENAME_NODE: string = 'routeNameNode'; export const STORAGE_NODE: string = 'storageNode'; diff --git a/compiler/src/process_ui_syntax.ts b/compiler/src/process_ui_syntax.ts index 68209e23dc5bf5b6cd2bd3dc930f66d4569402ff..f4d28ec7cfd18c423069ce5605a2e69b512083e4 100644 --- a/compiler/src/process_ui_syntax.ts +++ b/compiler/src/process_ui_syntax.ts @@ -80,7 +80,9 @@ import { PAGE_FULL_PATH, LENGTH, PUV2_VIEW_BASE, - CONTEXT_STACK + CONTEXT_STACK, + __RESOURCEID__, + ATTRIBUTE_ID } from './pre_define'; import { componentInfo, @@ -750,7 +752,7 @@ export function processResourceData(node: ts.CallExpression, filePath: string, isResourcefile(node, previewLog, isResourceModule, isTemplateString, isCorrectResources); if (isCorrectResources.booleanValue) { resourcePreviewMessage(previewLog); - return createResourceParamWithVariable(node, -1, RESOURCE_TYPE.rawfile); + return createResourceParamWithVariable(node, RESOURCE_TYPE.rawfile, -1, true, false); } if (resourceData && resourceData[0] && isResourceModule) { return createResourceParam(-1, RESOURCE_TYPE.rawfile, [node.arguments[0]], resourceData[0], true); @@ -761,16 +763,16 @@ export function processResourceData(node: ts.CallExpression, filePath: string, const resourceDataNode: ts.Node = getResourceDataNode(node, previewLog, resourceData, isResourceModule, filePath, isTemplateString, isCorrectResources); if (isCorrectResources.booleanValue) { resourcePreviewMessage(previewLog); - return createResourceParamWithVariable(node, -1, -1); + return createResourceParamWithVariable(node, -1, -1, true, false); } return resourceDataNode; } } else if (node.expression.getText() === RESOURCE && node.arguments && node.arguments.length) { resourcePreviewMessage(previewLog); - return createResourceParamWithVariable(node, -1, -1); + return createResourceParamWithVariable(node, -1, -1, false, true); } else if (node.expression.getText() === RESOURCE_RAWFILE && node.arguments && node.arguments.length) { resourcePreviewMessage(previewLog); - return createResourceParamWithVariable(node, -1, RESOURCE_TYPE.rawfile); + return createResourceParamWithVariable(node, RESOURCE_TYPE.rawfile, -1, false, false); } return node; } @@ -828,7 +830,8 @@ function isResourcefile(node: ts.CallExpression, previewLog: {isAcceleratePrevie } } -function addBundleAndModuleParam(propertyArray: Array, resourceModuleName: string, isResourceModule: boolean): void { +function addBundleAndModuleParam(propertyArray: Array, + resourceModuleName: string, isResourceModule: boolean): void { if (projectConfig.compileHar) { projectConfig.bundleName = '__harDefaultBundleName__'; projectConfig.moduleName = '__harDefaultModuleName__'; @@ -873,12 +876,13 @@ function createBundleOrModuleNode(isDynamicBundleOrModule: boolean, type: string projectConfig.moduleName); } -function createResourceParamWithVariable(node: ts.CallExpression, resourceValue: number, resourceType: number): ts.ObjectLiteralExpression { - const propertyArray: Array = [ - ts.factory.createPropertyAssignment( +function createResourceParamWithVariable(node: ts.CallExpression, resourceType: number, + resourceValue: number, isTemplateStringOrString: boolean, isVariableParamR: boolean): ts.ObjectLiteralExpression { + const propertyArray: Array = [ + (isTemplateStringOrString || !isVariableParamR) ? ts.factory.createPropertyAssignment( ts.factory.createStringLiteral(RESOURCE_NAME_ID), ts.factory.createNumericLiteral(resourceValue) - ), + ) : resourceIdName(), ts.factory.createPropertyAssignment( ts.factory.createStringLiteral(RESOURCE_NAME_TYPE), ts.factory.createNumericLiteral(resourceType) @@ -925,6 +929,23 @@ function createResourceParam(resourceValue: number, resourceType: number, argsAr return resourceParams; } +function resourceIdName(): ts.GetAccessorDeclaration { + return ts.factory.createGetAccessorDeclaration( + undefined, + ts.factory.createIdentifier(ATTRIBUTE_ID), + [], + undefined, + ts.factory.createBlock( + [ts.factory.createReturnStatement(ts.factory.createCallExpression( + ts.factory.createIdentifier(__RESOURCEID__), + undefined, + [ts.factory.createThis()] + ))], + true + ) + ); +} + function preCheckResourceData(resourceData: string[], resources: object, pos: number, previewLog: {isAcceleratePreview: boolean, log: LogInfo[]}, isResourceModule: boolean, filePath: string, isTemplateString: boolean, isCorrectResources: isCorrectResourcesType): boolean { if (previewLog.isAcceleratePreview) {