tsickle: isUndefined()

in packages/concatjs/internal/tsc_wrapped/tsconfig.ts [283:355]


          tsickle: isUndefined(existingBazelOpts.tsickle)
            ? newBazelBazelOpts.tsickle
            : existingBazelOpts.tsickle,

          googmodule: isUndefined(existingBazelOpts.googmodule)
            ? newBazelBazelOpts.googmodule
            : existingBazelOpts.googmodule,

          devmodeTargetOverride: isUndefined(existingBazelOpts.devmodeTargetOverride)
            ? newBazelBazelOpts.devmodeTargetOverride
            : existingBazelOpts.devmodeTargetOverride,
        }
      }

      if (config.extends) {
        let extendedConfigPath = resolveNormalizedPath(path.dirname(configFile), config.extends);
        if (!extendedConfigPath.endsWith('.json')) extendedConfigPath += '.json';

        return readExtendedConfigFile(extendedConfigPath, mergedConfig);
      }

      return {config: mergedConfig};
    };

  const {config, error} = readExtendedConfigFile(tsconfigFile);
  if (error) {
    // target is in the config file we failed to load...
    return [null, [error], {target: ''}];
  }

  const {options, errors, fileNames} =
    ts.parseJsonConfigFileContent(config, host, path.dirname(tsconfigFile));

  // Handle bazel specific options, but make sure not to crash when reading a
  // vanilla tsconfig.json.
  const bazelOpts: BazelOptions = config.bazelOptions || {};
  const target = bazelOpts.target;
  bazelOpts.allowedStrictDeps = bazelOpts.allowedStrictDeps || [];
  bazelOpts.typeBlackListPaths = bazelOpts.typeBlackListPaths || [];
  bazelOpts.compilationTargetSrc = bazelOpts.compilationTargetSrc || [];


  if (errors && errors.length) {
    return [null, errors, {target}];
  }

  // Override the devmode target if devmodeTargetOverride is set
  if (bazelOpts.es5Mode && bazelOpts.devmodeTargetOverride) {
    switch (bazelOpts.devmodeTargetOverride.toLowerCase()) {
      case 'es3':
        options.target = ts.ScriptTarget.ES3;
        break;
      case 'es5':
        options.target = ts.ScriptTarget.ES5;
        break;
      case 'es2015':
        options.target = ts.ScriptTarget.ES2015;
        break;
      case 'es2016':
        options.target = ts.ScriptTarget.ES2016;
        break;
      case 'es2017':
        options.target = ts.ScriptTarget.ES2017;
        break;
      case 'es2018':
        options.target = ts.ScriptTarget.ES2018;
        break;
      case 'esnext':
        options.target = ts.ScriptTarget.ESNext;
        break;
      default:
        console.error(
            'WARNING: your tsconfig.json file specifies an invalid bazelOptions.devmodeTargetOverride value of: \'${bazelOpts.devmodeTargetOverride\'');