@ds-sfdc/sfparty 1.3.8 → 1.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,201 +2,239 @@ import path from 'path'
2
2
  import * as packageDefinition from '../meta/Package.js'
3
3
 
4
4
  export class Package {
5
-
6
-
7
- constructor(xmlPath) {
8
- this.xmlPath = xmlPath
9
- this.packageJSON = undefined
10
- }
11
-
12
- getPackageXML(fileUtils) {
13
- const that = this
14
- return new Promise((resolve, reject) => {
15
- try {
16
- if (that.xmlPath === undefined) throw new Error('Package not initialized')
17
-
18
- let fileName = path.resolve(that.xmlPath)
19
- if (fileUtils.fileExists(fileName) && global.git.append) {
20
- let data = fileUtils.readFile(fileName)
21
- data
22
- .then((json) => {
23
- try {
24
- if (json === undefined || Object.keys(json).length === 0 ) json = packageDefinition.metadataDefinition.emptyPackage
25
- processJSON(that, json, fileUtils)
26
- resolve('existing')
27
- } catch (error) {
28
- reject(error)
29
- }
30
- })
31
- .catch((error) => {
32
- reject(error)
33
- })
34
- } else {
35
- try {
36
- let json = JSON.parse(JSON.stringify(packageDefinition.metadataDefinition.emptyPackage))
37
- processJSON(that, json)
38
- resolve('not found')
39
- } catch (error) {
40
- reject(error)
41
- }
42
- }
43
- } catch (error) {
44
- reject(error)
45
- }
46
-
47
- })
48
-
49
- function processJSON(that, json, fileUtils) {
50
- try {
51
- let data = fileUtils.readFile(path.join(global.__basedir, 'sfdx-project.json'))
52
- json.Package.version = data.sourceApiVersion
53
- } catch (error) {
54
- json.Package.version = packageDefinition.metadataDefinition.fallbackVersion
55
- }
56
- that.packageJSON = json
57
- if (json.Package.types !== undefined) transformJSON(json.Package.types)
58
- cleanPackage(that)
59
- }
60
-
61
- function cleanPackage(that) {
62
- if (that.packageJSON === undefined) throw new Error('getPackageXML must be called before adding members')
63
- if (that.packageJSON.Package == undefined) throw new Error('Package initialization failed')
64
- if (that.packageJSON.Package.types === undefined) return 'No types found'
65
-
66
- const typeArray = Object.values(global.metaTypes).map(metaType => metaType.definition.root);
67
- that.packageJSON.Package.types.forEach(typeItem => {
68
- if (typeArray.includes(typeItem.name)) {
69
- typeItem.members = typeItem.members.filter(member => !member.endsWith(`.${global.format}`))
70
- }
71
- })
72
- }
73
- }
74
-
75
- addMember(type, member) {
76
- const that = this
77
- if (that.packageJSON === undefined) throw new Error('getPackageXML must be called before adding members')
78
- if (type === undefined || type.trim() == '') throw new Error('An undefined type was received when attempting to add a member')
79
- if (member === undefined || member.trim() == '') throw new Error('An undefined member was received when attempting to add a member')
80
- if (member.indexOf(`.${global.format}`) !== -1) throw new Error('Part file received as member is not allowed')
81
-
82
- const packageJSON = that.packageJSON
83
- let foundMember = false
84
- let foundAsterisk = false
85
- let typeJSON = undefined
86
-
87
- if (packageJSON.Package.types === undefined) packageJSON.Package.types = []
88
-
89
- packageJSON.Package.types.forEach((typeItem) => {
90
- try {
91
- if (typeItem.name.toLowerCase() == type.toLowerCase()) {
92
- typeJSON = typeItem
93
- if (typeItem.members === undefined) {
94
- delete typeItem.name
95
- typeItem.members = []
96
- typeItem.name = type
97
- }
98
- typeItem.members.forEach(memberItem => {
99
- if (memberItem.toLowerCase() == member.toLowerCase()) {
100
- foundMember = true
101
- } else if (memberItem == '*') {
102
- foundAsterisk = true
103
- }
104
- })
105
- }
106
- } catch (error) {
107
- throw error
108
- }
109
- })
110
-
111
- // exit if member already exists
112
- if (foundMember) return
113
- if (foundAsterisk) {
114
- return
115
- }
116
-
117
- try {
118
- if (typeJSON !== undefined) {
119
- typeJSON.members.push(member)
120
- typeJSON.members.sort()
121
- } else {
122
- typeJSON = JSON.parse(JSON.stringify(packageDefinition.metadataDefinition.emptyNode))
123
- typeJSON.name = type
124
- typeJSON.members.push(member)
125
-
126
- packageJSON.Package.types.push(typeJSON)
127
- }
128
-
129
- packageJSON.Package.types.sort((a, b) => {
130
- if (a.name < b.name) return -1
131
- if (a.name > b.name) return 1
132
- return 0
133
- })
134
- } catch (error) {
135
- throw error
136
- }
137
- }
138
-
139
- savePackage(xml2js, fileUtils) {
140
- let that = this
141
- let json = that.packageJSON.Package
142
- try {
143
- json.$.xmlns = json.$.xmlns.replace('http:', 'https:')
144
- const version = json.version
145
- delete json.version
146
- json.version = version
147
-
148
- const builder = new xml2js.Builder(
149
- {
150
- cdata: false,
151
- rootName: 'Package',
152
- xmldec: { 'version': '1.0', 'encoding': 'UTF-8' }
153
- }
154
- )
155
- let fileName = that.xmlPath
156
- fileUtils.createDirectory(path.dirname(fileName))
157
-
158
- const xml = builder.buildObject(json)
159
-
160
- fileUtils.writeFile(fileName, xml)
161
-
162
- } catch (error) {
163
- throw error
164
- }
165
- }
5
+ constructor(xmlPath) {
6
+ this.xmlPath = xmlPath
7
+ this.packageJSON = undefined
8
+ }
9
+
10
+ getPackageXML(fileUtils) {
11
+ const that = this
12
+ return new Promise((resolve, reject) => {
13
+ try {
14
+ if (that.xmlPath === undefined)
15
+ throw new Error('Package not initialized')
16
+
17
+ let fileName = path.resolve(that.xmlPath)
18
+ if (fileUtils.fileExists(fileName) && global.git.append) {
19
+ let data = fileUtils.readFile(fileName)
20
+ data.then((json) => {
21
+ try {
22
+ if (
23
+ json === undefined ||
24
+ Object.keys(json).length === 0
25
+ )
26
+ json =
27
+ packageDefinition.metadataDefinition
28
+ .emptyPackage
29
+ processJSON(that, json, fileUtils)
30
+ resolve('existing')
31
+ } catch (error) {
32
+ reject(error)
33
+ }
34
+ }).catch((error) => {
35
+ reject(error)
36
+ })
37
+ } else {
38
+ try {
39
+ let json = JSON.parse(
40
+ JSON.stringify(
41
+ packageDefinition.metadataDefinition
42
+ .emptyPackage,
43
+ ),
44
+ )
45
+ processJSON(that, json)
46
+ resolve('not found')
47
+ } catch (error) {
48
+ reject(error)
49
+ }
50
+ }
51
+ } catch (error) {
52
+ reject(error)
53
+ }
54
+ })
55
+
56
+ function processJSON(that, json, fileUtils) {
57
+ try {
58
+ let data = fileUtils.readFile(
59
+ path.join(global.__basedir, 'sfdx-project.json'),
60
+ )
61
+ json.Package.version = data.sourceApiVersion
62
+ } catch (error) {
63
+ json.Package.version =
64
+ packageDefinition.metadataDefinition.fallbackVersion
65
+ }
66
+ that.packageJSON = json
67
+ if (json.Package.types !== undefined)
68
+ transformJSON(json.Package.types)
69
+ cleanPackage(that)
70
+ }
71
+
72
+ function cleanPackage(that) {
73
+ if (that.packageJSON === undefined)
74
+ throw new Error(
75
+ 'getPackageXML must be called before adding members',
76
+ )
77
+ if (that.packageJSON.Package == undefined)
78
+ throw new Error('Package initialization failed')
79
+ if (that.packageJSON.Package.types === undefined)
80
+ return 'No types found'
81
+
82
+ const typeArray = Object.values(global.metaTypes).map(
83
+ (metaType) => metaType.definition.root,
84
+ )
85
+ that.packageJSON.Package.types.forEach((typeItem) => {
86
+ if (typeArray.includes(typeItem.name)) {
87
+ typeItem.members = typeItem.members.filter(
88
+ (member) => !member.endsWith(`.${global.format}`),
89
+ )
90
+ }
91
+ })
92
+ }
93
+ }
94
+
95
+ addMember(type, member) {
96
+ const that = this
97
+ if (that.packageJSON === undefined)
98
+ throw new Error(
99
+ 'getPackageXML must be called before adding members',
100
+ )
101
+ if (type === undefined || type.replaceAll('\t', '').trim() == '')
102
+ throw new Error(
103
+ 'An undefined type was received when attempting to add a member',
104
+ )
105
+ if (member === undefined || member.replaceAll('\t', '').trim() == '')
106
+ throw new Error(
107
+ 'An undefined member was received when attempting to add a member',
108
+ )
109
+ if (member.indexOf(`.${global.format}`) !== -1)
110
+ throw new Error('Part file received as member is not allowed')
111
+
112
+ type = type.replaceAll('\t', '')
113
+ member = member.replaceAll('\t', '')
114
+
115
+ const packageJSON = that.packageJSON
116
+ let foundMember = false
117
+ let foundAsterisk = false
118
+ let typeJSON = undefined
119
+
120
+ if (packageJSON.Package.types === undefined)
121
+ packageJSON.Package.types = []
122
+
123
+ packageJSON.Package.types.forEach((typeItem) => {
124
+ try {
125
+ if (typeItem.name.toLowerCase() == type.toLowerCase()) {
126
+ typeJSON = typeItem
127
+ if (typeItem.members === undefined) {
128
+ delete typeItem.name
129
+ typeItem.members = []
130
+ typeItem.name = type
131
+ }
132
+ typeItem.members.forEach((memberItem) => {
133
+ if (memberItem.toLowerCase() == member.toLowerCase()) {
134
+ foundMember = true
135
+ } else if (memberItem == '*') {
136
+ foundAsterisk = true
137
+ }
138
+ })
139
+ }
140
+ } catch (error) {
141
+ throw error
142
+ }
143
+ })
144
+
145
+ // exit if member already exists
146
+ if (foundMember) return
147
+ if (foundAsterisk) {
148
+ return
149
+ }
150
+
151
+ try {
152
+ if (typeJSON !== undefined) {
153
+ typeJSON.members.push(member)
154
+ typeJSON.members.sort()
155
+ } else {
156
+ typeJSON = JSON.parse(
157
+ JSON.stringify(
158
+ packageDefinition.metadataDefinition.emptyNode,
159
+ ),
160
+ )
161
+ typeJSON.name = type
162
+ typeJSON.members.push(member)
163
+
164
+ packageJSON.Package.types.push(typeJSON)
165
+ }
166
+
167
+ packageJSON.Package.types.sort((a, b) => {
168
+ if (a.name < b.name) return -1
169
+ if (a.name > b.name) return 1
170
+ return 0
171
+ })
172
+ } catch (error) {
173
+ throw error
174
+ }
175
+ }
176
+
177
+ savePackage(xml2js, fileUtils) {
178
+ let that = this
179
+ let json = that.packageJSON.Package
180
+ try {
181
+ json.$.xmlns = json.$.xmlns.replace('http:', 'https:')
182
+ const version = json.version
183
+ delete json.version
184
+ json.version = version
185
+
186
+ const builder = new xml2js.Builder({
187
+ cdata: false,
188
+ rootName: 'Package',
189
+ xmldec: { version: '1.0', encoding: 'UTF-8' },
190
+ })
191
+ let fileName = that.xmlPath
192
+ fileUtils.createDirectory(path.dirname(fileName))
193
+
194
+ const xml = builder.buildObject(json)
195
+
196
+ fileUtils.writeFile(fileName, xml)
197
+ } catch (error) {
198
+ throw error
199
+ }
200
+ }
166
201
  }
