perf: reduce drastically build size
BREAKING CHANGE: This package is now pure ESM
This commit is contained in:
parent
ec4929d7d8
commit
686b5643b3
5
.eslintignore
Normal file
5
.eslintignore
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
node_modules
|
||||||
|
build
|
||||||
|
dist
|
||||||
|
.parcel-cache
|
||||||
|
example
|
14
.eslintrc.json
Normal file
14
.eslintrc.json
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"extends": ["conventions", "prettier"],
|
||||||
|
"plugins": ["prettier", "import", "unicorn"],
|
||||||
|
"parserOptions": {
|
||||||
|
"project": "./tsconfig.json"
|
||||||
|
},
|
||||||
|
"env": {
|
||||||
|
"jest": true,
|
||||||
|
"browser": true
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"prettier/prettier": "error"
|
||||||
|
}
|
||||||
|
}
|
4
.github/workflows/build.yml
vendored
4
.github/workflows/build.yml
vendored
@ -10,10 +10,10 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: 'ubuntu-latest'
|
runs-on: 'ubuntu-latest'
|
||||||
steps:
|
steps:
|
||||||
- uses: 'actions/checkout@v2'
|
- uses: 'actions/checkout@v3.0.0'
|
||||||
|
|
||||||
- name: 'Use Node.js'
|
- name: 'Use Node.js'
|
||||||
uses: 'actions/setup-node@v2.5.1'
|
uses: 'actions/setup-node@v3.1.0'
|
||||||
with:
|
with:
|
||||||
node-version: 'lts/*'
|
node-version: 'lts/*'
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
|
5
.github/workflows/lint.yml
vendored
5
.github/workflows/lint.yml
vendored
@ -10,10 +10,10 @@ jobs:
|
|||||||
lint:
|
lint:
|
||||||
runs-on: 'ubuntu-latest'
|
runs-on: 'ubuntu-latest'
|
||||||
steps:
|
steps:
|
||||||
- uses: 'actions/checkout@v2'
|
- uses: 'actions/checkout@v3.0.0'
|
||||||
|
|
||||||
- name: 'Use Node.js'
|
- name: 'Use Node.js'
|
||||||
uses: 'actions/setup-node@v2.5.1'
|
uses: 'actions/setup-node@v3.1.0'
|
||||||
with:
|
with:
|
||||||
node-version: 'lts/*'
|
node-version: 'lts/*'
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
@ -25,3 +25,4 @@ jobs:
|
|||||||
- run: 'npm run lint:editorconfig'
|
- run: 'npm run lint:editorconfig'
|
||||||
- run: 'npm run lint:markdown'
|
- run: 'npm run lint:markdown'
|
||||||
- run: 'npm run lint:typescript'
|
- run: 'npm run lint:typescript'
|
||||||
|
- run: 'npm run lint:prettier'
|
||||||
|
6
.github/workflows/release.yml
vendored
6
.github/workflows/release.yml
vendored
@ -8,10 +8,10 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: 'ubuntu-latest'
|
runs-on: 'ubuntu-latest'
|
||||||
steps:
|
steps:
|
||||||
- uses: 'actions/checkout@v2'
|
- uses: 'actions/checkout@v3.0.0'
|
||||||
|
|
||||||
- name: 'Use Node.js'
|
- name: 'Use Node.js'
|
||||||
uses: 'actions/setup-node@v2.5.1'
|
uses: 'actions/setup-node@v3.1.0'
|
||||||
with:
|
with:
|
||||||
node-version: 'lts/*'
|
node-version: 'lts/*'
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
@ -26,7 +26,7 @@ jobs:
|
|||||||
run: 'cd example && npm install && npm run build'
|
run: 'cd example && npm install && npm run build'
|
||||||
|
|
||||||
- name: 'Deploy Example'
|
- name: 'Deploy Example'
|
||||||
uses: 'JamesIves/github-pages-deploy-action@4.1.4'
|
uses: 'JamesIves/github-pages-deploy-action@v4.3.0'
|
||||||
with:
|
with:
|
||||||
branch: 'gh-pages'
|
branch: 'gh-pages'
|
||||||
folder: 'example/dist'
|
folder: 'example/dist'
|
||||||
|
4
.github/workflows/test.yml
vendored
4
.github/workflows/test.yml
vendored
@ -10,10 +10,10 @@ jobs:
|
|||||||
test:
|
test:
|
||||||
runs-on: 'ubuntu-latest'
|
runs-on: 'ubuntu-latest'
|
||||||
steps:
|
steps:
|
||||||
- uses: 'actions/checkout@v2'
|
- uses: 'actions/checkout@v3.0.0'
|
||||||
|
|
||||||
- name: 'Use Node.js'
|
- name: 'Use Node.js'
|
||||||
uses: 'actions/setup-node@v2.5.1'
|
uses: 'actions/setup-node@v3.1.0'
|
||||||
with:
|
with:
|
||||||
node-version: 'lts/*'
|
node-version: 'lts/*'
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
|
39
.gitignore
vendored
39
.gitignore
vendored
@ -1,6 +1,39 @@
|
|||||||
*.log
|
# dependencies
|
||||||
.DS_Store
|
|
||||||
node_modules
|
node_modules
|
||||||
.cache
|
.npm
|
||||||
|
|
||||||
|
# production
|
||||||
|
build
|
||||||
dist
|
dist
|
||||||
|
|
||||||
|
# testing
|
||||||
|
coverage
|
||||||
|
.nyc_output
|
||||||
|
|
||||||
|
# envs
|
||||||
|
.env
|
||||||
|
.env.production
|
||||||
|
|
||||||
|
# debug
|
||||||
|
npm-debug.log*
|
||||||
|
|
||||||
|
# IDEs and editors
|
||||||
|
/.idea
|
||||||
|
.project
|
||||||
|
.classpath
|
||||||
|
.c9/
|
||||||
|
*.launch
|
||||||
|
.settings/
|
||||||
|
*.sublime-workspace
|
||||||
|
|
||||||
|
# IDE - VSCode
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
!.vscode/launch.json
|
||||||
|
!.vscode/extensions.json
|
||||||
|
|
||||||
|
# misc
|
||||||
|
.DS_Store
|
||||||
.parcel-cache
|
.parcel-cache
|
||||||
|
.cache
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"semi": false,
|
|
||||||
"singleQuote": true,
|
"singleQuote": true,
|
||||||
"jsxSingleQuote": true,
|
"jsxSingleQuote": true,
|
||||||
|
"semi": false,
|
||||||
"trailingComma": "none"
|
"trailingComma": "none"
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ Thanks a lot for your interest in contributing to **react-component-form**! 🎉
|
|||||||
|
|
||||||
- **Please first discuss** the change you wish to make via issues.
|
- **Please first discuss** the change you wish to make via issues.
|
||||||
|
|
||||||
- Ensure your code respect the linter.
|
- Ensure your code respect linting.
|
||||||
|
|
||||||
- Make sure your **code passes the tests**.
|
- Make sure your **code passes the tests**.
|
||||||
|
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
node_modules
|
|
||||||
.cache
|
|
||||||
dist
|
|
2
example/globals.d.ts
vendored
2
example/globals.d.ts
vendored
@ -1 +1 @@
|
|||||||
declare module "*.jpg"
|
declare module '*.jpg'
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
|
||||||
<link rel="shortcut icon" href="./github.jpg" type="image/jpg" />
|
<link rel="shortcut icon" href="./github.jpg" type="image/jpg" />
|
||||||
<title>react-component-form</title>
|
<title>react-component-form</title>
|
||||||
</head>
|
</head>
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
import * as React from 'react'
|
import React from 'react'
|
||||||
import * as ReactDOM from 'react-dom'
|
import { createRoot } from 'react-dom/client'
|
||||||
import { Form, HandleForm } from '../.'
|
import { Form, HandleForm } from 'react-component-form'
|
||||||
|
|
||||||
import './index.css'
|
import './index.css'
|
||||||
import GitHubLogo from 'url:./github.jpg'
|
import GitHubLogo from 'url:./github.jpg'
|
||||||
|
|
||||||
const App = () => {
|
global.React = React
|
||||||
|
|
||||||
|
const App: React.FC = () => {
|
||||||
const handleSubmit: HandleForm = (formData, formElement) => {
|
const handleSubmit: HandleForm = (formData, formElement) => {
|
||||||
console.clear()
|
console.clear()
|
||||||
console.log('onSubmit: ', formData)
|
console.log('onSubmit: ', formData)
|
||||||
@ -60,4 +62,6 @@ const App = () => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
ReactDOM.render(<App />, document.getElementById('root'))
|
const container = document.getElementById('root') as HTMLElement
|
||||||
|
const root = createRoot(container)
|
||||||
|
root.render(<App />)
|
||||||
|
3325
example/package-lock.json
generated
3325
example/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,20 +1,21 @@
|
|||||||
{
|
{
|
||||||
"name": "example",
|
"name": "example",
|
||||||
"version": "1.0.0",
|
"type": "module",
|
||||||
"license": "MIT",
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "parcel index.html",
|
"start": "parcel index.html",
|
||||||
"build": "parcel build index.html --public-url \"/react-component-form/\""
|
"build": "parcel build index.html --public-url \"/react-component-form/\""
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"react": "file:../node_modules/react",
|
"react": "file:../node_modules/react",
|
||||||
"react-dom": "file:../node_modules/react-dom"
|
"react-dom": "file:../node_modules/react-dom",
|
||||||
|
"react-component-form": "file:.."
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@parcel/transformer-image": "2.3.2",
|
"@parcel/transformer-image": "2.4.1",
|
||||||
"@types/react": "17.0.39",
|
"@types/react": "17.0.43",
|
||||||
"@types/react-dom": "17.0.11",
|
"@types/react-dom": "17.0.14",
|
||||||
"parcel": "2.3.2",
|
"parcel": "2.4.1",
|
||||||
"typescript": "4.5.5"
|
"typescript": "4.6.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,12 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"allowSyntheticDefaultImports": false,
|
"module": "ESNext",
|
||||||
"target": "es5",
|
"lib": ["ESNext", "DOM", "DOM.Iterable"],
|
||||||
"module": "commonjs",
|
"target": "ESNext",
|
||||||
"jsx": "react",
|
"jsx": "react",
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"noImplicitAny": false,
|
|
||||||
"noUnusedLocals": false,
|
|
||||||
"noUnusedParameters": false,
|
|
||||||
"removeComments": true,
|
|
||||||
"strictNullChecks": true,
|
|
||||||
"preserveConstEnums": true,
|
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"lib": ["es2015", "es2016", "dom"],
|
"strict": true,
|
||||||
"types": ["node"]
|
"esModuleInterop": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
8
jest.config.json
Normal file
8
jest.config.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"testEnvironment": "jsdom",
|
||||||
|
"rootDir": "./src",
|
||||||
|
"setupFilesAfterEnv": ["<rootDir>/__test__/setup.ts"],
|
||||||
|
"transform": {
|
||||||
|
"^.+\\.tsx?$": "esbuild-jest"
|
||||||
|
}
|
||||||
|
}
|
19647
package-lock.json
generated
19647
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
45
package.json
45
package.json
@ -2,6 +2,7 @@
|
|||||||
"name": "react-component-form",
|
"name": "react-component-form",
|
||||||
"version": "0.0.0-development",
|
"version": "0.0.0-development",
|
||||||
"public": true,
|
"public": true,
|
||||||
|
"type": "module",
|
||||||
"description": "Manage React Forms with ease.",
|
"description": "Manage React Forms with ease.",
|
||||||
"author": "Divlo <contact@divlo.fr>",
|
"author": "Divlo <contact@divlo.fr>",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@ -17,40 +18,50 @@
|
|||||||
"url": "https://github.com/Divlo/react-component-form/issues"
|
"url": "https://github.com/Divlo/react-component-form/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/Divlo/react-component-form#readme",
|
"homepage": "https://github.com/Divlo/react-component-form#readme",
|
||||||
"module": "dist/react-component-form.esm.js",
|
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"typings": "dist/index.d.ts",
|
"types": "dist/index.d.ts",
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
],
|
],
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "tsdx watch",
|
"build": "tsup",
|
||||||
"build": "tsdx build",
|
"test": "jest",
|
||||||
"test": "tsdx test --passWithNoTests",
|
|
||||||
"lint:commit": "commitlint",
|
"lint:commit": "commitlint",
|
||||||
"lint:editorconfig": "editorconfig-checker",
|
"lint:editorconfig": "editorconfig-checker",
|
||||||
"lint:markdown": "markdownlint \"**/*.md\" --dot --ignore-path \".gitignore\"",
|
"lint:markdown": "markdownlint \"**/*.md\" --dot --ignore-path \".gitignore\"",
|
||||||
"lint:typescript": "tsdx lint",
|
"lint:typescript": "eslint \"**/*.{js,jsx,ts,tsx}\"",
|
||||||
|
"lint:prettier": "prettier \".\" --check --ignore-path \".gitignore\"",
|
||||||
"release": "semantic-release"
|
"release": "semantic-release"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"react": ">=16"
|
"react": ">=16"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@commitlint/cli": "16.2.1",
|
"@commitlint/cli": "16.2.3",
|
||||||
"@commitlint/config-conventional": "16.2.1",
|
"@commitlint/config-conventional": "16.2.1",
|
||||||
"@testing-library/react": "12.1.3",
|
"@testing-library/react": "13.0.0",
|
||||||
"@types/react": "17.0.39",
|
"@types/jest": "27.4.1",
|
||||||
"@types/react-dom": "17.0.11",
|
"@types/react": "17.0.43",
|
||||||
|
"@types/react-dom": "17.0.14",
|
||||||
|
"@typescript-eslint/eslint-plugin": "5.18.0",
|
||||||
|
"@typescript-eslint/parser": "5.18.0",
|
||||||
"editorconfig-checker": "4.0.2",
|
"editorconfig-checker": "4.0.2",
|
||||||
|
"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": "42.0.0",
|
||||||
|
"esbuild": "0.14.32",
|
||||||
|
"esbuild-jest": "0.5.0",
|
||||||
|
"jest": "27.5.1",
|
||||||
"markdownlint-cli": "0.31.1",
|
"markdownlint-cli": "0.31.1",
|
||||||
"react": "17.0.2",
|
"prettier": "2.6.2",
|
||||||
"react-dom": "17.0.2",
|
"react": "18.0.0",
|
||||||
|
"react-dom": "18.0.0",
|
||||||
"semantic-release": "19.0.2",
|
"semantic-release": "19.0.2",
|
||||||
"tsdx": "0.14.1",
|
"tsup": "5.12.4",
|
||||||
"typescript": "4.5.5"
|
"typescript": "4.6.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import React from 'react'
|
|
||||||
import { render, cleanup, fireEvent } from '@testing-library/react'
|
import { render, cleanup, fireEvent } from '@testing-library/react'
|
||||||
|
|
||||||
import { Form, HandleForm } from '../src'
|
import { Form, HandleForm } from '..'
|
||||||
|
|
||||||
afterEach(cleanup)
|
afterEach(cleanup)
|
||||||
|
|
3
src/__test__/setup.ts
Normal file
3
src/__test__/setup.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import React from 'react'
|
||||||
|
|
||||||
|
global.React = React
|
@ -1,4 +1,4 @@
|
|||||||
import React, { useRef } from 'react'
|
import { useRef } from 'react'
|
||||||
|
|
||||||
export interface FormDataObject {
|
export interface FormDataObject {
|
||||||
[key: string]: FormDataEntryValue
|
[key: string]: FormDataEntryValue
|
||||||
@ -23,7 +23,7 @@ export const getFormDataObject = (
|
|||||||
return Object.fromEntries<FormDataEntryValue>(new FormData(formElement))
|
return Object.fromEntries<FormDataEntryValue>(new FormData(formElement))
|
||||||
}
|
}
|
||||||
|
|
||||||
export const Form = (props: FormProps): JSX.Element => {
|
export const Form: React.FC<FormProps> = (props) => {
|
||||||
const { onSubmit, onChange, children, ...rest } = props
|
const { onSubmit, onChange, children, ...rest } = props
|
||||||
const formRef = useRef<HTMLFormElement>(null)
|
const formRef = useRef<HTMLFormElement>(null)
|
||||||
|
|
||||||
|
@ -13,10 +13,10 @@
|
|||||||
"noUnusedLocals": true,
|
"noUnusedLocals": true,
|
||||||
"noUnusedParameters": true,
|
"noUnusedParameters": true,
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"jsx": "react",
|
"jsx": "react-jsx",
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"forceConsistentCasingInFileNames": true,
|
"forceConsistentCasingInFileNames": true,
|
||||||
"noEmit": true,
|
"noEmit": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
12
tsup.config.js
Normal file
12
tsup.config.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import { defineConfig } from 'tsup'
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
entry: ['src/index.tsx'],
|
||||||
|
sourcemap: true,
|
||||||
|
clean: true,
|
||||||
|
platform: 'browser',
|
||||||
|
target: 'esnext',
|
||||||
|
format: ['esm'],
|
||||||
|
minify: true,
|
||||||
|
dts: true
|
||||||
|
})
|
Reference in New Issue
Block a user