apextestlist 1.12.3 → 1.13.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.
Files changed (69) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +36 -4
  3. package/lib/commands/apextests/list.d.ts +3 -5
  4. package/lib/commands/apextests/list.js +18 -64
  5. package/lib/commands/apextests/list.js.map +1 -1
  6. package/lib/core/listTests.d.ts +2 -0
  7. package/lib/core/listTests.js +62 -0
  8. package/lib/core/listTests.js.map +1 -0
  9. package/lib/parsers/manifestParser.d.ts +10 -0
  10. package/lib/parsers/manifestParser.js +25 -0
  11. package/lib/parsers/manifestParser.js.map +1 -0
  12. package/lib/parsers/metadataFilterParser.d.ts +9 -0
  13. package/lib/parsers/metadataFilterParser.js +50 -0
  14. package/lib/parsers/metadataFilterParser.js.map +1 -0
  15. package/lib/parsers/testNameParser.d.ts +7 -0
  16. package/lib/parsers/testNameParser.js +19 -0
  17. package/lib/parsers/testNameParser.js.map +1 -0
  18. package/lib/parsers/testSuiteParser.d.ts +15 -0
  19. package/lib/parsers/testSuiteParser.js +40 -0
  20. package/lib/parsers/testSuiteParser.js.map +1 -0
  21. package/lib/readers/directorySearcher.d.ts +10 -0
  22. package/lib/readers/directorySearcher.js +82 -0
  23. package/lib/readers/directorySearcher.js.map +1 -0
  24. package/lib/readers/testSuiteSearcher.d.ts +9 -0
  25. package/lib/readers/testSuiteSearcher.js +74 -0
  26. package/lib/readers/testSuiteSearcher.js.map +1 -0
  27. package/lib/utils/concurrencyThreshold.d.ts +1 -0
  28. package/lib/utils/concurrencyThreshold.js +7 -0
  29. package/lib/utils/concurrencyThreshold.js.map +1 -0
  30. package/lib/utils/constants.d.ts +6 -0
  31. package/lib/utils/constants.js +8 -0
  32. package/lib/utils/constants.js.map +1 -0
  33. package/lib/{helpers → utils}/formatters.d.ts +1 -1
  34. package/lib/utils/formatters.js.map +1 -0
  35. package/lib/utils/getPackageDirectories.d.ts +4 -0
  36. package/lib/{helpers → utils}/getPackageDirectories.js +1 -1
  37. package/lib/utils/getPackageDirectories.js.map +1 -0
  38. package/lib/{helpers → utils}/getRepoRoot.js +1 -1
  39. package/lib/utils/getRepoRoot.js.map +1 -0
  40. package/lib/utils/matchWildcard.d.ts +1 -0
  41. package/lib/utils/matchWildcard.js +5 -0
  42. package/lib/utils/matchWildcard.js.map +1 -0
  43. package/lib/utils/types.d.ts +24 -0
  44. package/lib/{helpers → utils}/types.js.map +1 -1
  45. package/lib/utils/validateTests.js.map +1 -0
  46. package/messages/apextests.list.md +8 -0
  47. package/oclif.lock +59 -65
  48. package/oclif.manifest.json +11 -1
  49. package/package.json +4 -3
  50. package/lib/helpers/constants.d.ts +0 -2
  51. package/lib/helpers/constants.js +0 -4
  52. package/lib/helpers/constants.js.map +0 -1
  53. package/lib/helpers/formatters.js.map +0 -1
  54. package/lib/helpers/getPackageDirectories.d.ts +0 -1
  55. package/lib/helpers/getPackageDirectories.js.map +0 -1
  56. package/lib/helpers/getRepoRoot.js.map +0 -1
  57. package/lib/helpers/parsers.d.ts +0 -32
  58. package/lib/helpers/parsers.js +0 -87
  59. package/lib/helpers/parsers.js.map +0 -1
  60. package/lib/helpers/readers.d.ts +0 -21
  61. package/lib/helpers/readers.js +0 -158
  62. package/lib/helpers/readers.js.map +0 -1
  63. package/lib/helpers/types.d.ts +0 -10
  64. package/lib/helpers/validateTests.js.map +0 -1
  65. /package/lib/{helpers → utils}/formatters.js +0 -0
  66. /package/lib/{helpers → utils}/getRepoRoot.d.ts +0 -0
  67. /package/lib/{helpers → utils}/types.js +0 -0
  68. /package/lib/{helpers → utils}/validateTests.d.ts +0 -0
  69. /package/lib/{helpers → utils}/validateTests.js +0 -0
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Given a certain directory, search its contents for files that end with
3
+ * '.testSuite-meta.xml' and extract the class names mentioned in the test
4
+ * suites.
5
+ *
6
+ * @param directory directory within the project to search for files
7
+ * @returns a Promise<string> with a list of test names
8
+ */
9
+ export declare function searchDirectoryForTestNamesInTestSuites(directory: string, packageDirectories: string[]): Promise<string[]>;
@@ -0,0 +1,74 @@
1
+ 'use strict';
2
+ import { readdirSync, readFileSync } from 'node:fs';
3
+ import { queue } from 'async';
4
+ import { parseTestSuiteFile } from '../parsers/testSuiteParser.js';
5
+ import { getConcurrencyThreshold } from '../utils/concurrencyThreshold.js';
6
+ import { matchWildcard } from '../utils/matchWildcard.js';
7
+ import { searchDirectoryForTestClasses } from './directorySearcher.js';
8
+ /**
9
+ * Given a certain directory, search its contents for files that end with
10
+ * '.testSuite-meta.xml' and extract the class names mentioned in the test
11
+ * suites.
12
+ *
13
+ * @param directory directory within the project to search for files
14
+ * @returns a Promise<string> with a list of test names
15
+ */
16
+ export async function searchDirectoryForTestNamesInTestSuites(directory, packageDirectories) {
17
+ const testClassesNames = new Set();
18
+ let readDir;
19
+ try {
20
+ readDir = readdirSync(directory, { recursive: true });
21
+ }
22
+ catch (error) {
23
+ throw new Error(`Invalid or inaccessible directory: ${directory}`);
24
+ }
25
+ // Gets the list of test suites
26
+ const suiteFiles = readDir.filter((file) => file.endsWith('.testSuite-meta.xml'));
27
+ const wildcards = new Set();
28
+ let requiresWildcardSearch = false;
29
+ // Function that handles the parsing of test suites and helps to build the
30
+ // list of test classes for the next steps
31
+ const testSuiteNameHandler = (fileName) => {
32
+ const path = `${directory}/${fileName}`;
33
+ const data = readFileSync(path, 'utf-8');
34
+ const classes = parseTestSuiteFile(data);
35
+ // TODO: Support for wildcards
36
+ for (const test of classes) {
37
+ if (test.includes('*')) {
38
+ requiresWildcardSearch = true;
39
+ wildcards.add(test);
40
+ continue;
41
+ }
42
+ testClassesNames.add(test);
43
+ }
44
+ };
45
+ // define the processors
46
+ const testSuiteNameProcessor = queue((f, cb) => {
47
+ testSuiteNameHandler(f);
48
+ cb();
49
+ }, getConcurrencyThreshold());
50
+ // initialize the processor with the names of files we want to process
51
+ await testSuiteNameProcessor.push(suiteFiles);
52
+ // make sure no dangling process is left before continuing
53
+ if (testSuiteNameProcessor.length() > 0) {
54
+ await testSuiteNameProcessor.drain();
55
+ }
56
+ if (requiresWildcardSearch && packageDirectories) {
57
+ for (const pkgDir of packageDirectories) {
58
+ // eslint-disable-next-line no-await-in-loop
59
+ const searchResult = await searchDirectoryForTestClasses(pkgDir, null);
60
+ const testClassesInDir = searchResult.classes;
61
+ for (const test of testClassesInDir) {
62
+ // if the test class name matches the wildcard, add it to the list
63
+ for (const wildcard of wildcards) {
64
+ if (!matchWildcard(wildcard, test)) {
65
+ continue;
66
+ }
67
+ testClassesNames.add(test);
68
+ }
69
+ }
70
+ }
71
+ }
72
+ return Array.from(testClassesNames).sort();
73
+ }
74
+ //# sourceMappingURL=testSuiteSearcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testSuiteSearcher.js","sourceRoot":"","sources":["../../src/readers/testSuiteSearcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function getConcurrencyThreshold(): number;
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+ import { availableParallelism } from 'node:os';
3
+ export function getConcurrencyThreshold() {
4
+ const AVAILABLE_PARALLELISM = availableParallelism ? availableParallelism() : Infinity;
5
+ return Math.min(AVAILABLE_PARALLELISM, 6);
6
+ }
7
+ //# sourceMappingURL=concurrencyThreshold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrencyThreshold.js","sourceRoot":"","sources":["../../src/utils/concurrencyThreshold.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,UAAU,uBAAuB;IACrC,MAAM,qBAAqB,GAAW,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE/F,OAAO,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const SFDX_PROJECT_FILE_NAME = "sfdx-project.json";
2
+ export declare const SEARCHABLE_METADATA_FOLDERS: string[];
3
+ export declare const TEST_NAME_REGEX: RegExp;
4
+ export declare const TEST_SUITE_NAME_REGEX: RegExp;
5
+ export declare const TEST_CLASS_ANNOTATION_REGEX: RegExp;
6
+ export declare const METADATA_FILTER_CONFIG = ".test-dependencies.yml";
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+ export const SFDX_PROJECT_FILE_NAME = 'sfdx-project.json';
3
+ export const SEARCHABLE_METADATA_FOLDERS = ['classes', 'triggers', 'testSuites'];
4
+ export const TEST_NAME_REGEX = /@tests\s*:\s*([^/\n]+)/gi;
5
+ export const TEST_SUITE_NAME_REGEX = /@testsuites\s*:\s*([^/\n]+)/gi;
6
+ export const TEST_CLASS_ANNOTATION_REGEX = /@istest/gi;
7
+ export const METADATA_FILTER_CONFIG = '.test-dependencies.yml';
8
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAC1D,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;AACjF,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAC1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,+BAA+B,CAAC;AACrE,MAAM,CAAC,MAAM,2BAA2B,GAAG,WAAW,CAAC;AACvD,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC"}
@@ -1,2 +1,2 @@
1
- import { ApextestsListResult } from '../commands/apextests/list.js';
1
+ import { ApextestsListResult } from '../utils/types.js';
2
2
  export declare function formatList(format: string, tests: string[]): Promise<ApextestsListResult>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/utils/formatters.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,KAAe;IAC9D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,IAAI;YACP,OAAO,OAAO,CAAC,OAAO,CAAC;gBACrB,KAAK;gBACL,OAAO,EAAE,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;aACtC,CAAC,CAAC;QACL,KAAK,KAAK;YACR,OAAO,OAAO,CAAC,OAAO,CAAC;gBACrB,KAAK;gBACL,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;aACzB,CAAC,CAAC;QACL;YACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function getPackageDirectories(ignoreDirs: string[]): Promise<{
2
+ metadataPaths: string[];
3
+ repoRoot: string;
4
+ }>;
@@ -15,7 +15,7 @@ export async function getPackageDirectories(ignoreDirs) {
15
15
  .map((directory) => resolve(repoRoot, directory.path))
16
16
  .filter((directory) => !ignoreDirs.includes(basename(directory)));
17
17
  const metadataPaths = (await Promise.all(packageDirectories.map((directory) => searchForSubFolders(directory, SEARCHABLE_METADATA_FOLDERS)))).flat();
18
- return metadataPaths;
18
+ return { metadataPaths, repoRoot };
19
19
  }
