netlify is more reliable

This commit is contained in:
Pacharapol Withayasakpunt committed 2019-12-25 13:30:54 +07:00
1 parent 7fe8f5d154
commit 4dfff986d4
16 files changed
+42 -105

No files matched your search

+2 -1
View File
@@ -1,2 +1,3 @@
node_modules node_modules
dist dist
.netlify
+3
View File
@@ -1,5 +1,8 @@
import QParser from 'q2filter' import QParser from 'q2filter'
export const TAGS = JSON.parse(process.env.tags!)
export const HASH = JSON.parse(process.env.hash!)
export function escapeRegExp (s: string) { export function escapeRegExp (s: string) {
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string
} }
+3 -3
View File
@@ -23,7 +23,7 @@ import PostHeader from './PostHeader.vue'
import Empty from './Empty.vue' import Empty from './Empty.vue'
import { Vue, Component, Prop, Watch } from 'nuxt-property-decorator' import { Vue, Component, Prop, Watch } from 'nuxt-property-decorator'
import { makeHtml } from '../assets/make-html' import { makeHtml } from '../assets/make-html'
import { globalStore } from '../store' import { HASH } from '../assets/util'
@Component({ @Component({
components: { components: {
@@ -44,9 +44,9 @@ export default class PostFull extends Vue {
@Watch('header.path') @Watch('header.path')
async updatePost () { async updatePost () {
if (!this.markdown) { if (!this.markdown) {
this.markdown = await fetch(`/build/teaser/${this.header.path}?h=${globalStore.hash.posts[this.header.path]}`).then((r) => r.text()) this.markdown = await fetch(`/build/teaser/${this.header.path}?h=${HASH.posts[this.header.path]}`).then((r) => r.text())
} }
this.markdown = await fetch(`/build/full/${this.header.path}?h=${globalStore.hash.posts[this.header.path]}`).then((r) => r.text()) this.markdown = await fetch(`/build/full/${this.header.path}?h=${HASH.posts[this.header.path]}`).then((r) => r.text())
} }
get html () { get html () {
+3 -4
View File
@@ -17,9 +17,8 @@ section
import PostTeaser from './PostTeaser.vue' import PostTeaser from './PostTeaser.vue'
import Empty from './Empty.vue' import Empty from './Empty.vue'
import QParser from 'q2filter' import QParser from 'q2filter'
import { normalizeArray, searchPosts } from '@/assets/util' import { normalizeArray, searchPosts, HASH } from '@/assets/util'
import { Vue, Component, Prop, Watch } from 'nuxt-property-decorator' import { Vue, Component, Prop, Watch } from 'nuxt-property-decorator'
import { globalStore } from '../store'
@Component({ @Component({
components: { components: {
@@ -70,10 +69,10 @@ export default class PostQuery extends Vue {
tag: this.tag, tag: this.tag,
} : this.q, } : this.q,
current: true, current: true,
posts: await fetch(`/build/header/posts.json?h=${globalStore.hash.posts._header}`).then((r) => r.json()), posts: await fetch(`/build/header/posts.json?h=${HASH.posts._header}`).then((r) => r.json()),
}).map(async (h) => { }).map(async (h) => {
if (!h.teaser) { if (!h.teaser) {
h.teaser = await fetch(`/build/teaser/${h.path}?h=${globalStore.hash.posts[h.path]}`).then((r) => r.text()) h.teaser = await fetch(`/build/teaser/${h.path}?h=${HASH.posts[h.path]}`).then((r) => r.text())
} }
return h return h
})) }))
+2 -2
View File
@@ -15,7 +15,7 @@
import PostHeader from './PostHeader.vue' import PostHeader from './PostHeader.vue'
import { Vue, Component, Prop } from 'nuxt-property-decorator' import { Vue, Component, Prop } from 'nuxt-property-decorator'
import { makeHtml } from '../assets/make-html' import { makeHtml } from '../assets/make-html'
import { globalStore } from '../store' import { HASH } from '../assets/util'
@Component({ @Component({
components: { components: {
@@ -29,7 +29,7 @@ export default class PostTeaser extends Vue {
async mounted () { async mounted () {
if (!this.teaser) { if (!this.teaser) {
this.teaser = await fetch(`/build/teaser/${this.header.path}.html?h=${globalStore.hash.posts[this.header.path]}`) this.teaser = await fetch(`/build/teaser/${this.header.path}.html?h=${HASH.posts[this.header.path]}`)
.then((r) => r.text()) .then((r) => r.text())
} }
} }
+2 -3
View File
@@ -33,8 +33,7 @@ section
<script lang="ts"> <script lang="ts">
import PageSocial from '@/components/PageSocial.vue' import PageSocial from '@/components/PageSocial.vue'
import { Vue, Component } from 'nuxt-property-decorator' import { Vue, Component } from 'nuxt-property-decorator'
import { normalizeArray } from '@/assets/util' import { normalizeArray, TAGS } from '@/assets/util'
import { globalStore } from '~/store'
@Component @Component
export default class Default extends Vue { export default class Default extends Vue {
@@ -53,7 +52,7 @@ export default class Default extends Vue {
q = '' q = ''
get tags () { get tags () {
const tagList = globalStore.tag const tagList = TAGS
return Object.keys(tagList).sort((a, b) => { return Object.keys(tagList).sort((a, b) => {
return tagList[b] - tagList[a] return tagList[b] - tagList[a]
-11
View File
@@ -1,11 +0,0 @@
{
"name": "zhdiary",
"version": 2,
"builds": [
{
"src": "nuxt.config.ts",
"use": "@nuxtjs/now-builder",
"config": {}
}
]
}
+16
View File
@@ -1,4 +1,6 @@
import { Configuration } from '@nuxt/types' import { Configuration } from '@nuxt/types'
import tag from './static/build/tag/posts.json'
import posts from './static/build/header/posts.json'
const config: Configuration = { const config: Configuration = {
mode: 'universal', mode: 'universal',
@@ -90,8 +92,22 @@ const config: Configuration = {
}) })
}, },
}, },
generate: {
routes: [
...Object.keys(tag).map((el) => `/tag/${el}`),
...Object.values(posts).map((el) => {
return el.y && el.mo ? `/post/${el.y}/${el.mo}/${el.name}` : `/post/${el.name}`
}),
],
fallback: true,
},
env: { env: {
title: '中文 Diary', title: '中文 Diary',
tags: JSON.stringify(tag),
hash: JSON.stringify({
posts: require('./static/build/hash/posts.json'),
slides: require('./static/build/hash/slides.json'),
}),
}, },
} }
+4 -1
View File
@@ -9,7 +9,10 @@
"build": "nuxt-ts build", "build": "nuxt-ts build",
"generate": "nuxt-ts generate", "generate": "nuxt-ts generate",
"start": "nuxt-ts start", "start": "nuxt-ts start",
"prebuild": "ts-node -O '{\"module\": \"commonjs\"}' utils/build-api.ts" "build-api": "ts-node -O '{\"module\": \"commonjs\"}' utils/build-api.ts",
"prebuild": "yarn build-api",
"pregenerate": "yarn build-api",
"deploy": "yarn generate && netlify deploy --dir dist"
}, },
"dependencies": { "dependencies": {
"@fortawesome/fontawesome-svg-core": "^1.2.26", "@fortawesome/fontawesome-svg-core": "^1.2.26",
+3 -8
View File
@@ -6,9 +6,8 @@ post-full(:header="header")
import { Vue, Component } from 'nuxt-property-decorator' import { Vue, Component } from 'nuxt-property-decorator'
import PostFull from '@/components/PostFull.vue' import PostFull from '@/components/PostFull.vue'
import htmlToText from 'html-to-text' import htmlToText from 'html-to-text'
import { apiHash } from '@/assets/util' import { apiHash, HASH } from '@/assets/util'
import MakeHtml from '@/assets/make-html' import MakeHtml from '@/assets/make-html'
import { globalStore } from '../../store'
@Component({ @Component({
components: { components: {
@@ -19,11 +18,7 @@ export default class PostPage extends Vue {
header: any = {} header: any = {}
async asyncData ({ params, error, redirect }: any) { async asyncData ({ params, error, redirect }: any) {
// if(process.static && process.client && $payloadURL) { const ps: any[] = JSON.parse(await apiHash('/build/header/posts.json', HASH.posts._header))
// return await $axios.$get($payloadURL(route))
// }
const ps: any[] = JSON.parse(await apiHash('/build/header/posts.json', globalStore.hash.posts._header))
const header = ps.filter((p) => p.name === params.name)[0] const header = ps.filter((p) => p.name === params.name)[0]
if (!header) { if (!header) {
@@ -34,7 +29,7 @@ export default class PostPage extends Vue {
return redirect(encodeURI(`/post/${header.y}/${header.mo}/${params.name}`)) return redirect(encodeURI(`/post/${header.y}/${header.mo}/${params.name}`))
} }
header.teaser = await apiHash(`/build/teaser/${header.path}`, globalStore.hash.posts[header.path]) header.teaser = await apiHash(`/build/teaser/${header.path}`, HASH.posts[header.path])
return { return {
header, header,
+3 -4
View File
@@ -9,7 +9,7 @@ div(style="width: 100vw; height: 100vh")
import { Vue, Component } from 'nuxt-property-decorator' import { Vue, Component } from 'nuxt-property-decorator'
import MakeHtml from '@/assets/make-html' import MakeHtml from '@/assets/make-html'
import matter from 'gray-matter' import matter from 'gray-matter'
import { apiHash } from '@/assets/util' import { apiHash, HASH } from '@/assets/util'
// @ts-ignore // @ts-ignore
import shortHash from 'short-hash' import shortHash from 'short-hash'
import $ from 'cheerio' import $ from 'cheerio'
@@ -18,7 +18,6 @@ import scopeCss from 'scope-css'
import h from 'hyperscript' import h from 'hyperscript'
import qs from 'querystring' import qs from 'querystring'
import stringify from 'fast-json-stable-stringify' import stringify from 'fast-json-stable-stringify'
import { globalStore } from '../store'
declare global { declare global {
interface Window { interface Window {
@@ -61,7 +60,7 @@ export default class RevealMd extends Vue {
if (path) { if (path) {
try { try {
const raw = await apiHash(`/build/slides/${path}`, globalStore.hash.slides[path as string]) const raw = await apiHash(`/build/slides/${path}`, HASH.slides[path as string])
const { data, content } = matter(raw) const { data, content } = matter(raw)
return { return {
@@ -106,7 +105,7 @@ export default class RevealMd extends Vue {
const { path } = this.$route.query const { path } = this.$route.query
if (!this.defaults.markdown && path) { if (!this.defaults.markdown && path) {
try { try {
const raw = await apiHash(`/build/slides/${path}`, globalStore.hash.slides[path as string]) const raw = await apiHash(`/build/slides/${path}`, HASH.slides[path as string])
const { data, content } = matter(raw) const { data, content } = matter(raw)
this.defaults.markdown = content this.defaults.markdown = content
View File
Whitespace-only changes.
-26
View File
@@ -1,26 +0,0 @@
import { Module, VuexModule, Mutation } from 'vuex-module-decorators'
import { DataType } from '../utils/build-api'
@Module({
name: 'global',
stateFactory: true,
namespaced: true,
})
export default class GlobalModule extends VuexModule {
hash: Record<DataType, Record<string, string>> = {
posts: {},
slides: {},
}
tag: Record<string, number> = {}
@Mutation
setHash (h: any) {
this.hash = h
}
@Mutation
setTag (tag: any) {
this.tag = tag
}
}
-28
View File
@@ -1,28 +0,0 @@
import { Store, ActionTree } from 'vuex'
import { initialiseStores } from '~/utils/store-accessor'
import { apiHash } from '~/assets/util'
const initializer = (store: Store<any>) => initialiseStores(store)
export const actions: ActionTree<any, any> = {
async nuxtServerInit ({ commit }) {
const [
hPosts,
hSlides,
tPosts,
] = await Promise.all([
apiHash('/build/hash/posts.json', Math.random().toString().substr(-5)),
apiHash('/build/hash/slides.json', Math.random().toString().substr(-5)),
apiHash('/build/tag/posts.json', Math.random().toString().substr(-5)),
])
commit('global/setHash', {
posts: JSON.parse(hPosts),
slides: JSON.parse(hSlides),
})
commit('global/setTag', JSON.parse(tPosts))
},
}
export const plugins = [initializer]
export * from '~/utils/store-accessor'
+1
View File
@@ -15,6 +15,7 @@
"noEmit": true, "noEmit": true,
"experimentalDecorators": true, "experimentalDecorators": true,
"skipLibCheck": true, "skipLibCheck": true,
"resolveJsonModule": true,
"baseUrl": ".", "baseUrl": ".",
"paths": { "paths": {
"~/*": [ "~/*": [
-14
View File
@@ -1,14 +0,0 @@
import { Store } from 'vuex'
import { getModule } from 'vuex-module-decorators'
import GlobalModule from '../store/global'
let globalStore: GlobalModule
function initialiseStores (store: Store<any>): void {
globalStore = getModule(GlobalModule, store)
}
export {
initialiseStores,
globalStore,
}