aureooms/rejuvenate

View on GitHub
src/transforms/ava:drop-experimental-loader.js

Summary

Maintainability
A
0 mins
Test Coverage
import update from '../lib/update.js';
import {sortKeys} from '../lib/ava.js';
import {replaceOrInsert, remove as removeKey} from '../lib/babel.js';

export const description = 'Drop --experimental-loader node flag.';

export const commit = {
    type: 'config',
    scope: 'ava',
    subject: description,
};

const oldEntry = '--experimental-loader=@node-loader/core';
const newEntry =
    "--import=data:text/javascript,import {register} from 'node:module'; import {pathToFileURL} from 'node:url'; register('@node-loader/core', pathToFileURL('./'))";

export async function postcondition({readPkg, assert}) {
    const {ava} = await readPkg();
    assert(ava !== undefined);
    assert(Array.isArray(ava.nodeArguments));
    assert(!ava.nodeArguments.includes(oldEntry));
    assert(ava.nodeArguments.includes(newEntry));
}

export async function precondition({readPkg, assert}) {
    const {ava} = await readPkg();
    assert(ava !== undefined);
    assert(Array.isArray(ava.nodeArguments));
    assert(ava.nodeArguments.includes(oldEntry));
    assert(!ava.nodeArguments.includes(newEntry));
}

export async function apply({readPkg, writePkg, fixConfig, test}) {
    await update({
        read: readPkg,
        write: writePkg,
        edit(pkgjson) {
            removeKey(pkgjson.ava, 'nodeArguments', oldEntry);
            replaceOrInsert(pkgjson.ava, 'nodeArguments', newEntry);
            pkgjson.ava = sortKeys(pkgjson.ava);
            return pkgjson;
        },
    });
    await fixConfig();
    await test();
}

export const dependencies = ['ava:test-build'];