20
20
  async function searchForSubFolders(dxDirectory, subDirectoryNames) {
21
21
  const foundPaths = [];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPackageDirectories.js","sourceRoot":"","sources":["../../src/utils/getPackageDirectories.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAoB;IAC9D,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;IAE3D,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,MAAM,cAAc,GAAW,MAAM,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACzE,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAgB,CAAC;IAC3E,MAAM,kBAAkB,GAAG,WAAW,CAAC,kBAAkB;SACtD,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;SACrD,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEpE,MAAM,aAAa,GAAG,CACpB,MAAM,OAAO,CAAC,GAAG,CACf,kBAAkB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC,CACnG,CACF,CAAC,IAAI,EAAE,CAAC;IAET,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,WAAmB,EAAE,iBAA2B;IACjF,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IAEzC,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEnC,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/B,OAAO,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CACH,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
  import { access } from 'node:fs/promises';
3
3
  import { join, dirname } from 'node:path';
4
- import { SFDX_PROJECT_FILE_NAME } from './constants.js';
4
+ import { SFDX_PROJECT_FILE_NAME } from '../utils/constants.js';
5
5
  async function findRepoRoot(dir) {
6
6
  const filePath = join(dir, SFDX_PROJECT_FILE_NAME);
7
7
  try {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRepoRoot.js","sourceRoot":"","sources":["../../src/utils/getRepoRoot.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,KAAK,UAAU,YAAY,CACzB,GAAW;IAEX,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,6DAA6D;QAC7D,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,4DAA4D;YAC5D,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,6CAA6C;QAC7C,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACjC,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function matchWildcard(wildcard: string, test: string): boolean;
@@ -0,0 +1,5 @@
1
+ export function matchWildcard(wildcard, test) {
2
+ const regex = new RegExp(`^${wildcard.replace('*', '.*')}$`);
3
+ return regex.test(test);
4
+ }
5
+ //# sourceMappingURL=matchWildcard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchWildcard.js","sourceRoot":"","sources":["../../src/utils/matchWildcard.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,IAAY;IAC1D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,24 @@
1
+ export type SfdxProject = {
2
+ packageDirectories: Array<{
3
+ path: string;
4
+ }>;
5
+ };
6
+ export type SearchResult = {
7
+ classes: string[];
8
+ testSuites: string[];
9
+ warnings: string[];
10
+ };
11
+ export type ApextestsListResult = {
12
+ tests: string[];
13
+ command: string;
14
+ };
15
+ export type ListTestsOptions = {
16
+ format?: string;
17
+ manifest?: string;
18
+ ignoreMissingTests?: boolean;
19
+ ignoreDirs?: string[];
20
+ noWarnings?: boolean;
21
+ filterByMetadata?: boolean;
22
+ warn?: (msg: string) => void;
23
+ };
24
+ export type TestMetadataMap = Record<string, string[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/helpers/types.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateTests.js","sourceRoot":"","sources":["../../src/utils/validateTests.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,gBAA0B,EAC1B,kBAA4B;IAE5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,8CAA8C;IAC9C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,eAAe,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAClF,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;IAC7C,CAAC,CAAC,CACH,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,OAAO,EAAE,CAAC;QACzC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,mBAAmB,IAAI,6CAA6C,CAAC,CAAC;QACtF,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,kBAA4B;IAC/E,yDAAyD;IACzD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAEjH,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,QAAgB,EAAE,WAAmB;IACpE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IAEzC,oEAAoE;IACpE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,OAAO,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;AACxD,CAAC"}
@@ -46,6 +46,14 @@ Do not print warnings for each Apex file missing annotations.
46
46
 
47
47
  Do not print warnings for each Apex file missing annotations.
48
48
 
49
+ # flags.filter-by-metadata.summary
50
+
51
+ Only include tests that explicitly declare metadata dependencies matching changed metadata.
52
+
53
+ # flags.filter-by-metadata.description
54
+
55
+ When enabled with `manifest`, test selection is based on metadata changes (e.g., Flow, CustomObject) rather than Apex annotations.
56
+
49
57
  # examples
50
58
 
51
59
  - <%= config.bin %> <%= command.id %> --format csv
package/oclif.lock CHANGED
@@ -1368,10 +1368,10 @@
1368
1368
  "@nodelib/fs.scandir" "2.1.5"
1369
1369
  fastq "^1.6.0"
1370
1370
 
1371
- "@oclif/core@4.3.0", "@oclif/core@^4", "@oclif/core@^4.0.27", "@oclif/core@^4.2.10":
1372
- version "4.3.0"
1373
- resolved "https://registry.yarnpkg.com/@oclif/core/-/core-4.3.0.tgz#9a2951f05f81a4c7ae5ffcc00b2d720cca0898e6"
1374
- integrity sha512-lIzHY+JMP6evrS5E/sGijNnwrCoNtGy8703jWXcMuPOYKiFhWoAqnIm1BGgoRgmxczkbSfRsHUL/lwsSgh74Lw==
1371
+ "@oclif/core@4.3.3", "@oclif/core@^4", "@oclif/core@^4.0.27", "@oclif/core@^4.3.2":
1372
+ version "4.3.3"
1373
+ resolved "https://registry.yarnpkg.com/@oclif/core/-/core-4.3.3.tgz#a527536b62ef202c58d2b69ce9cd1e64eb3a94b1"
1374
+ integrity sha512-A0mk4nlVE+r34fl91OdglXVPwhhfzM59IhSxnOigqMkwxFgT8z3i2WlUgzmazzvzSccs2KM4N2HkTS3NEvW96g==
1375
1375
  dependencies:
1376
1376
  ansi-escapes "^4.3.2"
1377
1377
  ansis "^3.17.0"
@@ -1380,7 +1380,6 @@
1380
1380
  debug "^4.4.0"
1381
1381
  ejs "^3.1.10"
1382
1382
  get-package-type "^0.1.0"
1383
- globby "^11.1.0"
1384
1383
  indent-string "^4.0.0"
1385
1384
  is-wsl "^2.2.0"
1386
1385
  lilconfig "^3.1.3"
@@ -1388,13 +1387,15 @@
1388
1387
  semver "^7.6.3"
1389
1388
  string-width "^4.2.3"
1390
1389
  supports-color "^8"
1390
+ tinyglobby "^0.2.14"
1391
1391
  widest-line "^3.1.0"
1392
1392
  wordwrap "^1.0.0"
1393
1393
  wrap-ansi "^7.0.0"
1394
1394
 
1395
1395
  "@oclif/plugin-command-snapshot@^5.2.23":
1396
- version "5.2.38"
1397
- resolved "https://registry.yarnpkg.com/@oclif/plugin-command-snapshot/-/plugin-command-snapshot-5.2.38.tgz#a297c129b97c82de99d854b42304ef5b45c126d9"
1396
+ version "5.3.1"
1397
+ resolved "https://registry.yarnpkg.com/@oclif/plugin-command-snapshot/-/plugin-command-snapshot-5.3.1.tgz#95fbba5980c89398dfb3ade0ae733d972f217a03"
1398
+ integrity sha512-ytLavwqDuQ2+1Z4vV0lREGKf0JP6GTtVvYnrCMk9FL+C+CU6qnPyzI9fttuqwLMbfrsX8Fl8/6TT7dCWdX6HSg==
1398
1399
  dependencies:
1399
1400
  "@oclif/core" "^4"
1400
1401
  ansis "^3.17.0"
@@ -1403,7 +1404,7 @@
1403
1404
  lodash.difference "^4.5.0"
1404
1405
  lodash.get "^4.4.2"
1405
1406
  lodash.sortby "^4.7.0"
1406
- semver "^7.7.1"
1407
+ semver "^7.7.2"
1407
1408
  ts-json-schema-generator "^1.5.1"
1408
1409
 
1409
1410
  "@oclif/plugin-help@^6.2.27":
@@ -1437,6 +1438,11 @@
1437
1438
  version "0.11.0"
1438
1439
  resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz"
1439
1440
 
1441
+ "@pkgr/core@^0.2.7":
1442
+ version "0.2.7"
1443
+ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.7.tgz#eb5014dfd0b03e7f3ba2eeeff506eed89b028058"
1444
+ integrity sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==
1445
+
1440
1446
  "@pnpm/config.env-replace@^1.1.0":
1441
1447
  version "1.1.0"
1442
1448
  resolved "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz"
@@ -1474,10 +1480,10 @@
1474
1480
  strip-ansi "6.0.1"
1475
1481
  ts-retry-promise "^0.8.1"
1476
1482
 
1477
- "@salesforce/core@^8.10.3", "@salesforce/core@^8.11.0", "@salesforce/core@^8.5.1", "@salesforce/core@^8.8.0":
1478
- version "8.11.4"
1479
- resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-8.11.4.tgz#e4f049351540a46e12bb5c1b6574232fd4d1288b"
1480
- integrity sha512-6jrACrCmpic7mrnp4XQ6tiyx5FvHs101dQ2v+m8+aHF97036bul+GeeYuSjVp3ASh0sjR5CotYf7R65chd4H+A==
1483
+ "@salesforce/core@^8.10.3", "@salesforce/core@^8.12.0", "@salesforce/core@^8.5.1", "@salesforce/core@^8.8.0":
1484
+ version "8.14.0"
1485
+ resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-8.14.0.tgz#fcdd8b641221fee668b95ed2ede56b251668077c"
1486
+ integrity sha512-Ta1aY15TfgxLyFNNlkw60Mm3dDtiEb50TSp3/wzrbuMgkEGvFBEZQca/ChrjANXhpw8pURDUTzL4VV/1eGCHrQ==
1481
1487
  dependencies:
1482
1488
  "@jsforce/jsforce-node" "^3.8.2"
1483
1489
  "@salesforce/kit" "^3.2.2"
@@ -1565,11 +1571,11 @@
1565
1571
  terminal-link "^3.0.0"
1566
1572
 
1567
1573
  "@salesforce/source-deploy-retrieve@^12.16.5":
1568
- version "12.19.7"
1569
- resolved "https://registry.yarnpkg.com/@salesforce/source-deploy-retrieve/-/source-deploy-retrieve-12.19.7.tgz#7385702f9436577341490ae66de059b06bf0dff7"
1570
- integrity sha512-VlAHMEOkZsMD6WxUhtOt+dDD6uEiJ5V07+JM9S0qvlAzu4FdlOn4mLCi/z9jYjMSY9O+3Iz5W9dPo99i3LKOaw==
1574
+ version "12.19.10"
1575
+ resolved "https://registry.yarnpkg.com/@salesforce/source-deploy-retrieve/-/source-deploy-retrieve-12.19.10.tgz#56818cc729bc21625b0653ad8b184c86023261b8"
1576
+ integrity sha512-FfiX+Y96QnLjabpWjOxJgGq5Kh+ZQaP+RJa71DO/DtFFa0SlGW+VWqVzjSnNboHyq+nPF6DPDm1wT633zbEYvw==
1571
1577
  dependencies:
1572
- "@salesforce/core" "^8.11.0"
1578
+ "@salesforce/core" "^8.12.0"
1573
1579
  "@salesforce/kit" "^3.2.3"
1574
1580
  "@salesforce/ts-types" "^2.0.12"
1575
1581
  "@salesforce/types" "^1.3.0"
@@ -2540,7 +2546,7 @@ ansi-styles@^6.1.0, ansi-styles@^6.2.1:
2540
2546
  version "6.2.1"
2541
2547
  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz"
2542
2548
 
2543
- ansis@^3.17.0, ansis@^3.3.2:
2549
+ ansis@^3.16.0, ansis@^3.17.0, ansis@^3.3.2:
2544
2550
  version "3.17.0"
2545
2551
  resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.17.0.tgz#fa8d9c2a93fe7d1177e0c17f9eeb562a58a832d7"
2546
2552
 
@@ -2892,7 +2898,7 @@ chalk@^2.4.2:
2892
2898
  escape-string-regexp "^1.0.5"
2893
2899
  supports-color "^5.3.0"
2894
2900
 
2895
- chalk@^4, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0:
2901
+ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0:
2896
2902
  version "4.1.2"
2897
2903
  resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
2898
2904
  dependencies:
@@ -3916,9 +3922,10 @@ faye@^1.4.0:
3916
3922
  tough-cookie "*"
3917
3923
  tunnel-agent "*"
3918
3924
 
3919
- fdir@^6.4.2:
3920
- version "6.4.3"
3921
- resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72"
3925
+ fdir@^6.4.4:
3926
+ version "6.4.6"
3927
+ resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281"
3928
+ integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==
3922
3929
 
3923
3930
  file-entry-cache@^6.0.1:
3924
3931
  version "6.0.1"
@@ -4525,9 +4532,10 @@ ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.0, ignore@^5.3.2:
4525
4532
  version "5.3.2"
4526
4533
  resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz"
4527
4534
 
4528
- ignore@^7.0.3:
4529
- version "7.0.3"
4530
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.3.tgz#397ef9315dfe0595671eefe8b633fec6943ab733"
4535
+ ignore@^7.0.3, ignore@^7.0.5:
4536
+ version "7.0.5"
4537
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9"
4538
+ integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==
4531
4539
 
4532
4540
  immediate@~3.0.5:
4533
4541
  version "3.0.6"
@@ -5668,21 +5676,21 @@ object.values@^1.2.0:
5668
5676
  es-object-atoms "^1.0.0"
5669
5677
 
5670
5678
  oclif@^4.15.26:
5671
- version "4.17.46"
5672
- resolved "https://registry.yarnpkg.com/oclif/-/oclif-4.17.46.tgz#c7bd4315ae4903ad5f9893f6d6e7b3b78c4209fb"
5673
- integrity sha512-huMvamv0zzIXrCbW5sgy40P1L6fJjPe4IfZKSmkmuPNGSpTy+fcNZ0gYwIuMlxiT3RarLYxYie+RVTyJLE3zXw==
5679
+ version "4.18.1"
5680
+ resolved "https://registry.yarnpkg.com/oclif/-/oclif-4.18.1.tgz#697c10712f022a4d8b596b15868a149fcbca3e8d"
5681
+ integrity sha512-C5w/kUuIH3WxtjSfg3vxbdinT1dZuFoNaU7YhBTRx/FshO4WNHPsRqLgFFdx94dezkbskMJFcESS6i5RM96YSw==
5674
5682
  dependencies:
5675
5683
  "@aws-sdk/client-cloudfront" "^3.787.0"
5676
5684
  "@aws-sdk/client-s3" "^3.787.0"
5677
5685
  "@inquirer/confirm" "^3.1.22"
5678
5686
  "@inquirer/input" "^2.2.4"
5679
5687
  "@inquirer/select" "^2.5.0"
5680
- "@oclif/core" "^4.2.10"
5688
+ "@oclif/core" "^4.3.2"
5681
5689
  "@oclif/plugin-help" "^6.2.27"
5682
5690
  "@oclif/plugin-not-found" "^3.2.48"
5683
5691
  "@oclif/plugin-warn-if-update-available" "^3.1.38"
5692
+ ansis "^3.16.0"
5684
5693
  async-retry "^1.3.3"
5685
- chalk "^4"
5686
5694
  change-case "^4"
5687
5695
  debug "^4.4.0"
5688
5696
  ejs "^3.1.10"
@@ -6030,11 +6038,12 @@ pretty-quick@^3.3.1:
6030
6038
  tslib "^2.6.2"
6031
6039
 
6032
6040
  pretty-quick@^4.0.0:
6033
- version "4.1.1"
6034
- resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-4.1.1.tgz#8a0c883e4beeb0eddbe7eda50d7b1251d4f72968"
6041
+ version "4.2.2"
6042
+ resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-4.2.2.tgz#0fc31da666f182fe14e119905fc9829b5b85a234"
6043
+ integrity sha512-uAh96tBW1SsD34VhhDmWuEmqbpfYc/B3j++5MC/6b3Cb8Ow7NJsvKFhg0eoGu2xXX+o9RkahkTK6sUdd8E7g5w==
6035
6044
  dependencies:
6036
- find-up "^5.0.0"
6037
- ignore "^7.0.3"
6045
+ "@pkgr/core" "^0.2.7"
6046
+ ignore "^7.0.5"
6038
6047
  mri "^1.2.0"
6039
6048
  picocolors "^1.1.1"
6040
6049
  picomatch "^4.0.2"
@@ -6369,9 +6378,10 @@ semver@^6.0.0, semver@^6.3.1:
6369
6378
  version "6.3.1"
6370
6379
  resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
6371
6380
 
6372
- semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3, semver@^7.7.1:
6373
- version "7.7.1"
6374
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
6381
+ semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3, semver@^7.7.1, semver@^7.7.2:
6382
+ version "7.7.2"
6383
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58"
6384
+ integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==
6375
6385
 
6376
6386
  sentence-case@^3.0.4:
6377
6387
  version "3.0.4"
@@ -6637,15 +6647,7 @@ srcset@^5.0.0:
6637
6647
  version "5.0.1"
6638
6648
  resolved "https://registry.npmjs.org/srcset/-/srcset-5.0.1.tgz"
6639
6649
 
6640
- "string-width-cjs@npm:string-width@^4.2.0":
6641
- version "4.2.3"
6642
- resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
6643
- dependencies:
6644
- emoji-regex "^8.0.0"
6645
- is-fullwidth-code-point "^3.0.0"
6646
- strip-ansi "^6.0.1"
6647
-
6648
- string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
6650
+ "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
6649
6651
  version "4.2.3"
6650
6652
  resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
6651
6653
  dependencies:
@@ -6713,13 +6715,7 @@ stringify-entities@^4.0.0:
6713
6715
  character-entities-html4 "^2.0.0"
6714
6716
  character-entities-legacy "^3.0.0"
6715
6717
 
6716
- "strip-ansi-cjs@npm:strip-ansi@^6.0.1":
6717
- version "6.0.1"
6718
- resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
6719
- dependencies:
6720
- ansi-regex "^5.0.1"
6721
-
6722
- strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1:
6718
+ "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1:
6723
6719
  version "6.0.1"
6724
6720
  resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
6725
6721
  dependencies:
@@ -6847,11 +6843,12 @@ tinyexec@^1.0.0:
6847
6843
  resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.1.tgz#70c31ab7abbb4aea0a24f55d120e5990bfa1e0b1"
6848
6844
  integrity sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==
6849
6845
 
6850
- tinyglobby@^0.2.9:
6851
- version "0.2.10"
6852
- resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.10.tgz#e712cf2dc9b95a1f5c5bbd159720e15833977a0f"
6846
+ tinyglobby@^0.2.14, tinyglobby@^0.2.9:
6847
+ version "0.2.14"
6848
+ resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d"
6849
+ integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==
6853
6850
  dependencies:
6854
- fdir "^6.4.2"
6851
+ fdir "^6.4.4"
6855
6852
  picomatch "^4.0.2"
6856
6853
 
6857
6854
  tldts-core@^6.1.52:
@@ -7278,7 +7275,7 @@ workerpool@^6.5.1:
7278
7275
  version "6.5.1"
7279
7276
  resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz"
7280
7277
 
7281
- "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
7278
+ "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
7282
7279
  version "7.0.0"
7283
7280
  resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
7284
7281
  dependencies:
@@ -7294,14 +7291,6 @@ wrap-ansi@^6.2.0:
7294
7291
  string-width "^4.1.0"
7295
7292
  strip-ansi "^6.0.0"
7296
7293
 
7297
- wrap-ansi@^7.0.0:
7298
- version "7.0.0"
7299
- resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
7300
- dependencies:
7301
- ansi-styles "^4.0.0"
7302
- string-width "^4.1.0"
7303
- strip-ansi "^6.0.0"
7304
-
7305
7294
  wrap-ansi@^8.1.0:
7306
7295
  version "8.1.0"
7307
7296
  resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz"
@@ -7359,6 +7348,11 @@ yaml@^2.5.1, yaml@^2.7.1:
7359
7348
  resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.1.tgz#44a247d1b88523855679ac7fa7cda6ed7e135cf6"
7360
7349
  integrity sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==
7361
7350
 
7351
+ yaml@^2.8.0:
7352
+ version "2.8.0"
7353
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.0.tgz#15f8c9866211bdc2d3781a0890e44d4fa1a5fff6"
7354
+ integrity sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==
7355
+
7362
7356
  yargs-parser@^18.1.2:
7363
7357
  version "18.1.3"
7364
7358
  resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz"
@@ -33,6 +33,7 @@
33
33
  "name": "format",
34
34
  "required": false,
35
35
  "summary": "Format of the output.",
36
+ "default": "sf",
36
37
  "hasDynamicHelp": false,
37
38
  "multiple": false,
38
39
  "type": "option"
@@ -74,6 +75,15 @@
74
75
  "summary": "Do not print warnings for each Apex file missing annotations.",
75
76
  "allowNo": false,
76
77
  "type": "boolean"
78
+ },
79
+ "filter-by-metadata": {
80
+ "char": "m",
81
+ "description": "When enabled with `manifest`, test selection is based on metadata changes (e.g., Flow, CustomObject) rather than Apex annotations.",
82
+ "name": "filter-by-metadata",
83
+ "required": false,
84
+ "summary": "Only include tests that explicitly declare metadata dependencies matching changed metadata.",
85
+ "allowNo": false,
86
+ "type": "boolean"
77
87
  }
78
88
  },
79
89
  "hasDynamicHelp": false,
@@ -99,5 +109,5 @@
99
109
  ]
100
110
  }
