remix 3.0.0-beta.3 → 3.0.0-beta.5

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 (93) hide show
  1. package/dist/ui/accordion/primitives.d.ts +2 -0
  2. package/dist/ui/accordion/primitives.d.ts.map +1 -0
  3. package/dist/ui/accordion/primitives.js +2 -0
  4. package/dist/ui/button.d.ts +1 -0
  5. package/dist/ui/button.d.ts.map +1 -1
  6. package/dist/ui/button.js +1 -0
  7. package/dist/ui/checkbox.d.ts +3 -0
  8. package/dist/ui/checkbox.d.ts.map +1 -0
  9. package/dist/ui/checkbox.js +3 -0
  10. package/dist/ui/combobox/primitives.d.ts +2 -0
  11. package/dist/ui/combobox/primitives.d.ts.map +1 -0
  12. package/dist/ui/combobox/primitives.js +2 -0
  13. package/dist/ui/input.d.ts +3 -0
  14. package/dist/ui/input.d.ts.map +1 -0
  15. package/dist/ui/input.js +3 -0
  16. package/dist/ui/menu/primitives.d.ts +2 -0
  17. package/dist/ui/menu/primitives.d.ts.map +1 -0
  18. package/dist/ui/{glyph.js → menu/primitives.js} +1 -1
  19. package/dist/ui/radio.d.ts +3 -0
  20. package/dist/ui/radio.d.ts.map +1 -0
  21. package/dist/ui/radio.js +3 -0
  22. package/dist/ui/select/primitives.d.ts +2 -0
  23. package/dist/ui/select/primitives.d.ts.map +1 -0
  24. package/dist/ui/select/primitives.js +2 -0
  25. package/dist/ui/tabs/primitives.d.ts +2 -0
  26. package/dist/ui/tabs/primitives.d.ts.map +1 -0
  27. package/dist/ui/{theme.js → tabs/primitives.js} +1 -1
  28. package/dist/ui/tabs.d.ts +2 -0
  29. package/dist/ui/tabs.d.ts.map +1 -0
  30. package/{src/ui/glyph.ts → dist/ui/tabs.js} +1 -1
  31. package/dist/ui/toggle/primitives.d.ts +2 -0
  32. package/dist/ui/toggle/primitives.d.ts.map +1 -0
  33. package/dist/ui/toggle/primitives.js +2 -0
  34. package/dist/ui/toggle.d.ts +3 -0
  35. package/dist/ui/toggle.d.ts.map +1 -0
  36. package/dist/ui/toggle.js +3 -0
  37. package/package.json +76 -47
  38. package/src/assert/README.md +11 -4
  39. package/src/data-table-mysql/README.md +25 -0
  40. package/src/data-table-postgres/README.md +26 -0
  41. package/src/fetch-router/README.md +115 -35
  42. package/src/form-data-parser/README.md +4 -4
  43. package/src/mime/README.md +8 -1
  44. package/src/node-fetch-server/README.md +28 -2
  45. package/src/route-pattern/README.md +51 -6
  46. package/src/session/README.md +1 -1
  47. package/src/test/README.md +27 -0
  48. package/src/ui/README.md +50 -164
  49. package/src/ui/accordion/README.md +50 -14
  50. package/src/ui/accordion/primitives/README.md +202 -0
  51. package/src/ui/accordion/primitives.ts +2 -0
  52. package/src/ui/anchor/README.md +37 -2
  53. package/src/ui/breadcrumbs/README.md +4 -4
  54. package/src/ui/button/README.md +26 -26
  55. package/src/ui/button.ts +1 -0
  56. package/src/ui/checkbox/README.md +59 -0
  57. package/src/ui/checkbox.ts +3 -0
  58. package/src/ui/combobox/README.md +58 -9
  59. package/src/ui/combobox/primitives/README.md +194 -0
  60. package/src/ui/combobox/primitives.ts +2 -0
  61. package/src/ui/input/README.md +52 -0
  62. package/src/ui/input.ts +3 -0
  63. package/src/ui/listbox/README.md +9 -41
  64. package/src/ui/menu/README.md +55 -14
  65. package/src/ui/menu/primitives/README.md +161 -0
  66. package/{dist/ui/scroll-lock.js → src/ui/menu/primitives.ts} +1 -1
  67. package/src/ui/popover/README.md +20 -39
  68. package/src/ui/radio/README.md +53 -0
  69. package/src/ui/radio.ts +3 -0
  70. package/src/ui/select/README.md +29 -19
  71. package/src/ui/select/primitives/README.md +117 -0
  72. package/src/ui/select/primitives.ts +2 -0
  73. package/src/ui/tabs/README.md +141 -0
  74. package/src/ui/tabs/primitives/README.md +141 -0
  75. package/{dist/ui/separator.js → src/ui/tabs/primitives.ts} +1 -1
  76. package/src/ui/{theme.ts → tabs.ts} +1 -1
  77. package/src/ui/toggle/README.md +56 -0
  78. package/src/ui/toggle/primitives/README.md +56 -0
  79. package/src/ui/toggle/primitives.ts +2 -0
  80. package/src/ui/toggle.ts +3 -0
  81. package/dist/ui/glyph.d.ts +0 -2
  82. package/dist/ui/glyph.d.ts.map +0 -1
  83. package/dist/ui/scroll-lock.d.ts +0 -2
  84. package/dist/ui/scroll-lock.d.ts.map +0 -1
  85. package/dist/ui/separator.d.ts +0 -2
  86. package/dist/ui/separator.d.ts.map +0 -1
  87. package/dist/ui/theme.d.ts +0 -2
  88. package/dist/ui/theme.d.ts.map +0 -1
  89. package/src/ui/glyph/README.md +0 -72
  90. package/src/ui/scroll-lock/README.md +0 -33
  91. package/src/ui/scroll-lock.ts +0 -2
  92. package/src/ui/separator.ts +0 -2
  93. package/src/ui/theme/README.md +0 -103
@@ -0,0 +1,2 @@
1
+ export * from '@remix-run/ui/accordion/primitives';
2
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/ui/accordion/primitives.ts"],"names":[],"mappings":"AACA,cAAc,oCAAoC,CAAA"}
@@ -0,0 +1,2 @@
1
+ // IMPORTANT: This file is auto-generated, please do not edit manually.
2
+ export * from '@remix-run/ui/accordion/primitives';
@@ -1,2 +1,3 @@
1
1
  export * from '@remix-run/ui/button';
2
+ export { default } from '@remix-run/ui/button';
2
3
  //# sourceMappingURL=button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/ui/button.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/ui/button.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA"}
package/dist/ui/button.js CHANGED
@@ -1,2 +1,3 @@
1
1
  // IMPORTANT: This file is auto-generated, please do not edit manually.
2
2
  export * from '@remix-run/ui/button';
3
+ export { default } from '@remix-run/ui/button';
@@ -0,0 +1,3 @@
1
+ export * from '@remix-run/ui/checkbox';
2
+ export { default } from '@remix-run/ui/checkbox';
3
+ //# sourceMappingURL=checkbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/ui/checkbox.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1,3 @@
1
+ // IMPORTANT: This file is auto-generated, please do not edit manually.
2
+ export * from '@remix-run/ui/checkbox';
3
+ export { default } from '@remix-run/ui/checkbox';
@@ -0,0 +1,2 @@
1
+ export * from '@remix-run/ui/combobox/primitives';
2
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/ui/combobox/primitives.ts"],"names":[],"mappings":"AACA,cAAc,mCAAmC,CAAA"}
@@ -0,0 +1,2 @@
1
+ // IMPORTANT: This file is auto-generated, please do not edit manually.
2
+ export * from '@remix-run/ui/combobox/primitives';
@@ -0,0 +1,3 @@
1
+ export * from '@remix-run/ui/input';
2
+ export { default } from '@remix-run/ui/input';
3
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/ui/input.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,3 @@
1
+ // IMPORTANT: This file is auto-generated, please do not edit manually.
2
+ export * from '@remix-run/ui/input';
3
+ export { default } from '@remix-run/ui/input';
@@ -0,0 +1,2 @@
1
+ export * from '@remix-run/ui/menu/primitives';
2
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/primitives.ts"],"names":[],"mappings":"AACA,cAAc,+BAA+B,CAAA"}
@@ -1,2 +1,2 @@
1
1
  // IMPORTANT: This file is auto-generated, please do not edit manually.
2
- export * from '@remix-run/ui/glyph';
2
+ export * from '@remix-run/ui/menu/primitives';
@@ -0,0 +1,3 @@
1
+ export * from '@remix-run/ui/radio';
2
+ export { default } from '@remix-run/ui/radio';
3
+ //# sourceMappingURL=radio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio.d.ts","sourceRoot":"","sources":["../../src/ui/radio.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,3 @@
1
+ // IMPORTANT: This file is auto-generated, please do not edit manually.
2
+ export * from '@remix-run/ui/radio';
3
+ export { default } from '@remix-run/ui/radio';
@@ -0,0 +1,2 @@
1
+ export * from '@remix-run/ui/select/primitives';
2
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/ui/select/primitives.ts"],"names":[],"mappings":"AACA,cAAc,iCAAiC,CAAA"}
@@ -0,0 +1,2 @@
1
+ // IMPORTANT: This file is auto-generated, please do not edit manually.
2
+ export * from '@remix-run/ui/select/primitives';
@@ -0,0 +1,2 @@
1
+ export * from '@remix-run/ui/tabs/primitives';
2
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/ui/tabs/primitives.ts"],"names":[],"mappings":"AACA,cAAc,+BAA+B,CAAA"}
@@ -1,2 +1,2 @@
1
1
  // IMPORTANT: This file is auto-generated, please do not edit manually.
2
- export * from '@remix-run/ui/theme';
2
+ export * from '@remix-run/ui/tabs/primitives';
@@ -0,0 +1,2 @@
1
+ export * from '@remix-run/ui/tabs';
2
+ //# sourceMappingURL=tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/ui/tabs.ts"],"names":[],"mappings":"AACA,cAAc,oBAAoB,CAAA"}
@@ -1,2 +1,2 @@
1
1
  // IMPORTANT: This file is auto-generated, please do not edit manually.
2
- export * from '@remix-run/ui/glyph'
2
+ export * from '@remix-run/ui/tabs';
@@ -0,0 +1,2 @@
1
+ export * from '@remix-run/ui/toggle/primitives';
2
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/ui/toggle/primitives.ts"],"names":[],"mappings":"AACA,cAAc,iCAAiC,CAAA"}
@@ -0,0 +1,2 @@
1
+ // IMPORTANT: This file is auto-generated, please do not edit manually.
2
+ export * from '@remix-run/ui/toggle/primitives';
@@ -0,0 +1,3 @@
1
+ export * from '@remix-run/ui/toggle';
2
+ export { default } from '@remix-run/ui/toggle';
3
+ //# sourceMappingURL=toggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["../../src/ui/toggle.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA"}
@@ -0,0 +1,3 @@
1
+ // IMPORTANT: This file is auto-generated, please do not edit manually.
2
+ export * from '@remix-run/ui/toggle';
3
+ export { default } from '@remix-run/ui/toggle';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remix",
3
- "version": "3.0.0-beta.3",
3
+ "version": "3.0.0-beta.5",
4
4
  "description": "The Remix web framework",
5
5
  "author": "Michael Jackson <mjijackson@gmail.com>",
6
6
  "license": "MIT",
@@ -453,6 +453,10 @@
453
453
  "types": "./dist/ui/accordion.d.ts",
454
454
  "default": "./dist/ui/accordion.js"
455
455
  },
456
+ "./ui/accordion/primitives": {
457
+ "types": "./dist/ui/accordion/primitives.d.ts",
458
+ "default": "./dist/ui/accordion/primitives.js"
459
+ },
456
460
  "./ui/anchor": {
457
461
  "types": "./dist/ui/anchor.d.ts",
458
462
  "default": "./dist/ui/anchor.js"
@@ -469,13 +473,21 @@
469
473
  "types": "./dist/ui/button.d.ts",
470
474
  "default": "./dist/ui/button.js"
471
475
  },
476
+ "./ui/checkbox": {
477
+ "types": "./dist/ui/checkbox.d.ts",
478
+ "default": "./dist/ui/checkbox.js"
479
+ },
472
480
  "./ui/combobox": {
473
481
  "types": "./dist/ui/combobox.d.ts",
474
482
  "default": "./dist/ui/combobox.js"
475
483
  },
