1 const path = require('path');
2 const fs = require('fs');
4 const JSAN_adaptor = path.resolve(__dirname, 'adaptor.js');
5 const common_js_regex = /(?<=(?:[\r\n]+|^))\s*require *\( *(?:"(.*?)"|'(.*?)') *\) *;?\s*/g;
6 const import_regex = /(?<=(?:[\r\n]+|^))\s*import +(?:"(.*?)"|'(.*?)') *;?\s*/g;
8 // Converts source path to a JSAN-style string
9 function src_path_to_JSAN(legacy,src_path){
10 src_path = path.resolve(__dirname, src_path);
11 var relative_src_path = path.relative(legacy, src_path);
12 var JSAN_id = relative_src_path
16 return `JSAN.use("${JSAN_id}");\n`;
19 // Converts JSAN include to a source path
20 function JSAN_to_src_path(legacy,jsan){
22 .replace(/^JSAN\.use\(["']/,"")
23 .replace(/["']\);\s*$/,"")
25 .replace(/(\.js)?$/,".js");
26 src_path = path.resolve(legacy, JSAN_path);
30 // Checks if one path is contained in another
31 function isChildOf(child, parent){
32 child = path.resolve(__dirname, child);
33 parent = path.resolve(__dirname, parent);
34 if (child === parent) return false
35 const parentTokens = parent.split('/').filter(i => i.length)
36 const childTokens = child.split('/').filter(i => i.length)
37 return parentTokens.every((t, i) => childTokens[i] === t)
41 'JSAN_adaptor':JSAN_adaptor,
42 'common_js_regex':common_js_regex,
43 'import_regex':import_regex,
44 'src_path_to_JSAN':src_path_to_JSAN,
45 'JSAN_to_src_path':JSAN_to_src_path,