Skip to content

Conversation

@BadPirate
Copy link
Owner

Convert to typescript, add unit tests, upgrade prisma database architecture.

BadPirate and others added 30 commits August 29, 2020 10:38
- Update all packages
- Yarn audit
- Cyborg theme
- Improved typescript integration
Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.0.4 to 3.1.2.
- [Release notes](https://github.com/isaacs/minimatch/releases)
- [Commits](isaacs/minimatch@v3.0.4...v3.1.2)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
- Added some pre-load instructions for using with Codex CLI
- Added Playwright setup
- Dynamically updated to stable versions of a few packages
BadPirate and others added 26 commits April 23, 2025 07:17
Assistant generated file changes:
- pages/api/create.js: Fix multiple response issue in create endpoint

---

User prompt:

 ⨯ Error [ERR_HTTP_HEADERS_SENT]: Cannot write headers after they are sent to the client
    at ServerResponse.writeHead (node:_http_server:344:11)
    at ServerResponse.writeHead (/home/runner/workspace/node_modules/next/dist/compiled/compression/index.js:46:263)
    at /home/runner/workspace/node_modules/next/dist/compiled/next-server/pages-api.runtime.dev.js:21:1069
    at K.t.redirect (/home/runner/workspace/node_modules/next/dist/compiled/next-server/pages-api.runtime.dev.js:21:1117)
    at Create (webpack-internal:///(api)/./pages/api/create.js:37:9) {
  code: 'ERR_HTTP_HEADERS_SENT',
  page: '/api/create'
}

Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
Assistant generated file changes:
- src/TransactionsCard.js: Add key prop to transaction rows
- pages/manage/[userid].js: Fix hydration mismatch in Card.Text

---

User prompt:

Warning: Each child in a list should have a unique "key" prop.

Check the top-level render call using <tbody>. See https://reactjs.org/link/warning-keys for more information.
    at tr
    at TransactionsCard (webpack-internal:///./src/TransactionsCard.js:17:29)
    at p
    at /home/runner/workspace/node_modules/react-bootstrap/cjs/CardText.js:14:3
    at div
    at /home/runner/workspace/node_modules/react-bootstrap/cjs/CardBody.js:14:3
    at div
    at /home/runner/workspace/node_modules/react-bootstrap/cjs/Card.js:23:3
    at Manage (webpack-internal:///./pages/manage/[userid].js:39:19)
    at div
    at /home/runner/workspace/node_modules/react-bootstrap/cjs/Container.js:14:3
    at div
    at Layout (webpack-internal:///./src/components/Layout.js:16:23)
    at MyApp (webpack-internal:///./pages/_app.js:22:18)
    at StyleRegistry (/home/runner/workspace/node_modules/styled-jsx/dist/index/index.js:449:36)
    at ek (/home/runner/workspace/node_modules/next/dist/compiled/next-server/pages.runtime.dev.js:30:13126)
    at eY (/home/runner/workspace/node_modules/next/dist/compiled/next-server/pages.runtime.dev.js:39:1766)
    at eV (/home/runner/workspace/node_modules/next/dist/compiled/next-server/pages.runtime.dev.js:39:3110)
    at div
    at e1 (/home/runner/workspace/node_modules/next/dist/compiled/next-server/pages.runtime.dev.js:48:761)

    And, after logging in:

    Unhandled Runtime Error
Error: Hydration failed because the initial UI does not match what was rendered on the server.

Warning: Expected server HTML to contain a matching <h2> in <p>.

See more info here: https://nextjs.org/docs/messages/react-hydration-error
Component Stack
Call Stack
dispatchEvent
[native code]

Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
…to resolve React hydration errors

Adds a markdown file containing info on the causes of React hydration errors and possible solutions.

Replit-Commit-Author: Assistant
Assistant generated file changes:
- pages/manage/[userid].js: Fix invalid HTML nesting

---

User prompt:

On manage - https://2dfc6da7-4007-488c-85b8-6e5ea1079499-00-1j07g622o2o2.picard.replit.dev/manage/9fd6db6f8429e4cbf43c080b29fbd77500ccebf94a7ba1a1a21536977bf2e5b4

Unhandled Runtime Error
Error: Hydration failed because the initial UI does not match what was rendered on the server.

Warning: Expected server HTML to contain a matching <div> in <p>.

See more info here: https://nextjs.org/docs/messages/react-hydration-error
Component Stack
Call Stack
dispatchEvent
[native code]

Error: There was an error while hydrating. Because the error happened outside of a Suspense boundary, the entire root will switch to client rendering.
Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
…lid nesting

Assistant generated file changes:
- pages/manage/[userid].js: Fix Card.Text hydration issues, Fix closing tags for hydration fix

---

User prompt:

Now there is more, review what the manage card looks like and see if there is some major issue:

Error: Hydration failed because the initial UI does not match what was rendered on the server.

Warning: Expected server HTML to contain a matching <h2> in <p>.

See more info here: https://nextjs.org/docs/messages/react-hydration-error

Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
… handling

Assistant generated file changes:
- src/components/ErrorBoundary.js: Add error boundary component
- pages/_app.js: Add error boundary to app, Import error boundary

---

User prompt:

Still occurring, is there a way for you to get better context for client side errors like this?

Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
Assistant generated file changes:
- pages/manage/[userid].js: Fix HTML nesting issues in manage page

---

User prompt:

Here are the errors:

Unhandled Runtime Error
Error: Hydration failed because the initial UI does not match what was rendered on the server.

Warning: Expected server HTML to contain a matching <h2> in <p>.

See more info here: https://nextjs.org/docs/messages/react-hydration-error
Component Stack
Call Stack
dispatchEvent
[native code]

Unhandled Runtime Error
Error: Hydration failed because the initial UI does not match what was rendered on the server.

Warning: Expected server HTML to contain a matching <h2> in <p>.

See more info here: https://nextjs.org/docs/messages/react-hydration-error

Error: Hydration failed because the initial UI does not match what was rendered on the server.

Warning: Expected server HTML to contain a matching <h2> in <p>.

See more info here: https://nextjs.org/docs/messages/react-hydration-error

 5 of 5 unhandled errors

Unhandled Runtime Error
Error: There was an error while hydrating. Because the error happened outside of a Suspense boundary, the entire root will switch to client rendering.

Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
…ues related to server-side rendering

Fix a hydration error caused by timezone discrepancies in date rendering.

Replit-Commit-Author: Assistant
Assistant generated file changes:
- src/TransactionsCard.js: Fix date formatting to avoid timezone issues

---

User prompt:

Okay, after adding a transaction getting runtime errors again in manage:

Error: Text content does not match server-rendered HTML.

Warning: Text content did not match. Server: "Thu, Jan 1, 1970" Client: "Wed, Dec 31, 1969"

See more info here: https://nextjs.org/docs/messages/react-hydration-error

Error: Hydration failed because the initial UI does not match what was rendered on the server.

Warning: Text content did not match. Server: "Thu, Jan 1, 1970" Client: "Wed, Dec 31, 1969"

See more info here: https://nextjs.org/docs/messages/react-hydration-error

Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
Assistant generated file changes:
- src/TransactionsCard.js: Fix date hydration mismatch

---

User prompt:

Still happening, runtime error:

Error: Text content does not match server-rendered HTML.

Warning: Text content did not match. Server: "Thu, Jan 1, 1970" Client: "Wed, Dec 31, 1969"

See more info here: https://nextjs.org/docs/messages/react-hydration-error

Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
…account data is unavailable in kids view

Handle undefined account data in getServerSideProps to avoid JSON serialization errors in /view/[viewid].

Replit-Commit-Author: Assistant
Assistant generated file changes:
- src/FuneyPG.js: Fix account info when not found

---

User prompt:

Okay, now in the kids view, getting:

 ⨯ q [Error]: Error serializing `.account` returned from `getServerSideProps` in "/view/[viewid]".
Reason: `undefined` cannot be serialized as JSON. Please use `null` or omit this value.
    at r (/home/runner/workspace/node_modules/next/dist/compiled/next-server/pages.runtime.dev.js:30:446)
    at /home/runner/workspace/node_modules/next/dist/compiled/next-server/pages.runtime.dev.js:30:683
    at Array.every (<anonymous>)
    at r (/home/runner/workspace/node_modules/next/dist/compiled/next-server/pages.runtime.dev.js:30:580)
    at H (/home/runner/workspace/node_modules/next/dist/compiled/next-server/pages.runtime.dev.js:30:1117)
    at eZ (/home/runner/workspace/node_modules/next/dist/compiled/next-server/pages.runtime.dev.js:47:1525)
    at async doRender (/home/runner/workspace/node_modules/next/dist/server/base-server.js:1274:26)
    at async cacheEntry.responseCache.get.incrementalCache.incrementalCache (/home/runner/workspace/node_modules/next/dist/server/base-server.js:1454:28)
    at async DevServer.renderToResponseWithComponentsImpl (/home/runner/workspace/node_modules/next/dist/server/base-server.js:1369:28)
    at async DevServer.renderPageComponent (/home/runner/workspace/node_modules/next/dist/server/base-server.js:1608:24)
    at async DevServer.renderToResponseImpl (/home/runner/workspace/node_modules/next/dist/server/base-server.js:1646:32)
    at async DevServer.pipeImpl (/home/runner/workspace/node_modules/next/dist/server/base-server.js:834:25)
    at async DevServer.handleCatchallRenderRequest (/home/runner/workspace/node_modules/next/dist/server/next-server.js:623:13)
    at async DevServer.handleRequestImpl (/home/runner/workspace/node_modules/next/dist/server/base-server.js:736:17) {
  page: '/view/A5F0A2E2'
}

Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
…formation is not available for a user

Addresses a TypeError in pages/view/[viewid].js when account.value is null.

Replit-Commit-Author: Assistant
Assistant generated file changes:
- pages/view/[viewid].js: Add null check for account

---

User prompt:

Client side error shows:

Server Error
TypeError: Cannot read properties of null (reading 'value')
This error happened while generating the page. Any console logs will be displayed in the terminal window.
Source
pages/view/[viewid].js (6:25) @ value
  4 | import updateInterest, { updateAllowance } from "../../src/updateInterest";
  5 |
> 6 | const View = ({account: {value}, transactions}) => {
    |                     ^
  7 | return (
  8 |     <Card>
  9 |         <Card.Header>

  Page error shows:

Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
Assistant generated file changes:
- src/FuneyPG.js: Fix SQL parameter style in account lookup

---

User prompt:

Hmm, okay shows a nicer error now, but the account should exist - https://2dfc6da7-4007-488c-85b8-6e5ea1079499-00-1j07g622o2o2.picard.replit.dev/view/A5F0A2E2 -- as this is the link given by the manage page, perhaps there is a sql lookup issue?

Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
Assistant generated file changes:
- src/FuneyPG.js: Make SQL queries compatible with both PostgreSQL and SQLite

---

User prompt:

Hmm, we are using postgres api, but connecting to sqlite -- what is the right way to do the query (it should also work against postgres)

Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
Assistant generated file changes:
- src/FuneyPG.js: Fix error handling in getTransactions

---

User prompt:

Now both manage and view fail:

src/FuneyPG.js (81:32) @ rows
  79 | })
  80 | .then((result) => {
> 81 |   props.transactions = result.rows || []
     |                              ^
  82 | })
  83 | }
  84 |

Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
Assistant generated file changes:
- src/FuneyPG.js: Fix timestamp SQL syntax
- pages/manage/[userid].js: Fix error handling in getServerSideProps

---

User prompt:

Error: Error serializing `.error` returned from `getServerSideProps` in "/manage/[userid]".
Reason: `object` ("[object Error]") cannot be serialized as JSON. Please only return JSON serializable data types.
This error happened while generating the page. Any console logs will be displayed in the terminal window.
Call Stack
r
file:///home/runner/workspace/node_modules/next/dist/compiled/next-server/pages.runtime.dev.js (30:950)
<unknown>
file:///home/runner/workspace/node_modules/next/dist/compiled/next-server/pages.runtime.dev.js (30:683)
Array.every
<anonymous>
r
file:///home/runner/workspace/node_modules/next/dist/compiled/next-server/pages.runtime.dev.js (30:580)
H
file:///home/runner/workspace/node_modules/next/dist/compiled/next-server/pages.runtime.dev.js (30:1117)
eZ
file:///home/runner/workspace/node_modules/next/dist/compiled/next-server/pages.runtime.dev.js (47:1525)
async doRender
file:///home/runner/workspace/node_modules/next/dist/server/base-server.js (1274:26)
async cacheEntry.responseCache.get.incrementalCache.incrementalCache
file:///home/runner/workspace/node_modules/next/dist/server/base-server.js (1454:28)

Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
Assistant generated file changes:
- src/FuneyPG.js: Fix SQL query syntax for transactions

---

User prompt:

Transactions aren't showing in manage any longer, and kids view still failing to load:

Error fetching transactions: [Error: SQLITE_ERROR: near "FROM": syntax error] {
  errno: 1,
  code: 'SQLITE_ERROR'
}

Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
Assistant generated file changes:
- src/FuneyPG.js: Fix transaction queries for both SQLite and PostgreSQL

---

User prompt:

Still no transactions showing. I think you've regressed. Take a more wholistic look at the varoius calls, look at what they are trying to achieve, and use the correct transactions.

Replit-Commit-Author: Assistant
Replit-Commit-Session-Id: b85d96c2-62d9-4f0d-b09c-6bbbdaf83524
# Conflicts:
#	.gitignore
#	.replit
#	CONTRIBUTING.md
#	README.md
#	package.json
#	public/favicon.ico
#	yarn.lock
Replaces the custom database access logic (FuneyPG.ts, updateInterest.ts) with Prisma ORM for improved type safety, maintainability, and database portability.

Key changes:
- Added Prisma schema definition (models.prisma, schema.prisma).
- Implemented schema generation script (build-schemas.js) for SQLite and PostgreSQL support.
- Created a new data access layer (src/db.ts) using Prisma Client.
- Updated API routes and frontend pages to use the new Prisma data layer.
- Added Prisma dependencies and helper scripts (db:clean).
- Removed old database access files.
- Updated .gitignore to exclude generated Prisma schemas and database files.
- Install Jest, React Testing Library, and related dependencies.
- Configure Jest with `jest.config.js` and `jest.setup.js`.
- Add `yarn test` script to `package.json`.
- Refactor `CreateAccountForm` to handle state and validation client-side.
- Create tests for `CreateAccountForm` covering rendering, input, submission, and error handling.
- Fix test failures and linting issues related to the new setup.
@BadPirate BadPirate requested a review from Copilot April 24, 2025 21:15
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR converts the project codebase to TypeScript, adds comprehensive unit tests for account creation, and upgrades the database architecture using Prisma. Key changes include:

  • Removal of legacy JavaScript files in favor of TypeScript implementations.
  • Addition of unit tests and Jest setup for improved test coverage.
  • Updates to documentation, CI workflows, and configurations to support the new architecture.

Reviewed Changes

Copilot reviewed 62 out of 70 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
pages/api/create.js Removed legacy API implementation as part of the TS conversion.
pages/_app.tsx and pages/_app.js Added new TSX app entry point and removed previous JS version.
jest.setup.js Added Jest setup for testing framework configuration.
attached_assets/content-1745392924501.md Updated documentation and troubleshooting guides.
attached_assets/Pasted--pages-view-viewid-js-6-25-value-... Added error log asset that captures a runtime error stack trace.
tests/CreateAccountForm.test.tsx Added unit tests for the CreateAccountForm component.
README.md and CONTRIBUTING.md Updated instructions and documentation to reflect new changes.
.github/workflows/ci.yml and .eslintrc.js Added CI workflow and ESLint configuration for TypeScript support.
Files not reviewed (8)
  • .env.local.EXAMPLE: Language not supported
  • .eslintignore: Language not supported
  • .husky/pre-commit: Language not supported
  • .prettierignore: Language not supported
  • .prettierrc: Language not supported
  • .replit: Language not supported
  • attached_assets/Pasted--pages-view-viewid-js-6-25-value-TypeError-Cannot-read-properties-of-null-reading-value-1745393564971.txt: Language not supported
  • package.json: Language not supported

}
4 | import updateInterest, { updateAllowance } from "../../src/updateInterest";
5 |
> 6 | const View = ({account: {value}, transactions}) => {
Copy link

Copilot AI Apr 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Destructuring 'account' directly without verifying its presence leads to a runtime error. Consider providing a default value or using optional chaining (e.g., account?.value) to safely access the property.

Suggested change
> 6 | const View = ({account: {value}, transactions}) => {
> 6 | const View = ({ account = {}, transactions }) => {
const { value } = account;

Copilot uses AI. Check for mistakes.
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about checking for it's presence first and correctly handling the nil case?

@BadPirate BadPirate merged commit d752064 into main Apr 24, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants