Revert "build: update to yarn@1.21.1" (#34402)
This reverts commit f029af50820765019413fa319330830306b80d6a while we investigate some failures on master on Circle CI. Currently the Windows tests and the "test-ivy-aot" jobs are red because of incompatible yarn versions. PR Close #34402
This commit is contained in:
parent
ea57587b7c
commit
17f7f06ca5
|
@ -129,7 +129,7 @@ commands:
|
||||||
# Overwrite the yarn installed in the docker container with our own version.
|
# Overwrite the yarn installed in the docker container with our own version.
|
||||||
name: Overwrite yarn with our own version
|
name: Overwrite yarn with our own version
|
||||||
command: |
|
command: |
|
||||||
ourYarn=$(realpath ./third_party/github.com/yarnpkg/yarn/releases/download/v1.21.1/bin/yarn.js)
|
ourYarn=$(realpath ./third_party/github.com/yarnpkg/yarn/releases/download/v1.17.3/bin/yarn.js)
|
||||||
sudo chmod a+x $ourYarn
|
sudo chmod a+x $ourYarn
|
||||||
sudo ln -fs $ourYarn /usr/local/bin/yarn
|
sudo ln -fs $ourYarn /usr/local/bin/yarn
|
||||||
- run: echo "Yarn version $(yarn --version)"
|
- run: echo "Yarn version $(yarn --version)"
|
||||||
|
|
12
WORKSPACE
12
WORKSPACE
|
@ -41,9 +41,17 @@ node_repositories(
|
||||||
node_version = "10.16.0",
|
node_version = "10.16.0",
|
||||||
package_json = ["//:package.json"],
|
package_json = ["//:package.json"],
|
||||||
yarn_repositories = {
|
yarn_repositories = {
|
||||||
"1.21.1": ("yarn-v1.21.1.tar.gz", "yarn-v1.21.1", "d1d9f4a0f16f5ed484e814afeb98f39b82d4728c6c8beaafb5abc99c02db6674"),
|
"1.17.3": ("yarn-v1.17.3.tar.gz", "yarn-v1.17.3", "e3835194409f1b3afa1c62ca82f561f1c29d26580c9e220c36866317e043c6f3"),
|
||||||
},
|
},
|
||||||
yarn_version = "1.21.1",
|
# yarn 1.13.0 under Bazel has a regression on Windows that causes build errors on rebuilds:
|
||||||
|
# ```
|
||||||
|
# ERROR: Source forest creation failed: C:/.../fyuc5c3n/execroot/angular/external (Directory not empty)
|
||||||
|
# ```
|
||||||
|
# See https://github.com/angular/angular/pull/29431 for more information.
|
||||||
|
# It possible that versions of yarn past 1.13.0 do not have this issue, however, before
|
||||||
|
# advancing this version we need to test manually on Windows that the above error does not
|
||||||
|
# happen as the issue is not caught by CI.
|
||||||
|
yarn_version = "1.17.3",
|
||||||
)
|
)
|
||||||
|
|
||||||
yarn_install(
|
yarn_install(
|
||||||
|
|
|
@ -83,7 +83,7 @@
|
||||||
"//engines-comment": "Keep this in sync with /package.json and /aio/tools/examples/shared/package.json",
|
"//engines-comment": "Keep this in sync with /package.json and /aio/tools/examples/shared/package.json",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.9.0 <13.0.0",
|
"node": ">=10.9.0 <13.0.0",
|
||||||
"yarn": ">=1.21.1 <2"
|
"yarn": ">=1.17.3 <2"
|
||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
"//engines-comment": "Keep this in sync with /package.json and /aio/package.json",
|
"//engines-comment": "Keep this in sync with /package.json and /aio/package.json",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.9.0 <13.0.0",
|
"node": ">=10.9.0 <13.0.0",
|
||||||
"yarn": ">=1.21.1 <2"
|
"yarn": ">=1.17.3 <2"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
"//engines-comment": "Keep this in sync with /aio/package.json and /aio/tools/examples/shared/package.json",
|
"//engines-comment": "Keep this in sync with /aio/package.json and /aio/tools/examples/shared/package.json",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.9.0 <13.0.0",
|
"node": ">=10.9.0 <13.0.0",
|
||||||
"yarn": ">=1.21.1 <2"
|
"yarn": ">=1.17.3 <2"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
# Fetched from https://github.com/yarnpkg/yarn/releases/download/v1.21.1/yarn-v1.21.1.tar.gz
|
# Fetched from https://github.com/yarnpkg/yarn/releases/download/v1.13.0/yarn-v1.13.0.tar.gz
|
||||||
licenses(["notice"])
|
licenses(["notice"])
|
||||||
|
|
162467
third_party/github.com/yarnpkg/yarn/releases/download/v1.21.1/lib/cli.js → third_party/github.com/yarnpkg/yarn/releases/download/v1.17.3/bin/yarn.js
vendored
Executable file → Normal file
162467
third_party/github.com/yarnpkg/yarn/releases/download/v1.21.1/lib/cli.js → third_party/github.com/yarnpkg/yarn/releases/download/v1.17.3/bin/yarn.js
vendored
Executable file → Normal file
File diff suppressed because one or more lines are too long
|
@ -1,60 +0,0 @@
|
||||||
<p align="center">
|
|
||||||
<a href="https://yarnpkg.com/">
|
|
||||||
<img alt="Yarn" src="https://github.com/yarnpkg/assets/blob/master/yarn-kitten-full.png?raw=true" width="546">
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
Fast, reliable, and secure dependency management.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<a href="https://circleci.com/gh/yarnpkg/yarn"><img alt="Circle Status" src="https://circleci.com/gh/yarnpkg/yarn.svg?style=shield&circle-token=5f0a78473b0f440afb218bf2b82323cc6b3cb43f"></a>
|
|
||||||
<a href="https://ci.appveyor.com/project/kittens/yarn/branch/master"><img alt="Appveyor Status" src="https://ci.appveyor.com/api/projects/status/0xdv8chwe2kmk463?svg=true"></a>
|
|
||||||
<a href="https://dev.azure.com/yarnpkg/yarn/_build"><img alt="Azure Pipelines status" src="https://dev.azure.com/yarnpkg/yarn/_apis/build/status/Yarn%20Acceptance%20Tests"></a>
|
|
||||||
<a href="https://discord.gg/yarnpkg"><img alt="Discord Chat" src="https://img.shields.io/discord/226791405589233664.svg"></a>
|
|
||||||
<a href="http://commitizen.github.io/cz-cli/"><img alt="Commitizen friendly" src="https://img.shields.io/badge/commitizen-friendly-brightgreen.svg"></a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Fast:** Yarn caches every package it has downloaded, so it never needs to download the same package again. It also does almost everything concurrently to maximize resource utilization. This means even faster installs.
|
|
||||||
|
|
||||||
**Reliable:** Using a detailed but concise lockfile format and a deterministic algorithm for install operations, Yarn is able to guarantee that any installation that works on one system will work exactly the same on another system.
|
|
||||||
|
|
||||||
**Secure:** Yarn uses checksums to verify the integrity of every installed package before its code is executed.
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
* **Offline Mode.** If you've installed a package before, then you can install it again without an internet connection.
|
|
||||||
* **Deterministic.** The same dependencies will be installed in the same exact way on any machine, regardless of installation order.
|
|
||||||
* **Network Performance.** Yarn efficiently queues requests and avoids request waterfalls in order to maximize network utilization.
|
|
||||||
* **Network Resilience.** A single request that fails will not cause the entire installation to fail. Requests are automatically retried upon failure.
|
|
||||||
* **Flat Mode.** Yarn resolves mismatched versions of dependencies to a single version to avoid creating duplicates.
|
|
||||||
* **More emojis.** 🐈
|
|
||||||
|
|
||||||
## Installing Yarn
|
|
||||||
|
|
||||||
Read the [Installation Guide](https://yarnpkg.com/en/docs/install) on our website for detailed instructions on how to install Yarn.
|
|
||||||
|
|
||||||
## Using Yarn
|
|
||||||
|
|
||||||
Read the [Usage Guide](https://yarnpkg.com/en/docs/usage) on our website for detailed instructions on how to use Yarn.
|
|
||||||
|
|
||||||
## Contributing to Yarn
|
|
||||||
|
|
||||||
Contributions are always welcome, no matter how large or small. Substantial feature requests should be proposed as an [RFC](https://github.com/yarnpkg/rfcs). Before contributing, please read the [code of conduct](CODE_OF_CONDUCT.md).
|
|
||||||
|
|
||||||
See [Contributing](https://yarnpkg.com/org/contributing/).
|
|
||||||
|
|
||||||
## Prior art
|
|
||||||
|
|
||||||
Yarn wouldn't exist if it wasn't for excellent prior art. Yarn has been inspired by the following projects:
|
|
||||||
|
|
||||||
- [Bundler](https://github.com/bundler/bundler)
|
|
||||||
- [Cargo](https://github.com/rust-lang/cargo)
|
|
||||||
- [npm](https://github.com/npm/cli)
|
|
||||||
|
|
||||||
## Credits
|
|
||||||
|
|
||||||
Thanks to [Sam Holmes](https://github.com/samholmes) for donating the npm package name!
|
|
|
@ -1,35 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
argv0=$(echo "$0" | sed -e 's,\\,/,g')
|
|
||||||
basedir=$(dirname "$(readlink "$0" || echo "$argv0")")
|
|
||||||
|
|
||||||
case "$(uname -s)" in
|
|
||||||
Darwin) basedir="$( cd "$( dirname "$argv0" )" && pwd )";;
|
|
||||||
Linux) basedir=$(dirname "$(readlink -f "$0" || echo "$argv0")");;
|
|
||||||
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
|
||||||
*MSYS*) basedir=`cygpath -w "$basedir"`;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
command_exists() {
|
|
||||||
command -v "$1" >/dev/null 2>&1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if command_exists node; then
|
|
||||||
if [ "$YARN_FORCE_WINPTY" = 1 ] || command_exists winpty && test -t 1; then
|
|
||||||
winpty node "$basedir/yarn.js" "$@"
|
|
||||||
else
|
|
||||||
exec node "$basedir/yarn.js" "$@"
|
|
||||||
fi
|
|
||||||
ret=$?
|
|
||||||
# Debian and Ubuntu use "nodejs" as the name of the binary, not "node", so we
|
|
||||||
# search for that too. See:
|
|
||||||
# https://lists.debian.org/debian-devel-announce/2012/07/msg00002.html
|
|
||||||
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=614907
|
|
||||||
elif command_exists nodejs; then
|
|
||||||
exec nodejs "$basedir/yarn.js" "$@"
|
|
||||||
ret=$?
|
|
||||||
else
|
|
||||||
>&2 echo 'Yarn requires Node.js 4.0 or higher to be installed.'
|
|
||||||
ret=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit $ret
|
|
|
@ -1,2 +0,0 @@
|
||||||
@echo off
|
|
||||||
node "%~dp0\yarn.js" %*
|
|
|
@ -1,31 +0,0 @@
|
||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
/* eslint-disable no-var */
|
|
||||||
/* eslint-disable flowtype/require-valid-file-annotation */
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var ver = process.versions.node;
|
|
||||||
var majorVer = parseInt(ver.split('.')[0], 10);
|
|
||||||
|
|
||||||
if (majorVer < 4) {
|
|
||||||
console.error('Node version ' + ver + ' is not supported, please use Node.js 4.0 or higher.');
|
|
||||||
process.exit(1); // eslint-disable-line no-process-exit
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
require(__dirname + '/../lib/v8-compile-cache.js');
|
|
||||||
} catch (err) {
|
|
||||||
// We don't have/need this on legacy builds and dev builds
|
|
||||||
}
|
|
||||||
|
|
||||||
// Just requiring this package will trigger a yarn run since the
|
|
||||||
// `require.main === module` check inside `cli/index.js` will always
|
|
||||||
// be truthy when built with webpack :(
|
|
||||||
// `lib/cli` may be `lib/cli/index.js` or `lib/cli.js` depending on the build.
|
|
||||||
var cli = require(__dirname + '/../lib/cli');
|
|
||||||
if (!cli.autoRun) {
|
|
||||||
cli.default().catch(function(error) {
|
|
||||||
console.error(error.stack || error.message || error);
|
|
||||||
process.exitCode = 1;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,2 +0,0 @@
|
||||||
#!/usr/bin/env node
|
|
||||||
require('./yarn.js');
|
|
|
@ -1,2 +0,0 @@
|
||||||
@echo off
|
|
||||||
"%~dp0\yarn.cmd" %*
|
|
|
@ -1,351 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const Module = require('module');
|
|
||||||
const crypto = require('crypto');
|
|
||||||
const fs = require('fs');
|
|
||||||
const path = require('path');
|
|
||||||
const vm = require('vm');
|
|
||||||
const os = require('os');
|
|
||||||
|
|
||||||
const hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// FileSystemBlobStore
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class FileSystemBlobStore {
|
|
||||||
constructor(directory, prefix) {
|
|
||||||
const name = prefix ? slashEscape(prefix + '.') : '';
|
|
||||||
this._blobFilename = path.join(directory, name + 'BLOB');
|
|
||||||
this._mapFilename = path.join(directory, name + 'MAP');
|
|
||||||
this._lockFilename = path.join(directory, name + 'LOCK');
|
|
||||||
this._directory = directory;
|
|
||||||
this._load();
|
|
||||||
}
|
|
||||||
|
|
||||||
has(key, invalidationKey) {
|
|
||||||
if (hasOwnProperty.call(this._memoryBlobs, key)) {
|
|
||||||
return this._invalidationKeys[key] === invalidationKey;
|
|
||||||
} else if (hasOwnProperty.call(this._storedMap, key)) {
|
|
||||||
return this._storedMap[key][0] === invalidationKey;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
get(key, invalidationKey) {
|
|
||||||
if (hasOwnProperty.call(this._memoryBlobs, key)) {
|
|
||||||
if (this._invalidationKeys[key] === invalidationKey) {
|
|
||||||
return this._memoryBlobs[key];
|
|
||||||
}
|
|
||||||
} else if (hasOwnProperty.call(this._storedMap, key)) {
|
|
||||||
const mapping = this._storedMap[key];
|
|
||||||
if (mapping[0] === invalidationKey) {
|
|
||||||
return this._storedBlob.slice(mapping[1], mapping[2]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
set(key, invalidationKey, buffer) {
|
|
||||||
this._invalidationKeys[key] = invalidationKey;
|
|
||||||
this._memoryBlobs[key] = buffer;
|
|
||||||
this._dirty = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
delete(key) {
|
|
||||||
if (hasOwnProperty.call(this._memoryBlobs, key)) {
|
|
||||||
this._dirty = true;
|
|
||||||
delete this._memoryBlobs[key];
|
|
||||||
}
|
|
||||||
if (hasOwnProperty.call(this._invalidationKeys, key)) {
|
|
||||||
this._dirty = true;
|
|
||||||
delete this._invalidationKeys[key];
|
|
||||||
}
|
|
||||||
if (hasOwnProperty.call(this._storedMap, key)) {
|
|
||||||
this._dirty = true;
|
|
||||||
delete this._storedMap[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
isDirty() {
|
|
||||||
return this._dirty;
|
|
||||||
}
|
|
||||||
|
|
||||||
save() {
|
|
||||||
const dump = this._getDump();
|
|
||||||
const blobToStore = Buffer.concat(dump[0]);
|
|
||||||
const mapToStore = JSON.stringify(dump[1]);
|
|
||||||
|
|
||||||
try {
|
|
||||||
mkdirpSync(this._directory);
|
|
||||||
fs.writeFileSync(this._lockFilename, 'LOCK', {flag: 'wx'});
|
|
||||||
} catch (error) {
|
|
||||||
// Swallow the exception if we fail to acquire the lock.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
fs.writeFileSync(this._blobFilename, blobToStore);
|
|
||||||
fs.writeFileSync(this._mapFilename, mapToStore);
|
|
||||||
} catch (error) {
|
|
||||||
throw error;
|
|
||||||
} finally {
|
|
||||||
fs.unlinkSync(this._lockFilename);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
_load() {
|
|
||||||
try {
|
|
||||||
this._storedBlob = fs.readFileSync(this._blobFilename);
|
|
||||||
this._storedMap = JSON.parse(fs.readFileSync(this._mapFilename));
|
|
||||||
} catch (e) {
|
|
||||||
this._storedBlob = Buffer.alloc(0);
|
|
||||||
this._storedMap = {};
|
|
||||||
}
|
|
||||||
this._dirty = false;
|
|
||||||
this._memoryBlobs = {};
|
|
||||||
this._invalidationKeys = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
_getDump() {
|
|
||||||
const buffers = [];
|
|
||||||
const newMap = {};
|
|
||||||
let offset = 0;
|
|
||||||
|
|
||||||
function push(key, invalidationKey, buffer) {
|
|
||||||
buffers.push(buffer);
|
|
||||||
newMap[key] = [invalidationKey, offset, offset + buffer.length];
|
|
||||||
offset += buffer.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const key of Object.keys(this._memoryBlobs)) {
|
|
||||||
const buffer = this._memoryBlobs[key];
|
|
||||||
const invalidationKey = this._invalidationKeys[key];
|
|
||||||
push(key, invalidationKey, buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const key of Object.keys(this._storedMap)) {
|
|
||||||
if (hasOwnProperty.call(newMap, key)) continue;
|
|
||||||
const mapping = this._storedMap[key];
|
|
||||||
const buffer = this._storedBlob.slice(mapping[1], mapping[2]);
|
|
||||||
push(key, mapping[0], buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
return [buffers, newMap];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// NativeCompileCache
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class NativeCompileCache {
|
|
||||||
constructor() {
|
|
||||||
this._cacheStore = null;
|
|
||||||
this._previousModuleCompile = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
setCacheStore(cacheStore) {
|
|
||||||
this._cacheStore = cacheStore;
|
|
||||||
}
|
|
||||||
|
|
||||||
install() {
|
|
||||||
const self = this;
|
|
||||||
this._previousModuleCompile = Module.prototype._compile;
|
|
||||||
Module.prototype._compile = function(content, filename) {
|
|
||||||
const mod = this;
|
|
||||||
function require(id) {
|
|
||||||
return mod.require(id);
|
|
||||||
}
|
|
||||||
require.resolve = function(request) {
|
|
||||||
return Module._resolveFilename(request, mod);
|
|
||||||
};
|
|
||||||
require.main = process.mainModule;
|
|
||||||
|
|
||||||
// Enable support to add extra extension types
|
|
||||||
require.extensions = Module._extensions;
|
|
||||||
require.cache = Module._cache;
|
|
||||||
|
|
||||||
const dirname = path.dirname(filename);
|
|
||||||
|
|
||||||
const compiledWrapper = self._moduleCompile(filename, content);
|
|
||||||
|
|
||||||
// We skip the debugger setup because by the time we run, node has already
|
|
||||||
// done that itself.
|
|
||||||
|
|
||||||
const args = [mod.exports, require, mod, filename, dirname, process, global];
|
|
||||||
return compiledWrapper.apply(mod.exports, args);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
uninstall() {
|
|
||||||
Module.prototype._compile = this._previousModuleCompile;
|
|
||||||
}
|
|
||||||
|
|
||||||
_moduleCompile(filename, content) {
|
|
||||||
// https://github.com/nodejs/node/blob/v7.5.0/lib/module.js#L511
|
|
||||||
|
|
||||||
// Remove shebang
|
|
||||||
var contLen = content.length;
|
|
||||||
if (contLen >= 2) {
|
|
||||||
if (content.charCodeAt(0) === 35/*#*/ &&
|
|
||||||
content.charCodeAt(1) === 33/*!*/) {
|
|
||||||
if (contLen === 2) {
|
|
||||||
// Exact match
|
|
||||||
content = '';
|
|
||||||
} else {
|
|
||||||
// Find end of shebang line and slice it off
|
|
||||||
var i = 2;
|
|
||||||
for (; i < contLen; ++i) {
|
|
||||||
var code = content.charCodeAt(i);
|
|
||||||
if (code === 10/*\n*/ || code === 13/*\r*/) break;
|
|
||||||
}
|
|
||||||
if (i === contLen) {
|
|
||||||
content = '';
|
|
||||||
} else {
|
|
||||||
// Note that this actually includes the newline character(s) in the
|
|
||||||
// new output. This duplicates the behavior of the regular
|
|
||||||
// expression that was previously used to replace the shebang line
|
|
||||||
content = content.slice(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// create wrapper function
|
|
||||||
var wrapper = Module.wrap(content);
|
|
||||||
|
|
||||||
var invalidationKey = crypto
|
|
||||||
.createHash('sha1')
|
|
||||||
.update(content, 'utf8')
|
|
||||||
.digest('hex');
|
|
||||||
|
|
||||||
var buffer = this._cacheStore.get(filename, invalidationKey);
|
|
||||||
|
|
||||||
var script = new vm.Script(wrapper, {
|
|
||||||
filename: filename,
|
|
||||||
lineOffset: 0,
|
|
||||||
displayErrors: true,
|
|
||||||
cachedData: buffer,
|
|
||||||
produceCachedData: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (script.cachedDataProduced) {
|
|
||||||
this._cacheStore.set(filename, invalidationKey, script.cachedData);
|
|
||||||
} else if (script.cachedDataRejected) {
|
|
||||||
this._cacheStore.delete(filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
var compiledWrapper = script.runInThisContext({
|
|
||||||
filename: filename,
|
|
||||||
lineOffset: 0,
|
|
||||||
columnOffset: 0,
|
|
||||||
displayErrors: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
return compiledWrapper;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// utilities
|
|
||||||
//
|
|
||||||
// https://github.com/substack/node-mkdirp/blob/f2003bb/index.js#L55-L98
|
|
||||||
// https://github.com/zertosh/slash-escape/blob/e7ebb99/slash-escape.js
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function mkdirpSync(p_) {
|
|
||||||
_mkdirpSync(path.resolve(p_), parseInt('0777', 8) & ~process.umask());
|
|
||||||
}
|
|
||||||
|
|
||||||
function _mkdirpSync(p, mode) {
|
|
||||||
try {
|
|
||||||
fs.mkdirSync(p, mode);
|
|
||||||
} catch (err0) {
|
|
||||||
if (err0.code === 'ENOENT') {
|
|
||||||
_mkdirpSync(path.dirname(p));
|
|
||||||
_mkdirpSync(p);
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
const stat = fs.statSync(p);
|
|
||||||
if (!stat.isDirectory()) { throw err0; }
|
|
||||||
} catch (err1) {
|
|
||||||
throw err0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function slashEscape(str) {
|
|
||||||
const ESCAPE_LOOKUP = {
|
|
||||||
'\\': 'zB',
|
|
||||||
':': 'zC',
|
|
||||||
'/': 'zS',
|
|
||||||
'\x00': 'z0',
|
|
||||||
'z': 'zZ',
|
|
||||||
};
|
|
||||||
return str.replace(/[\\:\/\x00z]/g, match => (ESCAPE_LOOKUP[match]));
|
|
||||||
}
|
|
||||||
|
|
||||||
function supportsCachedData() {
|
|
||||||
const script = new vm.Script('""', {produceCachedData: true});
|
|
||||||
// chakracore, as of v1.7.1.0, returns `false`.
|
|
||||||
return script.cachedDataProduced === true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getCacheDir() {
|
|
||||||
// Avoid cache ownership issues on POSIX systems.
|
|
||||||
const dirname = typeof process.getuid === 'function'
|
|
||||||
? 'v8-compile-cache-' + process.getuid()
|
|
||||||
: 'v8-compile-cache';
|
|
||||||
const version = typeof process.versions.v8 === 'string'
|
|
||||||
? process.versions.v8
|
|
||||||
: typeof process.versions.chakracore === 'string'
|
|
||||||
? 'chakracore-' + process.versions.chakracore
|
|
||||||
: 'node-' + process.version;
|
|
||||||
const cacheDir = path.join(os.tmpdir(), dirname, version);
|
|
||||||
return cacheDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getParentName() {
|
|
||||||
// `module.parent.filename` is undefined or null when:
|
|
||||||
// * node -e 'require("v8-compile-cache")'
|
|
||||||
// * node -r 'v8-compile-cache'
|
|
||||||
// * Or, requiring from the REPL.
|
|
||||||
const parentName = module.parent && typeof module.parent.filename === 'string'
|
|
||||||
? module.parent.filename
|
|
||||||
: process.cwd();
|
|
||||||
return parentName;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// main
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
if (!process.env.DISABLE_V8_COMPILE_CACHE && supportsCachedData()) {
|
|
||||||
const cacheDir = getCacheDir();
|
|
||||||
const prefix = getParentName();
|
|
||||||
const blobStore = new FileSystemBlobStore(cacheDir, prefix);
|
|
||||||
|
|
||||||
const nativeCompileCache = new NativeCompileCache();
|
|
||||||
nativeCompileCache.setCacheStore(blobStore);
|
|
||||||
nativeCompileCache.install();
|
|
||||||
|
|
||||||
process.once('exit', code => {
|
|
||||||
if (blobStore.isDirty()) {
|
|
||||||
blobStore.save();
|
|
||||||
}
|
|
||||||
nativeCompileCache.uninstall();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports.__TEST__ = {
|
|
||||||
FileSystemBlobStore,
|
|
||||||
NativeCompileCache,
|
|
||||||
mkdirpSync,
|
|
||||||
slashEscape,
|
|
||||||
supportsCachedData,
|
|
||||||
getCacheDir,
|
|
||||||
getParentName,
|
|
||||||
};
|
|
|
@ -1,24 +0,0 @@
|
||||||
{
|
|
||||||
"name": "yarn",
|
|
||||||
"installationMethod": "tar",
|
|
||||||
"version": "1.21.1",
|
|
||||||
"license": "BSD-2-Clause",
|
|
||||||
"preferGlobal": true,
|
|
||||||
"description": "📦🐈 Fast, reliable, and secure dependency management.",
|
|
||||||
"resolutions": {
|
|
||||||
"sshpk": "^1.14.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4.0.0"
|
|
||||||
},
|
|
||||||
"repository": "yarnpkg/yarn",
|
|
||||||
"bin": {
|
|
||||||
"yarn": "./bin/yarn.js",
|
|
||||||
"yarnpkg": "./bin/yarn.js"
|
|
||||||
},
|
|
||||||
"config": {
|
|
||||||
"commitizen": {
|
|
||||||
"path": "./node_modules/cz-conventional-changelog"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue