1/* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 */ 19 20import { 21 logWarn 22} from './util' 23 24import { 25 parseTemplate 26} from './parser' 27const compiler = require('./lite/lite-transform-template') 28const { DEVICE_LEVEL } = require('./lite/lite-enum') 29module.exports = function (source) { 30 if (process.env.DEVICE_LEVEL !== DEVICE_LEVEL.RICH && source.lastIndexOf('</element>') > 0) { 31 const count = source.lastIndexOf('</element>') 32 source = source.substr(count + 10, source.length) 33 } 34 this.cacheable && this.cacheable() 35 36 const callback = this.async() 37 38 let hasError = false 39 parseTemplate(source, this.resourcePath) 40 .then(({ parsed, log }) => { 41 if (log && log.length) { 42 hasError = logWarn(this, log) 43 } 44 // If there is an error during compilation, an empty object is returned 45 if (process.env.DEVICE_LEVEL === DEVICE_LEVEL.LITE) { 46 if (hasError) { 47 parsed = `function () { return {} }` 48 } 49 else { 50 parsed = compiler.transformTemplate(parsed) 51 } 52 } 53 callback(null, parsed) 54 }).catch(e => { 55 logWarn(this, [{ 56 reason: 'ERROR: Failed to parse the HML file. ' + e 57 }]) 58 callback('') 59 }) 60} 61