@macallumharvey/first-test-wet 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/LICENSE +21 -0
- package/README.md +160 -0
- package/dist/first-test-wet.cjs.development.js +13 -0
- package/dist/first-test-wet.cjs.development.js.map +1 -0
- package/dist/first-test-wet.cjs.production.min.js +2 -0
- package/dist/first-test-wet.cjs.production.min.js.map +1 -0
- package/dist/first-test-wet.esm.js +9 -0
- package/dist/first-test-wet.esm.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +8 -0
- package/package.json +1 -0
- package/src/index.tsx +6 -0
package/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2024 Macallum Harvey
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
@@ -0,0 +1,160 @@
|
|
1
|
+
# TSDX React User Guide
|
2
|
+
|
3
|
+
Congrats! You just saved yourself hours of work by bootstrapping this project with TSDX. Let’s get you oriented with what’s here and how to use it.
|
4
|
+
|
5
|
+
> This TSDX setup is meant for developing React component libraries (not apps!) that can be published to NPM. If you’re looking to build a React-based app, you should use `create-react-app`, `razzle`, `nextjs`, `gatsby`, or `react-static`.
|
6
|
+
|
7
|
+
> If you’re new to TypeScript and React, checkout [this handy cheatsheet](https://github.com/sw-yx/react-typescript-cheatsheet/)
|
8
|
+
|
9
|
+
## Commands
|
10
|
+
|
11
|
+
TSDX scaffolds your new library inside `/src`, and also sets up a [Parcel-based](https://parceljs.org) playground for it inside `/example`.
|
12
|
+
|
13
|
+
The recommended workflow is to run TSDX in one terminal:
|
14
|
+
|
15
|
+
```bash
|
16
|
+
npm start # or yarn start
|
17
|
+
```
|
18
|
+
|
19
|
+
This builds to `/dist` and runs the project in watch mode so any edits you save inside `src` causes a rebuild to `/dist`.
|
20
|
+
|
21
|
+
Then run the example inside another:
|
22
|
+
|
23
|
+
```bash
|
24
|
+
cd example
|
25
|
+
npm i # or yarn to install dependencies
|
26
|
+
npm start # or yarn start
|
27
|
+
```
|
28
|
+
|
29
|
+
The default example imports and live reloads whatever is in `/dist`, so if you are seeing an out of date component, make sure TSDX is running in watch mode like we recommend above. **No symlinking required**, we use [Parcel's aliasing](https://parceljs.org/module_resolution.html#aliases).
|
30
|
+
|
31
|
+
To do a one-off build, use `npm run build` or `yarn build`.
|
32
|
+
|
33
|
+
To run tests, use `npm test` or `yarn test`.
|
34
|
+
|
35
|
+
## Configuration
|
36
|
+
|
37
|
+
Code quality is set up for you with `prettier`, `husky`, and `lint-staged`. Adjust the respective fields in `package.json` accordingly.
|
38
|
+
|
39
|
+
### Jest
|
40
|
+
|
41
|
+
Jest tests are set up to run with `npm test` or `yarn test`.
|
42
|
+
|
43
|
+
### Bundle analysis
|
44
|
+
|
45
|
+
Calculates the real cost of your library using [size-limit](https://github.com/ai/size-limit) with `npm run size` and visulize it with `npm run analyze`.
|
46
|
+
|
47
|
+
#### Setup Files
|
48
|
+
|
49
|
+
This is the folder structure we set up for you:
|
50
|
+
|
51
|
+
```txt
|
52
|
+
/example
|
53
|
+
index.html
|
54
|
+
index.tsx # test your component here in a demo app
|
55
|
+
package.json
|
56
|
+
tsconfig.json
|
57
|
+
/src
|
58
|
+
index.tsx # EDIT THIS
|
59
|
+
/test
|
60
|
+
blah.test.tsx # EDIT THIS
|
61
|
+
.gitignore
|
62
|
+
package.json
|
63
|
+
README.md # EDIT THIS
|
64
|
+
tsconfig.json
|
65
|
+
```
|
66
|
+
|
67
|
+
#### React Testing Library
|
68
|
+
|
69
|
+
We do not set up `react-testing-library` for you yet, we welcome contributions and documentation on this.
|
70
|
+
|
71
|
+
### Rollup
|
72
|
+
|
73
|
+
TSDX uses [Rollup](https://rollupjs.org) as a bundler and generates multiple rollup configs for various module formats and build settings. See [Optimizations](#optimizations) for details.
|
74
|
+
|
75
|
+
### TypeScript
|
76
|
+
|
77
|
+
`tsconfig.json` is set up to interpret `dom` and `esnext` types, as well as `react` for `jsx`. Adjust according to your needs.
|
78
|
+
|
79
|
+
## Continuous Integration
|
80
|
+
|
81
|
+
### GitHub Actions
|
82
|
+
|
83
|
+
Two actions are added by default:
|
84
|
+
|
85
|
+
- `main` which installs deps w/ cache, lints, tests, and builds on all pushes against a Node and OS matrix
|
86
|
+
- `size` which comments cost comparison of your library on every pull request using [`size-limit`](https://github.com/ai/size-limit)
|
87
|
+
|
88
|
+
## Optimizations
|
89
|
+
|
90
|
+
Please see the main `tsdx` [optimizations docs](https://github.com/palmerhq/tsdx#optimizations). In particular, know that you can take advantage of development-only optimizations:
|
91
|
+
|
92
|
+
```js
|
93
|
+
// ./types/index.d.ts
|
94
|
+
declare var __DEV__: boolean;
|
95
|
+
|
96
|
+
// inside your code...
|
97
|
+
if (__DEV__) {
|
98
|
+
console.log('foo');
|
99
|
+
}
|
100
|
+
```
|
101
|
+
|
102
|
+
You can also choose to install and use [invariant](https://github.com/palmerhq/tsdx#invariant) and [warning](https://github.com/palmerhq/tsdx#warning) functions.
|
103
|
+
|
104
|
+
## Module Formats
|
105
|
+
|
106
|
+
CJS, ESModules, and UMD module formats are supported.
|
107
|
+
|
108
|
+
The appropriate paths are configured in `package.json` and `dist/index.js` accordingly. Please report if any issues are found.
|
109
|
+
|
110
|
+
## Deploying the Example Playground
|
111
|
+
|
112
|
+
The Playground is just a simple [Parcel](https://parceljs.org) app, you can deploy it anywhere you would normally deploy that. Here are some guidelines for **manually** deploying with the Netlify CLI (`npm i -g netlify-cli`):
|
113
|
+
|
114
|
+
```bash
|
115
|
+
cd example # if not already in the example folder
|
116
|
+
npm run build # builds to dist
|
117
|
+
netlify deploy # deploy the dist folder
|
118
|
+
```
|
119
|
+
|
120
|
+
Alternatively, if you already have a git repo connected, you can set up continuous deployment with Netlify:
|
121
|
+
|
122
|
+
```bash
|
123
|
+
netlify init
|
124
|
+
# build command: yarn build && cd example && yarn && yarn build
|
125
|
+
# directory to deploy: example/dist
|
126
|
+
# pick yes for netlify.toml
|
127
|
+
```
|
128
|
+
|
129
|
+
## Named Exports
|
130
|
+
|
131
|
+
Per Palmer Group guidelines, [always use named exports.](https://github.com/palmerhq/typescript#exports) Code split inside your React app instead of your React library.
|
132
|
+
|
133
|
+
## Including Styles
|
134
|
+
|
135
|
+
There are many ways to ship styles, including with CSS-in-JS. TSDX has no opinion on this, configure how you like.
|
136
|
+
|
137
|
+
For vanilla CSS, you can include it at the root directory and add it to the `files` section in your `package.json`, so that it can be imported separately by your users and run through their bundler's loader.
|
138
|
+
|
139
|
+
## Publishing to NPM
|
140
|
+
|
141
|
+
We recommend using [np](https://github.com/sindresorhus/np).
|
142
|
+
|
143
|
+
## Usage with Lerna
|
144
|
+
|
145
|
+
When creating a new package with TSDX within a project set up with Lerna, you might encounter a `Cannot resolve dependency` error when trying to run the `example` project. To fix that you will need to make changes to the `package.json` file _inside the `example` directory_.
|
146
|
+
|
147
|
+
The problem is that due to the nature of how dependencies are installed in Lerna projects, the aliases in the example project's `package.json` might not point to the right place, as those dependencies might have been installed in the root of your Lerna project.
|
148
|
+
|
149
|
+
Change the `alias` to point to where those packages are actually installed. This depends on the directory structure of your Lerna project, so the actual path might be different from the diff below.
|
150
|
+
|
151
|
+
```diff
|
152
|
+
"alias": {
|
153
|
+
- "react": "../node_modules/react",
|
154
|
+
- "react-dom": "../node_modules/react-dom"
|
155
|
+
+ "react": "../../../node_modules/react",
|
156
|
+
+ "react-dom": "../../../node_modules/react-dom"
|
157
|
+
},
|
158
|
+
```
|
159
|
+
|
160
|
+
An alternative to fixing this problem would be to remove aliases altogether and define the dependencies referenced as aliases as dev dependencies instead. [However, that might cause other problems.](https://github.com/palmerhq/tsdx/issues/64)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
4
|
+
|
5
|
+
var React = require('react');
|
6
|
+
|
7
|
+
// Delete me
|
8
|
+
var Thing = function Thing() {
|
9
|
+
return React.createElement("div", null, "the snozzberries taste like snozzberries");
|
10
|
+
};
|
11
|
+
|
12
|
+
exports.Thing = Thing;
|
13
|
+
//# sourceMappingURL=first-test-wet.cjs.development.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"first-test-wet.cjs.development.js","sources":["../src/index.tsx"],"sourcesContent":["import * as React from 'react';\n\n// Delete me\nexport const Thing = () => {\n return <div>the snozzberries taste like snozzberries</div>;\n};\n"],"names":["Thing","React"],"mappings":";;;;;;AAEA;IACaA,KAAK,GAAG,SAARA,KAAKA;EAChB,OAAOC,4EAAmD;AAC5D;;;;"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"first-test-wet.cjs.production.min.js","sources":["../src/index.tsx"],"sourcesContent":["import * as React from 'react';\n\n// Delete me\nexport const Thing = () => {\n return <div>the snozzberries taste like snozzberries</div>;\n};\n"],"names":["React"],"mappings":"yGAGqB,WACnB,OAAOA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"first-test-wet.esm.js","sources":["../src/index.tsx"],"sourcesContent":["import * as React from 'react';\n\n// Delete me\nexport const Thing = () => {\n return <div>the snozzberries taste like snozzberries</div>;\n};\n"],"names":["Thing","React"],"mappings":";;AAEA;IACaA,KAAK,GAAG,SAARA,KAAKA;EAChB,OAAOC,sEAAmD;AAC5D;;;;"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
package/package.json
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":"0.1.0","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","files":["dist","src"],"engines":{"node":">=10"},"scripts":{"start":"tsdx watch","build":"tsdx build","test":"tsdx test --passWithNoTests","lint":"tsdx lint","prepare":"tsdx build","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":true,"singleQuote":true,"trailingComma":"es5"},"name":"@macallumharvey/first-test-wet","author":"Macallum Harvey","module":"dist/first-test-wet.esm.js","size-limit":[{"path":"dist/first-test-wet.cjs.production.min.js","limit":"10 KB"},{"path":"dist/first-test-wet.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^11.1.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","husky":"^9.0.11","react":"^18.3.1","react-dom":"^18.3.1","size-limit":"^11.1.4","tsdx":"^0.14.1","tslib":"^2.6.3","typescript":"^3.9.10"}}
|