add sub git and git-tools

This commit is contained in:
Kasper Juul Hermansen 2022-11-06 21:07:22 +01:00
commit 9a0c882fe4
Signed by: kjuulh
GPG Key ID: 0F95C140730F2F23
18 changed files with 3803 additions and 0 deletions

41
.gitignore vendored Executable file
View File

@ -0,0 +1,41 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# local env files
.env*
!.env*.example
# vercel
.vercel
# typescript
*.tsbuildinfo
# tailwind
.turbo
.vscode
styles/dist.css

1
.npmrc Normal file
View File

@ -0,0 +1 @@
save-exact=true

38
README.md Normal file
View File

@ -0,0 +1,38 @@
# Next.js + Turbopack App Directory Playground
[Turbopack](https://turbo.build/pack) is a new incremental bundler optimized for JavaScript and TypeScript, written in Rust by the creators of Webpack and Next.js at [Vercel](https://vercel.com). On large applications Turbopack updates 10x faster than Vite and 700x faster than Webpack ([benchmark](https://turbo.build/pack/docs/benchmarks)). For the biggest applications the difference grows even more stark with updates up to 20x faster than Vite.
This playground is a mirror of the [Next.js v13 App Directory Playground](https://github.com/vercel/app-playground), but uses Turbopack as the Next.js development server (`next dev --turbo`).
**As a reminder, Turbopack is currently in alpha and not yet ready for production. We appreciate your ongoing support as we work to make it ready for everyone.**
## Running Locally
1. Install dependencies: `yarn`
1. Start the dev server: `yarn dev`
**Note:** The playground uses [Tailwind CSS](https://tailwindcss.com). However, Turbopack does not yet support fully [PostCSS](https://turbo.build/pack/docs/features/css#postcss), but it does support CSS and CSS Modules. [As a workaround](https://turbo.build/pack/docs/features/css#tailwind-css), we run Tailwind through it's CLI upon `postinstall`. For live reload of CSS, you can run Tailwind in another process with the `--watch` flag or install `concurrently` and modify your `dev` script:
```bash
yarn add concurrently --dev
```
Then modify your `dev` script in `package.json`:
```json
{
"scripts": {
"dev": "concurrently \"next dev --turbo\" \"npm run tailwind --watch\""
}
}
```
For more information, see: https://turbo.build/pack/docs/features/css#tailwind-css
## Documentation
https://nextjs.link/with-turbopack
## Providing Feedback
https://nextjs.link/turbopack-feedback

21
app/layout.tsx Normal file
View File

@ -0,0 +1,21 @@
import '@/styles/dist.css';
import React from 'react';
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html>
<head>
<title>kjuulh microblog</title>
</head>
<body className="box-border overflow-y-scroll bg-zinc-900">
<div className="grid grid-cols-[1fr,min(800px,100%),1fr] px-6">
<div className="col-start-2 space-y-6">{children}</div>
</div>
</body>
</html>
);
}

14
app/page.tsx Normal file
View File

@ -0,0 +1,14 @@
import { getPosts } from '@/lib/getPosts';
import Posts from './posts';
export const revalidate = 10;
export default async function Page() {
const posts = await getPosts();
return (
<div className="space-y-6">
<Posts posts={posts} />
</div>
);
}

5
app/postCard.tsx Normal file
View File

@ -0,0 +1,5 @@
const PostCard = () => {
return <div></div>;
};
export default PostCard;

24
app/posts.tsx Normal file
View File

@ -0,0 +1,24 @@
import { getPosts, Post } from '@/lib/getPosts';
import { FC, use } from 'react';
interface PostProps {
posts: Post[];
}
const Posts: FC<PostProps> = ({ posts }) => {
return (
<>
{posts.map((p) => (
<div className="space-y-2 text-white">
<p className="font-bold">{p.author.name}</p>
<p>{p.title}</p>
{p.message &&
p.message
.split('\n')
.map((para, i) => para && <p key={i}>{para}</p>)}
</div>
))}
</>
);
};
export default Posts;

41
lib/getPosts.tsx Normal file
View File

@ -0,0 +1,41 @@
import { exec } from 'child_process';
export type Post = {
title: string;
message?: string;
author: {
email: string;
name: string;
};
time: number;
};
const posts: Post[] = [
{
author: 'kjuulh',
post: 'some post\n',
},
{
author: 'kjuulh',
post: `some other post with
some more text`,
},
];
export const getPosts = async (): Promise<Post[]> => {
return new Promise((resolve, reject) => {
exec(`git-log --path ${process.env.POSTS_DIR}`, (error, stdout, stderr) => {
if (error) {
console.warn(error);
reject('could not load posts stderr: ' + stderr + 'stdout: ' + stdout);
return;
}
const posts: Post[] = JSON.parse(stdout);
resolve(posts);
});
});
};
export const revalidate = 5;

5
next-env.d.ts vendored Normal file
View File

@ -0,0 +1,5 @@
/// <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.

11
next.config.js Executable file
View File

@ -0,0 +1,11 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true, // Recommended for the `pages` directory, default in `app`.
swcMinify: true,
experimental: {
// Required:
appDir: true,
},
};
module.exports = nextConfig;

