gitextract_dby4eova/ ├── .github/ │ └── workflows/ │ └── build.yaml ├── .gitignore ├── README.md ├── chapter10/ │ └── react-gradual-demo/ │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .gitignore │ ├── .prettierrc │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── public/ │ │ └── index.html │ └── src/ │ ├── index.js │ ├── legacy/ │ │ ├── Greeting.js │ │ ├── README.md │ │ ├── createLegacyRoot.js │ │ └── package.json │ ├── modern/ │ │ ├── AboutPage.js │ │ ├── App.js │ │ ├── HomePage.js │ │ ├── README.md │ │ ├── index.js │ │ ├── lazyLegacyRoot.js │ │ └── package.json │ └── shared/ │ ├── Clock.js │ ├── README.md │ ├── ThemeContext.js │ └── useTime.js ├── chapter11/ │ ├── next13/ │ │ ├── .eslintignore │ │ ├── .eslintrc.js │ │ ├── .gitignore │ │ ├── .npmrc │ │ ├── .prettierignore │ │ ├── .prettierrc │ │ ├── README.md │ │ ├── app/ │ │ │ ├── api/ │ │ │ │ ├── hello/ │ │ │ │ │ └── route.ts │ │ │ │ ├── posts/ │ │ │ │ │ ├── [id]/ │ │ │ │ │ │ └── route.ts │ │ │ │ │ └── route.ts │ │ │ │ └── users/ │ │ │ │ ├── [id]/ │ │ │ │ │ └── route.ts │ │ │ │ ├── [id].ts │ │ │ │ └── route.ts │ │ │ ├── context/ │ │ │ │ ├── [id]/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── error/ │ │ │ │ ├── [id]/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── error.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── not-found.tsx │ │ │ │ └── page.tsx │ │ │ ├── globals.css │ │ │ ├── grouped-layouts/ │ │ │ │ ├── (main)/ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── (todos)/ │ │ │ │ │ ├── hello/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── todos/ │ │ │ │ │ └── page.tsx │ │ │ │ └── (users)/ │ │ │ │ ├── layout.tsx │ │ │ │ └── users/ │ │ │ │ └── page.tsx │ │ │ ├── head/ │ │ │ │ ├── [userId]/ │ │ │ │ │ ├── head.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── sub.tsx │ │ │ │ ├── head.tsx │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── head.tsx │ │ │ ├── internal-api/ │ │ │ │ └── hello/ │ │ │ │ └── route.ts │ │ │ ├── isr/ │ │ │ │ ├── [id]/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── layout.tsx │ │ │ ├── layouts/ │ │ │ │ ├── [userId]/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── loading/ │ │ │ │ ├── [userId]/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── loading.tsx │ │ │ │ └── page.tsx │ │ │ ├── page.tsx │ │ │ ├── server-action/ │ │ │ │ ├── form/ │ │ │ │ │ ├── [id]/ │ │ │ │ │ │ ├── loading.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── page.tsx │ │ │ │ └── start-transition/ │ │ │ │ └── [id]/ │ │ │ │ └── page.tsx │ │ │ ├── ssg/ │ │ │ │ ├── [id]/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── ssr/ │ │ │ │ ├── [id]/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── streaming/ │ │ │ │ ├── [id]/ │ │ │ │ │ ├── components.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ └── styles/ │ │ │ ├── css-modules/ │ │ │ │ ├── page.tsx │ │ │ │ └── styles.module.css │ │ │ ├── global-css/ │ │ │ │ ├── page.tsx │ │ │ │ └── style.css │ │ │ ├── layout.tsx │ │ │ ├── page.tsx │ │ │ ├── styled-components/ │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ └── styled-jsx/ │ │ │ ├── StyledRegistry.tsx │ │ │ ├── components.tsx │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── middleware.ts │ │ ├── next.config.js │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── src/ │ │ │ ├── components/ │ │ │ │ ├── Counter.tsx │ │ │ │ ├── DefaultHeader.tsx │ │ │ │ ├── ErrorButton.tsx │ │ │ │ ├── Sidebar.tsx │ │ │ │ ├── StyledComponentsRegistry.tsx │ │ │ │ ├── Tab.tsx │ │ │ │ ├── TabGroup.tsx │ │ │ │ ├── components.ts │ │ │ │ └── server-action/ │ │ │ │ └── client-component.tsx │ │ │ ├── constant/ │ │ │ │ └── menu.ts │ │ │ ├── context/ │ │ │ │ └── counter.tsx │ │ │ ├── lib/ │ │ │ │ └── utils.ts │ │ │ ├── server-action/ │ │ │ │ └── index.ts │ │ │ └── services/ │ │ │ ├── constant.ts │ │ │ └── server.ts │ │ ├── tailwind.config.js │ │ └── tsconfig.json │ └── server-components-demo/ │ ├── .gitignore │ ├── .nvmrc │ ├── .prettierignore │ ├── .prettierrc.js │ ├── CODE_OF_CONDUCT.md │ ├── Dockerfile │ ├── LICENSE │ ├── README.md │ ├── credentials.js │ ├── docker-compose.yml │ ├── notes/ │ │ └── .gitkeep │ ├── package.json │ ├── public/ │ │ ├── index.html │ │ └── style.css │ ├── scripts/ │ │ ├── build.js │ │ ├── init_db.sh │ │ └── seed.js │ ├── server/ │ │ ├── api.server.js │ │ └── package.json │ └── src/ │ ├── App.js │ ├── EditButton.js │ ├── Note.js │ ├── NoteEditor.js │ ├── NoteList.js │ ├── NoteListSkeleton.js │ ├── NotePreview.js │ ├── NoteSkeleton.js │ ├── SearchField.js │ ├── SidebarNote.js │ ├── SidebarNoteContent.js │ ├── Spinner.js │ ├── TextWithMarkdown.js │ ├── db.js │ └── framework/ │ ├── bootstrap.js │ └── router.js ├── chapter2/ │ └── react/ │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .npmrc │ ├── .prettierignore │ ├── .prettierrc │ ├── README.md │ ├── package.json │ ├── public/ │ │ ├── index.html │ │ ├── manifest.json │ │ └── robots.txt │ ├── src/ │ │ ├── App.tsx │ │ ├── index.tsx │ │ ├── react-app-env.d.ts │ │ └── routes/ │ │ ├── 2-1.tsx │ │ ├── 2-4.tsx │ │ ├── 2-5.tsx │ │ ├── 2-7.tsx │ │ └── 2-8.tsx │ └── tsconfig.json ├── chapter4/ │ ├── next-example/ │ │ ├── .eslintignore │ │ ├── .eslintrc.js │ │ ├── .gitignore │ │ ├── .prettierignore │ │ ├── .prettierrc │ │ ├── README.md │ │ ├── next.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── pages/ │ │ │ │ ├── 404.tsx │ │ │ │ ├── 500.tsx │ │ │ │ ├── _app.tsx │ │ │ │ ├── _document.tsx │ │ │ │ ├── _error.tsx │ │ │ │ ├── api/ │ │ │ │ │ └── hello.ts │ │ │ │ ├── hello/ │ │ │ │ │ ├── [greeting].tsx │ │ │ │ │ └── world.tsx │ │ │ │ ├── hello.tsx │ │ │ │ ├── hi/ │ │ │ │ │ └── [...props].tsx │ │ │ │ ├── index.tsx │ │ │ │ └── todo/ │ │ │ │ └── [id].tsx │ │ │ └── styles/ │ │ │ ├── Home.module.css │ │ │ └── globals.css │ │ └── tsconfig.json │ └── ssr-example/ │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .prettierignore │ ├── .prettierrc │ ├── README.md │ ├── checkStream.js │ ├── package.json │ ├── public/ │ │ ├── index-end.html │ │ ├── index-front.html │ │ └── index.html │ ├── src/ │ │ ├── components/ │ │ │ ├── App.tsx │ │ │ └── Todo.tsx │ │ ├── fetch/ │ │ │ └── index.ts │ │ ├── index.tsx │ │ └── server.ts │ ├── tsconfig.json │ ├── typings.d.ts │ ├── watch-stream.js │ └── webpack.config.js ├── chapter8/ │ ├── eslint-plugin-yceffort/ │ │ ├── .eslintrc.js │ │ ├── .npmrc │ │ ├── .prettierrc │ │ ├── README.md │ │ ├── docs/ │ │ │ └── rules/ │ │ │ └── no-new-date.md │ │ ├── lib/ │ │ │ ├── index.js │ │ │ └── rules/ │ │ │ └── no-new-date.js │ │ ├── package.json │ │ └── tests/ │ │ └── lib/ │ │ └── rules/ │ │ └── no-new-date.js │ └── react-test/ │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc │ ├── README.md │ ├── package.json │ ├── public/ │ │ ├── index.html │ │ ├── manifest.json │ │ └── robots.txt │ ├── src/ │ │ ├── App.css │ │ ├── App.test.tsx │ │ ├── App.tsx │ │ ├── components/ │ │ │ ├── FetchComponent/ │ │ │ │ ├── index.test.tsx │ │ │ │ └── index.tsx │ │ │ ├── StateComponent/ │ │ │ │ ├── index.test.tsx │ │ │ │ └── index.tsx │ │ │ └── StaticComponent/ │ │ │ ├── index.test.tsx │ │ │ └── index.tsx │ │ ├── hooks/ │ │ │ ├── useEffectDebugger.test.ts │ │ │ └── useEffectDebugger.ts │ │ ├── index.css │ │ ├── index.tsx │ │ ├── react-app-env.d.ts │ │ ├── reportWebVitals.ts │ │ └── setupTests.ts │ └── tsconfig.json └── chapter9/ ├── danger-react-app/ │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .gitignore │ ├── .npmrc │ ├── .prettierignore │ ├── .prettierrc │ ├── README.md │ ├── package.json │ ├── public/ │ │ ├── index.html │ │ ├── manifest.json │ │ └── robots.txt │ └── src/ │ ├── App.css │ ├── App.js │ ├── index.css │ └── index.js ├── deploy/ │ ├── aws/ │ │ ├── cra/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── public/ │ │ │ │ ├── index.html │ │ │ │ ├── manifest.json │ │ │ │ └── robots.txt │ │ │ ├── src/ │ │ │ │ ├── App.css │ │ │ │ ├── App.test.tsx │ │ │ │ ├── App.tsx │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ ├── react-app-env.d.ts │ │ │ │ ├── reportWebVitals.ts │ │ │ │ └── setupTests.ts │ │ │ └── tsconfig.json │ │ └── next/ │ │ ├── .eslintrc.json │ │ ├── .gitignore │ │ ├── README.md │ │ ├── next.config.js │ │ ├── package.json │ │ ├── pages/ │ │ │ ├── _app.tsx │ │ │ ├── api/ │ │ │ │ └── hello.ts │ │ │ └── index.tsx │ │ ├── styles/ │ │ │ ├── Home.module.css │ │ │ └── globals.css │ │ └── tsconfig.json │ ├── digitalocean/ │ │ ├── cra/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── public/ │ │ │ │ ├── index.html │ │ │ │ ├── manifest.json │ │ │ │ └── robots.txt │ │ │ └── src/ │ │ │ ├── App.css │ │ │ ├── App.js │ │ │ ├── App.test.js │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ ├── reportWebVitals.js │ │ │ └── setupTests.js │ │ └── next/ │ │ ├── .eslintrc.json │ │ ├── .gitignore │ │ ├── README.md │ │ ├── next.config.js │ │ ├── package.json │ │ ├── pages/ │ │ │ ├── _app.tsx │ │ │ ├── api/ │ │ │ │ └── hello.ts │ │ │ └── index.tsx │ │ ├── styles/ │ │ │ ├── Home.module.css │ │ │ └── globals.css │ │ └── tsconfig.json │ ├── netlify/ │ │ ├── cra/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── public/ │ │ │ │ ├── index.html │ │ │ │ ├── manifest.json │ │ │ │ └── robots.txt │ │ │ ├── src/ │ │ │ │ ├── App.css │ │ │ │ ├── App.test.tsx │ │ │ │ ├── App.tsx │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ ├── react-app-env.d.ts │ │ │ │ ├── reportWebVitals.ts │ │ │ │ └── setupTests.ts │ │ │ └── tsconfig.json │ │ └── next/ │ │ ├── .eslintrc.json │ │ ├── .gitignore │ │ ├── README.md │ │ ├── netlify.toml │ │ ├── next.config.js │ │ ├── package.json │ │ ├── pages/ │ │ │ ├── _app.tsx │ │ │ ├── api/ │ │ │ │ └── hello.ts │ │ │ ├── hello.tsx │ │ │ └── index.tsx │ │ ├── styles/ │ │ │ ├── Home.module.css │ │ │ └── globals.css │ │ └── tsconfig.json │ └── vercel/ │ ├── cra/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── public/ │ │ │ ├── index.html │ │ │ ├── manifest.json │ │ │ └── robots.txt │ │ ├── src/ │ │ │ ├── App.css │ │ │ ├── App.test.tsx │ │ │ ├── App.tsx │ │ │ ├── index.css │ │ │ ├── index.tsx │ │ │ ├── react-app-env.d.ts │ │ │ ├── reportWebVitals.ts │ │ │ └── setupTests.ts │ │ └── tsconfig.json │ └── next/ │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── next.config.js │ ├── package.json │ ├── pages/ │ │ ├── _app.tsx │ │ ├── api/ │ │ │ └── hello.ts │ │ └── index.tsx │ ├── styles/ │ │ ├── Home.module.css │ │ └── globals.css │ └── tsconfig.json └── zero-to-next/ ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .prettierignore ├── .prettierrc ├── README.md ├── next.config.js ├── package.json ├── src/ │ ├── _app.tsx │ ├── components/ │ │ ├── common/ │ │ │ └── title.tsx │ │ └── todo/ │ │ └── todo.tsx │ ├── hooks/ │ │ └── useToggle.ts │ ├── pages/ │ │ ├── _document.tsx │ │ ├── index.tsx │ │ └── todos/ │ │ └── [id].tsx │ ├── types/ │ │ └── todo.ts │ └── utils/ │ └── errors/ │ └── index.ts └── tsconfig.json