From cebb8e2d8b32edb1d5396a73db0435854731024e Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 7 Nov 2024 23:29:05 +0100 Subject: [PATCH] chore: minor cleanup chore: minor adjustments --- bun.lockb | Bin 224709 -> 169143 bytes commitlint.config.js | 75 ----------- package.json | 16 +-- src/index.ts | 18 +-- src/stubs.txt | 303 ------------------------------------------ test/dts-auto.test.ts | 200 ---------------------------- test/dtsx.test.ts | 34 +++++ 7 files changed, 47 insertions(+), 599 deletions(-) delete mode 100644 commitlint.config.js delete mode 100644 src/stubs.txt delete mode 100644 test/dts-auto.test.ts create mode 100644 test/dtsx.test.ts diff --git a/bun.lockb b/bun.lockb index 657426df21b051fd07733f5a144bf183e20b2e74..18d3e2a79a1ed08f2d47cd97f742da55391bc173 100755 GIT binary patch delta 38969 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

U2P6ZuIClY} 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 diff --git a/commitlint.config.js b/commitlint.config.js deleted file mode 100644 index 2afc122..0000000 --- a/commitlint.config.js +++ /dev/null @@ -1,75 +0,0 @@ -const scopes = ['', 'ci', 'deps', 'dx', 'example', 'release', 'readme', 'build'] - -/** @type {import('cz-git').UserConfig} */ -export default { - rules: { - 'scope-enum': [2, 'always', scopes], - }, - prompt: { - messages: { - type: 'Select the type of change that you\'re committing:', - scope: 'Select the SCOPE of this change (optional):', - customScope: 'Select the SCOPE of this change:', - subject: 'Write a SHORT, IMPERATIVE tense description of the change:\n', - body: 'Provide a LONGER description of the change (optional). Use "|" to break new line:\n', - breaking: 'List any BREAKING CHANGES (optional). Use "|" to break new line:\n', - footerPrefixesSelect: 'Select the ISSUES type of changeList by this change (optional):', - customFooterPrefixes: 'Input ISSUES prefix:', - footer: 'List any ISSUES by this change. E.g.: #31, #34:\n', - confirmCommit: 'Are you sure you want to proceed with the commit above?', - }, - types: [ - { value: 'feat', name: 'feat: ✨ A new feature', emoji: ':sparkles:' }, - { value: 'fix', name: 'fix: 🐛 A bug fix', emoji: ':bug:' }, - { value: 'docs', name: 'docs: 📝 Documentation only changes', emoji: ':memo:' }, - { value: 'style', name: 'style: 💄 Changes that do not affect the meaning of the code', emoji: ':lipstick:' }, - { - value: 'refactor', - name: 'refactor: ♻️ A code change that neither fixes a bug nor adds a feature', - emoji: ':recycle:', - }, - { value: 'perf', name: 'perf: ⚡️ A code change that improves performance', emoji: ':zap:' }, - { - value: 'test', - name: 'test: ✅ Adding missing tests or adjusting existing tests', - emoji: ':white_check_mark:', - }, - { - value: 'build', - name: 'build: 📦️ Changes that affect the build system or external dependencies', - emoji: ':package:', - }, - { value: 'ci', name: 'ci: 🎡 Changes to our CI configuration files and scripts', emoji: ':ferris_wheel:' }, - { value: 'chore', name: 'chore: 🔨 Other changes that don\'t modify src or test files', emoji: ':hammer:' }, - { value: 'revert', name: 'revert: ⏪️ Reverts a previous commit', emoji: ':rewind:' }, - ], - useEmoji: false, - themeColorCode: '', - scopes, - allowCustomScopes: true, - allowEmptyScopes: true, - customScopesAlign: 'bottom', - customScopesAlias: 'custom', - emptyScopesAlias: 'empty', - upperCaseSubject: false, - allowBreakingChanges: ['feat', 'fix'], - breaklineNumber: 100, - breaklineChar: '|', - skipQuestions: [], - issuePrefixes: [{ value: 'closed', name: 'closed: ISSUES has been processed' }], - customIssuePrefixesAlign: 'top', - emptyIssuePrefixesAlias: 'skip', - customIssuePrefixesAlias: 'custom', - allowCustomIssuePrefixes: true, - allowEmptyIssuePrefixes: true, - confirmColorize: true, - maxHeaderLength: Number.POSITIVE_INFINITY, - maxSubjectLength: Number.POSITIVE_INFINITY, - minSubjectLength: 0, - scopeOverrides: undefined, - defaultBody: '', - defaultIssues: '', - defaultScope: '', - defaultSubject: '', - }, -} diff --git a/package.json b/package.json index 2b289d5..1c2dc36 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,6 @@ "lint": "bunx eslint .", "lint:fix": "bunx eslint . --fix", "fresh": "bunx rimraf node_modules/ bun.lock && bun i", - "commit": "git cz", "changelog": "bunx changelogen --output CHANGELOG.md", "prepublishOnly": "bun run build", "release": "bun run changelog && bunx bumpp package.json --all", @@ -51,30 +50,21 @@ "typecheck": "bun tsc --noEmit" }, "dependencies": { - "@stacksjs/dtsx": "^0.2.2" + "@stacksjs/dtsx": "^0.5.0" }, "devDependencies": { - "@commitlint/cli": "^19.5.0", "@stacksjs/eslint-config": "^3.8.1-beta.2", "@types/bun": "^1.1.10", "bumpp": "^9.6.1", "changelogen": "^0.5.7", - "commitizen": "^4.3.1", - "cz-git": "^1.10.1", "lint-staged": "^15.2.10", "simple-git-hooks": "^2.11.1", "typescript": "^5.6.2" }, "simple-git-hooks": { - "pre-commit": "bun lint-staged", - "commit-msg": "bunx --no -- commitlint --edit $1" + "pre-commit": "bun lint-staged" }, "lint-staged": { - "*.{js,jsx,ts,tsx}": "bunx eslint . --fix" - }, - "config": { - "commitizen": { - "path": "node_modules/cz-git" - } + "*.{js,ts}": "bunx eslint . --fix" } } diff --git a/src/index.ts b/src/index.ts index d2a264f..4d0b644 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,13 +8,13 @@ export function dts(options?: DtsGenerationOption): BunPlugin { name: 'bun-plugin-dtsx', async setup(build) { - const cwd = options?.cwd ?? process.cwd() - const root = options?.root ?? build.config.root - const entrypoints = options?.entrypoints ?? build.config.entrypoints - const outdir = options?.outdir ?? build.config.outdir - const keepComments = options?.keepComments ?? true - const clean = options?.clean ?? false - const tsconfigPath = options?.tsconfigPath ?? './tsconfig.json' + const cwd = options?.cwd || process.cwd() + const root = options?.root || build.config.root + const entrypoints = options?.entrypoints // || build.config.entrypoints - we are not resorting to this yet because the `bundle` dtsx option is not yet supported + const outdir = options?.outdir || build.config.outdir + const clean = options?.clean || false + const tsconfigPath = options?.tsconfigPath || './tsconfig.json' + // const keepComments = options?.keepComments || true await generate({ ...options, @@ -22,14 +22,16 @@ export function dts(options?: DtsGenerationOption): BunPlugin { root, entrypoints, outdir, - keepComments, clean, tsconfigPath, + // keepComments, }) }, } } +export { generate } + export type { DtsGenerationOption } export default dts diff --git a/src/stubs.txt b/src/stubs.txt deleted file mode 100644 index a90cc3d..0000000 --- a/src/stubs.txt +++ /dev/null @@ -1,303 +0,0 @@ -function requireNative() { - const loadErrors = [] - - if (process.platform === 'android') { - if (process.arch === 'arm64') { - try { - return import.meta.require('../../@oxc-transform/binding-android-arm64/transform.android-arm64.node') - } catch (e) { - loadErrors.push(e) - } - try { - return import.meta.require('@oxc-transform/binding-android-arm64') - } catch (e) { - loadErrors.push(e) - } - } else if (process.arch === 'arm') { - try { - return import.meta.require( - '../../@oxc-transform/binding-android-arm-eabi/transform.android-arm-eabi.node', - ) - } catch (e) { - loadErrors.push(e) - } - try { - return import.meta.require('@oxc-transform/binding-android-arm-eabi') - } catch (e) { - loadErrors.push(e) - } - } else { - loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`)) - } - } else if (process.platform === 'win32') { - if (process.arch === 'x64') { - try { - return import.meta.require( - '../../@oxc-transform/binding-win32-x64-msvc/transform.win32-x64-msvc.node', - ) - } catch (e) { - loadErrors.push(e) - } - try { - return import.meta.require('@oxc-transform/binding-win32-x64-msvc') - } catch (e) { - loadErrors.push(e) - } - } else if (process.arch === 'ia32') { - try { - return import.meta.require( - '../../@oxc-transform/binding-win32-ia32-msvc/transform.win32-ia32-msvc.node', - ) - } catch (e) { - loadErrors.push(e) - } - try { - return import.meta.require('@oxc-transform/binding-win32-ia32-msvc') - } catch (e) { - loadErrors.push(e) - } - } else if (process.arch === 'arm64') { - try { - return import.meta.require( - '../../@oxc-transform/binding-win32-arm64-msvc/transform.win32-arm64-msvc.node', - ) - } catch (e) { - loadErrors.push(e) - } - try { - return import.meta.require('@oxc-transform/binding-win32-arm64-msvc') - } catch (e) { - loadErrors.push(e) - } - } else { - loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`)) - } - } else if (process.platform === 'darwin') { - try { - return import.meta.require( - '../../@oxc-transform/binding-darwin-universal/transform.darwin-universal.node', - ) - } catch (e) { - loadErrors.push(e) - } - - try { - return import.meta.require('@oxc-transform/binding-darwin-universal') - } catch (e) { - loadErrors.push(e) - } - - if (process.arch === 'x64') { - try { - return import.meta.require('../../@oxc-transform/binding-darwin-x64/transform.darwin-x64.node') - } catch (e) { - loadErrors.push(e) - } - - try { - return import.meta.require('@oxc-transform/binding-darwin-x64') - } catch (e) { - loadErrors.push(e) - } - } else if (process.arch === 'arm64') { - try { - return import.meta.require('../../@oxc-transform/binding-darwin-arm64/transform.darwin-arm64.node') - } catch (e) { - loadErrors.push(e) - } - - try { - console.log('import.meta.require darwinarm64') - return import.meta.require('@oxc-transform/binding-darwin-arm64') - } catch (e) { - console.log('import.meta.require darwinarm64 error', e) - loadErrors.push(e) - } - } else { - loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`)) - } - } else if (process.platform === 'freebsd') { - if (process.arch === 'x64') { - try { - return import.meta.require('../../@oxc-transform/binding-freebsd-x64/transform.freebsd-x64.node') - } catch (e) { - loadErrors.push(e) - } - - try { - return import.meta.require('@oxc-transform/binding-freebsd-x64') - } catch (e) { - loadErrors.push(e) - } - } else if (process.arch === 'arm64') { - try { - return import.meta.require('../../@oxc-transform/binding-freebsd-arm64/transform.freebsd-arm64.node') - } catch (e) { - loadErrors.push(e) - } - - try { - return import.meta.require('@oxc-transform/binding-freebsd-arm64') - } catch (e) { - loadErrors.push(e) - } - } else { - loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`)) - } - } else if (process.platform === 'linux') { - if (process.arch === 'x64') { - if (isMusl()) { - try { - return import.meta.require( - '../../@oxc-transform/binding-linux-x64-musl/transform.linux-x64-musl.node', - ) - } catch (e) { - loadErrors.push(e) - } - - try { - return import.meta.require('@oxc-transform/binding-linux-x64-musl') - } catch (e) { - loadErrors.push(e) - } - } else { - try { - return import.meta.require( - '../../@oxc-transform/binding-linux-x64-gnu/transform.linux-x64-gnu.node', - ) - } catch (e) { - loadErrors.push(e) - } - - try { - return import.meta.require('@oxc-transform/binding-linux-x64-gnu') - } catch (e) { - loadErrors.push(e) - } - } - } else if (process.arch === 'arm64') { - if (isMusl()) { - try { - return import.meta.require( - '../../@oxc-transform/binding-linux-arm64-musl/transform.linux-arm64-musl.node', - ) - } catch (e) { - loadErrors.push(e) - } - - try { - return import.meta.require('@oxc-transform/binding-linux-arm64-musl') - } catch (e) { - loadErrors.push(e) - } - } else { - try { - return import.meta.require( - '../../@oxc-transform/binding-linux-arm64-gnu/transform.linux-arm64-gnu.node', - ) - } catch (e) { - loadErrors.push(e) - } - - try { - return import.meta.require('@oxc-transform/binding-linux-arm64-gnu') - } catch (e) { - loadErrors.push(e) - } - } - } else if (process.arch === 'arm') { - if (isMusl()) { - try { - return import.meta.require( - '../../@oxc-transform/binding-linux-arm-musleabihf/transform.linux-arm-musleabihf.node', - ) - } catch (e) { - loadErrors.push(e) - } - - try { - return import.meta.require('@oxc-transform/binding-linux-arm-musleabihf') - } catch (e) { - loadErrors.push(e) - } - } else { - try { - return import.meta.require( - '../../@oxc-transform/binding-linux-arm-gnueabihf/transform.linux-arm-gnueabihf.node', - ) - } catch (e) { - loadErrors.push(e) - } - - try { - return import.meta.require('@oxc-transform/binding-linux-arm-gnueabihf') - } catch (e) { - loadErrors.push(e) - } - } - } else if (process.arch === 'riscv64') { - if (isMusl()) { - try { - return import.meta.require( - '../../@oxc-transform/binding-linux-riscv64-musl/transform.linux-riscv64-musl.node', - ) - } catch (e) { - loadErrors.push(e) - } - - try { - return import.meta.require('@oxc-transform/binding-linux-riscv64-musl') - } catch (e) { - loadErrors.push(e) - } - } else { - try { - return import.meta.require( - '../../@oxc-transform/binding-linux-riscv64-gnu/transform.linux-riscv64-gnu.node', - ) - } catch (e) { - loadErrors.push(e) - } - - try { - return import.meta.require('@oxc-transform/binding-linux-riscv64-gnu') - } catch (e) { - loadErrors.push(e) - } - } - } else if (process.arch === 'ppc64') { - try { - return import.meta.require( - '../../@oxc-transform/binding-linux-ppc64-gnu/transform.linux-ppc64-gnu.node', - ) - } catch (e) { - loadErrors.push(e) - } - - try { - return import.meta.require('@oxc-transform/binding-linux-ppc64-gnu') - } catch (e) { - loadErrors.push(e) - } - } else if (process.arch === 's390x') { - try { - return import.meta.require( - '../../@oxc-transform/binding-linux-s390x-gnu/transform.linux-s390x-gnu.node', - ) - } catch (e) { - loadErrors.push(e) - } - - try { - return import.meta.require('@oxc-transform/binding-linux-s390x-gnu') - } catch (e) { - loadErrors.push(e) - } - } else { - loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`)) - } - } else { - loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`)) - } - console.log('end here') -} diff --git a/test/dts-auto.test.ts b/test/dts-auto.test.ts deleted file mode 100644 index 49190b9..0000000 --- a/test/dts-auto.test.ts +++ /dev/null @@ -1,200 +0,0 @@ -import type { OnLoadResult, PluginBuilder } from 'bun' -import { afterAll, beforeAll, describe, expect, it } from 'bun:test' -import fs from 'node:fs' -import path from 'node:path' -import { dts, generate } from '../src/index' - -const tempDir = path.resolve(process.cwd(), 'test-temp') -const srcDir = path.join(tempDir, 'src') -const outDir = path.join(tempDir, 'dist') - -describe('bun-plugin-dts-auto', () => { - beforeAll(() => { - fs.mkdirSync(tempDir, { recursive: true }) - fs.mkdirSync(srcDir, { recursive: true }) - fs.mkdirSync(outDir, { recursive: true }) - - const sampleFile = path.join(srcDir, 'sample.ts') - fs.writeFileSync( - sampleFile, - ` - export interface User { - id: number; - name: string; - } - - export function greet(user: User): string { - return \`Hello, \${user.name}!\`; - } - `, - ) - }) - - afterAll(() => { - fs.rmSync(tempDir, { recursive: true, force: true }) - }) - - it('should generate declaration files', async () => { - const inputFile = 'src/sample.ts' - - await generate({ - cwd: tempDir, - root: 'src', - outdir: 'dist', - files: inputFile, - }) - - const declarationFile = path.join(outDir, 'sample.d.ts') - expect(fs.existsSync(declarationFile)).toBe(true) - - if (fs.existsSync(declarationFile)) { - const content = fs.readFileSync(declarationFile, 'utf-8') - expect(content).toContain('export interface User') - expect(content).toContain('export declare function greet(user: User): string') - } - }) - - it('should handle multiple files', async () => { - const inputFiles = ['src/sample1.ts', 'src/sample2.ts', 'src/sample3.ts'] - - // Create sample files - inputFiles.forEach((file, index) => { - const filePath = path.join(tempDir, file) - fs.writeFileSync( - filePath, - ` - export const constant${index + 1} = ${index + 1}; - export type MyType${index + 1} = string | number; - `, - ) - }) - - await generate({ - cwd: tempDir, - root: 'src', - outdir: 'dist', - files: inputFiles, - }) - - inputFiles.forEach((file) => { - const declarationFile = path.join(tempDir, 'dist', file.replace(/^src\//, '').replace('.ts', '.d.ts')) - expect(fs.existsSync(declarationFile)).toBe(true) - if (fs.existsSync(declarationFile)) { - const content = fs.readFileSync(declarationFile, 'utf-8') - expect(content).toContain('export declare const constant') - expect(content).toContain('export type MyType') - } - }) - }) - - it('should work as a Bun plugin', async () => { - const plugin = dts({ - cwd: tempDir, - root: path.relative(tempDir, srcDir), - outdir: path.relative(tempDir, outDir), - }) - - expect(plugin.name).toBe('bun-plugin-dts-auto') - expect(typeof plugin.setup).toBe('function') - - const mockBuild: PluginBuilder = { - config: { - entrypoints: ['path/to/entry'], - root: 'path/to/root', - outdir: 'path/to/outdir', - plugins: [plugin], - }, - onLoad: () => {}, - onResolve: () => {}, - module: (specifier: string, callback: () => OnLoadResult | Promise) => { - callback() - }, - } - - await plugin.setup(mockBuild) - - const declarationFile = path.join(outDir, 'sample.d.ts') - expect(fs.existsSync(declarationFile)).toBe(true) - - if (fs.existsSync(declarationFile)) { - const content = fs.readFileSync(declarationFile, 'utf-8') - expect(content).toContain('export interface User') - expect(content).toContain('export declare function greet(user: User): string') - } - }) - - it('should generate declaration files with correct references', async () => { - const sampleFile1 = path.join(srcDir, 'sample1.ts') - const sampleFile2 = path.join(srcDir, 'sample2.ts') - - fs.writeFileSync( - sampleFile1, - ` - export interface User { - id: number; - name: string; - } - `, - ) - - fs.writeFileSync( - sampleFile2, - ` - import { User } from './sample1'; - export function greet(user: User): string { - return \`Hello, \${user.name}!\`; - } - `, - ) - - const inputFiles = [path.relative(tempDir, sampleFile1), path.relative(tempDir, sampleFile2)] - await generate({ - cwd: tempDir, - root: path.relative(tempDir, srcDir), - outdir: path.relative(tempDir, outDir), - files: inputFiles, - }) - - const declarationFile1 = path.join(outDir, 'sample1.d.ts') - const declarationFile2 = path.join(outDir, 'sample2.d.ts') - - expect(fs.existsSync(declarationFile1)).toBe(true) - expect(fs.existsSync(declarationFile2)).toBe(true) - - if (fs.existsSync(declarationFile1) && fs.existsSync(declarationFile2)) { - const content1 = fs.readFileSync(declarationFile1, 'utf-8') - const content2 = fs.readFileSync(declarationFile2, 'utf-8') - - expect(content1).toContain('export interface User') - expect(content2).toContain('import { User } from "./sample1"') - expect(content2).toContain('export declare function greet(user: User): string') - } - }) - - it('should generate declaration files for all files in root when no files are specified', async () => { - // Create additional sample files - const additionalFiles = ['src/extra1.ts', 'src/extra2.ts'] - additionalFiles.forEach((file, index) => { - const filePath = path.join(tempDir, file) - fs.writeFileSync( - filePath, - ` - export const extraConstant${index + 1} = ${index + 1}; - export type ExtraType${index + 1} = boolean | null; - `, - ) - }) - - await generate({ - cwd: tempDir, - root: 'src', - outdir: 'dist', - }) - - const allFiles = [...additionalFiles, 'src/sample.ts', 'src/sample1.ts', 'src/sample2.ts', 'src/sample3.ts'] - allFiles.forEach((file) => { - const declarationFile = path.join(tempDir, 'dist', file.replace(/^src\//, '').replace('.ts', '.d.ts')) - expect(fs.existsSync(declarationFile)).toBe(true) - }) - }) -}) diff --git a/test/dtsx.test.ts b/test/dtsx.test.ts new file mode 100644 index 0000000..aca571b --- /dev/null +++ b/test/dtsx.test.ts @@ -0,0 +1,34 @@ +import { afterAll, beforeAll, describe } from 'bun:test' +import fs from 'node:fs' +import path from 'node:path' + +const tempDir = path.resolve(process.cwd(), 'test-temp') +const srcDir = path.join(tempDir, 'src') +const outDir = path.join(tempDir, 'dist') + +describe('bun-plugin-dtsx', () => { + beforeAll(() => { + fs.mkdirSync(tempDir, { recursive: true }) + fs.mkdirSync(srcDir, { recursive: true }) + fs.mkdirSync(outDir, { recursive: true }) + + const sampleFile = path.join(srcDir, 'sample.ts') + fs.writeFileSync( + sampleFile, + ` + export interface User { + id: number; + name: string; + } + + export function greet(user: User): string { + return \`Hello, \${user.name}!\`; + } + `, + ) + }) + + afterAll(() => { + fs.rmSync(tempDir, { recursive: true, force: true }) + }) +})