async execute(customConfig = {}) {
    /**
     * @typedef MatchSubclassesConfig
     * @property {FindExportsConfig} [exportsConfig] These will be used when no exportsAnalyzerResult
     * is provided (recommended way)
     * @property {FindClassesConfig} [findClassesConfig]
     * @property {GatherFilesConfig} [gatherFilesConfig]
     * @property {GatherFilesConfig} [gatherFilesConfigReference]
     * @property {array} [referenceProjectPath] reference paths
     * @property {array} [targetProjectPath] search target paths
     */
    const cfg = {
      gatherFilesConfig: {},
      gatherFilesConfigReference: {},
      referenceProjectPath: null,
      targetProjectPath: null,
      ...customConfig,
    };

    /**
     * Prepare
     */
    const analyzerResult = await this._prepare(cfg);
    if (analyzerResult) {
      return analyzerResult;
    }

    /**
     * Traverse
     */
    const findExportsAnalyzer = new FindExportsAnalyzer();
    /** @type {FindExportsAnalyzerResult} */
    const refExportsAnalyzerResult = await findExportsAnalyzer.execute({
      targetProjectPath: cfg.referenceProjectPath,
      gatherFilesConfig: cfg.gatherFilesConfigReference,
      skipCheckMatchCompatibility: cfg.skipCheckMatchCompatibility,
      suppressNonCriticalLogs: true,
    });
    const findClassesAnalyzer = new FindClassesAnalyzer();
    /** @type {FindClassesAnalyzerResult} */
    const targetClassesAnalyzerResult = await findClassesAnalyzer.execute({
      targetProjectPath: cfg.targetProjectPath,
      skipCheckMatchCompatibility: cfg.skipCheckMatchCompatibility,
      suppressNonCriticalLogs: true,
    });
    const findRefClassesAnalyzer = new FindClassesAnalyzer();
    /** @type {FindClassesAnalyzerResult} */
    const refClassesAnalyzerResult = await findRefClassesAnalyzer.execute({
      targetProjectPath: cfg.referenceProjectPath,
      gatherFilesConfig: cfg.gatherFilesConfigReference,
      skipCheckMatchCompatibility: cfg.skipCheckMatchCompatibility,
      suppressNonCriticalLogs: true,
    });

    const queryOutput = await matchSubclassesPostprocess(
      refExportsAnalyzerResult,
      targetClassesAnalyzerResult,
      refClassesAnalyzerResult,
      cfg,
    );

    /**
     * Finalize
     */
    return this._finalize(queryOutput, cfg);
  }
Based on ExportsAnalyzerResult of reference project(s) (for instance lion-based-ui)
and targetClassesAnalyzerResult of search-targets (for instance my-app-using-lion-based-ui),
an overview is returned of all matching imports and exports.
@param {MatchSubclassesConfig} customConfig