@kitalive/sfdx-plugin 1.0.2 → 1.0.4
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 +48 -27
- package/lib/bulk.js +220 -0
- package/lib/bulk.js.map +1 -0
- package/lib/commands/kit/data/bulk/delete.js +113 -0
- package/lib/commands/kit/data/bulk/delete.js.map +1 -0
- package/lib/commands/kit/data/bulk/insert.js +7 -0
- package/lib/commands/kit/data/bulk/insert.js.map +1 -0
- package/lib/commands/kit/data/bulk/query.js +166 -0
- package/lib/commands/kit/data/bulk/query.js.map +1 -0
- package/lib/commands/kit/data/bulk/update.js +7 -0
- package/lib/commands/kit/data/bulk/update.js.map +1 -0
- package/lib/commands/kit/data/bulk/upsert.js +22 -0
- package/lib/commands/kit/data/bulk/upsert.js.map +1 -0
- package/lib/commands/kit/data/csv/convert.js +160 -0
- package/lib/commands/kit/data/csv/convert.js.map +1 -0
- package/lib/commands/kit/graphql/editor.js +37 -0
- package/lib/commands/kit/graphql/editor.js.map +1 -0
- package/lib/commands/kit/layout/assignments/deploy.js +35 -0
- package/lib/commands/kit/layout/assignments/deploy.js.map +1 -0
- package/lib/commands/kit/layout/assignments/retrieve.js +124 -0
- package/lib/commands/kit/layout/assignments/retrieve.js.map +1 -0
- package/lib/commands/kit/metadata/dependencies.js +182 -0
- package/lib/commands/kit/metadata/dependencies.js.map +1 -0
- package/lib/commands/kit/object/fields/describe.js +84 -0
- package/lib/commands/kit/object/fields/describe.js.map +1 -0
- package/lib/commands/kit/object/fields/setup.js +261 -0
- package/lib/commands/kit/object/fields/setup.js.map +1 -0
- package/lib/commands/kit/script/execute.js +72 -0
- package/lib/commands/kit/script/execute.js.map +1 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/metadata.js +82 -0
- package/lib/metadata.js.map +1 -0
- package/lib/server.js +43 -0
- package/lib/server.js.map +1 -0
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -0
- package/lib/utils.js +94 -0
- package/lib/utils.js.map +1 -0
- package/messages/data.bulk.delete.md +8 -0
- package/messages/data.bulk.query.md +32 -0
- package/oclif.lock +1 -11
- package/oclif.manifest.json +1875 -2
- package/package.json +2 -2
package/lib/metadata.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { chunk } from './utils.js';
|
|
2
|
+
let orgNamespace;
|
|
3
|
+
export async function getOrgNamespace(conn) {
|
|
4
|
+
if (orgNamespace === undefined) {
|
|
5
|
+
const { records: [{ NamespacePrefix }], } = await conn.query('SELECT NamespacePrefix FROM Organization');
|
|
6
|
+
orgNamespace = NamespacePrefix;
|
|
7
|
+
}
|
|
8
|
+
return orgNamespace;
|
|
9
|
+
}
|
|
10
|
+
export async function completeDefaultNamespace(conn, objectName) {
|
|
11
|
+
const ns = await getOrgNamespace(conn);
|
|
12
|
+
if (!ns)
|
|
13
|
+
return objectName;
|
|
14
|
+
const isArray = Array.isArray(objectName);
|
|
15
|
+
const objectNames = isArray ? objectName : [objectName];
|
|
16
|
+
const results = objectNames.map((name) => {
|
|
17
|
+
if (name.endsWith('__c') && name.split('__').length === 2) {
|
|
18
|
+
return `${ns}__${name}`;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return name;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
return isArray ? results : results[0];
|
|
25
|
+
}
|
|
26
|
+
export function chunkMetadata(type, metadata) {
|
|
27
|
+
// metadata limit: https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_createMetadata.htm
|
|
28
|
+
const size = type === 'CustomMetadata' || type === 'CustomApplication' ? 200 : 10;
|
|
29
|
+
return chunk(Array.isArray(metadata) ? metadata : [metadata], size);
|
|
30
|
+
}
|
|
31
|
+
export function readMetadata(conn, type, fullNames) {
|
|
32
|
+
return Promise.all(chunkMetadata(type, fullNames).map((data) => conn.metadata.read(type, data))).then((a) => a.flat());
|
|
33
|
+
}
|
|
34
|
+
export function updateMetadata(conn, type, metadata) {
|
|
35
|
+
return Promise.all(chunkMetadata(type, metadata).map((data) => conn.metadata.update(type, data))).then((a) => a.flat());
|
|
36
|
+
}
|
|
37
|
+
export function upsertMetadata(conn, type, metadata) {
|
|
38
|
+
return Promise.all(chunkMetadata(type, metadata).map((data) => conn.metadata.upsert(type, data))).then((a) => a.flat());
|
|
39
|
+
}
|
|
40
|
+
export function deleteMetadata(conn, type, fullNames) {
|
|
41
|
+
return Promise.all(chunkMetadata(type, fullNames).map((data) => conn.metadata.delete(type, data))).then((a) => a.flat());
|
|
42
|
+
}
|
|
43
|
+
export async function getCustomFields(conn, object) {
|
|
44
|
+
object = await completeDefaultNamespace(conn, object);
|
|
45
|
+
const [org] = await conn
|
|
46
|
+
.sobject('Organization')
|
|
47
|
+
.select(['IsSandbox', 'TrialExpirationDate']);
|
|
48
|
+
const condition = {
|
|
49
|
+
'EntityDefinition.QualifiedApiName': object,
|
|
50
|
+
ManageableState: 'unmanaged',
|
|
51
|
+
$not: { DeveloperName: { $like: '_tc%' } },
|
|
52
|
+
};
|
|
53
|
+
let fields = [];
|
|
54
|
+
if (org['IsSandbox'] && org['TrialExpirationDate']) {
|
|
55
|
+
// scratch org
|
|
56
|
+
fields = (await conn.tooling
|
|
57
|
+
.sobject('CustomField')
|
|
58
|
+
.find(condition, 'DeveloperName, Metadata'));
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
// Avoid error when including metadata field
|
|
62
|
+
const ids = (await conn.tooling.sobject('CustomField').find(condition, 'Id')).map((r) => r.Id);
|
|
63
|
+
for (const Id of ids) {
|
|
64
|
+
fields = fields.concat(
|
|
65
|
+
// eslint-disable-next-line no-await-in-loop
|
|
66
|
+
(await conn.tooling
|
|
67
|
+
.sobject('CustomField')
|
|
68
|
+
.find({ ...condition, Id }, 'DeveloperName, Metadata')));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return fields
|
|
72
|
+
.filter((r) => !r.DeveloperName.endsWith('_del'))
|
|
73
|
+
.map((r) => ({
|
|
74
|
+
fullName: r.DeveloperName + '__c',
|
|
75
|
+
...r.Metadata,
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
export async function getCustomFieldMap(conn, object) {
|
|
79
|
+
const fields = await getCustomFields(conn, object);
|
|
80
|
+
return new Map(fields.map((f) => [f.fullName, f]));
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,IAAI,YAAoB,CAAC;AACzB,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAgB;IACpD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,EACJ,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,GAC/B,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACjE,YAAY,GAAG,eAAyB,CAAC;IAC3C,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAgB,EAChB,UAA6B;IAE7B,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IAE3B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,OAAO,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,aAAa,CAAI,IAAY,EAAE,QAAiB;IAC9D,mHAAmH;IACnH,MAAM,IAAI,GACR,IAAI,KAAK,gBAAgB,IAAI,IAAI,KAAK,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAgB,EAChB,IAAkB,EAClB,SAA4B;IAE5B,OAAO,OAAO,CAAC,GAAG,CAChB,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAC7E,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,IAAgB,EAChB,IAAY,EACZ,QAA+B;IAE/B,OAAO,OAAO,CAAC,GAAG,CAChB,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACzC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CACjC,CACF,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,IAAgB,EAChB,IAAY,EACZ,QAA+B;IAE/B,OAAO,OAAO,CAAC,GAAG,CAChB,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACzC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CACjC,CACF,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,IAAgB,EAChB,IAAY,EACZ,SAA4B;IAE5B,OAAO,OAAO,CAAC,GAAG,CAChB,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CACjC,CACF,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1B,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAgB,EAChB,MAAc;IAEd,MAAM,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI;SACrB,OAAO,CAAC,cAAc,CAAC;SACvB,MAAM,CAAC,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG;QAChB,mCAAmC,EAAE,MAAM;QAC3C,eAAe,EAAE,WAAW;QAC5B,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;KAC3C,CAAC;IAEF,IAAI,MAAM,GAAyB,EAAE,CAAC;IACtC,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACnD,cAAc;QACd,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO;aACzB,OAAO,CAAC,aAAa,CAAC;aACtB,IAAI,CACH,SAAS,EACT,yBAAyB,CAC1B,CAAoC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,4CAA4C;QAC5C,MAAM,GAAG,GAAG,CACV,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAChE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,GAAG,MAAM,CAAC,MAAM;YACpB,4CAA4C;YAC5C,CAAC,MAAM,IAAI,CAAC,OAAO;iBAChB,OAAO,CAAC,aAAa,CAAC;iBACtB,IAAI,CACH,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,EACpB,yBAAyB,CAC1B,CAAkC,CACtC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SAChD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE,CAAC,CAAC,aAAa,GAAG,KAAK;QACjC,GAAG,CAAC,CAAC,QAAQ;KACd,CAAC,CAAC,CAAC;AACR,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAgB,EAChB,MAAc;IAEd,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnD,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC"}
|
package/lib/server.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import open, { apps } from 'open';
|
|
3
|
+
import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
|
|
4
|
+
import { Messages } from '@salesforce/core';
|
|
5
|
+
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
6
|
+
const messages = Messages.loadMessages('@kitalive/sfdx-plugin', 'server');
|
|
7
|
+
export class ServerCommand extends SfCommand {
|
|
8
|
+
static flags = {
|
|
9
|
+
browser: Flags.option({
|
|
10
|
+
summary: messages.getMessage('flags.browser.summary'),
|
|
11
|
+
char: 'b',
|
|
12
|
+
options: ['chrome', 'firefox', 'edge'],
|
|
13
|
+
})(),
|
|
14
|
+
port: Flags.integer({
|
|
15
|
+
summary: messages.getMessage('flags.port.summary'),
|
|
16
|
+
char: 'p',
|
|
17
|
+
default: 3000,
|
|
18
|
+
}),
|
|
19
|
+
'target-org': Flags.requiredOrg(),
|
|
20
|
+
'api-version': Flags.orgApiVersion(),
|
|
21
|
+
};
|
|
22
|
+
serve(options, callback) {
|
|
23
|
+
const app = express();
|
|
24
|
+
app.use(express.json());
|
|
25
|
+
callback(app);
|
|
26
|
+
app.post('/quit', () => process.exit(0));
|
|
27
|
+
app.listen(options.port, 'localhost', async () => {
|
|
28
|
+
const name = apps[options.browser];
|
|
29
|
+
this.log(`Listening on port ${options.port}`);
|
|
30
|
+
this.log('Use Ctrl-C to stop');
|
|
31
|
+
await open(`http://localhost:${options.port}`, { app: { name } });
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
exit(code = 0) {
|
|
35
|
+
if (code === 130) {
|
|
36
|
+
process.exit(0);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
super.exit(code);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;AAE1E,MAAM,OAAgB,aAAc,SAAQ,SAAe;IAClD,MAAM,CAAU,KAAK,GAAG;QAC7B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC;YACrD,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC;SACvC,CAAC,EAAE;QACJ,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;YAClB,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC;YAClD,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,IAAI;SACd,CAAC;QACF,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE;QACjC,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE;KACrC,CAAC;IAEK,KAAK,CACV,OAGC,EACD,QAA2C;QAE3C,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACxB,QAAQ,CAAC,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAA4B,CAAC,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAC/B,MAAM,IAAI,CAAC,oBAAoB,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,IAAI,CAAC,IAAI,GAAG,CAAC;QAClB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC"}
|
package/lib/types.js
ADDED
package/lib/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/lib/utils.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { pipeline } from 'node:stream';
|
|
3
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
4
|
+
import * as csv from 'fast-csv';
|
|
5
|
+
import iconv from 'iconv-lite';
|
|
6
|
+
export function getScriptDir(url) {
|
|
7
|
+
return path.dirname(fileURLToPath(url));
|
|
8
|
+
}
|
|
9
|
+
export function chunk(array, size) {
|
|
10
|
+
const result = [];
|
|
11
|
+
for (let i = 0, l = array.length; i < l; i += size) {
|
|
12
|
+
result.push(array.slice(i, i + size));
|
|
13
|
+
}
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
export function* rangeGenerator(from, to) {
|
|
17
|
+
for (let i = from; i <= to; i++) {
|
|
18
|
+
yield i;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function range(from, to) {
|
|
22
|
+
return Array.from(rangeGenerator(from, to));
|
|
23
|
+
}
|
|
24
|
+
export function parseCsv(input, options) {
|
|
25
|
+
const { encoding, delimiter, quote, skiplines, trim, mapping, convert } = options ?? {};
|
|
26
|
+
if (!input)
|
|
27
|
+
throw new Error('csv input is required');
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
try {
|
|
30
|
+
const mapper = mapping ? columnMapper(mapping) : undefined;
|
|
31
|
+
let lines = 2;
|
|
32
|
+
const rows = [];
|
|
33
|
+
const parser = csv
|
|
34
|
+
.parse({
|
|
35
|
+
headers: true,
|
|
36
|
+
ignoreEmpty: true,
|
|
37
|
+
delimiter: delimiter === '\\t' ? '\t' : delimiter ?? ',',
|
|
38
|
+
quote: quote ?? '"',
|
|
39
|
+
skipLines: skiplines,
|
|
40
|
+
trim,
|
|
41
|
+
})
|
|
42
|
+
.on('data', (row) => {
|
|
43
|
+
try {
|
|
44
|
+
if (mapper)
|
|
45
|
+
row = mapper(row);
|
|
46
|
+
const r = convert ? convert(row) : row;
|
|
47
|
+
if (r)
|
|
48
|
+
rows.push(r);
|
|
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
|
+
pipeline(input, parser, callback);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
pipeline(input, iconv.decodeStream(encoding), parser, callback);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
reject(e);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
export async function loadScript(file) {
|
|
69
|
+
let script;
|
|
70
|
+
try {
|
|
71
|
+
script = (await import(pathToFileURL(file).href));
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
throw new Error(e.stack);
|
|
75
|
+
}
|
|
76
|
+
if (!script.convert)
|
|
77
|
+
throw new Error('function convert is not exported');
|
|
78
|
+
return script;
|
|
79
|
+
}
|
|
80
|
+
export function columnMapper(mapping) {
|
|
81
|
+
const keys = Object.keys(mapping);
|
|
82
|
+
return (row) => {
|
|
83
|
+
const result = {};
|
|
84
|
+
for (const to of keys) {
|
|
85
|
+
const from = mapping[to];
|
|
86
|
+
if (!(from in row))
|
|
87
|
+
throw new Error(`The column '${from}' is not found`);
|
|
88
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
89
|
+
result[to] = row[from];
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=utils.js.map
|
package/lib/utils.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,10 +8,18 @@ Bulk delete records by SOQL select query.
|
|
|
8
8
|
|
|
9
9
|
<%= config.bin %> <%= command.id %> -q "SELECT Id FROM Opportunity WHERE CloseDate < LAST_N_YEARS:2"
|
|
10
10
|
|
|
11
|
+
- Delete Opportunity records by SOQL file:
|
|
12
|
+
|
|
13
|
+
<%= config.bin %> <%= command.id %> --query-file ./path/to/Opportunity.soql
|
|
14
|
+
|
|
11
15
|
# flags.query.summary
|
|
12
16
|
|
|
13
17
|
SOQL query to delete
|
|
14
18
|
|
|
19
|
+
# flags.query-file.summary
|
|
20
|
+
|
|
21
|
+
SOQL query file to delete
|
|
22
|
+
|
|
15
23
|
# flags.hard.summary
|
|
16
24
|
|
|
17
25
|
Perform a hard delete
|
|
@@ -8,18 +8,50 @@ Bulk query records.
|
|
|
8
8
|
|
|
9
9
|
<%= config.bin %> <%= command.id %> -q "SELECT Id, Name FROM Account" -f ./path/to/Account.csv
|
|
10
10
|
|
|
11
|
+
- Query Account records from SOQL file:
|
|
12
|
+
|
|
13
|
+
<%= config.bin %> <%= command.id %> --query-file ./path/to/Account.soql -f ./path/to/Account.csv
|
|
14
|
+
|
|
15
|
+
- Query Account records with object field labels:
|
|
16
|
+
|
|
17
|
+
<%= config.bin %> <%= command.id %> -q "SELECT Id, Name FROM Account" --object-field-label
|
|
18
|
+
|
|
19
|
+
- Query Account records with custom field label mapping:
|
|
20
|
+
|
|
21
|
+
<%= config.bin %> <%= command.id %> -q "SELECT Id, Name FROM Account" --field-label-mapping ./path/to/field-label-mapping.json
|
|
22
|
+
|
|
11
23
|
# flags.query.summary
|
|
12
24
|
|
|
13
25
|
SOQL query to export
|
|
14
26
|
|
|
27
|
+
# flags.query-file.summary
|
|
28
|
+
|
|
29
|
+
SOQL query file to export
|
|
30
|
+
|
|
15
31
|
# flags.csv-file.summary
|
|
16
32
|
|
|
17
33
|
[default: standard output] Output csv file
|
|
18
34
|
|
|
35
|
+
# flags.object-field-label.summary
|
|
36
|
+
|
|
37
|
+
Output field names with object field labels
|
|
38
|
+
|
|
39
|
+
# flags.field-label-mapping.summary
|
|
40
|
+
|
|
41
|
+
JSON file that maps field API names to output field names
|
|
42
|
+
|
|
19
43
|
# flags.all.summary
|
|
20
44
|
|
|
21
45
|
include deleted or archived records
|
|
22
46
|
|
|
47
|
+
# errors.invalidFieldLabelMapping
|
|
48
|
+
|
|
49
|
+
Invalid field label mapping file: %s
|
|
50
|
+
|
|
51
|
+
# errors.duplicatedFieldLabel
|
|
52
|
+
|
|
53
|
+
Duplicated output field names: %s
|
|
54
|
+
|
|
23
55
|
# flags.wait.summary
|
|
24
56
|
|
|
25
57
|
The number of minutes to wait for the command to complete before displaying the results
|
package/oclif.lock
CHANGED
|
@@ -1915,23 +1915,13 @@
|
|
|
1915
1915
|
resolved "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz"
|
|
1916
1916
|
integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==
|
|
1917
1917
|
|
|
1918
|
-
"@sinonjs/commons@^1.6.0":
|
|
1918
|
+
"@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.8.1":
|
|
1919
1919
|
version "1.8.6"
|
|
1920
1920
|
resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz"
|
|
1921
1921
|
integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==
|
|
1922
1922
|
dependencies:
|
|
1923
1923
|
type-detect "4.0.8"
|
|
1924
1924
|
|
|
1925
|
-
"@sinonjs/commons@^1.7.0":
|
|
1926
|
-
version "2.0.0"
|
|
1927
|
-
dependencies:
|
|
1928
|
-
type-detect "4.0.8"
|
|
1929
|
-
|
|
1930
|
-
"@sinonjs/commons@^1.8.1":
|
|
1931
|
-
version "3.0.0"
|
|
1932
|
-
dependencies:
|
|
1933
|
-
type-detect "4.0.8"
|
|
1934
|
-
|
|
1935
1925
|
"@sinonjs/commons@^2.0.0":
|
|
1936
1926
|
version "2.0.0"
|
|
1937
1927
|
resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz"
|