build.mjs 2.0 KB

123456789101112131415161718
  1. import fs from 'node:fs';
  2. import path from 'node:path';
  3. import {fileURLToPath} from 'node:url';
  4. import crypto from 'node:crypto';
  5. const ROOT=path.dirname(path.dirname(fileURLToPath(import.meta.url)));
  6. const data=JSON.parse(fs.readFileSync(path.join(ROOT,'references/runtime-data.json'),'utf8'));
  7. fs.mkdirSync(path.join(ROOT,'dist'),{recursive:true});
  8. const common=['postgres.mjs','files.mjs','core.mjs','confirmation.mjs','workshop.mjs','board-actions.mjs','bootstrap.mjs'].map(file=>fs.readFileSync(path.join(ROOT,'src',file),'utf8').replace(/^export /gm,'')).join('\n');
  9. const helpers={ksfUploadFile:'/ksf/upload',ksfReadFile:'/ksf/file',ksfConfirmationPage:'/ksf/confirm',ksfCreateReportPreview:'/ksfCreateReportPreview',ksfGetReportPreview:'/ksfGetReportPreview',ksfEmployeeConfirmation:'/ksfEmployeeConfirmation',ksfGetPreviewConfirmation:'/ksfGetPreviewConfirmation'};
  10. const html=fs.readFileSync(path.join(ROOT,'web/confirm.html'),'utf8');const manifest=[];
  11. for(const name of [...new Set([...data.functionNames,...Object.keys(helpers),'ksfCheckDuplicates','ksfStartWorkshopSession','ksfSaveWorkshopTask','ksfSaveWorkshopConcept','ksfGetWorkshopProject','ksfGetPublicBoard','ksfSetPublicOpportunityStatus','ksfRatePublicOpportunity'])]){
  12. const code=common+'\nasync function handler(request,response){return runDatabaseFunction('+JSON.stringify(name)+',request,response,'+JSON.stringify(data)+','+JSON.stringify(html)+');}\n';
  13. new Function(code); // Syntax check the exact code that will be stored in Function.code.
  14. fs.writeFileSync(path.join(ROOT,'dist',name+'.js'),code);
  15. manifest.push({name,path:helpers[name]||'/'+name,file:'dist/'+name+'.js',sha256:crypto.createHash('sha256').update(code).digest('hex')});
  16. }
  17. fs.writeFileSync(path.join(ROOT,'dist/manifest.json'),JSON.stringify({release:data.release,schemaVersion:data.schemaVersion,contractRevision:data.contractRevision,functions:manifest},null,2));
  18. console.log(JSON.stringify({built:manifest.length,businessFunctions:data.functionNames.length,helpers:Object.keys(helpers).length}));