167
202
 
168
203
  function transformJSON(json) {
169
- try {
170
- json.forEach(typesItem => {
171
- Object.keys(typesItem).forEach(key => {
172
- let jsonString = JSON.stringify(typesItem[key], (name, value) => {
173
- if (key == 'members') {
174
- return value
175
- } else {
176
- return xml2json(value)
177
- }
178
- })
179
- typesItem[key] = JSON.parse(jsonString)
180
- })
181
- })
182
-
183
- return
184
- } catch (error) {
185
- throw error
186
- }
187
-
188
- function xml2json(currentValue) {
189
- try {
190
- if (Array.isArray(currentValue)) {
191
- if (currentValue.length == 1) {
192
- currentValue = currentValue[0].toString().trim()
193
- }
194
- }
195
- if (currentValue == 'true') currentValue = true
196
- if (currentValue == 'false') currentValue = false
197
- return currentValue
198
- } catch (error) {
199
- throw error
200
- }
201
- }
204
+ try {
205
+ json.forEach((typesItem) => {
206
+ Object.keys(typesItem).forEach((key) => {
207
+ let jsonString = JSON.stringify(
208
+ typesItem[key],
209
+ (name, value) => {
210
+ if (key == 'members') {
211
+ return value
212
+ } else {
213
+ return xml2json(value)
214
+ }
215
+ },
216
+ )
217
+ typesItem[key] = JSON.parse(jsonString)
218
+ })
219
+ })
220
+
221
+ return
222
+ } catch (error) {
223
+ throw error
224
+ }
225
+
226
+ function xml2json(currentValue) {
227
+ try {
228
+ if (Array.isArray(currentValue)) {
229
+ if (currentValue.length == 1) {
230
+ currentValue = currentValue[0].toString().trim()
231
+ }
232
+ }
233
+ if (currentValue == 'true') currentValue = true
234
+ if (currentValue == 'false') currentValue = false
235
+ return currentValue
236
+ } catch (error) {
237
+ throw error
238
+ }
239
+ }
202
240
  }
