@salesforce/plugin-sobject 0.0.8

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 (48) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/LICENSE.txt +12 -0
  3. package/README.md +282 -0
  4. package/lib/commands/generate/metadata/field.d.ts +25 -0
  5. package/lib/commands/generate/metadata/field.js +242 -0
  6. package/lib/commands/generate/metadata/field.js.map +1 -0
  7. package/lib/commands/generate/metadata/platformevent.d.ts +18 -0
  8. package/lib/commands/generate/metadata/platformevent.js +66 -0
  9. package/lib/commands/generate/metadata/platformevent.js.map +1 -0
  10. package/lib/commands/generate/metadata/sobject.d.ts +19 -0
  11. package/lib/commands/generate/metadata/sobject.js +105 -0
  12. package/lib/commands/generate/metadata/sobject.js.map +1 -0
  13. package/lib/commands/generate/metadata/tab.d.ts +19 -0
  14. package/lib/commands/generate/metadata/tab.js +177 -0
  15. package/lib/commands/generate/metadata/tab.js.map +1 -0
  16. package/lib/index.d.ts +2 -0
  17. package/lib/index.js +9 -0
  18. package/lib/index.js.map +1 -0
  19. package/lib/shared/convert.d.ts +11 -0
  20. package/lib/shared/convert.js +38 -0
  21. package/lib/shared/convert.js.map +1 -0
  22. package/lib/shared/flags.d.ts +15 -0
  23. package/lib/shared/flags.js +58 -0
  24. package/lib/shared/flags.js.map +1 -0
  25. package/lib/shared/fs.d.ts +22 -0
  26. package/lib/shared/fs.js +59 -0
  27. package/lib/shared/fs.js.map +1 -0
  28. package/lib/shared/prompts/prompts.d.ts +28 -0
  29. package/lib/shared/prompts/prompts.js +141 -0
  30. package/lib/shared/prompts/prompts.js.map +1 -0
  31. package/lib/shared/prompts/relationshipField.d.ts +9 -0
  32. package/lib/shared/prompts/relationshipField.js +86 -0
  33. package/lib/shared/prompts/relationshipField.js.map +1 -0
  34. package/lib/shared/types.d.ts +25 -0
  35. package/lib/shared/types.js +9 -0
  36. package/lib/shared/types.js.map +1 -0
  37. package/messages/flags.md +11 -0
  38. package/messages/generate.event.md +21 -0
  39. package/messages/generate.field.md +81 -0
  40. package/messages/generate.object.md +58 -0
  41. package/messages/generate.tab.md +39 -0
  42. package/messages/prompts.relationship.md +27 -0
  43. package/messages/prompts.shared.md +51 -0
  44. package/oclif.manifest.json +1 -0
  45. package/package.json +131 -0
  46. package/schemas/generate-metadata-field.json +59 -0
  47. package/schemas/generate-metadata-sobject.json +85 -0
  48. package/schemas/generate-metadata-tab.json +28 -0
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2021, salesforce.com, inc.
4
+ * All rights reserved.
5
+ * Licensed under the BSD 3-Clause license.
6
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
7
+ */
8
+ var _a;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const sf_plugins_core_1 = require("@salesforce/sf-plugins-core");
11
+ const core_1 = require("@salesforce/core");
12
+ const prompts_1 = require("../../../shared/prompts/prompts");
13
+ const fs_1 = require("../../../shared/fs");
14
+ const flags_1 = require("../../../shared/flags");
15
+ core_1.Messages.importMessagesDirectory(__dirname);
16
+ const messages = core_1.Messages.load('@salesforce/plugin-sobject', 'generate.event', [
17
+ 'examples',
18
+ 'summary',
19
+ 'description',
20
+ 'flags.label.summary',
21
+ 'prompts.publishBehavior',
22
+ ]);
23
+ class ObjectGenerate extends sf_plugins_core_1.SfCommand {
24
+ async run() {
25
+ const { flags } = await this.parse(ObjectGenerate);
26
+ const responses = await this.prompt([
27
+ await (0, prompts_1.directoryPrompt)(this.project.getPackageDirectories()),
28
+ (0, prompts_1.pluralPrompt)(flags.label),
29
+ (0, prompts_1.apiNamePrompt)(flags.label, 'PlatformEvent'),
30
+ prompts_1.descriptionPrompt,
31
+ {
32
+ type: 'list',
33
+ message: messages.getMessage('prompts.publishBehavior'),
34
+ name: 'publishBehavior',
35
+ choices: ['PublishImmediately', 'PublishAfterCommit'],
36
+ },
37
+ ]);
38
+ const { directory, ...platformEvent } = responses;
39
+ const objectToWrite = {
40
+ ...platformEvent,
41
+ deploymentStatus: 'Deployed',
42
+ eventType: 'HighVolume',
43
+ label: flags.label,
44
+ };
45
+ this.styledJSON(objectToWrite);
46
+ const writePath = await (0, fs_1.writeObjectFile)(directory, objectToWrite);
47
+ return { object: objectToWrite, path: writePath };
48
+ }
49
+ }
50
+ exports.default = ObjectGenerate;
51
+ _a = ObjectGenerate;
52
+ ObjectGenerate.summary = messages.getMessage('summary');
53
+ ObjectGenerate.description = messages.getMessage('description');
54
+ ObjectGenerate.examples = messages.getMessages('examples');
55
+ ObjectGenerate.requiresProject = true;
56
+ ObjectGenerate.enableJsonFlag = false;
57
+ ObjectGenerate.state = 'beta';
58
+ ObjectGenerate.flags = {
59
+ label: sf_plugins_core_1.Flags.string({
60
+ char: 'l',
61
+ summary: messages.getMessage('flags.label.summary'),
62
+ required: true,
63
+ parse: async (label) => (0, flags_1.labelValidation)(label),
64
+ }),
65
+ };
66
+ //# sourceMappingURL=platformevent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platformevent.js","sourceRoot":"","sources":["../../../../src/commands/generate/metadata/platformevent.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,iEAA+D;AAC/D,2CAA4C;AAE5C,6DAAkH;AAClH,2CAAqD;AAErD,iDAAwD;AAExD,eAAQ,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAC5C,MAAM,QAAQ,GAAG,eAAQ,CAAC,IAAI,CAAC,4BAA4B,EAAE,gBAAgB,EAAE;IAC7E,UAAU;IACV,SAAS;IACT,aAAa;IACb,qBAAqB;IACrB,yBAAyB;CAC1B,CAAC,CAAC;AAOH,MAAqB,cAAe,SAAQ,2BAAsC;IAiBzE,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAEnD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAgD;YACjF,MAAM,IAAA,yBAAe,EAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC3D,IAAA,sBAAY,EAAC,KAAK,CAAC,KAAK,CAAC;YACzB,IAAA,uBAAa,EAAC,KAAK,CAAC,KAAK,EAAE,eAAe,CAAC;YAC3C,2BAAiB;YACjB;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,yBAAyB,CAAC;gBACvD,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;aACtD;SACF,CAAC,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,EAAE,GAAG,SAAS,CAAC;QAElD,MAAM,aAAa,GAA0C;YAC3D,GAAG,aAAa;YAChB,gBAAgB,EAAE,UAAU;YAC5B,SAAS,EAAE,YAAY;YACvB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,aAAwB,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,MAAM,IAAA,oBAAe,EAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAClE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACpD,CAAC;;AA5CH,iCA6CC;;AA5CwB,sBAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAE,CAAA;AACzC,0BAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAE,CAAA;AACjD,uBAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAE,CAAA;AAC5C,8BAAe,GAAG,IAAK,CAAA;AAChC,6BAAc,GAAG,KAAM,CAAA;AACvB,oBAAK,GAAG,MAAO,CAAA;AAEf,oBAAK,GAAG;IACpB,KAAK,EAAE,uBAAK,CAAC,MAAM,CAAC;QAClB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC;QACnD,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,KAAK,CAAC;KAC/C,CAAC;CACF,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { SfCommand } from '@salesforce/sf-plugins-core';
2
+ import { SaveableCustomObject } from '../../../shared/types';
3
+ export declare type CustomObjectGenerateResult = {
4
+ object: SaveableCustomObject;
5
+ path: string;
6
+ };
7
+ export default class ObjectGenerate extends SfCommand<CustomObjectGenerateResult> {
8
+ static readonly summary: string;
9
+ static readonly description: string;
10
+ static readonly examples: string[];
11
+ static readonly requiresProject = true;
12
+ static enableJsonFlag: boolean;
13
+ static state: string;
14
+ static flags: {
15
+ label: import("@oclif/core/lib/interfaces").OptionFlag<string>;
16
+ 'use-default-features': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
17
+ };
18
+ run(): Promise<CustomObjectGenerateResult>;
19
+ }
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ /*
5
+ * Copyright (c) 2021, salesforce.com, inc.
6
+ * All rights reserved.
7
+ * Licensed under the BSD 3-Clause license.
8
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
9
+ */
10
+ const path_1 = require("path");
11
+ const sf_plugins_core_1 = require("@salesforce/sf-plugins-core");
12
+ const core_1 = require("@salesforce/core");
13
+ const change_case_1 = require("change-case");
14
+ const prompts_1 = require("../../../shared/prompts/prompts");
15
+ const fs_1 = require("../../../shared/fs");
16
+ const flags_1 = require("../../../shared/flags");
17
+ core_1.Messages.importMessagesDirectory(__dirname);
18
+ const messages = core_1.Messages.load('@salesforce/plugin-sobject', 'generate.object', [
19
+ 'examples',
20
+ 'summary',
21
+ 'description',
22
+ 'flags.label.summary',
23
+ 'flags.use-default-features.summary',
24
+ 'flags.use-default-features.description',
25
+ 'prompts.sharingModel',
26
+ 'success',
27
+ 'success.advice',
28
+ 'success.field',
29
+ ]);
30
+ const defaultFeatures = {
31
+ enableHistory: true,
32
+ enableActivities: true,
33
+ enableSearch: true,
34
+ enableFeeds: true,
35
+ enableReports: true,
36
+ enableBulkApi: true,
37
+ enableSharing: true,
38
+ enableStreamingApi: true,
39
+ };
40
+ class ObjectGenerate extends sf_plugins_core_1.SfCommand {
41
+ async run() {
42
+ const { flags } = await this.parse(ObjectGenerate);
43
+ const responses = await this.prompt([
44
+ await (0, prompts_1.directoryPrompt)(this.project.getPackageDirectories()),
45
+ (0, prompts_1.pluralPrompt)(flags.label),
46
+ (0, prompts_1.apiNamePrompt)(flags.label, 'CustomObject'),
47
+ prompts_1.descriptionPrompt,
48
+ ...(0, prompts_1.namePrompts)(flags.label),
49
+ // transform the default features into confirm prompts
50
+ ...Object.keys(defaultFeatures).map((name) => ({
51
+ type: 'confirm',
52
+ name,
53
+ message: (0, change_case_1.sentenceCase)(name).replace('Api', 'API'),
54
+ })),
55
+ {
56
+ type: 'list',
57
+ choices: ['ReadWrite', 'Read', 'Private'],
58
+ message: messages.getMessage('prompts.sharingModel'),
59
+ name: 'sharingModel',
60
+ },
61
+ ], flags['use-default-features'] ? defaultFeatures : {});
62
+ const { nameFieldType, nameFieldLabel, autoNumberFormat, directory, ...customObject } = responses;
63
+ const resultsObject = {
64
+ ...customObject,
65
+ nameField: {
66
+ ...{
67
+ type: nameFieldType,
68
+ label: nameFieldLabel,
69
+ },
70
+ ...(responses.nameFieldType === 'AutoNumber' ? { displayFormat: autoNumberFormat } : {}),
71
+ },
72
+ deploymentStatus: 'Deployed',
73
+ label: flags.label,
74
+ };
75
+ this.styledJSON(resultsObject);
76
+ const writePath = await (0, fs_1.writeObjectFile)(directory, resultsObject);
77
+ this.logSuccess(messages.getMessage('success', [writePath]));
78
+ this.info(messages.getMessage('success.field', [(0, path_1.dirname)(writePath)]));
79
+ this.log();
80
+ this.info(messages.getMessage('success.advice'));
81
+ return { object: resultsObject, path: writePath };
82
+ }
83
+ }
84
+ exports.default = ObjectGenerate;
85
+ _a = ObjectGenerate;
86
+ ObjectGenerate.summary = messages.getMessage('summary');
87
+ ObjectGenerate.description = messages.getMessage('description');
88
+ ObjectGenerate.examples = messages.getMessages('examples');
89
+ ObjectGenerate.requiresProject = true;
90
+ ObjectGenerate.enableJsonFlag = false;
91
+ ObjectGenerate.state = 'beta';
92
+ ObjectGenerate.flags = {
93
+ label: sf_plugins_core_1.Flags.string({
94
+ char: 'l',
95
+ summary: messages.getMessage('flags.label.summary'),
96
+ required: true,
97
+ parse: async (label) => (0, flags_1.labelValidation)(label),
98
+ }),
99
+ 'use-default-features': sf_plugins_core_1.Flags.boolean({
100
+ char: 'f',
101
+ summary: messages.getMessage('flags.use-default-features.summary'),
102
+ description: messages.getMessage('flags.use-default-features.description'),
103
+ }),
104
+ };
105
+ //# sourceMappingURL=sobject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sobject.js","sourceRoot":"","sources":["../../../../src/commands/generate/metadata/sobject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { SfCommand } from '@salesforce/sf-plugins-core';
2
+ import { CustomTab } from 'jsforce/api/metadata';
3
+ export declare type GenerateTabResult = {
4
+ tab: Pick<CustomTab, 'customObject' | 'motif'>;
5
+ path: string;
6
+ };
7
+ export default class GenerateTab extends SfCommand<GenerateTabResult> {
8
+ static summary: string;
9
+ static description: string;
10
+ static examples: string[];
11
+ static readonly requiresProject = true;
12
+ static state: string;
13
+ static flags: {
14
+ object: import("@oclif/core/lib/interfaces").OptionFlag<string>;
15
+ directory: import("@oclif/core/lib/interfaces").OptionFlag<string>;
16
+ icon: import("@oclif/core/lib/interfaces").OptionFlag<number>;
17
+ };
18
+ run(): Promise<GenerateTabResult>;
19
+ }
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2022, salesforce.com, inc.
4
+ * All rights reserved.
5
+ * Licensed under the BSD 3-Clause license.
6
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
7
+ */
8
+ var _a;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const fs = require("fs");
11
+ const path = require("path");
12
+ const sf_plugins_core_1 = require("@salesforce/sf-plugins-core");
13
+ const core_1 = require("@salesforce/core");
14
+ const flags_1 = require("../../../shared/flags");
15
+ const convert_1 = require("../../../shared/convert");
16
+ core_1.Messages.importMessagesDirectory(__dirname);
17
+ const messages = core_1.Messages.load('@salesforce/plugin-sobject', 'generate.tab', [
18
+ 'summary',
19
+ 'description',
20
+ 'examples',
21
+ 'flags.object.summary',
22
+ 'flags.object.description',
23
+ 'flags.directory.summary',
24
+ 'flags.icon.summary',
25
+ 'flags.icon.description',
26
+ 'success',
27
+ ]);
28
+ class GenerateTab extends sf_plugins_core_1.SfCommand {
29
+ async run() {
30
+ const { flags } = await this.parse(GenerateTab);
31
+ const tabPath = path.join(flags.directory, `${flags.object}.tab-meta.xml`);
32
+ const tab = {
33
+ customObject: true,
34
+ motif: tabDefs.find((tabDef) => tabDef.includes(`Custom${flags.icon}:`)),
35
+ };
36
+ await fs.promises.writeFile(tabPath, (0, convert_1.convertJsonToXml)({ json: tab, type: 'CustomTab' }));
37
+ this.logSuccess(messages.getMessage('success', [tabPath]));
38
+ return {
39
+ tab,
40
+ path: tabPath,
41
+ };
42
+ }
43
+ }
44
+ exports.default = GenerateTab;
45
+ _a = GenerateTab;
46
+ GenerateTab.summary = messages.getMessage('summary');
47
+ GenerateTab.description = messages.getMessage('description');
48
+ GenerateTab.examples = messages.getMessages('examples');
49
+ GenerateTab.requiresProject = true;
50
+ GenerateTab.state = 'beta';
51
+ GenerateTab.flags = {
52
+ object: sf_plugins_core_1.Flags.string({
53
+ summary: messages.getMessage('flags.object.summary'),
54
+ description: messages.getMessage('flags.object.description'),
55
+ char: 'o',
56
+ required: true,
57
+ }),
58
+ directory: sf_plugins_core_1.Flags.directory({
59
+ summary: messages.getMessage('flags.directory.summary'),
60
+ char: 'd',
61
+ required: true,
62
+ exists: true,
63
+ parse: async (input) => (0, flags_1.isTabsFolder)(input),
64
+ }),
65
+ icon: sf_plugins_core_1.Flags.integer({
66
+ char: 'i',
67
+ required: true,
68
+ min: 1,
69
+ max: 100,
70
+ default: 1,
71
+ summary: messages.getMessage('flags.icon.summary'),
72
+ description: messages.getMessage('flags.icon.description'),
73
+ }),
74
+ };
75
+ const tabDefs = [
76
+ 'Custom20: Airplane',
77
+ 'Custom25: Alarm clock',
78
+ 'Custom51: Apple',
79
+ 'Custom52: Balls',
80
+ 'Custom16: Bank',
81
+ 'Custom53: Bell',
82
+ 'Custom50: Big top',
83
+ 'Custom54: Boat',
84
+ 'Custom55: Books',
85
+ 'Custom56: Bottle',
86
+ 'Custom13: Box',
87
+ 'Custom37: Bridge',
88
+ 'Custom24: Building',
89
+ 'Custom57: Building Block',
90
+ 'Custom58: Caduceus',
91
+ 'Custom38: Camera',
92
+ 'Custom59: Can',
93
+ 'Custom31: Car',
94
+ 'Custom61: Castle',
95
+ 'Custom49: CD/DVD',
96
+ 'Custom28: Cell phone',
97
+ 'Custom62: Chalkboard',
98
+ 'Custom47: Knight',
99
+ 'Custom63: Chip',
100
+ 'Custom12: Circle',
101
+ 'Custom64: Compass',
102
+ 'Custom21: Computer',
103
+ 'Custom40: Credit card',
104
+ 'Custom99: TV CRT',
105
+ 'Custom65: Cup',
106
+ 'Custom33: Desk',
107
+ 'Custom8: Diamond',
108
+ 'Custom66: Dice',
109
+ 'Custom32: Factory',
110
+ 'Custom2: Fan',
111
+ 'Custom26: Flag',
112
+ 'Custom18: Form',
113
+ 'Custom67: Gears',
114
+ 'Custom68: Globe',
115
+ 'Custom69: Guitar',
116
+ 'Custom44: Hammer',
117
+ 'Custom14: Hands',
118
+ 'Custom70: Handsaw',
119
+ 'Custom71: Headset',
120
+ 'Custom1: Heart',
121
+ 'Custom72: Helicopter',
122
+ 'Custom4: Hexagon ',
123
+ 'Custom73: Highway Sign',
124
+ 'Custom74: Hot Air Balloon',
125
+ 'Custom34: Insect',
126
+ 'Custom75: IP Phone',
127
+ 'Custom43: Jewel',
128
+ 'Custom76: Keys',
129
+ 'Custom27: Laptop',
130
+ 'Custom5: Leaf',
131
+ 'Custom9: Lightning',
132
+ 'Custom77: Locked',
133
+ 'Custom23: Envelope',
134
+ 'Custom78: Map',
135
+ 'Custom79: Measuring Tape',
136
+ 'Custom35: Microphone',
137
+ 'Custom10: Moon',
138
+ 'Custom80: Motorcycle',
139
+ 'Custom81: Musical Note',
140
+ 'Custom29: PDA',
141
+ 'Custom83: Pencil',
142
+ 'Custom15: People',
143
+ 'Custom22: Telephone',
144
+ 'Custom46: Stamp',
145
+ 'Custom84: Presenter',
146
+ 'Custom30: Radar dish',
147
+ 'Custom85: Real Estate Sign',
148
+ 'Custom86: Red Cross',
149
+ 'Custom17: Sack',
150
+ 'Custom87: Safe',
151
+ 'Custom88: Sailboat',
152
+ 'Custom89: Saxophone',
153
+ 'Custom90: Scales',
154
+ 'Custom91: Shield',
155
+ 'Custom92: Ship',
156
+ 'Custom93: Shopping Cart',
157
+ 'Custom7: Square',
158
+ 'Custom41: Cash',
159
+ 'Custom11: Star',
160
+ 'Custom94: Stethoscope',
161
+ 'Custom95: Stopwatch',
162
+ 'Custom96: Street Sign',
163
+ 'Custom3: Sun',
164
+ 'Custom39: Telescope',
165
+ 'Custom97: Thermometer',
166
+ 'Custom45: Ticket',
167
+ 'Custom36: Train',
168
+ 'Custom42: Treasure chest',
169
+ 'Custom6: Triangle',
170
+ 'Custom48: Trophy',
171
+ 'Custom98: Truck',
172
+ 'Custom100: TV Widescreen',
173
+ 'Custom60: Umbrella',
174
+ 'Custom82: Whistle',
175
+ 'Custom19: Wrench',
176
+ ];
177
+ //# sourceMappingURL=tab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab.js","sourceRoot":"","sources":["../../../../src/commands/generate/metadata/tab.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ declare const _default: {};
2
+ export = _default;
package/lib/index.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2021, salesforce.com, inc.
4
+ * All rights reserved.
5
+ * Licensed under the BSD 3-Clause license.
6
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
7
+ */
8
+ module.exports = {};
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,iBAAS,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { IOptions } from 'js2xmlparser/lib/options';
2
+ import { CustomObject, CustomField } from 'jsforce/api/metadata';
3
+ import { JsonMap } from '@salesforce/ts-types';
4
+ interface WriteJSONasXMLInputs {
5
+ json: CustomField | CustomObject | JsonMap;
6
+ type: string;
7
+ options?: IOptions;
8
+ }
9
+ declare const convertJsonToXml: ({ json, type, options }: WriteJSONasXMLInputs) => string;
10
+ declare const parseXml: <T>(fileString: string, mainNodeName: string) => T;
11
+ export { convertJsonToXml, parseXml };
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseXml = exports.convertJsonToXml = void 0;
4
+ /*
5
+ * Copyright (c) 2020, salesforce.com, inc.
6
+ * All rights reserved.
7
+ * Licensed under the BSD 3-Clause license.
8
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
9
+ */
10
+ const jsToXml = require("js2xmlparser");
11
+ const fast_xml_parser_1 = require("fast-xml-parser");
12
+ const standardOptions = {
13
+ declaration: {
14
+ include: true,
15
+ encoding: 'UTF-8',
16
+ version: '1.0',
17
+ },
18
+ format: {
19
+ doubleQuotes: true,
20
+ },
21
+ };
22
+ const convertJsonToXml = ({ json, type, options = standardOptions }) => jsToXml.parse(type, fixExistingDollarSign(json), options);
23
+ exports.convertJsonToXml = convertJsonToXml;
24
+ const fixExistingDollarSign = (existing) => {
25
+ const existingCopy = { ...existing };
26
+ if ('$' in existingCopy) {
27
+ const temp = existingCopy.$;
28
+ delete existingCopy.$;
29
+ existingCopy['@'] = temp;
30
+ }
31
+ return existingCopy;
32
+ };
33
+ const parseXml = (fileString, mainNodeName) => {
34
+ const parser = new fast_xml_parser_1.XMLParser();
35
+ return parser.parse(fileString)[mainNodeName];
36
+ };
37
+ exports.parseXml = parseXml;
38
+ //# sourceMappingURL=convert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/shared/convert.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,wCAAwC;AACxC,qDAA4C;AAK5C,MAAM,eAAe,GAAa;IAChC,WAAW,EAAE;QACX,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,KAAK;KACf;IACD,MAAM,EAAE;QACN,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAQF,MAAM,gBAAgB,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,GAAG,eAAe,EAAwB,EAAU,EAAE,CACnG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAiBnD,4CAAgB;AAfzB,MAAM,qBAAqB,GAAG,CAAyC,QAAW,EAAK,EAAE;IACvF,MAAM,YAAY,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;IACrC,IAAI,GAAG,IAAI,YAAY,EAAE;QACvB,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC;QAC5B,OAAO,YAAY,CAAC,CAAC,CAAC;QACtB,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KAC1B;IACD,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAI,UAAkB,EAAE,YAAoB,EAAK,EAAE;IAClE,MAAM,MAAM,GAAG,IAAI,2BAAS,EAAE,CAAC;IAC/B,OAAQ,MAAM,CAAC,KAAK,CAAC,UAAU,CAAqC,CAAC,YAAY,CAAC,CAAC;AACrF,CAAC,CAAC;AAEyB,4BAAQ"}
@@ -0,0 +1,15 @@
1
+ export declare const labelValidation: (label: string) => Promise<string>;
2
+ /**
3
+ * Validates that a path contains /objects/ and at least one directory beyond that
4
+ *
5
+ * @param path: relative or full path
6
+ * @returns true if valid
7
+ */
8
+ export declare const isObjectsFolder: (path: string) => Promise<string>;
9
+ /**
10
+ * Validates that a path ends in /tabs
11
+ *
12
+ * @param path: relative or full path
13
+ * @returns true if valid
14
+ */
15
+ export declare const isTabsFolder: (path: string) => Promise<string>;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2020, salesforce.com, inc.
4
+ * All rights reserved.
5
+ * Licensed under the BSD 3-Clause license.
6
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.isTabsFolder = exports.isObjectsFolder = exports.labelValidation = void 0;
10
+ const path_1 = require("path");
11
+ const core_1 = require("@salesforce/core");
12
+ core_1.Messages.importMessagesDirectory(__dirname);
13
+ const messages = core_1.Messages.load('@salesforce/plugin-sobject', 'flags', [
14
+ 'error.labelLength',
15
+ 'error.objectDirectory',
16
+ 'error.tabsDirectory',
17
+ ]);
18
+ // eslint-disable-next-line @typescript-eslint/require-await
19
+ const labelValidation = async (label) => {
20
+ if (label.length < 3) {
21
+ throw new core_1.SfError(messages.getMessage('error.labelLength', [label]));
22
+ }
23
+ return label;
24
+ };
25
+ exports.labelValidation = labelValidation;
26
+ /**
27
+ * Validates that a path contains /objects/ and at least one directory beyond that
28
+ *
29
+ * @param path: relative or full path
30
+ * @returns true if valid
31
+ */
32
+ // eslint-disable-next-line @typescript-eslint/require-await
33
+ const isObjectsFolder = async (path) => {
34
+ const pathParts = (0, path_1.resolve)(path.trim()).split(path_1.sep);
35
+ // has /objects/ AND objects is not the last item (there must be some child)
36
+ if (pathParts.includes('objects') && pathParts[pathParts.length - 1] !== 'objects') {
37
+ return path;
38
+ }
39
+ throw new core_1.SfError(messages.getMessage('error.objectDirectory', [path]));
40
+ };
41
+ exports.isObjectsFolder = isObjectsFolder;
42
+ /**
43
+ * Validates that a path ends in /tabs
44
+ *
45
+ * @param path: relative or full path
46
+ * @returns true if valid
47
+ */
48
+ // eslint-disable-next-line @typescript-eslint/require-await
49
+ const isTabsFolder = async (path) => {
50
+ // resolve will remove trailing separator
51
+ const trimmed = (0, path_1.resolve)(path.trim());
52
+ if (trimmed.endsWith('tabs')) {
53
+ return trimmed;
54
+ }
55
+ throw new core_1.SfError(messages.getMessage('error.tabsDirectory', [path]));
56
+ };
57
+ exports.isTabsFolder = isTabsFolder;
58
+ //# sourceMappingURL=flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags.js","sourceRoot":"","sources":["../../src/shared/flags.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,+BAAoC;AACpC,2CAAqD;AAErD,eAAQ,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAC5C,MAAM,QAAQ,GAAG,eAAQ,CAAC,IAAI,CAAC,4BAA4B,EAAE,OAAO,EAAE;IACpE,mBAAmB;IACnB,uBAAuB;IACvB,qBAAqB;CACtB,CAAC,CAAC;AAEH,4DAA4D;AACrD,MAAM,eAAe,GAAG,KAAK,EAAE,KAAa,EAAmB,EAAE;IACtE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,MAAM,IAAI,cAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACtE;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AALW,QAAA,eAAe,mBAK1B;AAEF;;;;;GAKG;AACH,4DAA4D;AACrD,MAAM,eAAe,GAAG,KAAK,EAAE,IAAY,EAAmB,EAAE;IACrE,MAAM,SAAS,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,UAAG,CAAC,CAAC;IAClD,4EAA4E;IAC5E,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE;QAClF,OAAO,IAAI,CAAC;KACb;IACD,MAAM,IAAI,cAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC;AAPW,QAAA,eAAe,mBAO1B;AAEF;;;;;GAKG;AACH,4DAA4D;AACrD,MAAM,YAAY,GAAG,KAAK,EAAE,IAAY,EAAmB,EAAE;IAClE,yCAAyC;IACzC,MAAM,OAAO,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC5B,OAAO,OAAO,CAAC;KAChB;IACD,MAAM,IAAI,cAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC,CAAC;AAPW,QAAA,YAAY,gBAOvB"}
@@ -0,0 +1,22 @@
1
+ import { CustomObject } from 'jsforce/api/metadata';
2
+ import { SaveableCustomObject, SaveablePlatformEvent } from './types';
3
+ /**
4
+ * @param targetPaths typically your pkgDirs or project path
5
+ * @returns directories that end in `/objects/`
6
+ */
7
+ export declare const getDirectoriesThatContainObjects: (targetPaths: string[]) => Promise<string[]>;
8
+ /**
9
+ * @param targetPaths typically your pkgDirs or project path
10
+ * @returns directories that are children of `/objects/` like `force-app/main/default/objects/Foo__c`
11
+ */
12
+ export declare const getObjectDirectories: (targetPaths: string[]) => Promise<string[]>;
13
+ /**
14
+ * @param folder folder path to the object name (ex: `force-app/main/default/objects/Account`)
15
+ * @returns CustomObject in json
16
+ */
17
+ export declare const getObjectXmlByFolderAsJson: (folder: string) => Promise<CustomObject>;
18
+ /**
19
+ *
20
+ * @returns path where the object was written
21
+ */
22
+ export declare const writeObjectFile: (objectDirectory: string, object: SaveablePlatformEvent | SaveableCustomObject) => Promise<string>;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.writeObjectFile = exports.getObjectXmlByFolderAsJson = exports.getObjectDirectories = exports.getDirectoriesThatContainObjects = void 0;
4
+ /*
5
+ * Copyright (c) 2020, salesforce.com, inc.
6
+ * All rights reserved.
7
+ * Licensed under the BSD 3-Clause license.
8
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
9
+ */
10
+ const path = require("path");
11
+ const fs = require("fs");
12
+ const fg = require("fast-glob");
13
+ const convert_1 = require("./convert");
14
+ const getObjectXmlByPathAsJson = async (objectFilePath) => {
15
+ const xml = await fs.promises.readFile(objectFilePath, 'utf8');
16
+ return (0, convert_1.parseXml)(xml, 'CustomObject');
17
+ };
18
+ /** globs don't support windows path, but the input might be */
19
+ const ensurePosixPath = (filePath) => filePath.split(path.sep).join(path.posix.sep);
20
+ /**
21
+ * @param targetPaths typically your pkgDirs or project path
22
+ * @returns directories that end in `/objects/`
23
+ */
24
+ const getDirectoriesThatContainObjects = async (targetPaths) => {
25
+ const globs = targetPaths.map((p) => `${ensurePosixPath(p)}/**/objects/`);
26
+ return (await fg(globs, { onlyDirectories: true })).map((dir) => path.normalize(dir));
27
+ };
28
+ exports.getDirectoriesThatContainObjects = getDirectoriesThatContainObjects;
29
+ /**
30
+ * @param targetPaths typically your pkgDirs or project path
31
+ * @returns directories that are children of `/objects/` like `force-app/main/default/objects/Foo__c`
32
+ */
33
+ const getObjectDirectories = async (targetPaths) => {
34
+ const globs = targetPaths.map((p) => `${ensurePosixPath(p)}/**/objects/*`);
35
+ return (await fg(globs, { onlyDirectories: true })).map((dir) => path.normalize(dir));
36
+ };
37
+ exports.getObjectDirectories = getObjectDirectories;
38
+ /**
39
+ * @param folder folder path to the object name (ex: `force-app/main/default/objects/Account`)
40
+ * @returns CustomObject in json
41
+ */
42
+ const getObjectXmlByFolderAsJson = async (folder) => {
43
+ const globs = `${ensurePosixPath(folder)}/*.object-meta.xml`;
44
+ const [objectMetaPath] = await fg(globs);
45
+ return getObjectXmlByPathAsJson(objectMetaPath);
46
+ };
47
+ exports.getObjectXmlByFolderAsJson = getObjectXmlByFolderAsJson;
48
+ /**
49
+ *
50
+ * @returns path where the object was written
51
+ */
52
+ const writeObjectFile = async (objectDirectory, object) => {
53
+ await fs.promises.mkdir(path.join(objectDirectory, object.fullName), { recursive: true });
54
+ const targetFile = path.join(objectDirectory, object.fullName, `${object.fullName}.object-meta.xml`);
55
+ await fs.promises.writeFile(targetFile, (0, convert_1.convertJsonToXml)({ json: object, type: 'CustomObject' }));
56
+ return targetFile;
57
+ };
58
+ exports.writeObjectFile = writeObjectFile;
59
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/shared/fs.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,6BAA6B;AAC7B,yBAAyB;AACzB,gCAAgC;AAEhC,uCAAuD;AAGvD,MAAM,wBAAwB,GAAG,KAAK,EAAE,cAAsB,EAAyB,EAAE;IACvF,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC/D,OAAO,IAAA,kBAAQ,EAAe,GAAG,EAAE,cAAc,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,+DAA+D;AAC/D,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAU,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAEpG;;;GAGG;AACI,MAAM,gCAAgC,GAAG,KAAK,EAAE,WAAqB,EAAqB,EAAE;IACjG,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC1E,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACxF,CAAC,CAAC;AAHW,QAAA,gCAAgC,oCAG3C;AAEF;;;GAGG;AACI,MAAM,oBAAoB,GAAG,KAAK,EAAE,WAAqB,EAAqB,EAAE;IACrF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC3E,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACxF,CAAC,CAAC;AAHW,QAAA,oBAAoB,wBAG/B;AAEF;;;GAGG;AACI,MAAM,0BAA0B,GAAG,KAAK,EAAE,MAAc,EAAyB,EAAE;IACxF,MAAM,KAAK,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,oBAAoB,CAAC;IAC7D,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,wBAAwB,CAAC,cAAc,CAAC,CAAC;AAClD,CAAC,CAAC;AAJW,QAAA,0BAA0B,8BAIrC;AAEF;;;GAGG;AACI,MAAM,eAAe,GAAG,KAAK,EAClC,eAAuB,EACvB,MAAoD,EACnC,EAAE;IACnB,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1F,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,QAAQ,kBAAkB,CAAC,CAAC;IACrG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IAClG,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AARW,QAAA,eAAe,mBAQ1B"}