* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
const path = require('path')
const transCardArray = require('./templater/bind').transCardArray
const resourceReferenceParsing = require('./resource-reference-script')
import { logWarn } from './util'
const REG_EVENT_STRING = /("\s*\$event\..+")|('\s*\$event\..+')/g
const REG_EVENT = /\$event\.[\w]+/g
const REG_THIS = /this\..*/g
module.exports = function (source) {
this.cacheable && this.cacheable()
const extName = path.extname(this.resourcePath)
if (process.env.DEVICE_LEVEL === 'card') {
source = source.replace(/\/\*((\n|\r|.)*?)\*\//mg, "")
source = source.replace(/(\s|\;|^|\{|\})\/\/.*$/mg, "$1")
if (extName === '.js' || extName === '.json') {
if(source.trim().indexOf('export default') === 0) {
source = source.replace('export default', '')
}
source = resourceReferenceParsing(source)
source = source.replace(REG_EVENT_STRING, item => {
return item.slice(1,-1)
})
source = source.replace(REG_EVENT, item => {
return '"' + item + '"'
})
source = source.replace(REG_THIS, item => {
if (item.charAt(item.length-1) !== '\"' &&
item.charAt(item.length-1) !== '\'' &&
item.slice(-2) !== '\"\,' &&
item.slice(-2) !== '\'\,') {
if (item.charAt(item.length-1) === ',') {
item = `"{{${transCardArray(item.slice(0, -1))}}}",`.replace(/this\./g, '')
} else {
item = `"{{${transCardArray(item)}}}"`.replace(/this\./g,'')
}
}
return item
})
if (extName === '.js') {
try {
source = JSON.stringify(eval('(' + source + ')'))
} catch (e) {
logWarn(this, [{
reason: 'ERROR: Failed to parse the file : ' + this.resourcePath + `\n${e}`
}])
return `{}`
}
} else {
return source
}
}
}
return `module.exports = ${source}`
}