create-atom.io 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/{create-atom-BV6WVRvY.js → create-atom-DOkiQlT8.js} +27 -11
  2. package/dist/create-atom-DOkiQlT8.js.map +1 -0
  3. package/dist/create-atom.d.ts +5 -2
  4. package/dist/create-atom.d.ts.map +1 -1
  5. package/dist/create-atom.js +1 -1
  6. package/dist/create-atom.x.js +8 -1
  7. package/dist/create-atom.x.js.map +1 -1
  8. package/package.json +1 -3
  9. package/src/create-atom.ts +28 -5
  10. package/src/create-atom.x.ts +7 -0
  11. package/templates/{base → preact-svg-editor}/eslint.config.ts +4 -3
  12. package/templates/preact-svg-editor/eslint.d.ts +31 -0
  13. package/templates/preact-svg-editor/node_modules/.bin/vite +21 -0
  14. package/templates/{base → preact-svg-editor}/package.json +1 -1
  15. package/templates/{base → preact-svg-editor}/src/BezierPlayground.tsx +157 -147
  16. package/templates/{base → preact-svg-editor}/src/index.tsx +6 -4
  17. package/templates/{base → preact-svg-editor}/vite.config.ts +2 -1
  18. package/templates/react-node-backend/.turbo/turbo-build.log +12 -0
  19. package/templates/react-node-backend/README.md +75 -0
  20. package/templates/react-node-backend/_gitignore +24 -0
  21. package/templates/react-node-backend/dist/assets/index-6PkP9syN.js +9 -0
  22. package/templates/react-node-backend/dist/assets/index-By2j7w9s.css +1 -0
  23. package/templates/react-node-backend/dist/index.html +14 -0
  24. package/templates/react-node-backend/dist/react.svg +1 -0
  25. package/templates/react-node-backend/dist/vite.svg +1 -0
  26. package/templates/react-node-backend/eslint.config.ts +176 -0
  27. package/templates/react-node-backend/index.html +13 -0
  28. package/templates/react-node-backend/node/authenticator.ts +47 -0
  29. package/templates/react-node-backend/node/server.ts +103 -0
  30. package/templates/react-node-backend/node_modules/.bin/conc +21 -0
  31. package/templates/react-node-backend/node_modules/.bin/concurrently +21 -0
  32. package/templates/react-node-backend/node_modules/.bin/eslint +21 -0
  33. package/templates/react-node-backend/node_modules/.bin/tsc +21 -0
  34. package/templates/react-node-backend/node_modules/.bin/tsserver +21 -0
  35. package/templates/react-node-backend/node_modules/.bin/vite +21 -0
  36. package/templates/react-node-backend/package.json +33 -0
  37. package/templates/react-node-backend/public/react.svg +1 -0
  38. package/templates/react-node-backend/public/vite.svg +1 -0
  39. package/templates/react-node-backend/src/App.tsx +69 -0
  40. package/templates/react-node-backend/src/index.css +145 -0
  41. package/templates/react-node-backend/src/main.tsx +12 -0
  42. package/templates/react-node-backend/tsconfig.app.json +28 -0
  43. package/templates/react-node-backend/tsconfig.json +7 -0
  44. package/templates/react-node-backend/tsconfig.node.json +26 -0
  45. package/templates/react-node-backend/vite.config.ts +13 -0
  46. package/dist/create-atom-BV6WVRvY.js.map +0 -1
  47. package/templates/base/node_modules/.bin/browserslist +0 -21
  48. package/templates/base/node_modules/.bin/eslint +0 -21
  49. package/templates/base/node_modules/.bin/jiti +0 -21
  50. package/templates/base/node_modules/.bin/sass +0 -21
  51. package/templates/base/node_modules/.bin/terser +0 -21
  52. package/templates/base/node_modules/.bin/tsc +0 -21
  53. package/templates/base/node_modules/.bin/tsserver +0 -21
  54. package/templates/base/node_modules/.bin/vite +0 -21
  55. package/templates/base/node_modules/.bin/yaml +0 -21
  56. package/templates/base/node_modules/.vite/deps/_metadata.json +0 -82
  57. package/templates/base/node_modules/.vite/deps/atom__io.js +0 -72
  58. package/templates/base/node_modules/.vite/deps/atom__io.js.map +0 -7
  59. package/templates/base/node_modules/.vite/deps/atom__io_react.js +0 -170
  60. package/templates/base/node_modules/.vite/deps/atom__io_react.js.map +0 -7
  61. package/templates/base/node_modules/.vite/deps/chunk-2PJG54YB.js +0 -364
  62. package/templates/base/node_modules/.vite/deps/chunk-2PJG54YB.js.map +0 -7
  63. package/templates/base/node_modules/.vite/deps/chunk-6VZTUEOV.js +0 -3777
  64. package/templates/base/node_modules/.vite/deps/chunk-6VZTUEOV.js.map +0 -7
  65. package/templates/base/node_modules/.vite/deps/chunk-IHAFLL3M.js +0 -204
  66. package/templates/base/node_modules/.vite/deps/chunk-IHAFLL3M.js.map +0 -7
  67. package/templates/base/node_modules/.vite/deps/chunk-LZJKCPXG.js +0 -84
  68. package/templates/base/node_modules/.vite/deps/chunk-LZJKCPXG.js.map +0 -7
  69. package/templates/base/node_modules/.vite/deps/chunk-PJQAIOAR.js +0 -311
  70. package/templates/base/node_modules/.vite/deps/chunk-PJQAIOAR.js.map +0 -7
  71. package/templates/base/node_modules/.vite/deps/chunk-XRJUZPUF.js +0 -17
  72. package/templates/base/node_modules/.vite/deps/chunk-XRJUZPUF.js.map +0 -7
  73. package/templates/base/node_modules/.vite/deps/package.json +0 -3
  74. package/templates/base/node_modules/.vite/deps/preact.js +0 -27
  75. package/templates/base/node_modules/.vite/deps/preact.js.map +0 -7
  76. package/templates/base/node_modules/.vite/deps/preact_compat.js +0 -100
  77. package/templates/base/node_modules/.vite/deps/preact_compat.js.map +0 -7
  78. package/templates/base/node_modules/.vite/deps/preact_debug.js +0 -240
  79. package/templates/base/node_modules/.vite/deps/preact_debug.js.map +0 -7
  80. package/templates/base/node_modules/.vite/deps/preact_devtools.js +0 -7
  81. package/templates/base/node_modules/.vite/deps/preact_devtools.js.map +0 -7
  82. package/templates/base/node_modules/.vite/deps/preact_hooks.js +0 -29
  83. package/templates/base/node_modules/.vite/deps/preact_hooks.js.map +0 -7
  84. package/templates/base/node_modules/.vite/deps/preact_jsx-dev-runtime.js +0 -18
  85. package/templates/base/node_modules/.vite/deps/preact_jsx-dev-runtime.js.map +0 -7
  86. package/templates/base/node_modules/.vite/deps/preact_jsx-runtime.js +0 -18
  87. package/templates/base/node_modules/.vite/deps/preact_jsx-runtime.js.map +0 -7
  88. /package/templates/{base → preact-svg-editor}/_gitignore +0 -0
  89. /package/templates/{base → preact-svg-editor}/index.html +0 -0
  90. /package/templates/{base → preact-svg-editor}/public/preact.svg +0 -0
  91. /package/templates/{base → preact-svg-editor}/src/msg.md +0 -0
  92. /package/templates/{base → preact-svg-editor}/src/style.css +0 -0
  93. /package/templates/{base → preact-svg-editor}/tsconfig.json +0 -0
  94. /package/templates/{base → react-node-backend}/eslint.d.ts +0 -0