476
- "./ui/glyph": {
477
- "types": "./dist/ui/glyph.d.ts",
478
- "default": "./dist/ui/glyph.js"
484
+ "./ui/combobox/primitives": {
485
+ "types": "./dist/ui/combobox/primitives.d.ts",
486
+ "default": "./dist/ui/combobox/primitives.js"
487
+ },
488
+ "./ui/input": {
489
+ "types": "./dist/ui/input.d.ts",
490
+ "default": "./dist/ui/input.js"
479
491
  },
480
492
  "./ui/jsx-dev-runtime": {
481
493
  "types": "./dist/ui/jsx-dev-runtime.d.ts",
@@ -493,33 +505,49 @@
493
505
  "types": "./dist/ui/menu.d.ts",
494
506
  "default": "./dist/ui/menu.js"
495
507
  },
508
+ "./ui/menu/primitives": {
509
+ "types": "./dist/ui/menu/primitives.d.ts",
510
+ "default": "./dist/ui/menu/primitives.js"
511
+ },
496
512
  "./ui/popover": {
497
513
  "types": "./dist/ui/popover.d.ts",
498
514
  "default": "./dist/ui/popover.js"
499
515
  },
500
- "./ui/scroll-lock": {
501
- "types": "./dist/ui/scroll-lock.d.ts",
502
- "default": "./dist/ui/scroll-lock.js"
516
+ "./ui/radio": {
517
+ "types": "./dist/ui/radio.d.ts",
518
+ "default": "./dist/ui/radio.js"
503
519
  },
504
520
  "./ui/select": {
505
521
  "types": "./dist/ui/select.d.ts",
506
522
  "default": "./dist/ui/select.js"
507
523
  },
508
- "./ui/separator": {
509
- "types": "./dist/ui/separator.d.ts",
510
- "default": "./dist/ui/separator.js"
524
+ "./ui/select/primitives": {
525
+ "types": "./dist/ui/select/primitives.d.ts",
526
+ "default": "./dist/ui/select/primitives.js"
511
527
  },
512
528
  "./ui/server": {
513
529
  "types": "./dist/ui/server.d.ts",
514
530
  "default": "./dist/ui/server.js"
515
531
  },
532
+ "./ui/tabs": {
533
+ "types": "./dist/ui/tabs.d.ts",
534
+ "default": "./dist/ui/tabs.js"
535
+ },
536
+ "./ui/tabs/primitives": {
537
+ "types": "./dist/ui/tabs/primitives.d.ts",
538
+ "default": "./dist/ui/tabs/primitives.js"
539
+ },
516
540
  "./ui/test": {
517
541
  "types": "./dist/ui/test.d.ts",
518
542
  "default": "./dist/ui/test.js"
519
543
  },
520
- "./ui/theme": {
521
- "types": "./dist/ui/theme.d.ts",
522
- "default": "./dist/ui/theme.js"
544
+ "./ui/toggle": {
545
+ "types": "./dist/ui/toggle.d.ts",
546
+ "default": "./dist/ui/toggle.js"
547
+ },
548
+ "./ui/toggle/primitives": {
549
+ "types": "./dist/ui/toggle/primitives.d.ts",
550
+ "default": "./dist/ui/toggle/primitives.js"
523
551
  },
524
552
  "./package.json": "./package.json"
525
553
  },
@@ -529,50 +557,50 @@
529
557
  "typescript": "^5.9.3"
530
558
  },
531
559
  "dependencies": {
532
- "@remix-run/assets": "^0.4.2",
533
- "@remix-run/auth": "^0.2.4",
534
- "@remix-run/compression-middleware": "^0.1.10",
535
- "@remix-run/cop-middleware": "^0.1.5",
536
- "@remix-run/csrf-middleware": "^0.1.5",
537
- "@remix-run/cors-middleware": "^0.1.5",
538
- "@remix-run/ui": "^0.3.0",
539
- "@remix-run/async-context-middleware": "^0.3.2",
540
- "@remix-run/auth-middleware": "^0.2.2",
560
+ "@remix-run/assets": "^0.4.4",
561
+ "@remix-run/auth": "^0.2.6",
562
+ "@remix-run/async-context-middleware": "^0.3.4",
563
+ "@remix-run/auth-middleware": "^0.2.4",
564
+ "@remix-run/ui": "^0.4.0",
565
+ "@remix-run/compression-middleware": "^0.1.12",
566
+ "@remix-run/cop-middleware": "^0.1.7",
567
+ "@remix-run/cors-middleware": "^0.1.7",
568
+ "@remix-run/csrf-middleware": "^0.1.7",
541
569
  "@remix-run/cookie": "^0.5.4",
542
570
  "@remix-run/data-schema": "^0.3.0",
543
- "@remix-run/data-table-postgres": "^0.4.0",
544
- "@remix-run/data-table-sqlite": "^0.5.1",
545
- "@remix-run/data-table-mysql": "^0.4.0",
546
571
  "@remix-run/data-table": "^0.3.0",
547
- "@remix-run/fetch-router": "^0.19.2",
548
- "@remix-run/file-storage": "^0.13.6",
549
- "@remix-run/fetch-proxy": "^0.8.3",
550
- "@remix-run/file-storage-s3": "^0.1.3",
551
- "@remix-run/form-data-middleware": "^0.3.2",
552
- "@remix-run/form-data-parser": "^0.17.3",
553
- "@remix-run/fs": "^0.4.5",
554
- "@remix-run/headers": "^0.21.1",
555
- "@remix-run/lazy-file": "^5.0.5",
572
+ "@remix-run/data-table-mysql": "^0.4.0",
573
+ "@remix-run/data-table-sqlite": "^0.5.1",
574
+ "@remix-run/data-table-postgres": "^0.4.0",
575
+ "@remix-run/fetch-proxy": "^0.8.4",
576
+ "@remix-run/file-storage": "^0.13.7",
577
+ "@remix-run/form-data-middleware": "^0.3.4",
578
+ "@remix-run/file-storage-s3": "^0.1.4",
579
+ "@remix-run/fs": "^0.4.6",
580
+ "@remix-run/form-data-parser": "^0.17.4",
556
581
  "@remix-run/html-template": "^0.3.1",
557
- "@remix-run/logger-middleware": "^0.3.2",
558
- "@remix-run/method-override-middleware": "^0.1.10",
582
+ "@remix-run/lazy-file": "^5.0.6",
583
+ "@remix-run/logger-middleware": "^0.3.4",
584
+ "@remix-run/fetch-router": "^0.20.1",
585
+ "@remix-run/method-override-middleware": "^0.1.12",
586
+ "@remix-run/mime": "^0.4.2",
587
+ "@remix-run/headers": "^0.21.1",
559
588
  "@remix-run/multipart-parser": "^0.16.3",
560
- "@remix-run/mime": "^0.4.1",
561
- "@remix-run/node-fetch-server": "^0.13.3",
562
- "@remix-run/response": "^0.3.6",
563
589
  "@remix-run/node-tsx": "^0.1.1",
564
- "@remix-run/route-pattern": "^0.22.0",
590
+ "@remix-run/node-fetch-server": "^0.14.0",
591
+ "@remix-run/route-pattern": "^0.23.0",
565
592
  "@remix-run/session": "^0.4.2",
566
- "@remix-run/session-middleware": "^0.3.2",
567
- "@remix-run/session-storage-memcache": "^0.1.2",
568
- "@remix-run/static-middleware": "^0.4.11",
593
+ "@remix-run/response": "^0.3.7",
594
+ "@remix-run/session-middleware": "^0.3.4",
569
595
  "@remix-run/session-storage-redis": "^0.1.1",
570
596
  "@remix-run/tar-parser": "^0.7.1",
571
- "@remix-run/cli": "^0.3.2",
572
- "@remix-run/assert": "^0.2.1",
597
+ "@remix-run/session-storage-memcache": "^0.1.2",
598
+ "@remix-run/static-middleware": "^0.4.13",
599
+ "@remix-run/assert": "^0.3.0",
600
+ "@remix-run/cli": "^0.3.4",
573
601
  "@remix-run/terminal": "^0.1.1",
574
- "@remix-run/test": "^0.4.2",
575
- "@remix-run/render-middleware": "^0.1.2"
602
+ "@remix-run/test": "^0.5.0",
603
+ "@remix-run/render-middleware": "^0.1.4"
576
604
  },
577
605
  "bin": {
578
606
  "remix": "./dist/cli-entry.js"
@@ -600,6 +628,7 @@
600
628
  "scripts": {
601
629
  "build": "tsc -p tsconfig.build.json",
602
630
  "clean": "git clean -fdX",
631
+ "sync-readmes": "node ../../scripts/sync-remix-readmes.ts",
603
632
  "test": "remix-test",
604
633
  "typecheck": "tsc --noEmit"
605
634
  }
@@ -2,14 +2,14 @@
2
2
 
3
3
  A compatible subset of `node:assert/strict` that works in any JavaScript environment, including browsers — plus a vitest-/jest-style `expect` API for tests that prefer chainable matchers.
4
4
 
5
- Uses strict equality (`===`) for all comparisons — no type coercion.
5
+ Uses strict equality (`Object.is`) for all comparisons — no type coercion.
6
6
 
7
7
  ## Features
8
8
 
9
9
  - `AssertionError` — compatible with `node:assert.AssertionError` (`actual`, `expected`, `operator`, `name`)
10
10
  - `assert.ok` — truthy check
11
- - `assert.equal` / `assert.notEqual` — strict equality (`===` / `!==`)
12
- - `assert.deepEqual` / `assert.notDeepEqual` — recursive strict deep equality
11
+ - `assert.equal` / `assert.notEqual` — strict equality (`Object.is` / `!Object.is`)
12
+ - `assert.deepEqual` / `assert.partialDeepEqual` / `assert.notDeepEqual` — recursive strict deep equality
13
13
  - `assert.match` — string matches a regexp
14
14
  - `assert.fail` — unconditional failure
15
15
  - `assert.throws` — synchronous throw assertion with optional error validation
@@ -24,17 +24,20 @@ npm i remix
24
24
 
25
25
  ## Usage
26
26
 
27
- Mirrors `node:assert/strict` — uses strict equality (`===`), so `1 !== '1'` and `null !== undefined`.
27
+ Mirrors `node:assert/strict` — uses strict equality (`Object.is`), so `1 !== '1'`, `null !== undefined`, `NaN` equals `NaN`, and `0` does not equal `-0`.
28
28
 
29
29
  ```ts
30
30
  import assert from 'remix/assert'
31
31
 
32
32
  assert.ok(true)
33
+ assert(true)
33
34
  assert.equal(1, 1)
34
35
  assert.equal(1, '1') // throws — different types
36
+ assert.equal(NaN, NaN)
35
37
  assert.notEqual('a', 'b')
36
38
  assert.deepEqual({ a: 1 }, { a: 1 })
37
39
  assert.deepEqual({ a: 1 }, { a: '1' }) // throws — different types
40
+ assert.partialDeepEqual({ a: 1, b: 2 }, { a: 1 })
38
41
  assert.match('hello world', /world/)
39
42
  assert.fail('should not reach here')
40
43
 
@@ -64,11 +67,15 @@ import {
64
67
  equal,
65
68
  notEqual,
66
69
  deepEqual,
70
+ partialDeepEqual,
67
71
  notDeepEqual,
68
72
  match,
73
+ doesNotMatch,
69
74
  fail,
70
75
  throws,
76
+ doesNotThrow,
71
77
  rejects,
78
+ doesNotReject,
72
79
  } from 'remix/assert'
73
80
  ```
74
81
 
@@ -79,6 +79,31 @@ try {
79
79
  }
80
80
  ```
81
81
 
82
+ ## Running integration tests locally
83
+
84
+ To start a local MySQL container matching CI:
85
+
86
+ ```sh
87
+ podman run --name mysql \
88
+ -e MYSQL_ROOT_PASSWORD=root \
89
+ -e MYSQL_DATABASE=remix \
90
+ -p 3306:3306 \
91
+ -d mysql:8
92
+ ```
93
+
94
+ Then run:
95
+
96
+ ```sh
97
+ REMIX_DATA_TABLE_MYSQL_TEST_URL=mysql://root:root@127.0.0.1:3306/remix \
98
+ pnpm test src/lib/adapter.integration.test.ts
99
+ ```
100
+
101
+ Remove the container when you are done:
102
+
103
+ ```sh
104
+ podman rm -f mysql
105
+ ```
106
+
82
107
  ## Related Packages
83
108
 
84
109
  - [`data-table`](https://github.com/remix-run/remix/tree/main/packages/data-table) - Core query/relations API
@@ -60,6 +60,32 @@ await db.transaction(async (txDb) => txDb.exec('select 1'), {
60
60
  })
61
61
  ```
62
62
 
63
+ ## Running integration tests locally
64
+
65
+ To start a local Postgres container matching CI:
66
+
67
+ ```sh
68
+ podman run --name postgres \
69
+ -e POSTGRES_USER=postgres \
70
+ -e POSTGRES_PASSWORD=postgres \
71
+ -e POSTGRES_DB=remix \
72
+ -p 5432:5432 \
73
+ -d postgres:16
74
+ ```
75
+
76
+ Then run:
77
+
78
+ ```sh
79
+ REMIX_DATA_TABLE_POSTGRES_TEST_URL=postgres://postgres:postgres@127.0.0.1:5432/remix \
80
+ pnpm test src/lib/adapter.integration.test.ts
81
+ ```
82
+
83
+ Remove the container when you are done:
84
+
85
+ ```sh
86
+ podman rm -f postgres
87
+ ```
88
+
63
89
  ## Related Packages
64
90
 
65
91
  - [`data-table`](https://github.com/remix-run/remix/tree/main/packages/data-table) - Core query/relations API