Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v3 website #214

Draft
wants to merge 36 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
a882847
Prepare v3 docs update
kossnocorp Dec 29, 2022
3533e8c
Upgrade webpack packages
kossnocorp Dec 29, 2022
d5a6cc2
Upgrade Typesaurus
kossnocorp Dec 29, 2022
26dafc1
Rearrange init code
kossnocorp Dec 29, 2022
f761f71
Add v3 docs schema migration
kossnocorp Dec 29, 2022
3247b6e
TSDoc rendering prototype
kossnocorp Dec 31, 2022
1cdd4d6
Basic type rendering, types modal preparation
kossnocorp Jan 2, 2023
9672631
Migrate home styles to vanilla-extract
kossnocorp Jan 2, 2023
728bfd2
Migrate CSS to vanilla-extract
kossnocorp Jan 3, 2023
23709a6
Remove NyanCSS
kossnocorp Jan 3, 2023
344edb6
Add types modal scaffold
kossnocorp Jan 5, 2023
ef65145
Add types modal scaffold
kossnocorp Jan 16, 2023
015f9d1
Advance types rendering, a lot of changes
kossnocorp Jan 24, 2023
f529acb
TSDoc -> TypeDoc, constants, latest @date-fns/docs
kossnocorp Jan 24, 2023
a40ee11
Constants doc
kossnocorp Jan 26, 2023
bade1da
Advance TypeDoc doc rendering
kossnocorp Feb 7, 2023
988f2fa
Object reflection, indentation, proper type styling, imports
kossnocorp Feb 7, 2023
a785f43
Add section headers to types
kossnocorp Feb 7, 2023
9650bd7
Commit bunch of changes
kossnocorp Mar 10, 2023
f8ac437
Fix in page generic navigation
kossnocorp Mar 11, 2023
d82f77e
I've had enough
kossnocorp Mar 11, 2023
b896bab
Improve function doc
kossnocorp Mar 11, 2023
14fce19
Add CDN to usage
kossnocorp Mar 13, 2023
709b230
Fix scroll in docs lists
kossnocorp Mar 19, 2023
9508755
Fallback description to summary
kossnocorp Mar 19, 2023
f40917e
Unique signature header links
kossnocorp Mar 19, 2023
f7352c0
Center layout
kossnocorp Mar 19, 2023
19052f7
Dark mode foundation
kossnocorp Mar 21, 2023
1793bdb
Full home page dark mode, docs
kossnocorp Mar 26, 2023
5db0e0c
More dark theme styles
kossnocorp Apr 3, 2023
4e60157
Finish dark mode
kossnocorp May 2, 2023
64047c0
Improve the dark theme
kossnocorp Jun 26, 2023
2d5146a
FP submodule section & dark theme
kossnocorp Jul 10, 2023
0b0f6f9
Improve signatures & debug
kossnocorp Jul 21, 2023
b5d6232
Defaults, exclude external types
kossnocorp Aug 21, 2023
093cf15
Add types summary
kossnocorp Nov 15, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ yarn-error.log
.DS_Store
FIXME_*
*.log
/secrets
/secrets
38 changes: 23 additions & 15 deletions config/webpackDefaults.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { DefinePlugin, Configuration } from 'webpack'
import { VanillaExtractPlugin } from '@vanilla-extract/webpack-plugin'
import MiniCssExtractPlugin from 'mini-css-extract-plugin'
import { getMode, getPath } from './utils'
import merge from 'webpack-merge'
Expand All @@ -13,7 +14,12 @@ export function webpackDefaults(config: Configuration): Configuration {
mode,
devtool: isProduction ? 'source-map' : 'inline-source-map',
module: {
rules: [tsRule(), cssRule(isWeb), fileRule(isWeb)],
rules: [
tsRule(),
vanillaExtractRule(),
cssRule(isWeb),
fileRule(isWeb),
],
},
resolve: {
extensions: ['.tsx', '.ts', '.js', '.json'],
Expand All @@ -22,6 +28,7 @@ export function webpackDefaults(config: Configuration): Configuration {
},
},
plugins: [
new VanillaExtractPlugin(),
new MiniCssExtractPlugin(
isProduction
? {
Expand Down Expand Up @@ -54,7 +61,7 @@ function tsRule() {
},
},
],
exclude: /node_modules/,
exclude: [/node_modules/, /\.css\.ts$/i],
}
}

