diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 58c266bf..805b4298 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -46,8 +46,8 @@ jobs: - name: Install Dependencies run: npm ci --ignore-scripts - - name: Build Types - run: npm run build:types + - name: Build + run: npm run build # Release Please has already incremented versions and published tags, # so we just need to publish all unpublished versions to NPM here. diff --git a/package.json b/package.json index 85e2c404..fd8c5401 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "type": "module", "scripts": { "dev": "npx lerna run dev --parallel", - "build": "npm run build:types && npm run build --workspace packages/ui", + "build": "npm run build:types && lerna run build", "build:types": "find packages -name '*.d.ts' -o -name '*.d.ts.map' | xargs rm -f; tsc -p tsconfig.build.json", "build:examples:form": "npm run build && npm run build --workspace examples/form", "start:examples:form": "npm run start --workspace examples/form", diff --git a/packages/forms/package.json b/packages/forms/package.json index 5a2ae585..7f7415b5 100644 --- a/packages/forms/package.json +++ b/packages/forms/package.json @@ -4,13 +4,28 @@ "description": "Barso useForm hook and form validators", "license": "MIT", "type": "module", - "main": "src/index.js", - "types": "src/index.d.ts", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./src/index.d.ts", + "exports": { + ".": { + "types": "./src/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, + "./fields": { + "types": "./src/fields/index.d.ts", + "import": "./dist/fields/index.js", + "require": "./dist/fields/index.cjs" + } + }, "files": [ + "dist", "src", "!src/**/*.test.*" ], "scripts": { + "build": "vite build", "test": "tn test", "test:run": "tn test run", "lint": "eslint . && prettier --check .", diff --git a/packages/forms/vite.config.js b/packages/forms/vite.config.js new file mode 100644 index 00000000..b5a98ea4 --- /dev/null +++ b/packages/forms/vite.config.js @@ -0,0 +1,18 @@ +import { preserveDirectives } from 'rollup-plugin-preserve-directives'; +import { defineConfig, mergeConfig } from 'vite'; + +import { getBaseConfig } from '../../vite.lib.config.js'; + +export default defineConfig( + mergeConfig(getBaseConfig(), { + plugins: [preserveDirectives()], + build: { + rollupOptions: { + output: { + preserveModules: true, + preserveModulesRoot: 'src', + }, + }, + }, + }), +); diff --git a/packages/helpers/package.json b/packages/helpers/package.json index 38179840..543ab1c2 100644 --- a/packages/helpers/package.json +++ b/packages/helpers/package.json @@ -4,13 +4,23 @@ "description": "Barso helpers", "license": "MIT", "type": "module", - "main": "src/index.js", - "types": "src/index.d.ts", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./src/index.d.ts", + "exports": { + ".": { + "types": "./src/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + } + }, "files": [ + "dist", "src", "!src/**/*.test.*" ], "scripts": { + "build": "vite build", "test": "tn test", "test:run": "tn test run", "lint": "eslint . && prettier --check .", diff --git a/packages/helpers/vite.config.js b/packages/helpers/vite.config.js new file mode 100644 index 00000000..9711f04f --- /dev/null +++ b/packages/helpers/vite.config.js @@ -0,0 +1,5 @@ +import { defineConfig } from 'vite'; + +import { getBaseConfig } from '../../vite.lib.config.js'; + +export default defineConfig(getBaseConfig()); diff --git a/packages/hooks/package.json b/packages/hooks/package.json index 1b6cd4c2..a3844254 100644 --- a/packages/hooks/package.json +++ b/packages/hooks/package.json @@ -4,13 +4,23 @@ "description": "Barso Hooks", "license": "MIT", "type": "module", - "main": "src/index.js", - "types": "src/index.d.ts", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./src/index.d.ts", + "exports": { + ".": { + "types": "./src/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + } + }, "files": [ + "dist", "src", "!src/**/*.test.*" ], "scripts": { + "build": "vite build", "test": "tn test", "test:run": "tn test run", "lint": "eslint . && prettier --check .", diff --git a/packages/hooks/vite.config.js b/packages/hooks/vite.config.js new file mode 100644 index 00000000..9711f04f --- /dev/null +++ b/packages/hooks/vite.config.js @@ -0,0 +1,5 @@ +import { defineConfig } from 'vite'; + +import { getBaseConfig } from '../../vite.lib.config.js'; + +export default defineConfig(getBaseConfig()); diff --git a/packages/infra/package.json b/packages/infra/package.json index db408b8f..e2356171 100644 --- a/packages/infra/package.json +++ b/packages/infra/package.json @@ -4,13 +4,23 @@ "description": "Barso Infra", "license": "MIT", "type": "module", - "main": "src/index.js", - "types": "src/index.d.ts", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./src/index.d.ts", + "exports": { + ".": { + "types": "./src/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + } + }, "files": [ + "dist", "src", "!src/**/*.test.*" ], "scripts": { + "build": "vite build", "test": "tn test", "test:run": "tn test run", "lint": "eslint . && prettier --check .", diff --git a/packages/infra/vite.config.js b/packages/infra/vite.config.js new file mode 100644 index 00000000..9711f04f --- /dev/null +++ b/packages/infra/vite.config.js @@ -0,0 +1,5 @@ +import { defineConfig } from 'vite'; + +import { getBaseConfig } from '../../vite.lib.config.js'; + +export default defineConfig(getBaseConfig()); diff --git a/packages/ui/vite.config.js b/packages/ui/vite.config.js index 950213d9..bfdccb64 100644 --- a/packages/ui/vite.config.js +++ b/packages/ui/vite.config.js @@ -1,30 +1,30 @@ import { preserveDirectives } from 'rollup-plugin-preserve-directives'; -import { defineConfig } from 'vite'; +import { defineConfig, mergeConfig } from 'vite'; -export default defineConfig({ - plugins: [preserveDirectives()], - build: { - lib: { - entry: { - index: './src/index.js', - _document: './src/_document.jsx', - markdown: './src/Markdown/index.js', - primer: './src/primer-react.js', +import { getBaseConfig } from '../../vite.lib.config.js'; + +export default defineConfig( + mergeConfig(getBaseConfig(), { + plugins: [preserveDirectives()], + build: { + lib: { + entry: { + index: './src/index.js', + _document: './src/_document.jsx', + markdown: './src/Markdown/index.js', + primer: './src/primer-react.js', + }, }, - formats: ['es', 'cjs'], - fileName: (format, entryName) => `${entryName}.${format === 'es' ? 'js' : 'cjs'}`, - }, - rollupOptions: { - external: [/^react/, /^next\//, /^@primer\//, /^styled-components/, /^@bytemd\//, /^rehype-/], - output: { - globals: { - react: 'React', - 'react-dom': 'ReactDOM', + rollupOptions: { + output: { + globals: { + react: 'React', + 'react-dom': 'ReactDOM', + }, + preserveModules: true, + preserveModulesRoot: 'src', }, - externalLiveBindings: false, - preserveModules: true, - preserveModulesRoot: 'src', }, }, - }, -}); + }), +); diff --git a/tsconfig.build.json b/tsconfig.build.json index 1ea1b130..2b4f27cb 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -6,5 +6,18 @@ "emitDeclarationOnly": true, "declarationMap": true }, - "include": ["packages/**/*"] + "include": ["packages/**/*"], + "exclude": [ + "node_modules", + "worktrees", + ".worktrees", + "**/dist", + "**/*.d.ts", + "**/*.d.ts.map", + "**/*.test.*", + "**/test-utils.*", + "**/tests/**/*", + "**/vite.config.*", + "vite.lib.config.*" + ] } diff --git a/vite.lib.config.js b/vite.lib.config.js new file mode 100644 index 00000000..2ad39be0 --- /dev/null +++ b/vite.lib.config.js @@ -0,0 +1,22 @@ +import { readFileSync } from 'node:fs'; + +export function getBaseConfig() { + const pkg = JSON.parse(readFileSync('./package.json', 'utf-8')); + const externalDeps = [...Object.keys(pkg.dependencies || {}), ...Object.keys(pkg.peerDependencies || {})]; + + return { + build: { + lib: { + entry: './src/index.js', + formats: ['es', 'cjs'], + fileName: (format, entryName) => `${entryName}.${format === 'es' ? 'js' : 'cjs'}`, + }, + rollupOptions: { + external: (id) => externalDeps.some((dep) => id === dep || id.startsWith(`${dep}/`)), + output: { + externalLiveBindings: false, + }, + }, + }, + }; +} diff --git a/vitest.config.js b/vitest.config.js index cbb49c96..d745a9b1 100644 --- a/vitest.config.js +++ b/vitest.config.js @@ -1,10 +1,16 @@ import createConfig from 'barso/vitest'; +import path from 'node:path'; const config = createConfig({ + resolve: { + alias: [ + { + find: /^(?:@barso|packages)\/([^/]+)(?:\/(.+))?$/, + replacement: path.resolve('./packages/$1/src/$2'), + }, + ], + }, test: { - coverage: { - exclude: ['**/dist/**/*.*', '**/.next/**/*.*', '**/*.config.*'], - }, environment: 'jsdom', setupFiles: ['tests/setup.js'], },