Skip to content

Commit

Permalink
build: bundling via Vite
Browse files Browse the repository at this point in the history
  • Loading branch information
ScarletFlash committed Nov 10, 2024
1 parent 7cb32b5 commit 73e24cc
Show file tree
Hide file tree
Showing 12 changed files with 1,225 additions and 28 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
node_modules
coverage
dist
89 changes: 89 additions & 0 deletions build.script.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
import { resolve } from "path";
import { build, LibraryOptions, resolveConfig, ResolvedConfig } from "vite";

import { PackageJSON } from "@npm/types";
import { access, cp, readFile, writeFile } from "fs/promises";

const encoding: "utf-8" = "utf-8";
const packageJsonKeysToKeep: Set<string | number> = new Set<keyof PackageJSON>([
"author",
"bugs",
"bundleDependencies",
"bundledDependencies",
"contributors",
"dependencies",
"description",
"files",
"funding",
"homepage",
"keywords",
"license",
"main",
"man",
"name",
"optionalDependencies",
"peerDependencies",
"peerDependenciesMeta",
"repository",
"types",
"version",
]);

(async () => {
const configFile: string = resolve(__dirname, "vite.config.ts");
await access(configFile);

await build({
configFile,
});

const {
build: { outDir, lib },
}: ResolvedConfig = await resolveConfig(
{
configFile,
},
"build"
);
if (typeof lib === "boolean") {
throw new Error(
"Vite config / build / lib is expected to be LibraryOptions"
);
}
const { fileName }: LibraryOptions = lib;

const licenseFileName: string = "LICENSE.md";
const licenseFile: string = resolve(__dirname, licenseFileName);
await access(licenseFile);
await cp(licenseFile, resolve(__dirname, outDir, licenseFileName));

const readMeFileName: string = "README.md";
const readMeFile: string = resolve(__dirname, readMeFileName);
await access(readMeFile);
await cp(readMeFile, resolve(__dirname, outDir, readMeFileName));

const packageJsonFile: string = resolve(__dirname, "package.json");
const packageJson: PackageJSON = JSON.parse(
await readFile(packageJsonFile, {
encoding,
})
);
const modifiedPackageJson: Record<string, unknown> = Object.fromEntries(
Object.entries(packageJson).filter(([key]) =>
packageJsonKeysToKeep.has(key)
)
);
await writeFile(
resolve(__dirname, outDir, "package.json"),
JSON.stringify({
...modifiedPackageJson,
main: `${fileName}.mjs`,
browser: `${fileName}.mjs`,
types: `${fileName}.d.ts`,
license: "MIT",
} satisfies Partial<PackageJSON>),
{
encoding,
}
);
})();
6 changes: 3 additions & 3 deletions jest.config.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { createDefaultPreset, JestConfigWithTsJest } from "ts-jest";
import { compilerOptions } from "./tsconfig.json";

module.exports = {
...createDefaultPreset(),
...createDefaultPreset({
tsconfig: "<rootDir>/tsconfig.test.json",
}),
roots: ["<rootDir>"],
modulePaths: [compilerOptions.baseUrl],
testEnvironment: "jsdom",
collectCoverage: true,
coverageThreshold: {
Expand Down
25 changes: 22 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,42 @@
"name": "multiprovider",
"version": "0.1.0",
"private": true,
"repository": {
"type": "git",
"url": "git+https://github.com/ScarletFlash/multiprovider.git"
},
"bugs": {
"url": "https://github.com/ScarletFlash/multiprovider/issues"
},
"author": {
"name": "Fedor Usakov",
"email": "[email protected]",
"url": "https://scarletflash.github.io/"
},
"scripts": {
"build": "ts-node --project tsconfig.root.json ./build.script.ts",
"test": "jest --config ./jest.config.ts"
},
"dependencies": {
"peerDependencies": {
"react": "^18.0.0"
},
"devDependencies": {
"@npm/types": "^2.0.0",
"@types/node": "^22.0.0",
"@testing-library/dom": "^10.0.0",
"@testing-library/jest-dom": "^6.0.0",
"@testing-library/react": "^16.0.0",
"jest-environment-jsdom": "^29.0.0",
"@types/jest": "^29.0.0",
"@types/react": "^18.0.0",
"@types/react-dom": "^18.0.0",
"@vitejs/plugin-react": "^4.0.0",
"jest": "^29.0.0",
"jest-environment-jsdom": "^29.0.0",
"react": "^18.0.0",
"ts-jest": "^29.0.0",
"ts-node": "^10.0.0",
"typescript": "^5.0.0"
"typescript": "^5.0.0",
"vite": "^5.0.0",
"vite-plugin-dts": "^4.0.0"
}
}
Loading

0 comments on commit 73e24cc

Please sign in to comment.