@salesforce/plugin-custom-metadata 1.1.0 → 2.0.0

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.
Files changed (52) hide show
  1. package/CHANGELOG.md +14 -12
  2. package/LICENSE.txt +2 -2
  3. package/README.md +137 -133
  4. package/lib/commands/force/cmdt/create.d.ts +8 -2
  5. package/lib/commands/force/cmdt/create.js +15 -21
  6. package/lib/commands/force/cmdt/create.js.map +1 -1
  7. package/lib/commands/force/cmdt/field/create.d.ts +7 -2
  8. package/lib/commands/force/cmdt/field/create.js +15 -20
  9. package/lib/commands/force/cmdt/field/create.js.map +1 -1
  10. package/lib/commands/force/cmdt/generate.d.ts +6 -2
  11. package/lib/commands/force/cmdt/generate.js +79 -150
  12. package/lib/commands/force/cmdt/generate.js.map +1 -1
  13. package/lib/commands/force/cmdt/record/create.d.ts +14 -3
  14. package/lib/commands/force/cmdt/record/create.js +25 -33
  15. package/lib/commands/force/cmdt/record/create.js.map +1 -1
  16. package/lib/commands/force/cmdt/record/insert.d.ts +2 -2
  17. package/lib/commands/force/cmdt/record/insert.js +28 -40
  18. package/lib/commands/force/cmdt/record/insert.js.map +1 -1
  19. package/lib/lib/helpers/createUtil.d.ts +10 -6
  20. package/lib/lib/helpers/createUtil.js +48 -100
  21. package/lib/lib/helpers/createUtil.js.map +1 -1
  22. package/lib/lib/helpers/fileWriter.d.ts +11 -11
  23. package/lib/lib/helpers/fileWriter.js +14 -24
  24. package/lib/lib/helpers/fileWriter.js.map +1 -1
  25. package/lib/lib/helpers/metadataUtil.d.ts +25 -51
  26. package/lib/lib/helpers/metadataUtil.js +55 -131
  27. package/lib/lib/helpers/metadataUtil.js.map +1 -1
  28. package/lib/lib/helpers/validationUtil.d.ts +25 -26
  29. package/lib/lib/helpers/validationUtil.js +66 -43
  30. package/lib/lib/helpers/validationUtil.js.map +1 -1
  31. package/lib/lib/interfaces/createConfig.d.ts +3 -2
  32. package/lib/lib/templates/templates.d.ts +8 -99
  33. package/lib/lib/templates/templates.js +38 -67
  34. package/lib/lib/templates/templates.js.map +1 -1
  35. package/messages/createField.json +22 -31
  36. package/messages/generate.json +38 -51
  37. package/messages/template.json +2 -2
  38. package/messages/validation.json +5 -0
  39. package/oclif.manifest.json +1 -1
  40. package/package.json +53 -42
  41. package/lib/lib/interfaces/customField.d.ts +0 -7
  42. package/lib/lib/interfaces/customField.js +0 -9
  43. package/lib/lib/interfaces/customField.js.map +0 -1
  44. package/lib/lib/interfaces/errorMessage.d.ts +0 -4
  45. package/lib/lib/interfaces/errorMessage.js +0 -9
  46. package/lib/lib/interfaces/errorMessage.js.map +0 -1
  47. package/lib/lib/interfaces/record.d.ts +0 -3
  48. package/lib/lib/interfaces/record.js +0 -9
  49. package/lib/lib/interfaces/record.js.map +0 -1
  50. package/lib/lib/interfaces/saveResults.d.ts +0 -5
  51. package/lib/lib/interfaces/saveResults.js +0 -9
  52. package/lib/lib/interfaces/saveResults.js.map +0 -1
@@ -1,35 +1,34 @@
1
1
  "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateUtil = void 0;
2
4
  /*
3
5
  * Copyright (c) 2020, salesforce.com, inc.
4
6
  * All rights reserved.
5
7
  * Licensed under the BSD 3-Clause license.
6
8
  * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
7
9
  */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.CreateUtil = void 0;
10
- const core_1 = require("@salesforce/core");
11
- const xml2js_1 = require("xml2js");
10
+ const fs = require("fs");
11
+ const path = require("path");
12
+ const fast_xml_parser_1 = require("fast-xml-parser");
12
13
  const templates_1 = require("../templates/templates");
