dry + only replace updated files

pull/4914/head
pushkine 5 years ago
parent e0c67b5775
commit fe86552670

@ -1,16 +1,9 @@
import { readFileSync, writeFileSync } from 'fs';
import { glob } from '../tiny-glob';
import {replaceIfUpdated } from "../tiny-glob";
// this file will replace all the expected.js files with their _actual
// equivalents. Only use it when you're sure that you haven't
// broken anything!
const svelte = (function loadSvelte(test) {
process.env.TEST = test ? 'true' : '';
const resolved = require.resolve('../../compiler.js');
delete require.cache[resolved];
return require(resolved);
})(false);
function loadConfig(file) {
try {
const resolved = require.resolve(file);
@ -19,23 +12,19 @@ function loadConfig(file) {
const config = require(resolved);
return config.default || config;
} catch (err) {
if (err.code === 'MODULE_NOT_FOUND') {
if (err.code === "MODULE_NOT_FOUND") {
return {};
}
throw err;
}
}
glob('samples/*/input.svelte', { cwd: __dirname })
.forEach((file) => {
writeFileSync(
`${__dirname}/${file.replace('input.svelte', 'expected.js')}`,
svelte
.compile(
readFileSync(`${__dirname}/${file}`, 'utf-8').replace(/\s+$/, '').replace(/\r/g, ''),
loadConfig(`${__dirname}/${file.replace('input.svelte', '_config.js')}`).options
replaceIfUpdated((compile, check, get_relative) => {
check(
"expected.js",
compile(loadConfig(get_relative("_config.js")).options).js.code.replace(
/generated by Svelte v\d+\.\d+\.\d+(-\w+\.\d+)?/,
"generated by Svelte vX.Y.Z"
)
.js.code.replace(/generated by Svelte v\d+\.\d+\.\d+(-\w+\.\d+)?/, 'generated by Svelte vX.Y.Z').replace(/\r/g, '')
);
});
}, __dirname);

@ -1,32 +1,19 @@
import { readFileSync, writeFileSync } from 'fs';
import { glob } from '../tiny-glob';
import { replaceIfUpdated } from "../tiny-glob";
// this file will replace all the expected.js files with their _actual
// equivalents. Only use it when you're sure that you haven't
// broken anything!
const svelte = (function loadSvelte(test) {
process.env.TEST = test ? 'true' : '';
const resolved = require.resolve('../../compiler.js');
delete require.cache[resolved];
return require(resolved);
})(false);
glob('samples/*/input.svelte', { cwd: __dirname })
.forEach((file) => {
replaceIfUpdated((compile, check) => {
try {
writeFileSync(
`${__dirname}/${file.replace('input.svelte', 'output.json')}`,
JSON.stringify(
svelte.compile(readFileSync(`${__dirname}/${file}`, 'utf-8').replace(/\s+$/, '').replace(/\r/g, ''), { generate: false }).ast,
null,
'\t'
)
);
check("output.json", compile({ generate: false }).ast);
} catch (e) {
if (e.name !== 'ParseError') throw e;
writeFileSync(
`${__dirname}/${file.replace('input.svelte', 'error.json')}`,
JSON.stringify({ code:e.code, message: e.message, pos:e.pos, start:e.start }, null, '\t')
);
}
if (e.name !== "ParseError") throw e;
check("error.json", {
code: e.code,
message: e.message,
start: e.start,
pos: e.pos,
});
}
}, __dirname);

@ -1,6 +1,6 @@
import { readdirSync, lstatSync, statSync } from 'fs';
import { readdirSync, lstatSync, statSync, readFileSync, writeFileSync } from 'fs';
import { normalize, dirname, join, resolve, relative } from 'path';
import assert from "assert";
// MIT
// tiny-glob, globrex and globalyzer by Terkel Gjervig
@ -272,3 +272,43 @@ export function glob(str: string, { cwd = '.', absolute = false, filesOnly = fal
walk(matches, glob.base, path, filesOnly, dot, cwd, '.', 0);
return absolute ? matches.map((x) => resolve(cwd, x)) : matches;
}
export function replaceIfUpdated(config_getter, cwd) {
const svelte = (function loadSvelte() {
const resolved = require.resolve("../compiler.js");
delete require.cache[resolved];
return require(resolved);
})();
glob("samples/*/input.svelte", { cwd }).forEach((dir) => {
function compile(options){
return svelte.compile(
readFileSync(`${cwd}/${dir}`, "utf-8").replace(/\s+$/, "").replace(/\r/g, ""),
options
)
}
function check_news(file, value){
const path = `${cwd}/${dir.replace("input.svelte", file)}`;
try {
const previous = readFileSync(path, "utf-8");
if (typeof value === "object") {
assert.deepEqual(
JSON.parse(previous),
JSON.parse(JSON.stringify(value))
);
} else {
assert.equal(
previous.replace(/\s+$/, "").replace(/\r/g, ""),
(value = value.replace(/\s+$/, "").replace(/\r/g, ""))
);
}
} catch (e) {
if (typeof value === "object") value = JSON.stringify(value, null, "\t");
writeFileSync(path, value);
}
}
function get_relative(name){
return `${cwd}/${dir.replace("input.svelte", name)}`
}
config_getter(compile, check_news, get_relative );
});
}
Loading…
Cancel
Save