UNPKG

sf-decomposer

Version:

Split large Salesforce metadata files into version-control-friendly pieces and rebuild deployment-ready files.

126 lines (125 loc) 4.6 kB
import { Command, Config } from '@oclif/core'; import { ScopedPostRetrieve } from '@salesforce/source-deploy-retrieve'; export type DecomposerResult = { metadata: string[]; }; export type DecomposerOverride = { /** Suffix-scoped targets (e.g. `permissionset`). Applies to every component of the type. */ metadataTypes?: string[]; /** Component-scoped targets in the form `<suffix>:<fullName>` (e.g. `permissionset:HR_Admin`). */ components?: string[]; decomposedFormat?: string; strategy?: string; decomposeNestedPermissions?: boolean; /** * Custom `splitTags` spec for `grouped-by-tag` strategy. Comma-separated rules of the form * `<tag>:<mode>:<field>` or `<tag>:<path>:<mode>:<field>`, where `mode` is `split` (one file * per array item, filename from `field`) or `group` (array items grouped by `field`, one file * per group). When set, this wins over the hardcoded `decomposeNestedPermissions` default * for permission sets. Only applied when the resolved strategy is `grouped-by-tag`. */ splitTags?: string; /** * Custom `multiLevel` spec(s) for nested-array decomposition. Each rule has the form * `<file_pattern>:<root_to_strip>:<unique_id_elements>` (the third part is itself a * comma-separated list). Pass a string for a single rule, a string[] for several rules * (preferred), or a single `;`-separated string. When set, this wins over the hardcoded * `loyaltyProgramSetup` default. Applies regardless of strategy because multiLevel * works on a per-file pattern. */ multiLevel?: string | string[]; /** * Comma-separated list of XML element names (and optional compound keys joined by `+`) * used to derive stable filenames during `unique-id` decomposition. When set, this * replaces the hardcoded per-type list from the built-in registry (the global defaults * `fullName` and `name` are always prepended regardless). Useful for metadata types not * yet covered by the built-in registry, or when the default selection produces collisions. * Example: `"developerName,apiName"` or `"actionName+pageOrSobjectType+formFactor"`. */ uniqueIdElements?: string; prePurge?: boolean; postPurge?: boolean; }; export type ConfigFile = { metadataSuffixes: string; prePurge: boolean; postPurge: boolean; decomposedFormat: string; ignorePackageDirectories: string; strategy: string; decomposeNestedPermissions: boolean; manifest?: string; overrides?: DecomposerOverride[]; }; export type SfdxProject = { packageDirectories: Array<{ path: string; }>; }; export type MetaAttributes = { metaSuffix: string; strictDirectoryName: boolean; folderType: string; metadataPaths: string[]; uniqueIdElements: string; }; export type PostRetrieveHookOptions = { Command: Command; argv: string[]; commandId: string; result?: ScopedPostRetrieve; config: Config; }; export type FieldPermission = { editable?: boolean; field: string; readable?: boolean; }; export type DecomposeOptions = { metadataTypes?: string[]; prepurge: boolean; postpurge: boolean; format: string; ignoreDirs?: string[]; strategy: string; decomposeNestedPerms: boolean; manifest?: string; overrides?: DecomposerOverride[]; log: (msg: string) => void; repoRoot?: string; }; export type RecomposeOptions = { metadataTypes?: string[]; postpurge: boolean; ignoreDirs?: string[]; manifest?: string; log: (msg: string) => void; repoRoot?: string; }; export type VerifyOptions = { metadataTypes?: string[]; format: string; ignoreDirs?: string[]; strategy: string; decomposeNestedPerms: boolean; manifest?: string; overrides?: DecomposerOverride[]; log: (msg: string) => void; }; export type VerifyDrift = { /** Path of the offending file relative to its package directory. */ path: string; /** Short human-readable reason: `'content drift'` or `'missing in round-trip output'`. */ reason: string; }; export type VerifyResult = { /** Metadata types that participated in the round trip. */ metadata: string[]; /** One entry per file that did not survive the round trip semantically. Empty on success. */ drift: VerifyDrift[]; /** * Files where the only delta was sibling/attribute ordering — content is semantically identical * but not byte-identical. Reported for awareness; does not fail `verify`. */ reordered: string[]; };