refactor: get rid of turborepo

This commit is contained in:
Bart Stefanski 2023-04-19 20:41:22 +02:00
parent 7b5e820285
commit 8a21229940
83 changed files with 209 additions and 3143 deletions

View file

@ -1,10 +1,77 @@
// eslint-disable-next-line @typescript-eslint/no-var-requires
const fs = require("fs")
module.exports = {
root: true,
// This tells ESLint to load the config from the package `eslint-config-custom`
extends: ["custom"],
settings: {
next: {
rootDir: ["apps/*/"],
extends: [
"next",
"prettier",
"react-app",
"react-app/jest",
"plugin:@typescript-eslint/recommended",
"plugin:storybook/recommended",
],
parserOptions: {
babelOptions: {
presets: [require.resolve("next/babel")],
},
},
};
rules: {
"testing-library/prefer-screen-queries": "off",
"@next/next/no-html-link-for-pages": "off",
"@typescript-eslint/no-unused-vars": [
"warn",
{
argsIgnorePattern: "^_",
varsIgnorePattern: "^_",
},
],
"sort-imports": [
"error",
{
ignoreCase: true,
ignoreDeclarationSort: true,
},
],
"import/order": [
1,
{
groups: ["external", "builtin", "internal", "sibling", "parent", "index"],
pathGroups: [
...getDirectoriesToSort().map((singleDir) => ({
pattern: `${singleDir}/**`,
group: "internal",
})),
{
pattern: "env",
group: "internal",
},
{
pattern: "theme",
group: "internal",
},
{
pattern: "public/**",
group: "internal",
position: "after",
},
],
pathGroupsExcludedImportTypes: ["internal"],
alphabetize: {
order: "asc",
caseInsensitive: true,
},
},
],
},
}
function getDirectoriesToSort() {
const ignoredSortingDirectories = [".git", ".next", ".vscode", "node_modules"]
return getDirectories(process.cwd()).filter((f) => !ignoredSortingDirectories.includes(f))
}
function getDirectories(path) {
return fs.readdirSync(path).filter(function (file) {
return fs.statSync(path + "/" + file).isDirectory()
})
}

5
.gitignore vendored
View file

@ -27,7 +27,4 @@ yarn-error.log*
.env.local
.env.development.local
.env.test.local
.env.production.local
# turbo
.turbo
.env.production.local

25
.turbo/turbo-build.log Normal file
View file

@ -0,0 +1,25 @@
$ next build
info - Linting and checking validity of types...
error - ESLint: Cannot read config file: /Users/bartstefanski/Projects/next-enterprise/packages/eslint-config-custom/index.js Error: fs is not defined Referenced from: /Users/bartstefanski/Projects/next-enterprise/apps/web/.eslintrc.js
info - Creating an optimized production build...
info - Compiled successfully
info - Collecting page data...
info - Generating static pages (0/3)
info - Generating static pages (3/3)
info - Finalizing page optimization...
Route (pages) Size First Load JS
┌ ○ / 2.87 kB 78 kB
├ /_app 0 B 75.1 kB
├ λ /_app.test 46.3 kB 121 kB
└ ○ /404 182 B 75.3 kB
+ First Load JS shared by all 77.6 kB
├ chunks/framework-b342986edb64aa35.js 46.9 kB
├ chunks/main-ba4f74e74668d5a9.js 27 kB
├ chunks/pages/_app-5446b4a34caf39cd.js 286 B
├ chunks/webpack-41a084ba32a79f8d.js 965 B
└ css/0a2eef075eaa8bc6.css 2.52 kB
λ (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps)
○ (Static) automatically rendered as static HTML (uses no initial props)

10
.turbo/turbo-test.log Normal file
View file

@ -0,0 +1,10 @@
$ FORCE_COLOR=1 jest --passWithNoTests
 PASS  pages/_app.test.tsx
MyApp
✓ should render a component with page props (16 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.491 s, estimated 1 s
Ran all test suites.

View file

@ -1,73 +1,24 @@
# Turborepo starter
## Getting Started
This is an official Yarn v1 starter turborepo.
First, run the development server:
## What's inside?
This turborepo uses [Yarn](https://classic.yarnpkg.com/) as a package manager. It includes the following packages/apps:
### Apps and Packages
- `docs`: a [Next.js](https://nextjs.org/) app
- `web`: another [Next.js](https://nextjs.org/) app
- `ui`: a stub React component library shared by both `web` and `docs` applications
- `eslint-config-custom`: `eslint` configurations (includes `eslint-config-next` and `eslint-config-prettier`)
- `tsconfig`: `tsconfig.json`s used throughout the monorepo
Each package/app is 100% [TypeScript](https://www.typescriptlang.org/).
### Utilities
This turborepo has some additional tools already setup for you:
- [TypeScript](https://www.typescriptlang.org/) for static type checking
- [ESLint](https://eslint.org/) for code linting
- [Prettier](https://prettier.io) for code formatting
### Build
To build all apps and packages, run the following command:
```
cd my-turborepo
yarn run build
```bash
yarn dev
```
### Develop
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
To develop all apps and packages, run the following command:
You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file.
```
cd my-turborepo
yarn run dev
```
[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`.
### Remote Caching
The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
Turborepo can use a technique known as [Remote Caching](https://turbo.build/repo/docs/core-concepts/remote-caching) to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines.
## Learn More
By default, Turborepo will cache locally. To enable Remote Caching you will need an account with Vercel. If you don't have an account you can [create one](https://vercel.com/signup), then enter the following commands:
To learn more about Next.js, take a look at the following resources:
```
cd my-turborepo
npx turbo login
```
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
- [Learn Next.js](https://nextjs.org/learn/foundations/about-nextjs) - an interactive Next.js tutorial.
This will authenticate the Turborepo CLI with your [Vercel account](https://vercel.com/docs/concepts/personal-accounts/overview).
Next, you can link your Turborepo to your Remote Cache by running the following command from the root of your turborepo:
```
npx turbo link
```
## Useful Links
Learn more about the power of Turborepo:
- [Tasks](https://turbo.build/repo/docs/core-concepts/monorepos/running-tasks)
- [Caching](https://turbo.build/repo/docs/core-concepts/caching)
- [Remote Caching](https://turbo.build/repo/docs/core-concepts/remote-caching)
- [Filtering](https://turbo.build/repo/docs/core-concepts/monorepos/filtering)
- [Configuration Options](https://turbo.build/repo/docs/reference/configuration)
- [CLI Usage](https://turbo.build/repo/docs/reference/command-line-reference)
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!

View file

@ -1,4 +0,0 @@
module.exports = {
root: true,
extends: ["custom"],
};

View file

@ -1,6 +0,0 @@
const withNextra = require("nextra")({
theme: "nextra-theme-docs",
themeConfig: "./theme.config.tsx",
})
module.exports = withNextra()

View file

@ -1,29 +0,0 @@
{
"name": "docs",
"version": "0.0.0",
"private": true,
"scripts": {
"dev": "FORCE_COLOR=1 next dev --port 3001",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"next": "^13.3.0",
"nextra": "^2.4.0",
"nextra-theme-docs": "^2.4.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"ui": "*"
},
"devDependencies": {
"@babel/core": "^7.0.0",
"@types/node": "^17.0.12",
"@types/react": "^18.0.22",
"@types/react-dom": "^18.0.7",
"eslint": "7.32.0",
"eslint-config-custom": "*",
"tsconfig": "*",
"typescript": "^4.5.3"
}
}

View file

@ -1,5 +0,0 @@
{
"index": "My Homepage",
"contact": "Contact Us",
"about": "About Us"
}

View file

@ -1,3 +0,0 @@
# Welcome to Nextra
Hello, world!

View file

@ -1,18 +0,0 @@
import React from "react"
import { DocsThemeConfig } from "nextra-theme-docs"
const config: DocsThemeConfig = {
logo: <span>My Project</span>,
project: {
link: "https://github.com/shuding/nextra-docs-template",
},
chat: {
link: "https://discord.com",
},
docsRepositoryBase: "https://github.com/shuding/nextra-docs-template",
footer: {
text: "Nextra Docs Template",
},
}
export default config

View file

@ -1,5 +0,0 @@
{
"extends": "tsconfig/nextjs.json",
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}

View file

@ -1,7 +0,0 @@
module.exports = {
root: true,
extends: ["custom", "plugin:storybook/recommended"],
rules: {
"testing-library/prefer-screen-queries": "off",
},
}

View file

@ -1,30 +0,0 @@
## Getting Started
First, run the development server:
```bash
yarn dev
```
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file.
[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`.
The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
## Learn More
To learn more about Next.js, take a look at the following resources:
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
- [Learn Next.js](https://nextjs.org/learn/foundations/about-nextjs) - an interactive Next.js tutorial.
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
## Deploy on Vercel
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_source=github.com&utm_medium=referral&utm_campaign=turborepo-readme) from the creators of Next.js.
Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.

View file

@ -1,18 +0,0 @@
// jest.config.mjs
import nextJest from "next/jest.js"
const createJestConfig = nextJest({
// Provide the path to your Next.js app to load next.config.js and .env files in your test environment
dir: "./",
})
// Add any custom config to be passed to Jest
/** @type {import('jest').Config} */
const config = {
// Add more setup options before each test is run
// setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
...(await import("config/jest.config.js")).default,
}
// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async
export default createJestConfig(config)

View file

@ -1,5 +0,0 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.

View file

@ -1,43 +0,0 @@
{
"name": "web",
"version": "0.0.0",
"private": true,
"scripts": {
"dev": "FORCE_COLOR=1 next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"analyze": "ANALYZE=true yarn build",
"storybook": "FORCE_COLOR=1 storybook dev -p 6006",
"build-storybook": "FORCE_COLOR=1 storybook build",
"test": "FORCE_COLOR=1 jest --passWithNoTests"
},
"dependencies": {
"next": "^13.1.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"ui": "*"
},
"devDependencies": {
"@babel/core": "^7.0.0",
"@next/bundle-analyzer": "^13.3.0",
"@storybook/addon-essentials": "^7.0.5",
"@storybook/addon-interactions": "^7.0.5",
"@storybook/addon-links": "^7.0.5",
"@storybook/blocks": "^7.0.5",
"@storybook/nextjs": "^7.0.5",
"@storybook/react": "^7.0.5",
"@storybook/testing-library": "^0.0.14-next.2",
"@types/node": "^17.0.12",
"@types/react": "^18.0.22",
"@types/react-dom": "^18.0.7",
"config": "*",
"eslint": "7.32.0",
"eslint-config-custom": "*",
"eslint-plugin-storybook": "^0.6.11",
"next-compose-plugins": "^2.2.1",
"storybook": "^7.0.5",
"tsconfig": "*",
"typescript": "^4.5.3"
}
}

View file

@ -1 +0,0 @@
module.exports = require("config/postcss.config")

2
apps/web/reset.d.ts vendored
View file

@ -1,2 +0,0 @@
// Do not add any other lines of code to this file!
import "@total-typescript/ts-reset"

View file

@ -1 +0,0 @@
module.exports = require("config/tailwind.config")

View file

@ -1,5 +0,0 @@
{
"extends": "tsconfig/nextjs.json",
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}

View file

@ -1,6 +1,14 @@
import nextJest from "next/jest.js"
const createJestConfig = nextJest({
dir: "./",
})
/** @type {import('jest').Config} */
module.exports = {
const config = {
setupFilesAfterEnv: ["@testing-library/jest-dom/extend-expect"],
testEnvironment: "jest-environment-jsdom",
modulePathIgnorePatterns: ["<rootDir>/dist/"],
}
export default createJestConfig(config)

View file

@ -2,29 +2,54 @@
"name": "next-enterprise",
"version": "0.0.0",
"private": true,
"workspaces": [
"apps/*",
"packages/*"
],
"scripts": {
"build": "turbo run build --color",
"dev": "turbo run dev --color",
"test": "turbo run test --color",
"lint": "turbo run lint --color",
"dev": "FORCE_COLOR=1 next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"analyze": "ANALYZE=true yarn build",
"storybook": "FORCE_COLOR=1 storybook dev -p 6006",
"build-storybook": "FORCE_COLOR=1 storybook build",
"test": "FORCE_COLOR=1 jest --passWithNoTests",
"format": "prettier --write \"**/*.{ts,tsx,md}\"",
"postinstall": "patch-package"
},
"dependencies": {
"next": "^13.1.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"lodash": "^4.17.21",
"tailwind-merge": "^1.10.0"
},
"devDependencies": {
"@babel/core": "^7.0.0",
"@next/bundle-analyzer": "^13.3.0",
"@storybook/addon-essentials": "^7.0.5",
"@storybook/addon-interactions": "^7.0.5",
"@storybook/addon-links": "^7.0.5",
"@storybook/blocks": "^7.0.5",
"@storybook/nextjs": "^7.0.5",
"@storybook/react": "^7.0.5",
"@storybook/testing-library": "^0.0.14-next.2",
"@types/node": "^17.0.12",
"@types/react": "^18.0.22",
"@types/react-dom": "^18.0.7",
"eslint": "7.32.0",
"next-compose-plugins": "^2.2.1",
"storybook": "^7.0.5",
"eslint-config-next": "13.0.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-react": "7.31.8",
"@typescript-eslint/eslint-plugin": "^5.57.1",
"@typescript-eslint/parser": "^5.54.1",
"eslint-config-react-app": "^7.0.1",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-storybook": "^0.6.11",
"@jest/globals": "^29.5.0",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^14.0.0",
"@total-typescript/ts-reset": "^0.4.2",
"autoprefixer": "^10.4.14",
"eslint-config-custom": "*",
"fetch-mock": "^9.11.0",
"jest": "^29.5.0",
"jest-environment-jsdom": "^29.5.0",
@ -36,7 +61,6 @@
"tailwindcss": "^3.2.7",
"ts-jest": "^29.1.0",
"tsc": "^2.0.4",
"turbo": "latest",
"typescript": "4.9.5",
"vitest": "^0.29.8"
},

View file

@ -1,8 +0,0 @@
{
"name": "config",
"version": "0.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {},
"devDependencies": {}
}

View file

@ -1,78 +0,0 @@
// eslint-disable-next-line @typescript-eslint/no-var-requires
const fs = require("fs")
module.exports = {
extends: [
"next",
"turbo",
"prettier",
"react-app",
"react-app/jest",
"plugin:@typescript-eslint/recommended",
"plugin:storybook/recommended",
],
parserOptions: {
babelOptions: {
presets: [require.resolve("next/babel")],
},
},
rules: {
"@next/next/no-html-link-for-pages": "off",
"@typescript-eslint/no-unused-vars": [
"warn",
{
argsIgnorePattern: "^_",
varsIgnorePattern: "^_",
},
],
"sort-imports": [
"error",
{
ignoreCase: true,
ignoreDeclarationSort: true,
},
],
"import/order": [
1,
{
groups: ["external", "builtin", "internal", "sibling", "parent", "index"],
pathGroups: [
...getDirectoriesToSort().map((singleDir) => ({
pattern: `${singleDir}/**`,
group: "internal",
})),
{
pattern: "env",
group: "internal",
},
{
pattern: "theme",
group: "internal",
},
{
pattern: "public/**",
group: "internal",
position: "after",
},
],
pathGroupsExcludedImportTypes: ["internal"],
alphabetize: {
order: "asc",
caseInsensitive: true,
},
},
],
},
}
function getDirectoriesToSort() {
const ignoredSortingDirectories = [".git", ".next", ".vscode", "node_modules"]
return getDirectories(process.cwd()).filter((f) => !ignoredSortingDirectories.includes(f))
}
function getDirectories(path) {
return fs.readdirSync(path).filter(function (file) {
return fs.statSync(path + "/" + file).isDirectory()
})
}

View file

@ -1,24 +0,0 @@
{
"name": "eslint-config-custom",
"version": "0.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"eslint": "^7.23.0",
"eslint-config-next": "13.0.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-react": "7.31.8",
"eslint-config-turbo": "latest",
"@typescript-eslint/eslint-plugin": "^5.57.1",
"@typescript-eslint/parser": "^5.54.1",
"eslint-config-react-app": "^7.0.1",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-storybook": "^0.6.11"
},
"devDependencies": {
"typescript": "^4.7.4"
},
"publishConfig": {
"access": "public"
}
}

View file

@ -1 +0,0 @@
export default function fetch(url: string, options?: RequestInit): Promise<Response>;

View file

@ -1,8 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const isomorphic_unfetch_1 = require("isomorphic-unfetch");
function fetch(url, options = {}) {
return (0, isomorphic_unfetch_1.default)(url, Object.assign({}, options));
}
exports.default = fetch;
//# sourceMappingURL=fetch.js.map

View file

@ -1 +0,0 @@
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../fetch.ts"],"names":[],"mappings":";;AAAA,2DAAuC;AAEvC,SAAwB,KAAK,CAAC,GAAW,EAAE,UAAuB,EAAE;IAClE,OAAO,IAAA,4BAAM,EAAC,GAAG,oBAAO,OAAO,EAAG,CAAA;AACpC,CAAC;AAFD,wBAEC"}

View file

@ -1 +0,0 @@
export {};

View file

@ -1,33 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const fetch_1 = require("./fetch");
const isomorphic_unfetch_1 = require("isomorphic-unfetch");
jest.mock("isomorphic-unfetch", () => jest.fn(() => Promise.resolve(isomorphic_unfetch_1.default)));
describe("fetch", () => {
const url = "https://example.com";
afterEach(() => {
jest.clearAllMocks();
});
it("should make a GET request with default options", async () => {
const response = await (0, fetch_1.default)(url);
expect(response.ok).toBe(true);
expect(response.status).toBe(200);
expect(response.statusText).toBe("OK");
expect(isomorphic_unfetch_1.default).toHaveBeenCalledWith(url, {});
});
it("should make a POST request with options", async () => {
const options = {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ data: "test" }),
};
const response = await (0, fetch_1.default)(url, options);
expect(response.ok).toBe(true);
expect(response.status).toBe(200);
expect(response.statusText).toBe("OK");
expect(isomorphic_unfetch_1.default).toHaveBeenCalledWith(url, Object.assign(Object.assign({}, options), { body: JSON.stringify({ data: "test" }) }));
});
});
//# sourceMappingURL=fetch.test.js.map

View file

@ -1 +0,0 @@
{"version":3,"file":"fetch.test.js","sourceRoot":"","sources":["../fetch.test.ts"],"names":[],"mappings":";;AAAA,mCAA2B;AAC3B,2DAAkD;AAElD,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,4BAAiB,CAAC,CAAC,CAAC,CAAA;AAExF,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,MAAM,GAAG,GAAG,qBAAqB,CAAA;IAEjC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,QAAQ,GAAa,MAAM,IAAA,eAAK,EAAC,GAAG,CAAC,CAAA;QAC3C,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAGtC,MAAM,CAAC,4BAAiB,CAAC,CAAC,oBAAoB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;SACvC,CAAA;QAED,MAAM,QAAQ,GAAa,MAAM,IAAA,eAAK,EAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACpD,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAGtC,MAAM,CAAC,4BAAiB,CAAC,CAAC,oBAAoB,CAAC,GAAG,kCAC7C,OAAO,KACV,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,IACtC,CAAA;IACJ,CAAC,CAAC,CAAA;AAGJ,CAAC,CAAC,CAAA"}

View file

@ -1 +0,0 @@
export * from "./fetch";

View file

@ -1,18 +0,0 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./fetch"), exports);
//# sourceMappingURL=index.js.map

View file

@ -1 +0,0 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAuB"}

File diff suppressed because one or more lines are too long

View file

@ -1,11 +0,0 @@
import { fetch } from "./fetch"
describe("myFetch()", () => {
it("should return data from the server", async () => {
const response = await fetch("https://example.com")
expect(response.ok).toBe(true)
expect(response.status).toBe(200)
const data = await response.text()
expect(data).toMatch("Example Domain")
})
})

View file

@ -1,5 +0,0 @@
import _fetch from "isomorphic-unfetch"
export function fetch(url: string, options: RequestInit = {}): Promise<Response> {
return _fetch(url, { ...options })
}

View file

@ -1 +0,0 @@
export * from "./fetch"

View file

@ -1,2 +0,0 @@
/** @type {import('jest').Config} */
module.exports = { ...require("config/jest.config"), preset: "ts-jest", testEnvironment: "node" }

View file

@ -1,18 +0,0 @@
{
"name": "helper",
"version": "0.0.0",
"license": "MIT",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
"lint": "TIMING=1 eslint \"**/*.ts*\"",
"build": "tsc",
"test": "FORCE_COLOR=1 yarn node --experimental-vm-modules $(yarn bin jest --passWithNoTests)"
},
"dependencies": {
"isomorphic-unfetch": "^4.0.2"
},
"devDependencies": {
"config": "*"
}
}

View file

@ -1,25 +0,0 @@
{
"include": ["."],
"exclude": ["dist", "build", "node_modules"],
"compilerOptions": {
"module": "commonjs",
"declaration": true,
"strict": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"target": "es2017",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true,
"skipLibCheck": true,
"strictNullChecks": true,
"esModuleInterop": true,
"noImplicitAny": false,
"strictBindCallApply": false,
"forceConsistentCasingInFileNames": false,
"noFallthroughCasesInSwitch": false
}
}

View file

@ -1,3 +0,0 @@
# `tsconfig`
These are base shared `tsconfig.json`s from which all other `tsconfig.json`'s inherit from.

View file

@ -1,20 +0,0 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"display": "Default",
"compilerOptions": {
"composite": false,
"declaration": true,
"declarationMap": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"inlineSources": false,
"isolatedModules": true,
"moduleResolution": "node",
"noUnusedLocals": false,
"noUnusedParameters": false,
"preserveWatchOutput": true,
"skipLibCheck": true,
"strict": true
},
"exclude": ["node_modules"]
}

View file

@ -1,10 +0,0 @@
{
"name": "tsconfig",
"version": "0.0.0",
"private": true,
"files": [
"base.json",
"nextjs.json",
"react-library.json"
]
}

View file

@ -1,11 +0,0 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"display": "React Library",
"extends": "./base.json",
"compilerOptions": {
"jsx": "react-jsx",
"lib": ["ES2015"],
"module": "ESNext",
"target": "es6"
}
}

View file

@ -1,4 +0,0 @@
import * as React from "react"
export const Button = () => {
return <button>Boop</button>
}

View file

@ -1,2 +0,0 @@
import * as React from "react";
export * from "./Button";

View file

@ -1,34 +0,0 @@
{
"name": "ui",
"version": "0.0.0",
"main": "./index.tsx",
"types": "./index.tsx",
"license": "MIT",
"scripts": {
"lint": "eslint \"**/*.ts*\""
},
"dependencies": {
"@radix-ui/react-accordion": "^1.1.1",
"@radix-ui/react-checkbox": "^1.0.3",
"@radix-ui/react-dialog": "^1.0.3",
"@radix-ui/react-dropdown-menu": "^2.0.4",
"@radix-ui/react-form": "^0.0.2",
"@radix-ui/react-label": "^2.0.1",
"@radix-ui/react-popover": "^1.0.5",
"@radix-ui/react-radio-group": "^1.1.2",
"@radix-ui/react-scroll-area": "^1.0.3",
"@radix-ui/react-select": "1.2.1",
"@radix-ui/react-slider": "^1.1.1",
"@radix-ui/react-switch": "^1.0.2",
"@radix-ui/react-tabs": "^1.0.3",
"@radix-ui/react-toggle-group": "^1.0.3"
},
"devDependencies": {
"@types/react": "^18.0.22",
"eslint": "^7.32.0",
"eslint-config-custom": "*",
"react": "^18.2.0",
"tsconfig": "*",
"typescript": "^4.5.2"
}
}

View file

@ -1,2 +0,0 @@
// Do not add any other lines of code to this file!
import "@total-typescript/ts-reset"

View file

@ -1,5 +0,0 @@
{
"extends": "tsconfig/react-library.json",
"include": ["."],
"exclude": ["dist", "build", "node_modules"]
}

View file

@ -1,5 +1,3 @@
import { Button } from "ui"
export default function Web() {
return (
<>
@ -15,7 +13,7 @@ export default function Web() {
</p>
<a
href="#"
className="bg-primary-700 hover:bg-primary-800 focus:ring-primary-300 dark:focus:ring-primary-900 mr-3 inline-flex items-center justify-center rounded-lg px-5 py-3 text-center text-base font-medium text-white focus:ring-4"
className="mr-3 inline-flex items-center justify-center rounded-lg bg-primary-700 px-5 py-3 text-center text-base font-medium text-white hover:bg-primary-800 focus:ring-4 focus:ring-primary-300 dark:focus:ring-primary-900"
>
Get started
<svg
@ -53,9 +51,9 @@ export default function Web() {
</div>
<div className="space-y-8 md:grid md:grid-cols-2 md:gap-12 md:space-y-0 lg:grid-cols-3">
<div>
<div className="bg-primary-100 dark:bg-primary-900 mb-4 flex h-10 w-10 items-center justify-center rounded-full lg:h-12 lg:w-12">
<div className="mb-4 flex h-10 w-10 items-center justify-center rounded-full bg-primary-100 dark:bg-primary-900 lg:h-12 lg:w-12">
<svg
className="text-primary-600 dark:text-primary-300 h-5 w-5 lg:h-6 lg:w-6"
className="h-5 w-5 text-primary-600 dark:text-primary-300 lg:h-6 lg:w-6"
fill="currentColor"
viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg"
@ -74,9 +72,9 @@ export default function Web() {
</p>
</div>
<div>
<div className="bg-primary-100 dark:bg-primary-900 mb-4 flex h-10 w-10 items-center justify-center rounded-full lg:h-12 lg:w-12">
<div className="mb-4 flex h-10 w-10 items-center justify-center rounded-full bg-primary-100 dark:bg-primary-900 lg:h-12 lg:w-12">
<svg
className="text-primary-600 dark:text-primary-300 h-5 w-5 lg:h-6 lg:w-6"
className="h-5 w-5 text-primary-600 dark:text-primary-300 lg:h-6 lg:w-6"
fill="currentColor"
viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg"
@ -91,9 +89,9 @@ export default function Web() {
</p>
</div>
<div>
<div className="bg-primary-100 dark:bg-primary-900 mb-4 flex h-10 w-10 items-center justify-center rounded-full lg:h-12 lg:w-12">
<div className="mb-4 flex h-10 w-10 items-center justify-center rounded-full bg-primary-100 dark:bg-primary-900 lg:h-12 lg:w-12">
<svg
className="text-primary-600 dark:text-primary-300 h-5 w-5 lg:h-6 lg:w-6"
className="h-5 w-5 text-primary-600 dark:text-primary-300 lg:h-6 lg:w-6"
fill="currentColor"
viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg"
@ -113,9 +111,9 @@ export default function Web() {
</p>
</div>
<div>
<div className="bg-primary-100 dark:bg-primary-900 mb-4 flex h-10 w-10 items-center justify-center rounded-full lg:h-12 lg:w-12">
<div className="mb-4 flex h-10 w-10 items-center justify-center rounded-full bg-primary-100 dark:bg-primary-900 lg:h-12 lg:w-12">
<svg
className="text-primary-600 dark:text-primary-300 h-5 w-5 lg:h-6 lg:w-6"
className="h-5 w-5 text-primary-600 dark:text-primary-300 lg:h-6 lg:w-6"
fill="currentColor"
viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg"
@ -135,9 +133,9 @@ export default function Web() {
</p>
</div>
<div>
<div className="bg-primary-100 dark:bg-primary-900 mb-4 flex h-10 w-10 items-center justify-center rounded-full lg:h-12 lg:w-12">
<div className="mb-4 flex h-10 w-10 items-center justify-center rounded-full bg-primary-100 dark:bg-primary-900 lg:h-12 lg:w-12">
<svg
className="text-primary-600 dark:text-primary-300 h-5 w-5 lg:h-6 lg:w-6"
className="h-5 w-5 text-primary-600 dark:text-primary-300 lg:h-6 lg:w-6"
fill="currentColor"
viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg"
@ -152,9 +150,9 @@ export default function Web() {
</p>
</div>
<div>
<div className="bg-primary-100 dark:bg-primary-900 mb-4 flex h-10 w-10 items-center justify-center rounded-full lg:h-12 lg:w-12">
<div className="mb-4 flex h-10 w-10 items-center justify-center rounded-full bg-primary-100 dark:bg-primary-900 lg:h-12 lg:w-12">
<svg
className="text-primary-600 dark:text-primary-300 h-5 w-5 lg:h-6 lg:w-6"
className="h-5 w-5 text-primary-600 dark:text-primary-300 lg:h-6 lg:w-6"
fill="currentColor"
viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg"

View file

View file

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Before After
Before After

View file

@ -1,8 +1,15 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"display": "Next.js",
"extends": "./base.json",
"compilerOptions": {
"composite": false,
"declaration": true,
"declarationMap": true,
"inlineSources": false,
"moduleResolution": "node",
"noUnusedLocals": false,
"noUnusedParameters": false,
"preserveWatchOutput": true,
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
@ -17,6 +24,6 @@
"isolatedModules": true,
"jsx": "preserve"
},
"include": ["src", "next-env.d.ts"],
"include": [".", "next-env.d.ts"],
"exclude": ["node_modules"]
}

View file

@ -1,19 +0,0 @@
{
"$schema": "https://turbo.build/schema.json",
"globalDependencies": ["**/.env.*local"],
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**", ".next/**", "!.next/cache/**"]
},
"lint": {
"outputs": []
},
"dev": {
"cache": false
},
"test": {
"outputs": ["coverage/**"]
}
}
}

2533
yarn.lock

File diff suppressed because it is too large Load diff