UNPKG

1.11 kBJavaScriptView Raw
1const _ = require('lodash');
2const {SourceTag} = require('./lang');
3const path = require('path');
4const {exprHash} = require('./expr-hash');
5
6function tagToSimpleFilename(tag) {
7 const lineParts = tag.split(path.sep);
8 const fileName = lineParts[lineParts.length - 1].replace(/\).*/, '');
9 const simpleName = fileName
10 .split('.js:')[0]
11 .replace(/\.carmi$/, '')
12 .replace(/-/g, '_')
13 .split('.')
14 .find(x => x);
15 return simpleName;
16}
17
18function generateNameFromTag(expr) {
19 if (expr[0][SourceTag]) {
20 const tag = expr[0][SourceTag];
21 return `_${[tagToSimpleFilename(tag)].concat(tag.split(':').slice(1)).join('_')}_`;
22 }
23 return '';
24}
25
26function generateName(namesByExpr, expr) {
27 return (
28 generateNameFromTag(expr) ||
29 _(expr)
30 .tail()
31 .reverse()
32 .map(e => {
33 const preNamed = namesByExpr[exprHash(e)];
34 if (preNamed) {
35 return preNamed;
36 }
37 return _.find(_.flattenDeep(e), x => typeof x === 'string') || '';
38 })
39 .join('')
40 );
41}
42
43module.exports = {generateName, generateNameFromTag, tagToSimpleFilename};