@@ -1 +1 @@
1
- module.exports = pkgObj = require('../../package.json')
1
+ module.exports = pkgObj = require('../../package.json')
@@ -1,26 +1,29 @@
1
1
  export const metadataDefinition = {
2
- metaUrl: 'https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_customlabels.htm',
3
- directory: 'labels',
4
- filetype: 'labels',
5
- root: 'CustomLabels',
6
- alias: 'label',
7
- main: [
8
- '$',
9
- ],
10
- singleFiles: [
11
- ],
12
- directories: [
13
- 'labels',
14
- ],
15
- sortKeys: {
16
- 'labels': 'fullName',
17
- },
18
- keyOrder: {
19
- labels: ['fullName', 'shortDescription', 'categories', 'protected', 'language', 'value'],
20
- },
21
- xmlOrder: {
22
- labels: ['fullName'],
23
- },
24
- packageTypeIsDirectory: true,
25
- delta: true,
2
+ metaUrl:
3
+ 'https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_customlabels.htm',
4
+ directory: 'labels',
5
+ filetype: 'labels',
6
+ root: 'CustomLabels',
7
+ alias: 'label',
8
+ main: ['$'],
9
+ singleFiles: [],
10
+ directories: ['labels'],
11
+ sortKeys: {
12
+ labels: 'fullName',
13
+ },
14
+ keyOrder: {
15
+ labels: [
16
+ 'fullName',
17
+ 'shortDescription',
18
+ 'categories',
19
+ 'protected',
20
+ 'language',
21
+ 'value',
22
+ ],
23
+ },
24
+ xmlOrder: {
25
+ labels: ['fullName'],
26
+ },
27
+ packageTypeIsDirectory: true,
28
+ delta: true,
26
29
  }
