bulkyard 1.0.0 → 1.2.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 +2 -0
- package/lib/commands/bulkyard/extract.d.ts +1 -0
- package/lib/commands/bulkyard/extract.js.map +1 -1
- package/lib/commands/bulkyard/init.d.ts +15 -0
- package/lib/commands/bulkyard/init.js +61 -0
- package/lib/commands/bulkyard/init.js.map +1 -0
- package/lib/commands/bulkyard/load.d.ts +1 -0
- package/lib/commands/bulkyard/load.js.map +1 -1
- package/lib/core/config.d.ts +16 -0
- package/lib/core/config.js.map +1 -1
- package/lib/core/database.d.ts +3 -0
- package/lib/core/database.js.map +1 -1
- package/lib/core/extractor.d.ts +6 -0
- package/lib/core/extractor.js.map +1 -1
- package/lib/core/loader.d.ts +8 -0
- package/lib/core/loader.js.map +1 -1
- package/messages/bulkyard.init.md +37 -0
- package/oclif.manifest.json +65 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# bulkyard
|
|
2
2
|
|
|
3
|
+
[](https://github.com/jessewheeler/bulkyard/actions/workflows/release.yml)[](https://github.com/jessewheeler/bulkyard/actions/workflows/test.yml)
|
|
4
|
+
|
|
3
5
|
A Salesforce CLI plugin for bulk data extraction and loading via local SQLite3 databases.
|
|
4
6
|
|
|
5
7
|
Uses the Bulk API 2.0 to move data between a Salesforce org and a local SQLite database. A YAML config file drives which objects to process, enabling repeatable multi-object operations.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
2
|
import { ExtractResult } from '../../core/extractor.js';
|
|
3
|
+
/** Return type for the `bulkyard extract` command — an array of per-object extraction results. */
|
|
3
4
|
export type ExtractCommandResult = ExtractResult[];
|
|
4
5
|
export default class Extract extends SfCommand<ExtractCommandResult> {
|
|
5
6
|
static readonly summary: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../src/commands/bulkyard/extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAiB,MAAM,yBAAyB,CAAC;AAEvE,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../src/commands/bulkyard/extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
|
+
/** Return type for the `bulkyard init` command. */
|
|
3
|
+
export type InitCommandResult = {
|
|
4
|
+
outputFile: string;
|
|
5
|
+
};
|
|
6
|
+
export default class Init extends SfCommand<InitCommandResult> {
|
|
7
|
+
static readonly summary: string;
|
|
8
|
+
static readonly description: string;
|
|
9
|
+
static readonly examples: string[];
|
|
10
|
+
static readonly flags: {
|
|
11
|
+
'output-file': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<InitCommandResult>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { existsSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
|
|
3
|
+
import { Messages, SfError } from '@salesforce/core';
|
|
4
|
+
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
5
|
+
const messages = Messages.loadMessages('bulkyard', 'bulkyard.init');
|
|
6
|
+
const TEMPLATE = `# bulkyard config file
|
|
7
|
+
# See: https://github.com/jessegarrido/bulkyard
|
|
8
|
+
|
|
9
|
+
# Path to the SQLite database file used for extract and load operations.
|
|
10
|
+
database: bulkyard.db
|
|
11
|
+
|
|
12
|
+
# List of Salesforce objects to process.
|
|
13
|
+
objects:
|
|
14
|
+
# --- Extract example ---
|
|
15
|
+
# Extracts Account records into the "Account" table in the database.
|
|
16
|
+
- object: Account
|
|
17
|
+
query: SELECT Id, Name, Industry FROM Account
|
|
18
|
+
|
|
19
|
+
# --- Load example (commented out) ---
|
|
20
|
+
# Upserts Contact records from the "Contact" table back into Salesforce.
|
|
21
|
+
# - object: Contact
|
|
22
|
+
# operation: upsert
|
|
23
|
+
# externalIdField: Id
|
|
24
|
+
|
|
25
|
+
# Each object entry supports the following fields:
|
|
26
|
+
# object (required) Salesforce object API name (e.g. Account, Contact)
|
|
27
|
+
# query (extract) SOQL query to execute
|
|
28
|
+
# operation (load) Bulk API operation: insert, update, upsert, or delete
|
|
29
|
+
# externalIdField (load) External ID field, required for upsert
|
|
30
|
+
# table (optional) SQLite table name override (defaults to the object name)
|
|
31
|
+
`;
|
|
32
|
+
export default class Init extends SfCommand {
|
|
33
|
+
static summary = messages.getMessage('summary');
|
|
34
|
+
static description = messages.getMessage('description');
|
|
35
|
+
static examples = messages.getMessages('examples');
|
|
36
|
+
static flags = {
|
|
37
|
+
'output-file': Flags.string({
|
|
38
|
+
char: 'o',
|
|
39
|
+
summary: messages.getMessage('flags.output-file.summary'),
|
|
40
|
+
default: 'bulkyard.config.yml',
|
|
41
|
+
}),
|
|
42
|
+
force: Flags.boolean({
|
|
43
|
+
char: 'f',
|
|
44
|
+
summary: messages.getMessage('flags.force.summary'),
|
|
45
|
+
default: false,
|
|
46
|
+
}),
|
|
47
|
+
};
|
|
48
|
+
async run() {
|
|
49
|
+
const { flags } = await this.parse(Init);
|
|
50
|
+
const outputFile = flags['output-file'];
|
|
51
|
+
if (existsSync(outputFile) && !flags.force) {
|
|
52
|
+
throw new SfError(messages.getMessage('error.alreadyExists', [outputFile]), 'AlreadyExistsError', [
|
|
53
|
+
'Use --force to overwrite the existing file.',
|
|
54
|
+
]);
|
|
55
|
+
}
|
|
56
|
+
writeFileSync(outputFile, TEMPLATE, 'utf8');
|
|
57
|
+
this.log(messages.getMessage('info.created', [outputFile]));
|
|
58
|
+
return { outputFile };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/bulkyard/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAErD,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AAKpE,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBhB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,SAA4B;IACrD,MAAM,CAAU,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,CAAU,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACjE,MAAM,CAAU,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAE5D,MAAM,CAAU,KAAK,GAAG;QAC7B,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;YAC1B,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC;YACzD,OAAO,EAAE,qBAAqB;SAC/B,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC;YACnD,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;QAExC,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAC3C,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,oBAAoB,EAAE;gBAChG,6CAA6C;aAC9C,CAAC,CAAC;QACL,CAAC;QAED,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAE5D,OAAO,EAAE,UAAU,EAAE,CAAC;IACxB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
2
|
import { LoadResult } from '../../core/loader.js';
|
|
3
|
+
/** Return type for the `bulkyard load` command — an array of per-object load results. */
|
|
3
4
|
export type LoadCommandResult = LoadResult[];
|
|
4
5
|
export default class Load extends SfCommand<LoadCommandResult> {
|
|
5
6
|
static readonly summary: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/commands/bulkyard/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAc,MAAM,sBAAsB,CAAC;AAE9D,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/commands/bulkyard/load.ts"],"names":[],"mappings":"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"}
|
package/lib/core/config.d.ts
CHANGED
|
@@ -1,21 +1,37 @@
|
|
|
1
|
+
/** Configuration for a single Salesforce object to extract or load. */
|
|
1
2
|
export type BulkyardObjectConfig = {
|
|
3
|
+
/** The Salesforce object API name (e.g. "Account", "Contact"). */
|
|
2
4
|
object: string;
|
|
5
|
+
/** SOQL query used to extract records. Required for extract operations. */
|
|
3
6
|
query?: string;
|
|
7
|
+
/** Bulk API operation type for load (e.g. "insert", "update", "upsert", "delete"). */
|
|
4
8
|
operation?: string;
|
|
9
|
+
/** External ID field name, required when {@link operation} is "upsert". */
|
|
5
10
|
externalIdField?: string;
|
|
11
|
+
/** SQLite table name override. Defaults to the object API name. */
|
|
6
12
|
table?: string;
|
|
7
13
|
};
|
|
14
|
+
/** Top-level bulkyard configuration, typically loaded from a YAML config file. */
|
|
8
15
|
export type BulkyardConfig = {
|
|
16
|
+
/** File path to the SQLite database. */
|
|
9
17
|
database: string;
|
|
18
|
+
/** One or more Salesforce object configurations to process. */
|
|
10
19
|
objects: BulkyardObjectConfig[];
|
|
11
20
|
};
|
|
12
21
|
export declare function loadConfig(filePath: string): BulkyardConfig;
|
|
22
|
+
/** Inline flag values passed directly on the CLI instead of via a config file. */
|
|
13
23
|
export type InlineFlagConfig = {
|
|
24
|
+
/** The Salesforce object API name. */
|
|
14
25
|
sobject: string;
|
|
26
|
+
/** File path to the SQLite database. */
|
|
15
27
|
database: string;
|
|
28
|
+
/** SOQL query for extract operations. */
|
|
16
29
|
query?: string;
|
|
30
|
+
/** Bulk API operation type for load operations. */
|
|
17
31
|
operation?: string;
|
|
32
|
+
/** External ID field name for upsert operations. */
|
|
18
33
|
externalIdField?: string;
|
|
34
|
+
/** SQLite table name override. */
|
|
19
35
|
table?: string;
|
|
20
36
|
};
|
|
21
37
|
export declare function buildConfigFromFlags(flags: InlineFlagConfig): BulkyardConfig;
|
package/lib/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,IAAI,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,IAAI,MAAM,SAAS,CAAC;AAwB3B,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAA4B,CAAC;IAEzD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,OAAO,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,OAAO,CAAC,+CAA+C,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,OAAO,CAAC,kDAAkD,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAyC,EAAE,CAAC;QACnE,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,OAAO,CAAC,gDAAgD,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,OAAO,MAAmC,CAAC;AAC7C,CAAC;AAkBD,MAAM,UAAU,oBAAoB,CAAC,KAAuB;IAC1D,MAAM,GAAG,GAAyB,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IAC5D,IAAI,KAAK,CAAC,KAAK;QAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACzC,IAAI,KAAK,CAAC,SAAS;QAAE,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IACrD,IAAI,KAAK,CAAC,eAAe;QAAE,GAAG,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IACvE,IAAI,KAAK,CAAC,KAAK;QAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAEzC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAsB;IACvD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,MAAM,qCAAqC,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,MAAM,uCAAuC,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YACvD,MAAM,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,MAAM,iDAAiD,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/lib/core/database.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
/** Definition of a SQLite table column derived from a Salesforce field. */
|
|
1
2
|
export type ColumnDef = {
|
|
3
|
+
/** The column/field name. */
|
|
2
4
|
name: string;
|
|
5
|
+
/** The Salesforce field type (e.g. "string", "double", "boolean"), used to determine the SQLite column type. */
|
|
3
6
|
sfType: string;
|
|
4
7
|
};
|
|
5
8
|
export declare class BulkyardDatabase {
|
package/lib/core/database.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/core/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/core/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAU/C,SAAS,OAAO,CAAC,UAAkB;IACjC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AAC/C,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,OAAO,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,OAAO,gBAAgB;IACnB,EAAE,CAAoB;IAE9B,YAAmB,MAAc;QAC/B,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACvC,CAAC;IAEM,WAAW,CAAC,SAAiB,EAAE,OAAoB;QACxD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAC;QAE/C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,MAAM,KAAK,OAAO,GAAG,CAAC,CAAC;IACtD,CAAC;IAEM,aAAa,CAAC,SAAiB,EAAE,OAAiB,EAAE,OAAuC;QAChG,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,MAAM,KAAK,OAAO,aAAa,YAAY,GAAG,CAAC,CAAC;QAE5F,MAAM,SAAS,GAAG,IAAI,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;YAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,IAAoC,EAAE,EAAE;gBAC/E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC5D,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC,CAAC,CAAC;YACH,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAEM,WAAW,CAAC,SAAiB;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAC,GAAG,EAAoC,CAAC;IAC5F,CAAC;IAEM,WAAW,CAAC,SAAiB;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,2EAA2E,CAAC;aACpF,GAAG,CAAC,SAAS,CAAoB,CAAC;QACrC,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACrB,CAAC;IAEM,eAAe,CAAC,SAAiB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAA6B,CAAC;QAC1G,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEM,WAAW,CAAC,SAAiB;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,+BAA+B,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,EAAqB,CAAC;QAC1G,OAAO,GAAG,CAAC,GAAG,CAAC;IACjB,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF"}
|
package/lib/core/extractor.d.ts
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { Connection } from '@salesforce/core';
|
|
2
2
|
import { BulkyardDatabase } from './database.js';
|
|
3
3
|
import { BulkyardObjectConfig } from './config.js';
|
|
4
|
+
/** Result of extracting a single Salesforce object into SQLite. */
|
|
4
5
|
export type ExtractResult = {
|
|
6
|
+
/** The Salesforce object API name that was extracted. */
|
|
5
7
|
object: string;
|
|
8
|
+
/** The SQLite table the records were written to. */
|
|
6
9
|
table: string;
|
|
10
|
+
/** Number of records extracted. */
|
|
7
11
|
recordCount: number;
|
|
12
|
+
/** Whether the extraction completed without errors. */
|
|
8
13
|
success: boolean;
|
|
14
|
+
/** Error message if the extraction failed. */
|
|
9
15
|
error?: string;
|
|
10
16
|
};
|
|
11
17
|
export declare function extractObject(conn: Connection, db: BulkyardDatabase, objConfig: BulkyardObjectConfig): Promise<ExtractResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/core/extractor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/core/extractor.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAgB,EAChB,EAAoB,EACpB,SAA+B;IAE/B,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAM,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;QAE5C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACvF,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAA4B,CAAC;QAC1D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC;QAE9E,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE7E,MAAM,OAAO,GAAgB,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACpD,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;SACtC,CAAC,CAAC,CAAC;QAEJ,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEnC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACvC,MAAM,OAAO,GAA4B,EAAE,CAAC;YAC5C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,GAAI,GAA+B,CAAC,GAAG,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QAEtD,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACpG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACxG,CAAC;AACH,CAAC"}
|
package/lib/core/loader.d.ts
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import { Connection } from '@salesforce/core';
|
|
2
2
|
import { BulkyardDatabase } from './database.js';
|
|
3
3
|
import { BulkyardObjectConfig } from './config.js';
|
|
4
|
+
/** Result of loading records from SQLite into a Salesforce object via Bulk API 2.0. */
|
|
4
5
|
export type LoadResult = {
|
|
6
|
+
/** The Salesforce object API name that was loaded. */
|
|
5
7
|
object: string;
|
|
8
|
+
/** The SQLite table the records were read from. */
|
|
6
9
|
table: string;
|
|
10
|
+
/** Total number of records submitted. */
|
|
7
11
|
totalRecords: number;
|
|
12
|
+
/** Number of records that were successfully loaded. */
|
|
8
13
|
successCount: number;
|
|
14
|
+
/** Number of records that failed to load. */
|
|
9
15
|
failureCount: number;
|
|
16
|
+
/** Whether all records were loaded without failures. */
|
|
10
17
|
success: boolean;
|
|
18
|
+
/** List of error messages from failed records. */
|
|
11
19
|
errors: string[];
|
|
12
20
|
};
|
|
13
21
|
export declare function loadObject(conn: Connection, db: BulkyardDatabase, objConfig: BulkyardObjectConfig): Promise<LoadResult>;
|
package/lib/core/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAgB,EAChB,EAAoB,EACpB,SAA+B;IAE/B,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC;IACtD,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,OAAO;gBACL,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,KAAK,EAAE,SAAS;gBAChB,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,UAAU,SAAS,mCAAmC,CAAC;aACjE,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO;gBACL,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,KAAK,EAAE,SAAS;gBAChB,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,EAAE;aACX,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC;YACxD,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,SAAS,EAAE,SAAS,CAAC,SAAsD;YAC3E,KAAK,EAAE,IAAqC;YAC5C,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzF,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC;QACzD,MAAM,YAAY,GAAG,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC;QACrD,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,KAAK,CAAC,CAAC,SAAS,IAAI,eAAe,EAAE,CAAC,CAAC;QAElH,OAAO;YACL,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,KAAK,EAAE,SAAS;YAChB,YAAY,EAAE,IAAI,CAAC,MAAM;YACzB,YAAY;YACZ,YAAY;YACZ,OAAO,EAAE,YAAY,KAAK,CAAC;YAC3B,MAAM;SACP,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,KAAK,EAAE,SAAS;YAChB,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,CAAC,OAAO,CAAC;SAClB,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
|
|
3
|
+
Generate an annotated bulkyard YAML config file.
|
|
4
|
+
|
|
5
|
+
# description
|
|
6
|
+
|
|
7
|
+
Scaffolds a starter config file with commented examples for both extract and load operations. The generated file includes an active Account extract example and a commented-out Contact load example, with annotations explaining every field.
|
|
8
|
+
|
|
9
|
+
# examples
|
|
10
|
+
|
|
11
|
+
- Generate a default bulkyard.config.yml config file:
|
|
12
|
+
|
|
13
|
+
<%= config.bin %> <%= command.id %>
|
|
14
|
+
|
|
15
|
+
- Generate a config file at a custom path:
|
|
16
|
+
|
|
17
|
+
<%= config.bin %> <%= command.id %> --output-file my-config.yml
|
|
18
|
+
|
|
19
|
+
- Overwrite an existing config file:
|
|
20
|
+
|
|
21
|
+
<%= config.bin %> <%= command.id %> --force
|
|
22
|
+
|
|
23
|
+
# flags.output-file.summary
|
|
24
|
+
|
|
25
|
+
Path to write the generated config file.
|
|
26
|
+
|
|
27
|
+
# flags.force.summary
|
|
28
|
+
|
|
29
|
+
Overwrite the output file if it already exists.
|
|
30
|
+
|
|
31
|
+
# info.created
|
|
32
|
+
|
|
33
|
+
Created config file: %s
|
|
34
|
+
|
|
35
|
+
# error.alreadyExists
|
|
36
|
+
|
|
37
|
+
File already exists: %s. Use --force to overwrite.
|
package/oclif.manifest.json
CHANGED
|
@@ -115,6 +115,70 @@
|
|
|
115
115
|
"extract:bulkyard"
|
|
116
116
|
]
|
|
117
117
|
},
|
|
118
|
+
"bulkyard:init": {
|
|
119
|
+
"aliases": [],
|
|
120
|
+
"args": {},
|
|
121
|
+
"description": "Scaffolds a starter config file with commented examples for both extract and load operations. The generated file includes an active Account extract example and a commented-out Contact load example, with annotations explaining every field.",
|
|
122
|
+
"examples": [
|
|
123
|
+
"Generate a default bulkyard.config.yml config file:\n<%= config.bin %> <%= command.id %>",
|
|
124
|
+
"Generate a config file at a custom path:\n<%= config.bin %> <%= command.id %> --output-file my-config.yml",
|
|
125
|
+
"Overwrite an existing config file:\n<%= config.bin %> <%= command.id %> --force"
|
|
126
|
+
],
|
|
127
|
+
"flags": {
|
|
128
|
+
"json": {
|
|
129
|
+
"description": "Format output as json.",
|
|
130
|
+
"helpGroup": "GLOBAL",
|
|
131
|
+
"name": "json",
|
|
132
|
+
"allowNo": false,
|
|
133
|
+
"type": "boolean"
|
|
134
|
+
},
|
|
135
|
+
"flags-dir": {
|
|
136
|
+
"helpGroup": "GLOBAL",
|
|
137
|
+
"name": "flags-dir",
|
|
138
|
+
"summary": "Import flag values from a directory.",
|
|
139
|
+
"hasDynamicHelp": false,
|
|
140
|
+
"multiple": false,
|
|
141
|
+
"type": "option"
|
|
142
|
+
},
|
|
143
|
+
"output-file": {
|
|
144
|
+
"char": "o",
|
|
145
|
+
"name": "output-file",
|
|
146
|
+
"summary": "Path to write the generated config file.",
|
|
147
|
+
"default": "bulkyard.config.yml",
|
|
148
|
+
"hasDynamicHelp": false,
|
|
149
|
+
"multiple": false,
|
|
150
|
+
"type": "option"
|
|
151
|
+
},
|
|
152
|
+
"force": {
|
|
153
|
+
"char": "f",
|
|
154
|
+
"name": "force",
|
|
155
|
+
"summary": "Overwrite the output file if it already exists.",
|
|
156
|
+
"allowNo": false,
|
|
157
|
+
"type": "boolean"
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"hasDynamicHelp": false,
|
|
161
|
+
"hiddenAliases": [],
|
|
162
|
+
"id": "bulkyard:init",
|
|
163
|
+
"pluginAlias": "bulkyard",
|
|
164
|
+
"pluginName": "bulkyard",
|
|
165
|
+
"pluginType": "core",
|
|
166
|
+
"strict": true,
|
|
167
|
+
"summary": "Generate an annotated bulkyard YAML config file.",
|
|
168
|
+
"enableJsonFlag": true,
|
|
169
|
+
"isESM": true,
|
|
170
|
+
"relativePath": [
|
|
171
|
+
"lib",
|
|
172
|
+
"commands",
|
|
173
|
+
"bulkyard",
|
|
174
|
+
"init.js"
|
|
175
|
+
],
|
|
176
|
+
"aliasPermutations": [],
|
|
177
|
+
"permutations": [
|
|
178
|
+
"bulkyard:init",
|
|
179
|
+
"init:bulkyard"
|
|
180
|
+
]
|
|
181
|
+
},
|
|
118
182
|
"bulkyard:load": {
|
|
119
183
|
"aliases": [],
|
|
120
184
|
"args": {},
|
|
@@ -248,5 +312,5 @@
|
|
|
248
312
|
]
|
|
249
313
|
}
|
|
250
314
|
},
|
|
251
|
-
"version": "1.
|
|
315
|
+
"version": "1.2.0"
|
|
252
316
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bulkyard",
|
|
3
3
|
"description": "A Salesforce CLI plugin for bulk data extraction and loading via local SQLite3 databases.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.2.0",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@oclif/core": "^4",
|
|
7
7
|
"@salesforce/core": "^8",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"format": "wireit",
|
|
63
63
|
"link-check": "wireit",
|
|
64
64
|
"lint": "wireit",
|
|
65
|
-
"
|
|
65
|
+
"prepare": "husky install",
|
|
66
66
|
"postpack": "sf-clean --ignore-signing-artifacts",
|
|
67
67
|
"prepack": "sf-prepack",
|
|
68
68
|
"test": "wireit",
|