188c88e8eSopenharmony_ci/* 288c88e8eSopenharmony_ci * Licensed to the Apache Software Foundation (ASF) under one 388c88e8eSopenharmony_ci * or more contributor license agreements. See the NOTICE file 488c88e8eSopenharmony_ci * distributed with this work for additional information 588c88e8eSopenharmony_ci * regarding copyright ownership. The ASF licenses this file 688c88e8eSopenharmony_ci * to you under the Apache License, Version 2.0 (the 788c88e8eSopenharmony_ci * "License"); you may not use this file except in compliance 888c88e8eSopenharmony_ci * with the License. You may obtain a copy of the License at 988c88e8eSopenharmony_ci * 1088c88e8eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 1188c88e8eSopenharmony_ci * 1288c88e8eSopenharmony_ci * Unless required by applicable law or agreed to in writing, 1388c88e8eSopenharmony_ci * software distributed under the License is distributed on an 1488c88e8eSopenharmony_ci * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1588c88e8eSopenharmony_ci * KIND, either express or implied. See the License for the 1688c88e8eSopenharmony_ci * specific language governing permissions and limitations 1788c88e8eSopenharmony_ci * under the License. 1888c88e8eSopenharmony_ci */ 1988c88e8eSopenharmony_ci 2088c88e8eSopenharmony_ciimport loaderUtils from 'loader-utils' 2188c88e8eSopenharmony_ciimport path from 'path' 2288c88e8eSopenharmony_ciimport fs from 'fs' 2388c88e8eSopenharmony_ci 2488c88e8eSopenharmony_ciimport * as legacy from './legacy' 2588c88e8eSopenharmony_ciimport { 2688c88e8eSopenharmony_ci parseFragment 2788c88e8eSopenharmony_ci} 2888c88e8eSopenharmony_cifrom './parser' 2988c88e8eSopenharmony_ciimport { 3088c88e8eSopenharmony_ci getNameByPath, 3188c88e8eSopenharmony_ci getRequireString, 3288c88e8eSopenharmony_ci stringifyLoaders, 3388c88e8eSopenharmony_ci logWarn, 3488c88e8eSopenharmony_ci loadBabelModule, 3588c88e8eSopenharmony_ci elements 3688c88e8eSopenharmony_ci} 3788c88e8eSopenharmony_cifrom './util' 3888c88e8eSopenharmony_ciimport { isReservedTag } from './templater/component_validator' 3988c88e8eSopenharmony_ci 4088c88e8eSopenharmony_ciconst { DEVICE_LEVEL } = require('./lite/lite-enum') 4188c88e8eSopenharmony_ciconst loaderPath = __dirname 4288c88e8eSopenharmony_ciconst defaultLoaders = { 4388c88e8eSopenharmony_ci none: '', 4488c88e8eSopenharmony_ci main: path.resolve(loaderPath, 'loader.js'), 4588c88e8eSopenharmony_ci template: path.resolve(loaderPath, 'template.js'), 4688c88e8eSopenharmony_ci style: path.resolve(loaderPath, 'style.js'), 4788c88e8eSopenharmony_ci script: path.resolve(loaderPath, 'script.js'), 4888c88e8eSopenharmony_ci json: path.resolve(loaderPath, 'json.js'), 4988c88e8eSopenharmony_ci babel: loadBabelModule('babel-loader'), 5088c88e8eSopenharmony_ci manifest: path.resolve(loaderPath, 'manifest-loader.js'), 5188c88e8eSopenharmony_ci resourceReferenceScript: path.resolve(loaderPath, 'resource-reference-script.js') 5288c88e8eSopenharmony_ci} 5388c88e8eSopenharmony_ci 5488c88e8eSopenharmony_cifunction getLoaderString (type, config) { 5588c88e8eSopenharmony_ci config = config || {} 5688c88e8eSopenharmony_ci const customLoader = loadCustomLoader(config) 5788c88e8eSopenharmony_ci let loaders 5888c88e8eSopenharmony_ci switch (type) { 5988c88e8eSopenharmony_ci case 'main': 6088c88e8eSopenharmony_ci return mainLoaderString(loaders) 6188c88e8eSopenharmony_ci case 'element': 6288c88e8eSopenharmony_ci return elementLoaderString(loaders, config) 6388c88e8eSopenharmony_ci case 'template': 6488c88e8eSopenharmony_ci return templateLoaderString(loaders, config, customLoader) 6588c88e8eSopenharmony_ci case 'style': 6688c88e8eSopenharmony_ci return styleLoaderString(loaders, config, customLoader) 6788c88e8eSopenharmony_ci case 'script': 6888c88e8eSopenharmony_ci return scriptLoaderString(loaders, config, customLoader) 6988c88e8eSopenharmony_ci case 'config': 7088c88e8eSopenharmony_ci return configLoaderString(loaders, config) 7188c88e8eSopenharmony_ci case 'data': 7288c88e8eSopenharmony_ci return dataLoaderString(loaders, config) 7388c88e8eSopenharmony_ci } 7488c88e8eSopenharmony_ci} 7588c88e8eSopenharmony_ci 7688c88e8eSopenharmony_cifunction loadCustomLoader (config) { 7788c88e8eSopenharmony_ci if (config.lang && config.customLang[config.lang]) { 7888c88e8eSopenharmony_ci return loadBabelModule(config.customLang[config.lang][0]) 7988c88e8eSopenharmony_ci } 8088c88e8eSopenharmony_ci} 8188c88e8eSopenharmony_ci 8288c88e8eSopenharmony_cifunction mainLoaderString (loaders) { 8388c88e8eSopenharmony_ci loaders = [{ 8488c88e8eSopenharmony_ci name: defaultLoaders.main 8588c88e8eSopenharmony_ci }] 8688c88e8eSopenharmony_ci return stringifyLoaders(loaders) 8788c88e8eSopenharmony_ci} 8888c88e8eSopenharmony_ci 8988c88e8eSopenharmony_cifunction elementLoaderString (loaders, config) { 9088c88e8eSopenharmony_ci loaders = [{ 9188c88e8eSopenharmony_ci name: defaultLoaders.main, 9288c88e8eSopenharmony_ci query: { 9388c88e8eSopenharmony_ci element: config.source ? undefined : true 9488c88e8eSopenharmony_ci } 9588c88e8eSopenharmony_ci }] 9688c88e8eSopenharmony_ci return stringifyLoaders(loaders) 9788c88e8eSopenharmony_ci} 9888c88e8eSopenharmony_ci 9988c88e8eSopenharmony_cifunction templateLoaderString (loaders, config, customLoader) { 10088c88e8eSopenharmony_ci loaders = [{ 10188c88e8eSopenharmony_ci name: defaultLoaders.json 10288c88e8eSopenharmony_ci }, { 10388c88e8eSopenharmony_ci name: defaultLoaders.template 10488c88e8eSopenharmony_ci }] 10588c88e8eSopenharmony_ci if (customLoader) { 10688c88e8eSopenharmony_ci loaders = loaders.concat(customLoader) 10788c88e8eSopenharmony_ci } 10888c88e8eSopenharmony_ci return stringifyLoaders(loaders) 10988c88e8eSopenharmony_ci} 11088c88e8eSopenharmony_ci 11188c88e8eSopenharmony_cifunction styleLoaderString (loaders, config, customLoader) { 11288c88e8eSopenharmony_ci loaders = [{ 11388c88e8eSopenharmony_ci name: defaultLoaders.json 11488c88e8eSopenharmony_ci }, { 11588c88e8eSopenharmony_ci name: defaultLoaders.style 11688c88e8eSopenharmony_ci }] 11788c88e8eSopenharmony_ci if (customLoader) { 11888c88e8eSopenharmony_ci loaders = loaders.concat(customLoader) 11988c88e8eSopenharmony_ci } 12088c88e8eSopenharmony_ci return stringifyLoaders(loaders) 12188c88e8eSopenharmony_ci} 12288c88e8eSopenharmony_ci 12388c88e8eSopenharmony_cifunction scriptLoaderString (loaders, config, customLoader) { 12488c88e8eSopenharmony_ci loaders = [{ 12588c88e8eSopenharmony_ci name: defaultLoaders.script 12688c88e8eSopenharmony_ci }] 12788c88e8eSopenharmony_ci if (customLoader) { 12888c88e8eSopenharmony_ci loaders = loaders.concat(customLoader) 12988c88e8eSopenharmony_ci } 13088c88e8eSopenharmony_ci else { 13188c88e8eSopenharmony_ci const isTargets = { 13288c88e8eSopenharmony_ci 'extends': path.resolve(__dirname, "../babel.config.js") 13388c88e8eSopenharmony_ci } 13488c88e8eSopenharmony_ci if (process.env.DEVICE_LEVEL === DEVICE_LEVEL.RICH) { 13588c88e8eSopenharmony_ci isTargets['targets'] = 'node 8'; 13688c88e8eSopenharmony_ci } 13788c88e8eSopenharmony_ci loaders.push({ 13888c88e8eSopenharmony_ci name: defaultLoaders.babel, 13988c88e8eSopenharmony_ci query: isTargets, 14088c88e8eSopenharmony_ci }) 14188c88e8eSopenharmony_ci loaders.push({ 14288c88e8eSopenharmony_ci name: defaultLoaders.resourceReferenceScript 14388c88e8eSopenharmony_ci }) 14488c88e8eSopenharmony_ci } 14588c88e8eSopenharmony_ci if (config.app && process.env.abilityType === 'page' && 14688c88e8eSopenharmony_ci fs.existsSync(process.env.aceManifestPath)) { 14788c88e8eSopenharmony_ci loaders.push({ 14888c88e8eSopenharmony_ci name: defaultLoaders.manifest, 14988c88e8eSopenharmony_ci query: { 15088c88e8eSopenharmony_ci path: config.source 15188c88e8eSopenharmony_ci } 15288c88e8eSopenharmony_ci }) 15388c88e8eSopenharmony_ci } 15488c88e8eSopenharmony_ci return stringifyLoaders(loaders) 15588c88e8eSopenharmony_ci} 15688c88e8eSopenharmony_ci 15788c88e8eSopenharmony_cifunction configLoaderString (loaders, config) { 15888c88e8eSopenharmony_ci loaders = [{ 15988c88e8eSopenharmony_ci name: defaultLoaders.json 16088c88e8eSopenharmony_ci }] 16188c88e8eSopenharmony_ci return stringifyLoaders(loaders) 16288c88e8eSopenharmony_ci} 16388c88e8eSopenharmony_ci 16488c88e8eSopenharmony_cifunction dataLoaderString (loaders, config) { 16588c88e8eSopenharmony_ci loaders = [{ 16688c88e8eSopenharmony_ci name: defaultLoaders.json 16788c88e8eSopenharmony_ci }] 16888c88e8eSopenharmony_ci return stringifyLoaders(loaders) 16988c88e8eSopenharmony_ci} 17088c88e8eSopenharmony_ci 17188c88e8eSopenharmony_cifunction loader (source) { 17288c88e8eSopenharmony_ci this.cacheable && this.cacheable() 17388c88e8eSopenharmony_ci 17488c88e8eSopenharmony_ci const options = { 17588c88e8eSopenharmony_ci lang: { 17688c88e8eSopenharmony_ci sass:['sass-loader'], 17788c88e8eSopenharmony_ci scss:['sass-loader'], 17888c88e8eSopenharmony_ci less:['less-loader'] 17988c88e8eSopenharmony_ci } 18088c88e8eSopenharmony_ci } 18188c88e8eSopenharmony_ci const customLang = options.lang || {} 18288c88e8eSopenharmony_ci const resourceQuery = this.resourceQuery && loaderUtils.parseQuery(this.resourceQuery) || {} 18388c88e8eSopenharmony_ci const isEntry = resourceQuery.entry 18488c88e8eSopenharmony_ci const dirName = path.parse(this.resourcePath) 18588c88e8eSopenharmony_ci const name = isEntry ? dirName.name : resourceQuery.name || getNameByPath(this.resourcePath) 18688c88e8eSopenharmony_ci let parentPath = resourceQuery.parentPath || this.resourcePath; 18788c88e8eSopenharmony_ci if (isEntry) { 18888c88e8eSopenharmony_ci elements[this.resourcePath] = elements[this.resourcePath] || {}; 18988c88e8eSopenharmony_ci elements[this.resourcePath][name] = true; 19088c88e8eSopenharmony_ci } else { 19188c88e8eSopenharmony_ci elements[this.resourcePath] = elements[this.resourcePath] || {}; 19288c88e8eSopenharmony_ci elements[this.resourcePath]["parent"] = parentPath; 19388c88e8eSopenharmony_ci if (elements[parentPath] && elements[parentPath]["parent"]) { 19488c88e8eSopenharmony_ci elements[this.resourcePath]["parent"] = elements[elements[parentPath]["parent"]]; 19588c88e8eSopenharmony_ci parentPath = elements[this.resourcePath]["parent"]; 19688c88e8eSopenharmony_ci } 19788c88e8eSopenharmony_ci } 19888c88e8eSopenharmony_ci if (isReservedTag(name) && process.env.abilityType === 'page') { 19988c88e8eSopenharmony_ci logWarn(this, [{ 20088c88e8eSopenharmony_ci reason: 'ERROR: The file name cannot contain reserved tag name: ' + name 20188c88e8eSopenharmony_ci }]) 20288c88e8eSopenharmony_ci return '' 20388c88e8eSopenharmony_ci } 20488c88e8eSopenharmony_ci let output = '' 20588c88e8eSopenharmony_ci // import app.js 20688c88e8eSopenharmony_ci output += loadApp(this, name, isEntry, customLang, source) 20788c88e8eSopenharmony_ci output += loadPage(this, name, isEntry, customLang, source, parentPath); 20888c88e8eSopenharmony_ci return output 20988c88e8eSopenharmony_ci} 21088c88e8eSopenharmony_ci 21188c88e8eSopenharmony_cifunction checkApp(_this) { 21288c88e8eSopenharmony_ci if (process.env.abilityType === 'testrunner') { 21388c88e8eSopenharmony_ci return true; 21488c88e8eSopenharmony_ci } 21588c88e8eSopenharmony_ci return _this.resourcePath === path.resolve(process.env.projectPath, 21688c88e8eSopenharmony_ci process.env.abilityType === 'page' ? 'app.js' : `${process.env.abilityType}.js`) 21788c88e8eSopenharmony_ci} 21888c88e8eSopenharmony_ci 21988c88e8eSopenharmony_cifunction loadApp (_this, name, isEntry, customLang, source) { 22088c88e8eSopenharmony_ci let output = '' 22188c88e8eSopenharmony_ci let extcss = false 22288c88e8eSopenharmony_ci if (checkApp(_this)) { 22388c88e8eSopenharmony_ci const filename = _this.resourcePath.replace(path.extname(_this.resourcePath).toString(), '') 22488c88e8eSopenharmony_ci // find css 22588c88e8eSopenharmony_ci const cssFileName = filename + '.css' 22688c88e8eSopenharmony_ci if (!fs.existsSync(cssFileName)) { 22788c88e8eSopenharmony_ci extcss = false 22888c88e8eSopenharmony_ci } 22988c88e8eSopenharmony_ci else { 23088c88e8eSopenharmony_ci extcss = true 23188c88e8eSopenharmony_ci output += 'var $app_style$ = ' + getRequireString(_this, getLoaderString('style', { 23288c88e8eSopenharmony_ci customLang, 23388c88e8eSopenharmony_ci lang: undefined, 23488c88e8eSopenharmony_ci element: undefined, 23588c88e8eSopenharmony_ci elementName: undefined, 23688c88e8eSopenharmony_ci source: cssFileName 23788c88e8eSopenharmony_ci }), cssFileName) 23888c88e8eSopenharmony_ci } 23988c88e8eSopenharmony_ci output += 'var $app_script$ = ' + getRequireString(_this, getLoaderString('script', { 24088c88e8eSopenharmony_ci customLang, 24188c88e8eSopenharmony_ci lang: undefined, 24288c88e8eSopenharmony_ci element: undefined, 24388c88e8eSopenharmony_ci elementName: undefined, 24488c88e8eSopenharmony_ci source: _this.resourcePath, 24588c88e8eSopenharmony_ci app: true 24688c88e8eSopenharmony_ci }), _this.resourcePath) 24788c88e8eSopenharmony_ci 24888c88e8eSopenharmony_ci if (process.env.DEVICE_LEVEL === DEVICE_LEVEL.RICH || process.env.DEVICE_LEVEL === 'card') { 24988c88e8eSopenharmony_ci output += ` 25088c88e8eSopenharmony_ci $app_define$('@app-application/${name}', [], function($app_require$, $app_exports$, $app_module$) { 25188c88e8eSopenharmony_ci ` + ` 25288c88e8eSopenharmony_ci $app_script$($app_module$, $app_exports$, $app_require$) 25388c88e8eSopenharmony_ci if ($app_exports$.__esModule && $app_exports$.default) { 25488c88e8eSopenharmony_ci $app_module$.exports = $app_exports$.default 25588c88e8eSopenharmony_ci } 25688c88e8eSopenharmony_ci ` + (extcss ? ` 25788c88e8eSopenharmony_ci $app_module$.exports.style = $app_style$ 25888c88e8eSopenharmony_ci ` : '') 25988c88e8eSopenharmony_ci + ` 26088c88e8eSopenharmony_ci }) 26188c88e8eSopenharmony_ci ` 26288c88e8eSopenharmony_ci if (isEntry) { 26388c88e8eSopenharmony_ci output += `$app_bootstrap$('@app-application/${name}'` + ',undefined' + ',undefined' + `)` 26488c88e8eSopenharmony_ci } 26588c88e8eSopenharmony_ci } 26688c88e8eSopenharmony_ci if (process.env.DEVICE_LEVEL === DEVICE_LEVEL.LITE) { 26788c88e8eSopenharmony_ci output += `var options=$app_script$\n if ($app_script$.__esModule) {\n 26888c88e8eSopenharmony_ci options = $app_script$.default;\n }\n` + 26988c88e8eSopenharmony_ci (extcss ? `options.styleSheet=$app_style$\n` : ``) + 27088c88e8eSopenharmony_ci `module.exports=new ViewModel(options);` 27188c88e8eSopenharmony_ci } 27288c88e8eSopenharmony_ci return output 27388c88e8eSopenharmony_ci } else if (/\.js$/.test(_this.resourcePath)) { 27488c88e8eSopenharmony_ci return source 27588c88e8eSopenharmony_ci } else { 27688c88e8eSopenharmony_ci return output 27788c88e8eSopenharmony_ci } 27888c88e8eSopenharmony_ci} 27988c88e8eSopenharmony_ci 28088c88e8eSopenharmony_cifunction loadPage (_this, name, isEntry, customLang, source, parentPath) { 28188c88e8eSopenharmony_ci let output = '' 28288c88e8eSopenharmony_ci if (path.extname(_this.resourcePath).match(/\.hml/)) { 28388c88e8eSopenharmony_ci const filename = _this.resourcePath.replace(path.extname(_this.resourcePath).toString(), '') 28488c88e8eSopenharmony_ci const resourcePath = _this.resourcePath 28588c88e8eSopenharmony_ci const loaderQuery = loaderUtils.getOptions(_this) || {} 28688c88e8eSopenharmony_ci const isElement = loaderQuery.element 28788c88e8eSopenharmony_ci const frag = parseFragment(source) 28888c88e8eSopenharmony_ci const elementNames = [] 28988c88e8eSopenharmony_ci const elementLength = frag.element.length 29088c88e8eSopenharmony_ci output += loadPageCheckElementLength(_this, elementLength, frag, elementNames, resourcePath, 29188c88e8eSopenharmony_ci customLang, parentPath); 29288c88e8eSopenharmony_ci 29388c88e8eSopenharmony_ci output += 'var $app_template$ = ' + getRequireString(_this, getLoaderString('template', { 29488c88e8eSopenharmony_ci customLang, 29588c88e8eSopenharmony_ci lang: undefined, 29688c88e8eSopenharmony_ci element: isElement, 29788c88e8eSopenharmony_ci elementName: isElement ? name : undefined, 29888c88e8eSopenharmony_ci source: _this.resourcePath 29988c88e8eSopenharmony_ci }), _this.resourcePath) 30088c88e8eSopenharmony_ci 30188c88e8eSopenharmony_ci // find css 30288c88e8eSopenharmony_ci const cssContent = loadPageFindCss(_this, filename, customLang) 30388c88e8eSopenharmony_ci const extcss = cssContent.extcss 30488c88e8eSopenharmony_ci output += cssContent.output 30588c88e8eSopenharmony_ci 30688c88e8eSopenharmony_ci // find js 30788c88e8eSopenharmony_ci const scriptContent = loadPageFindJs(_this, filename, customLang) 30888c88e8eSopenharmony_ci const extscript = scriptContent.extscript 30988c88e8eSopenharmony_ci output += scriptContent.output 31088c88e8eSopenharmony_ci 31188c88e8eSopenharmony_ci output += process.env.DEVICE_LEVEL === DEVICE_LEVEL.RICH ? loadPageCheckRich(name, extscript, extcss, isEntry) : 31288c88e8eSopenharmony_ci loadPageCheckLite(extscript, extcss) 31388c88e8eSopenharmony_ci return output 31488c88e8eSopenharmony_ci } 31588c88e8eSopenharmony_ci return output 31688c88e8eSopenharmony_ci} 31788c88e8eSopenharmony_ci 31888c88e8eSopenharmony_cifunction loadPageCheckElementLength (_this, elementLength, frag, elementNames, resourcePath, 31988c88e8eSopenharmony_ci customLang, parentPath) { 32088c88e8eSopenharmony_ci let output = '' 32188c88e8eSopenharmony_ci if (elementLength) { 32288c88e8eSopenharmony_ci for (let i = 0; i < elementLength; i++) { 32388c88e8eSopenharmony_ci const element = frag.element[i] 32488c88e8eSopenharmony_ci let src = resourcePath 32588c88e8eSopenharmony_ci if (element.src) { 32688c88e8eSopenharmony_ci src = element.src 32788c88e8eSopenharmony_ci if (!src.match(/\.hml$/)) { 32888c88e8eSopenharmony_ci src = src.concat('.hml') 32988c88e8eSopenharmony_ci } 33088c88e8eSopenharmony_ci const filePath = path.join(path.dirname(resourcePath), src) 33188c88e8eSopenharmony_ci if (!fs.existsSync(filePath) && src.match(/^(\/|\.)/)) { 33288c88e8eSopenharmony_ci logWarn(_this, [{ 33388c88e8eSopenharmony_ci reason: 'ERROR: The file path of custom element does not exist, src: ' + src 33488c88e8eSopenharmony_ci }]) 33588c88e8eSopenharmony_ci return '' 33688c88e8eSopenharmony_ci } 33788c88e8eSopenharmony_ci if (!element.name) { 33888c88e8eSopenharmony_ci element.name = path.parse(src).name 33988c88e8eSopenharmony_ci } 34088c88e8eSopenharmony_ci element.name = element.name.toLowerCase(); 34188c88e8eSopenharmony_ci elements[parentPath] = elements[parentPath] || {}; 34288c88e8eSopenharmony_ci if (elements[parentPath][element.name]) { 34388c88e8eSopenharmony_ci logWarn(_this, [{ 34488c88e8eSopenharmony_ci reason: `ERROR: The element name can not be same with the page ` + 34588c88e8eSopenharmony_ci `"${element.name}" (ignore case).` 34688c88e8eSopenharmony_ci }]); 34788c88e8eSopenharmony_ci } else { 34888c88e8eSopenharmony_ci elements[parentPath][element.name] = true; 34988c88e8eSopenharmony_ci } 35088c88e8eSopenharmony_ci checkEntry(_this, filePath, element.src) 35188c88e8eSopenharmony_ci } 35288c88e8eSopenharmony_ci else { 35388c88e8eSopenharmony_ci logWarn(_this, [{ 35488c88e8eSopenharmony_ci reason: 'ERROR: src attributes must be set for custom elements.' 35588c88e8eSopenharmony_ci }]) 35688c88e8eSopenharmony_ci return '' 35788c88e8eSopenharmony_ci } 35888c88e8eSopenharmony_ci elementNames.push(element.name) 35988c88e8eSopenharmony_ci output += getRequireString(_this, getLoaderString('element', { 36088c88e8eSopenharmony_ci customLang, 36188c88e8eSopenharmony_ci name: element.name, 36288c88e8eSopenharmony_ci source: src 36388c88e8eSopenharmony_ci }), `${src}?name=${element.name}&parentPath=${parentPath}`) 36488c88e8eSopenharmony_ci } 36588c88e8eSopenharmony_ci } 36688c88e8eSopenharmony_ci return output 36788c88e8eSopenharmony_ci} 36888c88e8eSopenharmony_ci 36988c88e8eSopenharmony_cifunction loadPageFindCss (_this, filename, customLang) { 37088c88e8eSopenharmony_ci let output = '' 37188c88e8eSopenharmony_ci let extcss = false 37288c88e8eSopenharmony_ci const cssFileName = filename + '.css' 37388c88e8eSopenharmony_ci if (fs.existsSync(cssFileName)) { 37488c88e8eSopenharmony_ci extcss = true 37588c88e8eSopenharmony_ci output = 'var $app_style$ = ' + getRequireString(_this, getLoaderString('style', { 37688c88e8eSopenharmony_ci customLang, 37788c88e8eSopenharmony_ci lang: undefined, 37888c88e8eSopenharmony_ci element: undefined, 37988c88e8eSopenharmony_ci elementName: undefined, 38088c88e8eSopenharmony_ci source: cssFileName 38188c88e8eSopenharmony_ci }), cssFileName) 38288c88e8eSopenharmony_ci } 38388c88e8eSopenharmony_ci else { 38488c88e8eSopenharmony_ci // find less 38588c88e8eSopenharmony_ci const lessFileName = filename + '.less' 38688c88e8eSopenharmony_ci if (fs.existsSync(lessFileName)) { 38788c88e8eSopenharmony_ci extcss = true 38888c88e8eSopenharmony_ci output = 'var $app_style$ = ' + getRequireString(_this, getLoaderString('style', { 38988c88e8eSopenharmony_ci customLang, 39088c88e8eSopenharmony_ci lang: 'less', 39188c88e8eSopenharmony_ci element: undefined, 39288c88e8eSopenharmony_ci elementName: undefined, 39388c88e8eSopenharmony_ci source: lessFileName 39488c88e8eSopenharmony_ci }), lessFileName) 39588c88e8eSopenharmony_ci } 39688c88e8eSopenharmony_ci else { 39788c88e8eSopenharmony_ci // find scss 39888c88e8eSopenharmony_ci const scssFileName = filename + '.scss' 39988c88e8eSopenharmony_ci if (fs.existsSync(scssFileName)) { 40088c88e8eSopenharmony_ci extcss = true 40188c88e8eSopenharmony_ci output = 'var $app_style$ = ' + getRequireString(_this, getLoaderString('style', { 40288c88e8eSopenharmony_ci customLang, 40388c88e8eSopenharmony_ci lang: 'scss', 40488c88e8eSopenharmony_ci element: undefined, 40588c88e8eSopenharmony_ci elementName: undefined, 40688c88e8eSopenharmony_ci source: scssFileName 40788c88e8eSopenharmony_ci }), scssFileName) 40888c88e8eSopenharmony_ci } 40988c88e8eSopenharmony_ci else { 41088c88e8eSopenharmony_ci // find sass 41188c88e8eSopenharmony_ci const sassFileName = filename + '.sass' 41288c88e8eSopenharmony_ci if (fs.existsSync(sassFileName)) { 41388c88e8eSopenharmony_ci extcss = true 41488c88e8eSopenharmony_ci output = 'var $app_style$ = ' + getRequireString(_this, getLoaderString('style', { 41588c88e8eSopenharmony_ci customLang, 41688c88e8eSopenharmony_ci lang: 'sass', 41788c88e8eSopenharmony_ci element: undefined, 41888c88e8eSopenharmony_ci elementName: undefined, 41988c88e8eSopenharmony_ci source: sassFileName 42088c88e8eSopenharmony_ci }), sassFileName) 42188c88e8eSopenharmony_ci } 42288c88e8eSopenharmony_ci else { 42388c88e8eSopenharmony_ci extcss = false 42488c88e8eSopenharmony_ci } 42588c88e8eSopenharmony_ci } 42688c88e8eSopenharmony_ci } 42788c88e8eSopenharmony_ci } 42888c88e8eSopenharmony_ci return { 42988c88e8eSopenharmony_ci extcss: extcss, 43088c88e8eSopenharmony_ci output: output 43188c88e8eSopenharmony_ci } 43288c88e8eSopenharmony_ci} 43388c88e8eSopenharmony_ci 43488c88e8eSopenharmony_cifunction loadPageFindJs (_this, filename, customLang) { 43588c88e8eSopenharmony_ci let output = '' 43688c88e8eSopenharmony_ci let extscript = false 43788c88e8eSopenharmony_ci const jsFileName = filename + '.js' 43888c88e8eSopenharmony_ci if (!fs.existsSync(jsFileName)) { 43988c88e8eSopenharmony_ci extscript = false 44088c88e8eSopenharmony_ci console.log('missing ' + jsFileName) 44188c88e8eSopenharmony_ci } 44288c88e8eSopenharmony_ci else { 44388c88e8eSopenharmony_ci extscript = true 44488c88e8eSopenharmony_ci output = 'var $app_script$ = ' + getRequireString(_this, getLoaderString('script', { 44588c88e8eSopenharmony_ci customLang, 44688c88e8eSopenharmony_ci lang: undefined, 44788c88e8eSopenharmony_ci element: undefined, 44888c88e8eSopenharmony_ci elementName: undefined, 44988c88e8eSopenharmony_ci source: jsFileName 45088c88e8eSopenharmony_ci }), jsFileName) 45188c88e8eSopenharmony_ci } 45288c88e8eSopenharmony_ci return { 45388c88e8eSopenharmony_ci extscript: extscript, 45488c88e8eSopenharmony_ci output: output 45588c88e8eSopenharmony_ci } 45688c88e8eSopenharmony_ci} 45788c88e8eSopenharmony_ci 45888c88e8eSopenharmony_cifunction loadPageCheckRich (name, extscript, extcss, isEntry) { 45988c88e8eSopenharmony_ci let output = '' 46088c88e8eSopenharmony_ci output += ` 46188c88e8eSopenharmony_ci$app_define$('@app-component/${name}', [], function($app_require$, $app_exports$, $app_module$) { 46288c88e8eSopenharmony_ci` + (extscript ? ` 46388c88e8eSopenharmony_ci$app_script$($app_module$, $app_exports$, $app_require$) 46488c88e8eSopenharmony_ciif ($app_exports$.__esModule && $app_exports$.default) { 46588c88e8eSopenharmony_ci$app_module$.exports = $app_exports$.default 46688c88e8eSopenharmony_ci} 46788c88e8eSopenharmony_ci` : '') + ` 46888c88e8eSopenharmony_ci$app_module$.exports.template = $app_template$ 46988c88e8eSopenharmony_ci` + (extcss ? ` 47088c88e8eSopenharmony_ci$app_module$.exports.style = $app_style$ 47188c88e8eSopenharmony_ci` : '') + ` 47288c88e8eSopenharmony_ci}) 47388c88e8eSopenharmony_ci` 47488c88e8eSopenharmony_ci if (isEntry) { 47588c88e8eSopenharmony_ci output += `$app_bootstrap$('@app-component/${name}'` + ',undefined' + ',undefined' + `)` 47688c88e8eSopenharmony_ci } 47788c88e8eSopenharmony_ci return output 47888c88e8eSopenharmony_ci} 47988c88e8eSopenharmony_ci 48088c88e8eSopenharmony_cifunction loadPageCheckLite (extscript, extcss) { 48188c88e8eSopenharmony_ci return (extscript ? `var options=$app_script$\n if ($app_script$.__esModule) {\n 48288c88e8eSopenharmony_ci options = $app_script$.default;\n }\n` : `var options={}\n`) + 48388c88e8eSopenharmony_ci (extcss ? `options.styleSheet=$app_style$\n` : ``) + 48488c88e8eSopenharmony_ci `options.render=$app_template$;\nmodule.exports=new ViewModel(options);` 48588c88e8eSopenharmony_ci} 48688c88e8eSopenharmony_ci 48788c88e8eSopenharmony_cifor (const key in legacy) { 48888c88e8eSopenharmony_ci loader[key] = legacy[key] 48988c88e8eSopenharmony_ci} 49088c88e8eSopenharmony_ci 49188c88e8eSopenharmony_cifunction checkEntry(_this, filePath, elementSrc) { 49288c88e8eSopenharmony_ci if (_this._compilation.entries) { 49388c88e8eSopenharmony_ci for (var key of _this._compilation.entries.keys()) { 49488c88e8eSopenharmony_ci const entryPath = path.join(path.resolve(process.env.projectPath), key + '.hml'); 49588c88e8eSopenharmony_ci if (entryPath === filePath) { 49688c88e8eSopenharmony_ci logWarn(_this, [{ 49788c88e8eSopenharmony_ci reason: `WARNING: The page "${elementSrc}" configured in 'config.json'` + 49888c88e8eSopenharmony_ci ` can not be uesd as a custom component.` + 49988c88e8eSopenharmony_ci `To ensure that the debugging function is normal, please delete this page in 'config.json'.` 50088c88e8eSopenharmony_ci }]); 50188c88e8eSopenharmony_ci } 50288c88e8eSopenharmony_ci } 50388c88e8eSopenharmony_ci } 50488c88e8eSopenharmony_ci} 50588c88e8eSopenharmony_ci 50688c88e8eSopenharmony_cimodule.exports = loader