14
+ const fieldTypeMap = {
15
+ Checkbox: 'boolean',
16
+ Date: 'date',
17
+ DateTime: 'dateTime',
18
+ Email: 'string',
19
+ Phone: 'string',
20
+ Picklist: 'string',
21
+ Text: 'string',
22
+ TextArea: 'string',
23
+ LongTextArea: 'string',
24
+ Url: 'string',
25
+ };
13
26
  // NOTE: the template string indentation is important to output well-formatted XML. Altering that whitespace will change the whitespace of the output.
14
27
  class CreateUtil {
15
28
  /**
16
29
  * Number and Percent types will be int or double depending on their respective scale values.
17
30
  * If the scale === 0, it is an int, otherwise it is a double
18
31
  */
19
- constructor() {
20
- this.fieldTypeMap = {
21
- Checkbox: 'boolean',
22
- Date: 'date',
23
- DateTime: 'dateTime',
24
- Email: 'string',
25
- Phone: 'string',
26
- Picklist: 'string',
27
- Text: 'string',
28
- TextArea: 'string',
29
- LongTextArea: 'string',
30
- Url: 'string',
31
- };
32
- }
33
32
  /**
34
33
  * Creates the Custom Metadata Record
35
34
  *
@@ -37,24 +36,24 @@ class CreateUtil {
37
36
  * @return void
38
37
  */
39
38
  async createRecord(createConfig) {
40
- const outputFilePath = `${createConfig.outputdir}/${createConfig.typename}.${createConfig.recordname}.md-meta.xml`;
39
+ const outputFilePath = path.join(createConfig.outputdir, `${createConfig.typename}.${createConfig.recordname}.md-meta.xml`);
41
40
  const newRecordContent = this.getRecordTemplate(createConfig.label, createConfig.protected, this.buildCustomFieldXml(createConfig.fileData, createConfig.varargs, createConfig.ignorefields));
42
- return core_1.fs.writeFile(outputFilePath, newRecordContent);
41
+ return fs.promises.writeFile(outputFilePath, newRecordContent);
43
42
  }
43
+ /**
44
+ *
45
+ * @param fieldDirPath path to a /fields folder that contains all the fields to read
46
+ * @param fileNames filenames in that folder that should be read
47
+ * @returns CustomField[]
48
+ */
44
49
  async getFileData(fieldDirPath, fileNames) {
45
- const ret = [];
46
- let filePath = '';
47
- let fileData;
48
- let str = '';
49
- for (const file of fileNames) {
50
- filePath = `${fieldDirPath}/${file}`;
51
- fileData = await core_1.fs.readFile(filePath);
52
- str = fileData.toString('utf8');
53
- (0, xml2js_1.parseString)(str, (err, res) => {
54
- ret.push(res);
55
- });
56
- }
57
- return ret;
50
+ const parser = new fast_xml_parser_1.XMLParser();
51
+ return Promise.all(fileNames
52
+ .map((file) => path.join(fieldDirPath, file))
53
+ .map(async (filePath) => {
54
+ const fileData = await fs.promises.readFile(filePath, 'utf8');
55
+ return parser.parse(fileData).CustomField;
56
+ }));
58
57
  }
59
58
  /**
60
59
  * Filenames should have the suffix of '__mdt'. This will append that suffix if it does not exist.
@@ -62,12 +61,7 @@ class CreateUtil {
62
61
  * @param typename Name of file
63
62
  */
64
63
  appendDirectorySuffix(typename) {
65
- if (typename.endsWith('__mdt')) {
66
- return typename;
67
- }
68
- else {
69
- return typename + '__mdt';
70
- }
64
+ return typename.endsWith('__mdt') ? typename : `${typename}__mdt`;
71
65
  }
72
66
  /**
73
67
  * Get the field primitive type from the custom metadata type that has a matching field name.
@@ -76,24 +70,12 @@ class CreateUtil {
76
70
  * @param fieldName Name of the field
77
71
  * @return {string} Type used by a custom metadata record
78
72
  */
79
- getFieldPrimitiveType(fileData = [], fieldName = '') {
80
- let thisFieldName = '';
81
- let type = '';
82
- let ret = 'string';
83
- for (const file of fileData) {
84
- thisFieldName = file.CustomField.fullName[0];
85
- type = file.CustomField.type[0];
86
- if (type === 'Number' || type === 'Percent') {
87
- ret = this.getNumberType(type, file.CustomField.scale[0]);
88
- }
89
- else {
90
- ret = this.fieldTypeMap[type];
91
- }
92
- if (thisFieldName === fieldName) {
93
- return ret;
94
- }
95
- }
96
- return ret;
73
+ getFieldPrimitiveType(fileData = [], fieldName) {
74
+ var _a;
75
+ const matchingFile = fileData.find((file) => file.fullName === fieldName);
76
+ return matchingFile && ['Number', 'Percent'].includes(matchingFile.type)
77
+ ? this.getNumberType(matchingFile.type, matchingFile.scale)
78
+ : (_a = fieldTypeMap[matchingFile === null || matchingFile === void 0 ? void 0 : matchingFile.type]) !== null && _a !== void 0 ? _a : 'string';
97
79
  }
98
80
  /**
99
81
  * Get the field type from the custom metadata type that has a matching field name.
@@ -103,15 +85,8 @@ class CreateUtil {
103
85
  * @return {string} Data Type of the field.
104
86
  */
105
87
  getFieldDataType(fileData = [], fieldName = '') {
106
- let thisFieldName = '';
107
- let type = '';
108
- for (const file of fileData) {
109
- thisFieldName = file.CustomField.fullName[0];
110
- type = file.CustomField.type[0];
111
- if (thisFieldName === fieldName) {
112
- return type;
113
- }
114
- }
88
+ var _a;
89
+ return (_a = fileData.find((file) => file.fullName === fieldName)) === null || _a === void 0 ? void 0 : _a.type;
115
90
  }
116
91
  /**
117
92
  * Goes through the file data that has been genreated and gets all of the field names and adds the
@@ -122,13 +97,7 @@ class CreateUtil {
122
97
  * @return [] Array of field names
123
98
  */
124
99
  getFieldNames(fileData, nameField) {
125
- const metadataTypeFields = [];
126
- for (const file of fileData) {
127
- const fullName = file.CustomField.fullName[0];
128
- metadataTypeFields.push(fullName);
129
- }
130
- metadataTypeFields.push(nameField);
131
- return metadataTypeFields;
100
+ return [...fileData.map((file) => file.fullName), nameField];
132
101
  }
133
102
  /**
134
103
  * Takes JSON representation of CLI varargs and converts them to xml with help
@@ -140,21 +109,14 @@ class CreateUtil {
140
109
  */
141
110
  buildCustomFieldXml(fileData, cliParams, ignoreFields) {
142
111
  let ret = '';
143
- let type = '';
144
- let dataType = '';
145
112
  const templates = new templates_1.Templates();
146
113
  for (const fieldName of Object.keys(cliParams)) {
147
- type = this.getFieldPrimitiveType(fileData, fieldName);
148
- dataType = this.getFieldDataType(fileData, fieldName);
114
+ const type = this.getFieldPrimitiveType(fileData, fieldName);
115
+ const dataType = this.getFieldDataType(fileData, fieldName);
149
116
  // Added functionality to handle the igonre fields scenario.
150
- if (templates.canConvert(dataType)) {
117
+ if (templates.canConvert(dataType) || !ignoreFields) {
151
118
  ret += this.getFieldTemplate(fieldName, cliParams[fieldName], type);
152
119
  }
153
- else {
154
- if (!ignoreFields) {
155
- ret += this.getFieldTemplate(fieldName, cliParams[fieldName], type);
156
- }
157
- }
158
120
  }
159
121
  return ret;
160
122
  }
@@ -167,11 +129,7 @@ class CreateUtil {
167
129
  * @return {string} int or double
168
130
  */
169
131
  getNumberType(type, scale) {
170
- if ((type === 'Number' && parseFloat(scale) === 0) ||
171
- (type === 'Percent' && parseFloat(scale) === 0)) {
172
- return 'int';
173
- }
174
- return 'double';
132
+ return ['Number', 'Percent'].includes(type) && scale === 0 ? 'int' : 'double';
175
133
  }
176
134
  /**
177
135
  * Template for a single customMetadata record value. This is used by helper.getRecordTemplate.
@@ -182,18 +140,8 @@ class CreateUtil {
182
140
  * @return {string} String representation of XML
183
141
  */
184
142
  getFieldTemplate(fieldName, val, type) {
185
- // update to handle the null situation
186
- let value = '';
187
- const cleanValue = String(val)
188
- .replace(/&/g, '&')
189
- .replace(/</g, '&lt;')
190
- .replace(/>/g, '&gt;');
191
- if (val === null || val === '') {
192
- value = '<value xsi:nil="true"/>';
193
- }
194
- else {
195
- value = `<value xsi:type="xsd:${type}">${cleanValue}</value>`;
196
- }
143
+ const cleanValue = String(val).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
144
+ const value = val === null || val === '' ? '<value xsi:nil="true"/>' : `<value xsi:type="xsd:${type}">${cleanValue}</value>`;
197
145
  return `
198
146
  <values>
199
147
  <field>${fieldName}</field>
@@ -1 +1 @@
1
- {"version":3,"file":"createUtil.js","sourceRoot":"","sources":["../../../src/lib/helpers/createUtil.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createUtil.js","sourceRoot":"","sources":["../../../src/lib/helpers/createUtil.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,10 @@
1
+ /// <reference types="node" />
2
+ import * as fs from 'fs';
3
+ interface FileWriterResult {
4
+ dir: string;
5
+ fileName: string;
6
+ updated: boolean;
7
+ }
1
8
  export declare class FileWriter {
2
9
  /**
3
10
  * Using the given file system, creates a file representing a new custom metadata type.
@@ -6,11 +13,7 @@ export declare class FileWriter {
6
13
  * @param devname
7
14
  * @param objectXML
8
15
  */
9
- writeTypeFile(corefs: any, dir: string, devName: string, objectXML: string): Promise<{
10
- dir: string;
11
- fileName: string;
12
- updated: boolean;
13
- }>;
16
+ writeTypeFile(corefs: typeof fs, dir: string, devName: string, objectXML: string): Promise<FileWriterResult>;
14
17
  /**
15
18
  * Using the given file system, creates a file representing a new field for the given custom metadata type
16
19
  *
@@ -18,10 +21,7 @@ export declare class FileWriter {
18
21
  * @param fieldname
19
22
  * @param fieldXML
20
23
  */
21
- writeFieldFile(corefs: any, dir: any, fieldName: any, fieldXML: any): Promise<{
22
- dir: string;
23
- fileName: string;
24
- updated: boolean;
25
- }>;
26
- createDir(dir: any): any;
24
+ writeFieldFile(corefs: typeof fs, dir: string, fieldName: string, fieldXML: string): Promise<FileWriterResult>;
27
25
  }
26
+ export declare const removeTrailingSlash: (dir: string) => string;
27
+ export {};
@@ -6,8 +6,9 @@
6
6
  * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.FileWriter = void 0;
9
+ exports.removeTrailingSlash = exports.FileWriter = void 0;
10
10
  const fs = require("fs");
11
+ const path = require("path");
11
12
  class FileWriter {
12
13
  /**
13
14
  * Using the given file system, creates a file representing a new custom metadata type.
@@ -16,9 +17,8 @@ class FileWriter {
16
17
  * @param devname
17
18
  * @param objectXML
18
19
  */
19
- async writeTypeFile(corefs, dir, devName, objectXML) {
20
+ async writeTypeFile(corefs = fs, dir, devName, objectXML) {
20
21
  let apiName = devName;
21
- const dirName = this.createDir(dir);
22
22
  // replace __c with __mdt
23
23
  if (apiName.endsWith('__c')) {
24
24
  apiName = apiName.replace('__c', '__mdt');
@@ -27,11 +27,11 @@ class FileWriter {
27
27
  if (!apiName.endsWith('__mdt')) {
28
28
  apiName += '__mdt';
29
29
  }
30
- const outputFilePath = `${dirName}${apiName}/`;
30
+ const outputFilePath = path.join((0, exports.removeTrailingSlash)(dir), apiName);
31
31
  const fileName = `${apiName}.object-meta.xml`;
32
- const updated = fs.existsSync(outputFilePath + fileName);
33
- await corefs.mkdirp(`${dirName}${apiName}`);
34
- await corefs.writeFile(outputFilePath + fileName, objectXML);
32
+ const updated = fs.existsSync(path.join(outputFilePath, fileName));
33
+ await corefs.promises.mkdir(outputFilePath, { recursive: true });
34
+ await corefs.promises.writeFile(path.join(outputFilePath, fileName), objectXML);
35
35
  return { dir: outputFilePath, fileName, updated };
36
36
  }
37
37
  /**
@@ -42,30 +42,20 @@ class FileWriter {
42
42
  * @param fieldXML
43
43
  */
44
44
  // /fields/{fieldAPI}.field-meta.xml
45
- async writeFieldFile(corefs, dir, fieldName, fieldXML) {
46
- const dirName = this.createDir(dir);
45
+ async writeFieldFile(corefs = fs, dir, fieldName, fieldXML) {
47
46
  // appending __c if its not already there
48
47
  if (fieldName.endsWith('__c') === false) {
49
48
  fieldName += '__c';
50
49
  }
51
- const outputFilePath = `${dirName}fields/`;
50
+ const outputFilePath = path.join((0, exports.removeTrailingSlash)(dir), 'fields');
52
51
  const fileName = `${fieldName}.field-meta.xml`;
53
- const updated = fs.existsSync(outputFilePath + fileName);
54
- await corefs.mkdirp(`${dirName}fields`);
55
- await corefs.writeFile(outputFilePath + fileName, fieldXML);
52
+ const updated = fs.existsSync(path.join(outputFilePath, fileName));
53
+ await corefs.promises.mkdir(outputFilePath, { recursive: true });
54
+ await corefs.promises.writeFile(path.join(outputFilePath, fileName), fieldXML);
56
55
  return { dir: outputFilePath, fileName, updated };
57
56
  }
58
- createDir(dir) {
59
- if (dir) {
60
- if (dir.endsWith('/')) {
61
- return dir;
62
- }
63
- else {
64
- return dir + '/';
65
- }
66
- }
67
- return '';
68
- }
69
57
  }
70
58
  exports.FileWriter = FileWriter;
59
+ const removeTrailingSlash = (dir) => dir.replace(/\/+$/, '');
60
+ exports.removeTrailingSlash = removeTrailingSlash;
71
61
  //# sourceMappingURL=fileWriter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fileWriter.js","sourceRoot":"","sources":["../../../src/lib/helpers/fileWriter.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,yBAAyB;AAEzB,MAAa,UAAU;IACrB;;;;;;OAMG;IACI,KAAK,CAAC,aAAa,CACxB,MAAM,EACN,GAAW,EACX,OAAe,EACf,SAAiB;QAEjB,IAAI,OAAO,GAAG,OAAO,CAAC;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAEpC,yBAAyB;QACzB,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC3B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SAC3C;QAED,8CAA8C;QAC9C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC9B,OAAO,IAAI,OAAO,CAAC;SACpB;QAED,MAAM,cAAc,GAAG,GAAG,OAAO,GAAG,OAAO,GAAG,CAAC;QAC/C,MAAM,QAAQ,GAAG,GAAG,OAAO,kBAAkB,CAAC;QAC9C,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,cAAc,GAAG,QAAQ,CAAC,CAAC;QAEzD,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,GAAG,OAAO,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE7D,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpD,CAAC;IAED;;;;;;OAMG;IACH,oCAAoC;IAC7B,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAEpC,yCAAyC;QACzC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;YACvC,SAAS,IAAI,KAAK,CAAC;SACpB;QACD,MAAM,cAAc,GAAG,GAAG,OAAO,SAAS,CAAC;QAC3C,MAAM,QAAQ,GAAG,GAAG,SAAS,iBAAiB,CAAC;QAC/C,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,cAAc,GAAG,QAAQ,CAAC,CAAC;QACzD,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,QAAQ,CAAC,CAAC;QACxC,MAAM,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE5D,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpD,CAAC;IAEM,SAAS,CAAC,GAAG;QAClB,IAAI,GAAG,EAAE;YACP,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBACrB,OAAO,GAAG,CAAC;aACZ;iBAAM;gBACL,OAAO,GAAG,GAAG,GAAG,CAAC;aAClB;SACF;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAvED,gCAuEC"}
1
+ {"version":3,"file":"fileWriter.js","sourceRoot":"","sources":["../../../src/lib/helpers/fileWriter.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,yBAAyB;AACzB,6BAA6B;AAQ7B,MAAa,UAAU;IACrB;;;;;;OAMG;IACI,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE,EAAE,GAAW,EAAE,OAAe,EAAE,SAAiB;QACrF,IAAI,OAAO,GAAG,OAAO,CAAC;QAEtB,yBAAyB;QACzB,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC3B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SAC3C;QAED,8CAA8C;QAC9C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC9B,OAAO,IAAI,OAAO,CAAC;SACpB;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAA,2BAAmB,EAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,GAAG,OAAO,kBAAkB,CAAC;QAC9C,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC;QAEnE,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;QAEhF,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpD,CAAC;IAED;;;;;;OAMG;IACH,oCAAoC;IAC7B,KAAK,CAAC,cAAc,CACzB,MAAM,GAAG,EAAE,EACX,GAAW,EACX,SAAiB,EACjB,QAAgB;QAEhB,yCAAyC;QACzC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;YACvC,SAAS,IAAI,KAAK,CAAC;SACpB;QACD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAA,2BAAmB,EAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,GAAG,SAAS,iBAAiB,CAAC;QAC/C,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC;QACnE,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;QAE/E,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpD,CAAC;CACF;AAzDD,gCAyDC;AAEM,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAAvE,QAAA,mBAAmB,uBAAoD"}
@@ -1,51 +1,25 @@
1
- import { Connection } from '@salesforce/core';
2
- import { AnyJson } from '@salesforce/ts-types';
3
- export declare class MetadataUtil {
4
- private conn;
5
- constructor(conn: Connection);
6
- /**
7
- * Returns a describe object from the API name you specify
8
- *
9
- * @param objName API name of the object
10
- * @returns Promise - JSON representation of the describe object
11
- */
12
- describeObj(objName: string): Promise<AnyJson>;
13
- /**
14
- * Returns an array of object records from a SOQL query
15
- *
16
- * @param soqlStr String representation of the SOQL query
17
- * @returns Promise - Array of records in JSON format
18
- */
19
- queryObject(soqlStr: string): Promise<AnyJson>;
20
- /**
21
- * Returns an array of object records
22
- *
23
- * @param describeResult object describe result
24
- * @returns Promise - Promise - Array of records in JSON format
25
- */
26
- queryRecords(describeResult: AnyJson): Promise<AnyJson>;
27
- /**
28
- * Returns describe object for the field API name from the Object API name you specify
29
- *
30
- * @param objDescribe describe object JSON
31
- * @param fieldName API name of the field to query
32
- * @returns Promise - Promise - record in JSON format
33
- */
34
- describeField(objDescribe: AnyJson, fieldName: string): AnyJson;
35
- /**
36
- * Returns describe object for all fields from the object API name you specify
37
- *
38
- * @param objDescribe object describe JSON
39
- * @returns Promise - Promise - record in JSON format
40
- */
41
- describeObjFields(objDescribe: AnyJson): AnyJson;
42
- /**
43
- * Returns true if the object name you specify is a list type custom setting
44
- *
45
- * @param objName API name of the object to query
46
- * @returns boolean
47
- */
48
- validCustomSettingType(objDescribe: AnyJson): boolean;
49
- cleanQueryResponse(sObjecRecord: AnyJson, objectDescribe: AnyJson): import("@salesforce/ts-types").JsonMap;
50
- private _getSoqlQuery;
51
- }
1
+ import { CustomObject, CustomField } from 'jsforce/api/metadata';
2
+ import { Record } from 'jsforce';
3
+ /**
4
+ * Returns describe object for the field API name from the Object API name you specify
5
+ *
6
+ * @param objDescribe describe object JSON
7
+ * @param fieldName API name of the field to query
8
+ * @returns Promise - Promise - record in JSON format
9
+ */
10
+ export declare const describeField: (objDescribe: CustomObject, fieldName: string) => CustomField;
11
+ /**
12
+ * Returns true if the object name you specify is a list type custom setting
13
+ *
14
+ * @param objName object describe JSON
15
+ * @returns boolean
16
+ */
17
+ export declare const validCustomSettingType: (objDescribe: CustomObject) => boolean;
18
+ /**
19
+ * Returns describe object for all fields from the object API name you specify
20
+ *
21
+ * @param objDescribe object describe JSON
22
+ * @returns Promise - Promise - record in JSON format
23
+ */
24
+ export declare const describeObjFields: (objDescribe: CustomObject) => CustomField[];
25
+ export declare const cleanQueryResponse: (sObjectRecord: Record, objectDescribe: CustomObject) => Record;