@stellaris/vite-plugin-tencent-oss
Version:
Upload the production files bundled in the project to Tencent CSS, except for html
125 lines (106 loc) • 3.61 kB
JavaScript
// 简单的测试框架实现
const describe = (name, fn) => {
console.log(`\n📝 ${name}`);
fn();
};
const it = (name, fn) => {
try {
fn();
console.log(` ✅ ${name}`);
} catch (error) {
console.log(` ❌ ${name}`);
console.log(` ${error.message}`);
}
};
const expect = (actual) => ({
toEqual: (expected) => {
if (JSON.stringify(actual) !== JSON.stringify(expected)) {
throw new Error(
`Expected ${JSON.stringify(expected)}, but got ${JSON.stringify(
actual
)}`
);
}
},
});
import path from "path";
import { minimatch } from "minimatch";
// 测试文件分离逻辑
function separateFilesByGlobs(files, lastCommitGlobs, outDirPath) {
if (!lastCommitGlobs || lastCommitGlobs.length === 0) {
return { normalFiles: files, lastCommitFiles: [] };
}
const normalFiles = [];
const lastCommitFiles = [];
for (const fileFullPath of files) {
const relativePath = path.relative(outDirPath, fileFullPath);
const shouldBeLastCommit = lastCommitGlobs.some((pattern) => {
return (
minimatch(relativePath, pattern) || minimatch(fileFullPath, pattern)
);
});
if (shouldBeLastCommit) {
lastCommitFiles.push(fileFullPath);
} else {
normalFiles.push(fileFullPath);
}
}
return { normalFiles, lastCommitFiles };
}
describe("separateFilesByGlobs", () => {
const outDirPath = "/project/dist";
const testFiles = [
"/project/dist/index.html",
"/project/dist/assets/index.123.js",
"/project/dist/assets/vendor.456.js",
"/project/dist/assets/style.789.css",
"/project/dist/favicon.ico",
];
it("没有 lastCommitGlobs 时应该返回所有文件为普通文件", () => {
const result = separateFilesByGlobs(testFiles, [], outDirPath);
expect(result.normalFiles).toEqual(testFiles);
expect(result.lastCommitFiles).toEqual([]);
});
it("应该正确分离 HTML 文件", () => {
const lastCommitGlobs = ["**/*.html"];
const result = separateFilesByGlobs(testFiles, lastCommitGlobs, outDirPath);
expect(result.normalFiles).toEqual([
"/project/dist/assets/index.123.js",
"/project/dist/assets/vendor.456.js",
"/project/dist/assets/style.789.css",
"/project/dist/favicon.ico",
]);
expect(result.lastCommitFiles).toEqual(["/project/dist/index.html"]);
});
it("应该正确分离多种类型的文件", () => {
const lastCommitGlobs = ["**/*.html", "**/index.*.js"];
const result = separateFilesByGlobs(testFiles, lastCommitGlobs, outDirPath);
expect(result.normalFiles).toEqual([
"/project/dist/assets/vendor.456.js",
"/project/dist/assets/style.789.css",
"/project/dist/favicon.ico",
]);
expect(result.lastCommitFiles).toEqual([
"/project/dist/index.html",
"/project/dist/assets/index.123.js",
]);
});
it("应该处理复杂的 glob 模式", () => {
const lastCommitGlobs = ["**/assets/*.css", "*.ico"];
const result = separateFilesByGlobs(testFiles, lastCommitGlobs, outDirPath);
expect(result.normalFiles).toEqual([
"/project/dist/index.html",
"/project/dist/assets/index.123.js",
"/project/dist/assets/vendor.456.js",
]);
expect(result.lastCommitFiles).toEqual([
"/project/dist/assets/style.789.css",
"/project/dist/favicon.ico",
]);
});
it("应该处理空的文件列表", () => {
const result = separateFilesByGlobs([], ["**/*.html"], outDirPath);
expect(result.normalFiles).toEqual([]);
expect(result.lastCommitFiles).toEqual([]);
});
});