@mybricks/cloud-com-loader
Advanced tools
Comparing version 1.0.1 to 1.0.2-beta1
{ | ||
"name": "@mybricks/cloud-com-loader", | ||
"version": "1.0.1", | ||
"version": "1.0.2-beta1", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
const fs = require("fs"); | ||
const pt = require("path"); | ||
var request = require('request'); | ||
const request = require('request'); | ||
const types = require("@babel/types"); | ||
@@ -49,3 +49,3 @@ const parser = require("@babel/parser"); | ||
// import 依赖组件 | ||
function getImportComsCode (deps, tagName) { | ||
function getImportComsCode (deps) { | ||
let importComsCode = ` | ||
@@ -57,17 +57,17 @@ import ErrorBoundary from "${ErrorBoundary}"; | ||
if (Array.isArray(deps)) { | ||
deps.forEach(dep => { | ||
const { namespace, version } = dep; | ||
const CloudComponentName = `CloudComponent${tagName}${namespace}${version}`.replace(/@/g, "").replace(/\./g, "").replace(/-/g, ""); | ||
const CloudComponentFile = `./com/${CloudComponentName}.js`; | ||
const CloudComponentPath = pt.join(__dirname, CloudComponentFile); | ||
deps.forEach(dep => { | ||
const { | ||
version, | ||
namespace, | ||
CloudComponentName, | ||
CloudComponentPath | ||
} = dep; | ||
importComsCode = importComsCode + ` | ||
import ${CloudComponentName} from "${CloudComponentPath}"; | ||
comDefs["${namespace}-${version}"] = { | ||
runtime: ${CloudComponentName} | ||
};\n | ||
` | ||
}) | ||
} | ||
importComsCode = importComsCode + ` | ||
import ${CloudComponentName} from "${CloudComponentPath}"; | ||
comDefs["${namespace}-${version}"] = { | ||
runtime: ${CloudComponentName} | ||
};\n | ||
` | ||
}) | ||
@@ -177,5 +177,3 @@ return importComsCode; | ||
const comsMapKey = `${tagName}${separator}${defValue}`; | ||
const CloudComponentName = `CloudComponent${(tagName+defValue).replace(/@/g, "").replace(/\./g, "").replace(/-/g, "")}`; | ||
const CloudComponentFile = `./com/${CloudComponentName}.js`; | ||
const CloudComponentPath = pt.join(__dirname, CloudComponentFile); | ||
const { CloudComponentName, CloudComponentPath } = getCloudComponentInfo({tagName, version, namespace}); | ||
@@ -185,3 +183,9 @@ node.name.name = CloudComponentName; | ||
if (!importComsMap[comsMapKey]) { | ||
importComsMap[comsMapKey] = true; | ||
importComsMap[comsMapKey] = { | ||
tagName, | ||
version, | ||
namespace, | ||
CloudComponentName, | ||
CloudComponentPath | ||
}; | ||
@@ -215,14 +219,20 @@ sourceAst.program.body.unshift( | ||
const importComKeys = Object.keys(importComsMap); | ||
const deps = Object.keys(importComsMap).map((key) => { | ||
return importComsMap[key]; | ||
}); | ||
await componentLoad(importComKeys); | ||
await componentLoad(deps); | ||
// 加载组件资源 | ||
async function componentLoad (comKeys, isChild = false) { | ||
async function componentLoad (deps, isChild = false) { | ||
return new Promise((resolve, reject) => { | ||
Promise.all(comKeys.map(comKey => { | ||
Promise.all(deps.map(dep => { | ||
return new Promise((resolve, reject) => { | ||
const [tagName, defValue] = comKey.split(separator); | ||
const [namespace, version] = defValue.split("@"); | ||
const CloudComponentName = `CloudComponent${(tagName+defValue).replace(/@/g, "").replace(/\./g, "").replace(/-/g, "")}`; | ||
const { | ||
tagName, | ||
version, | ||
namespace, | ||
CloudComponentName, | ||
CloudComponentPath | ||
} = dep; | ||
@@ -240,4 +250,2 @@ if (!globalImportComsMap[tagName]) { | ||
const ComponentInfo = tagInfo[CloudComponentName]; | ||
const CloudComponentFile = `./com/${CloudComponentName}.js`; | ||
const CloudComponentPath = pt.join(__dirname, CloudComponentFile); | ||
const comApiParams = `namespace=${namespace}&version=${version}`; | ||
@@ -249,3 +257,3 @@ let comApi = tagNameMap[tagName].api; | ||
if (!ComponentInfo.success || !fs.existsSync(CloudComponentPath)) { | ||
console.log('加载资源', {tagName, defValue}) | ||
console.log('加载资源', {tagName, namespace, version}) | ||
// 加载 | ||
@@ -265,9 +273,15 @@ request(comApi, function (error, response, body) { | ||
// 依赖组件数组/运行时代码 | ||
const { deps, runtime } = data; | ||
let { deps, runtime } = data; | ||
let resultRuntime = runtime.trim(); | ||
if (!Array.isArray(deps)) { | ||
deps = [] | ||
} | ||
ComponentInfo.deps = deps; | ||
ComponentInfo.success = true; | ||
const completeDeps = getCompleteDeps(deps, tagName); | ||
// 区分组件入口 | ||
@@ -278,3 +292,3 @@ if (!isChild) { | ||
// 源码 | ||
resultRuntime = getImportComsCode(deps, tagName) + resultRuntime.replace("function", "function RenderCom") + CloudComponentCode({namespace, version}); | ||
resultRuntime = getImportComsCode(completeDeps) + resultRuntime.replace("function", "function RenderCom") + CloudComponentCode({namespace, version}); | ||
@@ -289,3 +303,3 @@ fs.writeFileSync(CloudComponentPath, resultRuntime); | ||
import RenderCom from "${CloudComponentCodePath}"; | ||
${getImportComsCode(deps, tagName)} | ||
${getImportComsCode(completeDeps)} | ||
${CloudComponentCode({namespace, version})} | ||
@@ -300,18 +314,10 @@ `; | ||
const comKeys = Array.isArray(deps) ? deps.map(({namespace, version}) => { | ||
return `${tagName}${separator}${namespace}@${version}`; | ||
}) : []; | ||
componentLoad(comKeys, true).then(resolve); | ||
componentLoad(completeDeps, true).then(resolve); | ||
} | ||
}) | ||
} else { | ||
console.log('资源已存在', {tagName, defValue}) | ||
console.log('资源已存在', {tagName, namespace, version}) | ||
const { deps } = ComponentInfo; | ||
const comKeys = Array.isArray(deps) ? deps.map(({namespace, version}) => { | ||
return `${tagName}${separator}${namespace}@${version}`; | ||
}) : []; | ||
componentLoad(comKeys, true).then(resolve); | ||
componentLoad(getCompleteDeps(deps, tagName), true).then(resolve); | ||
} | ||
@@ -323,9 +329,40 @@ }) | ||
if (importComKeys.length) { | ||
let code = source; | ||
if (deps.length) { | ||
fs.writeFileSync(comsMapPath, JSON.stringify(globalImportComsMap)); | ||
code = generator(sourceAst).code | ||
} | ||
return generator(sourceAst).code; | ||
return code; | ||
} | ||
function getCloudComponentInfo ({tagName, version, namespace}) { | ||
const CloudComponentName = `CloudComponent${(tagName+namespace+version).replace(/@/g, "").replace(/\./g, "").replace(/-/g, "")}`; | ||
const CloudComponentFile = `./com/${CloudComponentName}.js`; | ||
const CloudComponentPath = pt.join(__dirname, CloudComponentFile); | ||
return { | ||
CloudComponentPath, | ||
CloudComponentName | ||
} | ||
} | ||
function getCompleteDeps (deps, tagName) { | ||
if (Array.isArray(deps)) { | ||
return deps.map(dep => { | ||
const { namespace, version } = dep; | ||
return { | ||
tagName, | ||
version, | ||
namespace, | ||
...getCloudComponentInfo({tagName, version, namespace}) | ||
} | ||
}); | ||
} | ||
return []; | ||
} | ||
module.exports = loader |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
13318
2
349
2