@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.
Files changed (44) hide show
  1. package/README.md +48 -27
  2. package/lib/bulk.js +220 -0
  3. package/lib/bulk.js.map +1 -0
  4. package/lib/commands/kit/data/bulk/delete.js +113 -0
  5. package/lib/commands/kit/data/bulk/delete.js.map +1 -0
  6. package/lib/commands/kit/data/bulk/insert.js +7 -0
  7. package/lib/commands/kit/data/bulk/insert.js.map +1 -0
  8. package/lib/commands/kit/data/bulk/query.js +166 -0
  9. package/lib/commands/kit/data/bulk/query.js.map +1 -0
  10. package/lib/commands/kit/data/bulk/update.js +7 -0
  11. package/lib/commands/kit/data/bulk/update.js.map +1 -0
  12. package/lib/commands/kit/data/bulk/upsert.js +22 -0
  13. package/lib/commands/kit/data/bulk/upsert.js.map +1 -0
  14. package/lib/commands/kit/data/csv/convert.js +160 -0
  15. package/lib/commands/kit/data/csv/convert.js.map +1 -0
  16. package/lib/commands/kit/graphql/editor.js +37 -0
  17. package/lib/commands/kit/graphql/editor.js.map +1 -0
  18. package/lib/commands/kit/layout/assignments/deploy.js +35 -0
  19. package/lib/commands/kit/layout/assignments/deploy.js.map +1 -0
  20. package/lib/commands/kit/layout/assignments/retrieve.js +124 -0
  21. package/lib/commands/kit/layout/assignments/retrieve.js.map +1 -0
  22. package/lib/commands/kit/metadata/dependencies.js +182 -0
  23. package/lib/commands/kit/metadata/dependencies.js.map +1 -0
  24. package/lib/commands/kit/object/fields/describe.js +84 -0
  25. package/lib/commands/kit/object/fields/describe.js.map +1 -0
  26. package/lib/commands/kit/object/fields/setup.js +261 -0
  27. package/lib/commands/kit/object/fields/setup.js.map +1 -0
  28. package/lib/commands/kit/script/execute.js +72 -0
  29. package/lib/commands/kit/script/execute.js.map +1 -0
  30. package/lib/index.js +2 -0
  31. package/lib/index.js.map +1 -0
  32. package/lib/metadata.js +82 -0
  33. package/lib/metadata.js.map +1 -0
  34. package/lib/server.js +43 -0
  35. package/lib/server.js.map +1 -0
  36. package/lib/types.js +2 -0
  37. package/lib/types.js.map +1 -0
  38. package/lib/utils.js +94 -0
  39. package/lib/utils.js.map +1 -0
  40. package/messages/data.bulk.delete.md +8 -0
  41. package/messages/data.bulk.query.md +32 -0
  42. package/oclif.lock +1 -11
  43. package/oclif.manifest.json +1875 -2
  44. package/package.json +2 -2
@@ -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":"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"}
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
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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
@@ -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"