mirror of
				https://github.com/theoludwig/html-w3c-validator.git
				synced 2025-05-21 23:21:29 +02:00 
			
		
		
		
	feat: usage of ESM modules imports (instead of CommonJS)
This commit is contained in:
		| @@ -1,2 +0,0 @@ | ||||
| ARG VARIANT="16" | ||||
| FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-${VARIANT} | ||||
| @@ -1,15 +0,0 @@ | ||||
| { | ||||
|   "name": "html-w3c-validator", | ||||
|   "dockerComposeFile": "./docker-compose.yml", | ||||
|   "service": "workspace", | ||||
|   "workspaceFolder": "/workspace", | ||||
|   "extensions": [ | ||||
|     "editorconfig.editorconfig", | ||||
|     "esbenp.prettier-vscode", | ||||
|     "dbaeumer.vscode-eslint", | ||||
|     "davidanson.vscode-markdownlint", | ||||
|     "ms-azuretools.vscode-docker" | ||||
|   ], | ||||
|   "postAttachCommand": ["npm", "install"], | ||||
|   "remoteUser": "node" | ||||
| } | ||||
| @@ -1,10 +0,0 @@ | ||||
| version: '3.0' | ||||
|  | ||||
| services: | ||||
|   workspace: | ||||
|     build: | ||||
|       context: './' | ||||
|       dockerfile: './Dockerfile' | ||||
|     volumes: | ||||
|       - '..:/workspace:cached' | ||||
|     command: 'sleep infinity' | ||||
| @@ -5,12 +5,12 @@ | ||||
|     "project": "./tsconfig.json" | ||||
|   }, | ||||
|   "env": { | ||||
|     "node": true, | ||||
|     "jest": true | ||||
|     "node": true | ||||
|   }, | ||||
|   "rules": { | ||||
|     "prettier/prettier": "error", | ||||
|     "import/extensions": ["error", "always"], | ||||
|     "unicorn/prevent-abbreviations": "error" | ||||
|     "unicorn/prevent-abbreviations": "error", | ||||
|     "unicorn/prefer-node-protocol": "error" | ||||
|   } | ||||
| } | ||||
|   | ||||
							
								
								
									
										4
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							| @@ -10,10 +10,10 @@ jobs: | ||||
|   build: | ||||
|     runs-on: 'ubuntu-latest' | ||||
|     steps: | ||||
|       - uses: 'actions/checkout@v2' | ||||
|       - uses: 'actions/checkout@v3.0.0' | ||||
|  | ||||
|       - name: 'Use Node.js' | ||||
|         uses: 'actions/setup-node@v2.5.1' | ||||
|         uses: 'actions/setup-node@v3.1.0' | ||||
|         with: | ||||
|           node-version: 'lts/*' | ||||
|           cache: 'npm' | ||||
|   | ||||
							
								
								
									
										4
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							| @@ -10,10 +10,10 @@ jobs: | ||||
|   lint: | ||||
|     runs-on: 'ubuntu-latest' | ||||
|     steps: | ||||
|       - uses: 'actions/checkout@v2' | ||||
|       - uses: 'actions/checkout@v3.0.0' | ||||
|  | ||||
|       - name: 'Use Node.js' | ||||
|         uses: 'actions/setup-node@v2.5.1' | ||||
|         uses: 'actions/setup-node@v3.1.0' | ||||
|         with: | ||||
|           node-version: 'lts/*' | ||||
|           cache: 'npm' | ||||
|   | ||||
							
								
								
									
										4
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							| @@ -8,13 +8,13 @@ jobs: | ||||
|   release: | ||||
|     runs-on: 'ubuntu-latest' | ||||
|     steps: | ||||
|       - uses: 'actions/checkout@v2.3.4' | ||||
|       - uses: 'actions/checkout@v3.0.0' | ||||
|         with: | ||||
|           fetch-depth: 0 | ||||
|           persist-credentials: false | ||||
|  | ||||
|       - name: 'Use Node.js' | ||||
|         uses: 'actions/setup-node@v2.5.1' | ||||
|         uses: 'actions/setup-node@v3.1.0' | ||||
|         with: | ||||
|           node-version: 'lts/*' | ||||
|           cache: 'npm' | ||||
|   | ||||
							
								
								
									
										4
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							| @@ -10,10 +10,10 @@ jobs: | ||||
|   test: | ||||
|     runs-on: 'ubuntu-latest' | ||||
|     steps: | ||||
|       - uses: 'actions/checkout@v2' | ||||
|       - uses: 'actions/checkout@v3.0.0' | ||||
|  | ||||
|       - name: 'Use Node.js' | ||||
|         uses: 'actions/setup-node@v2.5.1' | ||||
|         uses: 'actions/setup-node@v3.1.0' | ||||
|         with: | ||||
|           node-version: 'lts/*' | ||||
|           cache: 'npm' | ||||
|   | ||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -8,6 +8,7 @@ node_modules | ||||
|  | ||||
| # testing | ||||
| coverage | ||||
| .nyc_output | ||||
|  | ||||
| # envs | ||||
| .env | ||||
|   | ||||
| @@ -1,10 +1,6 @@ | ||||
| { | ||||
|   "*": ["editorconfig-checker"], | ||||
|   "*.{js,ts,jsx,tsx}": [ | ||||
|     "prettier --write", | ||||
|     "eslint --fix", | ||||
|     "jest --findRelatedTests" | ||||
|   ], | ||||
|   "*.{js,ts,jsx,tsx}": ["prettier --write", "eslint --fix"], | ||||
|   "*.{yml,json}": ["prettier --write"], | ||||
|   "*.md": ["prettier --write", "markdownlint --dot --fix"] | ||||
| } | ||||
|   | ||||
							
								
								
									
										2
									
								
								.swcrc
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								.swcrc
									
									
									
									
									
								
							| @@ -13,7 +13,7 @@ | ||||