101
111
  },
102
- "version": "1.12.3"
112
+ "version": "1.13.0"
103
113
  }
package/package.json CHANGED
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "name": "apextestlist",
3
3
  "description": "A plugin that generates a list of apex test and test suite names for use in CI/CD pipelines.",
4
- "version": "1.12.3",
4
+ "version": "1.13.0",
5
5
  "dependencies": {
6
- "@oclif/core": "4.3.0",
6
+ "@oclif/core": "4.3.3",
7
7
  "@salesforce/core": "^8.8.0",
8
8
  "@salesforce/sf-plugins-core": "^11.3.12",
9
9
  "@salesforce/source-deploy-retrieve": "^12.16.5",
10
10
  "async": "^3.2.6",
11
- "xml2js": "^0.6.2"
11
+ "xml2js": "^0.6.2",
12
+ "yaml": "^2.8.0"
12
13
  },
13
14
  "devDependencies": {
14
15
  "@commitlint/cli": "^19.6.0",
@@ -1,2 +0,0 @@
1
- export declare const SFDX_PROJECT_FILE_NAME = "sfdx-project.json";
2
- export declare const SEARCHABLE_METADATA_FOLDERS: string[];
@@ -1,4 +0,0 @@
1
- 'use strict';
2
- export const SFDX_PROJECT_FILE_NAME = 'sfdx-project.json';
3
- export const SEARCHABLE_METADATA_FOLDERS = ['classes', 'triggers', 'testSuites'];
4
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/helpers/constants.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAC1D,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/helpers/formatters.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,KAAe;IAC9D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,IAAI;YACP,OAAO,OAAO,CAAC,OAAO,CAAC;gBACrB,KAAK;gBACL,OAAO,EAAE,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;aACtC,CAAC,CAAC;QACL,KAAK,KAAK;YACR,OAAO,OAAO,CAAC,OAAO,CAAC;gBACrB,KAAK;gBACL,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;aACzB,CAAC,CAAC;QACL;YACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;AACH,CAAC"}
@@ -1 +0,0 @@
1
- export declare function getPackageDirectories(ignoreDirs: string[]): Promise<string[]>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"getPackageDirectories.js","sourceRoot":"","sources":["../../src/helpers/getPackageDirectories.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAoB;IAC9D,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;IAE3D,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,MAAM,cAAc,GAAW,MAAM,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACzE,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAgB,CAAC;IAC3E,MAAM,kBAAkB,GAAG,WAAW,CAAC,kBAAkB;SACtD,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;SACrD,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEpE,MAAM,aAAa,GAAG,CACpB,MAAM,OAAO,CAAC,GAAG,CACf,kBAAkB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC,CACnG,CACF,CAAC,IAAI,EAAE,CAAC;IAET,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,WAAmB,EAAE,iBAA2B;IACjF,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IAEzC,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEnC,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/B,OAAO,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CACH,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getRepoRoot.js","sourceRoot":"","sources":["../../src/helpers/getRepoRoot.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,KAAK,UAAU,YAAY,CACzB,GAAW;IAEX,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,6DAA6D;QAC7D,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,4DAA4D;YAC5D,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,6CAA6C;QAC7C,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACjC,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC"}