113 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/**
 | 
						|
 * @license
 | 
						|
 * Copyright Google Inc. All Rights Reserved.
 | 
						|
 *
 | 
						|
 * Use of this source code is governed by an MIT-style license that can be
 | 
						|
 * found in the LICENSE file at https://angular.io/license
 | 
						|
 */
 | 
						|
import * as ts from 'typescript';
 | 
						|
 | 
						|
import {absoluteFrom, AbsoluteFsPath, getFileSystem, NgtscCompilerHost} from '../../../src/ngtsc/file_system';
 | 
						|
import {TestFile} from '../../../src/ngtsc/file_system/testing';
 | 
						|
import {BundleProgram, makeBundleProgram} from '../../src/packages/bundle_program';
 | 
						|
import {NgccEntryPointConfig} from '../../src/packages/configuration';
 | 
						|
import {EntryPoint, EntryPointFormat} from '../../src/packages/entry_point';
 | 
						|
import {EntryPointBundle} from '../../src/packages/entry_point_bundle';
 | 
						|
import {NgccSourcesCompilerHost} from '../../src/packages/ngcc_compiler_host';
 | 
						|
 | 
						|
export type TestConfig = Pick<NgccEntryPointConfig, 'generateDeepReexports'>;
 | 
						|
 | 
						|
export function makeTestEntryPoint(
 | 
						|
    entryPointName: string, packageName: string = entryPointName, config?: TestConfig): EntryPoint {
 | 
						|
  return {
 | 
						|
    name: entryPointName,
 | 
						|
    packageJson: {name: entryPointName},
 | 
						|
    package: absoluteFrom(`/node_modules/${packageName}`),
 | 
						|
    path: absoluteFrom(`/node_modules/${entryPointName}`),
 | 
						|
    typings: absoluteFrom(`/node_modules/${entryPointName}/index.d.ts`),
 | 
						|
    compiledByAngular: true,
 | 
						|
    ignoreMissingDependencies: false,
 | 
						|
    generateDeepReexports: config !== undefined ? !!config.generateDeepReexports : false,
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 *
 | 
						|
 * @param format The format of the bundle.
 | 
						|
 * @param files The source files to include in the bundle.
 | 
						|
 * @param dtsFiles The typings files to include the bundle.
 | 
						|
 */
 | 
						|
export function makeTestEntryPointBundle(
 | 
						|
    packageName: string, format: EntryPointFormat, isCore: boolean, srcRootNames: AbsoluteFsPath[],
 | 
						|
    dtsRootNames?: AbsoluteFsPath[], config?: TestConfig,
 | 
						|
    enableI18nLegacyMessageIdFormat = false): EntryPointBundle {
 | 
						|
  const entryPoint = makeTestEntryPoint(packageName, packageName, config);
 | 
						|
  const src = makeTestBundleProgram(srcRootNames[0], isCore);
 | 
						|
  const dts =
 | 
						|
      dtsRootNames ? makeTestDtsBundleProgram(dtsRootNames[0], entryPoint.package, isCore) : null;
 | 
						|
  const isFlatCore = isCore && src.r3SymbolsFile === null;
 | 
						|
  return {
 | 
						|
    entryPoint,
 | 
						|
    format,
 | 
						|
    rootDirs: [absoluteFrom('/')],
 | 
						|
    src,
 | 
						|
    dts,
 | 
						|
    isCore,
 | 
						|
    isFlatCore,
 | 
						|
    enableI18nLegacyMessageIdFormat
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
export function makeTestBundleProgram(
 | 
						|
    path: AbsoluteFsPath, isCore: boolean = false,
 | 
						|
    additionalFiles?: AbsoluteFsPath[]): BundleProgram {
 | 
						|
  const fs = getFileSystem();
 | 
						|
  const entryPointPath = fs.dirname(path);
 | 
						|
  const rootDir = fs.dirname(entryPointPath);
 | 
						|
  const options: ts.CompilerOptions =
 | 
						|
      {allowJs: true, maxNodeModuleJsDepth: Infinity, checkJs: false, rootDir, rootDirs: [rootDir]};
 | 
						|
  const host = new NgccSourcesCompilerHost(fs, options, entryPointPath);
 | 
						|
  return makeBundleProgram(
 | 
						|
      fs, isCore, rootDir, path, 'r3_symbols.js', options, host, additionalFiles);
 | 
						|
}
 | 
						|
 | 
						|
export function makeTestDtsBundleProgram(
 | 
						|
    path: AbsoluteFsPath, packagePath: AbsoluteFsPath, isCore: boolean = false): BundleProgram {
 | 
						|
  const fs = getFileSystem();
 | 
						|
  const options = {};
 | 
						|
  const host = new NgtscCompilerHost(fs, options);
 | 
						|
  return makeBundleProgram(fs, isCore, packagePath, path, 'r3_symbols.d.ts', options, host);
 | 
						|
}
 | 
						|
 | 
						|
export function convertToDirectTsLibImport(filesystem: TestFile[]) {
 | 
						|
  return filesystem.map(file => {
 | 
						|
    const contents =
 | 
						|
        file.contents
 | 
						|
            .replace(
 | 
						|
                `import * as tslib_1 from 'tslib';`,
 | 
						|
                `import { __decorate, __metadata, __read, __values, __param, __extends, __assign } from 'tslib';`)
 | 
						|
            .replace(/tslib_1\./g, '');
 | 
						|
    return {...file, contents};
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
export function convertToInlineTsLib(filesystem: TestFile[], suffix: string = '') {
 | 
						|
  return filesystem.map(file => {
 | 
						|
    const contents = file.contents
 | 
						|
                         .replace(`import * as tslib_1 from 'tslib';`, `
 | 
						|
var __decorate${suffix} = null;
 | 
						|
var __metadata${suffix} = null;
 | 
						|
var __read${suffix} = null;
 | 
						|
var __values${suffix} = null;
 | 
						|
var __param${suffix} = null;
 | 
						|
var __extends${suffix} = null;
 | 
						|
var __assign${suffix} = null;
 | 
						|
`).replace(/tslib_1\.([_a-z]+)/gi, '$1' + suffix.replace('$', '$$'));
 | 
						|
    return {...file, contents};
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
export function getRootFiles(testFiles: TestFile[]): AbsoluteFsPath[] {
 | 
						|
  return testFiles.filter(f => f.isRoot !== false).map(f => absoluteFrom(f.name));
 | 
						|
}
 |