├── 11-react-demo-sqlite
├── DB_FILE
├── .eslintignore
├── app.js
├── comments-api
│ └── comments.sqlite
└── .jshintrc
├── 04-es6-demo
├── .env
├── output.txt
└── app
│ └── assets
│ └── img
│ └── my-logo.png
├── 06-react-blogs
├── src
│ ├── App.css
│ ├── component
│ │ ├── PostList.css
│ │ ├── About.css
│ │ ├── Nav.css
│ │ ├── PostForm.css
│ │ ├── Post.css
│ │ ├── PostDetail.css
│ │ ├── TabPanel.js
│ │ └── PostsMain.css
│ ├── setupTests.js
│ └── App.test.js
├── routes.json
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ ├── logo512.png
│ └── images
│ └── office.jpg
├── fmi-2024-05-ts
├── src
│ ├── temp.ts
│ ├── greeter.ts
│ └── shared-types.ts
├── dist
│ ├── temp.js
│ ├── shared-types.js
│ ├── temp.js.map
│ ├── shared-types.js.map
│ ├── greeter.js
│ └── greeter.js.map
└── favicon.ico
├── 12-blogs-react-client
├── src
│ ├── PostForm.css
│ ├── Register.css
│ ├── Login.css
│ └── setupTests.js
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ ├── logo512.png
│ └── img
│ └── reading.png
├── 12-roter-lazy-loading-lab
├── src
│ ├── App.css
│ ├── react-app-env.d.ts
│ ├── pages
│ │ └── About.tsx
│ └── setupTests.ts
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
├── 12-react-demo-sqlite-custom-form
├── DB_FILE
├── .eslintignore
├── webpack.config.js
├── src
│ ├── app.js
│ ├── polyfills.js
│ ├── index.html
│ └── vendor.js
├── .jshintrc
├── comments-api
│ └── comments.sqlite
└── config
│ └── helpers.js
├── 14-express-ts-lab
├── .env
├── src
│ └── model
│ │ └── errors.ts
├── nodemon.json
└── tsconfig.json
├── 23-loopback-mongo
├── .eslintignore
├── .eslintrc
├── .yo-rc.json
├── README.md
├── client
│ └── README.md
├── common
│ └── models
│ │ └── product.js
├── .vs
│ ├── VSWorkspaceState.json
│ ├── slnx.sqlite
│ └── 23-loopback-mongo
│ │ └── v15
│ │ └── .suo
├── server
│ ├── component-config.json
│ ├── boot
│ │ ├── authentication.js
│ │ └── root.js
│ ├── middleware.development.json
│ └── datasources.json
└── .gitignore
├── 03-es6-features
├── user.json
├── custom-prop.js
└── favicon.ico
├── fmi-2024-14-express-ts-lab
├── .env
├── src
│ └── model
│ │ └── errors.ts
├── nodemon.json
└── tsconfig.json
├── 05-nodejs-demo
├── output.txt
├── readable0.js
├── example01c.js
├── out.gz
├── readableEvent.js
├── example01.js
├── fs1.js
├── readable1.js
└── rx1.js
├── fmi-2025-03-ts-intro
├── dist
│ ├── model
│ │ ├── person.js
│ │ └── credentials.js
│ ├── common
│ │ └── common-types.js
│ ├── greeter.js
│ ├── util
│ │ └── idgen.js
│ └── dao
│ │ └── user-repository.js
└── src
│ ├── greeter.ts
│ ├── model
│ └── credentials.ts
│ ├── common
│ └── common-types.ts
│ └── util
│ └── idgen.ts
├── fmi-2025-06-react-todos-ts
├── src
│ ├── component
│ │ ├── TodoInput.css
│ │ └── TodoItem.css
│ ├── vite-env.d.ts
│ └── App.css
├── routes.json
├── tsconfig.json
└── vite.config.ts
├── 03-es6-features-lab3
├── main.css
└── users.json
├── 05-ts-blogs-rest
├── routes.json
├── dist
│ ├── person.js
│ ├── model
│ │ ├── person.js
│ │ ├── id-generator.js
│ │ ├── person.js.map
│ │ └── id-generator.js.map
│ ├── repository.js
│ ├── shared-types.js
│ ├── person.js.map
│ ├── repository.js.map
│ ├── shared-types.js.map
│ ├── index.js
│ ├── dao
│ │ ├── id-generator.js
│ │ └── id-generator.js.map
│ └── index.js.map
└── src
│ ├── shared-types.ts
│ └── index.ts
├── 06-myblogs-rest-ts
├── routes.json
├── src
│ ├── shared-types.ts
│ └── state-store.ts
└── dist
│ ├── shared-types.js
│ ├── shared-types.js.map
│ ├── state-store.js
│ └── state-store.js.map
├── 08-react-blogs-mui
├── routes.json
├── src
│ ├── react-app-env.d.ts
│ ├── shared
│ │ └── constants.ts
│ └── setupTests.ts
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ ├── logo512.png
│ └── img
│ └── paella.jpg
├── 11-router-basics-ts
├── routes.json
├── src
│ ├── pages
│ │ ├── PostPage.css
│ │ ├── ErrorPage.css
│ │ ├── RootPage.css
│ │ └── HomePage.tsx
│ ├── react-app-env.d.ts
│ ├── model
│ │ └── contact.ts
│ ├── components
│ │ └── PostList.css
│ └── setupTests.ts
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
├── 14-ipt-knowledge-tester-express
├── .eslintignore
├── app
│ ├── index.js
│ ├── favicon.ico
│ ├── assets
│ │ └── img
│ │ │ ├── test.png
│ │ │ └── ipt-logo.png
│ └── components
│ │ └── views
│ │ └── main
│ │ └── no-match.jsx
└── .jshintrc
├── fmi-2024-06-todos-ts
├── routes.json
├── src
│ ├── react-app-env.d.ts
│ ├── shared-types.ts
│ ├── todo-api-client.ts
│ └── setupTests.ts
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
├── fmi-2025-02-es6
├── css
│ └── main.css
├── users.json
└── js
│ └── github-async.js
├── 03-fetch-api-lab
├── css
│ └── main.css
└── users.json
├── 12-routing-auth-lab
├── src
│ ├── App.css
│ ├── react-app-env.d.ts
│ └── setupTests.ts
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
├── fmi-2022-04-react-blogs
├── routes.json
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ ├── logo512.png
│ ├── static
│ │ ├── preview.png
│ │ ├── mock-images
│ │ │ ├── covers
│ │ │ │ ├── cover_1.jpg
│ │ │ │ ├── cover_10.jpg
│ │ │ │ ├── cover_11.jpg
│ │ │ │ ├── cover_12.jpg
│ │ │ │ ├── cover_13.jpg
│ │ │ │ ├── cover_14.jpg
│ │ │ │ ├── cover_15.jpg
│ │ │ │ ├── cover_16.jpg
│ │ │ │ ├── cover_17.jpg
│ │ │ │ ├── cover_18.jpg
│ │ │ │ ├── cover_19.jpg
│ │ │ │ ├── cover_2.jpg
│ │ │ │ ├── cover_20.jpg
│ │ │ │ ├── cover_21.jpg
│ │ │ │ ├── cover_22.jpg
│ │ │ │ ├── cover_23.jpg
│ │ │ │ ├── cover_24.jpg
│ │ │ │ ├── cover_3.jpg
│ │ │ │ ├── cover_4.jpg
│ │ │ │ ├── cover_5.jpg
│ │ │ │ ├── cover_6.jpg
│ │ │ │ ├── cover_7.jpg
│ │ │ │ ├── cover_8.jpg
│ │ │ │ └── cover_9.jpg
│ │ │ ├── avatars
│ │ │ │ ├── avatar_1.jpg
│ │ │ │ ├── avatar_10.jpg
│ │ │ │ ├── avatar_11.jpg
│ │ │ │ ├── avatar_12.jpg
│ │ │ │ ├── avatar_13.jpg
│ │ │ │ ├── avatar_14.jpg
│ │ │ │ ├── avatar_15.jpg
│ │ │ │ ├── avatar_16.jpg
│ │ │ │ ├── avatar_17.jpg
│ │ │ │ ├── avatar_18.jpg
│ │ │ │ ├── avatar_19.jpg
│ │ │ │ ├── avatar_2.jpg
│ │ │ │ ├── avatar_20.jpg
│ │ │ │ ├── avatar_21.jpg
│ │ │ │ ├── avatar_22.jpg
│ │ │ │ ├── avatar_23.jpg
│ │ │ │ ├── avatar_24.jpg
│ │ │ │ ├── avatar_3.jpg
│ │ │ │ ├── avatar_4.jpg
│ │ │ │ ├── avatar_5.jpg
│ │ │ │ ├── avatar_6.jpg
│ │ │ │ ├── avatar_7.jpg
│ │ │ │ ├── avatar_8.jpg
│ │ │ │ ├── avatar_9.jpg
│ │ │ │ └── avatar_default.jpg
│ │ │ └── products
│ │ │ │ ├── product_1.jpg
│ │ │ │ ├── product_10.jpg
│ │ │ │ ├── product_11.jpg
│ │ │ │ ├── product_12.jpg
│ │ │ │ ├── product_13.jpg
│ │ │ │ ├── product_14.jpg
│ │ │ │ ├── product_15.jpg
│ │ │ │ ├── product_16.jpg
│ │ │ │ ├── product_17.jpg
│ │ │ │ ├── product_18.jpg
│ │ │ │ ├── product_19.jpg
│ │ │ │ ├── product_2.jpg
│ │ │ │ ├── product_20.jpg
│ │ │ │ ├── product_21.jpg
│ │ │ │ ├── product_22.jpg
│ │ │ │ ├── product_23.jpg
│ │ │ │ ├── product_24.jpg
│ │ │ │ ├── product_3.jpg
│ │ │ │ ├── product_4.jpg
│ │ │ │ ├── product_5.jpg
│ │ │ │ ├── product_6.jpg
│ │ │ │ ├── product_7.jpg
│ │ │ │ ├── product_8.jpg
│ │ │ │ └── product_9.jpg
│ │ └── illustrations
│ │ │ ├── illustration_login.png
│ │ │ ├── illustration_avatar.png
│ │ │ └── illustration_register.png
│ └── favicon
│ │ ├── favicon.ico
│ │ ├── favicon-16x16.png
│ │ ├── favicon-32x32.png
│ │ ├── apple-touch-icon.png
│ │ ├── android-chrome-192x192.png
│ │ └── android-chrome-512x512.png
└── src
│ ├── components
│ ├── animate
│ │ ├── variants
│ │ │ ├── index.js
│ │ │ └── bounce
│ │ │ │ └── index.js
│ │ └── index.js
│ └── charts
│ │ └── index.js
│ ├── sections
│ ├── authentication
│ │ ├── login
│ │ │ └── index.js
│ │ └── register
│ │ │ └── index.js
│ └── @dashboard
│ │ ├── user
│ │ └── index.js
│ │ └── blog
│ │ └── index.js
│ ├── .prettierrc
│ ├── theme
│ └── breakpoints.js
│ ├── setupTests.js
│ └── App.test.js
├── fmi-2023-01-js-intro-lab
├── routes.json
└── test.rest
├── fmi-2023-05-blogs-lab
├── routes.json
├── src
│ ├── react-app-env.d.ts
│ ├── common-types.ts
│ ├── AppFunction.css
│ ├── services
│ │ └── posts-service.ts
│ ├── hooks
│ │ └── useEffectOnMount.ts
│ └── setupTests.ts
└── public
│ ├── materialize
│ └── js
│ │ └── init.js
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
├── 09-react-todos-lab
├── src
│ ├── app
│ │ ├── assets
│ │ │ ├── main.css
│ │ │ ├── img
│ │ │ │ └── my-logo.png
│ │ │ └── css
│ │ │ │ └── postcss.config.js
│ │ └── hello.js
│ ├── polyfills.js
│ ├── index.html
│ └── vendor.js
├── webpack.config.js
├── favicon.ico
└── config
│ └── helpers.js
├── 04-ts-intro
├── dist
│ ├── person.js
│ ├── model
│ │ ├── person.js
│ │ ├── id-generator.js
│ │ ├── person.js.map
│ │ └── id-generator.js.map
│ ├── repository.js
│ ├── shared-types.js
│ ├── person.js.map
│ ├── repository.js.map
│ └── shared-types.js.map
└── src
│ └── shared-types.ts
├── 12-blogs-api-express-mongo
└── config
│ └── secret.js
├── 04-ts-intro-lab
├── dist
│ ├── person.js
│ ├── model
│ │ ├── person.js
│ │ └── person.js.map
│ ├── common-type.js
│ ├── common-types.js
│ ├── person.js.map
│ ├── common-type.js.map
│ ├── common-types.js.map
│ ├── indexed-types.js
│ └── dao
│ │ ├── id-generator.js
│ │ └── id-generator.js.map
└── src
│ ├── common-types.ts
│ └── dao
│ └── id-generator.ts
├── fmi-2025-07-react-books-ts
├── src
│ ├── App.css
│ ├── vite-env.d.ts
│ └── index.css
├── public
│ └── favicon.ico
├── tsconfig.json
└── vite.config.ts
├── fmi-2025-09-context
├── src
│ └── vite-env.d.ts
├── tsconfig.json
└── vite.config.ts
├── 05-nodejs-demo-lab4
└── .vscode
│ └── settings.json
├── 07-react-refs-lab
├── src
│ ├── react-app-env.d.ts
│ ├── components
│ │ └── FancyButton.css
│ └── setupTests.ts
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
├── 09-react-lab-a
├── webpack.config.js
├── src
│ ├── polyfills.js
│ ├── index.html
│ ├── app
│ │ ├── hello.js
│ │ └── helper.js
│ └── vendor.js
└── config
│ └── helpers.js
├── 09-react-lab-b
├── webpack.config.js
├── src
│ ├── polyfills.js
│ ├── index.html
│ ├── app
│ │ ├── hello.js
│ │ └── index.js
│ └── vendor.js
└── config
│ └── helpers.js
├── 09-react-todos
├── webpack.config.js
├── src
│ ├── app
│ │ ├── assets
│ │ │ └── images
│ │ │ │ └── react-redux.png
│ │ └── containers
│ │ │ └── hello.js
│ ├── polyfills.js
│ ├── index.html
│ └── vendor.js
└── config
│ └── helpers.js
├── 12-react-router-demos
├── src
│ ├── react-app-env.d.ts
│ ├── pages
│ │ └── About.tsx
│ └── setupTests.js
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
├── 12-router-modal-lab
├── src
│ ├── react-app-env.d.ts
│ └── setupTests.ts
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
├── fmi-2023-ts-todos
├── src
│ ├── react-app-env.d.ts
│ └── setupTests.ts
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
├── fmi-2025-08-react-refs-ts
├── src
│ ├── vite-env.d.ts
│ └── hooks
│ │ └── useEffectOnMount.ts
├── tsconfig.json
└── vite.config.ts
├── fmi-2025-10-react-router-declarative
├── src
│ ├── App.css
│ └── vite-env.d.ts
├── tsconfig.json
└── vite.config.ts
├── fmi-2025-13-mongo
├── src
│ └── model
│ │ └── errors.ts
├── nodemon.json
└── tsconfig.json
├── 16-react-todos-redux
├── webpack.config.js
├── tsconfig.json
├── src
│ ├── app
│ │ ├── assets
│ │ │ └── images
│ │ │ │ └── react-redux.png
│ │ └── reducers
│ │ │ ├── index.js
│ │ │ └── visibilityFilter.js
│ ├── polyfills.js
│ └── index.html
├── .babelrc
└── config
│ └── helpers.js
├── fmi-2022-03-react-todos
├── src
│ ├── components
│ │ ├── TodoFilter.css
│ │ └── TodoList.css
│ ├── setupTests.js
│ └── App.test.js
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ ├── logo512.png
│ └── webfonts
│ ├── fa-solid-900.ttf
│ ├── fa-brands-400.ttf
│ ├── fa-brands-400.woff2
│ ├── fa-regular-400.ttf
│ ├── fa-solid-900.woff2
│ ├── fa-regular-400.woff2
│ ├── fa-v4compatibility.ttf
│ └── fa-v4compatibility.woff2
├── fmi-2023-ruoter-ts-lab
├── src
│ ├── react-app-env.d.ts
│ ├── AboutUs.tsx
│ ├── Home.tsx
│ └── setupTests.ts
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
├── fmi-2024-07-react-blogs-ts
├── src
│ ├── react-app-env.d.ts
│ ├── shared
│ │ └── shared-types.ts
│ ├── hooks
│ │ └── useEffectOnMount.ts
│ └── setupTests.ts
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
├── fmi-2024-08-react-refs-lab
├── src
│ ├── react-app-env.d.ts
│ ├── FancyButton.css
│ ├── hooks
│ │ └── useEffectOnMount.ts
│ └── setupTests.ts
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
├── fmi-2025-12-express-ts
├── src
│ └── model
│ │ └── errors.ts
├── nodemon.json
└── tsconfig.json
├── fmi-2025-react-router-v7-dataload
├── src
│ ├── vite-env.d.ts
│ ├── routes
│ │ ├── Contacts.css
│ │ ├── ErrorPage.css
│ │ ├── Home.tsx
│ │ ├── About.tsx
│ │ ├── NoMatch.tsx
│ │ └── ContactDetailsForm.css
│ ├── components
│ │ └── LoadingIndicator.tsx
│ └── App.tsx
├── tsconfig.json
└── vite.config.ts
├── fmi-2025-react-router-v7
├── .dockerignore
├── .gitignore
├── public
│ └── favicon.ico
├── app
│ └── routes.ts
└── react-router.config.ts
├── fmi-2024-09-react-context-ts
├── src
│ ├── react-app-env.d.ts
│ └── setupTests.ts
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
├── fmi-2024-10-react-routing-ts
├── src
│ ├── components
│ │ ├── Contacts.css
│ │ ├── ErrorPage.css
│ │ ├── Home.tsx
│ │ ├── About.tsx
│ │ ├── NoMatch.tsx
│ │ ├── LoadingIndicator.tsx
│ │ └── ContactDetailsForm.css
│ ├── react-app-env.d.ts
│ └── setupTests.ts
└── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
├── fmi-2025-07-react-client-face-recog
├── src
│ ├── vite-env.d.ts
│ └── components
│ │ ├── FaceRecognition
│ │ └── FaceRecognition.css
│ │ └── PostForm
│ │ └── PostForm.css
├── tsconfig.json
└── vite.config.ts
├── 01-es6-features-lab4
├── test01.js
├── users.json
├── promises.html
├── test.js
└── index.html
├── 08-redux-simple-demo
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ ├── app
│ └── store.js
│ └── setupTests.js
├── 08-redux-simple-lab4
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ ├── app
│ └── store.js
│ └── setupTests.js
├── fmi-2022-10-blogs-api-express-mongo
└── config
│ └── secret.js
├── 03-mybooks
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ └── setupTests.js
├── 04-simple
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ ├── App.js
│ └── setupTests.js
├── 17-react-todos-redux-es7-decorator
├── webpack.config.js
├── tsconfig.json
├── src
│ ├── polyfills.js
│ ├── app
│ │ ├── assets
│ │ │ └── images
│ │ │ │ └── react-redux.png
│ │ └── reducers
│ │ │ └── selected-todo.js
│ └── index.html
├── .babelrc
└── config
│ └── helpers.js
├── demo-app
└── package.json
├── fmi-2022-06-basic-redux
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ ├── app
│ └── store.js
│ ├── features
│ └── counter
│ │ └── counterAPI.js
│ └── setupTests.js
├── todo-app
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ ├── Hello.js
│ └── setupTests.js
├── 00-todo-lab4
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ └── setupTests.js
├── 03-mybooks-lab4
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ └── setupTests.js
├── 04-mybooks-lab4
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ └── setupTests.js
├── 07-react-refs
├── public
│ ├── robots.txt
│ ├── cat.png
│ ├── dog.png
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ └── setupTests.js
├── 10-tic-tac-toe
├── src
│ ├── index.css
│ ├── index.js
│ └── App.test.js
└── public
│ └── favicon.ico
├── 11-react-context
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ ├── user-context.js
│ └── setupTests.js
├── 05-react-router-demos
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ └── setupTests.js
├── 06-react-router-lab4
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ └── setupTests.js
├── 07-react-context-lab4
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ ├── user-context.js
│ └── setupTests.js
├── 07-react-refs-lab4
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ └── setupTests.js
├── 10-react-blogs
├── src
│ ├── articles
│ │ └── Article.css
│ └── App.css
└── public
│ └── favicon.ico
├── 18-react-router-redux
├── src
│ ├── constants.js
│ ├── reducers
│ │ └── index.js
│ ├── app.css
│ ├── components
│ │ ├── about.js
│ │ └── home.js
│ └── app.test.js
├── public
│ └── favicon.ico
└── tsconfig.json
├── docs
├── React_2020_05.pdf
├── React_2020_07.pdf
└── IPT_React_2020_04.pdf
├── 02-js-intro
├── users.json
└── js
│ ├── function-prototype.js
│ ├── async-timeout.js
│ ├── temp.js
│ ├── functions.js
│ └── arrows.js
├── 05-mybooks-router-lab4
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ ├── logo512.png
│ └── img
│ │ └── reading.png
└── src
│ ├── App.css
│ └── setupTests.js
├── fmi-2022-01-react-intro
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ ├── setupTests.js
│ └── App.test.js
├── fmi-2024-01-react-todos
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ └── logo512.png
└── src
│ ├── todo-model.js
│ ├── setupTests.js
│ ├── TodoList.js
│ └── App.test.js
├── 02-js-events
└── images
│ ├── rhino.jpg
│ └── backdrop.png
├── fmi-2022-02-js-lab
├── users.json
└── arrows.js
├── fmi-2024-04-fetch
├── favicon.ico
└── users.json
├── 04-es6-simple-demo
└── app
│ └── assets
│ ├── css
│ └── main.css
│ └── img
│ └── my-logo.png
├── fmi-2024-13-express-lab
├── src
│ └── model
│ │ ├── todo.ts
│ │ └── web-error.ts
├── nodemon.json
├── todos.json
└── tsconfig.json
├── 01-react-todos
├── public
│ └── favicon.ico
└── src
│ └── HelloFunc.js
├── fmi-2023-02-fech-lab
└── api
│ └── users
├── 07-formik-example
└── public
│ └── favicon.ico
├── 15-react-router-v4
├── public
│ └── favicon.ico
├── src
│ ├── components
│ │ ├── about.js
│ │ ├── hocs.js
│ │ └── home.js
│ ├── app.css
│ └── app.test.js
└── tsconfig.json
├── 06-nodejs-api-articles
├── public
│ └── favicon.ico
├── articles-api
│ └── article-model.js
└── articles.json
├── fmi-2022-05-react-todos
├── public
│ └── favicon.ico
└── src
│ ├── HelloFunc.js
│ ├── About.js
│ └── NotFound.js
├── 02-js-design-patterns
└── css
│ └── canvas.css
├── 09-express-blog-jwt-lab3
└── .gitignore
├── fmi-2023-04-ts-lab
├── src
│ └── common.ts
└── db.json
├── fmi-2024-12-nodejs
├── src
│ ├── 01-dns.ts
│ ├── 01-dns-promises.ts
│ ├── 08-stream-stdout.ts
│ └── 01-dns-async-await.ts
├── nodemon.json
├── tsconfig.json
└── dist
│ ├── 01-dns.js
│ └── 01-dns.js.map
├── fmi-2024-11-node-ts-lab
├── src
│ ├── 01-dns.ts
│ ├── 01-dns-promises.ts
│ └── 01-dns-async-await.ts
├── nodemon.json
├── todos.json
└── tsconfig.json
├── 09-node-ts
├── src
│ └── 08-stream-stdout.ts
├── nodemon.json
└── tsconfig.json
├── 09-nodejs-lab4
└── example01c.js
├── 12-node-ts
├── src
│ └── 08-stream-stdout.ts
├── nodemon.json
└── tsconfig.json
├── fmi-2025-01-react-todos
└── vite.config.js
├── fmi-2025-11-node-ts
├── nodemon.json
└── tsconfig.json
├── 16-ts-mongo-lab
├── nodemon.json
└── tsconfig.json
├── fmi-2024-15-blogs-api-express-mongo
├── nodemon.json
└── tsconfig.json
├── fmi-2023-node-ts-lab
└── tsconfig.json
└── 17-ts-express-mongo-lab
└── tsconfig.json
/11-react-demo-sqlite/DB_FILE:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/04-es6-demo/.env:
--------------------------------------------------------------------------------
1 | PORT=3000
2 |
--------------------------------------------------------------------------------
/06-react-blogs/src/App.css:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/fmi-2024-05-ts/src/temp.ts:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/12-blogs-react-client/src/PostForm.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/12-blogs-react-client/src/Register.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/12-roter-lazy-loading-lab/src/App.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/06-react-blogs/src/component/PostList.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/12-react-demo-sqlite-custom-form/DB_FILE:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/14-express-ts-lab/.env:
--------------------------------------------------------------------------------
1 | NODE_ENV=development
--------------------------------------------------------------------------------
/23-loopback-mongo/.eslintignore:
--------------------------------------------------------------------------------
1 | /client/
--------------------------------------------------------------------------------
/03-es6-features/user.json:
--------------------------------------------------------------------------------
1 | {"name":"iproduct"}
--------------------------------------------------------------------------------
/11-react-demo-sqlite/.eslintignore:
--------------------------------------------------------------------------------
1 | bundle.js
2 |
--------------------------------------------------------------------------------
/fmi-2024-14-express-ts-lab/.env:
--------------------------------------------------------------------------------
1 | NODE_ENV=development
--------------------------------------------------------------------------------
/04-es6-demo/output.txt:
--------------------------------------------------------------------------------
1 | My custom data. My custom data.
--------------------------------------------------------------------------------
/05-nodejs-demo/output.txt:
--------------------------------------------------------------------------------
1 | My custom data. My custom data.
--------------------------------------------------------------------------------
/06-react-blogs/routes.json:
--------------------------------------------------------------------------------
1 | {
2 | "/api/*": "/$1"
3 | }
--------------------------------------------------------------------------------
/11-react-demo-sqlite/app.js:
--------------------------------------------------------------------------------
1 | import './comments-demo';
2 |
--------------------------------------------------------------------------------
/fmi-2025-03-ts-intro/dist/model/person.js:
--------------------------------------------------------------------------------
1 | export {};
2 |
--------------------------------------------------------------------------------
/fmi-2025-06-react-todos-ts/src/component/TodoInput.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/03-es6-features-lab3/main.css:
--------------------------------------------------------------------------------
1 | img {
2 | width: 200px;
3 | }
--------------------------------------------------------------------------------
/05-ts-blogs-rest/routes.json:
--------------------------------------------------------------------------------
1 | {
2 | "/api/*": "/$1"
3 | }
--------------------------------------------------------------------------------
/06-myblogs-rest-ts/routes.json:
--------------------------------------------------------------------------------
1 | {
2 | "/api/*": "/$1"
3 | }
--------------------------------------------------------------------------------
/08-react-blogs-mui/routes.json:
--------------------------------------------------------------------------------
1 | {
2 | "/api/*": "/$1"
3 | }
--------------------------------------------------------------------------------
/11-router-basics-ts/routes.json:
--------------------------------------------------------------------------------
1 | {
2 | "/api/*": "/$1"
3 | }
--------------------------------------------------------------------------------
/12-react-demo-sqlite-custom-form/.eslintignore:
--------------------------------------------------------------------------------
1 | bundle.js
2 |
--------------------------------------------------------------------------------
/14-ipt-knowledge-tester-express/.eslintignore:
--------------------------------------------------------------------------------
1 | bundle.js
2 |
--------------------------------------------------------------------------------
/23-loopback-mongo/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "loopback"
3 | }
--------------------------------------------------------------------------------
/fmi-2024-06-todos-ts/routes.json:
--------------------------------------------------------------------------------
1 | {
2 | "/api/*": "/$1"
3 | }
--------------------------------------------------------------------------------
/fmi-2025-02-es6/css/main.css:
--------------------------------------------------------------------------------
1 | img {
2 | height: 150px;
3 | }
--------------------------------------------------------------------------------
/fmi-2025-03-ts-intro/dist/common/common-types.js:
--------------------------------------------------------------------------------
1 | export {};
2 |
--------------------------------------------------------------------------------
/03-fetch-api-lab/css/main.css:
--------------------------------------------------------------------------------
1 | h2 {
2 | text-align: center;
3 | }
--------------------------------------------------------------------------------
/06-myblogs-rest-ts/src/shared-types.ts:
--------------------------------------------------------------------------------
1 | export type IdType = number
--------------------------------------------------------------------------------
/12-routing-auth-lab/src/App.css:
--------------------------------------------------------------------------------
1 | .App {
2 | margin: 30px 50px;
3 | }
--------------------------------------------------------------------------------
/23-loopback-mongo/.yo-rc.json:
--------------------------------------------------------------------------------
1 | {
2 | "generator-loopback": {}
3 | }
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/routes.json:
--------------------------------------------------------------------------------
1 | {
2 | "/api/*": "/$1"
3 | }
--------------------------------------------------------------------------------
/fmi-2023-01-js-intro-lab/routes.json:
--------------------------------------------------------------------------------
1 | {
2 | "/api/*": "/$1"
3 | }
--------------------------------------------------------------------------------
/fmi-2023-05-blogs-lab/routes.json:
--------------------------------------------------------------------------------
1 | {
2 | "/api/*": "/$1"
3 | }
--------------------------------------------------------------------------------
/05-nodejs-demo/readable0.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | process.stdin.pipe(process.stdout);
--------------------------------------------------------------------------------
/09-react-todos-lab/src/app/assets/main.css:
--------------------------------------------------------------------------------
1 | div {
2 | color: green;
3 | }
--------------------------------------------------------------------------------
/14-ipt-knowledge-tester-express/app/index.js:
--------------------------------------------------------------------------------
1 | import './main-router';
2 |
--------------------------------------------------------------------------------
/fmi-2025-06-react-todos-ts/routes.json:
--------------------------------------------------------------------------------
1 | {
2 | "/api/*": "/$1"
3 | }
--------------------------------------------------------------------------------
/04-ts-intro/dist/person.js:
--------------------------------------------------------------------------------
1 | export {};
2 | //# sourceMappingURL=person.js.map
--------------------------------------------------------------------------------
/06-react-blogs/src/component/About.css:
--------------------------------------------------------------------------------
1 | .About {
2 | height: 75vh;
3 | }
--------------------------------------------------------------------------------
/12-blogs-api-express-mongo/config/secret.js:
--------------------------------------------------------------------------------
1 | module.exports.secret='my_secret';
--------------------------------------------------------------------------------
/fmi-2024-05-ts/dist/temp.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | //# sourceMappingURL=temp.js.map
--------------------------------------------------------------------------------
/04-ts-intro-lab/dist/person.js:
--------------------------------------------------------------------------------
1 | export {};
2 | //# sourceMappingURL=person.js.map
--------------------------------------------------------------------------------
/04-ts-intro/dist/model/person.js:
--------------------------------------------------------------------------------
1 | export {};
2 | //# sourceMappingURL=person.js.map
--------------------------------------------------------------------------------
/05-ts-blogs-rest/dist/person.js:
--------------------------------------------------------------------------------
1 | export {};
2 | //# sourceMappingURL=person.js.map
--------------------------------------------------------------------------------
/fmi-2025-07-react-books-ts/src/App.css:
--------------------------------------------------------------------------------
1 | .name {
2 | padding-top: 100px;
3 | }
--------------------------------------------------------------------------------
/fmi-2025-09-context/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/04-ts-intro-lab/dist/model/person.js:
--------------------------------------------------------------------------------
1 | export {};
2 | //# sourceMappingURL=person.js.map
--------------------------------------------------------------------------------
/04-ts-intro/dist/repository.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | //# sourceMappingURL=repository.js.map
--------------------------------------------------------------------------------
/04-ts-intro/dist/shared-types.js:
--------------------------------------------------------------------------------
1 | export {};
2 | //# sourceMappingURL=shared-types.js.map
--------------------------------------------------------------------------------
/05-nodejs-demo-lab4/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "git.ignoreLimitWarning": true
3 | }
--------------------------------------------------------------------------------
/05-nodejs-demo/example01c.js:
--------------------------------------------------------------------------------
1 | process.env.foo = 'bar';
2 | console.log(process.env.foo);
--------------------------------------------------------------------------------
/05-ts-blogs-rest/dist/model/person.js:
--------------------------------------------------------------------------------
1 | export {};
2 | //# sourceMappingURL=person.js.map
--------------------------------------------------------------------------------
/07-react-refs-lab/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/08-react-blogs-mui/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/09-react-lab-a/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = require('./config/webpack.dev.js');
--------------------------------------------------------------------------------
/09-react-lab-b/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = require('./config/webpack.dev.js');
--------------------------------------------------------------------------------
/09-react-todos-lab/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = require('./config/webpack.dev.js');
--------------------------------------------------------------------------------
/09-react-todos/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = require('./config/webpack.dev.js');
--------------------------------------------------------------------------------
/11-router-basics-ts/src/pages/PostPage.css:
--------------------------------------------------------------------------------
1 | .PostPage-img {
2 | width: 500px;
3 | }
--------------------------------------------------------------------------------
/11-router-basics-ts/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/12-react-router-demos/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/12-router-modal-lab/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/12-routing-auth-lab/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/14-express-ts-lab/src/model/errors.ts:
--------------------------------------------------------------------------------
1 | export class NotFoundError extends Error {
2 | }
--------------------------------------------------------------------------------
/fmi-2023-05-blogs-lab/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/fmi-2023-ts-todos/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/fmi-2024-06-todos-ts/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/fmi-2025-06-react-todos-ts/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/fmi-2025-07-react-books-ts/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/fmi-2025-08-react-refs-ts/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/fmi-2025-10-react-router-declarative/src/App.css:
--------------------------------------------------------------------------------
1 | .App {
2 | margin: 30px 50px;
3 | }
--------------------------------------------------------------------------------
/fmi-2025-13-mongo/src/model/errors.ts:
--------------------------------------------------------------------------------
1 | export class NotFoundError extends Error {
2 | }
--------------------------------------------------------------------------------
/04-ts-intro-lab/dist/common-type.js:
--------------------------------------------------------------------------------
1 | export {};
2 | //# sourceMappingURL=common-type.js.map
--------------------------------------------------------------------------------
/04-ts-intro-lab/dist/common-types.js:
--------------------------------------------------------------------------------
1 | export {};
2 | //# sourceMappingURL=common-types.js.map
--------------------------------------------------------------------------------
/05-ts-blogs-rest/dist/repository.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | //# sourceMappingURL=repository.js.map
--------------------------------------------------------------------------------
/05-ts-blogs-rest/dist/shared-types.js:
--------------------------------------------------------------------------------
1 | export {};
2 | //# sourceMappingURL=shared-types.js.map
--------------------------------------------------------------------------------
/12-blogs-react-client/src/Login.css:
--------------------------------------------------------------------------------
1 | form.Login-form {
2 | min-height: 30vmin;
3 | }
4 |
--------------------------------------------------------------------------------
/12-roter-lazy-loading-lab/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/16-react-todos-redux/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = require('./config/webpack.dev.js');
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/src/components/TodoFilter.css:
--------------------------------------------------------------------------------
1 | .TodoFilter{
2 | width: 960px;
3 | }
--------------------------------------------------------------------------------
/fmi-2023-ruoter-ts-lab/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/fmi-2024-05-ts/dist/shared-types.js:
--------------------------------------------------------------------------------
1 | export {};
2 | //# sourceMappingURL=shared-types.js.map
--------------------------------------------------------------------------------
/fmi-2024-07-react-blogs-ts/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/fmi-2024-08-react-refs-lab/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/fmi-2025-06-react-todos-ts/src/App.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | h1 {
4 | font-size: 1.7em;
5 | }
6 |
7 |
--------------------------------------------------------------------------------
/fmi-2025-12-express-ts/src/model/errors.ts:
--------------------------------------------------------------------------------
1 | export class NotFoundError extends Error {
2 | }
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7-dataload/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7/.dockerignore:
--------------------------------------------------------------------------------
1 | .react-router
2 | build
3 | node_modules
4 | README.md
--------------------------------------------------------------------------------
/04-ts-intro/dist/model/id-generator.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | //# sourceMappingURL=id-generator.js.map
--------------------------------------------------------------------------------
/06-myblogs-rest-ts/dist/shared-types.js:
--------------------------------------------------------------------------------
1 | export {};
2 | //# sourceMappingURL=shared-types.js.map
--------------------------------------------------------------------------------
/11-router-basics-ts/src/pages/ErrorPage.css:
--------------------------------------------------------------------------------
1 | .ErrorPage-container {
2 | padding: 30px;
3 | }
--------------------------------------------------------------------------------
/fmi-2023-05-blogs-lab/public/materialize/js/init.js:
--------------------------------------------------------------------------------
1 | document.getElementById('.sidenav').sidenav();
--------------------------------------------------------------------------------
/fmi-2024-09-react-context-ts/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/fmi-2024-10-react-routing-ts/src/components/Contacts.css:
--------------------------------------------------------------------------------
1 | .buttons {
2 | margin-top: 30px;
3 | }
--------------------------------------------------------------------------------
/fmi-2024-10-react-routing-ts/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/fmi-2024-14-express-ts-lab/src/model/errors.ts:
--------------------------------------------------------------------------------
1 | export class NotFoundError extends Error {
2 | }
--------------------------------------------------------------------------------
/fmi-2025-07-react-client-face-recog/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/fmi-2025-10-react-router-declarative/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/01-es6-features-lab4/test01.js:
--------------------------------------------------------------------------------
1 | function f({a, b = 0} = {a: "hi"}) { console.log(a, b); }
2 | f({})
--------------------------------------------------------------------------------
/05-ts-blogs-rest/dist/model/id-generator.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | //# sourceMappingURL=id-generator.js.map
--------------------------------------------------------------------------------
/06-react-blogs/src/component/Nav.css:
--------------------------------------------------------------------------------
1 | .Nav-active {
2 | background-color: rgb(255, 189, 6);
3 | }
--------------------------------------------------------------------------------
/08-redux-simple-demo/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/08-redux-simple-lab4/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/12-react-demo-sqlite-custom-form/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = require('./config/webpack.dev.js');
--------------------------------------------------------------------------------
/fmi-2022-10-blogs-api-express-mongo/config/secret.js:
--------------------------------------------------------------------------------
1 | module.exports.secret=process.env.BLOG_API_SECRET;
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7-dataload/src/routes/Contacts.css:
--------------------------------------------------------------------------------
1 | .buttons {
2 | margin-top: 30px;
3 | }
--------------------------------------------------------------------------------
/01-es6-features-lab4/users.json:
--------------------------------------------------------------------------------
1 | [
2 | {"username": "iproduct"},
3 | {"username": "lukehoban"}
4 | ]
--------------------------------------------------------------------------------
/03-mybooks/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/04-simple/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/17-react-todos-redux-es7-decorator/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = require('./config/webpack.dev.js');
--------------------------------------------------------------------------------
/demo-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo-app",
3 | "version": "0.1.0",
4 | "private": true
5 | }
6 |
--------------------------------------------------------------------------------
/fmi-2022-06-basic-redux/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/fmi-2024-10-react-routing-ts/src/components/ErrorPage.css:
--------------------------------------------------------------------------------
1 | .ErrorPage-container {
2 | padding: 30px;
3 | }
--------------------------------------------------------------------------------
/todo-app/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/00-todo-lab4/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/03-mybooks-lab4/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/04-mybooks-lab4/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/05-nodejs-demo/out.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/05-nodejs-demo/out.gz
--------------------------------------------------------------------------------
/06-react-blogs/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/07-react-refs/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/10-tic-tac-toe/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | padding: 0;
4 | font-family: sans-serif;
5 | }
6 |
--------------------------------------------------------------------------------
/11-react-context/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/23-loopback-mongo/README.md:
--------------------------------------------------------------------------------
1 | # My Application
2 |
3 | The project is generated by [LoopBack](http://loopback.io).
--------------------------------------------------------------------------------
/23-loopback-mongo/client/README.md:
--------------------------------------------------------------------------------
1 | ## Client
2 |
3 | This is the place for your application front-end files.
4 |
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7-dataload/src/routes/ErrorPage.css:
--------------------------------------------------------------------------------
1 | .ErrorPage-container {
2 | padding: 30px;
3 | }
--------------------------------------------------------------------------------
/03-es6-features/custom-prop.js:
--------------------------------------------------------------------------------
1 | const name = 'prop1';
2 | const o1 = {
3 | [name]: 'val1'
4 | }
5 | console.log(o1);
--------------------------------------------------------------------------------
/05-react-router-demos/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/06-react-router-lab4/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/07-react-context-lab4/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/07-react-refs-lab/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/07-react-refs-lab4/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/08-react-blogs-mui/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/10-react-blogs/src/articles/Article.css:
--------------------------------------------------------------------------------
1 | .Article-blog-picture {
2 | width: 100%;
3 | max-height: 100px;
4 | }
--------------------------------------------------------------------------------
/11-router-basics-ts/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/12-blogs-react-client/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/12-react-router-demos/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/12-router-modal-lab/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/12-routing-auth-lab/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/18-react-router-redux/src/constants.js:
--------------------------------------------------------------------------------
1 | export const INCREMENT = 'INCREMENT';
2 | export const DECREMENT = 'DECREMENT';
--------------------------------------------------------------------------------
/18-react-router-redux/src/reducers/index.js:
--------------------------------------------------------------------------------
1 | import counter from './counter';
2 |
3 | export default {counter};
4 |
--------------------------------------------------------------------------------
/23-loopback-mongo/common/models/product.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = function(Product) {
4 |
5 | };
6 |
--------------------------------------------------------------------------------
/docs/React_2020_05.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/docs/React_2020_05.pdf
--------------------------------------------------------------------------------
/docs/React_2020_07.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/docs/React_2020_07.pdf
--------------------------------------------------------------------------------
/fmi-2023-05-blogs-lab/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/fmi-2023-ts-todos/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/fmi-2024-06-todos-ts/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/02-js-intro/users.json:
--------------------------------------------------------------------------------
1 | [
2 | {"username":"iproduct"},
3 | {"username":"gaeron"},
4 | {"username":"ry"}
5 | ]
--------------------------------------------------------------------------------
/05-mybooks-router-lab4/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/10-react-blogs/src/App.css:
--------------------------------------------------------------------------------
1 | .App {
2 | text-align: center;
3 | }
4 |
5 | .App-link {
6 | color: #61dafb;
7 | }
8 |
9 |
--------------------------------------------------------------------------------
/12-roter-lazy-loading-lab/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/docs/IPT_React_2020_04.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/docs/IPT_React_2020_04.pdf
--------------------------------------------------------------------------------
/fmi-2022-01-react-intro/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/src/components/animate/variants/index.js:
--------------------------------------------------------------------------------
1 | export * from './Wrap';
2 | export * from './bounce';
3 |
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/src/components/charts/index.js:
--------------------------------------------------------------------------------
1 | export { default as BaseOptionChart } from './BaseOptionChart';
2 |
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/src/sections/authentication/login/index.js:
--------------------------------------------------------------------------------
1 | export { default as LoginForm } from './LoginForm';
2 |
--------------------------------------------------------------------------------
/fmi-2023-ruoter-ts-lab/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/fmi-2024-01-react-todos/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/fmi-2024-05-ts/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-05-ts/favicon.ico
--------------------------------------------------------------------------------
/fmi-2024-07-react-blogs-ts/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/fmi-2024-08-react-refs-lab/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/02-js-events/images/rhino.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/02-js-events/images/rhino.jpg
--------------------------------------------------------------------------------
/03-es6-features-lab3/users.json:
--------------------------------------------------------------------------------
1 | [
2 | {"name": "iproduct"},
3 | {"name": "ahmed-shehata"},
4 | {"name": "AGS-"}
5 | ]
--------------------------------------------------------------------------------
/03-es6-features/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/03-es6-features/favicon.ico
--------------------------------------------------------------------------------
/03-fetch-api-lab/users.json:
--------------------------------------------------------------------------------
1 | [
2 | {"username": "iproduct"},
3 | {"username": "gaeron"},
4 | {"username": "ry"}
5 | ]
--------------------------------------------------------------------------------
/03-mybooks/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/03-mybooks/public/favicon.ico
--------------------------------------------------------------------------------
/03-mybooks/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/03-mybooks/public/logo192.png
--------------------------------------------------------------------------------
/03-mybooks/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/03-mybooks/public/logo512.png
--------------------------------------------------------------------------------
/04-simple/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/04-simple/public/favicon.ico
--------------------------------------------------------------------------------
/04-simple/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/04-simple/public/logo192.png
--------------------------------------------------------------------------------
/04-simple/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/04-simple/public/logo512.png
--------------------------------------------------------------------------------
/05-mybooks-router-lab4/src/App.css:
--------------------------------------------------------------------------------
1 | .App-about {
2 | height: 30vmin;
3 | pointer-events: none;
4 | margin: auto;
5 | }
6 |
--------------------------------------------------------------------------------
/07-react-refs/public/cat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/07-react-refs/public/cat.png
--------------------------------------------------------------------------------
/07-react-refs/public/dog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/07-react-refs/public/dog.png
--------------------------------------------------------------------------------
/fmi-2022-02-js-lab/users.json:
--------------------------------------------------------------------------------
1 | [
2 | {"username":"iproduct"},
3 | {"username":"gaeron"},
4 | {"username":"ry"}
5 | ]
--------------------------------------------------------------------------------
/fmi-2024-04-fetch/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-04-fetch/favicon.ico
--------------------------------------------------------------------------------
/fmi-2024-09-react-context-ts/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/fmi-2024-10-react-routing-ts/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /node_modules/
3 |
4 | # React Router
5 | /.react-router/
6 | /build/
7 |
--------------------------------------------------------------------------------
/todo-app/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/todo-app/public/favicon.ico
--------------------------------------------------------------------------------
/todo-app/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/todo-app/public/logo192.png
--------------------------------------------------------------------------------
/todo-app/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/todo-app/public/logo512.png
--------------------------------------------------------------------------------
/00-todo-lab4/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/00-todo-lab4/public/favicon.ico
--------------------------------------------------------------------------------
/00-todo-lab4/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/00-todo-lab4/public/logo192.png
--------------------------------------------------------------------------------
/00-todo-lab4/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/00-todo-lab4/public/logo512.png
--------------------------------------------------------------------------------
/04-es6-simple-demo/app/assets/css/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | background: #eeeeee;
3 | }
4 |
5 | .display {
6 | font-size: 1.3em;
7 | }
--------------------------------------------------------------------------------
/05-ts-blogs-rest/src/shared-types.ts:
--------------------------------------------------------------------------------
1 | export type IdType = number;
2 |
3 | export interface Identifiable {
4 | id: IdType;
5 | }
--------------------------------------------------------------------------------
/09-react-todos-lab/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/09-react-todos-lab/favicon.ico
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/src/sections/authentication/register/index.js:
--------------------------------------------------------------------------------
1 | export { default as RegisterForm } from './RegisterForm';
2 |
--------------------------------------------------------------------------------
/fmi-2024-05-ts/dist/temp.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"temp.js","sourceRoot":"","sources":["../src/temp.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/fmi-2024-13-express-lab/src/model/todo.ts:
--------------------------------------------------------------------------------
1 | export class Todo {
2 | constructor(public id: string, public text: string ) {}
3 | }
--------------------------------------------------------------------------------
/fmi-2025-03-ts-intro/dist/greeter.js:
--------------------------------------------------------------------------------
1 | export function greet(name) {
2 | return `Hello ${name}, from TypeScript!!!!!!`;
3 | }
4 |
--------------------------------------------------------------------------------
/fmi-2025-03-ts-intro/src/greeter.ts:
--------------------------------------------------------------------------------
1 | export function greet(name: string) {
2 | return `Hello ${name}, from TypeScript!!!!!!`
3 | }
--------------------------------------------------------------------------------
/01-react-todos/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/01-react-todos/public/favicon.ico
--------------------------------------------------------------------------------
/02-js-events/images/backdrop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/02-js-events/images/backdrop.png
--------------------------------------------------------------------------------
/03-mybooks-lab4/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/03-mybooks-lab4/public/favicon.ico
--------------------------------------------------------------------------------
/03-mybooks-lab4/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/03-mybooks-lab4/public/logo192.png
--------------------------------------------------------------------------------
/03-mybooks-lab4/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/03-mybooks-lab4/public/logo512.png
--------------------------------------------------------------------------------
/04-mybooks-lab4/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/04-mybooks-lab4/public/favicon.ico
--------------------------------------------------------------------------------
/04-mybooks-lab4/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/04-mybooks-lab4/public/logo192.png
--------------------------------------------------------------------------------
/04-mybooks-lab4/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/04-mybooks-lab4/public/logo512.png
--------------------------------------------------------------------------------
/04-ts-intro-lab/dist/person.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"person.js","sourceRoot":"","sources":["../src/person.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/04-ts-intro/dist/person.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"person.js","sourceRoot":"","sources":["../src/person.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/04-ts-intro/src/shared-types.ts:
--------------------------------------------------------------------------------
1 | export type IdType = number | undefined;
2 |
3 | export interface Identifiable {
4 | id: IdType;
5 | }
--------------------------------------------------------------------------------
/06-react-blogs/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/06-react-blogs/public/favicon.ico
--------------------------------------------------------------------------------
/06-react-blogs/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/06-react-blogs/public/logo192.png
--------------------------------------------------------------------------------
/06-react-blogs/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/06-react-blogs/public/logo512.png
--------------------------------------------------------------------------------
/07-react-refs/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/07-react-refs/public/favicon.ico
--------------------------------------------------------------------------------
/07-react-refs/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/07-react-refs/public/logo192.png
--------------------------------------------------------------------------------
/07-react-refs/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/07-react-refs/public/logo512.png
--------------------------------------------------------------------------------
/10-react-blogs/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/10-react-blogs/public/favicon.ico
--------------------------------------------------------------------------------
/10-tic-tac-toe/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/10-tic-tac-toe/public/favicon.ico
--------------------------------------------------------------------------------
/23-loopback-mongo/.vs/VSWorkspaceState.json:
--------------------------------------------------------------------------------
1 | {
2 | "ExpandedNodes": [
3 | ""
4 | ],
5 | "PreviewInSolutionExplorer": false
6 | }
--------------------------------------------------------------------------------
/23-loopback-mongo/.vs/slnx.sqlite:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/23-loopback-mongo/.vs/slnx.sqlite
--------------------------------------------------------------------------------
/23-loopback-mongo/server/component-config.json:
--------------------------------------------------------------------------------
1 | {
2 | "loopback-component-explorer": {
3 | "mountPath": "/explorer"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/src/components/animate/variants/bounce/index.js:
--------------------------------------------------------------------------------
1 | export * from './BounceIn';
2 | export * from './BounceOut';
3 |
--------------------------------------------------------------------------------
/fmi-2023-02-fech-lab/api/users:
--------------------------------------------------------------------------------
1 | [
2 | {"username": "iproduct"},
3 | {"username": "gaeron"},
4 | {"username": "ry"}
5 | ]
6 |
--------------------------------------------------------------------------------
/fmi-2023-05-blogs-lab/src/common-types.ts:
--------------------------------------------------------------------------------
1 | export type IdType = number;
2 |
3 | export interface Identifiable {
4 | id: IdType;
5 | }
--------------------------------------------------------------------------------
/02-js-intro/js/function-prototype.js:
--------------------------------------------------------------------------------
1 |
2 | const myFunc = function(x) {
3 | return x * x;
4 | }
5 |
6 | console.log(myFunc.__proto__.bind);
--------------------------------------------------------------------------------
/05-ts-blogs-rest/dist/person.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"person.js","sourceRoot":"","sources":["../src/person.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/07-formik-example/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/07-formik-example/public/favicon.ico
--------------------------------------------------------------------------------
/07-react-refs-lab/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/07-react-refs-lab/public/favicon.ico
--------------------------------------------------------------------------------
/07-react-refs-lab/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/07-react-refs-lab/public/logo192.png
--------------------------------------------------------------------------------
/07-react-refs-lab/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/07-react-refs-lab/public/logo512.png
--------------------------------------------------------------------------------
/11-react-context/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/11-react-context/public/favicon.ico
--------------------------------------------------------------------------------
/11-react-context/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/11-react-context/public/logo192.png
--------------------------------------------------------------------------------
/11-react-context/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/11-react-context/public/logo512.png
--------------------------------------------------------------------------------
/fmi-2023-ts-todos/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2023-ts-todos/public/favicon.ico
--------------------------------------------------------------------------------
/fmi-2023-ts-todos/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2023-ts-todos/public/logo192.png
--------------------------------------------------------------------------------
/fmi-2023-ts-todos/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2023-ts-todos/public/logo512.png
--------------------------------------------------------------------------------
/fmi-2024-05-ts/src/greeter.ts:
--------------------------------------------------------------------------------
1 | export function greeter(person: string) {
2 | return 'Hello, ' + person + ' from Typescript!';
3 | }
4 |
5 |
--------------------------------------------------------------------------------
/fmi-2025-02-es6/users.json:
--------------------------------------------------------------------------------
1 | [
2 | {"username": "iproduct"},
3 | {"username": "$$$$$$$$rrrrrrrrr"},
4 | {"username": "gaearon"}
5 | ]
--------------------------------------------------------------------------------
/04-es6-demo/app/assets/img/my-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/04-es6-demo/app/assets/img/my-logo.png
--------------------------------------------------------------------------------
/04-ts-intro-lab/src/common-types.ts:
--------------------------------------------------------------------------------
1 |
2 | export type IdType = number | undefined;
3 |
4 | export interface Identifiable {
5 | id: IdType;
6 | }
--------------------------------------------------------------------------------
/04-ts-intro/dist/repository.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"repository.js","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/05-nodejs-demo/readableEvent.js:
--------------------------------------------------------------------------------
1 | process.stdin.on('readable', function () {
2 | var buf = process.stdin.read();
3 | console.dir(buf);
4 | });
--------------------------------------------------------------------------------
/06-react-blogs/public/images/office.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/06-react-blogs/public/images/office.jpg
--------------------------------------------------------------------------------
/06-react-router-lab4/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/06-react-router-lab4/public/favicon.ico
--------------------------------------------------------------------------------
/06-react-router-lab4/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/06-react-router-lab4/public/logo192.png
--------------------------------------------------------------------------------
/06-react-router-lab4/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/06-react-router-lab4/public/logo512.png
--------------------------------------------------------------------------------
/07-react-refs-lab4/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/07-react-refs-lab4/public/favicon.ico
--------------------------------------------------------------------------------
/07-react-refs-lab4/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/07-react-refs-lab4/public/logo192.png
--------------------------------------------------------------------------------
/07-react-refs-lab4/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/07-react-refs-lab4/public/logo512.png
--------------------------------------------------------------------------------
/08-react-blogs-mui/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/08-react-blogs-mui/public/favicon.ico
--------------------------------------------------------------------------------
/08-react-blogs-mui/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/08-react-blogs-mui/public/logo192.png
--------------------------------------------------------------------------------
/08-react-blogs-mui/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/08-react-blogs-mui/public/logo512.png
--------------------------------------------------------------------------------
/08-redux-simple-demo/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/08-redux-simple-demo/public/favicon.ico
--------------------------------------------------------------------------------
/08-redux-simple-demo/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/08-redux-simple-demo/public/logo192.png
--------------------------------------------------------------------------------
/08-redux-simple-demo/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/08-redux-simple-demo/public/logo512.png
--------------------------------------------------------------------------------
/08-redux-simple-lab4/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/08-redux-simple-lab4/public/favicon.ico
--------------------------------------------------------------------------------
/08-redux-simple-lab4/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/08-redux-simple-lab4/public/logo192.png
--------------------------------------------------------------------------------
/08-redux-simple-lab4/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/08-redux-simple-lab4/public/logo512.png
--------------------------------------------------------------------------------
/11-router-basics-ts/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/11-router-basics-ts/public/favicon.ico
--------------------------------------------------------------------------------
/11-router-basics-ts/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/11-router-basics-ts/public/logo192.png
--------------------------------------------------------------------------------
/11-router-basics-ts/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/11-router-basics-ts/public/logo512.png
--------------------------------------------------------------------------------
/12-router-modal-lab/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-router-modal-lab/public/favicon.ico
--------------------------------------------------------------------------------
/12-router-modal-lab/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-router-modal-lab/public/logo192.png
--------------------------------------------------------------------------------
/12-router-modal-lab/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-router-modal-lab/public/logo512.png
--------------------------------------------------------------------------------
/12-routing-auth-lab/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-routing-auth-lab/public/favicon.ico
--------------------------------------------------------------------------------
/12-routing-auth-lab/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-routing-auth-lab/public/logo192.png
--------------------------------------------------------------------------------
/12-routing-auth-lab/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-routing-auth-lab/public/logo512.png
--------------------------------------------------------------------------------
/15-react-router-v4/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/15-react-router-v4/public/favicon.ico
--------------------------------------------------------------------------------
/15-react-router-v4/src/components/about.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | const About = () => (
About
);
4 |
5 | export default About;
--------------------------------------------------------------------------------
/fmi-2024-06-todos-ts/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-06-todos-ts/public/favicon.ico
--------------------------------------------------------------------------------
/fmi-2024-06-todos-ts/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-06-todos-ts/public/logo192.png
--------------------------------------------------------------------------------
/fmi-2024-06-todos-ts/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-06-todos-ts/public/logo512.png
--------------------------------------------------------------------------------
/04-ts-intro-lab/dist/common-type.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"common-type.js","sourceRoot":"","sources":["../src/common-type.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/04-ts-intro-lab/dist/model/person.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"person.js","sourceRoot":"","sources":["../../src/model/person.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/04-ts-intro/dist/model/person.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"person.js","sourceRoot":"","sources":["../../src/model/person.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/04-ts-intro/dist/shared-types.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"shared-types.js","sourceRoot":"","sources":["../src/shared-types.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/05-mybooks-router-lab4/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/05-mybooks-router-lab4/public/favicon.ico
--------------------------------------------------------------------------------
/05-mybooks-router-lab4/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/05-mybooks-router-lab4/public/logo192.png
--------------------------------------------------------------------------------
/05-mybooks-router-lab4/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/05-mybooks-router-lab4/public/logo512.png
--------------------------------------------------------------------------------
/05-react-router-demos/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/05-react-router-demos/public/favicon.ico
--------------------------------------------------------------------------------
/05-react-router-demos/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/05-react-router-demos/public/logo192.png
--------------------------------------------------------------------------------
/05-react-router-demos/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/05-react-router-demos/public/logo512.png
--------------------------------------------------------------------------------
/05-ts-blogs-rest/dist/repository.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"repository.js","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/06-nodejs-api-articles/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/06-nodejs-api-articles/public/favicon.ico
--------------------------------------------------------------------------------
/07-react-context-lab4/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/07-react-context-lab4/public/favicon.ico
--------------------------------------------------------------------------------
/07-react-context-lab4/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/07-react-context-lab4/public/logo192.png
--------------------------------------------------------------------------------
/07-react-context-lab4/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/07-react-context-lab4/public/logo512.png
--------------------------------------------------------------------------------
/08-react-blogs-mui/public/img/paella.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/08-react-blogs-mui/public/img/paella.jpg
--------------------------------------------------------------------------------
/12-blogs-react-client/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-blogs-react-client/public/favicon.ico
--------------------------------------------------------------------------------
/12-blogs-react-client/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-blogs-react-client/public/logo192.png
--------------------------------------------------------------------------------
/12-blogs-react-client/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-blogs-react-client/public/logo512.png
--------------------------------------------------------------------------------
/12-react-demo-sqlite-custom-form/src/app.js:
--------------------------------------------------------------------------------
1 | import './05-comment-form-uncontrolled-async-delete/comment-demo';
2 | import './assets/css/custom.css';
3 |
--------------------------------------------------------------------------------
/12-react-router-demos/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-react-router-demos/public/favicon.ico
--------------------------------------------------------------------------------
/12-react-router-demos/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-react-router-demos/public/logo192.png
--------------------------------------------------------------------------------
/12-react-router-demos/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-react-router-demos/public/logo512.png
--------------------------------------------------------------------------------
/15-react-router-v4/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "experimentalDecorators": true,
4 | "allowJs": true
5 | }
6 | }
--------------------------------------------------------------------------------
/16-react-todos-redux/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "experimentalDecorators": true,
4 | "allowJs": true
5 | }
6 | }
--------------------------------------------------------------------------------
/18-react-router-redux/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/18-react-router-redux/public/favicon.ico
--------------------------------------------------------------------------------
/18-react-router-redux/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "experimentalDecorators": true,
4 | "allowJs": true
5 | }
6 | }
--------------------------------------------------------------------------------
/fmi-2023-05-blogs-lab/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2023-05-blogs-lab/public/favicon.ico
--------------------------------------------------------------------------------
/fmi-2023-05-blogs-lab/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2023-05-blogs-lab/public/logo192.png
--------------------------------------------------------------------------------
/fmi-2023-05-blogs-lab/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2023-05-blogs-lab/public/logo512.png
--------------------------------------------------------------------------------
/fmi-2023-ruoter-ts-lab/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2023-ruoter-ts-lab/public/favicon.ico
--------------------------------------------------------------------------------
/fmi-2023-ruoter-ts-lab/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2023-ruoter-ts-lab/public/logo192.png
--------------------------------------------------------------------------------
/fmi-2023-ruoter-ts-lab/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2023-ruoter-ts-lab/public/logo512.png
--------------------------------------------------------------------------------
/fmi-2025-07-react-books-ts/src/index.css:
--------------------------------------------------------------------------------
1 |
2 | .icon-block {
3 | padding: 0 15px;
4 | }
5 | .icon-block .material-icons {
6 | font-size: inherit;
7 | }
--------------------------------------------------------------------------------
/fmi-2025-07-react-client-face-recog/src/components/FaceRecognition/FaceRecognition.css:
--------------------------------------------------------------------------------
1 | #canvas {
2 | /* display: none; */
3 | widht: 300px;
4 | }
--------------------------------------------------------------------------------
/02-js-intro/js/async-timeout.js:
--------------------------------------------------------------------------------
1 | let x = 5;
2 | setTimeout(() => {
3 | debugger;
4 | console.log('world');
5 | }, 1000);
6 | console.log('hello', x);
--------------------------------------------------------------------------------
/04-ts-intro-lab/dist/common-types.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"common-types.js","sourceRoot":"","sources":["../src/common-types.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/05-ts-blogs-rest/dist/model/person.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"person.js","sourceRoot":"","sources":["../../src/model/person.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/05-ts-blogs-rest/dist/shared-types.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"shared-types.js","sourceRoot":"","sources":["../src/shared-types.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/12-blogs-react-client/public/img/reading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-blogs-react-client/public/img/reading.png
--------------------------------------------------------------------------------
/12-roter-lazy-loading-lab/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-roter-lazy-loading-lab/public/favicon.ico
--------------------------------------------------------------------------------
/12-roter-lazy-loading-lab/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-roter-lazy-loading-lab/public/logo192.png
--------------------------------------------------------------------------------
/12-roter-lazy-loading-lab/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-roter-lazy-loading-lab/public/logo512.png
--------------------------------------------------------------------------------
/fmi-2022-01-react-intro/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-01-react-intro/public/favicon.ico
--------------------------------------------------------------------------------
/fmi-2022-01-react-intro/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-01-react-intro/public/logo192.png
--------------------------------------------------------------------------------
/fmi-2022-01-react-intro/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-01-react-intro/public/logo512.png
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-03-react-todos/public/favicon.ico
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-03-react-todos/public/logo192.png
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-03-react-todos/public/logo512.png
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/favicon.ico
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/logo192.png
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/logo512.png
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/src/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "printWidth": 100,
3 | "singleQuote": true,
4 | "trailingComma": "none",
5 | "tabWidth": 2
6 | }
7 |
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/src/components/animate/index.js:
--------------------------------------------------------------------------------
1 | export * from './variants';
2 | export { default as MotionContainer } from './MotionContainer';
3 |
--------------------------------------------------------------------------------
/fmi-2022-05-react-todos/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-05-react-todos/public/favicon.ico
--------------------------------------------------------------------------------
/fmi-2022-06-basic-redux/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-06-basic-redux/public/favicon.ico
--------------------------------------------------------------------------------
/fmi-2022-06-basic-redux/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-06-basic-redux/public/logo192.png
--------------------------------------------------------------------------------
/fmi-2022-06-basic-redux/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-06-basic-redux/public/logo512.png
--------------------------------------------------------------------------------
/fmi-2024-01-react-todos/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-01-react-todos/public/favicon.ico
--------------------------------------------------------------------------------
/fmi-2024-01-react-todos/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-01-react-todos/public/logo192.png
--------------------------------------------------------------------------------
/fmi-2024-01-react-todos/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-01-react-todos/public/logo512.png
--------------------------------------------------------------------------------
/fmi-2024-05-ts/dist/shared-types.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"shared-types.js","sourceRoot":"","sources":["../src/shared-types.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2025-react-router-v7/public/favicon.ico
--------------------------------------------------------------------------------
/04-es6-simple-demo/app/assets/img/my-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/04-es6-simple-demo/app/assets/img/my-logo.png
--------------------------------------------------------------------------------
/05-mybooks-router-lab4/public/img/reading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/05-mybooks-router-lab4/public/img/reading.png
--------------------------------------------------------------------------------
/06-myblogs-rest-ts/dist/shared-types.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"shared-types.js","sourceRoot":"","sources":["../src/shared-types.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/fmi-2024-04-fetch/users.json:
--------------------------------------------------------------------------------
1 | [
2 | {"username": "iproduct"},
3 | {"username": "ry"},
4 | {"username": "gaeron"},
5 | {"username": "mhevery"}
6 | ]
--------------------------------------------------------------------------------
/fmi-2024-07-react-blogs-ts/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-07-react-blogs-ts/public/favicon.ico
--------------------------------------------------------------------------------
/fmi-2024-07-react-blogs-ts/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-07-react-blogs-ts/public/logo192.png
--------------------------------------------------------------------------------
/fmi-2024-07-react-blogs-ts/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-07-react-blogs-ts/public/logo512.png
--------------------------------------------------------------------------------
/fmi-2024-08-react-refs-lab/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-08-react-refs-lab/public/favicon.ico
--------------------------------------------------------------------------------
/fmi-2024-08-react-refs-lab/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-08-react-refs-lab/public/logo192.png
--------------------------------------------------------------------------------
/fmi-2024-08-react-refs-lab/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-08-react-refs-lab/public/logo512.png
--------------------------------------------------------------------------------
/fmi-2025-07-react-books-ts/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2025-07-react-books-ts/public/favicon.ico
--------------------------------------------------------------------------------
/04-ts-intro/dist/model/id-generator.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"id-generator.js","sourceRoot":"","sources":["../../src/model/id-generator.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/06-react-blogs/src/component/PostForm.css:
--------------------------------------------------------------------------------
1 | .PostForm-button-panel{
2 | padding: 50px;
3 | }
4 |
5 | .PostForm-button-panel button {
6 | margin: 10px 50px;
7 | }
--------------------------------------------------------------------------------
/09-react-todos-lab/src/app/assets/img/my-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/09-react-todos-lab/src/app/assets/img/my-logo.png
--------------------------------------------------------------------------------
/11-react-demo-sqlite/comments-api/comments.sqlite:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/11-react-demo-sqlite/comments-api/comments.sqlite
--------------------------------------------------------------------------------
/14-ipt-knowledge-tester-express/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/14-ipt-knowledge-tester-express/app/favicon.ico
--------------------------------------------------------------------------------
/17-react-todos-redux-es7-decorator/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "experimentalDecorators": true,
4 | "allowJs": true
5 | }
6 | }
--------------------------------------------------------------------------------
/23-loopback-mongo/.vs/23-loopback-mongo/v15/.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/23-loopback-mongo/.vs/23-loopback-mongo/v15/.suo
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/preview.png
--------------------------------------------------------------------------------
/fmi-2024-05-ts/dist/greeter.js:
--------------------------------------------------------------------------------
1 | export function greeter(person) {
2 | return 'Hello, ' + person + ' from Typescript!';
3 | }
4 | //# sourceMappingURL=greeter.js.map
--------------------------------------------------------------------------------
/fmi-2024-09-react-context-ts/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-09-react-context-ts/public/favicon.ico
--------------------------------------------------------------------------------
/fmi-2024-09-react-context-ts/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-09-react-context-ts/public/logo192.png
--------------------------------------------------------------------------------
/fmi-2024-09-react-context-ts/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-09-react-context-ts/public/logo512.png
--------------------------------------------------------------------------------
/fmi-2024-10-react-routing-ts/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-10-react-routing-ts/public/favicon.ico
--------------------------------------------------------------------------------
/fmi-2024-10-react-routing-ts/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-10-react-routing-ts/public/logo192.png
--------------------------------------------------------------------------------
/fmi-2024-10-react-routing-ts/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2024-10-react-routing-ts/public/logo512.png
--------------------------------------------------------------------------------
/02-js-design-patterns/css/canvas.css:
--------------------------------------------------------------------------------
1 | #canvas {
2 | border: 1px dotted blue;
3 | }
4 | #image_container, #image_container img {
5 | display: none;
6 | }
7 |
8 |
--------------------------------------------------------------------------------
/05-ts-blogs-rest/dist/model/id-generator.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"id-generator.js","sourceRoot":"","sources":["../../src/model/id-generator.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/06-myblogs-rest-ts/dist/state-store.js:
--------------------------------------------------------------------------------
1 | export const AppStateStore = {
2 | editedPost: undefined,
3 | allPosts: []
4 | };
5 | //# sourceMappingURL=state-store.js.map
--------------------------------------------------------------------------------
/08-react-blogs-mui/src/shared/constants.ts:
--------------------------------------------------------------------------------
1 | export const CARD_CONTENT_HEIGHT = 370;
2 | export const CARD_CONTENT_WIDTH = 350;
3 | export const MAX_SUMMARY_LENGTH = 150;
4 |
--------------------------------------------------------------------------------
/11-react-demo-sqlite/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "browser": true,
3 | "camelcase": false,
4 | "esnext": true,
5 | "indent": 2,
6 | "latedef": false,
7 | "newcap": true
8 | }
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/favicon/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/favicon/favicon.ico
--------------------------------------------------------------------------------
/fmi-2025-03-ts-intro/src/model/credentials.ts:
--------------------------------------------------------------------------------
1 | export class Credentials {
2 | constructor(
3 | public email: string,
4 | public password: string){}
5 | }
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7-dataload/src/routes/Home.tsx:
--------------------------------------------------------------------------------
1 |
2 |
3 | const Home = () => {
4 | return (
5 | Home View
6 | )
7 | }
8 |
9 | export default Home;
--------------------------------------------------------------------------------
/09-express-blog-jwt-lab3/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | /.env
3 |
4 | # production
5 | /build
6 |
7 | # misc
8 | npm-debug.log*
9 | yarn-debug.log*
10 | yarn-error.log*
--------------------------------------------------------------------------------
/09-react-lab-a/src/polyfills.js:
--------------------------------------------------------------------------------
1 | import 'babel-polyfill';
2 |
3 | if (process.env.ENV === 'production') {
4 | // Production
5 | } else {
6 | // Development and test
7 | }
8 |
--------------------------------------------------------------------------------
/09-react-lab-b/src/polyfills.js:
--------------------------------------------------------------------------------
1 | import 'babel-polyfill';
2 |
3 | if (process.env.ENV === 'production') {
4 | // Production
5 | } else {
6 | // Development and test
7 | }
8 |
--------------------------------------------------------------------------------
/09-react-todos/src/app/assets/images/react-redux.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/09-react-todos/src/app/assets/images/react-redux.png
--------------------------------------------------------------------------------
/09-react-todos/src/polyfills.js:
--------------------------------------------------------------------------------
1 | import 'babel-polyfill';
2 |
3 | if (process.env.ENV === 'production') {
4 | // Production
5 | } else {
6 | // Development and test
7 | }
8 |
--------------------------------------------------------------------------------
/fmi-2023-04-ts-lab/src/common.ts:
--------------------------------------------------------------------------------
1 | export type IdType = number;
2 |
3 | export interface Identifiable {
4 | id: IdType;
5 | }
6 |
7 | export type Optional = T | undefined;
--------------------------------------------------------------------------------
/fmi-2023-05-blogs-lab/src/AppFunction.css:
--------------------------------------------------------------------------------
1 | .App-root {
2 | display: flex;
3 | flex-flow: column nowrap;
4 | justify-content: center;
5 | align-items: center;
6 | }
--------------------------------------------------------------------------------
/fmi-2024-05-ts/src/shared-types.ts:
--------------------------------------------------------------------------------
1 | export type IdType = number;
2 |
3 | export interface Identifiable {
4 | id: K;
5 | }
6 |
7 | export type Optional = V | undefined;
--------------------------------------------------------------------------------
/09-react-todos-lab/src/polyfills.js:
--------------------------------------------------------------------------------
1 | import 'babel-polyfill';
2 |
3 | if (process.env.ENV === 'production') {
4 | // Production
5 | } else {
6 | // Development and test
7 | }
8 |
--------------------------------------------------------------------------------
/14-ipt-knowledge-tester-express/app/assets/img/test.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/14-ipt-knowledge-tester-express/app/assets/img/test.png
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/public/webfonts/fa-solid-900.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-03-react-todos/public/webfonts/fa-solid-900.ttf
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/favicon/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/favicon/favicon-16x16.png
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/favicon/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/favicon/favicon-32x32.png
--------------------------------------------------------------------------------
/fmi-2024-06-todos-ts/src/shared-types.ts:
--------------------------------------------------------------------------------
1 | export type IdType = number;
2 |
3 | export interface Identifiable {
4 | id: K;
5 | }
6 |
7 | export type Optional = V | undefined;
--------------------------------------------------------------------------------
/fmi-2025-02-es6/js/github-async.js:
--------------------------------------------------------------------------------
1 | import { fetchGitAsync } from "./fetch-git-async.js";
2 |
3 | const resultsDiv = document.getElementById("results");
4 | fetchGitAsync(resultsDiv)
--------------------------------------------------------------------------------
/fmi-2025-09-context/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/01-react-todos/src/HelloFunc.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | export default (props) =>
4 | (
5 |
Hello, {props.name}
6 | );
--------------------------------------------------------------------------------
/09-react-todos/src/app/containers/hello.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | export default () => (
4 | Hello from React Hot Loader for Webpack!
5 | );
6 |
--------------------------------------------------------------------------------
/12-react-demo-sqlite-custom-form/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "browser": true,
3 | "camelcase": false,
4 | "esnext": true,
5 | "indent": 2,
6 | "latedef": false,
7 | "newcap": true
8 | }
--------------------------------------------------------------------------------
/14-ipt-knowledge-tester-express/app/assets/img/ipt-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/14-ipt-knowledge-tester-express/app/assets/img/ipt-logo.png
--------------------------------------------------------------------------------
/16-react-todos-redux/src/app/assets/images/react-redux.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/16-react-todos-redux/src/app/assets/images/react-redux.png
--------------------------------------------------------------------------------
/16-react-todos-redux/src/polyfills.js:
--------------------------------------------------------------------------------
1 | import 'babel-polyfill';
2 |
3 | if (process.env.ENV === 'production') {
4 | // Production
5 | } else {
6 | // Development and test
7 | }
8 |
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/public/webfonts/fa-brands-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-03-react-todos/public/webfonts/fa-brands-400.ttf
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/public/webfonts/fa-brands-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-03-react-todos/public/webfonts/fa-brands-400.woff2
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/public/webfonts/fa-regular-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-03-react-todos/public/webfonts/fa-regular-400.ttf
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/public/webfonts/fa-solid-900.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-03-react-todos/public/webfonts/fa-solid-900.woff2
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/src/components/TodoList.css:
--------------------------------------------------------------------------------
1 | .TodoList-items {
2 | display: flex;
3 | flex-direction: column;
4 | align-self: center;
5 | list-style-type: none;
6 | }
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/favicon/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/favicon/apple-touch-icon.png
--------------------------------------------------------------------------------
/fmi-2024-06-todos-ts/src/todo-api-client.ts:
--------------------------------------------------------------------------------
1 | import { ApiClient } from "./api-client";
2 |
3 | const API = new ApiClient("http://localhost:9000"); // Singleton
4 |
5 | export default API;
--------------------------------------------------------------------------------
/fmi-2024-12-nodejs/src/01-dns.ts:
--------------------------------------------------------------------------------
1 | import * as dns from 'dns';
2 |
3 | const domain = 'yahoo.com';
4 |
5 | dns.resolve(domain, (err, addresses) => {
6 | console.log(addresses);
7 | })
--------------------------------------------------------------------------------
/fmi-2025-06-react-todos-ts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/fmi-2025-07-react-books-ts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/fmi-2025-07-react-client-face-recog/src/components/PostForm/PostForm.css:
--------------------------------------------------------------------------------
1 | .PostForm-butons {
2 | padding: 10px;
3 | }
4 |
5 | .PostForm-butons button {
6 | margin-right: 10px;
7 | }
--------------------------------------------------------------------------------
/fmi-2025-08-react-refs-ts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7/app/routes.ts:
--------------------------------------------------------------------------------
1 | import { type RouteConfig, index } from "@react-router/dev/routes";
2 |
3 | export default [index("routes/home.tsx")] satisfies RouteConfig;
4 |
--------------------------------------------------------------------------------
/05-ts-blogs-rest/src/index.ts:
--------------------------------------------------------------------------------
1 | import { BlogsController } from './controller/blogs-controller.js';
2 |
3 | const blogsController = new BlogsController();
4 | blogsController.init();
5 |
6 |
--------------------------------------------------------------------------------
/07-react-context-lab4/src/user-context.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | // Signed-in user context
4 | export const UserContext = React.createContext({
5 | name: 'Guest',
6 | });
7 |
--------------------------------------------------------------------------------
/09-react-lab-a/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | React TODOs Demo
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/09-react-lab-b/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | React TODOs Demo
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/09-react-todos-lab/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | React TODOs Demo
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/12-react-demo-sqlite-custom-form/comments-api/comments.sqlite:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/12-react-demo-sqlite-custom-form/comments-api/comments.sqlite
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/public/webfonts/fa-regular-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-03-react-todos/public/webfonts/fa-regular-400.woff2
--------------------------------------------------------------------------------
/fmi-2022-05-react-todos/src/HelloFunc.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | export default (props) =>
4 | (
5 |
Hello, {props.name}
6 | );
--------------------------------------------------------------------------------
/fmi-2024-11-node-ts-lab/src/01-dns.ts:
--------------------------------------------------------------------------------
1 | import * as dns from 'dns';
2 |
3 | const domain = 'yaho0.com';
4 |
5 | dns.resolve(domain, (err, addresses) => {
6 | console.log(addresses);
7 | })
--------------------------------------------------------------------------------
/fmi-2025-03-ts-intro/src/common/common-types.ts:
--------------------------------------------------------------------------------
1 | export type IdType = number
2 |
3 | export interface Identifiable {
4 | id: IdType
5 | }
6 |
7 | export type Optional = T | undefined
--------------------------------------------------------------------------------
/12-react-demo-sqlite-custom-form/src/polyfills.js:
--------------------------------------------------------------------------------
1 | import "babel-polyfill";
2 |
3 | if (process.env.ENV === 'production') {
4 | // Production
5 | } else {
6 | // Development and test
7 | }
8 |
--------------------------------------------------------------------------------
/15-react-router-v4/src/app.css:
--------------------------------------------------------------------------------
1 | .navbar-form, .navbar-form button {
2 | display: inline-block;
3 | }
4 |
5 | .navbar-right {
6 | float: right;
7 | padding-right: 20px
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/17-react-todos-redux-es7-decorator/src/polyfills.js:
--------------------------------------------------------------------------------
1 | import 'babel-polyfill';
2 |
3 | if (process.env.ENV === 'production') {
4 | // Production
5 | } else {
6 | // Development and test
7 | }
8 |
--------------------------------------------------------------------------------
/23-loopback-mongo/server/boot/authentication.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = function enableAuthentication(server) {
4 | // enable authentication
5 | server.enableAuth();
6 | };
7 |
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/public/webfonts/fa-v4compatibility.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-03-react-todos/public/webfonts/fa-v4compatibility.ttf
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/public/webfonts/fa-v4compatibility.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-03-react-todos/public/webfonts/fa-v4compatibility.woff2
--------------------------------------------------------------------------------
/fmi-2024-07-react-blogs-ts/src/shared/shared-types.ts:
--------------------------------------------------------------------------------
1 | export type IdType = number;
2 |
3 | export interface Identifiable {
4 | id: K;
5 | }
6 |
7 | export type Optional = V | undefined;
--------------------------------------------------------------------------------
/fmi-2025-06-react-todos-ts/src/component/TodoItem.css:
--------------------------------------------------------------------------------
1 | .TodoItem-card {
2 | display: flex;
3 | flex-flow: row wrap;
4 | justify-content: space-between;
5 | padding: 10px 5px;
6 | }
--------------------------------------------------------------------------------
/fmi-2025-07-react-client-face-recog/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/fmi-2025-10-react-router-declarative/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7-dataload/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/06-nodejs-api-articles/articles-api/article-model.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = class Article {
4 | constructor(id, text) {
5 | this.id = id;
6 | this.text = text;
7 | }
8 | }
--------------------------------------------------------------------------------
/11-router-basics-ts/src/pages/RootPage.css:
--------------------------------------------------------------------------------
1 | .RootPage-container {
2 | padding: 30px;
3 | }
4 |
5 | .RootPage-container .active {
6 | color: white;
7 | background-color: cornflowerblue;
8 | }
--------------------------------------------------------------------------------
/16-react-todos-redux/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["es2015", "react", "stage-0"],
3 | "plugins": [
4 | "babel-plugin-transform-decorators-legacy",
5 | "babel-plugin-transform-decorators"]
6 | }
--------------------------------------------------------------------------------
/18-react-router-redux/src/app.css:
--------------------------------------------------------------------------------
1 | .navbar-form, .navbar-form button {
2 | display: inline-block;
3 | }
4 |
5 | .navbar-right {
6 | float: right;
7 | padding-right: 20px
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/favicon/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/favicon/android-chrome-192x192.png
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/favicon/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/favicon/android-chrome-512x512.png
--------------------------------------------------------------------------------
/fmi-2022-05-react-todos/src/About.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | export const About = ({application}) => {
4 | return (
5 | About the {application} application ...
6 | )
7 | }
8 |
--------------------------------------------------------------------------------
/fmi-2022-05-react-todos/src/NotFound.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | export const NotFound = () => {
4 | return (
5 | We do not have what you are looking for ...
6 | )
7 | }
8 |
--------------------------------------------------------------------------------
/fmi-2024-12-nodejs/src/01-dns-promises.ts:
--------------------------------------------------------------------------------
1 | import * as dns from 'dns/promises';
2 |
3 | const domain = 'yahoo.com';
4 |
5 | dns.resolve(domain).then(addresses => {
6 | console.log(addresses);
7 | })
--------------------------------------------------------------------------------
/fmi-2025-03-ts-intro/dist/model/credentials.js:
--------------------------------------------------------------------------------
1 | export class Credentials {
2 | constructor(email, password) {
3 | this.email = email;
4 | this.password = password;
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/06-react-blogs/src/component/Post.css:
--------------------------------------------------------------------------------
1 | .row .col.Post-card-wrapper {
2 | padding: 0px;
3 | }
4 | .Post-card {
5 | margin: 5px;
6 | }
7 | .card .card-image img.Post-image {
8 | height: 300px;
9 | }
--------------------------------------------------------------------------------
/06-react-blogs/src/component/PostDetail.css:
--------------------------------------------------------------------------------
1 | .PostDetail-card {
2 | margin: 5px;
3 | }
4 | .card .card-image img.PostDetail-image {
5 | height: 500px;
6 | max-width: 100%;
7 | width: auto;
8 | }
--------------------------------------------------------------------------------
/14-ipt-knowledge-tester-express/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "browser": true,
3 | "node": true,
4 | "camelcase": false,
5 | "esnext": true,
6 | "indent": 2,
7 | "latedef": false,
8 | "newcap": true
9 | }
--------------------------------------------------------------------------------
/15-react-router-v4/src/components/hocs.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | export const withParams = (Component, properties) => {
3 | return props => ();
4 | }
5 |
--------------------------------------------------------------------------------
/18-react-router-redux/src/components/about.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { connect } from 'react-redux';
3 |
4 | const About = () => (About
);
5 |
6 | export default connect()(About);
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_1.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_10.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_11.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_12.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_13.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_14.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_15.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_15.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_16.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_17.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_17.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_18.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_18.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_19.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_19.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_2.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_20.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_20.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_21.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_21.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_22.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_22.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_23.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_23.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_24.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_24.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_3.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_4.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_5.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_6.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_7.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_8.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/covers/cover_9.jpg
--------------------------------------------------------------------------------
/fmi-2024-11-node-ts-lab/src/01-dns-promises.ts:
--------------------------------------------------------------------------------
1 | import * as dns from 'dns/promises';
2 |
3 | const domain = 'yahoo.com';
4 |
5 | dns.resolve(domain).then(addresses => {
6 | console.log(addresses);
7 | })
--------------------------------------------------------------------------------
/09-node-ts/src/08-stream-stdout.ts:
--------------------------------------------------------------------------------
1 | import { Readable } from 'node:stream';
2 |
3 | var rs = new Readable();
4 | rs.pipe(process.stdout);
5 | rs.push('beep ');
6 | rs.push('boop\n');
7 | rs.push(null);
8 |
9 |
--------------------------------------------------------------------------------
/09-nodejs-lab4/example01c.js:
--------------------------------------------------------------------------------
1 | // process.env.foo = 'bar';
2 | console.log(process.env.foo);
3 |
4 | // print process.argv
5 | process.argv.forEach((val, index) => {
6 | console.log(`${index}: ${val}`);
7 | });
--------------------------------------------------------------------------------
/12-node-ts/src/08-stream-stdout.ts:
--------------------------------------------------------------------------------
1 | import { Readable } from 'node:stream';
2 |
3 | var rs = new Readable();
4 | rs.pipe(process.stdout);
5 | rs.push('beep ');
6 | rs.push('boop\n');
7 | rs.push(null);
8 |
9 |
--------------------------------------------------------------------------------
/14-ipt-knowledge-tester-express/app/components/views/main/no-match.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | export default React.createClass({
4 | render() {
5 | return NoMatch
6 | }
7 | })
8 |
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_1.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_10.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_11.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_12.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_13.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_14.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_15.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_15.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_16.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_17.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_17.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_18.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_18.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_19.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_19.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_2.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_20.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_20.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_21.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_21.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_22.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_22.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_23.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_23.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_24.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_24.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_3.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_4.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_5.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_6.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_7.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_8.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_9.jpg
--------------------------------------------------------------------------------
/fmi-2024-13-express-lab/src/model/web-error.ts:
--------------------------------------------------------------------------------
1 | export class WebError extends Error {
2 | constructor(public status: number, public message: string, public error?: string) {
3 | super();
4 | }
5 | }
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7-dataload/src/components/LoadingIndicator.tsx:
--------------------------------------------------------------------------------
1 |
2 | const LoadingIndicator = () => {
3 | return (
4 | Loading data ...
5 | )
6 | }
7 |
8 | export default LoadingIndicator
--------------------------------------------------------------------------------
/05-ts-blogs-rest/dist/index.js:
--------------------------------------------------------------------------------
1 | import { BlogsController } from './controller/blogs-controller.js';
2 | const blogsController = new BlogsController();
3 | blogsController.init();
4 | //# sourceMappingURL=index.js.map
--------------------------------------------------------------------------------
/11-router-basics-ts/src/model/contact.ts:
--------------------------------------------------------------------------------
1 | export interface Contact {
2 | first: string;
3 | last: string;
4 | avatar: string;
5 | twitter: string;
6 | notes: string;
7 | favorite: boolean;
8 | };
--------------------------------------------------------------------------------
/17-react-todos-redux-es7-decorator/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["es2015", "react", "stage-0"],
3 | "plugins": [
4 | "babel-plugin-transform-decorators-legacy",
5 | "babel-plugin-transform-decorators"]
6 | }
--------------------------------------------------------------------------------
/17-react-todos-redux-es7-decorator/src/app/assets/images/react-redux.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/17-react-todos-redux-es7-decorator/src/app/assets/images/react-redux.png
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/illustrations/illustration_login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/illustrations/illustration_login.png
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_1.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_10.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_11.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_12.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_13.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_14.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_15.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_15.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_16.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_17.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_17.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_18.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_18.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_19.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_19.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_2.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_20.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_20.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_21.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_21.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_22.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_22.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_23.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_23.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_24.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_24.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_3.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_4.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_5.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_6.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_7.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_8.jpg
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/products/product_9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/products/product_9.jpg
--------------------------------------------------------------------------------
/fmi-2024-12-nodejs/src/08-stream-stdout.ts:
--------------------------------------------------------------------------------
1 | import { Readable } from 'node:stream';
2 |
3 | var rs = new Readable();
4 | rs.pipe(process.stdout);
5 | rs.push('beep ');
6 | rs.push('boop\n');
7 | rs.push(null);
8 |
9 |
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7-dataload/src/routes/About.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 |
4 | const About = () => {
5 | return (
6 | About View
7 | )
8 | }
9 |
10 | export default About;
--------------------------------------------------------------------------------
/05-nodejs-demo/example01.js:
--------------------------------------------------------------------------------
1 | var dns = require('dns');
2 |
3 | dns.resolve4('yahoo.com', function (err, addresses) {
4 | if (err) throw err;
5 |
6 | console.log('addresses: ' + JSON.stringify(addresses));
7 | });
8 |
9 |
--------------------------------------------------------------------------------
/06-react-blogs/src/component/TabPanel.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | export const TabPanel = ({id, title, children}) => {
4 | return (
5 | {children}
6 | )
7 | }
8 |
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/illustrations/illustration_avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/illustrations/illustration_avatar.png
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_default.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/mock-images/avatars/avatar_default.jpg
--------------------------------------------------------------------------------
/fmi-2024-05-ts/dist/greeter.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"greeter.js","sourceRoot":"","sources":["../src/greeter.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO,CAAC,MAAc;IAClC,OAAO,SAAS,GAAG,MAAM,GAAG,mBAAmB,CAAC;AACpD,CAAC"}
--------------------------------------------------------------------------------
/fmi-2025-09-context/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------
/02-js-intro/js/temp.js:
--------------------------------------------------------------------------------
1 | function getComments(arr) {
2 | return arr.filter((str) => { str.match("^[[:space:]]*#[[:space:]]*") }).join("
");
3 |
4 | }
5 |
6 | console.log(getComments([' #aaaa', ' bbbbb', ' cccc#']))
--------------------------------------------------------------------------------
/05-nodejs-demo/fs1.js:
--------------------------------------------------------------------------------
1 | var fs = require("fs");
2 |
3 | fs.readFile('fs1.js', function (err, data) {
4 | if (err) return console.error(err);
5 | console.log(data.toString());
6 | });
7 |
8 | console.log("Program Ended");
--------------------------------------------------------------------------------
/05-nodejs-demo/readable1.js:
--------------------------------------------------------------------------------
1 | const Readable = require('stream').Readable;
2 |
3 | var rs = new Readable();
4 | rs.push('one\n');
5 | rs.push('two\n');
6 | rs.push('three\n');
7 | rs.push(null);
8 |
9 | rs.pipe(process.stdout);
--------------------------------------------------------------------------------
/07-react-refs-lab/src/components/FancyButton.css:
--------------------------------------------------------------------------------
1 | .FancyButton {
2 | background-color:cornflowerblue;
3 | color: white;
4 | border: 1px solid rgb(13, 83, 214);
5 | border-radius: 10px;
6 | padding: 15px;
7 | }
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/public/static/illustrations/illustration_register.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iproduct/course-node-express-react/HEAD/fmi-2022-04-react-blogs/public/static/illustrations/illustration_register.png
--------------------------------------------------------------------------------
/fmi-2024-08-react-refs-lab/src/FancyButton.css:
--------------------------------------------------------------------------------
1 | .FancyButton {
2 | background-color:cornflowerblue;
3 | color: white;
4 | border: 1px solid rgb(13, 83, 214);
5 | border-radius: 10px;
6 | padding: 15px;
7 | }
--------------------------------------------------------------------------------
/fmi-2025-01-react-todos/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------
/fmi-2025-03-ts-intro/dist/util/idgen.js:
--------------------------------------------------------------------------------
1 | export class NumberIdGenrator {
2 | constructor(nextId = 0) {
3 | this.nextId = nextId;
4 | }
5 | getNextId() {
6 | return ++this.nextId;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/fmi-2025-13-mongo/nodemon.json:
--------------------------------------------------------------------------------
1 | {
2 | "watch": [
3 | "src"
4 | ],
5 | "ext": "ts,json",
6 | "ignore": [
7 | "src/**/*.spec.ts"
8 | ],
9 | "exec": "ts-node ./src/server03.ts"
10 | }
--------------------------------------------------------------------------------
/04-simple/src/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import './App.css';
3 | import {Counter} from './Counter'
4 |
5 | function App() {
6 | return (
7 |
8 | );
9 | }
10 |
11 | export default App;
12 |
--------------------------------------------------------------------------------
/09-react-todos-lab/src/app/assets/css/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | parser: 'postcss-scss',
3 | plugins: {
4 | 'postcss-import': {},
5 | 'postcss-cssnext': {},
6 | 'cssnano': {}
7 | }
8 | }
--------------------------------------------------------------------------------
/11-react-context/src/user-context.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | // Signed-in user context
4 | export const UserContext = React.createContext({
5 | name: 'Guest',
6 | });
7 | UserContext.displayName = 'UserContext';
8 |
--------------------------------------------------------------------------------
/fmi-2023-ruoter-ts-lab/src/AboutUs.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | type Props = {}
4 |
5 | const AboutUs = (props: Props) => {
6 | return (
7 | About Us
8 | )
9 | }
10 |
11 | export default AboutUs;
--------------------------------------------------------------------------------
/fmi-2024-13-express-lab/nodemon.json:
--------------------------------------------------------------------------------
1 | {
2 | "watch": [
3 | "src"
4 | ],
5 | "ext": "ts,json",
6 | "ignore": [
7 | "src/**/*.spec.ts"
8 | ],
9 | "exec": "ts-node ./src/server02.ts"
10 | }
--------------------------------------------------------------------------------
/fmi-2025-06-react-todos-ts/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------
/fmi-2025-07-react-books-ts/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------
/fmi-2025-08-react-refs-ts/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------
/fmi-2025-12-express-ts/nodemon.json:
--------------------------------------------------------------------------------
1 | {
2 | "watch": [
3 | "src"
4 | ],
5 | "ext": "ts,json",
6 | "ignore": [
7 | "src/**/*.spec.ts"
8 | ],
9 | "exec": "ts-node ./src/server03.ts"
10 | }
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7-dataload/src/App.tsx:
--------------------------------------------------------------------------------
1 | import './App.css'
2 | import { Outlet } from 'react-router'
3 |
4 | function App() {
5 |
6 | return (
7 |
8 | )
9 | }
10 |
11 | export default App
12 |
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7-dataload/src/routes/NoMatch.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 |
4 | const NoMatch = () => {
5 | return (
6 | Page does not exist.
7 | )
8 | }
9 |
10 | export default NoMatch;
--------------------------------------------------------------------------------
/05-ts-blogs-rest/dist/dao/id-generator.js:
--------------------------------------------------------------------------------
1 | export class NumberIdGenerator {
2 | getNextId() {
3 | return ++NumberIdGenerator.nextId;
4 | }
5 | }
6 | NumberIdGenerator.nextId = 0;
7 | //# sourceMappingURL=id-generator.js.map
--------------------------------------------------------------------------------
/06-myblogs-rest-ts/dist/state-store.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"state-store.js","sourceRoot":"","sources":["../src/state-store.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,aAAa,GAAa;IACnC,UAAU,EAAE,SAAS;IACrB,QAAQ,EAAE,EAAE;CACf,CAAA"}
--------------------------------------------------------------------------------
/09-node-ts/nodemon.json:
--------------------------------------------------------------------------------
1 | {
2 | "watch": [
3 | "src"
4 | ],
5 | "ext": "ts,json",
6 | "ignore": [
7 | "src/**/*.spec.ts"
8 | ],
9 | "exec": "ts-node ./src/10-stream-letters-async.ts"
10 | }
--------------------------------------------------------------------------------
/12-node-ts/nodemon.json:
--------------------------------------------------------------------------------
1 | {
2 | "watch": [
3 | "src"
4 | ],
5 | "ext": "ts,json",
6 | "ignore": [
7 | "src/**/*.spec.ts"
8 | ],
9 | "exec": "ts-node ./src/10-stream-letters-async.ts"
10 | }
--------------------------------------------------------------------------------
/23-loopback-mongo/server/middleware.development.json:
--------------------------------------------------------------------------------
1 | {
2 | "final:after": {
3 | "strong-error-handler": {
4 | "params": {
5 | "debug": true,
6 | "log": true
7 | }
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/src/theme/breakpoints.js:
--------------------------------------------------------------------------------
1 | const breakpoints = {
2 | values: {
3 | xs: 0,
4 | sm: 600,
5 | md: 900,
6 | lg: 1200,
7 | xl: 1536
8 | }
9 | };
10 |
11 | export default breakpoints;
12 |
--------------------------------------------------------------------------------
/fmi-2024-12-nodejs/src/01-dns-async-await.ts:
--------------------------------------------------------------------------------
1 | import * as dns from 'dns/promises';
2 |
3 | const domain = 'yahoo.com';
4 |
5 | (async () => {
6 | const addresses = await dns.resolve(domain)
7 | console.log(addresses);
8 | })();
--------------------------------------------------------------------------------
/fmi-2025-11-node-ts/nodemon.json:
--------------------------------------------------------------------------------
1 | {
2 | "watch": [
3 | "src"
4 | ],
5 | "ext": "ts,json",
6 | "ignore": [
7 | "src/**/*.spec.ts"
8 | ],
9 | "exec": "ts-node ./src/06-http-rest-api.ts"
10 | }
--------------------------------------------------------------------------------
/todo-app/src/Hello.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | class Hello extends React.Component {
4 | render() {
5 | return Hello {this.props.name}, from React.js!
;
6 | }
7 | }
8 |
9 | export default Hello;
10 |
--------------------------------------------------------------------------------
/02-js-intro/js/functions.js:
--------------------------------------------------------------------------------
1 | function f(a, b) {
2 | a = a || 5;
3 | b = b || 10;
4 | return a + b;
5 | }
6 |
7 | function f2(a = 5, b = 10) {
8 | return a + b;
9 | }
10 |
11 | console.log(f())
12 | console.log(f2())
--------------------------------------------------------------------------------
/09-react-lab-a/src/app/hello.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | export default class Hello extends React.Component {
4 | render() {
5 | return (
6 | Hello, {this.props.name}
7 | );
8 | }
9 | }
--------------------------------------------------------------------------------
/09-react-lab-b/src/app/hello.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | export default class Hello extends React.Component {
4 | render() {
5 | return (
6 | Hello, {this.props.name}
7 | );
8 | }
9 | }
--------------------------------------------------------------------------------
/14-express-ts-lab/nodemon.json:
--------------------------------------------------------------------------------
1 | {
2 | "watch": [
3 | "src"
4 | ],
5 | "ext": "ts,json",
6 | "ignore": [
7 | "src/**/*.spec.ts"
8 | ],
9 | "exec": "ts-node ./src/04-server-express-router.ts"
10 | }
--------------------------------------------------------------------------------
/16-ts-mongo-lab/nodemon.json:
--------------------------------------------------------------------------------
1 | {
2 | "watch": [
3 | "src"
4 | ],
5 | "ext": "ts,json",
6 | "ignore": [
7 | "src/**/*.spec.ts"
8 | ],
9 | "exec": "ts-node ./src/01-mongo-connect-insert.ts"
10 | }
--------------------------------------------------------------------------------
/fmi-2024-10-react-routing-ts/src/components/Home.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | type Props = {}
4 |
5 | const Home = (props: Props) => {
6 | return (
7 | Home View
8 | )
9 | }
10 |
11 | export default Home;
--------------------------------------------------------------------------------
/fmi-2024-11-node-ts-lab/nodemon.json:
--------------------------------------------------------------------------------
1 | {
2 | "watch": [
3 | "src"
4 | ],
5 | "ext": "ts,json",
6 | "ignore": [
7 | "src/**/*.spec.ts"
8 | ],
9 | "exec": "ts-node ./src/05-http-rest-api.ts"
10 | }
--------------------------------------------------------------------------------
/fmi-2024-11-node-ts-lab/src/01-dns-async-await.ts:
--------------------------------------------------------------------------------
1 | import * as dns from 'dns/promises';
2 |
3 | const domain = 'yahoo.com';
4 |
5 | (async () => {
6 | const addresses = await dns.resolve(domain)
7 | console.log(addresses);
8 | })();
--------------------------------------------------------------------------------
/fmi-2024-15-blogs-api-express-mongo/nodemon.json:
--------------------------------------------------------------------------------
1 | {
2 | "watch": [
3 | "src"
4 | ],
5 | "ext": "ts,json",
6 | "ignore": [
7 | "src/**/*.spec.ts"
8 | ],
9 | "exec": "ts-node ./src/server.ts"
10 | }
--------------------------------------------------------------------------------
/fmi-2025-07-react-client-face-recog/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------
/fmi-2025-10-react-router-declarative/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------
/04-ts-intro-lab/dist/indexed-types.js:
--------------------------------------------------------------------------------
1 | // Type inference
2 | export const MyArray = [
3 | { name: "Alice", age: 15 },
4 | { name: "Bob", age: 23 },
5 | { name: "Eve", age: 38 },
6 | ];
7 | //
8 | //# sourceMappingURL=indexed-types.js.map
--------------------------------------------------------------------------------
/10-tic-tac-toe/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import App from './App';
4 | import './index.css';
5 |
6 | ReactDOM.render(
7 | ,
8 | document.getElementById('root')
9 | );
10 |
--------------------------------------------------------------------------------
/12-react-router-demos/src/pages/About.tsx:
--------------------------------------------------------------------------------
1 |
2 | import * as React from "react";
3 |
4 | function AboutPage() {
5 | return (
6 |
7 |
About
8 |
9 | );
10 | }
11 |
12 | export default AboutPage;
13 |
--------------------------------------------------------------------------------
/fmi-2023-ruoter-ts-lab/src/Home.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | type Props = {}
4 |
5 | const Home = (props: Props) => {
6 | return (
7 | Welcome to React Router 6.4+!
8 | )
9 | }
10 |
11 | export default Home;
--------------------------------------------------------------------------------
/fmi-2024-10-react-routing-ts/src/components/About.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | type Props = {}
4 |
5 | const About = (props: Props) => {
6 | return (
7 | About View
8 | )
9 | }
10 |
11 | export default About;
--------------------------------------------------------------------------------
/fmi-2024-12-nodejs/nodemon.json:
--------------------------------------------------------------------------------
1 | {
2 | "watch": [
3 | "src"
4 | ],
5 | "ext": "ts,json",
6 | "ignore": [
7 | "src/**/*.spec.ts"
8 | ],
9 | "exec": "ts-node ./src/07-http-server-files-streams.ts"
10 | }
--------------------------------------------------------------------------------
/01-es6-features-lab4/promises.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | GitHub Promise Demo
4 |
5 |
6 |
7 | GitHub Promise Demos
8 |
9 |
--------------------------------------------------------------------------------
/01-es6-features-lab4/test.js:
--------------------------------------------------------------------------------
1 | function f({a, b = 0} = {a: "!"}) { return [a, b] }
2 |
3 | console.log([f({a: "ok"}), f(), f({})]);
4 |
5 | let [, a, , b, ...c] = [1, 2, 3, 4, 5, 6, 7, 8, 9];
6 |
7 | const r = `${a},${b},${c}`;
8 | console.log(r)
9 |
--------------------------------------------------------------------------------
/04-ts-intro-lab/dist/dao/id-generator.js:
--------------------------------------------------------------------------------
1 | export class NumberIdGenerator {
2 | constructor() {
3 | this.nextId = 0;
4 | }
5 | getNextId() {
6 | return ++this.nextId;
7 | }
8 | }
9 | //# sourceMappingURL=id-generator.js.map
--------------------------------------------------------------------------------
/05-ts-blogs-rest/dist/index.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAC9C,eAAe,CAAC,IAAI,EAAE,CAAC"}
--------------------------------------------------------------------------------
/09-react-lab-a/src/app/helper.js:
--------------------------------------------------------------------------------
1 | import Remarkable from 'remarkable';
2 |
3 | const markdown = new Remarkable();
4 |
5 | export function getMarkdown(markdownMarkup) {
6 | return {__html: markdown.render(markdownMarkup.toString())};
7 | }
8 |
9 |
--------------------------------------------------------------------------------
/11-router-basics-ts/src/components/PostList.css:
--------------------------------------------------------------------------------
1 | .PostList {
2 | display: flex;
3 | flex-flow: row wrap;
4 | gap: 20px 20px;
5 | }
6 |
7 |
8 | .PostList .active {
9 | color: white;
10 | background-color: cornflowerblue;
11 | }
--------------------------------------------------------------------------------
/12-roter-lazy-loading-lab/src/pages/About.tsx:
--------------------------------------------------------------------------------
1 |
2 | import * as React from "react";
3 |
4 | function AboutPage() {
5 | return (
6 |
7 |
About
8 |
9 | );
10 | }
11 |
12 | export default AboutPage;
13 |
--------------------------------------------------------------------------------
/15-react-router-v4/src/components/home.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 |
3 | class Home extends Component {
4 | render() {
5 | return (
6 | Home
7 | );
8 | }
9 | }
10 |
11 | export default Home;
12 |
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/src/sections/@dashboard/user/index.js:
--------------------------------------------------------------------------------
1 | export { default as UserListHead } from './UserListHead';
2 | export { default as UserListToolbar } from './UserListToolbar';
3 | export { default as UserMoreMenu } from './UserMoreMenu';
4 |
--------------------------------------------------------------------------------
/fmi-2024-01-react-todos/src/todo-model.js:
--------------------------------------------------------------------------------
1 | export class Todo {
2 | static nextId = 0;
3 | constructor(text, status='active') {
4 | this.id = ++Todo.nextId;
5 | this.text = text;
6 | this.status = status;
7 | }
8 | }
--------------------------------------------------------------------------------
/fmi-2024-14-express-ts-lab/nodemon.json:
--------------------------------------------------------------------------------
1 | {
2 | "watch": [
3 | "src"
4 | ],
5 | "ext": "ts,json",
6 | "ignore": [
7 | "src/**/*.spec.ts"
8 | ],
9 | "exec": "ts-node ./src/04-server-express-router.ts"
10 | }
--------------------------------------------------------------------------------
/06-nodejs-api-articles/articles.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "text": "Is REST easy for you?",
4 | "id": 1494236279135
5 | },
6 | {
7 | "text": "May be better we use ExpressJS.",
8 | "id": 1495037050651
9 | }
10 | ]
--------------------------------------------------------------------------------
/06-react-blogs/src/component/PostsMain.css:
--------------------------------------------------------------------------------
1 | .PostMain {
2 | display: flex;
3 | }
4 | .PostMain-btn {
5 | width: 100%;
6 | }
7 | .PostMain-left-column {
8 | width: 30%;
9 | }
10 | .PostMain-right-column {
11 | width: 70%;
12 |
13 | }
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/src/sections/@dashboard/blog/index.js:
--------------------------------------------------------------------------------
1 | export { default as BlogPostCard } from './BlogPostCard';
2 | export { default as BlogPostsSearch } from './BlogPostsSearch';
3 | export { default as BlogPostsSort } from './BlogPostsSort';
4 |
--------------------------------------------------------------------------------
/01-es6-features-lab4/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | GitHub Promise Demo
4 |
5 |
6 |
7 | GitHub Promise Demos
8 |
9 |
--------------------------------------------------------------------------------
/09-react-todos/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | React TODOs
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/fmi-2024-10-react-routing-ts/src/components/NoMatch.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | type Props = {}
4 |
5 | const NoMatch = (props: Props) => {
6 | return (
7 | Page does not exist.
8 | )
9 | }
10 |
11 | export default NoMatch;
--------------------------------------------------------------------------------
/fmi-2024-11-node-ts-lab/todos.json:
--------------------------------------------------------------------------------
1 | [{"id":1,"text":"Implement REST server"},{"id":2,"text":"Implement GET all TODOs"},{"id":3,"text":"Implement POST new TODO"},{"id":4,"text":"Implement error handling"},{"text":"Use Postman","id":5},{"text":"Use Postman","id":6}]
--------------------------------------------------------------------------------
/fmi-2024-13-express-lab/todos.json:
--------------------------------------------------------------------------------
1 | [{"id":1,"text":"Implement REST server"},{"id":2,"text":"Implement GET all TODOs"},{"id":3,"text":"Implement POST new TODO"},{"id":4,"text":"Implement error handling"},{"text":"Use Postman","id":5},{"text":"Use Postman","id":6}]
--------------------------------------------------------------------------------
/08-redux-simple-demo/src/app/store.js:
--------------------------------------------------------------------------------
1 | import { configureStore } from '@reduxjs/toolkit';
2 | import counterReducer from '../features/counter/counterSlice';
3 |
4 | export default configureStore({
5 | reducer: {
6 | counter: counterReducer,
7 | },
8 | });
9 |
--------------------------------------------------------------------------------
/08-redux-simple-lab4/src/app/store.js:
--------------------------------------------------------------------------------
1 | import { configureStore } from '@reduxjs/toolkit';
2 | import counterReducer from '../features/counter/counterSlice';
3 |
4 | export default configureStore({
5 | reducer: {
6 | counter: counterReducer,
7 | },
8 | });
9 |
--------------------------------------------------------------------------------
/16-react-todos-redux/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | React TODOs
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/09-react-lab-b/src/app/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { render } from 'react-dom';
3 | import TodoApp from './todo-app';
4 | import { hot } from 'react-hot-loader';
5 |
6 | const root = document.getElementById('root');
7 | render(, root);
8 |
--------------------------------------------------------------------------------
/10-tic-tac-toe/src/App.test.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import App from './App';
4 |
5 | it('renders without crashing', () => {
6 | const div = document.createElement('div');
7 | ReactDOM.render(, div);
8 | });
9 |
--------------------------------------------------------------------------------
/fmi-2023-05-blogs-lab/src/services/posts-service.ts:
--------------------------------------------------------------------------------
1 | import { Post } from "../model/posts";
2 | import { Api, ApiClient } from "./api-client";
3 |
4 | export interface PostsService extends Api {}
5 |
6 | export const PostsClientService = new ApiClient('posts');
--------------------------------------------------------------------------------
/02-js-intro/js/arrows.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const bob = {
4 | name: 'Bob',
5 | firiends:['Alice', 'Jane'],
6 | printFiends() {
7 | this.firiends.forEach((f => console.log(`${this.name} knows ${f}`)));
8 | }
9 | }
10 |
11 | bob.printFiends()
--------------------------------------------------------------------------------
/05-ts-blogs-rest/dist/dao/id-generator.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"id-generator.js","sourceRoot":"","sources":["../../src/dao/id-generator.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,iBAAiB;IAE1B,SAAS;QACL,OAAO,EAAG,iBAAiB,CAAC,MAAM,CAAC;IACvC,CAAC;;AAHc,wBAAM,GAAG,CAAC,CAAC"}
--------------------------------------------------------------------------------
/11-router-basics-ts/src/pages/HomePage.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | export const HomePage = () => {
4 | return (
5 | <>
6 | HomePage
7 | Welcome to React Routing Demo!
8 | >
9 | )
10 | }
11 |
--------------------------------------------------------------------------------
/15-react-router-v4/src/app.test.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import App from './app';
4 |
5 | it('renders without crashing', () => {
6 | const div = document.createElement('div');
7 | ReactDOM.render(, div);
8 | });
9 |
--------------------------------------------------------------------------------
/18-react-router-redux/src/app.test.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import App from './app';
4 |
5 | it('renders without crashing', () => {
6 | const div = document.createElement('div');
7 | ReactDOM.render(, div);
8 | });
9 |
--------------------------------------------------------------------------------
/23-loopback-mongo/.gitignore:
--------------------------------------------------------------------------------
1 | *.csv
2 | *.dat
3 | *.iml
4 | *.log
5 | *.out
6 | *.pid
7 | *.seed
8 | *.sublime-*
9 | *.swo
10 | *.swp
11 | *.tgz
12 | *.xml
13 | .DS_Store
14 | .idea
15 | .project
16 | .strong-pm
17 | coverage
18 | node_modules
19 | npm-debug.log
20 |
--------------------------------------------------------------------------------
/fmi-2022-02-js-lab/arrows.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const bob = {
4 | name: 'Bob',
5 | firiends:['Alice', 'Jane'],
6 | printFiends() {
7 | this.firiends.forEach(f => console.log(`${this.name} knows ${f}`));
8 | }
9 | }
10 |
11 | bob.printFiends()
--------------------------------------------------------------------------------
/fmi-2022-06-basic-redux/src/app/store.js:
--------------------------------------------------------------------------------
1 | import { configureStore } from '@reduxjs/toolkit';
2 | import counterReducer from '../features/counter/counterSlice';
3 |
4 | export const store = configureStore({
5 | reducer: {
6 | counter: counterReducer,
7 | },
8 | });
9 |
--------------------------------------------------------------------------------
/fmi-2023-01-js-intro-lab/test.rest:
--------------------------------------------------------------------------------
1 | GET http://localhost:9000/api/posts HTTP/1.1
2 |
3 | ###
4 |
5 | POST http://localhost:9000/api/posts HTTP/1.1
6 | Content-Type:application/json
7 |
8 | {
9 | "title": "New in ECMAScript!!!",
10 | "author": "Trayan"
11 | }
--------------------------------------------------------------------------------
/fmi-2023-05-blogs-lab/src/hooks/useEffectOnMount.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable react-hooks/exhaustive-deps */
2 | import { EffectCallback, useEffect } from 'react';
3 | export default function useEffectOnMount(effectCallback: EffectCallback) {
4 | useEffect(effectCallback, []);
5 | }
--------------------------------------------------------------------------------
/09-react-lab-a/config/helpers.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 | var _root = path.resolve(__dirname, '..');
3 | function root(args) {
4 | args = Array.prototype.slice.call(arguments, 0);
5 | return path.join.apply(path, [_root].concat(args));
6 | }
7 | exports.root = root;
8 |
--------------------------------------------------------------------------------
/09-react-lab-b/config/helpers.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 | var _root = path.resolve(__dirname, '..');
3 | function root(args) {
4 | args = Array.prototype.slice.call(arguments, 0);
5 | return path.join.apply(path, [_root].concat(args));
6 | }
7 | exports.root = root;
8 |
--------------------------------------------------------------------------------
/09-react-todos/config/helpers.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 | var _root = path.resolve(__dirname, '..');
3 | function root(args) {
4 | args = Array.prototype.slice.call(arguments, 0);
5 | return path.join.apply(path, [_root].concat(args));
6 | }
7 | exports.root = root;
8 |
--------------------------------------------------------------------------------
/12-react-demo-sqlite-custom-form/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | React TODOs
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/17-react-todos-redux-es7-decorator/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | React TODOs
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/23-loopback-mongo/server/boot/root.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = function(server) {
4 | // Install a `/` route that returns server status
5 | var router = server.loopback.Router();
6 | router.get('/', server.loopback.status());
7 | server.use(router);
8 | };
9 |
--------------------------------------------------------------------------------
/fmi-2022-06-basic-redux/src/features/counter/counterAPI.js:
--------------------------------------------------------------------------------
1 | // A mock function to mimic making an async request for data
2 | export function fetchCount(amount = 1) {
3 | return new Promise((resolve) =>
4 | setTimeout(() => resolve({ data: amount }), 1000)
5 | );
6 | }
7 |
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7/react-router.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from "@react-router/dev/config";
2 |
3 | export default {
4 | // Config options...
5 | // Server-side render by default, to enable SPA mode set this to `false`
6 | ssr: true,
7 | } satisfies Config;
8 |
--------------------------------------------------------------------------------
/05-nodejs-demo/rx1.js:
--------------------------------------------------------------------------------
1 | const Rx = require('rxjs');
2 | let s1 = Rx.Observable.from(["one", "two", "three"]);
3 | Rx.Observable.from(["Reactive", "Extensions", "JavaScript"])
4 | .zip(s1)
5 | .take(2)
6 | // .map(s => s + " : on " + new Date())
7 | .subscribe(s => console.log(s));
--------------------------------------------------------------------------------
/09-node-ts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES6",
4 | "module": "CommonJS",
5 | "outDir": "dist",
6 | "sourceMap": true
7 | },
8 | "include": ["src/**/*.ts"],
9 | "exclude": ["node_modules", ".vscode"]
10 | }
--------------------------------------------------------------------------------
/09-react-lab-a/src/vendor.js:
--------------------------------------------------------------------------------
1 | // Import vendor libraries
2 | // import 'jquery';
3 | import 'react';
4 | import 'react-dom';
5 | import 'bootstrap/dist/css/bootstrap.min.css';
6 |
7 | // Other vendors for example jQuery, Lodash or Bootstrap
8 | // You can import js, ts, css, sass, ...
--------------------------------------------------------------------------------
/09-react-lab-b/src/vendor.js:
--------------------------------------------------------------------------------
1 | // Import vendor libraries
2 | // import 'jquery';
3 | import 'react';
4 | import 'react-dom';
5 | import 'bootstrap/dist/css/bootstrap.min.css';
6 |
7 | // Other vendors for example jQuery, Lodash or Bootstrap
8 | // You can import js, ts, css, sass, ...
--------------------------------------------------------------------------------
/09-react-todos-lab/config/helpers.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 | var _root = path.resolve(__dirname, '..');
3 | function root(args) {
4 | args = Array.prototype.slice.call(arguments, 0);
5 | return path.join.apply(path, [_root].concat(args));
6 | }
7 | exports.root = root;
8 |
--------------------------------------------------------------------------------
/09-react-todos-lab/src/vendor.js:
--------------------------------------------------------------------------------
1 | // Import vendor libraries
2 | // import 'jquery';
3 | import 'react';
4 | import 'react-dom';
5 | import 'bootstrap/dist/css/bootstrap.min.css';
6 |
7 | // Other vendors for example jQuery, Lodash or Bootstrap
8 | // You can import js, ts, css, sass, ...
--------------------------------------------------------------------------------
/09-react-todos/src/vendor.js:
--------------------------------------------------------------------------------
1 | // Import vendor libraries
2 | // import 'jquery';
3 | import 'react';
4 | import 'react-dom';
5 | import 'bootstrap/dist/css/bootstrap.min.css';
6 |
7 | // Other vendors for example jQuery, Lodash or Bootstrap
8 | // You can import js, ts, css, sass, ...
--------------------------------------------------------------------------------
/12-node-ts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES6",
4 | "module": "CommonJS",
5 | "outDir": "dist",
6 | "sourceMap": true
7 | },
8 | "include": ["src/**/*.ts"],
9 | "exclude": ["node_modules", ".vscode"]
10 | }
--------------------------------------------------------------------------------
/16-react-todos-redux/config/helpers.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 | var _root = path.resolve(__dirname, '..');
3 | function root(args) {
4 | args = Array.prototype.slice.call(arguments, 0);
5 | return path.join.apply(path, [_root].concat(args));
6 | }
7 | exports.root = root;
8 |
--------------------------------------------------------------------------------
/fmi-2024-10-react-routing-ts/src/components/LoadingIndicator.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | type Props = {}
4 |
5 | const LoadingIndicator = (props: Props) => {
6 | return (
7 | Loading data ...
8 | )
9 | }
10 |
11 | export default LoadingIndicator
--------------------------------------------------------------------------------
/04-ts-intro-lab/dist/dao/id-generator.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"id-generator.js","sourceRoot":"","sources":["../../src/dao/id-generator.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,iBAAiB;IAA9B;QACY,WAAM,GAAG,CAAC,CAAC;IAIvB,CAAC;IAHG,SAAS;QACL,OAAO,EAAG,IAAI,CAAC,MAAM,CAAC;IAC1B,CAAC;CACJ"}
--------------------------------------------------------------------------------
/06-react-blogs/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/16-ts-mongo-lab/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES6",
4 | "module": "CommonJS",
5 | "outDir": "dist",
6 | "sourceMap": true
7 | },
8 | "include": ["src/**/*.ts"],
9 | "exclude": ["node_modules", ".vscode"]
10 | }
--------------------------------------------------------------------------------
/fmi-2024-07-react-blogs-ts/src/hooks/useEffectOnMount.ts:
--------------------------------------------------------------------------------
1 | import { EffectCallback, useEffect } from 'react'
2 |
3 |
4 | export default function useEffectOnMount(effect: EffectCallback) {
5 | // eslint-disable-next-line react-hooks/exhaustive-deps
6 | useEffect(() => effect(), [])
7 | }
--------------------------------------------------------------------------------
/fmi-2024-08-react-refs-lab/src/hooks/useEffectOnMount.ts:
--------------------------------------------------------------------------------
1 | import { EffectCallback, useEffect } from 'react'
2 |
3 |
4 | export default function useEffectOnMount(effect: EffectCallback) {
5 | // eslint-disable-next-line react-hooks/exhaustive-deps
6 | useEffect(() => effect(), [])
7 | }
--------------------------------------------------------------------------------
/fmi-2025-03-ts-intro/dist/dao/user-repository.js:
--------------------------------------------------------------------------------
1 | import { RepositoryInMemory } from "./repository.js";
2 | export class UserRepositoryInMemory extends RepositoryInMemory {
3 | findByEmail(email) {
4 | return this.findAll().find(user => user.email === email);
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/fmi-2025-08-react-refs-ts/src/hooks/useEffectOnMount.ts:
--------------------------------------------------------------------------------
1 | import { EffectCallback, useEffect } from 'react'
2 |
3 |
4 | export default function useEffectOnMount(effect: EffectCallback) {
5 | // eslint-disable-next-line react-hooks/exhaustive-deps
6 | useEffect(() => effect(), [])
7 | }
--------------------------------------------------------------------------------
/04-ts-intro-lab/src/dao/id-generator.ts:
--------------------------------------------------------------------------------
1 | export interface IdGenerator {
2 | getNextId(): K;
3 | }
4 |
5 | export class NumberIdGenerator implements IdGenerator {
6 | private nextId = 0;
7 | getNextId(): number {
8 | return ++ this.nextId;
9 | }
10 | }
--------------------------------------------------------------------------------
/06-myblogs-rest-ts/src/state-store.ts:
--------------------------------------------------------------------------------
1 | import { Post } from "./posts.js";
2 |
3 | export interface AppState {
4 | editedPost: Post | undefined;
5 | allPosts: Post[]
6 | }
7 |
8 | export const AppStateStore: AppState = {
9 | editedPost: undefined,
10 | allPosts: []
11 | }
--------------------------------------------------------------------------------
/07-react-refs-lab/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/08-react-blogs-mui/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/11-router-basics-ts/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/12-router-modal-lab/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/12-routing-auth-lab/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/14-express-ts-lab/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES6",
4 | "module": "CommonJS",
5 | "outDir": "dist",
6 | "sourceMap": true
7 | },
8 | "include": ["src/**/*.ts"],
9 | "exclude": ["node_modules", ".vscode"]
10 | }
--------------------------------------------------------------------------------
/17-react-todos-redux-es7-decorator/src/app/reducers/selected-todo.js:
--------------------------------------------------------------------------------
1 | const selectedTodo = (state=null, action) => {
2 | switch (action.type) {
3 | case 'SELECT_TODO':
4 | return action.todo;
5 | default:
6 | return state;
7 | }
8 | };
9 |
10 | export default selectedTodo;
--------------------------------------------------------------------------------
/fmi-2023-node-ts-lab/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES6",
4 | "module": "CommonJS",
5 | "outDir": "dist",
6 | "sourceMap": true
7 | },
8 | "include": ["src/**/*.ts"],
9 | "exclude": ["node_modules", ".vscode"]
10 | }
--------------------------------------------------------------------------------
/fmi-2023-ts-todos/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/fmi-2024-12-nodejs/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES6",
4 | "module": "CommonJS",
5 | "outDir": "dist",
6 | "sourceMap": true
7 | },
8 | "include": ["src/**/*.ts"],
9 | "exclude": ["node_modules", ".vscode"]
10 | }
--------------------------------------------------------------------------------
/fmi-2025-11-node-ts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES6",
4 | "module": "CommonJS",
5 | "outDir": "dist",
6 | "sourceMap": true
7 | },
8 | "include": ["src/**/*.ts"],
9 | "exclude": ["node_modules", ".vscode"]
10 | }
--------------------------------------------------------------------------------
/fmi-2025-13-mongo/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES6",
4 | "module": "CommonJS",
5 | "outDir": "dist",
6 | "sourceMap": true
7 | },
8 | "include": ["src/**/*.ts"],
9 | "exclude": ["node_modules", ".vscode"]
10 | }
--------------------------------------------------------------------------------
/03-mybooks/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/04-simple/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/12-react-demo-sqlite-custom-form/config/helpers.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 | var _root = path.resolve(__dirname, '..');
3 | function root(args) {
4 | args = Array.prototype.slice.call(arguments, 0);
5 | return path.join.apply(path, [_root].concat(args));
6 | }
7 | exports.root = root;
8 |
--------------------------------------------------------------------------------
/17-react-todos-redux-es7-decorator/config/helpers.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 | var _root = path.resolve(__dirname, '..');
3 | function root(args) {
4 | args = Array.prototype.slice.call(arguments, 0);
5 | return path.join.apply(path, [_root].concat(args));
6 | }
7 | exports.root = root;
8 |
--------------------------------------------------------------------------------
/17-ts-express-mongo-lab/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es6",
4 | "module": "CommonJS",
5 | "outDir": "dist",
6 | "sourceMap": true
7 | },
8 | "include": ["src/**/*.ts"],
9 | "exclude": ["node_modules", ".vscode"]
10 | }
--------------------------------------------------------------------------------
/18-react-router-redux/src/components/home.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { connect } from 'react-redux';
3 |
4 | @connect()
5 | export default class Home extends Component {
6 | render() {
7 | return (
8 | Home
9 | );
10 | }
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/fmi-2022-01-react-intro/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/fmi-2023-05-blogs-lab/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/fmi-2023-ruoter-ts-lab/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/fmi-2024-01-react-todos/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/fmi-2024-06-todos-ts/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/fmi-2024-11-node-ts-lab/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES6",
4 | "module": "CommonJS",
5 | "outDir": "dist",
6 | "sourceMap": true
7 | },
8 | "include": ["src/**/*.ts"],
9 | "exclude": ["node_modules", ".vscode"]
10 | }
--------------------------------------------------------------------------------
/fmi-2024-12-nodejs/dist/01-dns.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | const dns = require("dns");
4 | const domain = 'yahoo.com';
5 | dns.resolve(domain, (err, addresses) => {
6 | console.log(addresses);
7 | });
8 | //# sourceMappingURL=01-dns.js.map
--------------------------------------------------------------------------------
/fmi-2024-13-express-lab/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES6",
4 | "module": "CommonJS",
5 | "outDir": "dist",
6 | "sourceMap": true
7 | },
8 | "include": ["src/**/*.ts"],
9 | "exclude": ["node_modules", ".vscode"]
10 | }
--------------------------------------------------------------------------------
/fmi-2024-14-express-ts-lab/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES6",
4 | "module": "CommonJS",
5 | "outDir": "dist",
6 | "sourceMap": true
7 | },
8 | "include": ["src/**/*.ts"],
9 | "exclude": ["node_modules", ".vscode"]
10 | }
--------------------------------------------------------------------------------
/fmi-2025-12-express-ts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES6",
4 | "module": "CommonJS",
5 | "outDir": "dist",
6 | "sourceMap": true
7 | },
8 | "include": ["src/**/*.ts"],
9 | "exclude": ["node_modules", ".vscode"]
10 | }
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7-dataload/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 | import tailwindcss from '@tailwindcss/vite'
4 |
5 | // https://vite.dev/config/
6 | export default defineConfig({
7 | plugins: [react(), tailwindcss()],
8 | })
9 |
--------------------------------------------------------------------------------
/todo-app/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/00-todo-lab4/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/03-mybooks-lab4/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/04-mybooks-lab4/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/06-react-blogs/src/App.test.js:
--------------------------------------------------------------------------------
1 | import { render, screen } from '@testing-library/react';
2 | import App from './App';
3 |
4 | test('renders learn react link', () => {
5 | render();
6 | const linkElement = screen.getByText(/learn react/i);
7 | expect(linkElement).toBeInTheDocument();
8 | });
9 |
--------------------------------------------------------------------------------
/07-react-refs/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/09-react-todos-lab/src/app/hello.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | export default class Hello extends React.Component {
4 | render() {
5 | return (
6 |
7 |
Hello, {this.props.name}!
8 |
9 | );
10 | }
11 | }
--------------------------------------------------------------------------------
/12-roter-lazy-loading-lab/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/fmi-2024-07-react-blogs-ts/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/fmi-2024-08-react-refs-lab/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/fmi-2024-09-react-context-ts/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/fmi-2024-10-react-routing-ts/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/06-react-router-lab4/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/07-react-refs-lab4/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/08-redux-simple-demo/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/08-redux-simple-lab4/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/11-react-context/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/12-react-demo-sqlite-custom-form/src/vendor.js:
--------------------------------------------------------------------------------
1 | // Import vendor libraries
2 | // import 'jquery';
3 | // import 'react';
4 | // import 'react-dom';
5 | // import 'bootstrap/dist/css/bootstrap.min.css';
6 |
7 | // Other vendors for example jQuery, Lodash or Bootstrap
8 | // You can import js, ts, css, sass, ...
--------------------------------------------------------------------------------
/16-react-todos-redux/src/app/reducers/index.js:
--------------------------------------------------------------------------------
1 | import { combineReducers } from 'redux';
2 | import todos from './todos';
3 | import visibilityFilter from './visibilityFilter';
4 |
5 | const rootReducer = combineReducers({
6 | todos,
7 | visibilityFilter
8 | });
9 |
10 | export default rootReducer;
--------------------------------------------------------------------------------
/16-react-todos-redux/src/app/reducers/visibilityFilter.js:
--------------------------------------------------------------------------------
1 | const visibilityFilter = (state = 'all', action) => {
2 | switch (action.type) {
3 | case 'SET_VISIBILITY_FILTER':
4 | return action.filter;
5 | default:
6 | return state;
7 | }
8 | };
9 |
10 | export default visibilityFilter;
--------------------------------------------------------------------------------
/23-loopback-mongo/server/datasources.json:
--------------------------------------------------------------------------------
1 | {
2 | "db": {
3 | "name": "db",
4 | "connector": "memory"
5 | },
6 | "mongodb": {
7 | "host": "localhost",
8 | "port": 27017,
9 | "database": "loopback",
10 | "name": "mongodb",
11 | "connector": "mongodb"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/fmi-2023-04-ts-lab/db.json:
--------------------------------------------------------------------------------
1 | {
2 | "posts": [
3 | { "id": 1, "title": "json-server", "author": "typicode" }
4 | ],
5 | "comments": [
6 | { "id": 1, "body": "some comment", "postId": 1 }
7 | ],
8 | "users": [
9 | { "id": 1, "name": "typicode" }
10 | ]
11 | }
--------------------------------------------------------------------------------
/fmi-2024-01-react-todos/src/TodoList.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Todo } from './Todo'
3 |
4 |
5 | export const TodoList = ({todos, ...rest}) => {
6 | return todos.map(todo =>
7 | ()
8 | )
9 | }
10 |
11 |
12 |
--------------------------------------------------------------------------------
/fmi-2024-10-react-routing-ts/src/components/ContactDetailsForm.css:
--------------------------------------------------------------------------------
1 | .contact-form {
2 | display: flex;
3 | flex-flow: column;
4 | }
5 | .contact-form input, .contact-form button {
6 | margin: 5px 30px;
7 | }
8 | .contact-form .error {
9 | margin: 0 30px 5px;
10 | color: red;
11 | }
--------------------------------------------------------------------------------
/fmi-2024-12-nodejs/dist/01-dns.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"01-dns.js","sourceRoot":"","sources":["../src/01-dns.ts"],"names":[],"mappings":";;AAAA,2BAA2B;AAE3B,MAAM,MAAM,GAAI,WAAW,CAAC;AAE5B,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE;IACnC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAA"}
--------------------------------------------------------------------------------
/fmi-2024-15-blogs-api-express-mongo/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es6",
4 | "module": "CommonJS",
5 | "outDir": "dist",
6 | "sourceMap": true
7 | },
8 | "include": ["src/**/*.ts"],
9 | "exclude": ["node_modules", ".vscode"]
10 | }
--------------------------------------------------------------------------------
/fmi-2025-03-ts-intro/src/util/idgen.ts:
--------------------------------------------------------------------------------
1 | export interface IdGenerator {
2 | getNextId(): K;
3 | }
4 |
5 | export class NumberIdGenrator implements IdGenerator{
6 | constructor(private nextId: number = 0){}
7 | getNextId(): number {
8 | return ++this.nextId;
9 | }
10 | }
--------------------------------------------------------------------------------
/fmi-2025-react-router-v7-dataload/src/routes/ContactDetailsForm.css:
--------------------------------------------------------------------------------
1 | .contact-form {
2 | display: flex;
3 | flex-flow: column;
4 | }
5 | .contact-form input, .contact-form button {
6 | margin: 5px 30px;
7 | }
8 | .contact-form .error {
9 | margin: 0 30px 5px;
10 | color: red;
11 | }
--------------------------------------------------------------------------------
/05-mybooks-router-lab4/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/05-react-router-demos/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/07-react-context-lab4/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/12-blogs-react-client/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/12-react-router-demos/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/fmi-2022-01-react-intro/src/App.test.js:
--------------------------------------------------------------------------------
1 | import { render, screen } from '@testing-library/react';
2 | import App from './App';
3 |
4 | test('renders learn react link', () => {
5 | render();
6 | const linkElement = screen.getByText(/learn react/i);
7 | expect(linkElement).toBeInTheDocument();
8 | });
9 |
--------------------------------------------------------------------------------
/fmi-2022-03-react-todos/src/App.test.js:
--------------------------------------------------------------------------------
1 | import { render, screen } from '@testing-library/react';
2 | import App from './App';
3 |
4 | test('renders learn react link', () => {
5 | render();
6 | const linkElement = screen.getByText(/learn react/i);
7 | expect(linkElement).toBeInTheDocument();
8 | });
9 |
--------------------------------------------------------------------------------
/fmi-2022-04-react-blogs/src/App.test.js:
--------------------------------------------------------------------------------
1 | import { render, screen } from '@testing-library/react';
2 | import App from './App';
3 |
4 | test('renders learn react link', () => {
5 | render();
6 | const linkElement = screen.getByText(/learn react/i);
7 | expect(linkElement).toBeInTheDocument();
8 | });
9 |
--------------------------------------------------------------------------------
/fmi-2022-06-basic-redux/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/fmi-2024-01-react-todos/src/App.test.js:
--------------------------------------------------------------------------------
1 | import { render, screen } from '@testing-library/react';
2 | import App from './App';
3 |
4 | test('renders learn react link', () => {
5 | render();
6 | const linkElement = screen.getByText(/learn react/i);
7 | expect(linkElement).toBeInTheDocument();
8 | });
9 |
--------------------------------------------------------------------------------