Remove yarn-closure code

This commit is contained in:
Stéphan Kochen
2020-08-25 16:37:59 +02:00
parent 413deabced
commit 09b7b70664
3 changed files with 8 additions and 61 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+4 -46
View File
@@ -27,7 +27,6 @@ const generate = async (project: Project, cache: Cache, report: Report) => {
const { configuration, cwd } = project; const { configuration, cwd } = project;
const yarnPathAbs = configuration.get(`yarnPath`); const yarnPathAbs = configuration.get(`yarnPath`);
const cacheFolderAbs = configuration.get(`cacheFolder`); const cacheFolderAbs = configuration.get(`cacheFolder`);
const lockfileFilename = configuration.get(`lockfileFilename`);
let yarnPath = ppath.relative(cwd, yarnPathAbs); let yarnPath = ppath.relative(cwd, yarnPathAbs);
if (yarnPath.startsWith(`../`)) { if (yarnPath.startsWith(`../`)) {
@@ -47,48 +46,15 @@ const generate = async (project: Project, cache: Cache, report: Report) => {
); );
} }
// List files the derivation will depend on.
const yarnClosureInput = new Set([
`package.json`,
lockfileFilename,
yarnPath,
]);
for (const source of configuration.sources.values()) { for (const source of configuration.sources.values()) {
if (!source.startsWith(`<`)) { if (!source.startsWith(`<`)) {
yarnClosureInput.add(source); const relativeSource = ppath.relative(cwd, source);
} if (relativeSource.startsWith(`../`)) {
}
// TODO: Better way to find plugins? Re-parse rcfiles maybe?
const pluginsDir = ppath.join(cwd, `.yarn/plugins` as Filename);
if (xfs.existsSync(pluginsDir)) {
for (const filename of xfs.readdirSync(pluginsDir)) {
yarnClosureInput.add(ppath.join(pluginsDir, filename));
}
}
// Build Nix `filterSource` entries to match on.
const yarnClosureEntries = new Set();
for (const inputPath of yarnClosureInput) {
// Filter paths not reachable during the build and warn. (These are often
// just user global configuration files, but the warnings can help highlight
// dependencies on private registries.)
const relativePath = ppath.relative(cwd, inputPath);
if (relativePath.startsWith(`../`)) {
if (inputPath !== yarnPath) {
report.reportWarning( report.reportWarning(
0, 0,
`The path ${inputPath} is outside the project and was ignored - it may not be reachable in the Nix build` `The config file ${source} is outside the project - it may not be reachable by the Nix build`
); );
} }
continue;
}
// Add the file itself.
yarnClosureEntries.add(`regular:${relativePath}`);
// Add directories leading up to the file.
let dir = ppath.dirname(relativePath);
while (dir !== `.`) {
yarnClosureEntries.add(`directory:${dir}`);
dir = ppath.dirname(dir);
} }
} }
@@ -118,6 +84,7 @@ const generate = async (project: Project, cache: Cache, report: Report) => {
const projectName = ident ? structUtils.stringifyIdent(ident) : `workspace`; const projectName = ident ? structUtils.stringifyIdent(ident) : `workspace`;
const projectExpr = projectExprTmpl const projectExpr = projectExprTmpl
.replace(`@@PROJECT_NAME@@`, JSON.stringify(projectName)) .replace(`@@PROJECT_NAME@@`, JSON.stringify(projectName))
.replace(`@@YARN_PATH@@`, JSON.stringify(yarnPath))
.replace(`@@CACHE_FOLDER@@`, JSON.stringify(cacheFolder)) .replace(`@@CACHE_FOLDER@@`, JSON.stringify(cacheFolder))
.replace( .replace(
`@@CACHE_ENTRIES@@`, `@@CACHE_ENTRIES@@`,
@@ -126,15 +93,6 @@ const generate = async (project: Project, cache: Cache, report: Report) => {
.map((entry) => ` { ${entry.join(` `)} }\n`) .map((entry) => ` { ${entry.join(` `)} }\n`)
.join(``) + .join(``) +
` ]` ` ]`
)
.replace(`@@YARN_PATH@@`, JSON.stringify(yarnPath))
.replace(
`@@YARN_CLOSURE_ENTRIES@@`,
`[\n` +
[...yarnClosureEntries]
.map((entry) => ` ${JSON.stringify(entry)}\n`)
.join(``) +
` ]`
); );
const projectExprPath = ppath.join(cwd, `yarn-project.nix` as Filename); const projectExprPath = ppath.join(cwd, `yarn-project.nix` as Filename);
xfs.writeFileSync(projectExprPath, projectExpr); xfs.writeFileSync(projectExprPath, projectExpr);
+3 -14
View File
@@ -9,10 +9,9 @@ let
# Variables provided by the generator. # Variables provided by the generator.
project-name = @@PROJECT_NAME@@; project-name = @@PROJECT_NAME@@;
yarn-path = @@YARN_PATH@@;
cache-folder = @@CACHE_FOLDER@@; cache-folder = @@CACHE_FOLDER@@;
cache-entries = @@CACHE_ENTRIES@@; cache-entries = @@CACHE_ENTRIES@@;
yarn-path = @@YARN_PATH@@;
yarn-closure-entries = @@YARN_CLOSURE_ENTRIES@@;
# Defines the shell alias to run Yarn. # Defines the shell alias to run Yarn.
yarn-alias = '' yarn-alias = ''
@@ -21,16 +20,6 @@ let
} }
''; '';
# Directory of just the files needed to run Yarn.
yarn-closure = cleanSourceWith {
inherit src;
filter = let
srcStr = toString src;
srcRel = removePrefix "${srcStr}/";
in path: type:
elem "${type}:${srcRel path}" yarn-closure-entries;
};
# Fetch a single dependency. # Fetch a single dependency.
fetch = { filename, sha512, locator-hash }: stdenv.mkDerivation { fetch = { filename, sha512, locator-hash }: stdenv.mkDerivation {
name = replaceStrings [ "@" ] [ "-" ] filename; name = replaceStrings [ "@" ] [ "-" ] filename;
@@ -46,7 +35,7 @@ let
export yarn_cache_folder="$PWD" export yarn_cache_folder="$PWD"
# Setup to environment so we can run Yarn. # Setup to environment so we can run Yarn.
pushd '${yarn-closure}' > /dev/null pushd '${src}' > /dev/null
export NIX_YARN_PATH="$(readlink -f '${yarn-path}')" export NIX_YARN_PATH="$(readlink -f '${yarn-path}')"
${yarn-alias} ${yarn-alias}
@@ -128,6 +117,6 @@ in stdenv.mkDerivation {
''; '';
passthru = { passthru = {
inherit yarn-closure offline-cache; inherit offline-cache;
}; };
} }