Files
test-repo/tests/config/utils/create-snapshot.js
T
fisker Cheung c95c899b6f Merge branch 'main' into next
# Conflicts:
#	package.json
#	scripts/build/bundler.mjs
#	scripts/build/config.mjs
#	scripts/vendors/vendor-meta.json
#	scripts/vendors/vendors.mjs
#	src/cli/format.js
#	src/cli/logger.js
#	src/cli/options/get-options-for-file.js
#	src/cli/options/parse-cli-arguments.js
#	src/main/core.js
#	tests/config/install-prettier.js
#	vendors/execa.js
#	vendors/mem.js
#	vendors/string-width.js
#	vendors/tempy.js
#	yarn.lock
2022-03-17 09:44:08 +08:00

102 lines
2.6 KiB
JavaScript

import { wrap as raw } from "jest-snapshot-serializer-raw";
import visualizeRange from "./visualize-range.js";
import visualizeEndOfLine from "./visualize-end-of-line.js";
const SEPARATOR_WIDTH = 80;
function printSeparator(description = "") {
const leftLength = Math.floor((SEPARATOR_WIDTH - description.length) / 2);
const rightLength = SEPARATOR_WIDTH - leftLength - description.length;
return "=".repeat(leftLength) + description + "=".repeat(rightLength);
}
function stringify(value) {
return value === Number.POSITIVE_INFINITY
? "Infinity"
: Array.isArray(value)
? `[${value.map((v) => JSON.stringify(v)).join(", ")}]`
: JSON.stringify(value);
}
function printOptions(options) {
const {
plugins,
filepath,
errors,
parser,
pluginSearchDirs,
...snapshotOptions
} = options;
if (pluginSearchDirs !== false) {
snapshotOptions.pluginSearchDirs = pluginSearchDirs;
}
const keys = Object.keys(snapshotOptions).sort();
return keys
.map((key) => `${key}: ${stringify(snapshotOptions[key])}`)
.join("\n");
}
function printWidthIndicator(printWidth, offset) {
if (!Number.isFinite(printWidth) || printWidth < 1) {
return "";
}
let before = "";
if (offset) {
before = " ".repeat(offset - 1) + "|";
}
return `${before}${" ".repeat(printWidth)}| printWidth`;
}
function createSnapshot(
formatResult,
{ parsers, formatOptions, CURSOR_PLACEHOLDER }
) {
let {
inputWithCursor: input,
outputWithCursor: output,
options,
} = formatResult;
let { rangeStart, rangeEnd, cursorOffset, printWidth } = options;
let codeOffset = 0;
if (typeof rangeStart === "number" || typeof rangeEnd === "number") {
if (typeof cursorOffset === "number") {
if (typeof rangeStart === "number" && rangeStart > cursorOffset) {
rangeStart += CURSOR_PLACEHOLDER.length;
}
if (typeof rangeEnd === "number" && rangeEnd > cursorOffset) {
rangeEnd += CURSOR_PLACEHOLDER.length;
}
}
input = visualizeRange(input, { rangeStart, rangeEnd });
codeOffset = input.match(/^>?\s+1 \|/)[0].length + 1;
}
if ("endOfLine" in formatOptions) {
input = visualizeEndOfLine(input);
output = visualizeEndOfLine(output);
}
const widthIndicator = printWidthIndicator(printWidth, codeOffset);
return raw(
[
printSeparator("options"),
printOptions({ ...options, parsers }),
...(widthIndicator ? [widthIndicator] : []),
printSeparator("input"),
input,
printSeparator("output"),
output,
printSeparator(),
].join("\n")
);
}
export default createSnapshot;