98 lines
3.7 KiB
JavaScript
98 lines
3.7 KiB
JavaScript
/**
|
|
* @license
|
|
* Copyright Google LLC 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
|
|
*/
|
|
|
|
try {
|
|
require.resolve('shelljs');
|
|
} catch (e) {
|
|
// We are in an bazel managed external node_modules repository
|
|
// and the resolve has failed because node did not preserve the symlink
|
|
// when loading the script.
|
|
// This can be fixed using the --preserve-symlinks-main flag which
|
|
// is introduced in node 10.2.0
|
|
console.warn(
|
|
`Running postinstall-patches.js script in an external repository requires --preserve-symlinks-main node flag introduced in node 10.2.0. ` +
|
|
`Current node version is ${process.version}. Node called with '${process.argv.join(' ')}'.`);
|
|
process.exit(0);
|
|
}
|
|
|
|
const {set, cd, sed, echo, ls, rm} = require('shelljs');
|
|
const {readFileSync} = require('fs');
|
|
const path = require('path');
|
|
const log = console.info;
|
|
|
|
// COMMENTED OUT BECAUSE WE CURRENTLY REQUIRE NO PATCHES
|
|
// UNCOMMENT TO REENABLE PATCHING AND LOG OUTPUT
|
|
//
|
|
log('===== about to run the postinstall-patches.js script =====');
|
|
// fail on first error
|
|
set('-e');
|
|
// print commands as being executed
|
|
set('-v');
|
|
// jump to project root
|
|
cd(path.join(__dirname, '../'));
|
|
|
|
/* EXAMPLE PATCH:
|
|
// https://github.com/ReactiveX/rxjs/pull/3302
|
|
// make node_modules/rxjs compilable with Typescript 2.7
|
|
// remove when we update to rxjs v6
|
|
log('\n# patch: reactivex/rxjs#3302 make node_modules/rxjs compilable with Typescript 2.7');
|
|
sed('-i', '(\'response\' in xhr)', '(\'response\' in (xhr as any))',
|
|
'node_modules/rxjs/src/observable/dom/AjaxObservable.ts');
|
|
*/
|
|
|
|
// Workaround https://github.com/bazelbuild/rules_nodejs/issues/1033
|
|
// TypeScript doesn't understand typings without "declare module" unless
|
|
// they are actually resolved by the @types default mechanism
|
|
log('\n# patch: @types/babel__* adding declare module wrappers');
|
|
ls('node_modules/@types').filter(f => f.startsWith('babel__')).forEach(pkg => {
|
|
const modName = '@' + pkg.replace('__', '/');
|
|
const typingsFile = `node_modules/@types/${pkg}/index.d.ts`;
|
|
// Only add the patch if it is not already there.
|
|
if (readFileSync(typingsFile, 'utf8').indexOf('/*added by tools/postinstall_patches.js*/') ===
|
|
-1) {
|
|
const insertPrefix = `/*added by tools/postinstall_patches.js*/ declare module "${modName}" { `;
|
|
sed('-i', `(// Type definitions for ${modName})`, insertPrefix + '$1', typingsFile);
|
|
echo('}').toEnd(typingsFile);
|
|
}
|
|
});
|
|
|
|
log('\n# patch: delete d.ts files refering to rxjs-compat');
|
|
// more info in https://github.com/angular/angular/pull/33786
|
|
rm('-rf', [
|
|
'node_modules/rxjs/add/',
|
|
'node_modules/rxjs/observable/',
|
|
'node_modules/rxjs/operator/',
|
|
// rxjs/operators is a public entry point that also contains files to support legacy deep import
|
|
// paths, so we need to preserve index.* and package.json files that are required for module
|
|
// resolution.
|
|
'node_modules/rxjs/operators/!(index.*|package.json)',
|
|
'node_modules/rxjs/scheduler/',
|
|
'node_modules/rxjs/symbol/',
|
|
'node_modules/rxjs/util/',
|
|
'node_modules/rxjs/internal/Rx.d.ts',
|
|
'node_modules/rxjs/AsyncSubject.*',
|
|
'node_modules/rxjs/BehaviorSubject.*',
|
|
'node_modules/rxjs/InnerSubscriber.*',
|
|
'node_modules/rxjs/interfaces.*',
|
|
'node_modules/rxjs/Notification.*',
|
|
'node_modules/rxjs/Observable.*',
|
|
'node_modules/rxjs/Observer.*',
|
|
'node_modules/rxjs/Operator.*',
|
|
'node_modules/rxjs/OuterSubscriber.*',
|
|
'node_modules/rxjs/ReplaySubject.*',
|
|
'node_modules/rxjs/Rx.*',
|
|
'node_modules/rxjs/Scheduler.*',
|
|
'node_modules/rxjs/Subject.*',
|
|
'node_modules/rxjs/SubjectSubscription.*',
|
|
'node_modules/rxjs/Subscriber.*',
|
|
'node_modules/rxjs/Subscription.*',
|
|
]);
|
|
|
|
|
|
log('===== finished running the postinstall-patches.js script =====');
|