diff --git a/.github/workflows/pr-validation.yml b/.github/workflows/pr-validation.yml new file mode 100644 index 00000000..8d693ed3 --- /dev/null +++ b/.github/workflows/pr-validation.yml @@ -0,0 +1,46 @@ +name: PR Validation + +on: + pull_request: + branches: [ master, dev ] + push: + branches: [ master, dev ] + +jobs: + test-and-build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [20.x, 22.x] + include: + - node-version: 20.x + experimental: false + - node-version: 22.x + experimental: true + + continue-on-error: ${{ matrix.experimental }} + + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Type Check + run: npx tsc --noEmit + + - name: Run tests + run: npm test + + - name: Build + run: npm run build + + - name: Type Validation + run: npm run tsd diff --git a/src/textures/TextTextureRendererUtils.test.mjs b/src/textures/TextTextureRendererUtils.test.mjs index dba4c66f..506f97d6 100644 --- a/src/textures/TextTextureRendererUtils.test.mjs +++ b/src/textures/TextTextureRendererUtils.test.mjs @@ -4,28 +4,28 @@ import { getFontSetting, tokenizeString, isSpace, isZeroWidthSpace, wrapText, me describe('TextTextureRendererUtils', () => { describe('getFontSetting', () => { it('should form a valid CSS font string', () => { - expect(getFontSetting('Arial', 'normal', 12, 1, 'Default')).toBe('normal 12px "Arial"'); + expect(getFontSetting('Arial', 'normal', 12, 1, 'Default')).toBe('normal 12px Arial'); expect(getFontSetting('Times New Roman', 'bold', 30, 1, 'Default')).toBe('bold 30px "Times New Roman"'); }); it('should adjust font size for precision', () => { - expect(getFontSetting('Arial', 'normal', 12, 2, 'Default')).toBe('normal 24px "Arial"'); + expect(getFontSetting('Arial', 'normal', 12, 2, 'Default')).toBe('normal 24px Arial'); }); it('should support "serif" and "sans-serif" specially', () => { expect(getFontSetting('serif', 'italic', 12, 1, 'Default')).toBe('italic 12px serif'); expect(getFontSetting('sans-serif', 'normal', 12, 1, 'Default')).toBe('normal 12px sans-serif'); }); it('should default to the defaultFontFace if fontFace is null', () => { - expect(getFontSetting(null, 'normal', 12, 1, 'Default')).toBe('normal 12px "Default"'); - expect(getFontSetting([null], 'normal', 12, 1, 'Default')).toBe('normal 12px "Default"'); + expect(getFontSetting(null, 'normal', 12, 1, 'Default')).toBe('normal 12px Default'); + expect(getFontSetting([null], 'normal', 12, 1, 'Default')).toBe('normal 12px Default'); }); it('should defaultFontFace should also handle "serif" and "sans-serif" specially', () => { expect(getFontSetting(null, 'normal', 12, 1, 'serif')).toBe('normal 12px serif'); expect(getFontSetting([null], 'normal', 12, 1, 'sans-serif')).toBe('normal 12px sans-serif'); }); it('should support an array of fonts', () => { - expect(getFontSetting(['Arial'], 'normal', 12, 1, 'Default')).toBe('normal 12px "Arial"'); - expect(getFontSetting(['serif', 'Arial'], 'italic', 12, 1, 'Default')).toBe('italic 12px serif,"Arial"'); - expect(getFontSetting(['serif', 'Arial', null], 'bold', 12, 1, 'Default')).toBe('bold 12px serif,"Arial","Default"'); + expect(getFontSetting(['Arial'], 'normal', 12, 1, 'Default')).toBe('normal 12px Arial'); + expect(getFontSetting(['serif', 'Arial'], 'italic', 12, 1, 'Default')).toBe('italic 12px serif,Arial'); + expect(getFontSetting(['serif', 'Arial', null], 'bold', 12, 1, 'Default')).toBe('bold 12px serif,Arial,Default'); }); }); diff --git a/tsconfig.json b/tsconfig.json index 50ebb95d..c1c8cc63 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,6 +20,7 @@ "sourceMap": true, "declarationMap": true, "isolatedModules": true, + "skipLibCheck": true, // Don't emit any files via the root tsconfig.json // (this is a project-wide config and includes the test-d folder which