@@ -1,23 +1,24 @@
1
1
  export const metadataDefinition = {
2
- metaUrl: 'https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/manifest_samples.htm',
3
- root: 'Package',
4
- main: ['version',],
5
- nodes: ['types'],
6
- sortKeys: {
7
- types: 'name',
8
- },
9
- keyOrder: {
10
- types: ['members', 'name'],
11
- },
12
- emptyPackage: {
13
- Package: {
14
- $: { xmlns: 'https://soap.sforce.com/2006/04/metadata' },
15
- version: undefined,
16
- }
17
- },
18
- emptyNode: {
19
- members: [],
20
- name: undefined,
21
- },
22
- fallbackVersion: '55.0'
2
+ metaUrl:
3
+ 'https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/manifest_samples.htm',
4
+ root: 'Package',
5
+ main: ['version'],
6
+ nodes: ['types'],
7
+ sortKeys: {
8
+ types: 'name',
9
+ },
10
+ keyOrder: {
11
+ types: ['members', 'name'],
12
+ },
13
+ emptyPackage: {
14
+ Package: {
15
+ $: { xmlns: 'https://soap.sforce.com/2006/04/metadata' },
16
+ version: undefined,
17
+ },
18
+ },
19
+ emptyNode: {
20
+ members: [],
21
+ name: undefined,
22
+ },
23
+ fallbackVersion: '55.0',
23
24
  }