mirror of
https://github.com/balena-io/etcher.git
synced 2025-04-22 14:27:18 +00:00
53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
/**
|
|
* This script is in charge of cleaning the `shrinkwrap` file.
|
|
*
|
|
* `npm shrinkwrap` has a bug where it will add optional dependencies
|
|
* to `npm-shrinkwrap.json`, therefore causing errors if these optional
|
|
* dependendencies are platform dependent and you then try to build
|
|
* the project in another platform.
|
|
*
|
|
* As a workaround, we keep a list of platform dependent dependencies in
|
|
* the `platformSpecificDependencies` property of `package.json`,
|
|
* and manually remove them from `npm-shrinkwrap.json` if they exist.
|
|
*
|
|
* See: https://github.com/npm/npm/issues/2679
|
|
*/
|
|
|
|
import { writeFile } from 'fs';
|
|
import * as omit from 'omit-deep-lodash';
|
|
import * as path from 'path';
|
|
import { promisify } from 'util';
|
|
|
|
import * as shrinkwrap from '../npm-shrinkwrap.json';
|
|
import * as packageInfo from '../package.json';
|
|
|
|
const writeFileAsync = promisify(writeFile);
|
|
|
|
const JSON_INDENT = 2;
|
|
const SHRINKWRAP_FILENAME = path.join(__dirname, '..', 'npm-shrinkwrap.json');
|
|
|
|
async function main() {
|
|
try {
|
|
const cleaned = omit(shrinkwrap, packageInfo.platformSpecificDependencies);
|
|
for (const item of Object.values(cleaned.dependencies)) {
|
|
// @ts-ignore
|
|
item.dev = true;
|
|
}
|
|
await writeFileAsync(
|
|
SHRINKWRAP_FILENAME,
|
|
JSON.stringify(cleaned, null, JSON_INDENT),
|
|
);
|
|
} catch (error: any) {
|
|
console.log(`[ERROR] Couldn't write shrinkwrap file: ${error.stack}`);
|
|
process.exitCode = 1;
|
|
}
|
|
console.log(
|
|
`[OK] Wrote shrinkwrap file to ${path.relative(
|
|
__dirname,
|
|
SHRINKWRAP_FILENAME,
|
|
)}`,
|
|
);
|
|
}
|
|
|
|
main();
|