Comparing version 0.2.5 to 0.2.6-beta
@@ -1,100 +0,1 @@ | ||
"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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.wx2tt = void 0; | ||
/** wx to tt | ||
* @author | ||
*/ | ||
const path_1 = __importDefault(require("path")); | ||
const utils = __importStar(require("./utils/index")); | ||
const log_1 = require("./utils/log"); | ||
const transform_1 = require("./transform"); | ||
/** | ||
* options.src 源地址 | ||
* options.dist 目标地址 | ||
* options.log 日志地址 | ||
*/ | ||
function wx2tt(options, cb) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
options.isIDE = options.isIDE || false; | ||
log_1.log.init({ isIDE: options.isIDE }); | ||
if (!options.src) { | ||
const errorMsg = 'argument options.src is required'; | ||
log_1.log.printLog(`⛔ ${errorMsg}`, log_1.Level.ERROR); | ||
cb && cb(errorMsg); | ||
return; | ||
} | ||
const valid = utils.isDirValid(options.src); | ||
if (!valid) { | ||
const errorMsg = `${options.src} is not a wx miniprogram project`; | ||
log_1.log.printLog(`⛔ ${errorMsg}`, log_1.Level.INFO); | ||
cb && cb(errorMsg); | ||
return; | ||
} | ||
options.dist = utils.isDirectory(options.dist) | ||
? options.dist | ||
: utils.getDefaultDest(options.src); | ||
let defaultLog = options.dist || options.src; | ||
if (!utils.isDirectory(defaultLog)) { | ||
defaultLog = path_1.default.dirname(defaultLog); | ||
} | ||
options.log = defaultLog; | ||
const context = Object.assign(Object.assign({}, options), { data: {} }); | ||
log_1.log.printLog('🛠️ Transform source project...', log_1.Level.INFO); | ||
try { | ||
yield utils.copyProject(options.src, options.dist); | ||
yield (0, transform_1.transformApi)(context); | ||
yield (0, transform_1.transformView)(context); | ||
yield (0, transform_1.transformScript)(context); | ||
yield (0, transform_1.transformStyle)(context); | ||
yield (0, transform_1.transformConfig)(context); | ||
yield utils.auditCode(context); | ||
log_1.log.printLog('🎊 Congratulations, transform done! Please check transform log in', log_1.Level.SUCCESS); | ||
log_1.log.printLog(`📝 ${path_1.default.resolve(options.log, 'log.txt')}`, log_1.Level.UNDERLINE); | ||
log_1.log.save(options.log); | ||
cb && cb(null, log_1.log.result); | ||
} | ||
catch (err) { | ||
log_1.log.recordLog({ | ||
type: 'error', | ||
message: `Transform error: ${err}`, | ||
}, log_1.Level.ERROR, true); | ||
log_1.log.printLog(`📝 ${path_1.default.resolve(options.log, 'log.txt')}`, log_1.Level.UNDERLINE); | ||
log_1.log.save(options.log); | ||
cb && cb(err, log_1.log.result); | ||
} | ||
return log_1.log.result; | ||
}); | ||
} | ||
exports.wx2tt = wx2tt; | ||
; | ||
"use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,o){void 0===o&&(o=r),e[o]=t[r]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(r){if(r&&r.__esModule)return r;var o={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(o,r,i);return t(o,r),o},o=this&&this.__awaiter||function(e,t,r,o){return new(r||(r=Promise))((function(i,n){function s(e){try{u(o.next(e))}catch(e){n(e)}}function l(e){try{u(o.throw(e))}catch(e){n(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,l)}u((o=o.apply(e,t||[])).next())}))},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.wx2tt=void 0;const n=i(require("path")),s=r(require("./utils/index")),l=require("./utils/log"),u=require("./transform");exports.wx2tt=function(e,t){return o(this,void 0,void 0,(function*(){if(e.isIDE=e.isIDE||!1,l.log.init({isIDE:e.isIDE}),!e.src){const e="argument options.src is required";return l.log.printLog(`⛔ ${e}`,l.Level.ERROR),void(t&&t(e))}if(!s.isDirValid(e.src)){const r=`${e.src} is not a wx miniprogram project`;return l.log.printLog(`⛔ ${r}`,l.Level.INFO),void(t&&t(r))}e.dist=s.isDirectory(e.dist)?e.dist:s.getDefaultDest(e.src);let r=e.dist||e.src;s.isDirectory(r)||(r=n.default.dirname(r)),e.log=r;const o=Object.assign(Object.assign({},e),{data:{}});l.log.printLog("🛠️ Transform source project...",l.Level.INFO);try{yield s.copyProject(e.src,e.dist),yield(0,u.transformApi)(o),yield(0,u.transformView)(o),yield(0,u.transformScript)(o),yield(0,u.transformStyle)(o),yield(0,u.transformConfig)(o),yield s.auditCode(o),l.log.printLog("🎊 Congratulations, transform done! Please check transform log in",l.Level.SUCCESS),l.log.printLog(`📝 ${n.default.resolve(e.log,"log.txt")}`,l.Level.UNDERLINE),l.log.save(e.log),t&&t(null,l.log.result)}catch(r){l.log.recordLog({type:"error",message:`Transform error: ${r}`},l.Level.ERROR,!0),l.log.printLog(`📝 ${n.default.resolve(e.log,"log.txt")}`,l.Level.UNDERLINE),l.log.save(e.log),t&&t(r,l.log.result)}return l.log.result}))}; |
@@ -1,27 +0,1 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.parse = void 0; | ||
/** | ||
* 视图内容解析为ast | ||
* | ||
* @file 视图内容解析为ast | ||
*/ | ||
const lodash_1 = require("lodash"); | ||
const constant_1 = require("../utils/constant"); | ||
const index_1 = require("../utils/index"); | ||
function parse(options = {}) { | ||
// @ts-ignore | ||
this.Parser = parser; | ||
function parser(doc) { | ||
const { htmlParser, handler } = (0, index_1.getHtmlParser)(options); | ||
htmlParser.end(doc); | ||
return { | ||
type: 'tag', | ||
name: constant_1.FAKE_ROOT, | ||
attribs: {}, | ||
children: (0, lodash_1.isArray)(handler.dom) ? handler.dom : [handler.dom], | ||
}; | ||
} | ||
} | ||
exports.parse = parse; | ||
; | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.parse=void 0;const e=require("lodash"),r=require("../utils/constant"),t=require("../utils/index");exports.parse=function(s={}){this.Parser=function(i){const{htmlParser:n,handler:o}=(0,t.getHtmlParser)(s);return n.end(i),{type:"tag",name:r.FAKE_ROOT,attribs:{},children:(0,e.isArray)(o.dom)?o.dom:[o.dom]}}}; |
@@ -1,89 +0,1 @@ | ||
"use strict"; | ||
/** | ||
* 视图ast序列化插件 | ||
* | ||
* @file 视图ast序列化插件 | ||
*/ | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.stringify = void 0; | ||
const constant_1 = require("../utils/constant"); | ||
const SINGLE_QUOTE = "'"; | ||
const DOUBLE_QUOTE = '"'; | ||
// 把标签名、属性片段join起来 | ||
const join = (...args) => args.filter((arg) => !!arg).join(' '); | ||
function stringify(options = {}) { | ||
// @ts-ignore | ||
this.Compiler = compiler; | ||
function compiler(tree, file) { | ||
if (!tree) { | ||
return ''; | ||
} | ||
if (Array.isArray(tree)) { | ||
return tree.map((node) => compiler(node, file)).join(''); | ||
} | ||
const { type } = tree; | ||
switch (type) { | ||
case 'tag': { | ||
const children = tree.children; | ||
// 跳过虚假的根节点 | ||
if (tree.name === constant_1.FAKE_ROOT) { | ||
return compiler(children, file); | ||
} | ||
const content = children.map((node) => compiler(node, file)).join(''); | ||
return nodeToString(tree, content, file); | ||
} | ||
case 'text': | ||
return tree.data; | ||
case 'comment': | ||
return `<!--${tree.data}-->`; | ||
} | ||
return ''; | ||
} | ||
} | ||
exports.stringify = stringify; | ||
; | ||
/** | ||
* 生成tag节点的字符串 | ||
* | ||
* @param {Object} node tag节点 | ||
* @param {string} content 子元素字符串 | ||
* @param {VFile} file 文件描述 | ||
* @return {string} | ||
*/ | ||
function nodeToString(node, content, file) { | ||
const { name, attribs, singleQuoteAttribs = {}, selfclose } = node; | ||
const stringAttribs = attribsToString(attribs, singleQuoteAttribs, file); | ||
return selfclose | ||
? `<${join(name, stringAttribs)} />` | ||
: `<${join(name, stringAttribs)}>${content}</${name}>`; | ||
} | ||
/** | ||
* 生成tag节点属性的字符串 | ||
* | ||
* @param {Object} attribs tag节点属性集合 | ||
* @param {Object} singleQuoteAttribs tag节点使用单引号的属性集合 | ||
* @param {VFile} file 文件描述 | ||
* @return {string} | ||
*/ | ||
function attribsToString(attribs, singleQuoteAttribs, file) { | ||
if (!attribs) { | ||
return ''; | ||
} | ||
return Object.keys(attribs) | ||
.map((key) => { | ||
let value = attribs[key]; | ||
if (value === '') { | ||
return key; | ||
} | ||
const quote = singleQuoteAttribs[key] ? SINGLE_QUOTE : DOUBLE_QUOTE; | ||
if (quote === DOUBLE_QUOTE && value.indexOf('\\"') >= 0) { | ||
value = value.replace(/\\"/g, "'"); | ||
file.message('Danger \\" in attribute value'); | ||
} | ||
if (key !== '') { | ||
return `${key}=${quote}${value}${quote}`; | ||
} | ||
return `${key}`; | ||
}) | ||
.join(' '); | ||
} | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.stringify=void 0;const t=require("../utils/constant"),e=(...t)=>t.filter((t=>!!t)).join(" ");exports.stringify=function(r={}){this.Compiler=function r(n,i){if(!n)return"";if(Array.isArray(n))return n.map((t=>r(t,i))).join("");const{type:s}=n;switch(s){case"tag":{const s=n.children;if(n.name===t.FAKE_ROOT)return r(s,i);const o=s.map((t=>r(t,i))).join("");return function(t,r,n){const{name:i,attribs:s,singleQuoteAttribs:o={},selfclose:u}=t,a=function(t,e,r){if(!t)return"";return Object.keys(t).map((n=>{let i=t[n];if(""===i)return n;const s=e[n]?"'":'"';return'"'===s&&i.indexOf('\\"')>=0&&(i=i.replace(/\\"/g,"'"),r.message('Danger \\" in attribute value')),""!==n?`${n}=${s}${i}${s}`:`${n}`})).join(" ")}(s,o,n);return u?`<${e(i,a)} />`:`<${e(i,a)}>${r}</${i}>`}(n,o,i)}case"text":return n.data;case"comment":return`\x3c!--${n.data}--\x3e`}return""}}; |
@@ -1,154 +0,1 @@ | ||
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.wxmlToTtml = void 0; | ||
const script_1 = require("../transform/script"); | ||
const compare_json_1 = __importDefault(require("../config/compare.json")); | ||
const constant_1 = require("../utils/constant"); | ||
const log_1 = require("../utils/log"); | ||
const attr_json_1 = __importDefault(require("../config/attr.json")); | ||
function wxmlToTtml(options = {}) { | ||
const { path: filePath, ctx } = options; | ||
return transform; | ||
function transform(tree, file) { | ||
transformTree(tree, file); | ||
} | ||
function transformTree(tree, file) { | ||
if (tree.type === 'tag') { | ||
const name = tree.name; | ||
const children = tree.children; | ||
componentCheck(name, filePath); | ||
if (name === constant_1.WX_SUFFIX.script) { | ||
tree.name = constant_1.TT_SUFFIX.script; | ||
if (tree.attribs && tree.attribs.src) { | ||
tree = transformScript(tree); | ||
} | ||
else if (tree.children.length > 0) { | ||
const child = tree.children[0]; | ||
if (child.type !== 'text') { | ||
log_1.log.recordLog({ | ||
type: '编译出错', | ||
message: "wxs 标签内部只支持文本内容" | ||
}, log_1.Level.ERROR, true); | ||
} | ||
else { | ||
const { data } = child; | ||
const reg = constant_1.WX_REGEXP.script; | ||
const _data = (0, script_1.transformScriptContent)(data); | ||
child.data = `\n${_data}\n`; | ||
} | ||
} | ||
} | ||
if (name === 'import' || name === 'include') { | ||
tree = transformImport(tree); | ||
} | ||
tree.children = children.map((node) => transformTree(node, file)); | ||
tree = transformDirective(tree, filePath); | ||
} | ||
if (tree.type === 'comment') { | ||
tree = transformComment(tree); | ||
} | ||
return tree; | ||
} | ||
} | ||
exports.wxmlToTtml = wxmlToTtml; | ||
; | ||
function transformScript(node) { | ||
const { attribs } = node; | ||
if (attribs && attribs.src) { | ||
const regexp = /\.wxs$/i; | ||
const src = attribs.src.replace(regexp, `.${constant_1.TT_SUFFIX.script}`); | ||
return Object.assign(Object.assign({}, node), { attribs: Object.assign(Object.assign({}, attribs), { src }) }); | ||
} | ||
return node; | ||
} | ||
/** | ||
* 转换import和include标签 | ||
* | ||
* @param {Object} node 节点对象 | ||
* @param {VFile} file 虚拟文件 | ||
* @param {Object} options 转换配置 | ||
* @return {Object} | ||
*/ | ||
function transformImport(node) { | ||
const { attribs } = node; | ||
if (attribs && attribs.src) { | ||
let src = attribs.src.replace(/\.wxml$/i, `.${constant_1.TT_SUFFIX.view}`); | ||
// src中没有扩展名的添加默认扩展名.ttml | ||
if (!/\w+\.\w+$/.test(src)) { | ||
src += `.${constant_1.TT_SUFFIX.view}`; | ||
} | ||
return Object.assign(Object.assign({}, node), { attribs: Object.assign(Object.assign({}, attribs), { src }) }); | ||
} | ||
return node; | ||
} | ||
/** | ||
* 转换注释中的wxml | ||
*/ | ||
function transformComment(node) { | ||
const { data } = node; | ||
if (data) { | ||
const newComment = data.replace(/\.wxml$/i, `.${constant_1.TT_SUFFIX.view}`); | ||
return Object.assign(Object.assign({}, node), { data: newComment }); | ||
} | ||
return node; | ||
} | ||
/** | ||
* 转换标签上的directive | ||
* | ||
* @param {Object} node 节点对象 | ||
* @param {VFile} file 虚拟文件 | ||
* @param {Object} options 转换配置 | ||
* @return {Object} | ||
*/ | ||
function transformDirective(node, filePath) { | ||
const { attribs, singleQuoteAttribs = {} } = node; | ||
if (!attribs) { | ||
return node; | ||
} | ||
if (node.type === 'tag' && attr_json_1.default[node.name]) { | ||
Object.keys(attribs).forEach((attr) => { | ||
if (attr_json_1.default[node.name].indexOf(attr) > -1) { | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.attribNotSupport, | ||
file: filePath, | ||
message: `<${node.name}> attribute: ${attr} 暂未支持,请参考开发者文档完成适配。`, | ||
}, log_1.Level.WARNING, true); | ||
} | ||
}); | ||
} | ||
const newAttribs = Object.keys(attribs).reduce((newAttribs, key) => { | ||
// 删除空wx:前缀 | ||
const newKey = key.replace(/^wx:$/, '').replace(/^wx:/, `${constant_1.TT_PREFIX}:`); | ||
const value = attribs[key]; | ||
const newValue = value; | ||
newAttribs[newKey] = newValue; | ||
if (singleQuoteAttribs[key]) { | ||
singleQuoteAttribs[newKey] = true; | ||
} | ||
return newAttribs; | ||
}, {}); | ||
return Object.assign(Object.assign({}, node), { attribs: newAttribs, singleQuoteAttribs }); | ||
} | ||
function componentCheck(name, filePath) { | ||
if (typeof name !== 'string' || | ||
name === 'import' || | ||
name === 'template' || | ||
name === 'include' || | ||
name === 'wxs') | ||
return; | ||
const { component } = compare_json_1.default; | ||
// 对于自定义组件,目前未加依赖判断 | ||
if (!component[name]) | ||
return; | ||
const { wx, tt } = component[name]; | ||
if (wx && !tt) { | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.componentNotSupport, | ||
file: filePath, | ||
message: `component: ${name} 暂未支持,请参考开发者文档完成适配。`, | ||
}, log_1.Level.WARNING, true); | ||
} | ||
} | ||
"use strict";var t=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.wxmlToTtml=void 0;const e=require("../transform/script"),r=t(require("../config/compare.json")),n=require("../utils/constant"),s=require("../utils/log"),i=t(require("../config/attr.json"));exports.wxmlToTtml=function(t={}){const{path:c,ctx:o}=t;return function(t,e){a(t,e)};function a(t,o){if("tag"===t.type){const u=t.name,l=t.children;if(function(t,e){if("string"!=typeof t||"import"===t||"template"===t||"include"===t||"wxs"===t)return;const{component:i}=r.default;if(!i[t])return;const{wx:c,tt:o}=i[t];c&&!o&&s.log.recordLog({type:n.LOG_TYPE.componentNotSupport,file:e,message:`component: ${t} 暂未支持,请参考开发者文档完成适配。`},s.Level.WARNING,!0)}(u,c),u===n.WX_SUFFIX.script)if(t.name=n.TT_SUFFIX.script,t.attribs&&t.attribs.src)t=function(t){const{attribs:e}=t;if(e&&e.src){const r=/\.wxs$/i,s=e.src.replace(r,`.${n.TT_SUFFIX.script}`);return Object.assign(Object.assign({},t),{attribs:Object.assign(Object.assign({},e),{src:s})})}return t}(t);else if(t.children.length>0){const r=t.children[0];if("text"!==r.type)s.log.recordLog({type:"编译出错",message:"wxs 标签内部只支持文本内容"},s.Level.ERROR,!0);else{const{data:t}=r,s=(n.WX_REGEXP.script,(0,e.transformScriptContent)(t));r.data=`\n${s}\n`}}"import"!==u&&"include"!==u||(t=function(t){const{attribs:e}=t;if(e&&e.src){let r=e.src.replace(/\.wxml$/i,`.${n.TT_SUFFIX.view}`);return/\w+\.\w+$/.test(r)||(r+=`.${n.TT_SUFFIX.view}`),Object.assign(Object.assign({},t),{attribs:Object.assign(Object.assign({},e),{src:r})})}return t}(t)),t.children=l.map((t=>a(t,o))),t=function(t,e){const{attribs:r,singleQuoteAttribs:c={}}=t;if(!r)return t;"tag"===t.type&&i.default[t.name]&&Object.keys(r).forEach((r=>{i.default[t.name].indexOf(r)>-1&&s.log.recordLog({type:n.LOG_TYPE.attribNotSupport,file:e,message:`<${t.name}> attribute: ${r} 暂未支持,请参考开发者文档完成适配。`},s.Level.WARNING,!0)}));const o=Object.keys(r).reduce(((t,e)=>{const s=e.replace(/^wx:$/,"").replace(/^wx:/,`${n.TT_PREFIX}:`),i=r[e];return t[s]=i,c[e]&&(c[s]=!0),t}),{});return Object.assign(Object.assign({},t),{attribs:o,singleQuoteAttribs:c})}(t,c)}return"comment"===t.type&&(t=function(t){const{data:e}=t;if(e){const r=e.replace(/\.wxml$/i,`.${n.TT_SUFFIX.view}`);return Object.assign(Object.assign({},t),{data:r})}return t}(t)),t}}; |
@@ -1,117 +0,1 @@ | ||
"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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.transformApi = void 0; | ||
const utils = __importStar(require("../utils")); | ||
const parser = __importStar(require("@babel/parser")); | ||
const traverse_1 = __importDefault(require("@babel/traverse")); | ||
const generator_1 = __importDefault(require("@babel/generator")); | ||
const types = __importStar(require("@babel/types")); | ||
const compare_json_1 = __importDefault(require("../config/compare.json")); | ||
const constant_1 = require("../utils/constant"); | ||
const log_1 = require("../utils/log"); | ||
function traverseApi(path, filePath) { | ||
if (types.isMemberExpression(path.node) && | ||
types.isIdentifier(path.node.object, { | ||
name: constant_1.WX_PREFIX, | ||
}) && | ||
types.isIdentifier(path.node.property)) { | ||
const apiName = path.node.property.name; | ||
if (apiName === 'cloud') { | ||
path.node.object.name = constant_1.TT_PREFIX; | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.apiNotSupport, | ||
file: filePath, | ||
message: `api: ${apiName} 暂未支持云开发模式,仅更换前缀,请参考开发者文档完成适配。转换 ${constant_1.WX_PREFIX}.${apiName} -> ${constant_1.TT_PREFIX}.${apiName}`, | ||
}, log_1.Level.WARNING, true); | ||
return; | ||
} | ||
const { api } = compare_json_1.default; | ||
if (api[apiName]) { | ||
path.node.object.name = constant_1.TT_PREFIX; | ||
if (api[apiName][constant_1.WX_PREFIX] && !api[apiName][constant_1.TT_PREFIX]) { | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.apiNotSupport, | ||
file: filePath, | ||
message: `api: ${apiName} 暂未支持,仅更换前缀,请参考开发者文档完成适配。转换 ${constant_1.WX_PREFIX}.${apiName} -> ${constant_1.TT_PREFIX}.${apiName}`, | ||
}, log_1.Level.WARNING, true); | ||
} | ||
} | ||
else { | ||
path.node.object.name = constant_1.TT_PREFIX; | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.apiNotSupport, | ||
file: filePath, | ||
message: `api: ${apiName} 未能识别,请确保该 api 使用正确。转换 ${constant_1.WX_PREFIX}.${apiName} -> ${constant_1.TT_PREFIX}.${apiName}`, | ||
}, log_1.Level.WARNING, true); | ||
} | ||
} | ||
} | ||
function transformApiContent(content, filePath) { | ||
const ast = parser.parse(content, { | ||
sourceType: 'module', | ||
}); | ||
(0, traverse_1.default)(ast, { | ||
enter(path) { | ||
traverseApi(path, filePath); | ||
}, | ||
}); | ||
const _content = (0, generator_1.default)(ast, {}, content); | ||
return _content.code; | ||
} | ||
const transformApi = function (ctx) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
try { | ||
const files = yield utils.traverseFiles(ctx, 'js'); | ||
if (files.length < 1) | ||
return; | ||
for (const i in files) { | ||
const filePath = files[i]; | ||
const content = yield utils.getContent(filePath); | ||
const _content = transformApiContent(content, filePath); | ||
yield utils.saveFile(filePath, _content); | ||
} | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.transformApiFile, | ||
message: '🍻 Successfully transform js files', | ||
}, log_1.Level.INFO, true); | ||
} | ||
catch (err) { | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.transformApiFile, | ||
message: `transform js files error: ${err}`, | ||
}, log_1.Level.ERROR, true); | ||
} | ||
}); | ||
}; | ||
exports.transformApi = transformApi; | ||
"use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,o){void 0===o&&(o=r),e[o]=t[r]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(r){if(r&&r.__esModule)return r;var o={};if(null!=r)for(var n in r)"default"!==n&&Object.prototype.hasOwnProperty.call(r,n)&&e(o,r,n);return t(o,r),o},o=this&&this.__awaiter||function(e,t,r,o){return new(r||(r=Promise))((function(n,i){function s(e){try{u(o.next(e))}catch(e){i(e)}}function a(e){try{u(o.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}u((o=o.apply(e,t||[])).next())}))},n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.transformApi=void 0;const i=r(require("../utils")),s=r(require("@babel/parser")),a=n(require("@babel/traverse")),u=n(require("@babel/generator")),c=r(require("@babel/types")),l=n(require("../config/compare.json")),f=require("../utils/constant"),p=require("../utils/log");function d(e,t){const r=s.parse(e,{sourceType:"module"});(0,a.default)(r,{enter(e){!function(e,t){if(c.isMemberExpression(e.node)&&c.isIdentifier(e.node.object,{name:f.WX_PREFIX})&&c.isIdentifier(e.node.property)){const r=e.node.property.name;if("cloud"===r)return e.node.object.name=f.TT_PREFIX,void p.log.recordLog({type:f.LOG_TYPE.apiNotSupport,file:t,message:`api: ${r} 暂未支持云开发模式,仅更换前缀,请参考开发者文档完成适配。转换 ${f.WX_PREFIX}.${r} -> ${f.TT_PREFIX}.${r}`},p.Level.WARNING,!0);const{api:o}=l.default;o[r]?(e.node.object.name=f.TT_PREFIX,o[r][f.WX_PREFIX]&&!o[r][f.TT_PREFIX]&&p.log.recordLog({type:f.LOG_TYPE.apiNotSupport,file:t,message:`api: ${r} 暂未支持,仅更换前缀,请参考开发者文档完成适配。转换 ${f.WX_PREFIX}.${r} -> ${f.TT_PREFIX}.${r}`},p.Level.WARNING,!0)):(e.node.object.name=f.TT_PREFIX,p.log.recordLog({type:f.LOG_TYPE.apiNotSupport,file:t,message:`api: ${r} 未能识别,请确保该 api 使用正确。转换 ${f.WX_PREFIX}.${r} -> ${f.TT_PREFIX}.${r}`},p.Level.WARNING,!0))}}(e,t)}});return(0,u.default)(r,{},e).code}exports.transformApi=function(e){return o(this,void 0,void 0,(function*(){try{const t=yield i.traverseFiles(e,"js");if(t.length<1)return;for(const e in t){const r=t[e],o=d(yield i.getContent(r),r);yield i.saveFile(r,o)}p.log.recordLog({type:f.LOG_TYPE.transformApiFile,message:"🍻 Successfully transform js files"},p.Level.INFO,!0)}catch(e){p.log.recordLog({type:f.LOG_TYPE.transformApiFile,message:`transform js files error: ${e}`},p.Level.ERROR,!0)}}))}; |
@@ -1,66 +0,1 @@ | ||
"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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.transformConfig = void 0; | ||
const utils = __importStar(require("../utils")); | ||
const constant_1 = require("../utils/constant"); | ||
const log_1 = require("../utils/log"); | ||
function parserConfig(content, filePath) { | ||
if (content.plugins) { | ||
Object.keys(content.plugins).forEach((name) => { | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.configNotSupport, | ||
file: filePath, | ||
message: `plugin: ${name} 暂未支持引用插件,请参考开发者文档完成适配。`, | ||
}, log_1.Level.WARNING, true); | ||
}); | ||
} | ||
if (content.useExtendedLib && | ||
Object.keys(content.useExtendedLib).length > 0) { | ||
Object.keys(content.useExtendedLib).forEach((lib) => { | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.configNotSupport, | ||
file: filePath, | ||
message: `extendedLib: ${lib} 暂未支持引用扩展库,请参考开发者文档完成适配。`, | ||
}, log_1.Level.WARNING, true); | ||
}); | ||
} | ||
} | ||
// 主要是分包加载相关的配置转换 | ||
const transformConfig = function (ctx) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const files = yield utils.traverseFiles(ctx, 'json'); | ||
for (let i in files) { | ||
const content = yield utils.getJSONContent(files[i]); | ||
parserConfig(content, files[i]); | ||
} | ||
}); | ||
}; | ||
exports.transformConfig = transformConfig; | ||
"use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||function(n){if(n&&n.__esModule)return n;var i={};if(null!=n)for(var o in n)"default"!==o&&Object.prototype.hasOwnProperty.call(n,o)&&e(i,n,o);return t(i,n),i},i=this&&this.__awaiter||function(e,t,n,i){return new(n||(n=Promise))((function(o,r){function u(e){try{s(i.next(e))}catch(e){r(e)}}function c(e){try{s(i.throw(e))}catch(e){r(e)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(u,c)}s((i=i.apply(e,t||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0}),exports.transformConfig=void 0;const o=n(require("../utils")),r=require("../utils/constant"),u=require("../utils/log");function c(e,t){e.plugins&&Object.keys(e.plugins).forEach((e=>{u.log.recordLog({type:r.LOG_TYPE.configNotSupport,file:t,message:`plugin: ${e} 暂未支持引用插件,请参考开发者文档完成适配。`},u.Level.WARNING,!0)})),e.useExtendedLib&&Object.keys(e.useExtendedLib).length>0&&Object.keys(e.useExtendedLib).forEach((e=>{u.log.recordLog({type:r.LOG_TYPE.configNotSupport,file:t,message:`extendedLib: ${e} 暂未支持引用扩展库,请参考开发者文档完成适配。`},u.Level.WARNING,!0)}))}exports.transformConfig=function(e){return i(this,void 0,void 0,(function*(){const t=yield o.traverseFiles(e,"json");for(let e in t){c(yield o.getJSONContent(t[e]),t[e])}}))}; |
@@ -1,13 +0,1 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.transformView = exports.transformScript = exports.transformConfig = exports.transformApi = exports.transformStyle = void 0; | ||
const style_1 = require("./style"); | ||
Object.defineProperty(exports, "transformStyle", { enumerable: true, get: function () { return style_1.transformStyle; } }); | ||
const api_1 = require("./api"); | ||
Object.defineProperty(exports, "transformApi", { enumerable: true, get: function () { return api_1.transformApi; } }); | ||
const config_1 = require("./config"); | ||
Object.defineProperty(exports, "transformConfig", { enumerable: true, get: function () { return config_1.transformConfig; } }); | ||
const script_1 = require("./script"); | ||
Object.defineProperty(exports, "transformScript", { enumerable: true, get: function () { return script_1.transformScript; } }); | ||
const view_1 = require("./view"); | ||
Object.defineProperty(exports, "transformView", { enumerable: true, get: function () { return view_1.transformView; } }); | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.transformView=exports.transformScript=exports.transformConfig=exports.transformApi=exports.transformStyle=void 0;const r=require("./style");Object.defineProperty(exports,"transformStyle",{enumerable:!0,get:function(){return r.transformStyle}});const e=require("./api");Object.defineProperty(exports,"transformApi",{enumerable:!0,get:function(){return e.transformApi}});const t=require("./config");Object.defineProperty(exports,"transformConfig",{enumerable:!0,get:function(){return t.transformConfig}});const n=require("./script");Object.defineProperty(exports,"transformScript",{enumerable:!0,get:function(){return n.transformScript}});const o=require("./view");Object.defineProperty(exports,"transformView",{enumerable:!0,get:function(){return o.transformView}}); |
@@ -1,92 +0,1 @@ | ||
"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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.transformScript = exports.transformScriptContent = void 0; | ||
const constant_1 = require("../utils/constant"); | ||
const log_1 = require("../utils/log"); | ||
const utils = __importStar(require("../utils")); | ||
const parser = __importStar(require("@babel/parser")); | ||
const traverse_1 = __importDefault(require("@babel/traverse")); | ||
const generator_1 = __importDefault(require("@babel/generator")); | ||
const types = __importStar(require("@babel/types")); | ||
function traverseScript(path) { | ||
if (types.isCallExpression(path.node) && | ||
types.isIdentifier(path.node.callee, { | ||
name: 'require', | ||
})) { | ||
for (const i in path.node.arguments) { | ||
const _node = path.node.arguments[i]; | ||
if (types.isStringLiteral(_node)) { | ||
_node.value = _node.value.replace(constant_1.WX_REGEXP.script, `.${constant_1.TT_SUFFIX.script}`); | ||
} | ||
} | ||
} | ||
} | ||
function transformScriptContent(content) { | ||
const ast = parser.parse(content, { | ||
sourceType: 'module', | ||
}); | ||
(0, traverse_1.default)(ast, { | ||
enter(path) { | ||
traverseScript(path); | ||
}, | ||
}); | ||
const _content = (0, generator_1.default)(ast, {}, content); | ||
return _content.code; | ||
} | ||
exports.transformScriptContent = transformScriptContent; | ||
const transformScript = function (ctx) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
try { | ||
const files = yield utils.traverseFiles(ctx, constant_1.TT_SUFFIX.script); | ||
if (files.length < 1) | ||
return; | ||
for (const i in files) { | ||
const content = yield utils.getContent(files[i]); | ||
const _content = transformScriptContent(content); | ||
yield utils.saveFile(files[i], _content); | ||
} | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.transformScriptFile, | ||
message: '🍻 Successfully transform wxs files', | ||
}, log_1.Level.INFO, true); | ||
} | ||
catch (err) { | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.transformScriptFile, | ||
message: `transform wxs files error: ${err}`, | ||
}, log_1.Level.ERROR, true); | ||
} | ||
}); | ||
}; | ||
exports.transformScript = transformScript; | ||
"use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(r){if(r&&r.__esModule)return r;var n={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(n,r,i);return t(n,r),n},n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{a(n.next(e))}catch(e){o(e)}}function u(e){try{a(n.throw(e))}catch(e){o(e)}}function a(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,u)}a((n=n.apply(e,t||[])).next())}))},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.transformScript=exports.transformScriptContent=void 0;const o=require("../utils/constant"),s=require("../utils/log"),u=r(require("../utils")),a=r(require("@babel/parser")),c=i(require("@babel/traverse")),l=i(require("@babel/generator")),f=r(require("@babel/types"));function d(e){const t=a.parse(e,{sourceType:"module"});(0,c.default)(t,{enter(e){!function(e){if(f.isCallExpression(e.node)&&f.isIdentifier(e.node.callee,{name:"require"}))for(const t in e.node.arguments){const r=e.node.arguments[t];f.isStringLiteral(r)&&(r.value=r.value.replace(o.WX_REGEXP.script,`.${o.TT_SUFFIX.script}`))}}(e)}});return(0,l.default)(t,{},e).code}exports.transformScriptContent=d;exports.transformScript=function(e){return n(this,void 0,void 0,(function*(){try{const t=yield u.traverseFiles(e,o.TT_SUFFIX.script);if(t.length<1)return;for(const e in t){const r=d(yield u.getContent(t[e]));yield u.saveFile(t[e],r)}s.log.recordLog({type:o.LOG_TYPE.transformScriptFile,message:"🍻 Successfully transform wxs files"},s.Level.INFO,!0)}catch(e){s.log.recordLog({type:o.LOG_TYPE.transformScriptFile,message:`transform wxs files error: ${e}`},s.Level.ERROR,!0)}}))}; |
@@ -1,62 +0,1 @@ | ||
"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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.transformStyle = void 0; | ||
const utils = __importStar(require("../utils")); | ||
const log_1 = require("../utils/log"); | ||
const constant_1 = require("../utils/constant"); | ||
function transformStyleContent(content) { | ||
return content.replace(/\.wxss/gi, `.${constant_1.TT_SUFFIX.style}`); | ||
} | ||
const transformStyle = function (ctx) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
try { | ||
const files = yield utils.traverseFiles(ctx, constant_1.TT_SUFFIX.style); | ||
if (files.length < 1) | ||
return; | ||
for (const i in files) { | ||
const content = yield utils.getContent(files[i]); | ||
const _content = transformStyleContent(content); | ||
yield utils.saveFile(files[i], _content); | ||
} | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.transformStyleFile, | ||
message: '🍻 Successfully transform wxss files', | ||
}, log_1.Level.INFO, true); | ||
} | ||
catch (err) { | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.transformStyleFile, | ||
message: `transform wxss files error: ${err}`, | ||
}, log_1.Level.ERROR, true); | ||
} | ||
}); | ||
}; | ||
exports.transformStyle = transformStyle; | ||
"use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(r){if(r&&r.__esModule)return r;var n={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(n,r,i);return t(n,r),n},n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{u(n.next(e))}catch(e){o(e)}}function l(e){try{u(n.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,l)}u((n=n.apply(e,t||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0}),exports.transformStyle=void 0;const i=r(require("../utils")),o=require("../utils/log"),s=require("../utils/constant");function l(e){return e.replace(/\.wxss/gi,`.${s.TT_SUFFIX.style}`)}exports.transformStyle=function(e){return n(this,void 0,void 0,(function*(){try{const t=yield i.traverseFiles(e,s.TT_SUFFIX.style);if(t.length<1)return;for(const e in t){const r=l(yield i.getContent(t[e]));yield i.saveFile(t[e],r)}o.log.recordLog({type:s.LOG_TYPE.transformStyleFile,message:"🍻 Successfully transform wxss files"},o.Level.INFO,!0)}catch(e){o.log.recordLog({type:s.LOG_TYPE.transformStyleFile,message:`transform wxss files error: ${e}`},o.Level.ERROR,!0)}}))}; |
@@ -1,77 +0,1 @@ | ||
"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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.transformView = void 0; | ||
const stringify_1 = require("../plugins/stringify"); | ||
const constant_1 = require("../utils/constant"); | ||
const log_1 = require("../utils/log"); | ||
const unified_1 = __importDefault(require("unified")); | ||
const utils = __importStar(require("../utils")); | ||
const wxml_to_ttml_1 = require("../plugins/wxml-to-ttml"); | ||
const parse_1 = require("../plugins/parse"); | ||
// 转换视图文件 | ||
function transformViewContent(path, content, ctx) { | ||
return (0, unified_1.default)() | ||
.use(parse_1.parse) | ||
.use(wxml_to_ttml_1.wxmlToTtml, { | ||
path, | ||
ctx, | ||
}) | ||
.use(stringify_1.stringify) | ||
.process(utils.toVFile(path, content)); | ||
} | ||
const transformView = function (ctx) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
try { | ||
const files = yield utils.traverseFiles(ctx, constant_1.TT_SUFFIX.view); | ||
if (files.length < 1) | ||
return; | ||
for (const i in files) { | ||
const content = yield utils.getContent(files[i]); | ||
const _content = yield transformViewContent(files[i], content, ctx); | ||
yield utils.saveFile(files[i], String(_content)); | ||
} | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.transformViewFile, | ||
message: '🍻 Successfully transform wxml files', | ||
}, log_1.Level.INFO, true); | ||
} | ||
catch (err) { | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.transformViewFile, | ||
message: `transform wxml files error: ${err}`, | ||
}, log_1.Level.ERROR, true); | ||
} | ||
}); | ||
}; | ||
exports.transformView = transformView; | ||
"use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(r){if(r&&r.__esModule)return r;var i={};if(null!=r)for(var n in r)"default"!==n&&Object.prototype.hasOwnProperty.call(r,n)&&e(i,r,n);return t(i,r),i},i=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))((function(n,o){function u(e){try{l(i.next(e))}catch(e){o(e)}}function s(e){try{l(i.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(u,s)}l((i=i.apply(e,t||[])).next())}))},n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.transformView=void 0;const o=require("../plugins/stringify"),u=require("../utils/constant"),s=require("../utils/log"),l=n(require("unified")),c=r(require("../utils")),a=require("../plugins/wxml-to-ttml"),f=require("../plugins/parse");function d(e,t,r){return(0,l.default)().use(f.parse).use(a.wxmlToTtml,{path:e,ctx:r}).use(o.stringify).process(c.toVFile(e,t))}exports.transformView=function(e){return i(this,void 0,void 0,(function*(){try{const t=yield c.traverseFiles(e,u.TT_SUFFIX.view);if(t.length<1)return;for(const r in t){const i=yield c.getContent(t[r]),n=yield d(t[r],i,e);yield c.saveFile(t[r],String(n))}s.log.recordLog({type:u.LOG_TYPE.transformViewFile,message:"🍻 Successfully transform wxml files"},s.Level.INFO,!0)}catch(e){s.log.recordLog({type:u.LOG_TYPE.transformViewFile,message:`transform wxml files error: ${e}`},s.Level.ERROR,!0)}}))}; |
@@ -1,50 +0,1 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.LOG_TYPE = exports.FAKE_ROOT = exports.TT_SUFFIX = exports.WX_SUFFIX = exports.WX_REGEXP = exports.TT_PREFIX = exports.WX_PREFIX = exports.LOG_COLOR_TYPE = exports.HOST_MAP = void 0; | ||
exports.HOST_MAP = { | ||
13: '今日头条', | ||
35: '今日头条极速版', | ||
1128: '抖音', | ||
}; | ||
exports.LOG_COLOR_TYPE = { | ||
info: 'cyan', | ||
error: 'red', | ||
success: 'green', | ||
warning: 'yellow', | ||
}; | ||
exports.WX_PREFIX = 'wx'; | ||
exports.TT_PREFIX = 'tt'; | ||
exports.WX_REGEXP = { | ||
view: /\.wxml$/, | ||
style: /\.wxss$/, | ||
script: /\.wxs$/, | ||
}; | ||
exports.WX_SUFFIX = { | ||
view: 'wxml', | ||
style: 'wxss', | ||
script: 'wxs', | ||
}; | ||
exports.TT_SUFFIX = { | ||
view: "ttml" /* VIEW */, | ||
style: "ttss" /* STYLE */, | ||
script: "sjs" /* SCRIPT */ | ||
}; | ||
// 虚拟根节点名称 | ||
exports.FAKE_ROOT = Symbol('fake-root'); | ||
// 日志类型 | ||
exports.LOG_TYPE = { | ||
// 文件名后缀转换 | ||
wxml2ttml: 'wxml -> ttml', | ||
wxss2ttss: 'wxss -> ttss', | ||
wxs2sjs: 'wxs -> sjs', | ||
// 文件内容转换 | ||
transformViewFile: 'transform view file', | ||
transformStyleFile: 'transform style file', | ||
transformScriptFile: 'transform wxs file', | ||
transformApiFile: 'transform api file', | ||
// 能力支持 | ||
apiNotSupport: 'api is not supported', | ||
componentNotSupport: 'component is not supported', | ||
configNotSupport: 'config is not supported', | ||
attribNotSupport: 'attribute is not supported', | ||
}; | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.LOG_TYPE=exports.FAKE_ROOT=exports.TT_SUFFIX=exports.WX_SUFFIX=exports.WX_REGEXP=exports.TT_PREFIX=exports.WX_PREFIX=exports.LOG_COLOR_TYPE=exports.HOST_MAP=void 0,exports.HOST_MAP={13:"今日头条",35:"今日头条极速版",1128:"抖音"},exports.LOG_COLOR_TYPE={info:"cyan",error:"red",success:"green",warning:"yellow"},exports.WX_PREFIX="wx",exports.TT_PREFIX="tt",exports.WX_REGEXP={view:/\.wxml$/,style:/\.wxss$/,script:/\.wxs$/},exports.WX_SUFFIX={view:"wxml",style:"wxss",script:"wxs"},exports.TT_SUFFIX={view:"ttml",style:"ttss",script:"sjs"},exports.FAKE_ROOT=Symbol("fake-root"),exports.LOG_TYPE={wxml2ttml:"wxml -> ttml",wxss2ttss:"wxss -> ttss",wxs2sjs:"wxs -> sjs",transformViewFile:"transform view file",transformStyleFile:"transform style file",transformScriptFile:"transform wxs file",transformApiFile:"transform api file",apiNotSupport:"api is not supported",componentNotSupport:"component is not supported",configNotSupport:"config is not supported",attribNotSupport:"attribute is not supported"}; |
@@ -1,369 +0,1 @@ | ||
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.auditCode = exports.getDefaultDest = exports.toVFile = exports.saveLog = exports.saveFile = exports.getContentSync = exports.getJSONContent = exports.getContent = exports.isDirectory = exports.copyProject = exports.traverseFiles = exports.getHtmlParser = exports.isDirValid = void 0; | ||
/** | ||
* @file wx convert to tt, util file | ||
*/ | ||
const fs_extra_1 = __importDefault(require("fs-extra")); | ||
const recursive_copy_1 = __importDefault(require("recursive-copy")); | ||
const mkdirp_1 = __importDefault(require("mkdirp")); | ||
const path_1 = __importDefault(require("path")); | ||
const vfile_1 = __importDefault(require("vfile")); | ||
const glob_1 = __importDefault(require("glob")); | ||
const stricter_htmlparser2_1 = require("stricter-htmlparser2"); | ||
const constant_1 = require("./constant"); | ||
const log_1 = require("./log"); | ||
const lodash_1 = require("lodash"); | ||
const isDirValid = function (path) { | ||
const appJsonPath = `${path}/app.json`; | ||
try { | ||
const res = fs_extra_1.default.statSync(appJsonPath); | ||
return res.isFile(); | ||
} | ||
catch (err) { | ||
return false; | ||
} | ||
}; | ||
exports.isDirValid = isDirValid; | ||
const getHtmlParser = function (options) { | ||
options = Object.assign({}, { | ||
xmlMode: false, | ||
lowerCaseAttributeNames: false, | ||
recognizeSelfClosing: true, | ||
lowerCaseTags: false, | ||
}, options); | ||
const handler = new stricter_htmlparser2_1.DomHandler(); | ||
const htmlParser = new stricter_htmlparser2_1.Parser(handler, options); | ||
return { htmlParser, handler }; | ||
}; | ||
exports.getHtmlParser = getHtmlParser; | ||
/** | ||
* | ||
* @param {object} config 配置文件 | ||
* @param {string} suffix 文件名后缀 | ||
* @returns | ||
*/ | ||
const traverseFiles = function (config, suffix) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const files = yield new Promise((resolve) => { | ||
let filePath = config.dist; | ||
let extname; | ||
const isDir = isDirectory(config.src); | ||
if (isDir) { | ||
filePath = `${filePath}/**/*.${suffix}`; | ||
extname = path_1.default.extname(filePath); | ||
} | ||
else { | ||
const newFileName = renameFile(config.src); | ||
filePath = path_1.default.resolve(filePath, path_1.default.basename(newFileName)); | ||
extname = path_1.default.extname(filePath); | ||
} | ||
if (extname === `.${suffix}`) { | ||
if (suffix == 'js') { | ||
// 针对 js 文件,忽略部分文件 | ||
(0, glob_1.default)(filePath, { | ||
ignore: ['**/node_modules/**/*.js', '**/*.ttpkg.js'], | ||
nodir: true, | ||
}, (err, res) => { | ||
resolve(err ? [] : res); | ||
}); | ||
} | ||
else { | ||
if (isDir) { | ||
(0, glob_1.default)(filePath, { nodir: true }, (err, res) => { | ||
resolve(err ? [] : res); | ||
}); | ||
} | ||
else { | ||
resolve([filePath]); | ||
} | ||
} | ||
} | ||
else { | ||
resolve([]); | ||
} | ||
}); | ||
return files; | ||
}); | ||
}; | ||
exports.traverseFiles = traverseFiles; | ||
/** | ||
* 拷贝项目 | ||
* | ||
* @param {string} fromPath 目标目录路径 | ||
* @param {string} toPath 生成目录路径 | ||
* @return {Promise} | ||
*/ | ||
const copyProject = function (fromPath, toPath) { | ||
if (isDirectory(fromPath)) { | ||
return copyDirectory(fromPath, toPath); | ||
} | ||
// 支持转换入口为单一文件 | ||
return copyFile(fromPath, toPath); | ||
}; | ||
exports.copyProject = copyProject; | ||
/** | ||
* 拷贝目录 | ||
* | ||
* @param {string} fromPath 目标目录路径 | ||
* @param {string} toPath 生成目录路径 | ||
* @return {Promise} | ||
*/ | ||
function copyDirectory(fromPath, toPath) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const ignoreReg = /(node_modules|DS_store)/i; | ||
const arr = []; | ||
const lists = fs_extra_1.default | ||
.readdirSync(fromPath) | ||
.filter((item) => !ignoreReg.test(item)); | ||
const isToPathDir = isDirectory(toPath); | ||
const _toPath = isToPathDir ? toPath : path_1.default.dirname(toPath); | ||
// 如果目标路径不是目录,则将文件复制到对应的文件夹下,并给出警告 | ||
if (!isToPathDir) { | ||
// TODO 警告提示 | ||
} | ||
const options = { | ||
overwrite: true, | ||
expand: true, | ||
dot: true, | ||
rename(filePath) { | ||
// 转换深层文件夹下的文件名后缀 | ||
return renameFileExt(filePath); | ||
}, | ||
}; | ||
for (const i in lists) { | ||
const fileName = !isDirectory(lists[i]) | ||
? lists[i] | ||
.replace(constant_1.WX_REGEXP.view, `.${constant_1.TT_SUFFIX.view}`) | ||
.replace(constant_1.WX_REGEXP.style, `.${constant_1.TT_SUFFIX.style}`) | ||
.replace(constant_1.WX_REGEXP.script, `.${constant_1.TT_SUFFIX.script}`) | ||
: lists[i]; | ||
// 只是转换跟目标目录同级的文件名后缀 | ||
arr.push((0, recursive_copy_1.default)(path_1.default.join(fromPath, lists[i]), path_1.default.join(_toPath, fileName), options)); | ||
} | ||
const res = yield Promise.all(arr); | ||
printCopyInfo(res); | ||
return res; | ||
}); | ||
} | ||
/** | ||
* 记录修改了后缀的文件信息 | ||
* @param {array} records | ||
* @returns | ||
*/ | ||
function printCopyInfo(records) { | ||
if (!(0, lodash_1.isArray)(records)) | ||
return; | ||
for (let i in records) { | ||
if ((0, lodash_1.isArray)(records[i])) { | ||
printCopyInfo(records[i]); | ||
continue; | ||
} | ||
const { src, dest, stats } = records[i]; | ||
if (stats.isDirectory()) | ||
continue; | ||
if (constant_1.WX_REGEXP.view.test(src)) { | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.wxml2ttml, | ||
file: dest, | ||
message: `转换视图文件后缀 wxml -> ttml`, | ||
}, log_1.Level.INFO); | ||
continue; | ||
} | ||
if (constant_1.WX_REGEXP.style.test(src)) { | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.wxss2ttss, | ||
file: dest, | ||
message: `转换样式文件后缀 wxss -> ttss`, | ||
}, log_1.Level.INFO); | ||
continue; | ||
} | ||
if (constant_1.WX_REGEXP.script.test(src)) { | ||
log_1.log.recordLog({ | ||
type: constant_1.LOG_TYPE.wxs2sjs, | ||
file: dest, | ||
message: `转换 wxs 文件后缀 wxs -> sjs`, | ||
}, log_1.Level.INFO); | ||
continue; | ||
} | ||
} | ||
} | ||
function renameFile(name) { | ||
const reg = constant_1.WX_REGEXP; | ||
let specialType; | ||
Object.keys(reg).forEach((type) => { | ||
if (reg[type].test(name)) { | ||
specialType = type; | ||
} | ||
}); | ||
return specialType | ||
? name.replace(reg[specialType], `.${constant_1.TT_SUFFIX[specialType]}`) | ||
: name; | ||
} | ||
/** | ||
* 拷贝单文件 | ||
* | ||
* @param {string} fromPath 目标文件路径 | ||
* @param {string} toPath 生成文件路径 | ||
* @return {Promise} | ||
*/ | ||
function copyFile(fromPath, toPath) { | ||
let fileName = path_1.default.basename(fromPath); | ||
fileName = renameFile(fileName); | ||
if (isDirectory(toPath)) { | ||
toPath = path_1.default.join(toPath, fileName); | ||
} | ||
else { | ||
toPath = path_1.default.join(path_1.default.dirname(toPath), fileName); | ||
} | ||
return fs_extra_1.default.copy(fromPath, toPath); | ||
} | ||
/** | ||
* 重命名文件扩展名 | ||
* | ||
* @param {string} filePath 文件路径 | ||
* @return {string} 处理后路径 | ||
*/ | ||
function renameFileExt(filePath) { | ||
if (isDirectory(filePath)) | ||
return filePath; | ||
if (constant_1.WX_REGEXP.view.test(filePath)) { | ||
return filePath.replace(constant_1.WX_REGEXP.view, `.${constant_1.TT_SUFFIX.view}`); | ||
} | ||
if (constant_1.WX_REGEXP.style.test(filePath)) { | ||
return filePath.replace(constant_1.WX_REGEXP.style, `.${constant_1.TT_SUFFIX.style}`); | ||
} | ||
if (constant_1.WX_REGEXP.script.test(filePath)) { | ||
return filePath.replace(constant_1.WX_REGEXP.script, `.${constant_1.TT_SUFFIX.script}`); | ||
} | ||
return filePath; | ||
} | ||
/** | ||
* 判断路径是否为目录 | ||
* | ||
* @param {string} entryPath 路径 | ||
* @return {boolean} | ||
*/ | ||
function isDirectory(entryPath) { | ||
return !path_1.default.extname(entryPath); | ||
} | ||
exports.isDirectory = isDirectory; | ||
// get content | ||
const getContent = function (filepath) { | ||
return new Promise((resolve) => { | ||
fs_extra_1.default.readFile(filepath, (err, con) => { | ||
resolve(con.toString()); | ||
}); | ||
}); | ||
}; | ||
exports.getContent = getContent; | ||
const getJSONContent = function (filepath) { | ||
return new Promise((resolve) => { | ||
fs_extra_1.default.readJSON(filepath, (err, con) => { | ||
resolve(con); | ||
}); | ||
}); | ||
}; | ||
exports.getJSONContent = getJSONContent; | ||
// get content sync | ||
const getContentSync = function (filepath) { | ||
return fs_extra_1.default.readFileSync(filepath).toString(); | ||
}; | ||
exports.getContentSync = getContentSync; | ||
// write content | ||
const saveFile = function (path, con) { | ||
return new Promise((resolve, reject) => { | ||
fs_extra_1.default.writeFile(path, con, (error) => { | ||
if (error) { | ||
reject(error); | ||
} | ||
else { | ||
resolve(true); | ||
} | ||
}); | ||
}); | ||
}; | ||
exports.saveFile = saveFile; | ||
// write content | ||
const saveLog = function (ContentPath, con) { | ||
return new Promise((resolve, reject) => { | ||
(0, mkdirp_1.default)(path_1.default.dirname(ContentPath), (err) => { | ||
if (err) { | ||
reject(err); | ||
} | ||
else { | ||
fs_extra_1.default.writeFileSync(ContentPath, con); | ||
} | ||
}); | ||
}); | ||
}; | ||
exports.saveLog = saveLog; | ||
/** | ||
* 创建虚拟文件,并添加关联文件 | ||
* | ||
* @param {string} filePath 文件路径 | ||
* @param {string} contents 文件内容 | ||
* @return {VFile} | ||
*/ | ||
const toVFile = function (filePath, contents) { | ||
const file = (0, vfile_1.default)({ path: filePath, contents }); | ||
const related = { | ||
style: constant_1.TT_SUFFIX.style, | ||
view: constant_1.TT_SUFFIX.view, | ||
js: 'js', | ||
config: 'json', | ||
script: constant_1.TT_SUFFIX.script, | ||
}; | ||
const { cwd, dirname, stem, extname } = file; | ||
file.data.relatedFiles = Object.keys(related).reduce((prev, type) => { | ||
const ext = `.${related[type]}`; | ||
if (ext !== extname) { | ||
const filePath = path_1.default.resolve(cwd, dirname, stem + ext); | ||
fs_extra_1.default.existsSync(filePath) && (prev[type] = filePath); | ||
} | ||
return prev; | ||
}, {}); | ||
return file; | ||
}; | ||
exports.toVFile = toVFile; | ||
const getDefaultDest = function (dist) { | ||
return path_1.default.join(path_1.default.dirname(dist), `${path_1.default.basename(dist)}-tt`); | ||
}; | ||
exports.getDefaultDest = getDefaultDest; | ||
const auditCode = function (ctx) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
try { | ||
const audit = require('tma-code-audit'); | ||
const filePath = ctx.dist; | ||
const res = yield audit(filePath); | ||
Object.keys(res).forEach((item) => { | ||
const name = item.startsWith('$') ? item.slice(1) : item; | ||
const type = item.startsWith('$') ? 'component:' : 'api:'; | ||
// @ts-ignore | ||
const hosts = res[item].map((code) => constant_1.HOST_MAP[code]).join(', '); | ||
log_1.log.recordLog({ | ||
type: type.indexOf('api') > -1 | ||
? constant_1.LOG_TYPE.apiNotSupport | ||
: constant_1.LOG_TYPE.componentNotSupport, | ||
message: `${type} ${name} 在宿主${hosts}中暂未支持。`, | ||
}, log_1.Level.WARNING, true); | ||
}); | ||
} | ||
catch (e) { | ||
log_1.log.recordLog(`audit code error: ${e}`, log_1.Level.ERROR, true); | ||
} | ||
}); | ||
}; | ||
exports.auditCode = auditCode; | ||
"use strict";var e=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(s,o){function i(e){try{u(n.next(e))}catch(e){o(e)}}function a(e){try{u(n.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}u((n=n.apply(e,t||[])).next())}))},t=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.auditCode=exports.getDefaultDest=exports.toVFile=exports.saveLog=exports.saveFile=exports.getContentSync=exports.getJSONContent=exports.getContent=exports.isDirectory=exports.copyProject=exports.traverseFiles=exports.getHtmlParser=exports.isDirValid=void 0;const r=t(require("fs-extra")),n=t(require("recursive-copy")),s=t(require("mkdirp")),o=t(require("path")),i=t(require("vfile")),a=t(require("glob")),u=require("stricter-htmlparser2"),l=require("./constant"),c=require("./log"),d=require("lodash");exports.isDirValid=function(e){const t=`${e}/app.json`;try{return r.default.statSync(t).isFile()}catch(e){return!1}};exports.getHtmlParser=function(e){e=Object.assign({},{xmlMode:!1,lowerCaseAttributeNames:!1,recognizeSelfClosing:!0,lowerCaseTags:!1},e);const t=new u.DomHandler;return{htmlParser:new u.Parser(t,e),handler:t}};exports.traverseFiles=function(t,r){return e(this,void 0,void 0,(function*(){return yield new Promise((e=>{let n,s=t.dist;const i=m(t.src);if(i)s=`${s}/**/*.${r}`,n=o.default.extname(s);else{const e=x(t.src);s=o.default.resolve(s,o.default.basename(e)),n=o.default.extname(s)}n===`.${r}`?"js"==r?(0,a.default)(s,{ignore:["**/node_modules/**/*.js","**/*.ttpkg.js"],nodir:!0},((t,r)=>{e(t?[]:r)})):i?(0,a.default)(s,{nodir:!0},((t,r)=>{e(t?[]:r)})):e([s]):e([])}))}))};function f(e){return{overwrite:!0,expand:!0,dot:!0,rename:t=>function(e,t){if(m(o.default.join(e,t)))return t;if(l.WX_REGEXP.view.test(t))return t.replace(l.WX_REGEXP.view,`.${l.TT_SUFFIX.view}`);if(l.WX_REGEXP.style.test(t))return t.replace(l.WX_REGEXP.style,`.${l.TT_SUFFIX.style}`);if(l.WX_REGEXP.script.test(t))return t.replace(l.WX_REGEXP.script,`.${l.TT_SUFFIX.script}`);return t}(e,t)}}function p(e){if((0,d.isArray)(e))for(let t in e){if((0,d.isArray)(e[t])){p(e[t]);continue}const{src:r,dest:n,stats:s}=e[t];s.isDirectory()||(l.WX_REGEXP.view.test(r)?c.log.recordLog({type:l.LOG_TYPE.wxml2ttml,file:n,message:"转换视图文件后缀 wxml -> ttml"},c.Level.INFO):l.WX_REGEXP.style.test(r)?c.log.recordLog({type:l.LOG_TYPE.wxss2ttss,file:n,message:"转换样式文件后缀 wxss -> ttss"},c.Level.INFO):l.WX_REGEXP.script.test(r)&&c.log.recordLog({type:l.LOG_TYPE.wxs2sjs,file:n,message:"转换 wxs 文件后缀 wxs -> sjs"},c.Level.INFO))}}function x(e){const t=l.WX_REGEXP;let r;return Object.keys(t).forEach((n=>{t[n].test(e)&&(r=n)})),r?e.replace(t[r],`.${l.TT_SUFFIX[r]}`):e}function m(e){return!!e&&r.default.statSync(e).isDirectory()}exports.copyProject=function(t,s){return m(t)?function(t,s){return e(this,void 0,void 0,(function*(){const e=/(node_modules|DS_store)/i,i=[],a=r.default.readdirSync(t).filter((t=>!e.test(t))),u=m(s),c=u?s:o.default.dirname(s);for(const e in a){const r=m(o.default.join(t,a[e]))?a[e]:a[e].replace(l.WX_REGEXP.view,`.${l.TT_SUFFIX.view}`).replace(l.WX_REGEXP.style,`.${l.TT_SUFFIX.style}`).replace(l.WX_REGEXP.script,`.${l.TT_SUFFIX.script}`);i.push((0,n.default)(o.default.join(t,a[e]),o.default.join(c,r),f(o.default.join(t,a[e]))))}const d=yield Promise.all(i);return p(d),d}))}(t,s):function(e,t){let n=o.default.basename(e);n=x(n),t=m(t)?o.default.join(t,n):o.default.join(o.default.dirname(t),n);return r.default.copy(e,t)}(t,s)},exports.isDirectory=m;exports.getContent=function(e){return new Promise((t=>{r.default.readFile(e,((e,r)=>{t(r.toString())}))}))};exports.getJSONContent=function(e){return new Promise((t=>{r.default.readJSON(e,((e,r)=>{t(r)}))}))};exports.getContentSync=function(e){return r.default.readFileSync(e).toString()};exports.saveFile=function(e,t){return new Promise(((n,s)=>{r.default.writeFile(e,t,(e=>{e?s(e):n(!0)}))}))};exports.saveLog=function(e,t){return new Promise(((n,i)=>{(0,s.default)(o.default.dirname(e),(n=>{n?i(n):r.default.writeFileSync(e,t)}))}))};exports.toVFile=function(e,t){const n=(0,i.default)({path:e,contents:t}),s={style:l.TT_SUFFIX.style,view:l.TT_SUFFIX.view,js:"js",config:"json",script:l.TT_SUFFIX.script},{cwd:a,dirname:u,stem:c,extname:d}=n;return n.data.relatedFiles=Object.keys(s).reduce(((e,t)=>{const n=`.${s[t]}`;if(n!==d){const s=o.default.resolve(a,u,c+n);r.default.existsSync(s)&&(e[t]=s)}return e}),{}),n};exports.getDefaultDest=function(e){return o.default.join(o.default.dirname(e),`${o.default.basename(e)}-tt`)};exports.auditCode=function(t){return e(this,void 0,void 0,(function*(){try{const e=require("tma-code-audit"),r=t.dist,n=yield e(r);Object.keys(n).forEach((e=>{const t=e.startsWith("$")?e.slice(1):e,r=e.startsWith("$")?"component:":"api:",s=n[e].map((e=>l.HOST_MAP[e])).join(", ");c.log.recordLog({type:r.indexOf("api")>-1?l.LOG_TYPE.apiNotSupport:l.LOG_TYPE.componentNotSupport,message:`${r} ${t} 在宿主${s}中暂未支持。`},c.Level.WARNING,!0)}))}catch(e){c.log.recordLog(`audit code error: ${e}`,c.Level.ERROR,!0)}}))}; |
@@ -1,202 +0,1 @@ | ||
"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 }); | ||
exports.log = exports.Level = void 0; | ||
const constant_1 = require("./constant"); | ||
const chalk_1 = __importDefault(require("chalk")); | ||
const utils = __importStar(require("./index")); | ||
var Level; | ||
(function (Level) { | ||
Level["SUCCESS"] = "success"; | ||
Level["ERROR"] = "error"; | ||
Level["WARNING"] = "warning"; | ||
Level["INFO"] = "info"; | ||
Level["UNDERLINE"] = "underline"; | ||
})(Level = exports.Level || (exports.Level = {})); | ||
class Log { | ||
constructor() { | ||
this.store = { | ||
info: [], | ||
warning: [], | ||
error: [], | ||
success: [], | ||
}; | ||
this.logMap = new Map(); | ||
this.isIDE = false; | ||
this.beginTime = null; | ||
this.endTime = null; | ||
this.result = null; | ||
this.status = null; | ||
} | ||
init(params) { | ||
this.clear(); | ||
this.isIDE = params.isIDE; | ||
this.beginTime = new Date(); | ||
} | ||
isLogExist(log, level) { | ||
const id = `${level}_${JSON.stringify(log)}`; | ||
if (this.logMap.has(id)) | ||
return true; | ||
this.logMap.set(id, 1); | ||
return false; | ||
} | ||
recordLog(log, level, isPrint = false) { | ||
if (this.isLogExist(log, level)) | ||
return; | ||
isPrint && this.printLog(log, level); | ||
if (level === Level.UNDERLINE) { | ||
this.store.success.push(log); | ||
} | ||
else { | ||
this.store[level].push(log); | ||
} | ||
} | ||
printLog(log, level) { | ||
const msg = typeof log === 'string' ? log : log.message; | ||
if (level === Level.UNDERLINE) { | ||
console.log(chalk_1.default.blue.underline.bold(msg)); | ||
} | ||
else { | ||
if (this.attentionLog(log, level)) | ||
return; | ||
console.log(chalk_1.default[constant_1.LOG_COLOR_TYPE[level]](msg)); | ||
} | ||
} | ||
attentionLog(log, level) { | ||
if (typeof log === 'string' || level === Level.INFO || level === Level.SUCCESS) | ||
return false; | ||
if (level === Level.WARNING) { | ||
console.log(chalk_1.default.keyword('orange')(`⚡ ${chalk_1.default.yellow('[Warning]: ')} ${log.message}`)); | ||
log.file && console.log(chalk_1.default.yellow(` ${log.file}`)); | ||
console.log('--------------------------------------------------------'); | ||
} | ||
else { | ||
console.log(chalk_1.default.keyword('orange')(`⛔ ${chalk_1.default.redBright('[Error]: ')} ${log.message}`)); | ||
log.file && console.log(chalk_1.default.redBright(` ${log.file}`)); | ||
console.log('--------------------------------------------------------'); | ||
} | ||
return true; | ||
} | ||
sortLog(logPath) { | ||
const duration = String(this.endTime.getTime() - this.beginTime.getTime()) + ' ms'; | ||
const transformExtnameFiles = { | ||
wxml2ttml: [], | ||
wxss2ttss: [], | ||
wxs2sjs: [], | ||
}; | ||
const _extnameTypes = Object.keys(transformExtnameFiles); | ||
const transformContent = { | ||
apiNotSupport: [], | ||
componentNotSupport: [], | ||
configNotSupport: [], | ||
attribNotSupport: [], | ||
}; | ||
const _contentTypes = Object.keys(transformContent); | ||
for (let i in this.store.info) { | ||
const log = this.store.info[i]; | ||
if (typeof log === 'string') | ||
continue; | ||
if (!log.file) | ||
continue; | ||
_extnameTypes.forEach((type) => { | ||
if (log.type === constant_1.LOG_TYPE[type]) { | ||
log.file && transformExtnameFiles[type].push(log.file); | ||
return; | ||
} | ||
}); | ||
} | ||
for (let j in this.store.warning) { | ||
const log = this.store.warning[j]; | ||
if (typeof log === 'string') | ||
continue; | ||
_contentTypes.forEach((type) => { | ||
if (log.type === constant_1.LOG_TYPE[type]) { | ||
if (log.file) { | ||
transformContent[type].push({ | ||
file: log.file, | ||
message: log.message, | ||
}); | ||
} | ||
else { | ||
transformContent[type].push({ | ||
message: log.message, | ||
}); | ||
} | ||
} | ||
}); | ||
} | ||
const result = { | ||
beginTime: this.beginTime.toString(), | ||
duration, | ||
transformFileExtName: _extnameTypes | ||
.map((type) => { | ||
if (transformExtnameFiles[type].length < 1) | ||
return null; | ||
return { | ||
type: constant_1.LOG_TYPE[type], | ||
message: `转换文件名后缀 ${constant_1.LOG_TYPE[type]},共计 ${transformExtnameFiles[type].length} 个文件`, | ||
files: transformExtnameFiles[type], | ||
}; | ||
}) | ||
.filter((item) => item), | ||
needAttention: _contentTypes | ||
.map((type) => { | ||
if (transformContent[type].length < 1) | ||
return null; | ||
return { | ||
type: constant_1.LOG_TYPE[type], | ||
content: transformContent[type], | ||
}; | ||
}) | ||
.filter((item) => item), | ||
transformError: this.store.error.map((err) => { | ||
if (typeof err !== 'string' && err.type && err.message) { | ||
return err.message; | ||
} | ||
return err; | ||
}), | ||
transformLog: logPath, | ||
}; | ||
return JSON.stringify(result, null, 2); | ||
} | ||
save(logPath) { | ||
this.endTime = new Date(); | ||
const _logPath = `${logPath}/log.txt`; | ||
const result = this.sortLog(_logPath); | ||
this.result = result; | ||
utils.saveLog(_logPath, result); | ||
} | ||
clear() { | ||
this.store.info = []; | ||
this.store.warning = []; | ||
this.store.error = []; | ||
this.store.success = []; | ||
this.result = null; | ||
this.logMap.clear(); | ||
this.beginTime = null; | ||
this.endTime = null; | ||
this.status = null; | ||
} | ||
} | ||
exports.log = new Log(); | ||
"use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,s,i){void 0===i&&(i=s),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[s]}})}:function(e,t,s,i){void 0===i&&(i=s),e[i]=t[s]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(s){if(s&&s.__esModule)return s;var i={};if(null!=s)for(var o in s)"default"!==o&&Object.prototype.hasOwnProperty.call(s,o)&&e(i,s,o);return t(i,s),i},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.log=exports.Level=void 0;const o=require("./constant"),r=i(require("chalk")),n=s(require("./index"));var l;!function(e){e.SUCCESS="success",e.ERROR="error",e.WARNING="warning",e.INFO="info",e.UNDERLINE="underline"}(l=exports.Level||(exports.Level={}));exports.log=new class{constructor(){this.store={info:[],warning:[],error:[],success:[]},this.logMap=new Map,this.isIDE=!1,this.beginTime=null,this.endTime=null,this.result=null,this.status=null}init(e){this.clear(),this.isIDE=e.isIDE,this.beginTime=new Date}isLogExist(e,t){const s=`${t}_${JSON.stringify(e)}`;return!!this.logMap.has(s)||(this.logMap.set(s,1),!1)}recordLog(e,t,s=!1){this.isLogExist(e,t)||(s&&this.printLog(e,t),t===l.UNDERLINE?this.store.success.push(e):this.store[t].push(e))}printLog(e,t){const s="string"==typeof e?e:e.message;if(t===l.UNDERLINE)console.log(r.default.blue.underline.bold(s));else{if(this.attentionLog(e,t))return;console.log(r.default[o.LOG_COLOR_TYPE[t]](s))}}attentionLog(e,t){return"string"!=typeof e&&t!==l.INFO&&t!==l.SUCCESS&&(t===l.WARNING?(console.log(r.default.keyword("orange")(`⚡ ${r.default.yellow("[Warning]: ")} ${e.message}`)),e.file&&console.log(r.default.yellow(` ${e.file}`)),console.log("--------------------------------------------------------")):(console.log(r.default.keyword("orange")(`⛔ ${r.default.redBright("[Error]: ")} ${e.message}`)),e.file&&console.log(r.default.redBright(` ${e.file}`)),console.log("--------------------------------------------------------")),!0)}sortLog(e){const t=String(this.endTime.getTime()-this.beginTime.getTime())+" ms",s={wxml2ttml:[],wxss2ttss:[],wxs2sjs:[]},i=Object.keys(s),r={apiNotSupport:[],componentNotSupport:[],configNotSupport:[],attribNotSupport:[]},n=Object.keys(r);for(let e in this.store.info){const t=this.store.info[e];"string"!=typeof t&&(t.file&&i.forEach((e=>{t.type!==o.LOG_TYPE[e]||t.file&&s[e].push(t.file)})))}for(let e in this.store.warning){const t=this.store.warning[e];"string"!=typeof t&&n.forEach((e=>{t.type===o.LOG_TYPE[e]&&(t.file?r[e].push({file:t.file,message:t.message}):r[e].push({message:t.message}))}))}const l={beginTime:this.beginTime.toString(),duration:t,transformFileExtName:i.map((e=>s[e].length<1?null:{type:o.LOG_TYPE[e],message:`转换文件名后缀 ${o.LOG_TYPE[e]},共计 ${s[e].length} 个文件`,files:s[e]})).filter((e=>e)),needAttention:n.map((e=>r[e].length<1?null:{type:o.LOG_TYPE[e],content:r[e]})).filter((e=>e)),transformError:this.store.error.map((e=>"string"!=typeof e&&e.type&&e.message?e.message:e)),transformLog:e};return JSON.stringify(l,null,2)}save(e){this.endTime=new Date;const t=`${e}/log.txt`,s=this.sortLog(t);this.result=s,n.saveLog(t,s)}clear(){this.store.info=[],this.store.warning=[],this.store.error=[],this.store.success=[],this.result=null,this.logMap.clear(),this.beginTime=null,this.endTime=null,this.status=null}}; |
{ | ||
"name": "wx-to-tt", | ||
"version": "0.2.5", | ||
"version": "0.2.6-beta", | ||
"description": "transform wx micro app to bytedance micro app", | ||
@@ -10,3 +10,3 @@ "main": "dist/index.js", | ||
"scripts": { | ||
"build": "tsc -p ./", | ||
"build": "tsc -p ./ && node ../../scripts/compress.js ./dist", | ||
"prepublish": "yarn build" | ||
@@ -13,0 +13,0 @@ }, |
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 2 instances in 1 package
83261
1283
14