dingtalk-docs-cool-app
Version:
钉钉文档酷应用插件扩展 开发者初始化包
1 lines • 3.3 kB
JavaScript
;var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _path=require("path"),_fs=require("fs"),_core=require("@oclif/core"),_nodeWatch=_interopRequireDefault(require("node-watch")),_express=_interopRequireDefault(require("express")),_cors=_interopRequireDefault(require("cors")),_babel=require("../../common/babel"),_fields=require("../../module/fields"),_safeFetch=require("../../common//safeFetch");function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(_getRequireWildcardCache=function(e){return e?r:t})(e)}function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=_getRequireWildcardCache(t);if(r&&r.has(e))return r.get(e);var i={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&Object.prototype.hasOwnProperty.call(e,s)){var a=o?Object.getOwnPropertyDescriptor(e,s):null;a&&(a.get||a.set)?Object.defineProperty(i,s,a):i[s]=e[s]}return i.default=e,r&&r.set(e,i),i}const PORT=8088;class StartField extends _core.Command{constructor(...e){super(...e),this.app=null,this.module=null,this.getEntryDir=()=>process.cwd()}async buildAndImport(){const e=this.getEntryDir(),t=(0,_path.join)(e,"./src"),r=(0,_path.join)(e,"./output/private/build"),i=(0,_path.join)(e,"./output/private/build/index.js");(0,_babel.build)(t,r),this.log("✅ 编译成功"),delete require.cache[require.resolve(i)],this.module=(await Promise.resolve(`${i}`).then((e=>_interopRequireWildcard(require(e))))).default}async watchAndBuild(){const e=this.getEntryDir(),t=(0,_path.join)(e,"./src");await this.buildAndImport(),(0,_nodeWatch.default)(t,{recursive:!0,filter:/\.(js|ts)$/},(async()=>{await this.buildAndImport()}))}async run(){const e=process.cwd();try{await this.watchAndBuild();const t=(0,_path.join)(e,"./output/private/build/index.js");(0,_fs.existsSync)(t)||(this.log("请检查src文件夹下是否有index.ts文件"),this.exit()),this.app=(0,_express.default)(),this.app.use(((e,t,r)=>{t.setHeader("Access-Control-Allow-Private-Network","true"),r()})),this.app.use((0,_cors.default)()),this.app.use(_express.default.json()),this.app.get("/open_field",((e,t)=>{this.module?(t.setHeader("Access-Control-Allow-Private-Network","true"),t.json((0,_fields.getManifestByFieldDecorator)(this.module))):t.json({})})),this.app.post("/open_field_card",(async(t,r)=>{if(!this.module)return void r.json({code:_fields.FieldExecuteCode.Error,msg:"no module"});const{context:i,formItems:o}=t.body,s=(0,_fields.getManifestByFieldDecorator)(this.module);let a=null;const n=(0,_path.join)(e,"./config.json");if((0,_fs.existsSync)(n))try{a=JSON.parse((0,_fs.readFileSync)(n,"utf-8")).authorizations,this.log("config:",a)}catch(e){console.error(e)}const u=(0,_safeFetch.getSafeFetch)(this.module.getDomainList()||[],s,a),l=this.module.getDecorator(),c=await(l?.execute?.({...i,fetch:u},o));r.json(c||{code:_fields.FieldExecuteCode.Error,msg:"module no execute or execute no return data"})})),this.app.listen(8088,(()=>{this.log("服务已经启动,端口 8088")}))}catch(e){this.error(e)}}}exports.default=StartField;