Expand All @@ -66,23 +73,24 @@ function cssRule(isWeb: boolean) {
]
: 'null-loader'

const nyancssLoaders = [
'@nyancss/css-modules-loader/preact',
{ loader: MiniCssExtractPlugin.loader, options: { esModule: false } },
{
loader: 'css-loader',
options: { modules: true },
},
]

return {
test: /\.css$/,
oneOf: [
use: cssLoaders,
exclude: [/\.vanilla\.css$/i],
}
}

function vanillaExtractRule() {
return {
test: /\.vanilla\.css$/i, // Targets only CSS files generated by vanilla-extract
use: [
MiniCssExtractPlugin.loader,
{
resourceQuery: /global/, // foobar.css?global
use: cssLoaders,
loader: require.resolve('css-loader'),
options: {
url: false, // Required as image imports should be handled via JS/TS import statements
},
},
{ use: nyancssLoaders },
],
}
}
Expand Down
85 changes: 37 additions & 48 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,86 +14,75 @@
"start": "env NODE_ENV=development ts-node -r tsconfig-paths/register devServer.ts"
},
"dependencies": {
"@date-fns/date-fns-db": "^0.0.14",
"@nyancss/css-modules-loader": "^1.1.0",
"@nyancss/react": "^1.3.0",
"@date-fns/docs": "^0.25.0",
"@sentry/browser": "^5.30.0",
"@sentry/tracing": "^5.30.0",
"@switcher/preact": "^1.1.2",
"@types/assets-webpack-plugin": "^6.1.0",
"@types/copy-webpack-plugin": "^6.4.0",
"@switcher/preact": "2.3.0",
"@types/assets-webpack-plugin": "^7.1.0",
"@types/copy-webpack-plugin": "^10.1.0",
"@types/cors": "^2.8.7",
"@types/enzyme": "^3.10.8",
"@types/lodash": "^4.14.167",
"@types/mini-css-extract-plugin": "^1.2.2",
"@types/mini-css-extract-plugin": "^2.5.1",
"@types/mocha": "^8.2.0",
"@types/node": "^14.14.32",
"@types/power-assert": "^1.5.3",
"@types/prismjs": "^1.16.3",
"@types/remarkable": "^2.0.0",
"@types/webpack-dev-middleware": "^4.1.0",
"@types/webpack-hot-middleware": "^2.25.3",
"@types/webpack-node-externals": "^2.5.0",
"@typesaurus/preact": "^4.0.0",
"assets-webpack-plugin": "^7.0.0",
"@types/webpack-dev-middleware": "^5.3.0",
"@types/webpack-hot-middleware": "^2.25.6",
"@types/webpack-node-externals": "^2.5.3",
"@typesaurus/preact": "6.0.0-alpha.4",
"@vanilla-extract/css": "^1.9.2",
"@vanilla-extract/webpack-plugin": "^2.2.0",
"assets-webpack-plugin": "^7.1.1",
"body-parser": "^1.19.0",
"copy-webpack-plugin": "^7.0.0",
"classnames": "^2.3.2",
"copy-webpack-plugin": "^11.0.0",
"cors": "^2.8.5",
"css-loader": "^3.0.0",
"css-loader": "^6.7.3",
"date-fns": "^2.16.1",
"enzyme": "^3.11.0",
"enzyme-adapter-preact-pure": "^2.2.3",
"express": "^4.17.1",
"file-loader": "^6.1.0",
"firebase": "^8.2.2",
"firebase-admin": "^9.4.2",
"firebase-functions": "^3.13.0",
"html-webpack-plugin": "^5.2.0",
"file-loader": "^6.2.0",
"firebase": "^9.15.0",
"firebase-admin": "^11.4.1",
"firebase-functions": "^4.1.1",
"html-webpack-plugin": "^5.5.0",
"husky": "^4.3.0",
"isomorphic-fetch": "^2.2.1",
"json-bond": "^0.1.0",
"lint-staged": "^10.3.0",
"lodash": "^4.17.20",
"mini-css-extract-plugin": "^1.3.9",
"mini-css-extract-plugin": "^2.7.2",
"mocha": "^8.2.1",
"null-loader": "^4.0.1",
"power-assert": "^1.6.1",
"preact": "^10.4.8",
"preact": "^10.11.3",
"preact-render-to-string": "^5.1.10",
"prettier": "2.1.1",
"prismjs": "^1.23.0",
"remarkable": "^2.0.1",
"reset.css": "^2.0.2",
"style-loader": "^1.2.1",
"ts-loader": "^8.0.3",
"ts-node": "^9.1.1",
"tsconfig-paths": "^3.9.0",
"tsconfig-paths-webpack-plugin": "^3.3.0",
"style-loader": "^3.3.1",
"ts-loader": "^9.4.2",
"ts-node": "^10.9.1",
"tsconfig-paths": "^4.1.1",
"tsconfig-paths-webpack-plugin": "^4.0.0",
"tslint": "~6.1.3",
"typesaurus": "^7.1.0",
"typescript": "^4.0.2",
"webpack": "^5.24.2",
"webpack-cli": "^4.1.0",
"webpack-dev-middleware": "^4.1.0",
"webpack-hot-middleware": "^2.25.0",
"webpack-merge": "^5.7.3",
"webpack-node-externals": "^2.5.2",
"typedoc": "^0.23.23",
"typeroo": "^0.9.0",
"typesaurus": "10.0.0-alpha.41",
"typescript": "^4.9.4",
"webpack": "^5.75.0",
"webpack-cli": "^5.0.1",
"webpack-dev-middleware": "^6.0.1",
"webpack-hot-middleware": "^2.25.3",
"webpack-merge": "^5.8.0",
"webpack-node-externals": "^3.0.0",
"yarn": "^1.22.10"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.{js,jsx,json,css,md}": [
"yarn format"
],
"*.{ts,tsx}": [
"yarn format",
"yarn lint"
]
},
"prettier": {
"singleQuote": true,
"semi": false
Expand Down
12 changes: 12 additions & 0 deletions scripts/migrations/migratePackages.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { db } from '@date-fns/docs'
import * as admin from 'firebase-admin'

admin.initializeApp()

db.packages
.all()
.then((packages) =>
Promise.all(
packages.map((p) => db.packages.set(db.packages.id(p.data.name), p.data))
)
)
59 changes: 59 additions & 0 deletions scripts/migrations/migrateV3.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { db, DateFnsDocs } from '@date-fns/docs'
import * as admin from 'firebase-admin'
import { last } from 'lodash'
import { StringifiedJSON } from 'typeroo/json'
import { schema, Typesaurus } from 'typesaurus'

admin.initializeApp()

type Page =
| DateFnsDocs.MarkdownPage
| (Omit<DateFnsDocs.JSDocPage, 'doc'> & {
doc: { json: string }
})

const oldDb = schema(($) => ({
pages: $.collection<Page>(),
}))

type OldSchema = Typesaurus.Schema<typeof oldDb>

const maxPageSize = 100

processAll((pages) =>
Promise.all(
pages.map((page) => {
if (page.data.type === 'markdown') return
return db.pages.update(page.ref.id, {
doc: page.data.doc.json as StringifiedJSON<DateFnsDocs.JSDocFunction>,
})
})
)
)
.then(() => console.log('Done'))
.catch((error) => {
console.error(error)
process.exit(1)
})

type ChunkCallback = (chunk: OldSchema['pages']['Doc'][]) => unknown

async function processAll(
cb: ChunkCallback,
cursor?: OldSchema['pages']['Doc']
) {
const { pageSize, nextCursor } = await processChunk(cb, cursor)
if (nextCursor && pageSize === maxPageSize) await processAll(cb, nextCursor)
}

async function processChunk(
cb: ChunkCallback,
cursor?: OldSchema['pages']['Doc']
) {
const chunk = await oldDb.pages.query(($) => [
$.field($.docId()).order('asc', cursor && $.startAfter(cursor)),
$.limit(maxPageSize),
])
await cb(chunk)
return { pageSize: chunk.length, nextCursor: last(chunk) }
}
4 changes: 2 additions & 2 deletions src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ const config: { [k: string]: Config } = {
development: {
jobsURL: 'https://jobs.date-fns.org',
firebaseApp: {
apiKey: 'AIzaSyBoDBiIbKeiu4-Uz4JzqH3X7pwbop2PfpU',
projectId: 'date-fns-org',
apiKey: 'AIzaSyArPabWWebnLWhEgITZbLjTA6I_BaDmF0E',
projectId: 'date-fns-org-staging',
},
apiURL: '/api',
},
Expand Down
1 change: 1 addition & 0 deletions src/server/template/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ export const template = ({ body }: Params = {}) =>
</head>
<body>
<div id="root">${body ?? ''}</div>
<div id="portals"></div>

<script src="${entryPath('main', 'js')}"></script>

Expand Down
14 changes: 14 additions & 0 deletions src/types/assets.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
declare module '*.png' {
const url: string
export default url
}

declare module '*.jpg' {
const url: string
export default url
}

declare module '*.svg' {
const url: string
export default url
}
47 changes: 18 additions & 29 deletions src/ui/components/BooksWidget/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,7 @@ import { h, FunctionComponent } from 'preact'
import shuffle from 'lodash/shuffle'
import { useMemo, useState } from 'preact/hooks'
import { books } from './constants'
import {
Container,
Badge,
BadgeLabel,
BadgeNext,
Cover,
Text,
Header,
Title,
Description,
Link,
} from './style.css'
import * as styles from './styles.css'

export const BooksWidget: FunctionComponent = () => {
const shuffledBooks = useMemo(() => shuffle(books), [])
Expand All @@ -22,29 +11,29 @@ export const BooksWidget: FunctionComponent = () => {

return (
<div>
<Container
tag="a"
<a
class={styles.container}
href={book.url}
target="_blank"
rel="noopener noreferrer"
>
<Cover tag="img" src={book.cover} />
<img class={styles.cover} src={book.cover} />

<Text>
<Header>
<Title>{book.title}</Title>
<Description>{book.description}</Description>
</Header>
<div class={styles.text}>
<div class={styles.header}>
<div class={styles.title}>{book.title}</div>
<div class={styles.description}>{book.description}</div>
</div>

<Link tag="button">Get the book</Link>
</Text>
</Container>
<button class={styles.link}>Get the book</button>
</div>
</a>

<Badge>
<BadgeLabel>☝️ Support date-fns, buy a book 🙏</BadgeLabel>
<div class={styles.badge}>
<div class={styles.badgeLabel}>☝️ Support date-fns, buy a book 🙏</div>

<BadgeNext
tag="button"
<button
class={styles.badgeNext}
onClick={() => {
let newIndex = bookIndex + 1
if (newIndex > books.length - 1) {
Expand All @@ -54,8 +43,8 @@ export const BooksWidget: FunctionComponent = () => {
}}
>
Next book
</BadgeNext>
</Badge>
</button>
</div>
</div>
)
}
Loading
Loading