42
package.json Normal file
View File

@ -0,0 +1,42 @@
{
"private": true,
"scripts": {
"dev": "next dev --turbo",
"dev:tailwind": "concurrently 'next dev --turbo' 'yarn run tailwind --watch'",
"build": "next build",
"start": "next start",
"lint": "next lint",
"tailwind": "tailwindcss -i styles/globals.css -o styles/dist.css",
"format": "prettier --write \"**/*.{js,ts,tsx,md}\"",
"postinstall": "npm run tailwind"
},
"prettier": {
"arrowParens": "always",
"semi": true,
"trailingComma": "all",
"singleQuote": true
},
"dependencies": {
"clsx": "1.2.1",
"concurrently": "7.5.0",
"next": "latest",
"react": "18.2.0",
"react-dom": "18.2.0",
"styled-components": "6.0.0-beta.2",
"styled-jsx": "5.1.0",
"use-count-up": "3.0.1"
},
"devDependencies": {
"@types/node": "18.0.3",
"@types/react": "18.0.15",
"@types/react-dom": "18.0.6",
"autoprefixer": "^10.4.7",
"eslint": "8.19.0",
"eslint-config-next": "latest",
"postcss": "^8.4.14",
"prettier": "^2.7.1",
"prettier-plugin-tailwindcss": "^0.1.12",
"tailwindcss": "^3.1.6",
"typescript": "4.7.4"
}
}

1
posts Submodule

@ -0,0 +1 @@
Subproject commit a8dde26a9516c3d8b64bc9afee8936c2ba5f3976

BIN
public/favicon.ico Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/q-zip.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

3
styles/globals.css Executable file
View File

@ -0,0 +1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

63
tailwind.config.js Normal file
View File

@ -0,0 +1,63 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
'./app/**/*.{js,ts,jsx,tsx}',
'./page/**/*.{js,ts,jsx,tsx}',
'./ui/**/*.{js,ts,jsx,tsx}',
],
theme: {
extend: {
// https://vercel.com/design/color
colors: {
vercel: {
pink: '#FF0080',
blue: '#0070F3',
cyan: '#50E3C2',
orange: '#F5A623',
violet: '#7928CA',
},
},
keyframes: ({ theme }) => ({
rerender: {
'0%': {
'border-color': theme('colors.vercel.pink'),
},
'40%': {
'border-color': theme('colors.vercel.pink'),
},
},
highlight: {
'0%': {
background: theme('colors.vercel.pink'),
color: theme('colors.white'),
},
'40%': {
background: theme('colors.vercel.pink'),
color: theme('colors.white'),
},
},
shimmer: {
'100%': {
transform: 'translateX(100%)',
},
},
translateXReset: {
'100%': {
transform: 'translateX(0)',
},
},
fadeToTransparent: {
'0%': {
opacity: 1,
},
'40%': {
opacity: 1,
},
'100%': {
opacity: 0,
},
},
}),
},
},
};

31
tsconfig.json Executable file
View File

@ -0,0 +1,31 @@
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"baseUrl": ".",
"paths": {
"@/ui/*": ["ui/*"],
"@/lib/*": ["lib/*"],
"@/styles/*": ["styles/*"]
},
"plugins": [
{
"name": "next"
}
]
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
}

3462
yarn.lock Normal file

File diff suppressed because it is too large Load Diff