fix(compiler-cli): update type castings for JSON.parse usage (#40710)
Update usages of JSON.parse to be cast as specific types. PR Close #40710
This commit is contained in:
parent
efd4149e9e
commit
b75d7cb11f
|
@ -256,7 +256,7 @@ export function getEntryPointFormat(
|
||||||
function loadPackageJson(
|
function loadPackageJson(
|
||||||
fs: ReadonlyFileSystem, packageJsonPath: AbsoluteFsPath): EntryPointPackageJson|null {
|
fs: ReadonlyFileSystem, packageJsonPath: AbsoluteFsPath): EntryPointPackageJson|null {
|
||||||
try {
|
try {
|
||||||
return JSON.parse(fs.readFile(packageJsonPath));
|
return JSON.parse(fs.readFile(packageJsonPath)) as EntryPointPackageJson;
|
||||||
} catch {
|
} catch {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ import {EntryPointWithDependencies} from '../dependencies/dependency_host';
|
||||||
|
|
||||||
import {NGCC_VERSION} from './build_marker';
|
import {NGCC_VERSION} from './build_marker';
|
||||||
import {NgccConfiguration} from './configuration';
|
import {NgccConfiguration} from './configuration';
|
||||||
import {getEntryPointInfo, isEntryPoint} from './entry_point';
|
import {getEntryPointInfo, isEntryPoint, PackageJsonFormatProperties} from './entry_point';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages reading and writing a manifest file that contains a list of all the entry-points that
|
* Manages reading and writing a manifest file that contains a list of all the entry-points that
|
||||||
|
@ -197,3 +197,9 @@ export interface EntryPointManifestFile {
|
||||||
lockFileHash: string;
|
lockFileHash: string;
|
||||||
entryPointPaths: EntryPointPaths[];
|
entryPointPaths: EntryPointPaths[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** The JSON format of the entrypoint properties. */
|
||||||
|
export type NewEntryPointPropertiesMap = {
|
||||||
|
[Property in PackageJsonFormatProperties as `${Property}_ivy_ngcc`]?: string;
|
||||||
|
};
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
*/
|
*/
|
||||||
import {absoluteFrom, AbsoluteFsPath, FileSystem, PathSegment} from '../../../../src/ngtsc/file_system';
|
import {absoluteFrom, AbsoluteFsPath, FileSystem, PathSegment} from '../../../../src/ngtsc/file_system';
|
||||||
import {cleanPackageJson} from '../../packages/build_marker';
|
import {cleanPackageJson} from '../../packages/build_marker';
|
||||||
|
import {EntryPointPackageJson} from '../../packages/entry_point';
|
||||||
import {NGCC_BACKUP_EXTENSION} from '../in_place_file_writer';
|
import {NGCC_BACKUP_EXTENSION} from '../in_place_file_writer';
|
||||||
import {NGCC_DIRECTORY} from '../new_entry_point_file_writer';
|
import {NGCC_DIRECTORY} from '../new_entry_point_file_writer';
|
||||||
|
|
||||||
|
@ -30,7 +31,7 @@ export class PackageJsonCleaner implements CleaningStrategy {
|
||||||
return basename === 'package.json';
|
return basename === 'package.json';
|
||||||
}
|
}
|
||||||
clean(path: AbsoluteFsPath, _basename: PathSegment): void {
|
clean(path: AbsoluteFsPath, _basename: PathSegment): void {
|
||||||
const packageJson = JSON.parse(this.fs.readFile(path));
|
const packageJson = JSON.parse(this.fs.readFile(path)) as EntryPointPackageJson;
|
||||||
if (cleanPackageJson(packageJson)) {
|
if (cleanPackageJson(packageJson)) {
|
||||||
this.fs.writeFile(path, `${JSON.stringify(packageJson, null, 2)}\n`);
|
this.fs.writeFile(path, `${JSON.stringify(packageJson, null, 2)}\n`);
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,11 +103,12 @@ export class NewEntryPointFileWriter extends InPlaceFileWriter {
|
||||||
const sourceMapPath = (originalSrcPath + '.map') as AbsoluteFsPath;
|
const sourceMapPath = (originalSrcPath + '.map') as AbsoluteFsPath;
|
||||||
if (this.fs.exists(sourceMapPath)) {
|
if (this.fs.exists(sourceMapPath)) {
|
||||||
try {
|
try {
|
||||||
const sourceMap = JSON.parse(this.fs.readFile(sourceMapPath));
|
const sourceMap =
|
||||||
|
JSON.parse(this.fs.readFile(sourceMapPath)) as {sourceRoot: string, [key: string]: any};
|
||||||
const newSourceMapPath = (newSrcPath + '.map') as AbsoluteFsPath;
|
const newSourceMapPath = (newSrcPath + '.map') as AbsoluteFsPath;
|
||||||
const relativePath =
|
const relativePath =
|
||||||
this.fs.relative(this.fs.dirname(newSourceMapPath), this.fs.dirname(sourceMapPath));
|
this.fs.relative(this.fs.dirname(newSourceMapPath), this.fs.dirname(sourceMapPath));
|
||||||
sourceMap['sourceRoot'] = this.fs.join(relativePath, sourceMap['sourceRoot'] || '.');
|
sourceMap.sourceRoot = this.fs.join(relativePath, sourceMap.sourceRoot || '.');
|
||||||
this.fs.ensureDir(this.fs.dirname(newSourceMapPath));
|
this.fs.ensureDir(this.fs.dirname(newSourceMapPath));
|
||||||
this.fs.writeFile(newSourceMapPath, JSON.stringify(sourceMap));
|
this.fs.writeFile(newSourceMapPath, JSON.stringify(sourceMap));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
@ -130,8 +130,9 @@ export class DirectPackageJsonUpdater implements PackageJsonUpdater {
|
||||||
// Read and parse the `package.json` content.
|
// Read and parse the `package.json` content.
|
||||||
// NOTE: We are not using `preExistingParsedJson` (even if specified) to avoid corrupting the
|
// NOTE: We are not using `preExistingParsedJson` (even if specified) to avoid corrupting the
|
||||||
// content on disk in case `preExistingParsedJson` is outdated.
|
// content on disk in case `preExistingParsedJson` is outdated.
|
||||||
const parsedJson =
|
const parsedJson = this.fs.exists(packageJsonPath) ?
|
||||||
this.fs.exists(packageJsonPath) ? JSON.parse(this.fs.readFile(packageJsonPath)) : {};
|
JSON.parse(this.fs.readFile(packageJsonPath)) as JsonObject :
|
||||||
|
{};
|
||||||
|
|
||||||
// Apply all changes to both the canonical representation (read from disk) and any pre-existing,
|
// Apply all changes to both the canonical representation (read from disk) and any pre-existing,
|
||||||
// in-memory representation.
|
// in-memory representation.
|
||||||
|
|
|
@ -22,6 +22,7 @@ ts_library(
|
||||||
"//packages/compiler-cli/src/ngtsc/logging/testing",
|
"//packages/compiler-cli/src/ngtsc/logging/testing",
|
||||||
"//packages/compiler-cli/src/ngtsc/partial_evaluator",
|
"//packages/compiler-cli/src/ngtsc/partial_evaluator",
|
||||||
"//packages/compiler-cli/src/ngtsc/reflection",
|
"//packages/compiler-cli/src/ngtsc/reflection",
|
||||||
|
"//packages/compiler-cli/src/ngtsc/sourcemaps",
|
||||||
"//packages/compiler-cli/src/ngtsc/testing",
|
"//packages/compiler-cli/src/ngtsc/testing",
|
||||||
"//packages/compiler-cli/src/ngtsc/transform",
|
"//packages/compiler-cli/src/ngtsc/transform",
|
||||||
"//packages/compiler-cli/src/ngtsc/translator",
|
"//packages/compiler-cli/src/ngtsc/translator",
|
||||||
|
|
|
@ -210,7 +210,7 @@ runInEachFileSystem(() => {
|
||||||
|
|
||||||
// Modify the manifest to prove that we use it to find the entry-points
|
// Modify the manifest to prove that we use it to find the entry-points
|
||||||
const manifestPath = _Abs('/sub_entry_points/node_modules/__ngcc_entry_points__.json');
|
const manifestPath = _Abs('/sub_entry_points/node_modules/__ngcc_entry_points__.json');
|
||||||
const manifestFile: EntryPointManifestFile = JSON.parse(fs.readFile(manifestPath));
|
const manifestFile = JSON.parse(fs.readFile(manifestPath)) as EntryPointManifestFile;
|
||||||
manifestFile.entryPointPaths.pop();
|
manifestFile.entryPointPaths.pop();
|
||||||
fs.writeFile(manifestPath, JSON.stringify(manifestFile));
|
fs.writeFile(manifestPath, JSON.stringify(manifestFile));
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ import {ModuleResolver} from '../../src/dependencies/module_resolver';
|
||||||
import {TargetedEntryPointFinder} from '../../src/entry_point_finder/targeted_entry_point_finder';
|
import {TargetedEntryPointFinder} from '../../src/entry_point_finder/targeted_entry_point_finder';
|
||||||
import {NGCC_VERSION} from '../../src/packages/build_marker';
|
import {NGCC_VERSION} from '../../src/packages/build_marker';
|
||||||
import {NgccConfiguration, ProcessedNgccPackageConfig} from '../../src/packages/configuration';
|
import {NgccConfiguration, ProcessedNgccPackageConfig} from '../../src/packages/configuration';
|
||||||
import {EntryPoint} from '../../src/packages/entry_point';
|
import {EntryPoint, EntryPointPackageJson} from '../../src/packages/entry_point';
|
||||||
import {PathMappings} from '../../src/path_mappings';
|
import {PathMappings} from '../../src/path_mappings';
|
||||||
|
|
||||||
runInEachFileSystem(() => {
|
runInEachFileSystem(() => {
|
||||||
|
@ -555,7 +555,7 @@ runInEachFileSystem(() => {
|
||||||
|
|
||||||
// Add a build marker to the package.json
|
// Add a build marker to the package.json
|
||||||
const packageJsonPath = _Abs(`${targetPath}/package.json`);
|
const packageJsonPath = _Abs(`${targetPath}/package.json`);
|
||||||
const packageJson = JSON.parse(fs.readFile(packageJsonPath));
|
const packageJson = JSON.parse(fs.readFile(packageJsonPath)) as EntryPointPackageJson;
|
||||||
packageJson.__processed_by_ivy_ngcc__ = {
|
packageJson.__processed_by_ivy_ngcc__ = {
|
||||||
esm5: NGCC_VERSION,
|
esm5: NGCC_VERSION,
|
||||||
};
|
};
|
||||||
|
@ -579,7 +579,7 @@ runInEachFileSystem(() => {
|
||||||
|
|
||||||
// Add build markers to the package.json
|
// Add build markers to the package.json
|
||||||
const packageJsonPath = _Abs(`${targetPath}/package.json`);
|
const packageJsonPath = _Abs(`${targetPath}/package.json`);
|
||||||
const packageJson = JSON.parse(fs.readFile(packageJsonPath));
|
const packageJson = JSON.parse(fs.readFile(packageJsonPath)) as EntryPointPackageJson;
|
||||||
packageJson.__processed_by_ivy_ngcc__ = {
|
packageJson.__processed_by_ivy_ngcc__ = {
|
||||||
fesm2015: NGCC_VERSION,
|
fesm2015: NGCC_VERSION,
|
||||||
esm5: NGCC_VERSION,
|
esm5: NGCC_VERSION,
|
||||||
|
@ -625,7 +625,7 @@ runInEachFileSystem(() => {
|
||||||
|
|
||||||
// Add build markers to the package.json
|
// Add build markers to the package.json
|
||||||
const packageJsonPath = _Abs(`${targetPath}/package.json`);
|
const packageJsonPath = _Abs(`${targetPath}/package.json`);
|
||||||
const packageJson = JSON.parse(fs.readFile(packageJsonPath));
|
const packageJson = JSON.parse(fs.readFile(packageJsonPath)) as EntryPointPackageJson;
|
||||||
packageJson.__processed_by_ivy_ngcc__ = {
|
packageJson.__processed_by_ivy_ngcc__ = {
|
||||||
esm5: NGCC_VERSION,
|
esm5: NGCC_VERSION,
|
||||||
};
|
};
|
||||||
|
@ -651,7 +651,7 @@ runInEachFileSystem(() => {
|
||||||
|
|
||||||
// Add build markers to the package.json
|
// Add build markers to the package.json
|
||||||
const packageJsonPath = _Abs(`${targetPath}/package.json`);
|
const packageJsonPath = _Abs(`${targetPath}/package.json`);
|
||||||
const packageJson = JSON.parse(fs.readFile(packageJsonPath));
|
const packageJson = JSON.parse(fs.readFile(packageJsonPath)) as EntryPointPackageJson;
|
||||||
packageJson.__processed_by_ivy_ngcc__ = {
|
packageJson.__processed_by_ivy_ngcc__ = {
|
||||||
fesm2015: NGCC_VERSION,
|
fesm2015: NGCC_VERSION,
|
||||||
};
|
};
|
||||||
|
|
|
@ -63,7 +63,7 @@ runInEachFileSystem(() => {
|
||||||
function setupAngularCoreEsm5() {
|
function setupAngularCoreEsm5() {
|
||||||
const pkgPath = _('/node_modules/@angular/core');
|
const pkgPath = _('/node_modules/@angular/core');
|
||||||
const pkgJsonPath = fs.join(pkgPath, 'package.json');
|
const pkgJsonPath = fs.join(pkgPath, 'package.json');
|
||||||
const pkgJson = JSON.parse(fs.readFile(pkgJsonPath));
|
const pkgJson = JSON.parse(fs.readFile(pkgJsonPath)) as EntryPointPackageJson;
|
||||||
|
|
||||||
fs.ensureDir(fs.join(pkgPath, 'fesm5'));
|
fs.ensureDir(fs.join(pkgPath, 'fesm5'));
|
||||||
fs.writeFile(
|
fs.writeFile(
|
||||||
|
@ -1390,12 +1390,13 @@ runInEachFileSystem(() => {
|
||||||
{basePath: '/node_modules', propertiesToConsider: ['main'], logger: new MockLogger()});
|
{basePath: '/node_modules', propertiesToConsider: ['main'], logger: new MockLogger()});
|
||||||
// Check that common/testing ES5 was processed
|
// Check that common/testing ES5 was processed
|
||||||
let commonTesting =
|
let commonTesting =
|
||||||
JSON.parse(fs.readFile(_('/node_modules/@angular/common/testing/package.json')));
|
JSON.parse(fs.readFile(_('/node_modules/@angular/common/testing/package.json'))) as
|
||||||
|
EntryPointPackageJson;
|
||||||
expect(hasBeenProcessed(commonTesting, 'main')).toBe(true);
|
expect(hasBeenProcessed(commonTesting, 'main')).toBe(true);
|
||||||
expect(hasBeenProcessed(commonTesting, 'esm2015')).toBe(false);
|
expect(hasBeenProcessed(commonTesting, 'esm2015')).toBe(false);
|
||||||
// Modify the manifest to test that is has no effect
|
// Modify the manifest to test that is has no effect
|
||||||
let manifest: EntryPointManifestFile =
|
let manifest = JSON.parse(fs.readFile(_('/node_modules/__ngcc_entry_points__.json'))) as
|
||||||
JSON.parse(fs.readFile(_('/node_modules/__ngcc_entry_points__.json')));
|
EntryPointManifestFile;
|
||||||
manifest.entryPointPaths =
|
manifest.entryPointPaths =
|
||||||
manifest.entryPointPaths.filter(paths => paths[1] !== '@angular/common/testing');
|
manifest.entryPointPaths.filter(paths => paths[1] !== '@angular/common/testing');
|
||||||
fs.writeFile(_('/node_modules/__ngcc_entry_points__.json'), JSON.stringify(manifest));
|
fs.writeFile(_('/node_modules/__ngcc_entry_points__.json'), JSON.stringify(manifest));
|
||||||
|
@ -1409,12 +1410,14 @@ runInEachFileSystem(() => {
|
||||||
});
|
});
|
||||||
// Check that common/testing ES2015 is now processed, despite the manifest not listing it
|
// Check that common/testing ES2015 is now processed, despite the manifest not listing it
|
||||||
commonTesting =
|
commonTesting =
|
||||||
JSON.parse(fs.readFile(_('/node_modules/@angular/common/testing/package.json')));
|
JSON.parse(fs.readFile(_('/node_modules/@angular/common/testing/package.json'))) as
|
||||||
|
EntryPointPackageJson;
|
||||||
expect(hasBeenProcessed(commonTesting, 'main')).toBe(true);
|
expect(hasBeenProcessed(commonTesting, 'main')).toBe(true);
|
||||||
expect(hasBeenProcessed(commonTesting, 'esm2015')).toBe(true);
|
expect(hasBeenProcessed(commonTesting, 'esm2015')).toBe(true);
|
||||||
// Check that the newly computed manifest has written to disk, containing the path that we
|
// Check that the newly computed manifest has written to disk, containing the path that we
|
||||||
// had removed earlier.
|
// had removed earlier.
|
||||||
manifest = JSON.parse(fs.readFile(_('/node_modules/__ngcc_entry_points__.json')));
|
manifest = JSON.parse(fs.readFile(_('/node_modules/__ngcc_entry_points__.json'))) as
|
||||||
|
EntryPointManifestFile;
|
||||||
expect(manifest.entryPointPaths).toContain([
|
expect(manifest.entryPointPaths).toContain([
|
||||||
'@angular/common',
|
'@angular/common',
|
||||||
'@angular/common/testing',
|
'@angular/common/testing',
|
||||||
|
@ -2248,7 +2251,8 @@ runInEachFileSystem(() => {
|
||||||
|
|
||||||
function loadPackage(
|
function loadPackage(
|
||||||
packageName: string, basePath: AbsoluteFsPath = _('/node_modules')): EntryPointPackageJson {
|
packageName: string, basePath: AbsoluteFsPath = _('/node_modules')): EntryPointPackageJson {
|
||||||
return JSON.parse(fs.readFile(fs.resolve(basePath, packageName, 'package.json')));
|
return JSON.parse(fs.readFile(fs.resolve(basePath, packageName, 'package.json'))) as
|
||||||
|
EntryPointPackageJson;
|
||||||
}
|
}
|
||||||
|
|
||||||
function initMockFileSystem(fs: FileSystem, testFiles: Folder) {
|
function initMockFileSystem(fs: FileSystem, testFiles: Folder) {
|
||||||
|
|
|
@ -85,48 +85,49 @@ runInEachFileSystem(() => {
|
||||||
const COMMON_PACKAGE_PATH = _('/node_modules/@angular/common/package.json');
|
const COMMON_PACKAGE_PATH = _('/node_modules/@angular/common/package.json');
|
||||||
const fs = getFileSystem();
|
const fs = getFileSystem();
|
||||||
const pkgUpdater = new DirectPackageJsonUpdater(fs);
|
const pkgUpdater = new DirectPackageJsonUpdater(fs);
|
||||||
let pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH));
|
// TODO: Determine the correct/best type for the `pkg` type.
|
||||||
|
let pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH)) as EntryPointPackageJson;
|
||||||
expect(pkg.__processed_by_ivy_ngcc__).toBeUndefined();
|
expect(pkg.__processed_by_ivy_ngcc__).toBeUndefined();
|
||||||
expect(pkg.scripts).toBeUndefined();
|
expect(pkg.scripts).toBeUndefined();
|
||||||
|
|
||||||
markAsProcessed(pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['fesm2015', 'fesm5']);
|
markAsProcessed(pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['fesm2015', 'fesm5']);
|
||||||
pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH));
|
pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH)) as EntryPointPackageJson;
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.fesm2015).toBe('0.0.0-PLACEHOLDER');
|
expect(pkg.__processed_by_ivy_ngcc__!.fesm2015).toBe('0.0.0-PLACEHOLDER');
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.fesm5).toBe('0.0.0-PLACEHOLDER');
|
expect(pkg.__processed_by_ivy_ngcc__!.fesm5).toBe('0.0.0-PLACEHOLDER');
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.esm2015).toBeUndefined();
|
expect(pkg.__processed_by_ivy_ngcc__!.esm2015).toBeUndefined();
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.esm5).toBeUndefined();
|
expect(pkg.__processed_by_ivy_ngcc__!.esm5).toBeUndefined();
|
||||||
expect(pkg.scripts.prepublishOnly).toBeDefined();
|
expect(pkg.scripts!.prepublishOnly).toBeDefined();
|
||||||
|
|
||||||
markAsProcessed(pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['esm2015', 'esm5']);
|
markAsProcessed(pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['esm2015', 'esm5']);
|
||||||
pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH));
|
pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH)) as EntryPointPackageJson;
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.fesm2015).toBe('0.0.0-PLACEHOLDER');
|
expect(pkg.__processed_by_ivy_ngcc__!.fesm2015).toBe('0.0.0-PLACEHOLDER');
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.fesm5).toBe('0.0.0-PLACEHOLDER');
|
expect(pkg.__processed_by_ivy_ngcc__!.fesm5).toBe('0.0.0-PLACEHOLDER');
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.esm2015).toBe('0.0.0-PLACEHOLDER');
|
expect(pkg.__processed_by_ivy_ngcc__!.esm2015).toBe('0.0.0-PLACEHOLDER');
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.esm5).toBe('0.0.0-PLACEHOLDER');
|
expect(pkg.__processed_by_ivy_ngcc__!.esm5).toBe('0.0.0-PLACEHOLDER');
|
||||||
expect(pkg.scripts.prepublishOnly).toBeDefined();
|
expect(pkg.scripts!.prepublishOnly).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should update the packageJson object in-place', () => {
|
it('should update the packageJson object in-place', () => {
|
||||||
const COMMON_PACKAGE_PATH = _('/node_modules/@angular/common/package.json');
|
const COMMON_PACKAGE_PATH = _('/node_modules/@angular/common/package.json');
|
||||||
const fs = getFileSystem();
|
const fs = getFileSystem();
|
||||||
const pkgUpdater = new DirectPackageJsonUpdater(fs);
|
const pkgUpdater = new DirectPackageJsonUpdater(fs);
|
||||||
const pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH));
|
const pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH)) as EntryPointPackageJson;
|
||||||
expect(pkg.__processed_by_ivy_ngcc__).toBeUndefined();
|
expect(pkg.__processed_by_ivy_ngcc__).toBeUndefined();
|
||||||
expect(pkg.scripts).toBeUndefined();
|
expect(pkg.scripts).toBeUndefined();
|
||||||
|
|
||||||
markAsProcessed(pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['fesm2015', 'fesm5']);
|
markAsProcessed(pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['fesm2015', 'fesm5']);
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.fesm2015).toBe('0.0.0-PLACEHOLDER');
|
expect(pkg.__processed_by_ivy_ngcc__!.fesm2015).toBe('0.0.0-PLACEHOLDER');
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.fesm5).toBe('0.0.0-PLACEHOLDER');
|
expect(pkg.__processed_by_ivy_ngcc__!.fesm5).toBe('0.0.0-PLACEHOLDER');
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.esm2015).toBeUndefined();
|
expect(pkg.__processed_by_ivy_ngcc__!.esm2015).toBeUndefined();
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.esm5).toBeUndefined();
|
expect(pkg.__processed_by_ivy_ngcc__!.esm5).toBeUndefined();
|
||||||
expect(pkg.scripts.prepublishOnly).toBeDefined();
|
expect(pkg.scripts!.prepublishOnly).toBeDefined();
|
||||||
|
|
||||||
markAsProcessed(pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['esm2015', 'esm5']);
|
markAsProcessed(pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['esm2015', 'esm5']);
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.fesm2015).toBe('0.0.0-PLACEHOLDER');
|
expect(pkg.__processed_by_ivy_ngcc__!.fesm2015).toBe('0.0.0-PLACEHOLDER');
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.fesm5).toBe('0.0.0-PLACEHOLDER');
|
expect(pkg.__processed_by_ivy_ngcc__!.fesm5).toBe('0.0.0-PLACEHOLDER');
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.esm2015).toBe('0.0.0-PLACEHOLDER');
|
expect(pkg.__processed_by_ivy_ngcc__!.esm2015).toBe('0.0.0-PLACEHOLDER');
|
||||||
expect(pkg.__processed_by_ivy_ngcc__.esm5).toBe('0.0.0-PLACEHOLDER');
|
expect(pkg.__processed_by_ivy_ngcc__!.esm5).toBe('0.0.0-PLACEHOLDER');
|
||||||
expect(pkg.scripts.prepublishOnly).toBeDefined();
|
expect(pkg.scripts!.prepublishOnly).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should one perform one write operation for all updated properties', () => {
|
it('should one perform one write operation for all updated properties', () => {
|
||||||
|
@ -134,7 +135,7 @@ runInEachFileSystem(() => {
|
||||||
const fs = getFileSystem();
|
const fs = getFileSystem();
|
||||||
const pkgUpdater = new DirectPackageJsonUpdater(fs);
|
const pkgUpdater = new DirectPackageJsonUpdater(fs);
|
||||||
const writeFileSpy = spyOn(fs, 'writeFile');
|
const writeFileSpy = spyOn(fs, 'writeFile');
|
||||||
let pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH));
|
let pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH)) as EntryPointPackageJson;
|
||||||
|
|
||||||
markAsProcessed(
|
markAsProcessed(
|
||||||
pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['fesm2015', 'fesm5', 'esm2015', 'esm5']);
|
pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['fesm2015', 'fesm5', 'esm2015', 'esm5']);
|
||||||
|
@ -146,34 +147,34 @@ runInEachFileSystem(() => {
|
||||||
const fs = getFileSystem();
|
const fs = getFileSystem();
|
||||||
const pkgUpdater = new DirectPackageJsonUpdater(fs);
|
const pkgUpdater = new DirectPackageJsonUpdater(fs);
|
||||||
const prepublishOnly = 'existing script';
|
const prepublishOnly = 'existing script';
|
||||||
let pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH));
|
let pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH)) as EntryPointPackageJson;
|
||||||
pkg.scripts = {prepublishOnly};
|
pkg.scripts = {prepublishOnly};
|
||||||
|
|
||||||
markAsProcessed(pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['fesm2015']);
|
markAsProcessed(pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['fesm2015']);
|
||||||
pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH));
|
pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH)) as EntryPointPackageJson;
|
||||||
expect(pkg.scripts.prepublishOnly).toContain('This is not allowed');
|
expect(pkg.scripts!.prepublishOnly).toContain('This is not allowed');
|
||||||
expect(pkg.scripts.prepublishOnly__ivy_ngcc_bak).toBe(prepublishOnly);
|
expect(pkg.scripts!.prepublishOnly__ivy_ngcc_bak).toBe(prepublishOnly);
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should not keep backup of overwritten 'prepublishOnly' script`, () => {
|
it(`should not keep backup of overwritten 'prepublishOnly' script`, () => {
|
||||||
const COMMON_PACKAGE_PATH = _('/node_modules/@angular/common/package.json');
|
const COMMON_PACKAGE_PATH = _('/node_modules/@angular/common/package.json');
|
||||||
const fs = getFileSystem();
|
const fs = getFileSystem();
|
||||||
const pkgUpdater = new DirectPackageJsonUpdater(fs);
|
const pkgUpdater = new DirectPackageJsonUpdater(fs);
|
||||||
let pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH));
|
let pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH)) as EntryPointPackageJson;
|
||||||
|
|
||||||
markAsProcessed(pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['fesm2015']);
|
markAsProcessed(pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['fesm2015']);
|
||||||
|
|
||||||
pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH));
|
pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH)) as EntryPointPackageJson;
|
||||||
expect(pkg.scripts.prepublishOnly).toContain('This is not allowed');
|
expect(pkg.scripts!.prepublishOnly).toContain('This is not allowed');
|
||||||
expect(pkg.scripts.prepublishOnly__ivy_ngcc_bak).toBeUndefined();
|
expect(pkg.scripts!.prepublishOnly__ivy_ngcc_bak).toBeUndefined();
|
||||||
|
|
||||||
// Running again, now that there is `prepublishOnly` script (created by `ngcc`), it should
|
// Running again, now that there is `prepublishOnly` script (created by `ngcc`), it should
|
||||||
// still not back it up as `prepublishOnly__ivy_ngcc_bak`.
|
// still not back it up as `prepublishOnly__ivy_ngcc_bak`.
|
||||||
markAsProcessed(pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['fesm2015']);
|
markAsProcessed(pkgUpdater, pkg, COMMON_PACKAGE_PATH, ['fesm2015']);
|
||||||
|
|
||||||
pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH));
|
pkg = JSON.parse(fs.readFile(COMMON_PACKAGE_PATH)) as EntryPointPackageJson;
|
||||||
expect(pkg.scripts.prepublishOnly).toContain('This is not allowed');
|
expect(pkg.scripts!.prepublishOnly).toContain('This is not allowed');
|
||||||
expect(pkg.scripts.prepublishOnly__ivy_ngcc_bak).toBeUndefined();
|
expect(pkg.scripts!.prepublishOnly__ivy_ngcc_bak).toBeUndefined();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ import {createHash} from 'crypto';
|
||||||
import {absoluteFrom, getFileSystem, ReadonlyFileSystem} from '../../../src/ngtsc/file_system';
|
import {absoluteFrom, getFileSystem, ReadonlyFileSystem} from '../../../src/ngtsc/file_system';
|
||||||
import {runInEachFileSystem} from '../../../src/ngtsc/file_system/testing';
|
import {runInEachFileSystem} from '../../../src/ngtsc/file_system/testing';
|
||||||
import {loadTestFiles} from '../../../src/ngtsc/testing';
|
import {loadTestFiles} from '../../../src/ngtsc/testing';
|
||||||
import {DEFAULT_NGCC_CONFIG, NgccConfiguration, ProcessLockingConfiguration} from '../../src/packages/configuration';
|
import {DEFAULT_NGCC_CONFIG, NgccConfiguration, NgccProjectConfig, ProcessLockingConfiguration, RawNgccPackageConfig} from '../../src/packages/configuration';
|
||||||
|
|
||||||
|
|
||||||
runInEachFileSystem(() => {
|
runInEachFileSystem(() => {
|
||||||
|
@ -567,7 +567,9 @@ runInEachFileSystem(() => {
|
||||||
entryPoints: {'./default-level-entry-point': {}},
|
entryPoints: {'./default-level-entry-point': {}},
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
afterEach(() => DEFAULT_NGCC_CONFIG.packages = JSON.parse(originalDefaultConfig));
|
afterEach(
|
||||||
|
() => DEFAULT_NGCC_CONFIG.packages =
|
||||||
|
JSON.parse(originalDefaultConfig) as NgccProjectConfig['packages']);
|
||||||
|
|
||||||
it('should return configuration for a package found in the default config', () => {
|
it('should return configuration for a package found in the default config', () => {
|
||||||
const readFileSpy = spyOn(fs, 'readFile').and.callThrough();
|
const readFileSpy = spyOn(fs, 'readFile').and.callThrough();
|
||||||
|
|
|
@ -265,16 +265,18 @@ runInEachFileSystem(() => {
|
||||||
it('should write the ngcc version', () => {
|
it('should write the ngcc version', () => {
|
||||||
fs.writeFile(_Abs('/project/yarn.lock'), 'LOCK FILE CONTENTS');
|
fs.writeFile(_Abs('/project/yarn.lock'), 'LOCK FILE CONTENTS');
|
||||||
manifest.writeEntryPointManifest(_Abs('/project/node_modules'), []);
|
manifest.writeEntryPointManifest(_Abs('/project/node_modules'), []);
|
||||||
const file: EntryPointManifestFile =
|
const file =
|
||||||
JSON.parse(fs.readFile(_Abs('/project/node_modules/__ngcc_entry_points__.json')));
|
JSON.parse(fs.readFile(_Abs('/project/node_modules/__ngcc_entry_points__.json'))) as
|
||||||
|
EntryPointManifestFile;
|
||||||
expect(file.ngccVersion).toEqual(NGCC_VERSION);
|
expect(file.ngccVersion).toEqual(NGCC_VERSION);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should write a hash of the yarn.lock file', () => {
|
it('should write a hash of the yarn.lock file', () => {
|
||||||
fs.writeFile(_Abs('/project/yarn.lock'), 'LOCK FILE CONTENTS');
|
fs.writeFile(_Abs('/project/yarn.lock'), 'LOCK FILE CONTENTS');
|
||||||
manifest.writeEntryPointManifest(_Abs('/project/node_modules'), []);
|
manifest.writeEntryPointManifest(_Abs('/project/node_modules'), []);
|
||||||
const file: EntryPointManifestFile =
|
const file =
|
||||||
JSON.parse(fs.readFile(_Abs('/project/node_modules/__ngcc_entry_points__.json')));
|
JSON.parse(fs.readFile(_Abs('/project/node_modules/__ngcc_entry_points__.json'))) as
|
||||||
|
EntryPointManifestFile;
|
||||||
expect(file.lockFileHash)
|
expect(file.lockFileHash)
|
||||||
.toEqual(createHash('md5').update('LOCK FILE CONTENTS').digest('hex'));
|
.toEqual(createHash('md5').update('LOCK FILE CONTENTS').digest('hex'));
|
||||||
});
|
});
|
||||||
|
@ -282,8 +284,9 @@ runInEachFileSystem(() => {
|
||||||
it('should write a hash of the package-lock.json file', () => {
|
it('should write a hash of the package-lock.json file', () => {
|
||||||
fs.writeFile(_Abs('/project/package-lock.json'), 'LOCK FILE CONTENTS');
|
fs.writeFile(_Abs('/project/package-lock.json'), 'LOCK FILE CONTENTS');
|
||||||
manifest.writeEntryPointManifest(_Abs('/project/node_modules'), []);
|
manifest.writeEntryPointManifest(_Abs('/project/node_modules'), []);
|
||||||
const file: EntryPointManifestFile =
|
const file =
|
||||||
JSON.parse(fs.readFile(_Abs('/project/node_modules/__ngcc_entry_points__.json')));
|
JSON.parse(fs.readFile(_Abs('/project/node_modules/__ngcc_entry_points__.json'))) as
|
||||||
|
EntryPointManifestFile;
|
||||||
expect(file.lockFileHash)
|
expect(file.lockFileHash)
|
||||||
.toEqual(createHash('md5').update('LOCK FILE CONTENTS').digest('hex'));
|
.toEqual(createHash('md5').update('LOCK FILE CONTENTS').digest('hex'));
|
||||||
});
|
});
|
||||||
|
@ -291,8 +294,9 @@ runInEachFileSystem(() => {
|
||||||
it('should write a hash of the project config', () => {
|
it('should write a hash of the project config', () => {
|
||||||
fs.writeFile(_Abs('/project/package-lock.json'), 'LOCK FILE CONTENTS');
|
fs.writeFile(_Abs('/project/package-lock.json'), 'LOCK FILE CONTENTS');
|
||||||
manifest.writeEntryPointManifest(_Abs('/project/node_modules'), []);
|
manifest.writeEntryPointManifest(_Abs('/project/node_modules'), []);
|
||||||
const file: EntryPointManifestFile =
|
const file =
|
||||||
JSON.parse(fs.readFile(_Abs('/project/node_modules/__ngcc_entry_points__.json')));
|
JSON.parse(fs.readFile(_Abs('/project/node_modules/__ngcc_entry_points__.json'))) as
|
||||||
|
EntryPointManifestFile;
|
||||||
expect(file.configFileHash).toEqual(config.hash);
|
expect(file.configFileHash).toEqual(config.hash);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -329,8 +333,9 @@ runInEachFileSystem(() => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
manifest.writeEntryPointManifest(_Abs('/project/node_modules'), [entryPoint1, entryPoint2]);
|
manifest.writeEntryPointManifest(_Abs('/project/node_modules'), [entryPoint1, entryPoint2]);
|
||||||
const file: EntryPointManifestFile =
|
const file =
|
||||||
JSON.parse(fs.readFile(_Abs('/project/node_modules/__ngcc_entry_points__.json')));
|
JSON.parse(fs.readFile(_Abs('/project/node_modules/__ngcc_entry_points__.json'))) as
|
||||||
|
EntryPointManifestFile;
|
||||||
expect(file.entryPointPaths).toEqual([
|
expect(file.entryPointPaths).toEqual([
|
||||||
[
|
[
|
||||||
'package-1',
|
'package-1',
|
||||||
|
|
|
@ -11,7 +11,7 @@ import {runInEachFileSystem} from '../../../src/ngtsc/file_system/testing';
|
||||||
import {MockLogger} from '../../../src/ngtsc/logging/testing';
|
import {MockLogger} from '../../../src/ngtsc/logging/testing';
|
||||||
import {loadTestFiles} from '../../../src/ngtsc/testing';
|
import {loadTestFiles} from '../../../src/ngtsc/testing';
|
||||||
import {NgccConfiguration, ProcessedNgccPackageConfig} from '../../src/packages/configuration';
|
import {NgccConfiguration, ProcessedNgccPackageConfig} from '../../src/packages/configuration';
|
||||||
import {EntryPoint, EntryPointJsonProperty, getEntryPointFormat, getEntryPointInfo, IGNORED_ENTRY_POINT, INCOMPATIBLE_ENTRY_POINT, isEntryPoint, NO_ENTRY_POINT, SUPPORTED_FORMAT_PROPERTIES} from '../../src/packages/entry_point';
|
import {EntryPoint, EntryPointJsonProperty, EntryPointPackageJson, getEntryPointFormat, getEntryPointInfo, IGNORED_ENTRY_POINT, INCOMPATIBLE_ENTRY_POINT, isEntryPoint, NO_ENTRY_POINT, SUPPORTED_FORMAT_PROPERTIES} from '../../src/packages/entry_point';
|
||||||
|
|
||||||
runInEachFileSystem(() => {
|
runInEachFileSystem(() => {
|
||||||
describe('getEntryPointInfo()', () => {
|
describe('getEntryPointInfo()', () => {
|
||||||
|
@ -116,8 +116,8 @@ runInEachFileSystem(() => {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const config = new NgccConfiguration(fs, _('/project'));
|
const config = new NgccConfiguration(fs, _('/project'));
|
||||||
const info: EntryPoint =
|
const info = getEntryPointInfo(fs, config, new MockLogger(), SOME_PACKAGE, entryPointPath) as
|
||||||
getEntryPointInfo(fs, config, new MockLogger(), SOME_PACKAGE, entryPointPath) as any;
|
EntryPoint;
|
||||||
|
|
||||||
expect(info.packageJson).toEqual(jasmine.objectContaining({packageVersion: '1'}));
|
expect(info.packageJson).toEqual(jasmine.objectContaining({packageVersion: '1'}));
|
||||||
});
|
});
|
||||||
|
@ -159,8 +159,8 @@ runInEachFileSystem(() => {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const config = new NgccConfiguration(fs, _('/project'));
|
const config = new NgccConfiguration(fs, _('/project'));
|
||||||
const info: EntryPoint =
|
const info = getEntryPointInfo(fs, config, new MockLogger(), SOME_PACKAGE, entryPointPath) as
|
||||||
getEntryPointInfo(fs, config, new MockLogger(), SOME_PACKAGE, entryPointPath) as any;
|
EntryPoint;
|
||||||
|
|
||||||
expect(info.packageJson).toEqual(jasmine.objectContaining({packageVersion: '3'}));
|
expect(info.packageJson).toEqual(jasmine.objectContaining({packageVersion: '3'}));
|
||||||
});
|
});
|
||||||
|
@ -233,7 +233,8 @@ runInEachFileSystem(() => {
|
||||||
]);
|
]);
|
||||||
const config = new NgccConfiguration(fs, _('/project'));
|
const config = new NgccConfiguration(fs, _('/project'));
|
||||||
const override =
|
const override =
|
||||||
JSON.parse(createPackageJson('missing_package_json', {excludes: ['name']}));
|
JSON.parse(createPackageJson('missing_package_json', {excludes: ['name']})) as
|
||||||
|
Partial<EntryPointPackageJson>;
|
||||||
spyOn(config, 'getPackageConfig')
|
spyOn(config, 'getPackageConfig')
|
||||||
.and.returnValue(new ProcessedNgccPackageConfig(
|
.and.returnValue(new ProcessedNgccPackageConfig(
|
||||||
fs, _('/project/node_modules/some_package/'),
|
fs, _('/project/node_modules/some_package/'),
|
||||||
|
@ -762,7 +763,7 @@ export function createPackageJson(
|
||||||
typingsIsArray?: boolean,
|
typingsIsArray?: boolean,
|
||||||
version?: string
|
version?: string
|
||||||
} = {}): string {
|
} = {}): string {
|
||||||
const packageJson: any = {
|
const packageJson: EntryPointPackageJson = {
|
||||||
name: (entryPointName === '') ? 'some_package' : `some_package/${entryPointName}`,
|
name: (entryPointName === '') ? 'some_package' : `some_package/${entryPointName}`,
|
||||||
version,
|
version,
|
||||||
[typingsProp]: typingsIsArray ? [`./${entryPointName}.d.ts`] : `./${entryPointName}.d.ts`,
|
[typingsProp]: typingsIsArray ? [`./${entryPointName}.d.ts`] : `./${entryPointName}.d.ts`,
|
||||||
|
@ -782,5 +783,6 @@ export function createPackageJson(
|
||||||
}
|
}
|
||||||
|
|
||||||
export function loadPackageJson(fs: ReadonlyFileSystem, packagePath: string) {
|
export function loadPackageJson(fs: ReadonlyFileSystem, packagePath: string) {
|
||||||
return JSON.parse(fs.readFile(fs.resolve(packagePath + '/package.json')));
|
return JSON.parse(fs.readFile(fs.resolve(packagePath + '/package.json'))) as
|
||||||
|
EntryPointPackageJson;
|
||||||
}
|
}
|
||||||
|
|
|
@ -641,7 +641,8 @@ UndecoratedBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: UndecoratedBase, vie
|
||||||
expect(sourceFile.contents)
|
expect(sourceFile.contents)
|
||||||
.toEqual(RENDERED_CONTENTS + '\n' + generateMapFileComment('file.js.map'));
|
.toEqual(RENDERED_CONTENTS + '\n' + generateMapFileComment('file.js.map'));
|
||||||
expect(mapFile.path).toEqual(_('/node_modules/test-package/src/file.js.map'));
|
expect(mapFile.path).toEqual(_('/node_modules/test-package/src/file.js.map'));
|
||||||
expect(JSON.parse(mapFile.contents)).toEqual(MERGED_OUTPUT_PROGRAM_MAP.toObject());
|
expect(JSON.parse(mapFile.contents) as any)
|
||||||
|
.toEqual(MERGED_OUTPUT_PROGRAM_MAP.toObject());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ runInEachFileSystem(() => {
|
||||||
fs.ensureDir(fs.dirname(packageJsonPath));
|
fs.ensureDir(fs.dirname(packageJsonPath));
|
||||||
fs.writeFile(packageJsonPath, JSON.stringify(packageJson));
|
fs.writeFile(packageJsonPath, JSON.stringify(packageJson));
|
||||||
strategy.clean(packageJsonPath, fs.basename(packageJsonPath));
|
strategy.clean(packageJsonPath, fs.basename(packageJsonPath));
|
||||||
const newPackageJson: EntryPointPackageJson = JSON.parse(fs.readFile(packageJsonPath));
|
const newPackageJson = JSON.parse(fs.readFile(packageJsonPath)) as EntryPointPackageJson;
|
||||||
expect(newPackageJson).toEqual({name: 'test-package'});
|
expect(newPackageJson).toEqual({name: 'test-package'});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ runInEachFileSystem(() => {
|
||||||
fs.ensureDir(fs.dirname(packageJsonPath));
|
fs.ensureDir(fs.dirname(packageJsonPath));
|
||||||
fs.writeFile(packageJsonPath, JSON.stringify(packageJson));
|
fs.writeFile(packageJsonPath, JSON.stringify(packageJson));
|
||||||
strategy.clean(packageJsonPath, fs.basename(packageJsonPath));
|
strategy.clean(packageJsonPath, fs.basename(packageJsonPath));
|
||||||
const newPackageJson: EntryPointPackageJson = JSON.parse(fs.readFile(packageJsonPath));
|
const newPackageJson = JSON.parse(fs.readFile(packageJsonPath)) as EntryPointPackageJson;
|
||||||
expect(newPackageJson).toEqual({name: 'test-package'});
|
expect(newPackageJson).toEqual({name: 'test-package'});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ runInEachFileSystem(() => {
|
||||||
fs.ensureDir(fs.dirname(packageJsonPath));
|
fs.ensureDir(fs.dirname(packageJsonPath));
|
||||||
fs.writeFile(packageJsonPath, JSON.stringify(packageJson));
|
fs.writeFile(packageJsonPath, JSON.stringify(packageJson));
|
||||||
strategy.clean(packageJsonPath, fs.basename(packageJsonPath));
|
strategy.clean(packageJsonPath, fs.basename(packageJsonPath));
|
||||||
const newPackageJson: EntryPointPackageJson = JSON.parse(fs.readFile(packageJsonPath));
|
const newPackageJson = JSON.parse(fs.readFile(packageJsonPath)) as EntryPointPackageJson;
|
||||||
expect(newPackageJson).toEqual({name: 'test-package'});
|
expect(newPackageJson).toEqual({name: 'test-package'});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ runInEachFileSystem(() => {
|
||||||
fs.ensureDir(fs.dirname(packageJsonPath));
|
fs.ensureDir(fs.dirname(packageJsonPath));
|
||||||
fs.writeFile(packageJsonPath, JSON.stringify(packageJson));
|
fs.writeFile(packageJsonPath, JSON.stringify(packageJson));
|
||||||
strategy.clean(packageJsonPath, fs.basename(packageJsonPath));
|
strategy.clean(packageJsonPath, fs.basename(packageJsonPath));
|
||||||
const newPackageJson: EntryPointPackageJson = JSON.parse(fs.readFile(packageJsonPath));
|
const newPackageJson = JSON.parse(fs.readFile(packageJsonPath)) as EntryPointPackageJson;
|
||||||
expect(newPackageJson).toEqual({
|
expect(newPackageJson).toEqual({
|
||||||
name: 'test-package',
|
name: 'test-package',
|
||||||
scripts: {test: 'do testing'},
|
scripts: {test: 'do testing'},
|
||||||
|
@ -109,7 +109,8 @@ runInEachFileSystem(() => {
|
||||||
fs.ensureDir(fs.dirname(packageJsonPath));
|
fs.ensureDir(fs.dirname(packageJsonPath));
|
||||||
fs.writeFile(packageJsonPath, JSON.stringify(packageJson));
|
fs.writeFile(packageJsonPath, JSON.stringify(packageJson));
|
||||||
strategy.clean(packageJsonPath, fs.basename(packageJsonPath));
|
strategy.clean(packageJsonPath, fs.basename(packageJsonPath));
|
||||||
const newPackageJson: EntryPointPackageJson = JSON.parse(fs.readFile(packageJsonPath));
|
const newPackageJson =
|
||||||
|
JSON.parse(fs.readFile(packageJsonPath)) as EntryPointPackageJson;
|
||||||
expect(newPackageJson).toEqual({
|
expect(newPackageJson).toEqual({
|
||||||
name: 'test-package',
|
name: 'test-package',
|
||||||
scripts: {prepublishOnly: 'original', test: 'do testing'},
|
scripts: {prepublishOnly: 'original', test: 'do testing'},
|
||||||
|
@ -129,7 +130,7 @@ runInEachFileSystem(() => {
|
||||||
fs.ensureDir(fs.dirname(packageJsonPath));
|
fs.ensureDir(fs.dirname(packageJsonPath));
|
||||||
fs.writeFile(packageJsonPath, JSON.stringify(packageJson));
|
fs.writeFile(packageJsonPath, JSON.stringify(packageJson));
|
||||||
strategy.clean(packageJsonPath, fs.basename(packageJsonPath));
|
strategy.clean(packageJsonPath, fs.basename(packageJsonPath));
|
||||||
const newPackageJson: EntryPointPackageJson = JSON.parse(fs.readFile(packageJsonPath));
|
const newPackageJson = JSON.parse(fs.readFile(packageJsonPath)) as EntryPointPackageJson;
|
||||||
expect(newPackageJson).toEqual({
|
expect(newPackageJson).toEqual({
|
||||||
name: 'test-package',
|
name: 'test-package',
|
||||||
scripts: {
|
scripts: {
|
||||||
|
|
|
@ -8,10 +8,12 @@
|
||||||
import {absoluteFrom, FileSystem, getFileSystem} from '../../../src/ngtsc/file_system';
|
import {absoluteFrom, FileSystem, getFileSystem} from '../../../src/ngtsc/file_system';
|
||||||
import {runInEachFileSystem} from '../../../src/ngtsc/file_system/testing';
|
import {runInEachFileSystem} from '../../../src/ngtsc/file_system/testing';
|
||||||
import {MockLogger} from '../../../src/ngtsc/logging/testing';
|
import {MockLogger} from '../../../src/ngtsc/logging/testing';
|
||||||
|
import {RawSourceMap} from '../../../src/ngtsc/sourcemaps';
|
||||||
import {loadTestFiles} from '../../../src/ngtsc/testing';
|
import {loadTestFiles} from '../../../src/ngtsc/testing';
|
||||||
import {NgccConfiguration} from '../../src/packages/configuration';
|
import {NgccConfiguration} from '../../src/packages/configuration';
|
||||||
import {EntryPoint, EntryPointFormat, EntryPointJsonProperty, getEntryPointInfo, isEntryPoint} from '../../src/packages/entry_point';
|
import {EntryPoint, EntryPointFormat, EntryPointJsonProperty, getEntryPointInfo, isEntryPoint} from '../../src/packages/entry_point';
|
||||||
import {EntryPointBundle, makeEntryPointBundle} from '../../src/packages/entry_point_bundle';
|
import {EntryPointBundle, makeEntryPointBundle} from '../../src/packages/entry_point_bundle';
|
||||||
|
import {NewEntryPointPropertiesMap} from '../../src/packages/entry_point_manifest';
|
||||||
import {createModuleResolutionCache, SharedFileCache} from '../../src/packages/source_file_cache';
|
import {createModuleResolutionCache, SharedFileCache} from '../../src/packages/source_file_cache';
|
||||||
import {FileWriter} from '../../src/writing/file_writer';
|
import {FileWriter} from '../../src/writing/file_writer';
|
||||||
import {NewEntryPointFileWriter} from '../../src/writing/new_entry_point_file_writer';
|
import {NewEntryPointFileWriter} from '../../src/writing/new_entry_point_file_writer';
|
||||||
|
@ -184,7 +186,9 @@ runInEachFileSystem(() => {
|
||||||
}];
|
}];
|
||||||
fileWriter.writeBundle(esm2015bundle, modifiedFiles, ['es2015']);
|
fileWriter.writeBundle(esm2015bundle, modifiedFiles, ['es2015']);
|
||||||
|
|
||||||
expect(JSON.parse(fs.readFile(_('/node_modules/test/__ivy_ngcc__/es2015/index.js.map'))))
|
expect(
|
||||||
|
JSON.parse(fs.readFile(_('/node_modules/test/__ivy_ngcc__/es2015/index.js.map'))) as
|
||||||
|
Partial<RawSourceMap>)
|
||||||
.toEqual({...sourceMap, sourceRoot: '../../es2015'});
|
.toEqual({...sourceMap, sourceRoot: '../../es2015'});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -213,7 +217,9 @@ runInEachFileSystem(() => {
|
||||||
}];
|
}];
|
||||||
fileWriter.writeBundle(esm2015bundle, modifiedFiles, ['es2015']);
|
fileWriter.writeBundle(esm2015bundle, modifiedFiles, ['es2015']);
|
||||||
|
|
||||||
expect(JSON.parse(fs.readFile(_('/node_modules/test/__ivy_ngcc__/es2015/index.js.map'))))
|
expect(
|
||||||
|
JSON.parse(fs.readFile(_('/node_modules/test/__ivy_ngcc__/es2015/index.js.map'))) as
|
||||||
|
Partial<RawSourceMap>)
|
||||||
.toEqual({...sourceMap, sourceRoot: '../../src'});
|
.toEqual({...sourceMap, sourceRoot: '../../src'});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -678,7 +684,8 @@ runInEachFileSystem(() => {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
['fesm5', 'module']);
|
['fesm5', 'module']);
|
||||||
const packageJsonFromFile1 = JSON.parse(fs.readFile(packageJsonPath));
|
const packageJsonFromFile1 =
|
||||||
|
JSON.parse(fs.readFile(packageJsonPath)) as NewEntryPointPropertiesMap;
|
||||||
|
|
||||||
expect(entryPoint.packageJson).toEqual(jasmine.objectContaining({
|
expect(entryPoint.packageJson).toEqual(jasmine.objectContaining({
|
||||||
fesm5_ivy_ngcc: '__ivy_ngcc__/esm5.js',
|
fesm5_ivy_ngcc: '__ivy_ngcc__/esm5.js',
|
||||||
|
@ -698,7 +705,8 @@ runInEachFileSystem(() => {
|
||||||
esm5bundle.entryPoint,
|
esm5bundle.entryPoint,
|
||||||
[_('/node_modules/test/index.d.ts'), _('/node_modules/test/index.d.ts.map')],
|
[_('/node_modules/test/index.d.ts'), _('/node_modules/test/index.d.ts.map')],
|
||||||
['fesm5', 'module']);
|
['fesm5', 'module']);
|
||||||
const packageJsonFromFile2 = JSON.parse(fs.readFile(packageJsonPath));
|
const packageJsonFromFile2 =
|
||||||
|
JSON.parse(fs.readFile(packageJsonPath)) as NewEntryPointPropertiesMap;
|
||||||
|
|
||||||
expect(entryPoint.packageJson).toEqual(jasmine.objectContaining({
|
expect(entryPoint.packageJson).toEqual(jasmine.objectContaining({
|
||||||
fesm5: './esm5.js',
|
fesm5: './esm5.js',
|
||||||
|
|
|
@ -18,7 +18,7 @@ runInEachFileSystem(() => {
|
||||||
let updater: PackageJsonUpdater;
|
let updater: PackageJsonUpdater;
|
||||||
|
|
||||||
// Helpers
|
// Helpers
|
||||||
const readJson = (path: AbsoluteFsPath) => JSON.parse(fs.readFile(path));
|
const readJson = <T>(path: AbsoluteFsPath) => JSON.parse(fs.readFile(path)) as T;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
_ = absoluteFrom;
|
_ = absoluteFrom;
|
||||||
|
@ -55,7 +55,7 @@ runInEachFileSystem(() => {
|
||||||
{name: jsonPath, contents: '{"foo": true, "bar": {"baz": "OK"}}'},
|
{name: jsonPath, contents: '{"foo": true, "bar": {"baz": "OK"}}'},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const pkg = readJson(jsonPath);
|
const pkg = readJson<{foo: boolean, bar: {baz: string | number}}>(jsonPath);
|
||||||
const update = updater.createUpdate().addChange(['foo'], false).addChange(['bar', 'baz'], 42);
|
const update = updater.createUpdate().addChange(['foo'], false).addChange(['bar', 'baz'], 42);
|
||||||
|
|
||||||
// Not updated yet.
|
// Not updated yet.
|
||||||
|
@ -95,7 +95,7 @@ runInEachFileSystem(() => {
|
||||||
{name: jsonPath, contents: '{"foo": {}}'},
|
{name: jsonPath, contents: '{"foo": {}}'},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const pkg = readJson(jsonPath);
|
const pkg = readJson<{foo: {bar: {baz: {qux: string}}}}>(jsonPath);
|
||||||
updater.createUpdate()
|
updater.createUpdate()
|
||||||
.addChange(['foo', 'bar', 'baz', 'qux'], 'updated')
|
.addChange(['foo', 'bar', 'baz', 'qux'], 'updated')
|
||||||
.writeChanges(jsonPath, pkg);
|
.writeChanges(jsonPath, pkg);
|
||||||
|
|
|
@ -226,7 +226,7 @@ export class SourceFileLoader {
|
||||||
*/
|
*/
|
||||||
private readRawSourceMap(mapPath: AbsoluteFsPath): RawSourceMap {
|
private readRawSourceMap(mapPath: AbsoluteFsPath): RawSourceMap {
|
||||||
this.trackPath(mapPath);
|
this.trackPath(mapPath);
|
||||||
return JSON.parse(this.fs.readFile(mapPath));
|
return JSON.parse(this.fs.readFile(mapPath)) as RawSourceMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -584,13 +584,15 @@ export class TsCompilerAotCompilerTypeCheckHostAdapter implements ts.CompilerHos
|
||||||
if (this.originalFileExists(packageFile)) {
|
if (this.originalFileExists(packageFile)) {
|
||||||
// Once we see a package.json file, assume false until it we find the bundle index.
|
// Once we see a package.json file, assume false until it we find the bundle index.
|
||||||
result = false;
|
result = false;
|
||||||
const packageContent: any = JSON.parse(assert(this.context.readFile(packageFile)));
|
const packageContent =
|
||||||
|
JSON.parse(assert(this.context.readFile(packageFile))) as {typings: string};
|
||||||
if (packageContent.typings) {
|
if (packageContent.typings) {
|
||||||
const typings = path.normalize(path.join(directory, packageContent.typings));
|
const typings = path.normalize(path.join(directory, packageContent.typings));
|
||||||
if (DTS.test(typings)) {
|
if (DTS.test(typings)) {
|
||||||
const metadataFile = typings.replace(DTS, '.metadata.json');
|
const metadataFile = typings.replace(DTS, '.metadata.json');
|
||||||
if (this.originalFileExists(metadataFile)) {
|
if (this.originalFileExists(metadataFile)) {
|
||||||
const metadata = JSON.parse(assert(this.context.readFile(metadataFile)));
|
const metadata = JSON.parse(assert(this.context.readFile(metadataFile))) as
|
||||||
|
{flatModuleIndexRedirect: string, importAs: string};
|
||||||
if (metadata.flatModuleIndexRedirect) {
|
if (metadata.flatModuleIndexRedirect) {
|
||||||
this.flatModuleIndexRedirectNames.add(typings);
|
this.flatModuleIndexRedirectNames.add(typings);
|
||||||
// Note: don't set result = true,
|
// Note: don't set result = true,
|
||||||
|
|
|
@ -70,8 +70,9 @@ function readMetadataFile(host: MetadataReaderHost, dtsFilePath: string): Module
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const metadataOrMetadatas = JSON.parse(host.readFile(metadataPath));
|
const metadataOrMetadatas =
|
||||||
const metadatas: ModuleMetadata[] = metadataOrMetadatas ?
|
JSON.parse(host.readFile(metadataPath)) as ModuleMetadata | ModuleMetadata[] | undefined;
|
||||||
|
const metadatas = metadataOrMetadatas ?
|
||||||
(Array.isArray(metadataOrMetadatas) ? metadataOrMetadatas : [metadataOrMetadatas]) :
|
(Array.isArray(metadataOrMetadatas) ? metadataOrMetadatas : [metadataOrMetadatas]) :
|
||||||
[];
|
[];
|
||||||
if (metadatas.length) {
|
if (metadatas.length) {
|
||||||
|
|
|
@ -60,7 +60,7 @@ function linkPartials(fileSystem: FileSystem, test: ComplianceTest): CompileResu
|
||||||
const source = fileSystem.readFile(fileName);
|
const source = fileSystem.readFile(fileName);
|
||||||
const sourceMapPath = fileSystem.resolve(fileName + '.map');
|
const sourceMapPath = fileSystem.resolve(fileName + '.map');
|
||||||
const sourceMap = fileSystem.exists(sourceMapPath) ?
|
const sourceMap = fileSystem.exists(sourceMapPath) ?
|
||||||
JSON.parse(fileSystem.readFile(sourceMapPath)) :
|
JSON.parse(fileSystem.readFile(sourceMapPath)) as RawSourceMap :
|
||||||
undefined;
|
undefined;
|
||||||
const {linkedSource, linkedSourceMap} =
|
const {linkedSource, linkedSourceMap} =
|
||||||
applyLinker(builtDirectory, fileName, source, sourceMap, linkerPlugin);
|
applyLinker(builtDirectory, fileName, source, sourceMap, linkerPlugin);
|
||||||
|
|
|
@ -55,9 +55,9 @@ export function* getComplianceTests(testConfigPath: string): Generator<Complianc
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadTestCasesFile(
|
function loadTestCasesFile(
|
||||||
fs: ReadonlyFileSystem, testCasesPath: AbsoluteFsPath, basePath: AbsoluteFsPath): any {
|
fs: ReadonlyFileSystem, testCasesPath: AbsoluteFsPath, basePath: AbsoluteFsPath) {
|
||||||
try {
|
try {
|
||||||
return JSON.parse(fs.readFile(testCasesPath));
|
return JSON.parse(fs.readFile(testCasesPath)) as {cases: TestCaseJson | TestCaseJson[]};
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Failed to load test-cases at "${fs.relative(basePath, testCasesPath)}":\n ${e.message}`);
|
`Failed to load test-cases at "${fs.relative(basePath, testCasesPath)}":\n ${e.message}`);
|
||||||
|
@ -298,3 +298,24 @@ export type ExtraCheck = (string|[string, ...any]);
|
||||||
* Options to pass to configure the compiler.
|
* Options to pass to configure the compiler.
|
||||||
*/
|
*/
|
||||||
export type ConfigOptions = Record<string, string|boolean|null>;
|
export type ConfigOptions = Record<string, string|boolean|null>;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface espressing the type for the json object found at ../test_cases/test_case_schema.json.
|
||||||
|
*/
|
||||||
|
export interface TestCaseJson {
|
||||||
|
description: string;
|
||||||
|
compilationModeFilter?: ('fulll compile'|'linked compile')[];
|
||||||
|
inputFiles?: string[];
|
||||||
|
expectations?: {
|
||||||
|
failureMessage?: string;
|
||||||
|
files?: ExpectedFile[] | string;
|
||||||
|
expectedErrors?: {message: string, location?: string};
|
||||||
|
extraChecks?: (string | string[])[];
|
||||||
|
};
|
||||||
|
compilerOptions?: ConfigOptions;
|
||||||
|
angularCompilerOptions?: ConfigOptions;
|
||||||
|
focusTest?: boolean;
|
||||||
|
excludeTest?: boolean;
|
||||||
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* Use of this source code is governed by an MIT-style license that can be
|
* 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
|
* found in the LICENSE file at https://angular.io/license
|
||||||
*/
|
*/
|
||||||
import {MappingItem, SourceMapConsumer} from 'source-map';
|
import {MappingItem, RawSourceMap, SourceMapConsumer} from 'source-map';
|
||||||
import {NgtscTestEnvironment} from './env';
|
import {NgtscTestEnvironment} from './env';
|
||||||
|
|
||||||
class TestSourceFile {
|
class TestSourceFile {
|
||||||
|
@ -72,7 +72,7 @@ export function getMappedSegments(
|
||||||
const mappings: MappingItem[] = [];
|
const mappings: MappingItem[] = [];
|
||||||
|
|
||||||
const mapContents = env.getContents(sourceMapFileName);
|
const mapContents = env.getContents(sourceMapFileName);
|
||||||
const sourceMapConsumer = new SourceMapConsumer(JSON.parse(mapContents));
|
const sourceMapConsumer = new SourceMapConsumer(JSON.parse(mapContents) as RawSourceMap);
|
||||||
sourceMapConsumer.eachMapping(item => {
|
sourceMapConsumer.eachMapping(item => {
|
||||||
if (!sources.has(item.source)) {
|
if (!sources.has(item.source)) {
|
||||||
sources.set(item.source, new TestSourceFile(item.source, env.getContents(item.source)));
|
sources.set(item.source, new TestSourceFile(item.source, env.getContents(item.source)));
|
||||||
|
|
|
@ -518,7 +518,7 @@ describe('TypeScriptNodeEmitter', () => {
|
||||||
const sourceMapBase64 = sourceMapMatch![1];
|
const sourceMapBase64 = sourceMapMatch![1];
|
||||||
const sourceMapBuffer = Buffer.from(sourceMapBase64, 'base64');
|
const sourceMapBuffer = Buffer.from(sourceMapBase64, 'base64');
|
||||||
const sourceMapText = sourceMapBuffer.toString('utf8');
|
const sourceMapText = sourceMapBuffer.toString('utf8');
|
||||||
const sourceMapParsed = JSON.parse(sourceMapText);
|
const sourceMapParsed = JSON.parse(sourceMapText) as unknown;
|
||||||
const consumer = new sourceMap.SourceMapConsumer(sourceMapParsed);
|
const consumer = new sourceMap.SourceMapConsumer(sourceMapParsed);
|
||||||
const mappings: any[] = [];
|
const mappings: any[] = [];
|
||||||
consumer.eachMapping((mapping: any) => {
|
consumer.eachMapping((mapping: any) => {
|
||||||
|
|
Loading…
Reference in New Issue