diff --git a/examples/jiti.js b/examples/jiti.js
index 3167708..149239d 100644
--- a/examples/jiti.js
+++ b/examples/jiti.js
@@ -1,21 +1,13 @@
const path = require('path')
-const { transformSync } = require('@babel/core')
module.exports = require('jiti')(__filename, {
cache: false,
debug: false,
- transform (opts) {
- const _opts = {
- babelrc: false,
- configFile: false,
- compact: false,
- retainLines: typeof opts.retainLines === 'boolean' ? opts.retainLines : true,
- filename: '',
- cwd: '/',
+ transformOptions: {
+ ts: true,
+ retainLines: true,
+ babel: {
plugins: [
- [require('@babel/plugin-transform-modules-commonjs'), { allowTopLevelThis: true }],
- [require('@babel/plugin-transform-typescript')],
- [require('babel-plugin-dynamic-import-node'), { noInterop: true }],
[require('babel-plugin-global-define'), {
__DEV__: true,
__BROWSER__: false
@@ -24,22 +16,11 @@ module.exports = require('jiti')(__filename, {
root: '.',
extensions: ['.ts'],
alias: {
- '^vue-meta$': path.resolve(__dirname, '../src/')
+ '^vue-meta$': path.resolve(__dirname, '../src/'),
+ '^vue-meta/ssr$': path.resolve(__dirname, '../src/ssr')
}
}]
]
}
-
- try {
- return transformSync(opts.source, _opts).code || ''
- } catch (err) {
- return 'exports.__JITI_ERROR__ = ' + JSON.stringify({
- filename: opts.filename,
- line: (err.loc && err.loc.line) || 0,
- column: (err.loc && err.loc.column) || 0,
- code: err.code && err.code.replace('BABEL_', '').replace('PARSE_ERROR', 'ParseError'),
- message: err.message.replace('/: ', '').replace(/\(.+\)\s*$/, '')
- })
- }
}
})
diff --git a/examples/server.js b/examples/server.js
index 7eb40dc..1a3af44 100644
--- a/examples/server.js
+++ b/examples/server.js
@@ -41,10 +41,10 @@ app.use((req, res, next) => {
// the examples without errors in the browser
if (req.url.endsWith('.js')) {
res.setHeader('Content-Type', 'application/javascript')
- res.send('')
+ res.send('/* empty */')
} else if (req.url.endsWith('.css')) {
res.setHeader('Content-Type', 'text/css')
- res.send('')
+ res.send('/* empty */')
} else {
next()
}
diff --git a/examples/ssr/app.template.html b/examples/ssr/app.template.html
index 42b4d4a..38174c9 100644
--- a/examples/ssr/app.template.html
+++ b/examples/ssr/app.template.html
@@ -5,10 +5,10 @@
- {{ bodyPrepend }}
+ {{ bodyPrepend }}
← Examples index
- {{ app }}
+ {{ app }}
{{ bodyAppend }}
diff --git a/examples/ssr/browser.js b/examples/ssr/browser.js
index f9c3c87..12df66b 100644
--- a/examples/ssr/browser.js
+++ b/examples/ssr/browser.js
@@ -1,9 +1,6 @@
-import { createApp } from 'vue'
-import { App, createRouter, metaManager } from '../vue-router/main'
+import { createApp } from '../vue-router/main'
window.users = []
-const app = createApp(App)
-app.use(createRouter('/ssr'))
-app.use(metaManager)
-app.mount('#app')
+const { app, router } = createApp('/ssr', null)
+router.isReady().then(() => app.mount('#app'))
diff --git a/examples/ssr/server.js b/examples/ssr/server.js
index e743948..c9b3d2e 100644
--- a/examples/ssr/server.js
+++ b/examples/ssr/server.js
@@ -1,10 +1,11 @@
import path from 'path'
import fs from 'fs-extra'
-import { createSSRApp } from 'vue'
-import { renderToStringWithMeta } from 'vue-meta'
+import { renderToString } from '@vue/server-renderer'
+
+import { renderMetaToString } from 'vue-meta/ssr'
import template from 'lodash/template'
-import { App, createRouter, metaManager } from '../vue-router/main'
+import { createApp } from '../vue-router/main'
const templateFile = path.resolve(__dirname, 'app.template.html')
const templateContent = fs.readFileSync(templateFile, { encoding: 'utf8' })
@@ -17,17 +18,13 @@ process.server = true
export async function renderPage ({ url }) {
console.log('renderPage', url)
- const app = createSSRApp(App)
- const router = createRouter('/ssr', true)
-
- app.use(router)
- app.use(metaManager)
-
- await router.push(url.substr(4))
-
+ const { app, router } = createApp('/ssr', true)
+ router.push(url.slice(4))
await router.isReady()
- const [appHtml, ctx] = await renderToStringWithMeta(app)
+ const ctx = {}
+ const appHtml = await renderToString(app, ctx)
+ await renderMetaToString(app, ctx)
if (!ctx.teleports) {
ctx.teleports = {}
diff --git a/examples/vue-router/App.js b/examples/vue-router/App.ts
similarity index 86%
rename from examples/vue-router/App.js
rename to examples/vue-router/App.ts
index 0ca6da7..9b8ad21 100644
--- a/examples/vue-router/App.js
+++ b/examples/vue-router/App.ts
@@ -1,5 +1,5 @@
import { watch } from 'vue'
-import { useMeta, useActiveMeta } from 'vue-meta'
+import { useMeta, useActiveMeta } from '../../src'
export default {
setup () {
@@ -32,7 +32,7 @@ export default {
body: 'body-script1.js', // TODO: fix
htmlAttrs: {
amp: true,
- lang: ['en', 'nl']
+ lang: ['en']
},
bodyAttrs: {
class: ['theme-dark']
@@ -44,7 +44,7 @@ export default {
// TODO { content: 'window.a = "
";
// -> altho Vue probably strips comments in production builds (but can be configged afaik)
@@ -175,23 +178,21 @@ export default {
-
-
vue-router
-
+
vue-router
+
-
-
-
-
-
+
+
+
+
+
-
+
`
}
diff --git a/examples/vue-router/Child.js b/examples/vue-router/Child.ts
similarity index 59%
rename from examples/vue-router/Child.js
rename to examples/vue-router/Child.ts
index 7a663c1..2744ef2 100644
--- a/examples/vue-router/Child.js
+++ b/examples/vue-router/Child.ts
@@ -1,6 +1,7 @@
import { defineComponent, ref, reactive, computed, toRefs, onUnmounted } from 'vue'
+import { isSymbol } from '@vue/shared'
import { useRoute } from 'vue-router'
-import { useMeta } from 'vue-meta'
+import { useMeta } from '../../src'
let metaUpdated = 'no'
@@ -16,23 +17,35 @@ export default defineComponent({
const ogTitle = ref('Og Child Title')
+ let routeName: string
+ if (isSymbol(route.name)) {
+ routeName = route.name.toString()
+ } else if (route.name) {
+ routeName = route.name
+ }
+
const metaConfig = computed(() => ({
charset: 'utf16',
- title: route.name[0].toUpperCase() + route.name.slice(1),
- description: 'Description ' + route.name,
+ title: routeName[0].toUpperCase() + routeName.slice(1),
+ description: 'Description ' + routeName,
og: {
- title: ogTitle.value + ' ' + route.name
- }
+ title: ogTitle.value + ' ' + routeName
+ },
+ htmlAttrs: routeName !== 'home'
+ ? {}
+ : {
+ lang: ['nl']
+ }
}))
const { onRemoved } = useMeta(metaConfig)
- const pageName = computed(() => route.name)
+ const pageName = computed(() => routeName)
onUnmounted(() => (metaUpdated = 'yes'))
setTimeout(() => (ogTitle.value = 'Updated Child Og Title'), 1000)
- setTimeout(() => (delete metaConfig.value.og), 3000)
+ setTimeout(() => (delete (metaConfig.value as Partial
).og), 3000)
onRemoved(() => {
console.log('Meta was removed', pageName.value)
diff --git a/examples/vue-router/browser.js b/examples/vue-router/browser.js
index 05bf53c..8bbdb70 100644
--- a/examples/vue-router/browser.js
+++ b/examples/vue-router/browser.js
@@ -1,7 +1,4 @@
-import { createApp } from 'vue'
-import { App, createRouter, metaManager } from './main'
+import { createApp } from './main'
-const app = createApp(App)
-app.use(createRouter('/vue-router'))
-app.use(metaManager)
-app.mount('#app')
+const { app, router } = createApp('/vue-router')
+router.isReady().then(() => app.mount('#app'))
diff --git a/examples/vue-router/index.html b/examples/vue-router/index.html
index 0c9b5aa..3d7f2af 100644
--- a/examples/vue-router/index.html
+++ b/examples/vue-router/index.html
@@ -12,7 +12,7 @@
-
+
← Examples index
diff --git a/examples/vue-router/main.js b/examples/vue-router/main.js
deleted file mode 100644
index d38d16d..0000000
--- a/examples/vue-router/main.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import { h } from 'vue'
-import { createRouter as createVueRouter, createMemoryHistory, createWebHistory } from 'vue-router'
-import { createMetaManager, defaultConfig, resolveOption, useMeta } from 'vue-meta'
-import App from './App'
-import ChildComponent from './Child'
-
-function createComponent () {
- return {
- render: () => h(ChildComponent)
- }
-}
-
-const decisionMaker5000000 = resolveOption((prevValue, context) => {
- const { uid = 0 } = context.vm || {}
- if (!prevValue || prevValue < uid) {
- return uid
- }
-})
-
-const metaManager = createMetaManager({
- ...defaultConfig,
- esi: {
- group: true,
- namespaced: true,
- attributes: ['src', 'test', 'text']
- }
-}, decisionMaker5000000)
-
-useMeta(
- {
- og: {
- something: 'test'
- }
- },
- metaManager
-) /**/
-
-const createRouter = (base, isSSR) => createVueRouter({
- history: isSSR ? createMemoryHistory(base) : createWebHistory(base),
- routes: [
- { name: 'home', path: '/', component: createComponent() },
- { name: 'about', path: '/about', component: createComponent() }
- ]
-})
-
-export {
- App,
- metaManager,
- createRouter
-}
diff --git a/examples/vue-router/main.ts b/examples/vue-router/main.ts
new file mode 100644
index 0000000..763681a
--- /dev/null
+++ b/examples/vue-router/main.ts
@@ -0,0 +1,70 @@
+import { h, createApp as createVueApp, createSSRApp } from 'vue'
+import { createRouter as createVueRouter, createMemoryHistory, createWebHistory } from 'vue-router'
+import { createMetaManager as createVueMetaManager, defaultConfig, useMeta } from '../../src'
+import * as deepestResolver from '../../src/resolvers/deepest'
+import App from './App'
+import ChildComponent from './Child'
+
+function createComponent () {
+ return {
+ render: () => h(ChildComponent)
+ }
+}
+/*
+const decisionMaker5000000 = resolveOption((prevValue, context) => {
+ const { uid = 0 } = context.vm || {}
+ if (!prevValue || prevValue < uid) {
+ return uid
+ }
+})
+*/
+const createMetaManager = (isSSR = false) => createVueMetaManager(
+ isSSR,
+ {
+ ...defaultConfig,
+ esi: {
+ group: true,
+ namespaced: true
+ // TODO?: attributes: ['src', 'test', 'text']
+ }
+ },
+ deepestResolver
+)
+
+const createRouter = (base: string, isSSR = false) => createVueRouter({
+ history: isSSR ? createMemoryHistory(base) : createWebHistory(base),
+ routes: [
+ { name: 'home', path: '/', component: createComponent() },
+ { name: 'about', path: '/about', component: createComponent() }
+ ]
+})
+
+const createApp = (base: string, isSSR = null) => {
+ const app = isSSR === null ? createVueApp(App) : createSSRApp(App)
+ const router = createRouter(base, !!isSSR)
+ const metaManager = createMetaManager(!!isSSR)
+
+ app.use(router)
+ app.use(metaManager)
+
+ useMeta(
+ {
+ og: {
+ something: 'test'
+ }
+ },
+ metaManager
+ ) /**/
+
+ return {
+ app,
+ router,
+ metaManager
+ }
+}
+
+export {
+ createApp,
+ createMetaManager,
+ createRouter
+}
diff --git a/examples/webpack.config.js b/examples/webpack.config.js
index 77abb0b..3204884 100644
--- a/examples/webpack.config.js
+++ b/examples/webpack.config.js
@@ -63,6 +63,7 @@ module.exports = (isBrowser) => {
// on the first HMR update and causes the page to reload.
vue: 'vue/dist/vue.esm-bundler.js',
'vue-meta': path.resolve(__dirname, '../src/'),
+ 'vue-meta/ssr': path.resolve(__dirname, '../src/ssr'),
...extraAliases
}
},
diff --git a/tsconfig.json b/tsconfig.json
index fffa6ec..6fd7bc3 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -25,7 +25,11 @@
"removeComments": false,
"jsx": "preserve",
"lib": ["esnext", "dom"],
- "types": ["jest", "node"]
+ "types": ["jest", "node"],
+ "paths": {
+ "vue-meta": ["./src/"],
+ "vue-meta/*": ["./src/*"],
+ }
},
"include": [
"src/global.d.ts",