@@ -1,38 +1,40 @@
1
+ import type { Loadable, RegularAtomToken } from "atom.io"
1
2
  import {
2
3
  atom,
3
4
  atomFamily,
4
5
  getState,
5
- Loadable,
6
6
  resetState,
7
+ runTransaction,
7
8
  selectorFamily,
8
9
  setState,
10
+ transaction,
9
11
  } from "atom.io"
10
- import { type RegularAtomToken } from "atom.io"
11
12
  import { useO } from "atom.io/react"
12
- import { PointerEventHandler, TargetedPointerEvent } from "preact"
13
- import { useRef, useCallback, useEffect, MutableRef } from "preact/hooks"
13
+ import type { PointerEventHandler, TargetedPointerEvent, VNode } from "preact"
14
+ import type { MutableRef } from "preact/hooks"
15
+ import { useCallback, useEffect, useRef } from "preact/hooks"
14
16
 
15
17
  type PointXY = { x: number; y: number }
16
18
  type EdgeXY = { c?: PointXY; s: PointXY }
17
19
 
18
20
  const pathKeysAtom = atom<string[]>({
19
- key: "pathKeys",
21
+ key: `pathKeys`,
20
22
  default: [],
21
23
  })
22
24
  const subpathKeysAtoms = atomFamily<string[], string>({
23
- key: "subpathKeys",
25
+ key: `subpathKeys`,
24
26
  default: [],
25
27
  })
