@kitalive/sfdx-plugin 0.2.1 → 0.4.1
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.
- package/README.md +79 -10
- package/lib/bulk.js +81 -38
- package/lib/bulk.js.map +1 -1
- package/lib/commands/kit/data/bulk/delete.js +37 -10
- package/lib/commands/kit/data/bulk/delete.js.map +1 -1
- package/lib/commands/kit/data/bulk/query.js +10 -3
- package/lib/commands/kit/data/bulk/query.js.map +1 -1
- package/lib/commands/kit/data/csv/convert.d.ts +0 -13
- package/lib/commands/kit/data/csv/convert.js +45 -77
- package/lib/commands/kit/data/csv/convert.js.map +1 -1
- package/lib/commands/kit/layout/assignments/deploy.d.ts +0 -1
- package/lib/commands/kit/layout/assignments/deploy.js +9 -8
- package/lib/commands/kit/layout/assignments/deploy.js.map +1 -1
- package/lib/commands/kit/layout/assignments/retrieve.d.ts +1 -1
- package/lib/commands/kit/layout/assignments/retrieve.js +71 -21
- package/lib/commands/kit/layout/assignments/retrieve.js.map +1 -1
- package/lib/commands/kit/object/fields/describe.d.ts +14 -0
- package/lib/commands/kit/object/fields/describe.js +85 -0
- package/lib/commands/kit/object/fields/describe.js.map +1 -0
- package/lib/commands/kit/object/fields/setup.d.ts +21 -0
- package/lib/commands/kit/object/fields/setup.js +197 -0
- package/lib/commands/kit/object/fields/setup.js.map +1 -0
- package/lib/commands/kit/script/execute.d.ts +1 -1
- package/lib/commands/kit/script/execute.js +13 -8
- package/lib/commands/kit/script/execute.js.map +1 -1
- package/lib/metadata.d.ts +18 -0
- package/lib/metadata.js +69 -0
- package/lib/metadata.js.map +1 -0
- package/lib/types.d.ts +25 -0
- package/lib/utils.d.ts +16 -1
- package/lib/utils.js +76 -1
- package/lib/utils.js.map +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +26 -14
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setFieldOptions = void 0;
|
|
4
|
+
const command_1 = require("@salesforce/command");
|
|
5
|
+
const fs = require("fs-extra");
|
|
6
|
+
const metadata_1 = require("../../../../metadata");
|
|
7
|
+
const utils_1 = require("../../../../utils");
|
|
8
|
+
const deepCopy = (object) => object && JSON.parse(JSON.stringify(object));
|
|
9
|
+
const deepEquals = (obj1, obj2) => JSON.stringify(obj1) === JSON.stringify(obj2);
|
|
10
|
+
function setFieldOptions(field, existingField) {
|
|
11
|
+
var _a;
|
|
12
|
+
for (const [key, value] of Object.entries(field)) {
|
|
13
|
+
if (value === '')
|
|
14
|
+
delete field[key];
|
|
15
|
+
}
|
|
16
|
+
if (field.formula && existingField)
|
|
17
|
+
(_a = field.formulaTreatBlanksAs) !== null && _a !== void 0 ? _a : (field.formulaTreatBlanksAs = existingField.formulaTreatBlanksAs);
|
|
18
|
+
const setDefault = (name, value) => {
|
|
19
|
+
var _a;
|
|
20
|
+
if (field[name] === undefined)
|
|
21
|
+
field[name] = (_a = existingField === null || existingField === void 0 ? void 0 : existingField[name]) !== null && _a !== void 0 ? _a : value;
|
|
22
|
+
};
|
|
23
|
+
switch (field.type) {
|
|
24
|
+
case 'Checkbox':
|
|
25
|
+
setDefault('defaultValue', false);
|
|
26
|
+
break;
|
|
27
|
+
case 'Currency':
|
|
28
|
+
case 'Number':
|
|
29
|
+
case 'Percent':
|
|
30
|
+
setDefault('precision', 18);
|
|
31
|
+
setDefault('scale', 0);
|
|
32
|
+
break;
|
|
33
|
+
case 'Text':
|
|
34
|
+
setDefault('length', 255);
|
|
35
|
+
break;
|
|
36
|
+
case 'EncryptedText':
|
|
37
|
+
setDefault('length', 175);
|
|
38
|
+
setDefault('maskChar', 'asterisk');
|
|
39
|
+
setDefault('maskType', 'all');
|
|
40
|
+
break;
|
|
41
|
+
case 'LongTextArea':
|
|
42
|
+
case 'Html':
|
|
43
|
+
setDefault('length', 32768);
|
|
44
|
+
setDefault('visibleLines', 10);
|
|
45
|
+
break;
|
|
46
|
+
case 'Location':
|
|
47
|
+
setDefault('scale', 5);
|
|
48
|
+
break;
|
|
49
|
+
case 'Picklist':
|
|
50
|
+
setPicklistOptions(field, existingField);
|
|
51
|
+
break;
|
|
52
|
+
case 'MultiselectPicklist':
|
|
53
|
+
setDefault('visibleLines', 4);
|
|
54
|
+
setPicklistOptions(field, existingField);
|
|
55
|
+
break;
|
|
56
|
+
case 'Lookup':
|
|
57
|
+
if (field.required === 'true')
|
|
58
|
+
field.deleteConstraint = 'Restrict';
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.setFieldOptions = setFieldOptions;
|
|
63
|
+
function setPicklistOptions(field, existingField) {
|
|
64
|
+
var _a;
|
|
65
|
+
const { restricted, values, valueSetName } = field;
|
|
66
|
+
if (values || valueSetName) {
|
|
67
|
+
const valueSet = existingField
|
|
68
|
+
? deepCopy(existingField.valueSet)
|
|
69
|
+
: { restricted: true };
|
|
70
|
+
if (restricted !== undefined)
|
|
71
|
+
valueSet.restricted = restricted;
|
|
72
|
+
if (restricted === 'false')
|
|
73
|
+
delete valueSet.restricted;
|
|
74
|
+
if (valueSet.controllingField === null)
|
|
75
|
+
delete valueSet.controllingField;
|
|
76
|
+
if (valueSet.valueSettings === null)
|
|
77
|
+
delete valueSet.valueSettings;
|
|
78
|
+
if (values) {
|
|
79
|
+
(_a = valueSet.valueSetDefinition) !== null && _a !== void 0 ? _a : (valueSet.valueSetDefinition = { value: [] });
|
|
80
|
+
const optionMap = new Map(valueSet.valueSetDefinition.value.map((option) => [
|
|
81
|
+
option.fullName,
|
|
82
|
+
option,
|
|
83
|
+
]));
|
|
84
|
+
const options = values
|
|
85
|
+
.split(';')
|
|
86
|
+
.map((value) => { var _a; return (_a = optionMap.get(value)) !== null && _a !== void 0 ? _a : { fullName: value, label: value }; });
|
|
87
|
+
valueSet.valueSetDefinition.value = options;
|
|
88
|
+
delete valueSet.valueSetName;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
valueSet.valueSetName = valueSetName;
|
|
92
|
+
delete valueSet.valueSetDefinition;
|
|
93
|
+
}
|
|
94
|
+
field.valueSet =
|
|
95
|
+
existingField && deepEquals(valueSet, existingField.valueSet)
|
|
96
|
+
? existingField.valueSet
|
|
97
|
+
: valueSet;
|
|
98
|
+
delete field.restricted;
|
|
99
|
+
delete field.values;
|
|
100
|
+
delete field.valueSetName;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
class FieldsSetupCommand extends command_1.SfdxCommand {
|
|
104
|
+
async run() {
|
|
105
|
+
const { object, file, delete: del, force } = this.flags;
|
|
106
|
+
const conn = this.org.getConnection();
|
|
107
|
+
const namespace = await (0, metadata_1.getOrgNamespace)(conn);
|
|
108
|
+
const pattern = namespace ? new RegExp(`^${namespace}__`, 'g') : null;
|
|
109
|
+
const removeNamespace = (name) => pattern ? name.replace(pattern, '') : name;
|
|
110
|
+
this.ux.startSpinner('parse ' + file);
|
|
111
|
+
const fields = (await (0, utils_1.parseCsv)(fs.createReadStream(file)));
|
|
112
|
+
this.ux.stopSpinner();
|
|
113
|
+
const existingFieldMap = await (0, metadata_1.getCustomFieldMap)(conn, object);
|
|
114
|
+
const oldFieldMap = new Map(existingFieldMap);
|
|
115
|
+
for (const field of fields) {
|
|
116
|
+
const name = removeNamespace(field.fullName);
|
|
117
|
+
const existingField = existingFieldMap.get(name);
|
|
118
|
+
existingFieldMap.delete(name);
|
|
119
|
+
setFieldOptions(field, existingField);
|
|
120
|
+
field.fullName = `${object}.${field.fullName}`;
|
|
121
|
+
}
|
|
122
|
+
let deleteFields = del ? [...existingFieldMap.values()] : [];
|
|
123
|
+
if (deleteFields.length && !force) {
|
|
124
|
+
const confirmed = await this.ux.confirm(`delete fields: ${deleteFields
|
|
125
|
+
.map(({ fullName }) => fullName)
|
|
126
|
+
.join(', ')}\nDo you want to delete the above fields? (y/n)`);
|
|
127
|
+
if (!confirmed)
|
|
128
|
+
deleteFields = [];
|
|
129
|
+
}
|
|
130
|
+
const results = [];
|
|
131
|
+
if (fields.length) {
|
|
132
|
+
this.ux.startSpinner('upsert fields');
|
|
133
|
+
const upsertResults = await (0, metadata_1.upsertMetadata)(conn, 'CustomField', fields);
|
|
134
|
+
const newFieldMap = await (0, metadata_1.getCustomFieldMap)(conn, object);
|
|
135
|
+
for (const { fullName, created, success, errors } of upsertResults) {
|
|
136
|
+
const name = fullName.slice(object.length + 1);
|
|
137
|
+
let result = created ? 'created' : success ? 'updated' : 'error';
|
|
138
|
+
if (result === 'updated' &&
|
|
139
|
+
deepEquals(newFieldMap.get(name), oldFieldMap.get(name))) {
|
|
140
|
+
result = 'identical';
|
|
141
|
+
}
|
|
142
|
+
results.push({
|
|
143
|
+
field: name,
|
|
144
|
+
result,
|
|
145
|
+
error: Array.isArray(errors)
|
|
146
|
+
? errors.map((e) => e.message).join(', ')
|
|
147
|
+
: errors === null || errors === void 0 ? void 0 : errors.message,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
this.ux.stopSpinner();
|
|
151
|
+
}
|
|
152
|
+
if (deleteFields.length) {
|
|
153
|
+
this.ux.startSpinner('delete fields');
|
|
154
|
+
const names = deleteFields.map(({ fullName }) => `${object}.${fullName}`);
|
|
155
|
+
for (const { fullName, success, errors } of await (0, metadata_1.deleteMetadata)(conn, 'CustomField', names)) {
|
|
156
|
+
results.push({
|
|
157
|
+
field: fullName.slice(object.length + 1),
|
|
158
|
+
result: success ? 'deleted' : 'error',
|
|
159
|
+
error: Array.isArray(errors)
|
|
160
|
+
? errors.map((e) => e.message).join(', ')
|
|
161
|
+
: errors === null || errors === void 0 ? void 0 : errors.message,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
this.ux.stopSpinner();
|
|
165
|
+
}
|
|
166
|
+
this.ux.styledHeader('Fields setup result');
|
|
167
|
+
this.ux.table(results, ['field', 'result', 'error']);
|
|
168
|
+
return results;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
exports.default = FieldsSetupCommand;
|
|
172
|
+
FieldsSetupCommand.description = 'upsert and delete object fields from a CSV file';
|
|
173
|
+
FieldsSetupCommand.examples = [
|
|
174
|
+
'$ sfdx kit:object:fields:setup -o Account -f path/to/account_fields.csv',
|
|
175
|
+
'$ sfdx kit:object:fields:setup -u me@my.org -o CustomObject__c -f path/to/custom_object_fields.csv --delete',
|
|
176
|
+
];
|
|
177
|
+
FieldsSetupCommand.requiresUsername = true;
|
|
178
|
+
FieldsSetupCommand.requiresProject = false;
|
|
179
|
+
FieldsSetupCommand.flagsConfig = {
|
|
180
|
+
object: command_1.flags.string({
|
|
181
|
+
char: 'o',
|
|
182
|
+
required: true,
|
|
183
|
+
description: 'SObject name',
|
|
184
|
+
}),
|
|
185
|
+
file: command_1.flags.string({
|
|
186
|
+
char: 'f',
|
|
187
|
+
required: true,
|
|
188
|
+
description: 'input csv file path',
|
|
189
|
+
}),
|
|
190
|
+
delete: command_1.flags.boolean({
|
|
191
|
+
description: 'delete fields that are not in the csv file',
|
|
192
|
+
}),
|
|
193
|
+
force: command_1.flags.boolean({
|
|
194
|
+
description: 'Do not confirm when deleting',
|
|
195
|
+
}),
|
|
196
|
+
};
|
|
197
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../../src/commands/kit/object/fields/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ export default class ScriptExecuteCommand extends SfdxCommand {
|
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static aliases: string[];
|
|
6
6
|
static strict: boolean;
|
|
7
|
-
protected static
|
|
7
|
+
protected static supportsUsername: boolean;
|
|
8
8
|
protected static requiresProject: boolean;
|
|
9
9
|
protected static flagsConfig: {
|
|
10
10
|
file: flags.Discriminated<flags.String>;
|
|
@@ -7,19 +7,21 @@ const repl = require("repl");
|
|
|
7
7
|
const yargs_1 = require("yargs");
|
|
8
8
|
class ScriptExecuteCommand extends command_1.SfdxCommand {
|
|
9
9
|
async run() {
|
|
10
|
+
var _a, _b;
|
|
10
11
|
const { file } = this.flags;
|
|
11
12
|
module.paths.push('./node_modules');
|
|
12
13
|
if (file) {
|
|
13
14
|
const fileIndex = process.argv.indexOf(file);
|
|
14
15
|
const argv = (0, yargs_1.default)([]).parse(process.argv.slice(fileIndex + 1));
|
|
15
16
|
const script = fs.readFileSync(file).toString('utf8');
|
|
16
|
-
const loader = name => {
|
|
17
|
+
const loader = (name) => {
|
|
17
18
|
if (name.startsWith('.'))
|
|
18
19
|
name = path.resolve(path.dirname(file), name);
|
|
19
20
|
return require(name);
|
|
20
21
|
};
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
21
23
|
const asyncFunction = Object.getPrototypeOf(async () => { }).constructor;
|
|
22
|
-
return await new asyncFunction('require', 'argv', 'context', 'conn', script)(loader, argv, this, this.org.getConnection());
|
|
24
|
+
return await new asyncFunction('require', 'argv', 'context', 'conn', script)(loader, argv, this, (_a = this.org) === null || _a === void 0 ? void 0 : _a.getConnection());
|
|
23
25
|
}
|
|
24
26
|
else {
|
|
25
27
|
this.ux.log('Starting sfdx REPL mode');
|
|
@@ -30,8 +32,8 @@ class ScriptExecuteCommand extends command_1.SfdxCommand {
|
|
|
30
32
|
const replServer = repl.start('> ');
|
|
31
33
|
replServer.context.require = require;
|
|
32
34
|
replServer.context.context = this;
|
|
33
|
-
replServer.context.conn = this.org.getConnection();
|
|
34
|
-
return new Promise(resolve => replServer.on('exit', () => resolve()));
|
|
35
|
+
replServer.context.conn = (_b = this.org) === null || _b === void 0 ? void 0 : _b.getConnection();
|
|
36
|
+
return new Promise((resolve) => replServer.on('exit', () => resolve()));
|
|
35
37
|
}
|
|
36
38
|
}
|
|
37
39
|
}
|
|
@@ -41,20 +43,23 @@ ScriptExecuteCommand.description = [
|
|
|
41
43
|
'Available variables in Node.js scripts',
|
|
42
44
|
' argv: Parsed command line arguments after the file option',
|
|
43
45
|
' conn: jsforce Connection',
|
|
44
|
-
' context: SfdxCommand'
|
|
46
|
+
' context: SfdxCommand',
|
|
45
47
|
].join('\n');
|
|
46
48
|
ScriptExecuteCommand.examples = [
|
|
47
49
|
'$ sfdx kit:script -f ./path/to/script.js',
|
|
48
50
|
'$ sfdx kit:script:execute',
|
|
49
51
|
"> await conn.query('SELECT Id, Name FROM Account LIMIT 1')",
|
|
50
52
|
'Top level await is not enabled by default in REPL before Node.js v16',
|
|
51
|
-
'$ NODE_OPTIONS=--experimental-repl-await sfdx kit:script:execute'
|
|
53
|
+
'$ NODE_OPTIONS=--experimental-repl-await sfdx kit:script:execute',
|
|
52
54
|
];
|
|
53
55
|
ScriptExecuteCommand.aliases = ['kit:script'];
|
|
54
56
|
ScriptExecuteCommand.strict = false;
|
|
55
|
-
ScriptExecuteCommand.
|
|
57
|
+
ScriptExecuteCommand.supportsUsername = true;
|
|
56
58
|
ScriptExecuteCommand.requiresProject = false;
|
|
57
59
|
ScriptExecuteCommand.flagsConfig = {
|
|
58
|
-
file: command_1.flags.filepath({
|
|
60
|
+
file: command_1.flags.filepath({
|
|
61
|
+
char: 'f',
|
|
62
|
+
description: 'the path of the Node.js script file to execute',
|
|
63
|
+
}),
|
|
59
64
|
};
|
|
60
65
|
//# sourceMappingURL=execute.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../src/commands/kit/script/execute.ts"],"names":[],"mappings":";;AAAA,iDAAyD;AACzD,+BAA+B;AAC/B,6BAA6B;AAC7B,6BAA6B;AAC7B,iCAA0B;AAE1B,MAAqB,oBAAqB,SAAQ,qBAAW;
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../src/commands/kit/script/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Connection, MetadataInfo, SaveResult, UpsertResult as JsforceUpsertResult } from 'jsforce';
|
|
2
|
+
import { CustomField } from './types';
|
|
3
|
+
interface UpsertResult extends JsforceUpsertResult {
|
|
4
|
+
errors: {
|
|
5
|
+
message: string;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export declare function getOrgNamespace(conn: Connection): Promise<string>;
|
|
9
|
+
export declare function completeDefaultNamespace(conn: Connection, objectName: string): Promise<string>;
|
|
10
|
+
export declare function completeDefaultNamespace(conn: Connection, objectNames: string[]): Promise<string[]>;
|
|
11
|
+
export declare function chunkMetadata<T>(type: string, metadata: T | T[]): Array<T[]>;
|
|
12
|
+
export declare function readMetadata(conn: Connection, type: string, fullNames: string | string[]): Promise<MetadataInfo[]>;
|
|
13
|
+
export declare function updateMetadata(conn: Connection, type: string, metadata: MetadataInfo | MetadataInfo[]): Promise<SaveResult[]>;
|
|
14
|
+
export declare function upsertMetadata(conn: Connection, type: string, metadata: MetadataInfo | MetadataInfo[]): Promise<UpsertResult[]>;
|
|
15
|
+
export declare function deleteMetadata(conn: Connection, type: string, fullNames: string | string[]): Promise<SaveResult[]>;
|
|
16
|
+
export declare function getCustomFields(conn: Connection, object: string): Promise<CustomField[]>;
|
|
17
|
+
export declare function getCustomFieldMap(conn: Connection, object: string): Promise<Map<string, CustomField>>;
|
|
18
|
+
export {};
|
package/lib/metadata.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCustomFieldMap = exports.getCustomFields = exports.deleteMetadata = exports.upsertMetadata = exports.updateMetadata = exports.readMetadata = exports.chunkMetadata = exports.completeDefaultNamespace = exports.getOrgNamespace = void 0;
|
|
4
|
+
const utils_1 = require("./utils");
|
|
5
|
+
let orgNamespace;
|
|
6
|
+
async function getOrgNamespace(conn) {
|
|
7
|
+
if (orgNamespace === undefined) {
|
|
8
|
+
const { records: [{ NamespacePrefix }], } = await conn.query('SELECT NamespacePrefix FROM Organization');
|
|
9
|
+
orgNamespace = NamespacePrefix;
|
|
10
|
+
}
|
|
11
|
+
return orgNamespace;
|
|
12
|
+
}
|
|
13
|
+
exports.getOrgNamespace = getOrgNamespace;
|
|
14
|
+
async function completeDefaultNamespace(conn, objectName) {
|
|
15
|
+
const ns = await getOrgNamespace(conn);
|
|
16
|
+
if (!ns)
|
|
17
|
+
return objectName;
|
|
18
|
+
const isArray = Array.isArray(objectName);
|
|
19
|
+
const objectNames = isArray ? objectName : [objectName];
|
|
20
|
+
const results = objectNames.map((name) => {
|
|
21
|
+
if (name.endsWith('__c') && name.split('__').length === 2) {
|
|
22
|
+
return `${ns}__${name}`;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
return name;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
return isArray ? results : results[0];
|
|
29
|
+
}
|
|
30
|
+
exports.completeDefaultNamespace = completeDefaultNamespace;
|
|
31
|
+
function chunkMetadata(type, metadata) {
|
|
32
|
+
// metadata limit: https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_createMetadata.htm
|
|
33
|
+
const size = type === 'CustomMetadata' || type === 'CustomApplication' ? 200 : 10;
|
|
34
|
+
return (0, utils_1.chunk)(Array.isArray(metadata) ? metadata : [metadata], size);
|
|
35
|
+
}
|
|
36
|
+
exports.chunkMetadata = chunkMetadata;
|
|
37
|
+
function readMetadata(conn, type, fullNames) {
|
|
38
|
+
return Promise.all(chunkMetadata(type, fullNames).map((data) => conn.metadata.read(type, data))).then((a) => a.flat());
|
|
39
|
+
}
|
|
40
|
+
exports.readMetadata = readMetadata;
|
|
41
|
+
function updateMetadata(conn, type, metadata) {
|
|
42
|
+
return Promise.all(chunkMetadata(type, metadata).map((data) => conn.metadata.update(type, data))).then((a) => a.flat());
|
|
43
|
+
}
|
|
44
|
+
exports.updateMetadata = updateMetadata;
|
|
45
|
+
function upsertMetadata(conn, type, metadata) {
|
|
46
|
+
return Promise.all(chunkMetadata(type, metadata).map((data) => conn.metadata.upsert(type, data))).then((a) => a.flat());
|
|
47
|
+
}
|
|
48
|
+
exports.upsertMetadata = upsertMetadata;
|
|
49
|
+
function deleteMetadata(conn, type, fullNames) {
|
|
50
|
+
return Promise.all(chunkMetadata(type, fullNames).map((data) => conn.metadata.delete(type, data))).then((a) => a.flat());
|
|
51
|
+
}
|
|
52
|
+
exports.deleteMetadata = deleteMetadata;
|
|
53
|
+
async function getCustomFields(conn, object) {
|
|
54
|
+
object = await completeDefaultNamespace(conn, object);
|
|
55
|
+
const { records } = await conn.tooling.query(`SELECT DeveloperName, Metadata FROM CustomField WHERE EntityDefinition.QualifiedApiName='${object}' AND ManageableState = 'unmanaged'`);
|
|
56
|
+
return records
|
|
57
|
+
.filter((r) => !r.DeveloperName.endsWith('_del'))
|
|
58
|
+
.map((r) => ({
|
|
59
|
+
fullName: r.DeveloperName + '__c',
|
|
60
|
+
...r.Metadata,
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
exports.getCustomFields = getCustomFields;
|
|
64
|
+
async function getCustomFieldMap(conn, object) {
|
|
65
|
+
const fields = await getCustomFields(conn, object);
|
|
66
|
+
return new Map(fields.map((f) => [f.fullName, f]));
|
|
67
|
+
}
|
|
68
|
+
exports.getCustomFieldMap = getCustomFieldMap;
|
|
69
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MetadataInfo } from 'jsforce';
|
|
1
2
|
export declare type LayoutAssignment = {
|
|
2
3
|
layout: string;
|
|
3
4
|
recordType?: string;
|
|
@@ -9,3 +10,27 @@ export declare type ProfileMetadata = {
|
|
|
9
10
|
fullName: string;
|
|
10
11
|
layoutAssignments: LayoutAssignment[];
|
|
11
12
|
};
|
|
13
|
+
interface CustomValue {
|
|
14
|
+
fullName?: string;
|
|
15
|
+
valueName?: string;
|
|
16
|
+
label: string;
|
|
17
|
+
default?: boolean;
|
|
18
|
+
}
|
|
19
|
+
interface ValueSet {
|
|
20
|
+
restricted?: boolean;
|
|
21
|
+
valueSetName?: string;
|
|
22
|
+
valueSetDefinition?: {
|
|
23
|
+
sorted?: boolean;
|
|
24
|
+
value: CustomValue[];
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export interface CustomField extends MetadataInfo {
|
|
28
|
+
label?: string;
|
|
29
|
+
type?: string;
|
|
30
|
+
defaultValue?: string;
|
|
31
|
+
valueSet?: ValueSet;
|
|
32
|
+
restricted?: boolean;
|
|
33
|
+
valueSetName?: string;
|
|
34
|
+
values?: string;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
package/lib/utils.d.ts
CHANGED
|
@@ -1 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { JsonMap } from '@salesforce/ts-types';
|
|
3
|
+
export declare function chunk<T>(array: Array<T>, size: number): Array<Array<T>>;
|
|
4
|
+
export declare function rangeGenerator(from: number, to: number): Iterable<number>;
|
|
5
|
+
export declare function range(from: number, to: number): Array<number>;
|
|
6
|
+
export declare function parseCsv(input: NodeJS.ReadableStream, options?: {
|
|
7
|
+
encoding?: string;
|
|
8
|
+
delimiter?: string;
|
|
9
|
+
quote?: string;
|
|
10
|
+
skiplines?: number;
|
|
11
|
+
trim?: boolean;
|
|
12
|
+
mapping?: JsonMap;
|
|
13
|
+
convert?: (row: JsonMap) => JsonMap | null | undefined;
|
|
14
|
+
}): Promise<JsonMap[]>;
|
|
15
|
+
export declare function loadScript(file: any): any;
|
|
16
|
+
export declare function columnMapper(mapping: any): (row: any) => {};
|
package/lib/utils.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.chunk = void 0;
|
|
3
|
+
exports.columnMapper = exports.loadScript = exports.parseCsv = exports.range = exports.rangeGenerator = exports.chunk = void 0;
|
|
4
|
+
const csv = require("fast-csv");
|
|
5
|
+
const iconv_lite_1 = require("iconv-lite");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const stream_1 = require("stream");
|
|
4
8
|
function chunk(array, size) {
|
|
5
9
|
const result = [];
|
|
6
10
|
for (let i = 0, l = array.length; i < l; i += size) {
|
|
@@ -9,4 +13,75 @@ function chunk(array, size) {
|
|
|
9
13
|
return result;
|
|
10
14
|
}
|
|
11
15
|
exports.chunk = chunk;
|
|
16
|
+
function* rangeGenerator(from, to) {
|
|
17
|
+
for (let i = from; i <= to; i++) {
|
|
18
|
+
yield i;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.rangeGenerator = rangeGenerator;
|
|
22
|
+
function range(from, to) {
|
|
23
|
+
return Array.from(rangeGenerator(from, to));
|
|
24
|
+
}
|
|
25
|
+
exports.range = range;
|
|
26
|
+
function parseCsv(input, options) {
|
|
27
|
+
const { encoding, delimiter, quote, skiplines, trim, mapping, convert } = options !== null && options !== void 0 ? options : {};
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
const mapper = mapping ? columnMapper(mapping) : undefined;
|
|
30
|
+
let lines = 2;
|
|
31
|
+
const rows = [];
|
|
32
|
+
const parser = csv
|
|
33
|
+
.parse({
|
|
34
|
+
headers: true,
|
|
35
|
+
ignoreEmpty: true,
|
|
36
|
+
delimiter: delimiter === '\\t' ? '\t' : delimiter || ',',
|
|
37
|
+
quote: quote !== null && quote !== void 0 ? quote : '"',
|
|
38
|
+
skipLines: skiplines,
|
|
39
|
+
trim,
|
|
40
|
+
})
|
|
41
|
+
.on('data', (row) => {
|
|
42
|
+
try {
|
|
43
|
+
if (mapper)
|
|
44
|
+
row = mapper(row);
|
|
45
|
+
if (convert)
|
|
46
|
+
row = convert(row);
|
|
47
|
+
if (row)
|
|
48
|
+
rows.push(row);
|
|
49
|
+
lines++;
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
throw new Error(`A error occurred in csv file at line ${lines}: ${e.message}\ndata: ${JSON.stringify(row)}`);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
const callback = (e) => (e ? reject(e) : resolve(rows));
|
|
56
|
+
if (!encoding || encoding === 'utf8') {
|
|
57
|
+
(0, stream_1.pipeline)(input, parser, callback);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
(0, stream_1.pipeline)(input, (0, iconv_lite_1.decodeStream)(encoding), parser, callback);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
exports.parseCsv = parseCsv;
|
|
65
|
+
function loadScript(file) {
|
|
66
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
67
|
+
const script = require(path.resolve(file));
|
|
68
|
+
if (!script.convert)
|
|
69
|
+
throw new Error('function convert is not exported');
|
|
70
|
+
return script;
|
|
71
|
+
}
|
|
72
|
+
exports.loadScript = loadScript;
|
|
73
|
+
function columnMapper(mapping) {
|
|
74
|
+
const keys = Object.keys(mapping);
|
|
75
|
+
return (row) => {
|
|
76
|
+
const result = {};
|
|
77
|
+
for (const to of keys) {
|
|
78
|
+
const from = mapping[to];
|
|
79
|
+
if (!(from in row))
|
|
80
|
+
throw new Error(`The column '${from}' is not found`);
|
|
81
|
+
result[to] = row[from];
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
exports.columnMapper = columnMapper;
|
|
12
87
|
//# sourceMappingURL=utils.js.map
|
package/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|