@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 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,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");exports.Thing=function(){return e.createElement("div",null,"the snozzberries taste like snozzberries")};
2
+ //# sourceMappingURL=first-test-wet.cjs.production.min.js.map
@@ -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,9 @@
1
+ import { createElement } from 'react';
2
+
3
+ // Delete me
4
+ var Thing = function Thing() {
5
+ return createElement("div", null, "the snozzberries taste like snozzberries");
6
+ };
7
+
8
+ export { Thing };
9
+ //# sourceMappingURL=first-test-wet.esm.js.map
@@ -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;;;;"}
@@ -0,0 +1,2 @@
1
+ import * as React from 'react';
2
+ export declare const Thing: () => React.JSX.Element;
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+
2
+ 'use strict'
3
+
4
+ if (process.env.NODE_ENV === 'production') {
5
+ module.exports = require('./first-test-wet.cjs.production.min.js')
6
+ } else {
7
+ module.exports = require('./first-test-wet.cjs.development.js')
8
+ }
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"}}
package/src/index.tsx ADDED
@@ -0,0 +1,6 @@
1
+ import * as React from 'react';
2
+
3
+ // Delete me
4
+ export const Thing = () => {
5
+ return <div>the snozzberries taste like snozzberries</div>;
6
+ };