@kitalive/sfdx-plugin 0.2.0 → 0.4.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.
- package/README.md +90 -42
- package/lib/bulk.js +81 -38
- package/lib/bulk.js.map +1 -1
- package/lib/commands/kit/data/bulk/delete.js +42 -15
- package/lib/commands/kit/data/bulk/delete.js.map +1 -1
- package/lib/commands/kit/data/bulk/insert.js +1 -1
- package/lib/commands/kit/data/bulk/insert.js.map +1 -1
- package/lib/commands/kit/data/bulk/query.js +12 -5
- package/lib/commands/kit/data/bulk/query.js.map +1 -1
- package/lib/commands/kit/data/bulk/update.js +1 -1
- package/lib/commands/kit/data/bulk/update.js.map +1 -1
- package/lib/commands/kit/data/bulk/upsert.js +1 -1
- package/lib/commands/kit/data/bulk/upsert.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 +19 -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 +24 -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 +27 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retrieve.js","sourceRoot":"","sources":["../../../../../src/commands/kit/layout/assignments/retrieve.ts"],"names":[],"mappings":";;AAAA,iDAAyD;AACzD,2CAA6C;AAC7C,kCAAkC;AAClC,+BAA+B;AAC/B,6BAA6B;
|
|
1
|
+
{"version":3,"file":"retrieve.js","sourceRoot":"","sources":["../../../../../src/commands/kit/layout/assignments/retrieve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { flags, SfdxCommand } from '@salesforce/command';
|
|
2
|
+
import { MetadataInfo } from 'jsforce';
|
|
3
|
+
export default class FieldsDescribeCommand extends SfdxCommand {
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: string[];
|
|
6
|
+
protected static requiresUsername: boolean;
|
|
7
|
+
protected static requiresProject: boolean;
|
|
8
|
+
protected static flagsConfig: {
|
|
9
|
+
object: flags.Discriminated<flags.String>;
|
|
10
|
+
file: flags.Discriminated<flags.String>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<MetadataInfo[]>;
|
|
13
|
+
writeCsv(file: any, rows: any): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const command_1 = require("@salesforce/command");
|
|
4
|
+
const csv = require("fast-csv");
|
|
5
|
+
const fs = require("fs-extra");
|
|
6
|
+
const metadata_1 = require("../../../../metadata");
|
|
7
|
+
const csvHeaders = [
|
|
8
|
+
'label',
|
|
9
|
+
'fullName',
|
|
10
|
+
'type',
|
|
11
|
+
'length',
|
|
12
|
+
'precision',
|
|
13
|
+
'scale',
|
|
14
|
+
'formula',
|
|
15
|
+
// START picklist specific options
|
|
16
|
+
'valueSetName',
|
|
17
|
+
'values',
|
|
18
|
+
'restricted',
|
|
19
|
+
// END
|
|
20
|
+
'referenceTo',
|
|
21
|
+
'relationshipName',
|
|
22
|
+
'summaryForeignKey',
|
|
23
|
+
'summaryOperation',
|
|
24
|
+
'summarizedField',
|
|
25
|
+
'required',
|
|
26
|
+
'unique',
|
|
27
|
+
'caseSensitive',
|
|
28
|
+
'defaultValue',
|
|
29
|
+
'externalId',
|
|
30
|
+
'description',
|
|
31
|
+
'inlineHelpText',
|
|
32
|
+
];
|
|
33
|
+
class FieldsDescribeCommand extends command_1.SfdxCommand {
|
|
34
|
+
async run() {
|
|
35
|
+
const { object, file, json } = this.flags;
|
|
36
|
+
const conn = this.org.getConnection();
|
|
37
|
+
this.ux.startSpinner(`describe ${object} fields`);
|
|
38
|
+
const results = await (0, metadata_1.getCustomFields)(conn, object);
|
|
39
|
+
this.ux.stopSpinner();
|
|
40
|
+
if (!json) {
|
|
41
|
+
const rows = results.map(({ valueSet, ...row }) => {
|
|
42
|
+
if (valueSet) {
|
|
43
|
+
const { restricted, valueSetDefinition, valueSetName } = valueSet;
|
|
44
|
+
row.restricted = restricted;
|
|
45
|
+
if (valueSetDefinition) {
|
|
46
|
+
row.values = valueSetDefinition.value
|
|
47
|
+
.map((v) => v.fullName)
|
|
48
|
+
.join(';');
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
row.valueSetName = valueSetName;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return row;
|
|
55
|
+
});
|
|
56
|
+
this.writeCsv(file, rows);
|
|
57
|
+
}
|
|
58
|
+
return results;
|
|
59
|
+
}
|
|
60
|
+
writeCsv(file, rows) {
|
|
61
|
+
csv
|
|
62
|
+
.write(rows, { headers: csvHeaders, writeBOM: true })
|
|
63
|
+
.pipe(file ? fs.createWriteStream(file) : process.stdout);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.default = FieldsDescribeCommand;
|
|
67
|
+
FieldsDescribeCommand.description = 'describe object fields information';
|
|
68
|
+
FieldsDescribeCommand.examples = [
|
|
69
|
+
'$ sfdx kit:object:fields:describe -o Account -f path/to/account_fields.csv',
|
|
70
|
+
'$ sfdx kit:object:fields:describe -u me@my.org -o CustomObject__c --json',
|
|
71
|
+
];
|
|
72
|
+
FieldsDescribeCommand.requiresUsername = true;
|
|
73
|
+
FieldsDescribeCommand.requiresProject = false;
|
|
74
|
+
FieldsDescribeCommand.flagsConfig = {
|
|
75
|
+
object: command_1.flags.string({
|
|
76
|
+
char: 'o',
|
|
77
|
+
required: true,
|
|
78
|
+
description: 'SObject name',
|
|
79
|
+
}),
|
|
80
|
+
file: command_1.flags.string({
|
|
81
|
+
char: 'f',
|
|
82
|
+
description: 'output csv file path',
|
|
83
|
+
}),
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=describe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe.js","sourceRoot":"","sources":["../../../../../src/commands/kit/object/fields/describe.ts"],"names":[],"mappings":";;AAAA,iDAAyD;AACzD,gCAAgC;AAChC,+BAA+B;AAE/B,mDAAuD;AAEvD,MAAM,UAAU,GAAG;IACjB,OAAO;IACP,UAAU;IACV,MAAM;IACN,QAAQ;IACR,WAAW;IACX,OAAO;IACP,SAAS;IACT,kCAAkC;IAClC,cAAc;IACd,QAAQ;IACR,YAAY;IACZ,MAAM;IACN,aAAa;IACb,kBAAkB;IAClB,mBAAmB;IACnB,kBAAkB;IAClB,iBAAiB;IACjB,UAAU;IACV,QAAQ;IACR,eAAe;IACf,cAAc;IACd,YAAY;IACZ,aAAa;IACb,gBAAgB;CACjB,CAAC;AAEF,MAAqB,qBAAsB,SAAQ,qBAAW;IAuBrD,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,MAAM,SAAS,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,IAAA,0BAAe,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE;gBAChD,IAAI,QAAQ,EAAE;oBACZ,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;oBAClE,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;oBAC5B,IAAI,kBAAkB,EAAE;wBACtB,GAAG,CAAC,MAAM,GAAG,kBAAkB,CAAC,KAAK;6BAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;6BACtB,IAAI,CAAC,GAAG,CAAC,CAAC;qBACd;yBAAM;wBACL,GAAG,CAAC,YAAY,GAAG,YAAY,CAAC;qBACjC;iBACF;gBACD,OAAO,GAAG,CAAC;YACb,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SAC3B;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,QAAQ,CAAC,IAAI,EAAE,IAAI;QACjB,GAAG;aACA,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;aACpD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,CAAC;;AArDH,wCAsDC;AArDe,iCAAW,GAAG,oCAAoC,CAAC;AAEnD,8BAAQ,GAAG;IACvB,4EAA4E;IAC5E,0EAA0E;CAC3E,CAAC;AAEe,sCAAgB,GAAG,IAAI,CAAC;AACxB,qCAAe,GAAG,KAAK,CAAC;AAExB,iCAAW,GAAG;IAC7B,MAAM,EAAE,eAAK,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,GAAG;QACT,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,cAAc;KAC5B,CAAC;IACF,IAAI,EAAE,eAAK,CAAC,MAAM,CAAC;QACjB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,sBAAsB;KACpC,CAAC;CACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { flags, SfdxCommand } from '@salesforce/command';
|
|
2
|
+
declare type SetupResult = {
|
|
3
|
+
field: string;
|
|
4
|
+
result: 'created' | 'updated' | 'deleted' | 'identical' | 'error';
|
|
5
|
+
error?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function setFieldOptions(field: any, existingField: any): void;
|
|
8
|
+
export default class FieldsSetupCommand extends SfdxCommand {
|
|
9
|
+
static description: string;
|
|
10
|
+
static examples: string[];
|
|
11
|
+
protected static requiresUsername: boolean;
|
|
12
|
+
protected static requiresProject: boolean;
|
|
13
|
+
protected static flagsConfig: {
|
|
14
|
+
object: flags.Discriminated<flags.String>;
|
|
15
|
+
file: flags.Discriminated<flags.String>;
|
|
16
|
+
delete: flags.Discriminated<flags.Boolean<boolean>>;
|
|
17
|
+
force: flags.Discriminated<flags.Boolean<boolean>>;
|
|
18
|
+
};
|
|
19
|
+
run(): Promise<SetupResult[]>;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -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>;
|
|
@@ -2,18 +2,26 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const command_1 = require("@salesforce/command");
|
|
4
4
|
const fs = require("fs-extra");
|
|
5
|
+
const path = require("path");
|
|
5
6
|
const repl = require("repl");
|
|
6
7
|
const yargs_1 = require("yargs");
|
|
7
8
|
class ScriptExecuteCommand extends command_1.SfdxCommand {
|
|
8
9
|
async run() {
|
|
10
|
+
var _a, _b;
|
|
9
11
|
const { file } = this.flags;
|
|
10
12
|
module.paths.push('./node_modules');
|
|
11
13
|
if (file) {
|
|
12
14
|
const fileIndex = process.argv.indexOf(file);
|
|
13
|
-
const argv = yargs_1.default([]).parse(process.argv.slice(fileIndex + 1));
|
|
15
|
+
const argv = (0, yargs_1.default)([]).parse(process.argv.slice(fileIndex + 1));
|
|
14
16
|
const script = fs.readFileSync(file).toString('utf8');
|
|
17
|
+
const loader = (name) => {
|
|
18
|
+
if (name.startsWith('.'))
|
|
19
|
+
name = path.resolve(path.dirname(file), name);
|
|
20
|
+
return require(name);
|
|
21
|
+
};
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
15
23
|
const asyncFunction = Object.getPrototypeOf(async () => { }).constructor;
|
|
16
|
-
return await new asyncFunction('require', 'argv', 'context', 'conn', script)(
|
|
24
|
+
return await new asyncFunction('require', 'argv', 'context', 'conn', script)(loader, argv, this, (_a = this.org) === null || _a === void 0 ? void 0 : _a.getConnection());
|
|
17
25
|
}
|
|
18
26
|
else {
|
|
19
27
|
this.ux.log('Starting sfdx REPL mode');
|
|
@@ -24,8 +32,8 @@ class ScriptExecuteCommand extends command_1.SfdxCommand {
|
|
|
24
32
|
const replServer = repl.start('> ');
|
|
25
33
|
replServer.context.require = require;
|
|
26
34
|
replServer.context.context = this;
|
|
27
|
-
replServer.context.conn = this.org.getConnection();
|
|
28
|
-
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()));
|
|
29
37
|
}
|
|
30
38
|
}
|
|
31
39
|
}
|
|
@@ -35,20 +43,23 @@ ScriptExecuteCommand.description = [
|
|
|
35
43
|
'Available variables in Node.js scripts',
|
|
36
44
|
' argv: Parsed command line arguments after the file option',
|
|
37
45
|
' conn: jsforce Connection',
|
|
38
|
-
' context: SfdxCommand'
|
|
46
|
+
' context: SfdxCommand',
|
|
39
47
|
].join('\n');
|
|
40
48
|
ScriptExecuteCommand.examples = [
|
|
41
49
|
'$ sfdx kit:script -f ./path/to/script.js',
|
|
42
50
|
'$ sfdx kit:script:execute',
|
|
43
51
|
"> await conn.query('SELECT Id, Name FROM Account LIMIT 1')",
|
|
44
52
|
'Top level await is not enabled by default in REPL before Node.js v16',
|
|
45
|
-
'$ NODE_OPTIONS=--experimental-repl-await sfdx kit:script:execute'
|
|
53
|
+
'$ NODE_OPTIONS=--experimental-repl-await sfdx kit:script:execute',
|
|
46
54
|
];
|
|
47
55
|
ScriptExecuteCommand.aliases = ['kit:script'];
|
|
48
56
|
ScriptExecuteCommand.strict = false;
|
|
49
|
-
ScriptExecuteCommand.
|
|
57
|
+
ScriptExecuteCommand.supportsUsername = true;
|
|
50
58
|
ScriptExecuteCommand.requiresProject = false;
|
|
51
59
|
ScriptExecuteCommand.flagsConfig = {
|
|
52
|
-
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
|
+
}),
|
|
53
64
|
};
|
|
54
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,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,26 @@ export declare type ProfileMetadata = {
|
|
|
9
10
|
fullName: string;
|
|
10
11
|
layoutAssignments: LayoutAssignment[];
|
|
11
12
|
};
|
|
13
|
+
interface CustomValue {
|
|
14
|
+
fullName: string;
|
|
15
|
+
label: string;
|
|
16
|
+
default?: boolean;
|
|
17
|
+
}
|
|
18
|
+
interface ValueSet {
|
|
19
|
+
restricted?: boolean;
|
|
20
|
+
valueSetName?: string;
|
|
21
|
+
valueSetDefinition?: {
|
|
22
|
+
sorted?: boolean;
|
|
23
|
+
value: CustomValue[];
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export interface CustomField extends MetadataInfo {
|
|
27
|
+
label?: string;
|
|
28
|
+
type?: string;
|
|
29
|
+
defaultValue?: string;
|
|
30
|
+
valueSet?: ValueSet;
|
|
31
|
+
restricted?: boolean;
|
|
32
|
+
valueSetName?: string;
|
|
33
|
+
values?: string;
|
|
34
|
+
}
|
|
35
|
+
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) => {};
|