26
28
  const nodeAtoms = atomFamily<PointXY | null, string>({
27
- key: "nodeAtoms",
29
+ key: `nodeAtoms`,
28
30
  default: null,
29
31
  })
30
- const edgeAtoms = atomFamily<boolean | EdgeXY, string>({
31
- key: "edgeAtoms",
32
+ const edgeAtoms = atomFamily<EdgeXY | boolean, string>({
33
+ key: `edgeAtoms`,
32
34
  default: true,
33
35
  })
34
36
  const pathDrawSelectors = selectorFamily<string, string>({
35
- key: "pathDrawSelectors",
37
+ key: `pathDrawSelectors`,
36
38
  get:
37
39
  (pathKey) =>
38
40
  ({ get }) => {
@@ -43,7 +45,7 @@ const pathDrawSelectors = selectorFamily<string, string>({
43
45
  const edge = get(edgeAtoms, subpathKey)
44
46
 
45
47
  if (node === null) {
46
- return "Z"
48
+ return `Z`
47
49
  }
48
50
  if (idx === 0) {
49
51
  return `M ${node.x} ${node.y}`
@@ -59,7 +61,7 @@ const pathDrawSelectors = selectorFamily<string, string>({
59
61
  }
60
62
  return `S ${edge.s.x} ${edge.s.y} ${node.x} ${node.y}`
61
63
  })
62
- .join(" ")
64
+ .join(` `)
63
65
  },
64
66
  })
65
67
 
@@ -89,8 +91,10 @@ function Bezier({
89
91
  node?: PointXY
90
92
  }) {
91
93
  let node: PointXY | null
94
+ // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
92
95
  switch (typeof maybeNode) {
93
- case "undefined":
96
+ case `undefined`:
97
+ // eslint-disable-next-line react-hooks/rules-of-hooks
94
98
  node = useO(nodeAtoms, prevSubpathKey)
95
99
  break
96
100
  default:
@@ -145,7 +149,7 @@ function Node({
145
149
  const edge = useO(edgeAtoms, subpathKey)
146
150
  return node === null ? null : (
147
151
  <>
148
- {typeof edge === "boolean" ? (
152
+ {typeof edge === `boolean` ? (
149
153
  <rect class="node" x={node.x - 3} y={node.y - 3} width={6} height={6} />
150
154
  ) : (
151
155
  <>
@@ -182,17 +186,20 @@ function Node({
182
186
 
183
187
  function RenderedPath({ pathKey }: { pathKey: string }) {
184
188
  const draw = useO(pathDrawSelectors, pathKey)
185
- return <path d={`${draw} Z`} class="path" style={{ pointerEvents: "none" }} />
189
+ return <path d={`${draw} Z`} class="path" style={{ pointerEvents: `none` }} />
186
190
  }
187
191
 
188
192
  function Path({ pathKey }: { pathKey: string }) {
189
193
  const subpathKeys = useO(subpathKeysAtoms, pathKey)
190
- console.log(console.log(`render path`, subpathKeys))
191
194
  return (
192
195
  <>
193
196
  <RenderedPath pathKey={pathKey} />
194
197
  {subpathKeys.toReversed().map((spk, idx, arr) => (
195
- <Node subpathKey={spk} nextSubpathKey={arr[idx + 1] ?? arr[0]} />
198
+ <Node
199
+ subpathKey={spk}
200
+ nextSubpathKey={arr[idx + 1] ?? arr[0]}
201
+ key={spk}
202
+ />
196
203
  ))}
197
204
  </>
198
205
  )
@@ -203,18 +210,18 @@ function PathsDemo() {
203
210
  return (
204
211
  <>
205
212
  {pathKeys.map((pathKey) => {
206
- return <Path pathKey={pathKey} />
213
+ return <Path pathKey={pathKey} key={pathKey} />
207
214
  })}
208
215
  </>
209
216
  )
210
217
  }
211
218
 
212
219
  const svgRefAtom = atom<SVGSVGElement | null>({
213
- key: "svgRef",
220
+ key: `svgRef`,
214
221
  default: null,
215
222
  })
216
- const currentlyDraggingAtom = atom<null | { key: string; by?: `c` | `s` }>({
217
- key: "currentlyDragging",
223
+ const currentlyDraggingAtom = atom<{ key: string; by?: `c` | `s` } | null>({
224
+ key: `currentlyDragging`,
218
225
  default: null,
219
226
  })
220
227
 
@@ -257,144 +264,147 @@ function onPointerMove(evt: TargetedPointerEvent<SVGSVGElement>): void {
257
264
  const CODES = [`m`, `M`, `l`, `L`, `c`, `C`, `v`, `V`, `z`, `Z`] as const
258
265
 
259
266
  const preactLogoAtom = atom<Loadable<string>>({
260
- key: "preactLogo",
261
- default: () => fetch("preact.svg").then((res) => res.text()),
267
+ key: `preactLogo`,
268
+ default: () => fetch(`preact.svg`).then((res) => res.text()),
262
269
  })
263
270
 
264
- async function reset() {
265
- const logo = await getState(preactLogoAtom)
266
- for (const pathKey of getState(pathKeysAtom)) {
267
- resetState(subpathKeysAtoms, pathKey)
268
- }
269
- resetState(pathKeysAtom)
271
+ const resetTX = transaction<() => Promise<void>>({
272
+ key: `reset`,
273
+ do: async () => {
274
+ const logo = await getState(preactLogoAtom)
275
+ for (const pathKey of getState(pathKeysAtom)) {
276
+ resetState(subpathKeysAtoms, pathKey)
277
+ }
278
+ resetState(pathKeysAtom)
270
279
 
271
- const shapes = logo
272
- .split("\n")
273
- .filter((l) => l.startsWith("\t<path"))
274
- .map((logo) => {
275
- const raw = logo.split(`d="`)[1].slice(0, -9)
280
+ const shapes = logo
281
+ .split(`\n`)
282
+ .filter((line) => line.startsWith(`\t<path`))
283
+ .map((line) => {
284
+ const raw = line.split(`d="`)[1].slice(0, -9)
276
285
 
277
- type Letter = (typeof CODES)[number]
278
- let letter: Letter | undefined
279
- let number = ``
280
- let numbers: number[] = []
286
+ type Letter = (typeof CODES)[number]
287
+ let letter: Letter | undefined
288
+ let number = ``
289
+ let numbers: number[] = []
281
290
 
282
- const instructions: { letter: Letter; numbers: number[] }[] = []
283
- for (let i = 0; i < raw.length; i++) {
284
- const c = raw[i]
285
- if (CODES.includes(c as Letter)) {
286
- if (number) {
291
+ const instructions: { letter: Letter; numbers: number[] }[] = []
292
+ for (const c of raw) {
293
+ if (CODES.includes(c as Letter)) {
294
+ if (number) {
295
+ numbers.push(Number.parseFloat(number))
296
+ number = ``
297
+ }
298
+ if (letter) {
299
+ instructions.push({ letter, numbers })
300
+ }
301
+ letter = c as Letter
302
+ numbers = []
303
+ continue
304
+ }
305
+ if (c === ` `) {
287
306
  numbers.push(Number.parseFloat(number))
288
307
  number = ``
308
+ continue
289
309
  }
290
- if (letter) {
291
- instructions.push({ letter, numbers })
310
+ if (c === `-` && number) {
311
+ numbers.push(Number.parseFloat(number))
312
+ number = `-`
313
+ continue
292
314
  }
293
- letter = c as Letter
294
- numbers = []
295
- continue
296
- }
297
- if (c === ` `) {
298
- numbers.push(Number.parseFloat(number))
299
- number = ``
300
- continue
301
- }
302
- if (c === `-` && number) {
303
- numbers.push(Number.parseFloat(number))
304
- number = `-`
305
- continue
315
+
316
+ number += c
306
317
  }
307
318
 
308
- number += c
309
- }
319
+ let prev: PointXY = { x: 0, y: 0 }
320
+ const edgeNodes = instructions.map<{
321
+ node: PointXY | null
322
+ edge: boolean | { c?: PointXY; s: PointXY }
323
+ }>(({ letter: l, numbers: ns }) => {
324
+ let node: PointXY | null
325
+ let edge: boolean | { c?: PointXY; s: PointXY }
326
+ switch (l) {
327
+ case `m`:
328
+ node = { x: prev.x + ns[0], y: prev.y + ns[1] }
329
+ edge = false
330
+ break
331
+ case `M`:
332
+ node = { x: ns[0], y: ns[1] }
333
+ edge = false
334
+ break
335
+ case `l`:
336
+ node = { x: prev.x + ns[0], y: prev.y + ns[1] }
337
+ edge = true
338
+ break
339
+ case `L`:
340
+ node = { x: ns[0], y: ns[1] }
341
+ edge = true
342
+ break
343
+ case `c`:
344
+ node = { x: prev.x + ns[4], y: prev.y + ns[5] }
345
+ edge = {
346
+ c: { x: prev.x + ns[0], y: prev.y + ns[1] },
347
+ s: { x: prev.x + ns[2], y: prev.y + ns[3] },
348
+ }
349
+ break
350
+ case `C`:
351
+ node = { x: ns[4], y: ns[5] }
352
+ edge = {
353
+ c: { x: ns[0], y: ns[1] },
354
+ s: { x: ns[2], y: ns[3] },
355
+ }
356
+ break
357
+ case `v`:
358
+ node = { x: prev.x, y: prev.y + ns[0] }
359
+ edge = true
360
+ break
361
+ case `V`:
362
+ node = { x: prev.x, y: ns[0] }
363
+ edge = true
364
+ break
365
+ case `z`:
366
+ case `Z`:
367
+ node = null
368
+ edge = true
369
+ }
370
+ if (node) {
371
+ prev = node
372
+ }
310
373
 
311
- let prev: PointXY = { x: 0, y: 0 }
312
- const edgeNodes = instructions.map<{
313
- node: null | PointXY
314
- edge: boolean | { c?: PointXY; s: PointXY }
315
- }>(({ letter, numbers }) => {
316
- let node: null | PointXY
317
- let edge: boolean | { c?: PointXY; s: PointXY }
318
- switch (letter) {
319
- case `m`:
320
- node = { x: prev.x + numbers[0], y: prev.y + numbers[1] }
321
- edge = false
322
- break
323
- case `M`:
324
- node = { x: numbers[0], y: numbers[1] }
325
- edge = false
326
- break
327
- case `l`:
328
- node = { x: prev.x + numbers[0], y: prev.y + numbers[1] }
329
- edge = true
330
- break
331
- case `L`:
332
- node = { x: numbers[0], y: numbers[1] }
333
- edge = true
334
- break
335
- case `c`:
336
- node = { x: prev.x + numbers[4], y: prev.y + numbers[5] }
337
- edge = {
338
- c: { x: prev.x + numbers[0], y: prev.y + numbers[1] },
339
- s: { x: prev.x + numbers[2], y: prev.y + numbers[3] },
340
- }
341
- break
342
- case `C`:
343
- node = { x: numbers[4], y: numbers[5] }
344
- edge = {
345
- c: { x: numbers[0], y: numbers[1] },
346
- s: { x: numbers[2], y: numbers[3] },
347
- }
348
- break
349
- case `v`:
350
- node = { x: prev.x, y: prev.y + numbers[0] }
351
- edge = true
352
- break
353
- case `V`:
354
- node = { x: prev.x, y: numbers[0] }
355
- edge = true
356
- break
357
- case `z`:
358
- case `Z`:
359
- node = null
360
- edge = true
361
- }
362
- if (node) {
363
- prev = node
364
- }
374
+ return { node, edge }
375
+ })
365
376
 
366
- return { node, edge }
377
+ return edgeNodes
367
378
  })
368
379
 
369
- return edgeNodes
370
- })
371
-
372
- let i = 0
373
- let j = 0
374
- for (const shape of shapes) {
375
- const jj = j
376
- for (const { node, edge } of shape) {
377
- setState(edgeAtoms, `subpath${j}`, edge)
378
- setState(nodeAtoms, `subpath${j}`, node)
379
- j++
380
+ let i = 0
381
+ let j = 0
382
+ for (const shape of shapes) {
383
+ const jj = j
384
+ for (const { node, edge } of shape) {
385
+ setState(edgeAtoms, `subpath${j}`, edge)
386
+ setState(nodeAtoms, `subpath${j}`, node)
387
+ j++
388
+ }
389
+ const numberOfNodes = j - jj
390
+ setState(
391
+ subpathKeysAtoms,
392
+ `path${i}`,
393
+ Array.from(
394
+ { length: numberOfNodes },
395
+ (_, nodeNum) => `subpath${jj + nodeNum}`,
396
+ ),
397
+ )
398
+ setState(pathKeysAtom, (prev) => [...prev, `path${i}`])
399
+ i++
380
400
  }
381
- const numberOfNodes = j - jj
382
- setState(
383
- subpathKeysAtoms,
384
- `path${i}`,
385
- Array.from(
386
- { length: numberOfNodes },
387
- (_, nodeNum) => `subpath${jj + nodeNum}`,
388
- ),
389
- )
390
- setState(pathKeysAtom, (prev) => [...prev, `path${i}`])
391
- i++
392
- }
393
- }
401
+ },
402
+ })
403
+ const reset = runTransaction(resetTX)
394
404
 
395
405
  const WIDTH = 256
396
406
  const HEIGHT = 296
397
- export default function BezierPlayground() {
407
+ export default function BezierPlayground(): VNode {
398
408
  const svgRef = useAtomicRef(svgRefAtom)
399
409
  const onPointerUp: PointerEventHandler<SVGSVGElement> = useCallback((evt) => {
400
410
  evt.currentTarget.releasePointerCapture(evt.pointerId)
@@ -406,13 +416,13 @@ export default function BezierPlayground() {
406
416
  return (
407
417
  <div
408
418
  style={{
409
- display: "flex",
410
- flexFlow: "column",
411
- position: "relative",
412
- overflow: "hidden",
413
- maxWidth: "1280px",
414
- width: "100vw",
415
- alignItems: "center",
419
+ display: `flex`,
420
+ flexFlow: `column`,
421
+ position: `relative`,
422
+ overflow: `hidden`,
423
+ maxWidth: `1280px`,
424
+ width: `100vw`,
425
+ alignItems: `center`,
416
426
  }}
417
427
  >
418
428
  <svg
@@ -1,9 +1,11 @@
1
+ import "./style.css"
2
+
3
+ import type { VNode } from "preact"
1
4
  import { render } from "preact"
2
5
 
3
- import "./style.css"
4
6
  import BezierPlayground from "./BezierPlayground.tsx"
5
7
 
6
- export function App() {
8
+ export function App(): VNode {
7
9
  return (
8
10
  <>
9
11
  <h1>Atom.io in Preact on Vite</h1>
@@ -38,11 +40,11 @@ type ResourceProps = {
38
40
  }
39
41
  function Resource(props: ResourceProps) {
40
42
  return (
41
- <a href={props.href} target="_blank" class="resource">
43
+ <a href={props.href} target="_blank" class="resource" rel="noreferrer">
42
44
  <h2>{props.title}</h2>
43
45
  <p>{props.description}</p>
44
46
  </a>
45
47
  )
46
48
  }
47
49
 
48
- render(<App />, document.getElementById("app")!)
50
+ render(<App />, document.getElementById(`app`)!)
@@ -1,5 +1,6 @@
1
1
  import preact from "@preact/preset-vite"
2
- import { defineConfig, UserConfig } from "vite"
2
+ import type { UserConfig } from "vite"
3
+ import { defineConfig } from "vite"
3
4
 
4
5
  // https://vitejs.dev/config/
5
6
  const config: UserConfig = defineConfig({
@@ -0,0 +1,12 @@
1
+
2
+ > react-node-backend@0.0.0 build /home/runner/work/wayforge/wayforge/packages/create-atom.io/templates/react-node-backend
3
+ > vite build
4
+
5
+ rolldown-vite v7.1.12 building for production...
6
+ 
7
+ rendering chunks...
8
+ computing gzip size...
9
+ dist/index.html  0.45 kB │ gzip: 0.29 kB
10
+ dist/assets/index-By2j7w9s.css  2.26 kB │ gzip: 0.84 kB
11
+ dist/assets/index-6PkP9syN.js 231.07 kB │ gzip: 71.33 kB
12
+ ✓ built in 2.62s
@@ -0,0 +1,75 @@
1
+ # React + TypeScript + Vite
2
+
3
+ This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
4
+
5
+ Currently, two official plugins are available:
6
+
7
+ - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh
8
+ - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
9
+
10
+ ## React Compiler
11
+
12
+ The React Compiler is enabled on this template. See [this documentation](https://react.dev/learn/react-compiler) for more information.
13
+
14
+ Note: This will impact Vite dev & build performances.
15
+
16
+ ## Expanding the ESLint configuration
17
+
18
+ If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
19
+
20
+ ```js
21
+ export default defineConfig([
22
+ globalIgnores(['dist']),
23
+ {
24
+ files: ['**/*.{ts,tsx}'],
25
+ extends: [
26
+ // Other configs...
27
+
28
+ // Remove tseslint.configs.recommended and replace with this
29
+ tseslint.configs.recommendedTypeChecked,
30
+ // Alternatively, use this for stricter rules
31
+ tseslint.configs.strictTypeChecked,
32
+ // Optionally, add this for stylistic rules
33
+ tseslint.configs.stylisticTypeChecked,
34
+
35
+ // Other configs...
36
+ ],
37
+ languageOptions: {
38
+ parserOptions: {
39
+ project: ['./tsconfig.node.json', './tsconfig.app.json'],
40
+ tsconfigRootDir: import.meta.dirname,
41
+ },
42
+ // other options...
43
+ },
44
+ },
45
+ ])
46
+ ```
47
+
48
+ You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
49
+
50
+ ```js
51
+ // eslint.config.js
52
+ import reactX from 'eslint-plugin-react-x'
53
+ import reactDom from 'eslint-plugin-react-dom'
54
+
55
+ export default defineConfig([
56
+ globalIgnores(['dist']),
57
+ {
58
+ files: ['**/*.{ts,tsx}'],
59
+ extends: [
60
+ // Other configs...
61
+ // Enable lint rules for React
62
+ reactX.configs['recommended-typescript'],
63
+ // Enable lint rules for React DOM
64
+ reactDom.configs.recommended,
65
+ ],
66
+ languageOptions: {
67
+ parserOptions: {
68
+ project: ['./tsconfig.node.json', './tsconfig.app.json'],
69
+ tsconfigRootDir: import.meta.dirname,
70
+ },
71
+ // other options...
72
+ },
73
+ },
74
+ ])
75
+ ```
@@ -0,0 +1,24 @@
1
+ # Logs
2
+ logs
3
+ *.log
4
+ npm-debug.log*
5
+ yarn-debug.log*
6
+ yarn-error.log*
7
+ pnpm-debug.log*
8
+ lerna-debug.log*
9
+
10
+ node_modules
11
+ dist
12
+ dist-ssr
13
+ *.local
14
+
15
+ # Editor directories and files
16
+ .vscode/*
17
+ !.vscode/extensions.json
18
+ .idea
19
+ .DS_Store
20
+ *.suo
21
+ *.ntvs*
22
+ *.njsproj
23
+ *.sln
24
+ *.sw?