-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathstrip-unversioned-stuff.js
61 lines (54 loc) · 2.5 KB
/
strip-unversioned-stuff.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
const { parseXml } = require('../utils/xml-utils')
const _ = require('highland')
const get = require('lodash').get
const getFieldMap = async objectFileNames => {
return _(objectFileNames)
.map(async x => {
let content
try {
content = x.transformedJson || await parseXml(x.data)
} catch (e) {
throw new Error(`There was an error parsing ${x.fileName}: ${e.message}`)
}
return {
content,
obj: x.fileName.replace(/^objects\/(.*)\.object$/, '$1')
}
})
.map(x => _(x))
.sequence()
.flatMap(objData => (objData.content.CustomObject.fields || []).map(x => `${objData.obj}.${x.fullName[0]}`))
.flatMap(field => {
const res = [field]
if (field.startsWith('Activity.')) {
res.push(field.replace('Activity.', 'Event.'))
res.push(field.replace('Activity.', 'Task.'))
}
return res
})
.collect()
.map(x => new Set(x))
.toPromise(Promise)
}
module.exports = async (context, helpers) => {
const cachedGetFieldMap = (cache => async allFiles => cache || (cache = await getFieldMap(allFiles)))()
if (get(context, 'config.profiles.stripUnversionedStuff')) {
helpers.xmlTransformer('profiles/**/*', async (filename, fJson, requireFiles) => {
const fieldMap = await cachedGetFieldMap(await requireFiles('objects/**/*'))
fJson.fieldPermissions = (fJson.fieldPermissions || []).filter(x => fieldMap.has(x.field[0]))
const classes = new Set((await requireFiles('classes/**/*')).map(x => x.fileName))
fJson.classAccesses = (fJson.classAccesses || []).filter(x => classes.has('classes/' + x.apexClass[0] + '.cls'))
const pages = new Set((await requireFiles('pages/**/*')).map(x => x.fileName))
fJson.pageAccesses = (fJson.pageAccesses || []).filter(x => pages.has('pages/' + x.apexPage[0] + '.page'))
const layouts = new Set((await requireFiles('layouts/**/*')).map(x => x.fileName))
fJson.layoutAssignments = (fJson.layoutAssignments || []).filter(x => layouts.has('layouts/' + x.layout[0] + '.layout'))
})
}
if (get(context, 'config.objectTranslations.stripNotVersionedFields')) {
helpers.xmlTransformer('objectTranslations/**/*', async (filename, fJson, requireFiles) => {
const fieldMap = await cachedGetFieldMap(await requireFiles('objects/**/*'))
const objName = filename.replace(/^objectTranslations\/(.*)-.*\.objectTranslation$/, '$1')
fJson.fields = (fJson.fields || []).filter(x => fieldMap.has(objName + '.' + x.name[0]))
})
}
}