|     "loose": true | ||||
|   }, | ||||
|   "module": { | ||||
|     "type": "commonjs", | ||||
|     "type": "es6", | ||||
|     "strict": false, | ||||
|     "strictMode": true, | ||||
|     "lazy": false, | ||||
|   | ||||
							
								
								
									
										9
									
								
								.taprc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								.taprc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| ts: false | ||||
| jsx: false | ||||
| flow: false | ||||
| check-coverage: false | ||||
| coverage: false | ||||
| timeout: 120000 | ||||
|  | ||||
| files: | ||||
|   - 'build/**/*.test.js' | ||||
							
								
								
									
										21775
									
								
								example/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										21775
									
								
								example/package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,9 +0,0 @@ | ||||
| { | ||||
|   "testEnvironment": "node", | ||||
|   "resolver": "jest-ts-webcompat-resolver", | ||||
|   "transform": { | ||||
|     "^.+\\.(t|j)sx?$": ["@swc/jest"] | ||||
|   }, | ||||
|   "rootDir": "./src", | ||||
|   "setupFiles": ["<rootDir>/__test__/setup.ts"] | ||||
| } | ||||
							
								
								
									
										15006
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										15006
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										44
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								package.json
									
									
									
									
									
								
							| @@ -3,6 +3,7 @@ | ||||
|   "version": "0.0.0-development", | ||||
|   "public": true, | ||||
|   "description": "CLI for validating multiple html pages using validator.w3.org.", | ||||
|   "type": "module", | ||||
|   "author": "Divlo <contact@divlo.fr>", | ||||
|   "license": "MIT", | ||||
|   "repository": { | ||||
| @@ -36,52 +37,49 @@ | ||||
|     "lint:typescript": "eslint \"**/*.{js,jsx,ts,tsx}\" --ignore-path \".gitignore\"", | ||||
|     "lint:prettier": "prettier \".\" --check --ignore-path \".gitignore\"", | ||||
|     "lint:staged": "lint-staged", | ||||
|     "test": "jest", | ||||
|     "test": "tap", | ||||
|     "release": "semantic-release", | ||||
|     "postinstall": "husky install", | ||||
|     "prepublishOnly": "pinst --disable", | ||||
|     "postpublish": "pinst --enable" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "chalk": "4.1.2", | ||||
|     "chalk": "5.0.1", | ||||
|     "clipanion": "3.1.0", | ||||
|     "html-validator": "6.0.0", | ||||
|     "ora": "5.4.1", | ||||
|     "read-pkg": "5.2.0", | ||||
|     "ora": "6.1.0", | ||||
|     "read-pkg": "7.1.0", | ||||
|     "table": "6.8.0" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@commitlint/cli": "16.2.1", | ||||
|     "@commitlint/cli": "16.2.3", | ||||
|     "@commitlint/config-conventional": "16.2.1", | ||||
|     "@swc/cli": "0.1.55", | ||||
|     "@swc/core": "1.2.144", | ||||
|     "@swc/jest": "0.2.17", | ||||
|     "@swc/cli": "0.1.57", | ||||
|     "@swc/core": "1.2.163", | ||||
|     "@types/html-validator": "5.0.2", | ||||
|     "@types/jest": "27.4.1", | ||||
|     "@types/mock-fs": "4.13.1", | ||||
|     "@types/node": "17.0.21", | ||||
|     "@typescript-eslint/eslint-plugin": "5.12.1", | ||||
|     "@types/node": "17.0.23", | ||||
|     "@types/tap": "15.0.6", | ||||
|     "@typescript-eslint/eslint-plugin": "5.18.0", | ||||
|     "editorconfig-checker": "4.0.2", | ||||
|     "eslint": "8.9.0", | ||||
|     "eslint-config-conventions": "1.1.0", | ||||
|     "eslint-config-prettier": "8.4.0", | ||||
|     "eslint-plugin-import": "2.25.4", | ||||
|     "eslint": "8.12.0", | ||||
|     "eslint-config-conventions": "2.0.0", | ||||
|     "eslint-config-prettier": "8.5.0", | ||||
|     "eslint-plugin-import": "2.26.0", | ||||
|     "eslint-plugin-prettier": "4.0.0", | ||||
|     "eslint-plugin-promise": "6.0.0", | ||||
|     "eslint-plugin-unicorn": "41.0.0", | ||||
|     "execa": "5.1.1", | ||||
|     "eslint-plugin-unicorn": "42.0.0", | ||||
|     "execa": "6.1.0", | ||||
|     "husky": "7.0.4", | ||||
|     "jest": "27.5.1", | ||||
|     "jest-mock-extended": "2.0.4", | ||||
|     "jest-ts-webcompat-resolver": "1.0.0", | ||||
|     "lint-staged": "12.3.4", | ||||
|     "lint-staged": "12.3.7", | ||||
|     "markdownlint-cli": "0.31.1", | ||||
|     "mock-fs": "5.1.2", | ||||
|     "pinst": "3.0.0", | ||||
|     "prettier": "2.5.1", | ||||
|     "prettier": "2.6.2", | ||||
|     "rimraf": "3.0.2", | ||||
|     "semantic-release": "19.0.2", | ||||
|     "serve": "13.0.2", | ||||
|     "typescript": "4.5.5" | ||||
|     "tap": "16.0.1", | ||||
|     "typescript": "4.6.3" | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,26 +1,21 @@ | ||||
| import path from 'node:path' | ||||
|  | ||||
| import execa from 'execa' | ||||
| import tap from 'tap' | ||||
| import { execa } from 'execa' | ||||
|  | ||||
| import { cli } from '../cli.js' | ||||
| import { HTMLValidatorCommand } from '../HTMLValidatorCommand.js' | ||||
|  | ||||
| describe('html-w3c-validator', () => { | ||||
|   afterEach(() => { | ||||
|     jest.clearAllMocks() | ||||
|   }) | ||||
|  | ||||
|   it('should be instance of the command', () => { | ||||
| await tap.test('html-w3c-validator', async (t) => { | ||||
|   await t.test('should be instance of the command', async (t) => { | ||||
|     const command = cli.process([]) | ||||
|     expect(command).toBeInstanceOf(HTMLValidatorCommand) | ||||
|     t.equal(command instanceof HTMLValidatorCommand, true) | ||||
|   }) | ||||
|  | ||||
|   it('succeeds and validate the html correctly', async () => { | ||||
|     const examplePath = path.join(__dirname, '..', '..', 'example') | ||||
|     process.chdir(examplePath) | ||||
|   await t.test('succeeds and validate the html correctly', async (t) => { | ||||
|     const exampleURL = new URL('../../example', import.meta.url) | ||||
|     process.chdir(exampleURL.pathname) | ||||
|     await execa('rimraf', ['node_modules']) | ||||
|     await execa('npm', ['install']) | ||||
|     const { exitCode } = await execa('npm', ['run', 'test:html-w3c-validator']) | ||||
|     expect(exitCode).toEqual(0) | ||||
|     t.equal(exitCode, 0) | ||||
|   }) | ||||
| }) | ||||
|   | ||||
| @@ -1 +0,0 @@ | ||||
| jest.setTimeout(60000) | ||||
| @@ -1,11 +1,7 @@ | ||||
| import path from 'node:path' | ||||
|  | ||||
| import { Builtins, Cli } from 'clipanion' | ||||
| import readPackage from 'read-pkg' | ||||
|  | ||||
| import { HTMLValidatorCommand } from './HTMLValidatorCommand.js' | ||||
|  | ||||
| const packageJSON = readPackage.sync({ cwd: path.join(__dirname, '..') }) | ||||
| import { packageJSON } from './packageJSON.js' | ||||
|  | ||||
| export const cli = new Cli({ | ||||
|   binaryLabel: packageJSON.name, | ||||
|   | ||||
| @@ -1,12 +1,8 @@ | ||||
| #!/usr/bin/env node | ||||
| import chalk from 'chalk' | ||||
| import { Cli } from 'clipanion' | ||||
|  | ||||
| import { cli } from './cli.js' | ||||
|  | ||||
| const [, , ...arguments_] = process.argv | ||||
|  | ||||
| cli.runExit(arguments_, Cli.defaultContext).catch(() => { | ||||
|   console.error(chalk.red('Error occurred...')) | ||||
|   process.exit(1) | ||||
| }) | ||||
| await cli.runExit(arguments_, Cli.defaultContext) | ||||
|   | ||||
							
								
								
									
										5
									
								
								src/packageJSON.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/packageJSON.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| import { readPackage } from 'read-pkg' | ||||
|  | ||||
| export const packageJSON = await readPackage({ | ||||
|   cwd: new URL('..', import.meta.url) | ||||
| }) | ||||
| @@ -1,29 +1,24 @@ | ||||
| import fsMock from 'mock-fs' | ||||
| import tap from 'tap' | ||||
|  | ||||
| import { isExistingPath } from '../isExistingPath.js' | ||||
|  | ||||
| describe('utils/isExistingFile', () => { | ||||
|   afterEach(() => { | ||||
| await tap.test('utils/isExistingPath', async (t) => { | ||||
|   t.afterEach(() => { | ||||
|     fsMock.restore() | ||||
|   }) | ||||
|  | ||||
|   it('should return true if the file exists', async () => { | ||||
|     fsMock( | ||||
|       { | ||||
|         '/file.txt': '' | ||||
|       }, | ||||
|       { createCwd: false } | ||||
|     ) | ||||
|     expect(await isExistingPath('/file.txt')).toBeTruthy() | ||||
|   await t.test('should return true if the file exists', async () => { | ||||
|     fsMock({ | ||||
|       '/file.txt': '' | ||||
|     }) | ||||
|     t.equal(await isExistingPath('/file.txt'), true) | ||||
|   }) | ||||
|  | ||||
|   it("should return false if the file doesn't exists", async () => { | ||||
|     fsMock( | ||||
|       { | ||||
|         '/file.txt': '' | ||||
|       }, | ||||
|       { createCwd: false } | ||||
|     ) | ||||
|     expect(await isExistingPath('/randomfile.txt')).toBeFalsy() | ||||
|   await t.test("should return false if the file doesn't exists", async () => { | ||||
|     fsMock({ | ||||
|       '/file.txt': '' | ||||
|     }) | ||||
|     t.equal(await isExistingPath('/randomfile.txt'), false) | ||||
|   }) | ||||
| }) | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| { | ||||
|   "compilerOptions": { | ||||
|     "target": "ESNext", | ||||
|     "module": "commonjs", | ||||
|     "module": "ESNext", | ||||
|     "lib": ["ESNext"], | ||||
|     "moduleResolution": "node", | ||||
|     "outDir": "./build", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user