@nuxtjs/prismic 1.4.1 → 3.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,59 +1,84 @@
1
+ <!--
2
+
3
+ Replace all on all files (README.md, CONTRIBUTING.md, bug_report.md, package.json):
4
+ - @nuxtjs/prismic
5
+ - Easily connect your Nuxt 3 application to your content hosted on Prismic
6
+ - nuxt-community/prismic-module
7
+ - prismic-module
8
+
9
+ -->
10
+
1
11
  # @nuxtjs/prismic
2
12
 
3
13
  [![npm version][npm-version-src]][npm-version-href]
4
14
  [![npm downloads][npm-downloads-src]][npm-downloads-href]
5
15
  [![Github Actions CI][github-actions-ci-src]][github-actions-ci-href]
6
16
  [![Codecov][codecov-src]][codecov-href]
17
+ [![Conventional Commits][conventional-commits-src]][conventional-commits-href]
7
18
  [![License][license-src]][license-href]
8
19
 
9
- > @nuxtjs/prismic helps you connect your [Nuxt.js](https://nuxtjs.org) application to your content hosted on [Prismic](https://prismic.io)
20
+ Easily connect your Nuxt.js application to your content hosted on [Prismic][prismic].
10
21
 
11
- - [✨ &nbsp;Release Notes](/CHANGELOG.md)
12
- - [📖 &nbsp;Read the documentation](https://prismic.nuxtjs.org)
22
+ - 🚀 &nbsp;Add Prismic to your Nuxt app in seconds;
23
+ - 🎣 &nbsp;Access Prismic SDK through composition and options API;
24
+ - 🖼 &nbsp;Prismic previews supported.
13
25
 
14
- ## Features
26
+ ## Install
15
27
 
16
- - Add Prismic to your Nuxt app in seconds
17
- - Access Prismic SDK with `$prismic`
18
- - Prismic previews supported, [check out the demo!](https://prismic.nuxtjs.org/#videos)
19
- - Compact configuration
20
-
21
- [📖 &nbsp;Read the documentation](https://prismic.nuxtjs.org)
28
+ ```bash
29
+ npm install --save-dev @nuxtjs/prismic@alpha # or yarn add --dev @nuxtjs/prismic@alpha
30
+ ```
22
31
 
23
- ## Setup
32
+ Then, add `@nuxtjs/prismic` to the `modules` section of your Nuxt config and configure your Prismic API endpoint:
24
33
 
25
- 1. Add `@nuxtjs/prismic` dependency to your project:
34
+ ```javascript
35
+ import { defineNuxtConfig } from 'nuxt3'
26
36
 
27
- ```bash
28
- yarn add @nuxtjs/prismic # or npm install @nuxtjs/prismic
37
+ export default defineNuxtConfig({
38
+ modules: ['@nuxtjs/prismic'],
39
+ prismic: {
40
+ endpoint: 'my-repository'
41
+ },
42
+ });
29
43
  ```
30
44
 
31
- 2. Then, add `@nuxtjs/prismic` to the `buildModules` section of `nuxt.config.js` and configure your Prismic API endpoint:
32
-
33
- ```js
34
- {
35
- buildModules: [
36
- '@nuxtjs/prismic',
37
- ],
38
- prismic: {
39
- endpoint: 'https://<REPOSITORY>.cdn.prismic.io/api/v2',
40
- modern: true
41
- // see documentation for more!
42
- }
43
- }
44
- ```
45
+ ## Documentation
46
+
47
+ To discover what's new on this package check out [the changelog][changelog]. For full documentation, visit the [module documentation][nuxt-docs] and [Prismic official documentation][prismic-docs].
45
48
 
46
- ## Development
49
+ ## Contributing
47
50
 
48
- 1. Clone this repository
49
- 2. Install dependencies using `yarn install`
50
- 3. Start development server using `yarn dev`
51
+ Whether you're helping us fix bugs, improve the docs, or spread the word, we'd love to have you as part of the Prismic developer community!
52
+
53
+ **Asking a question**: [Open a new topic][forum-question] on our community forum explaining what you want to achieve / your question. Our support team will get back to you shortly.
54
+
55
+ **Reporting a bug**: [Open an issue][repo-bug-report] explaining your application's setup and the bug you're encountering.
56
+
57
+ **Suggesting an improvement**: [Open an issue][repo-feature-request] explaining your improvement or feature so we can discuss and learn more.
58
+
59
+ **Submitting code changes**: For small fixes, feel free to [open a pull request][repo-pull-requests] with a description of your changes. For large changes, please first [open an issue][repo-feature-request] so we can discuss if and how the changes should be implemented.
51
60
 
52
61
  ## License
53
62
 
54
63
  [MIT License](./LICENSE)
55
64
 
56
- Thanks to [James Pegg](https://github.com/jamespeggsh) for the initial implementation of the module!
65
+ <!-- Links -->
66
+
67
+ [prismic]: https://prismic.io
68
+
69
+ <!-- TODO: Replace link with a more useful one if available -->
70
+
71
+ [nuxt-docs]: https://v3.prismic.nuxtjs.org
72
+ [prismic-docs]: https://prismic.io/docs/technical-reference/prismicio-vue?version=v3
73
+ [changelog]: ./CHANGELOG.md
74
+ [contributing]: ./CONTRIBUTING.md
75
+
76
+ <!-- TODO: Replace link with a more useful one if available -->
77
+
78
+ [forum-question]: https://community.prismic.io
79
+ [repo-bug-report]: https://github.com/nuxt-community/prismic-module/issues/new?assignees=&labels=bug&template=bug_report.md&title=
80
+ [repo-feature-request]: https://github.com/nuxt-community/prismic-module/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=
81
+ [repo-pull-requests]: https://github.com/nuxt-community/prismic-module/pulls
57
82
 
58
83
  <!-- Badges -->
59
84
 
@@ -65,5 +90,7 @@ Thanks to [James Pegg](https://github.com/jamespeggsh) for the initial implement
65
90
  [github-actions-ci-href]: https://github.com/nuxt-community/prismic-module/actions?query=workflow%3Aci
66
91
  [codecov-src]: https://img.shields.io/codecov/c/github/nuxt-community/prismic-module.svg
67
92
  [codecov-href]: https://codecov.io/gh/nuxt-community/prismic-module
93
+ [conventional-commits-src]: https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg
94
+ [conventional-commits-href]: https://conventionalcommits.org
68
95
  [license-src]: https://img.shields.io/npm/l/@nuxtjs/prismic.svg
69
96
  [license-href]: https://npmjs.com/package/@nuxtjs/prismic
@@ -0,0 +1,5 @@
1
+ module.exports = function(...args) {
2
+ return import('./module.mjs').then(m => m.default.call(this, ...args))
3
+ }
4
+ const _meta = module.exports.meta = require('./module.json')
5
+ module.exports.getMeta = () => Promise.resolve(_meta)
@@ -0,0 +1,13 @@
1
+ import * as _nuxt_schema from '@nuxt/schema';
2
+ import { PrismicPluginOptions } from '@prismicio/vue';
3
+
4
+ declare type PrismicModuleOptions = Omit<PrismicPluginOptions, 'endpoint' | 'client' | 'linkResolver'> & {
5
+ endpoint: string;
6
+ client?: string;
7
+ linkResolver?: string;
8
+ preview?: string | false;
9
+ };
10
+
11
+ declare const _default: _nuxt_schema.NuxtModule<PrismicModuleOptions>;
12
+
13
+ export { PrismicModuleOptions as ModuleOptions, PrismicModuleOptions, _default as default };
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "@nuxtjs/prismic",
3
+ "version": "3.0.0-alpha.2",
4
+ "configKey": "prismic",
5
+ "compatibility": {
6
+ "nuxt": "^3.0.0"
7
+ }
8
+ }
@@ -0,0 +1,120 @@
1
+ import { join } from 'path';
2
+ import { defineNuxtModule, createResolver, addPlugin, addComponent, addAutoImport, extendPages, addTemplate } from '@nuxt/kit';
3
+ import { cleanDoubleSlashes } from 'ufo';
4
+ import { isRepositoryEndpoint, getRepositoryName } from '@prismicio/client';
5
+ import * as prismicVue from '@prismicio/vue';
6
+ import { existsSync } from 'fs';
7
+ import consola from 'consola';
8
+
9
+ const name = "@nuxtjs/prismic";
10
+ const version = "3.0.0-alpha.2";
11
+
12
+ const fileExists = (path, extensions = ["js", "ts"]) => {
13
+ if (!path) {
14
+ return null;
15
+ } else if (existsSync(path)) {
16
+ return path;
17
+ }
18
+ const extension = extensions.find((extension2) => existsSync(`${path}.${extension2}`));
19
+ return extension ? `${path}.${extension}` : null;
20
+ };
21
+
22
+ const logger = consola.withScope("nuxt:prismic");
23
+
24
+ const module = defineNuxtModule({
25
+ meta: {
26
+ name: name,
27
+ version: version,
28
+ configKey: "prismic",
29
+ compatibility: { nuxt: "^3.0.0" }
30
+ },
31
+ defaults: (nuxt) => ({
32
+ endpoint: "",
33
+ clientConfig: {},
34
+ client: cleanDoubleSlashes(`~/${nuxt.options.dir.app}/prismic/client`),
35
+ linkResolver: cleanDoubleSlashes(`~/${nuxt.options.dir.app}/prismic/linkResolver`),
36
+ htmlSerializer: void 0,
37
+ injectComponents: true,
38
+ components: {},
39
+ preview: "/preview"
40
+ }),
41
+ hooks: {},
42
+ setup(mergedOptions, nuxt) {
43
+ var _a, _b, _c;
44
+ if (!mergedOptions.endpoint) {
45
+ logger.warn("Options `endpoint` is required, disabling module...");
46
+ return;
47
+ }
48
+ const resolver = createResolver(import.meta.url);
49
+ nuxt.options.build.transpile.push(resolver.resolve("runtime"));
50
+ const addUserFileWithUndefinedFallback = (filename, path, extensions = ["js", "ts"]) => {
51
+ const resolvedFilename = `prismic/${filename}.ts`;
52
+ const resolvedPath = path ? path.replace(/^(~~|@@)/, nuxt.options.rootDir).replace(/^(~|@)/, nuxt.options.srcDir) : void 0;
53
+ const maybeUserFile = fileExists(resolvedPath, extensions);
54
+ if (maybeUserFile) {
55
+ logger.info(`Using user-defined \`${filename}\` at \`${maybeUserFile.replace(nuxt.options.srcDir, "~").replace(/\\/g, "/")}\``);
56
+ addTemplate({
57
+ filename: resolvedFilename,
58
+ src: maybeUserFile
59
+ });
60
+ } else {
61
+ addTemplate({
62
+ filename: resolvedFilename,
63
+ getContents: () => "export default undefined"
64
+ });
65
+ }
66
+ };
67
+ addUserFileWithUndefinedFallback("client", mergedOptions.client);
68
+ addUserFileWithUndefinedFallback("linkResolver", mergedOptions.linkResolver);
69
+ (_a = nuxt.options).publicRuntimeConfig || (_a.publicRuntimeConfig = {});
70
+ nuxt.options.publicRuntimeConfig[name] = mergedOptions;
71
+ addPlugin(resolver.resolve("runtime/plugin"));
72
+ if (mergedOptions.injectComponents) {
73
+ [
74
+ "PrismicEmbed",
75
+ "PrismicImage",
76
+ "PrismicLink",
77
+ "PrismicText",
78
+ "PrismicRichText",
79
+ "SliceZone"
80
+ ].forEach((component) => {
81
+ addComponent({
82
+ name: component,
83
+ export: component,
84
+ filePath: "@prismicio/vue"
85
+ });
86
+ });
87
+ }
88
+ const composableAutoImports = Object.keys(prismicVue).filter((key) => key.startsWith("use")).map((key) => {
89
+ return {
90
+ name: key,
91
+ as: key,
92
+ from: "@prismicio/vue"
93
+ };
94
+ });
95
+ addAutoImport(composableAutoImports);
96
+ if (mergedOptions.preview) {
97
+ const maybeUserPreviewPage = fileExists(join(nuxt.options.srcDir, nuxt.options.dir.pages, mergedOptions.preview), ["js", "ts", "vue"]);
98
+ if (maybeUserPreviewPage) {
99
+ logger.info(`Using user-defined preview page at \`${maybeUserPreviewPage.replace(join(nuxt.options.srcDir), "~").replace(/\\/g, "/")}\`, available at \`${mergedOptions.preview}\``);
100
+ } else {
101
+ logger.info(`Using default preview page, available at \`${mergedOptions.preview}\``);
102
+ extendPages((pages) => {
103
+ pages.unshift({
104
+ name: "prismic-preview",
105
+ path: mergedOptions.preview,
106
+ file: resolver.resolve("runtime/preview.vue")
107
+ });
108
+ });
109
+ }
110
+ const repositoryName = isRepositoryEndpoint(mergedOptions.endpoint) ? getRepositoryName(mergedOptions.endpoint) : mergedOptions.endpoint;
111
+ (_b = nuxt.options).meta || (_b.meta = {});
112
+ (_c = nuxt.options.meta).script || (_c.script = []);
113
+ nuxt.options.meta.script.push({
114
+ src: `https://static.cdn.prismic.io/prismic.min.js?repo=${repositoryName}&new=true`
115
+ });
116
+ }
117
+ }
118
+ });
119
+
120
+ export { module as default };
@@ -0,0 +1,2 @@
1
+ declare const _default: any;
2
+ export default _default;
@@ -0,0 +1,20 @@
1
+ import { defineNuxtPlugin } from "#app";
2
+ import NuxtLink from "#app/components/nuxt-link";
3
+ import { createPrismic } from "@prismicio/vue";
4
+ import { name as pkgName } from "../../package.json";
5
+ import linkResolver from "#build/prismic/linkResolver";
6
+ import client from "#build/prismic/client";
7
+ export default defineNuxtPlugin((nuxtApp) => {
8
+ const mergedOptions = nuxtApp.payload.config[pkgName];
9
+ nuxtApp.vueApp.use(createPrismic({
10
+ ...mergedOptions,
11
+ client,
12
+ linkResolver,
13
+ injectComponents: false,
14
+ components: {
15
+ linkInternalComponent: NuxtLink,
16
+ linkExternalComponent: NuxtLink,
17
+ ...mergedOptions.components
18
+ }
19
+ }));
20
+ });
@@ -0,0 +1,53 @@
1
+ <template>
2
+ <section class="prismic-preview">
3
+ <figure>
4
+ <img
5
+ src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNDAiIGhlaWdodD0iMzYiPgogIDxwYXRoIGZpbGw9IiMyMTI3MzUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTM1LjUzOCAxOC43NGwtMi42NTUtMi42NmExLjEyNiAxLjEyNiAwIDAgMS0uMzI5LS43OTZ2LTMuMjU2YzAtMy4wMDktLjMxMy00LjEtLjktNS4yYTYuMTI3IDYuMTI3IDAgMCAwLTIuNTQ2LTIuNTUxYy0xLjA5Ny0uNTg5LTIuMTg2LS45MDItNS4xODgtLjkwMmgtNC4yOTVhLjIyNS4yMjUgMCAwIDEtLjE1OC0uMzg0TDIyLjEyMi4zM2MuMjEtLjIxMS40OTYtLjMzLjc5NC0uMzNoMS40OTNjNC4wMDMgMCA1LjQ1NS40MTggNi45MTkgMS4yMDJhOC4xNjkgOC4xNjkgMCAwIDEgMy4zOTQgMy40MDJjLjc4MyAxLjQ2NyAxLjIgMi45MjIgMS4yIDYuOTMzdjcuMDQ1YS4yMjUuMjI1IDAgMCAxLS4zODQuMTU5ek0xNy4yMjIgMzUuNjE3bDIuNjU1LTIuNjYxYy4yMS0uMjExLjQ5Ni0uMzMuNzk0LS4zM2gzLjI0OWMzLjAwMiAwIDQuMDktLjMxMyA1LjE4OC0uOTAyYTYuMTI3IDYuMTI3IDAgMCAwIDIuNTQ2LTIuNTUxYy41ODctMS4xLjktMi4xOTEuOS01LjJ2LTQuMzA0YS4yMjUuMjI1IDAgMCAxIC4zODMtLjE1OWwyLjY1NiAyLjY2MWMuMjEuMjExLjMyOS40OTguMzI5Ljc5NnYxLjQ5N2MwIDQuMDExLS40MTcgNS40NjYtMS4yIDYuOTMzYTguMTY5IDguMTY5IDAgMCAxLTMuMzk0IDMuNDAyQzI5Ljg2NCAzNS41ODIgMjguNDEyIDM2IDI0LjQwOSAzNkgxNy4zOGEuMjI1LjIyNSAwIDAgMS0uMTU4LS4zODR6TS4zODMgMTcuMjU5TDMuMDQgMTkuOTJjLjIxLjIxMS4zMjkuNDk4LjMyOS43OTZ2My4yNTZjMCAzLjAwOS4zMTIgNC4xLjkgNS4yYTYuMTI3IDYuMTI3IDAgMCAwIDIuNTQ1IDIuNTUxYzEuMDk4LjU4OSAyLjE4Ny45MDIgNS4xODkuOTAyaDQuMjk0YS4yMjUuMjI1IDAgMCAxIC4xNi4zODRsLTIuNjU3IDIuNjYxYy0uMjEuMjExLS40OTYuMzMtLjc5My4zM2gtMS40OTRjLTQuMDAzIDAtNS40NTQtLjQxOC02LjkxOC0xLjIwMkE4LjE2OSA4LjE2OSAwIDAgMSAxLjIgMzEuMzk2Qy40MTcgMjkuOTI5IDAgMjguNDc0IDAgMjQuNDYzdi03LjA0NWEuMjI1LjIyNSAwIDAgMSAuMzgzLS4xNTl6TTE2LjA0NSAzLjA0NWMtLjIxMS4yMTEtLjQ5Ni4zMy0uNzk0LjMzaC0zLjI0OWMtMy4wMDIgMC00LjA5MS4zMTMtNS4xODkuOTAyYTYuMTI3IDYuMTI3IDAgMCAwLTIuNTQ2IDIuNTUxYy0uNTg3IDEuMS0uOSAyLjE5MS0uOSA1LjJ2NC4zMDRhLjIyNS4yMjUgMCAwIDEtLjM4My4xNTlMLjMzIDEzLjgzQTEuMTI2IDEuMTI2IDAgMCAxIDAgMTMuMDM0di0xLjQ5N2MwLTQuMDExLjQxNy01LjQ2NiAxLjItNi45MzNhOC4xNjkgOC4xNjkgMCAwIDEgMy4zOTQtMy40MDJDNi4wNTguNDE4IDcuNTEgMCAxMS41MTIgMGg3LjAzYS4yMjUuMjI1IDAgMCAxIC4xNTguMzg0bC0yLjY1NSAyLjY2MXptMTMuODg0IDEwLjA5MWwtMy42Mi0zLjQ2OGMtLjI0LS4yNC0uNTItLjQxNC0uODE5LS41MjNBMi4yMzYgMi4yMzYgMCAwIDAgMjQuNjk2IDlIMTQuMDFhLjIyNS4yMjUgMCAwIDEtLjE1OS0uMzg0bDIuNjU5LTIuNjYyYy4yMS0uMjEuNDk1LS4zMjkuNzkzLS4zMjloOC41MTZjMi40OCAwIDQuNDkgMi4wMTUgNC40OSA0LjV2Mi44NDlhLjIyNS4yMjUgMCAwIDEtLjM4LjE2MnptLTcuMTE1IDE2Ljg2MWwzLjQ2LTMuNjI5Yy4yNC0uMjQuNDE0LS41Mi41MjMtLjgyYTIuMjUgMi4yNSAwIDAgMCAuMTQ0LS43OTV2LTEwLjcxYS4yMjUuMjI1IDAgMCAxIC4zODQtLjE1OWwyLjY1NiAyLjY2NGMuMjEuMjExLjMyOC40OTcuMzI4Ljc5NnY4LjUzNGMwIDIuNDg1LTIuMDEgNC41LTQuNDkgNC41aC0yLjg0M2EuMjI1LjIyNSAwIDAgMS0uMTYyLS4zOHpNNS45OTIgMjIuODY0bDMuNjIyIDMuNDY4Yy4yMzkuMjQuNTIuNDE0LjgxOC41MjMuMjQ2LjA5NC41MTQuMTQ1Ljc5NC4xNDVoMTAuNjg2YS4yMjUuMjI1IDAgMCAxIC4xNTguMzg0bC0yLjY1OCAyLjY2MmMtLjIxLjIxLS40OTYuMzI5LS43OTMuMzI5aC04LjUxNmE0LjQ5NSA0LjQ5NSAwIDAgMS00LjQ5LTQuNXYtMi44NDlhLjIyNS4yMjUgMCAwIDEgLjM4LS4xNjJ6bTcuMTE2LTE2Ljg1OWwtMy40NjEgMy42M2MtLjI0LjI0LS40MTMuNTItLjUyMi44MmEyLjI1IDIuMjUgMCAwIDAtLjE0NS43OTV2MTAuNzFhLjIyNS4yMjUgMCAwIDEtLjM4My4xNThsLTIuNjU2LTIuNjY0YTEuMTI2IDEuMTI2IDAgMCAxLS4zMjgtLjc5NXYtOC41MzRjMC0yLjQ4NSAyLjAxLTQuNSA0LjQ5LTQuNWgyLjg0M2EuMjI1LjIyNSAwIDAgMSAuMTYyLjM4em0zMy4xMDUgNC4zNzloLjg2OGMuNTkzIDAgMS4wNzQuNDggMS4wNzQgMS4wNzR2MS4wMTZjMCAuMDMyLjAyNi4wNTcuMDU3LjA1Ny40OTUtLjg3NSAxLjE2LTEuNTEgMS45OTgtMS45MDlhNi4yMzYgNi4yMzYgMCAwIDEgMi43MS0uNTk2YzEuMDQ3IDAgMS45ODkuMTk0IDIuODI2LjU4Mi44MzcuMzg3IDEuNTUuOTIgMi4xNCAxLjU5NWE2Ljg5NiA2Ljg5NiAwIDAgMSAxLjM0IDIuMzg2Yy4zMDUuOTE1LjQ1NyAxLjkuNDU3IDIuOTUzYTguNzk1IDguNzk1IDAgMCAxLS40ODUgMi45NTMgNy40MTggNy40MTggMCAwIDEtMS4zNTUgMi4zODYgNi4yNjkgNi4yNjkgMCAwIDEtMi4wOTcgMS41OTUgNi4xODIgNi4xODIgMCAwIDEtMi42ODMuNTgyYy0uNjQ3IDAtMS4yMTctLjA3LTEuNzEyLS4yMDlhNS43NTEgNS43NTEgMCAwIDEtMS4zMTItLjUzNyA1LjI1MiA1LjI1MiAwIDAgMS0uOTctLjcgNS4wMTIgNS4wMTIgMCAwIDEtLjY1Ny0uNzMxLjA4Ni4wODYgMCAwIDAtLjA4Ni4wODV2Ny4yMjRhMS4zMSAxLjMxIDAgMCAxLTEuMzEgMS4zMWgtLjgwM2ExLjMxIDEuMzEgMCAwIDEtMS4zMS0xLjMxVjExLjY5NGMwLS43MjMuNTg2LTEuMzEgMS4zMS0xLjMxem0xMC4wNDYgNy4xNThjMC0uNTU3LS4wOS0xLjA5NC0uMjctMS42MWE0LjA3OCA0LjA3OCAwIDAgMC0uOC0xLjM3MyAzLjk5IDMuOTkgMCAwIDAtMS4yNy0uOTU0Yy0uNDk0LS4yMzktMS4wNTUtLjM1OC0xLjY4My0uMzU4LS42MjggMC0xLjE5LjEyLTEuNjg0LjM1OGEzLjk5IDMuOTkgMCAwIDAtMS4yNy45NTQgNC4wNzggNC4wNzggMCAwIDAtLjc5OSAxLjM3MiA0Ljg0NSA0Ljg0NSAwIDAgMC0uMjcgMS42MWMwIC41NTguMDkgMS4wOTQuMjcgMS42MTEuMTgxLjUxNy40NDcuOTc1LjggMS4zNzJhMy45OSAzLjk5IDAgMCAwIDEuMjcuOTU1Yy40OTQuMjM4IDEuMDU1LjM1OCAxLjY4My4zNTguNjI4IDAgMS4xODktLjEyIDEuNjgzLS4zNThhMy45OSAzLjk5IDAgMCAwIDEuMjctLjk1NWMuMzUyLS4zOTcuNjE4LS44NTUuOC0xLjM3Mi4xOC0uNTE3LjI3LTEuMDUzLjI3LTEuNjF6bTguMzU5LTcuMTU4aC45OGMuNjI2IDAgMS4xMzQuNTA3IDEuMTM0IDEuMTMzdjEuMDc3YzAgLjAzMS4wMjUuMDU3LjA1Ny4wNTcuMzgtLjgzNi45MjItMS40ODIgMS42MjYtMS45MzkuNzA0LS40NTcgMS41MTMtLjY4NiAyLjQyNi0uNjg2LjIwOSAwIC40MTQuMDIuNjEzLjA2YS43NjIuNzYyIDAgMCAxIC42MTQuNzQ3djEuOTY0YS43MTUuNzE1IDAgMCAxLS44NDIuNzA0IDQuNTggNC41OCAwIDAgMC0uODEzLS4wNzVjLS44IDAtMS40NDEuMTU0LTEuOTI2LjQ2Mi0uNDg1LjMwOS0uODU2LjY2MS0xLjExMyAxLjA2YTMuNiAzLjYgMCAwIDAtLjUxNCAxLjE5MmMtLjA4Ni4zOTgtLjEyOC42OTYtLjEyOC44OTV2Ni4zNTVhMS4zMSAxLjMxIDAgMCAxLTEuMzEgMS4zMWgtLjgwNGExLjMxIDEuMzEgMCAwIDEtMS4zMS0xLjMxVjExLjY5NGMwLS43MjMuNTg2LTEuMzEgMS4zMS0xLjMxem0xMS41ODUgMGguODA0Yy43MjMgMCAxLjMxLjU4NyAxLjMxIDEuMzFWMjMuMzlhMS4zMSAxLjMxIDAgMCAxLTEuMzEgMS4zMWgtLjgwNGExLjMxIDEuMzEgMCAwIDEtMS4zMS0xLjMxVjExLjY5NGMwLS43MjMuNTg2LTEuMzEgMS4zMS0xLjMxem0tMS43OTUtNC44NjJjMC0uNTc2LjIwNC0xLjA3OC42MTMtMS41MDYuNDEtLjQyNy45MjgtLjY0MSAxLjU1NS0uNjQxLjYyOCAwIDEuMTU2LjIwNCAxLjU4NC42MTEuNDI4LjQwOC42NDIuOTIuNjQyIDEuNTM2IDAgLjYxNy0uMjE0IDEuMTI5LS42NDIgMS41MzYtLjQyOC40MDgtLjk1Ni42MTItMS41ODQuNjEyLS42MjcgMC0xLjE0Ni0uMjE0LTEuNTU1LS42NDFhMi4xMDggMi4xMDggMCAwIDEtLjYxMy0xLjUwN3ptMTQuNzUzIDguMTMzYy0uNjk1LS41MS0xLjMxNC0uNzY2LTEuODU1LS43NjYtLjQ1NyAwLS45MDQuMTItMS4zNDIuMzU4LS40MzcuMjM5LS42NTYuNjI2LS42NTYgMS4xNjMgMCAuNDM4LjE4Ljc1Ni41NDIuOTU1LjM2Mi4xOTguODE4LjM2OCAxLjM3LjUwNy41NTIuMTM5IDEuMTQ2LjI4MyAxLjc4My40MzIuNjM4LjE1IDEuMjMyLjM3OCAxLjc4NC42ODYuNTUyLjMwOCAxLjAwOC43MyAxLjM3IDEuMjY4LjM2MS41MzcuNTQyIDEuMjcyLjU0MiAyLjIwNyAwIC44NTUtLjE3NiAxLjU3NS0uNTI4IDIuMTYyYTQuMjQxIDQuMjQxIDAgMCAxLTEuMzcgMS40MTcgNS45MjcgNS45MjcgMCAwIDEtMS44OTcuNzc1IDkuNTUzIDkuNTUzIDAgMCAxLTIuMTEyLjIzOWMtMS4wNjUgMC0yLjA0NS0uMTYtMi45NC0uNDc3LS4zNS0uMTI1LS43Ny0uMzc1LTEuMjYtLjc1MWExLjMxIDEuMzEgMCAwIDEtLjExOS0xLjk3NmwuMzU1LS4zNDhhMS4zMSAxLjMxIDAgMCAxIDEuNzgzLS4wNDhjLjIwOC4xODMuMzg4LjMyNC41NC40MjMuNTA0LjMyOSAxLjExOC40OTMgMS44NC40OTMuMjQ4IDAgLjUwNS0uMDMuNzcxLS4wOS4yNjctLjA2LjUxNC0uMTU5Ljc0Mi0uMjk4LjIyOC0uMTQuNDE0LS4zMTMuNTU3LS41MjIuMTQyLS4yMDkuMjE0LS40NTIuMjE0LS43MyAwLS40OTgtLjE4MS0uODY2LS41NDMtMS4xMDQtLjM2MS0uMjM5LS44MTgtLjQzMy0xLjM3LS41ODJhMjguNzQ2IDI4Ljc0NiAwIDAgMC0xLjc4My0uNDE3IDYuNzA3IDYuNzA3IDAgMCAxLTEuNzgzLS42MjcgMy43OTUgMy43OTUgMCAwIDEtMS4zNy0xLjIwOGMtLjM2MS0uNTE3LS41NDItMS4yMzMtLjU0Mi0yLjE0NyAwLS43OTUuMTU3LTEuNDg2LjQ3LTIuMDczYTQuMjY1IDQuMjY1IDAgMCAxIDEuMjQyLTEuNDQ2IDUuMjU2IDUuMjU2IDAgMCAxIDEuNzctLjgzNiA3Ljc3MyA3Ljc3MyAwIDAgMSAyLjAyNS0uMjY4Yy45MTMgMCAxLjgxNy4xNjQgMi43MTEuNDkyLjMyNC4xMTkuNjg1LjMzOSAxLjA4NC42NmExLjMxIDEuMzEgMCAwIDEgLjA3NSAxLjk3NWwtLjQyNi40MDFhMS4zMSAxLjMxIDAgMCAxLTEuNjc0LjEwMXptNy43ODctMy4yNzFoLjYzM2MuNzIzIDAgMS4zMS41ODcgMS4zMSAxLjMxdi45MjdhNS42MDIgNS42MDIgMCAwIDEgMS41MjctMS44MDVjLjY3NS0uNTI3IDEuNTgzLS43OSAyLjcyNS0uNzkgMi4xNSAwIDMuNTc2Ljg4NSA0LjI4IDIuNjU0LjQ5NS0uOTE0IDEuMTEzLTEuNTg1IDEuODU1LTIuMDEzLjc0Mi0uNDI3IDEuNjI2LS42NDEgMi42NTQtLjY0MS45MTMgMCAxLjY4My4xNTkgMi4zMTEuNDc3YTQuMDg0IDQuMDg0IDAgMCAxIDEuNTI3IDEuMzEyYy4zOS41NTcuNjcgMS4yMDguODQxIDEuOTU0LjE3Mi43NDYuMjU3IDEuNTQ2LjI1NyAyLjR2Ny4yMmExLjMxIDEuMzEgMCAwIDEtMS4zMSAxLjMxaC0uODA0YTEuMzEgMS4zMSAwIDAgMS0xLjMxLTEuMzF2LTYuODAyYzAtLjQzNy0uMDM4LS44Ni0uMTE0LTEuMjY3YTMuMTExIDMuMTExIDAgMCAwLS40LTEuMDc0IDIuMDYyIDIuMDYyIDAgMCAwLS43Ny0uNzNjLS4zMjQtLjE4LS43NDItLjI2OS0xLjI1Ni0uMjY5LS41MzIgMC0uOTg0LjEwNC0xLjM1NS4zMTNhMi42ODYgMi42ODYgMCAwIDAtLjkxMy44MzUgMy41MDggMy41MDggMCAwIDAtLjUxNCAxLjE5MyA1Ljk0IDUuOTQgMCAwIDAtLjE1NyAxLjM1N3Y2LjQ0NWExLjMxIDEuMzEgMCAwIDEtMS4zMSAxLjMxaC0uODA0YTEuMzEgMS4zMSAwIDAgMS0xLjMxLTEuMzF2LTcuMjJjMC0uODk1LS4xOC0xLjYwNi0uNTQyLTIuMTMzLS4zNjItLjUyNi0uOTYtLjc5LTEuNzk4LS43OS0uNTcgMC0xLjA1MS4xLTEuNDQxLjI5OC0uMzkuMi0uNzEzLjQ2OC0uOTcuODA2YTMuMjYgMy4yNiAwIDAgMC0uNTU3IDEuMTYzIDUuNDEzIDUuNDEzIDAgMCAwLS4xNyAxLjM3MnY2LjUwNGExLjMxIDEuMzEgMCAwIDEtMS4zMTEgMS4zMWgtLjgwNGExLjMxIDEuMzEgMCAwIDEtMS4zMS0xLjMxVjExLjY5NGMwLS43MjMuNTg3LTEuMzEgMS4zMS0xLjMxem0yNS40NTQgMGguODAzYy43MjQgMCAxLjMxLjU4NyAxLjMxIDEuMzFWMjMuMzlhMS4zMSAxLjMxIDAgMCAxLTEuMzEgMS4zMWgtLjgwM2ExLjMxIDEuMzEgMCAwIDEtMS4zMS0xLjMxVjExLjY5NGMwLS43MjMuNTg2LTEuMzEgMS4zMS0xLjMxem0tMS43OTYtNC44NjJjMC0uNTc2LjIwNS0xLjA3OC42MTQtMS41MDYuNDA5LS40MjcuOTI3LS42NDEgMS41NTUtLjY0MS42MjggMCAxLjE1Ni4yMDQgMS41ODQuNjExLjQyOC40MDguNjQyLjkyLjY0MiAxLjUzNiAwIC42MTctLjIxNCAxLjEyOS0uNjQyIDEuNTM2LS40MjguNDA4LS45NTYuNjEyLTEuNTg0LjYxMi0uNjI4IDAtMS4xNDYtLjIxNC0xLjU1NS0uNjQxYTIuMTA4IDIuMTA4IDAgMCAxLS42MTQtMS41MDd6bTE2Ljc1MSA4LjM3M2EzLjU2NCAzLjU2NCAwIDAgMC0uMzcxLS4yNiAyLjYwNyAyLjYwNyAwIDAgMC0xLjM0Mi0uMzg4Yy0uNjI3IDAtMS4xODkuMTItMS42ODMuMzU4YTMuOTkgMy45OSAwIDAgMC0xLjI3Ljk1NCA0LjA3OCA0LjA3OCAwIDAgMC0uNzk5IDEuMzcyIDQuODQ1IDQuODQ1IDAgMCAwLS4yNzEgMS42MWMwIC41NTguMDkgMS4wOTQuMjcxIDEuNjExLjE4LjUxNy40NDcuOTc1LjggMS4zNzJhMy45OSAzLjk5IDAgMCAwIDEuMjY5Ljk1NWMuNDk0LjIzOCAxLjA1Ni4zNTggMS42ODMuMzU4LjUzMyAwIDEuMDI4LS4xMTUgMS40ODQtLjM0My4wOTMtLjA0Ny4xOTMtLjExLjMtLjE4OWExLjMxIDEuMzEgMCAwIDEgMS43NTYuMTg1bC41Mi41ODRhMS4yNDggMS4yNDggMCAwIDEtLjMwNyAxLjkxIDcuOTggNy45OCAwIDAgMS0yLjY2OC45N2MtLjQxOS4wNjktLjc4LjEwNC0xLjA4NS4xMDRhNy45MDQgNy45MDQgMCAwIDEtMi45MS0uNTM3QTYuOTM4IDYuOTM4IDAgMCAxIDEzMC4zNjUgMjNhNy4yMyA3LjIzIDAgMCAxLTEuNTgzLTIuMzcxYy0uMzktLjkyNS0uNTg1LTEuOTU0LS41ODUtMy4wODcgMC0xLjEzMy4xOTUtMi4xNjIuNTg1LTMuMDg3YTcuMjMgNy4yMyAwIDAgMSAxLjU4My0yLjM3MSA2LjkzOCA2LjkzOCAwIDAgMSAyLjM2OS0xLjUyMSA3LjkwNCA3LjkwNCAwIDAgMSAyLjkxLS41MzdjLjg3NiAwIDEuNzU1LjE3NCAyLjY0LjUyMi4zMzcuMTMzLjczNS4zNyAxLjE5My43MTFhMS4zMSAxLjMxIDAgMCAxIC4xNjQgMS45NTdsLS41My41NTNhMS4zMSAxLjMxIDAgMCAxLTEuNzU0LjEyNnoiLz4KPC9zdmc+"
6
+ alt="Prismic"
7
+ >
8
+ <figcaption>Loading preview...</figcaption>
9
+ </figure>
10
+ </section>
11
+ </template>
12
+
13
+ <script setup>
14
+ import { onMounted } from 'vue'
15
+
16
+ useMeta({
17
+ title: 'Prismic Preview - Loading'
18
+ })
19
+
20
+ // TODO: refactor into simple hook
21
+ const { client, options: { linkResolver } } = usePrismic()
22
+ const { push } = useRouter()
23
+ onMounted(async () => {
24
+ const redirectURL = await client.resolvePreviewURL({
25
+ linkResolver,
26
+ defaultURL: '/'
27
+ })
28
+
29
+ push(redirectURL ?? '/')
30
+ })
31
+ </script>
32
+
33
+ <style scoped>
34
+ .prismic-preview {
35
+ width: 100%;
36
+ height: 100vh;
37
+ position: fixed;
38
+ top: 0;
39
+ left: 0;
40
+ display: flex;
41
+ justify-content: center;
42
+ align-items: center;
43
+ background: #ffffff;
44
+ color: #666666;
45
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
46
+ font-size: 1rem;
47
+ text-align: center;
48
+ }
49
+
50
+ img {
51
+ margin-bottom: 1.25rem;
52
+ }
53
+ </style>
@@ -0,0 +1,10 @@
1
+
2
+ import { ModuleOptions } from './module'
3
+
4
+ declare module '@nuxt/schema' {
5
+ interface NuxtConfig { ['prismic']?: Partial<ModuleOptions> }
6
+ interface NuxtOptions { ['prismic']?: ModuleOptions }
7
+ }
8
+
9
+
10
+ export { default } from './module'
package/package.json CHANGED
@@ -1,47 +1,68 @@
1
1
  {
2
- "name": "@nuxtjs/prismic",
3
- "version": "1.4.1",
4
- "description": "Easily connect your Nuxt.js application to your content hosted on Prismic",
5
- "keywords": [
6
- "nuxt",
7
- "module",
8
- "nuxt-module",
9
- "prismic",
10
- "cms"
11
- ],
12
- "repository": "nuxt-community/prismic-module",
13
- "license": "MIT",
14
- "main": "src/module.js",
15
- "files": [
16
- "src",
17
- "templates"
18
- ],
19
- "scripts": {
20
- "dev": "nuxt example",
21
- "release": "yarn test && standard-version && git push --follow-tags && npm publish",
22
- "release:dry": "standard-version --dry-run",
23
- "release:alpha": "yarn test && standard-version --release-as minor --prerelease alpha && git push --follow-tags && npm publish --tag alpha",
24
- "release:alpha:dry": "standard-version --release-as minor --prerelease alpha --dry-run",
25
- "unit": "jest",
26
- "lint": "eslint --ext .js,.ts,.vue .",
27
- "test": "npm run lint && npm run unit"
28
- },
29
- "dependencies": {
30
- "@prismicio/client": "^4.0.0 || ^5.1.0",
31
- "@prismicio/vue": "^2.1.0",
32
- "consola": "^2.15.3",
33
- "prismic-dom": "^2.2.6"
34
- },
35
- "devDependencies": {
36
- "@nuxtjs/eslint-config": "latest",
37
- "@types/jest": "latest",
38
- "babel-eslint": "latest",
39
- "eslint": "latest",
40
- "jest": "latest",
41
- "nuxt-edge": "latest",
42
- "standard-version": "latest"
43
- },
44
- "engines": {
45
- "node": ">= v12.0.0"
46
- }
2
+ "name": "@nuxtjs/prismic",
3
+ "version": "3.0.0-alpha.2",
4
+ "description": "Easily connect your Nuxt 3 application to your content hosted on Prismic",
5
+ "keywords": [
6
+ "nuxt",
7
+ "module",
8
+ "nuxt-module",
9
+ "typescript",
10
+ "prismic",
11
+ "cms"
12
+ ],
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "ssh://git@github.com/nuxt-community/prismic-module.git"
16
+ },
17
+ "license": "MIT",
18
+ "author": "Nuxt.js Community",
19
+ "type": "module",
20
+ "exports": {
21
+ ".": {
22
+ "require": "./dist/module.cjs",
23
+ "import": "./dist/module.mjs"
24
+ },
25
+ "./package.json": "./package.json"
26
+ },
27
+ "main": "dist/module.cjs",
28
+ "module": "dist/module.mjs",
29
+ "types": "dist/types.d.ts",
30
+ "files": [
31
+ "dist",
32
+ "src"
33
+ ],
34
+ "scripts": {
35
+ "build": "nuxt-module-build",
36
+ "dev": "nuxi dev playground",
37
+ "dev:build": "nuxi build playground",
38
+ "lint": "eslint --ext .js,.ts .",
39
+ "prepare": "nuxi prepare playground && npm run build",
40
+ "release": "npm run build && npm run test && standard-version && git push --follow-tags && npm run build && npm publish",
41
+ "release:alpha": "npm run build && npm run test && standard-version --release-as major --prerelease alpha && git push --follow-tags && npm run build && npm publish --tag alpha",
42
+ "release:alpha:dry": "standard-version --release-as major --prerelease alpha --dry-run",
43
+ "release:dry": "standard-version --dry-run",
44
+ "test": "npm run lint && npm run unit",
45
+ "unit": "echo \"TODO: vitest & nuxt-test-utils\""
46
+ },
47
+ "dependencies": {
48
+ "@nuxt/kit": "npm:@nuxt/kit-edge@latest",
49
+ "@prismicio/client": "^6.4.2",
50
+ "@prismicio/vue": "^3.0.0-beta",
51
+ "consola": "^2.15.3",
52
+ "ufo": "^0.8.1"
53
+ },
54
+ "devDependencies": {
55
+ "@nuxt/module-builder": "latest",
56
+ "@nuxtjs/eslint-config-typescript": "latest",
57
+ "eslint": "^8.11.0",
58
+ "nuxt3": "latest",
59
+ "standard-version": "^9.3.2",
60
+ "typescript": "^4.6.2"
61
+ },
62
+ "engines": {
63
+ "node": ">=12.7.0"
64
+ },
65
+ "publishConfig": {
66
+ "access": "public"
67
+ }
47
68
  }
package/src/logger.ts ADDED
@@ -0,0 +1,3 @@
1
+ import consola from 'consola'
2
+
3
+ export const logger = consola.withScope('nuxt:prismic')
package/src/module.ts ADDED
@@ -0,0 +1,148 @@
1
+ import { join } from 'path'
2
+
3
+ import {
4
+ defineNuxtModule,
5
+ createResolver,
6
+ addTemplate,
7
+ addPlugin,
8
+ addAutoImport,
9
+ addComponent,
10
+ extendPages
11
+ } from '@nuxt/kit'
12
+ import { cleanDoubleSlashes } from 'ufo'
13
+
14
+ import { isRepositoryEndpoint, getRepositoryName } from '@prismicio/client'
15
+ import * as prismicVue from '@prismicio/vue'
16
+
17
+ import { name as pkgName, version as pkgVersion } from '../package.json'
18
+ import type { PrismicModuleOptions } from './types'
19
+ import { fileExists } from './utils'
20
+ import { logger } from './logger'
21
+
22
+ // Options export
23
+ export type { PrismicModuleOptions } from './types'
24
+ export type { PrismicModuleOptions as ModuleOptions } from './types'
25
+
26
+ // Module export
27
+ export default defineNuxtModule<PrismicModuleOptions>({
28
+ meta: {
29
+ name: pkgName,
30
+ version: pkgVersion,
31
+ configKey: 'prismic',
32
+ compatibility: { nuxt: '^3.0.0' }
33
+ },
34
+ defaults: nuxt => ({
35
+ endpoint: '',
36
+ clientConfig: {},
37
+ client: cleanDoubleSlashes(`~/${nuxt.options.dir.app}/prismic/client`),
38
+ linkResolver: cleanDoubleSlashes(`~/${nuxt.options.dir.app}/prismic/linkResolver`),
39
+ htmlSerializer: undefined,
40
+ injectComponents: true,
41
+ components: {},
42
+ preview: '/preview'
43
+ }),
44
+ hooks: {},
45
+ setup (mergedOptions, nuxt) {
46
+ if (!mergedOptions.endpoint) {
47
+ logger.warn('Options `endpoint` is required, disabling module...')
48
+ return
49
+ }
50
+
51
+ // Runtime dir boilerplate
52
+ const resolver = createResolver(import.meta.url)
53
+ nuxt.options.build.transpile.push(resolver.resolve('runtime'))
54
+
55
+ // Add runtime user code
56
+ const addUserFileWithUndefinedFallback = (filename: string, path?: string, extensions = ['js', 'ts']) => {
57
+ const resolvedFilename = `prismic/${filename}.ts`
58
+ const resolvedPath = path
59
+ ? path.replace(/^(~~|@@)/, nuxt.options.rootDir).replace(/^(~|@)/, nuxt.options.srcDir)
60
+ : undefined
61
+ const maybeUserFile = fileExists(resolvedPath, extensions)
62
+
63
+ if (maybeUserFile) {
64
+ logger.info(`Using user-defined \`${filename}\` at \`${maybeUserFile.replace(nuxt.options.srcDir, '~').replace(/\\/g, '/')}\``)
65
+
66
+ addTemplate({
67
+ filename: resolvedFilename,
68
+ src: maybeUserFile
69
+ })
70
+ } else {
71
+ addTemplate({
72
+ filename: resolvedFilename,
73
+ getContents: () => 'export default undefined'
74
+ })
75
+ }
76
+ }
77
+ addUserFileWithUndefinedFallback('client', mergedOptions.client)
78
+ addUserFileWithUndefinedFallback('linkResolver', mergedOptions.linkResolver)
79
+
80
+ // Expose options through public runtime config
81
+ nuxt.options.publicRuntimeConfig ||= {} as typeof nuxt.options.publicRuntimeConfig
82
+ nuxt.options.publicRuntimeConfig[pkgName] = mergedOptions
83
+
84
+ // Add plugin
85
+ addPlugin(resolver.resolve('runtime/plugin'))
86
+
87
+ // Add components auto import
88
+ if (mergedOptions.injectComponents) {
89
+ [
90
+ 'PrismicEmbed',
91
+ 'PrismicImage',
92
+ 'PrismicLink',
93
+ 'PrismicText',
94
+ 'PrismicRichText',
95
+ 'SliceZone'
96
+ ].forEach((component) => {
97
+ addComponent({
98
+ name: component,
99
+ export: component,
100
+ filePath: '@prismicio/vue'
101
+ })
102
+ })
103
+ }
104
+
105
+ // Add composable auto import
106
+ const composableAutoImports = Object
107
+ .keys(prismicVue)
108
+ .filter(key => key.startsWith('use'))
109
+ .map((key) => {
110
+ return {
111
+ name: key,
112
+ as: key,
113
+ from: '@prismicio/vue'
114
+ }
115
+ })
116
+ addAutoImport(composableAutoImports)
117
+
118
+ // Add preview route
119
+ if (mergedOptions.preview) {
120
+ const maybeUserPreviewPage = fileExists(join(nuxt.options.srcDir, nuxt.options.dir.pages, mergedOptions.preview), ['js', 'ts', 'vue'])
121
+
122
+ if (maybeUserPreviewPage) {
123
+ logger.info(`Using user-defined preview page at \`${maybeUserPreviewPage.replace(join(nuxt.options.srcDir), '~').replace(/\\/g, '/')
124
+ }\`, available at \`${mergedOptions.preview}\``)
125
+ } else {
126
+ logger.info(`Using default preview page, available at \`${mergedOptions.preview}\``)
127
+
128
+ extendPages((pages) => {
129
+ pages.unshift({
130
+ name: 'prismic-preview',
131
+ path: mergedOptions.preview as string, // Checked before
132
+ file: resolver.resolve('runtime/preview.vue')
133
+ })
134
+ })
135
+ }
136
+
137
+ // Add toolbar
138
+ const repositoryName = isRepositoryEndpoint(mergedOptions.endpoint)
139
+ ? getRepositoryName(mergedOptions.endpoint)
140
+ : mergedOptions.endpoint
141
+ nuxt.options.meta ||= {}
142
+ nuxt.options.meta.script ||= []
143
+ nuxt.options.meta.script.push({
144
+ src: `https://static.cdn.prismic.io/prismic.min.js?repo=${repositoryName}&new=true`
145
+ })
146
+ }
147
+ }
148
+ })
@@ -0,0 +1,26 @@
1
+ import { defineNuxtPlugin } from '#app'
2
+ import NuxtLink from '#app/components/nuxt-link'
3
+
4
+ import { createPrismic } from '@prismicio/vue'
5
+
6
+ import { name as pkgName } from '../../package.json'
7
+ import { PrismicModuleOptions } from '../types'
8
+
9
+ import linkResolver from '#build/prismic/linkResolver'
10
+ import client from '#build/prismic/client'
11
+
12
+ export default defineNuxtPlugin((nuxtApp) => {
13
+ const mergedOptions: PrismicModuleOptions = nuxtApp.payload.config[pkgName]
14
+
15
+ nuxtApp.vueApp.use(createPrismic({
16
+ ...mergedOptions,
17
+ client,
18
+ linkResolver,
19
+ injectComponents: false, // Handled at module level
20
+ components: {
21
+ linkInternalComponent: NuxtLink,
22
+ linkExternalComponent: NuxtLink,
23
+ ...mergedOptions.components
24
+ }
25
+ }))
26
+ })
@@ -0,0 +1,53 @@
1
+ <template>
2
+ <section class="prismic-preview">
3
+ <figure>
4
+ <img
5
+ src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNDAiIGhlaWdodD0iMzYiPgogIDxwYXRoIGZpbGw9IiMyMTI3MzUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTM1LjUzOCAxOC43NGwtMi42NTUtMi42NmExLjEyNiAxLjEyNiAwIDAgMS0uMzI5LS43OTZ2LTMuMjU2YzAtMy4wMDktLjMxMy00LjEtLjktNS4yYTYuMTI3IDYuMTI3IDAgMCAwLTIuNTQ2LTIuNTUxYy0xLjA5Ny0uNTg5LTIuMTg2LS45MDItNS4xODgtLjkwMmgtNC4yOTVhLjIyNS4yMjUgMCAwIDEtLjE1OC0uMzg0TDIyLjEyMi4zM2MuMjEtLjIxMS40OTYtLjMzLjc5NC0uMzNoMS40OTNjNC4wMDMgMCA1LjQ1NS40MTggNi45MTkgMS4yMDJhOC4xNjkgOC4xNjkgMCAwIDEgMy4zOTQgMy40MDJjLjc4MyAxLjQ2NyAxLjIgMi45MjIgMS4yIDYuOTMzdjcuMDQ1YS4yMjUuMjI1IDAgMCAxLS4zODQuMTU5ek0xNy4yMjIgMzUuNjE3bDIuNjU1LTIuNjYxYy4yMS0uMjExLjQ5Ni0uMzMuNzk0LS4zM2gzLjI0OWMzLjAwMiAwIDQuMDktLjMxMyA1LjE4OC0uOTAyYTYuMTI3IDYuMTI3IDAgMCAwIDIuNTQ2LTIuNTUxYy41ODctMS4xLjktMi4xOTEuOS01LjJ2LTQuMzA0YS4yMjUuMjI1IDAgMCAxIC4zODMtLjE1OWwyLjY1NiAyLjY2MWMuMjEuMjExLjMyOS40OTguMzI5Ljc5NnYxLjQ5N2MwIDQuMDExLS40MTcgNS40NjYtMS4yIDYuOTMzYTguMTY5IDguMTY5IDAgMCAxLTMuMzk0IDMuNDAyQzI5Ljg2NCAzNS41ODIgMjguNDEyIDM2IDI0LjQwOSAzNkgxNy4zOGEuMjI1LjIyNSAwIDAgMS0uMTU4LS4zODR6TS4zODMgMTcuMjU5TDMuMDQgMTkuOTJjLjIxLjIxMS4zMjkuNDk4LjMyOS43OTZ2My4yNTZjMCAzLjAwOS4zMTIgNC4xLjkgNS4yYTYuMTI3IDYuMTI3IDAgMCAwIDIuNTQ1IDIuNTUxYzEuMDk4LjU4OSAyLjE4Ny45MDIgNS4xODkuOTAyaDQuMjk0YS4yMjUuMjI1IDAgMCAxIC4xNi4zODRsLTIuNjU3IDIuNjYxYy0uMjEuMjExLS40OTYuMzMtLjc5My4zM2gtMS40OTRjLTQuMDAzIDAtNS40NTQtLjQxOC02LjkxOC0xLjIwMkE4LjE2OSA4LjE2OSAwIDAgMSAxLjIgMzEuMzk2Qy40MTcgMjkuOTI5IDAgMjguNDc0IDAgMjQuNDYzdi03LjA0NWEuMjI1LjIyNSAwIDAgMSAuMzgzLS4xNTl6TTE2LjA0NSAzLjA0NWMtLjIxMS4yMTEtLjQ5Ni4zMy0uNzk0LjMzaC0zLjI0OWMtMy4wMDIgMC00LjA5MS4zMTMtNS4xODkuOTAyYTYuMTI3IDYuMTI3IDAgMCAwLTIuNTQ2IDIuNTUxYy0uNTg3IDEuMS0uOSAyLjE5MS0uOSA1LjJ2NC4zMDRhLjIyNS4yMjUgMCAwIDEtLjM4My4xNTlMLjMzIDEzLjgzQTEuMTI2IDEuMTI2IDAgMCAxIDAgMTMuMDM0di0xLjQ5N2MwLTQuMDExLjQxNy01LjQ2NiAxLjItNi45MzNhOC4xNjkgOC4xNjkgMCAwIDEgMy4zOTQtMy40MDJDNi4wNTguNDE4IDcuNTEgMCAxMS41MTIgMGg3LjAzYS4yMjUuMjI1IDAgMCAxIC4xNTguMzg0bC0yLjY1NSAyLjY2MXptMTMuODg0IDEwLjA5MWwtMy42Mi0zLjQ2OGMtLjI0LS4yNC0uNTItLjQxNC0uODE5LS41MjNBMi4yMzYgMi4yMzYgMCAwIDAgMjQuNjk2IDlIMTQuMDFhLjIyNS4yMjUgMCAwIDEtLjE1OS0uMzg0bDIuNjU5LTIuNjYyYy4yMS0uMjEuNDk1LS4zMjkuNzkzLS4zMjloOC41MTZjMi40OCAwIDQuNDkgMi4wMTUgNC40OSA0LjV2Mi44NDlhLjIyNS4yMjUgMCAwIDEtLjM4LjE2MnptLTcuMTE1IDE2Ljg2MWwzLjQ2LTMuNjI5Yy4yNC0uMjQuNDE0LS41Mi41MjMtLjgyYTIuMjUgMi4yNSAwIDAgMCAuMTQ0LS43OTV2LTEwLjcxYS4yMjUuMjI1IDAgMCAxIC4zODQtLjE1OWwyLjY1NiAyLjY2NGMuMjEuMjExLjMyOC40OTcuMzI4Ljc5NnY4LjUzNGMwIDIuNDg1LTIuMDEgNC41LTQuNDkgNC41aC0yLjg0M2EuMjI1LjIyNSAwIDAgMS0uMTYyLS4zOHpNNS45OTIgMjIuODY0bDMuNjIyIDMuNDY4Yy4yMzkuMjQuNTIuNDE0LjgxOC41MjMuMjQ2LjA5NC41MTQuMTQ1Ljc5NC4xNDVoMTAuNjg2YS4yMjUuMjI1IDAgMCAxIC4xNTguMzg0bC0yLjY1OCAyLjY2MmMtLjIxLjIxLS40OTYuMzI5LS43OTMuMzI5aC04LjUxNmE0LjQ5NSA0LjQ5NSAwIDAgMS00LjQ5LTQuNXYtMi44NDlhLjIyNS4yMjUgMCAwIDEgLjM4LS4xNjJ6bTcuMTE2LTE2Ljg1OWwtMy40NjEgMy42M2MtLjI0LjI0LS40MTMuNTItLjUyMi44MmEyLjI1IDIuMjUgMCAwIDAtLjE0NS43OTV2MTAuNzFhLjIyNS4yMjUgMCAwIDEtLjM4My4xNThsLTIuNjU2LTIuNjY0YTEuMTI2IDEuMTI2IDAgMCAxLS4zMjgtLjc5NXYtOC41MzRjMC0yLjQ4NSAyLjAxLTQuNSA0LjQ5LTQuNWgyLjg0M2EuMjI1LjIyNSAwIDAgMSAuMTYyLjM4em0zMy4xMDUgNC4zNzloLjg2OGMuNTkzIDAgMS4wNzQuNDggMS4wNzQgMS4wNzR2MS4wMTZjMCAuMDMyLjAyNi4wNTcuMDU3LjA1Ny40OTUtLjg3NSAxLjE2LTEuNTEgMS45OTgtMS45MDlhNi4yMzYgNi4yMzYgMCAwIDEgMi43MS0uNTk2YzEuMDQ3IDAgMS45ODkuMTk0IDIuODI2LjU4Mi44MzcuMzg3IDEuNTUuOTIgMi4xNCAxLjU5NWE2Ljg5NiA2Ljg5NiAwIDAgMSAxLjM0IDIuMzg2Yy4zMDUuOTE1LjQ1NyAxLjkuNDU3IDIuOTUzYTguNzk1IDguNzk1IDAgMCAxLS40ODUgMi45NTMgNy40MTggNy40MTggMCAwIDEtMS4zNTUgMi4zODYgNi4yNjkgNi4yNjkgMCAwIDEtMi4wOTcgMS41OTUgNi4xODIgNi4xODIgMCAwIDEtMi42ODMuNTgyYy0uNjQ3IDAtMS4yMTctLjA3LTEuNzEyLS4yMDlhNS43NTEgNS43NTEgMCAwIDEtMS4zMTItLjUzNyA1LjI1MiA1LjI1MiAwIDAgMS0uOTctLjcgNS4wMTIgNS4wMTIgMCAwIDEtLjY1Ny0uNzMxLjA4Ni4wODYgMCAwIDAtLjA4Ni4wODV2Ny4yMjRhMS4zMSAxLjMxIDAgMCAxLTEuMzEgMS4zMWgtLjgwM2ExLjMxIDEuMzEgMCAwIDEtMS4zMS0xLjMxVjExLjY5NGMwLS43MjMuNTg2LTEuMzEgMS4zMS0xLjMxem0xMC4wNDYgNy4xNThjMC0uNTU3LS4wOS0xLjA5NC0uMjctMS42MWE0LjA3OCA0LjA3OCAwIDAgMC0uOC0xLjM3MyAzLjk5IDMuOTkgMCAwIDAtMS4yNy0uOTU0Yy0uNDk0LS4yMzktMS4wNTUtLjM1OC0xLjY4My0uMzU4LS42MjggMC0xLjE5LjEyLTEuNjg0LjM1OGEzLjk5IDMuOTkgMCAwIDAtMS4yNy45NTQgNC4wNzggNC4wNzggMCAwIDAtLjc5OSAxLjM3MiA0Ljg0NSA0Ljg0NSAwIDAgMC0uMjcgMS42MWMwIC41NTguMDkgMS4wOTQuMjcgMS42MTEuMTgxLjUxNy40NDcuOTc1LjggMS4zNzJhMy45OSAzLjk5IDAgMCAwIDEuMjcuOTU1Yy40OTQuMjM4IDEuMDU1LjM1OCAxLjY4My4zNTguNjI4IDAgMS4xODktLjEyIDEuNjgzLS4zNThhMy45OSAzLjk5IDAgMCAwIDEuMjctLjk1NWMuMzUyLS4zOTcuNjE4LS44NTUuOC0xLjM3Mi4xOC0uNTE3LjI3LTEuMDUzLjI3LTEuNjF6bTguMzU5LTcuMTU4aC45OGMuNjI2IDAgMS4xMzQuNTA3IDEuMTM0IDEuMTMzdjEuMDc3YzAgLjAzMS4wMjUuMDU3LjA1Ny4wNTcuMzgtLjgzNi45MjItMS40ODIgMS42MjYtMS45MzkuNzA0LS40NTcgMS41MTMtLjY4NiAyLjQyNi0uNjg2LjIwOSAwIC40MTQuMDIuNjEzLjA2YS43NjIuNzYyIDAgMCAxIC42MTQuNzQ3djEuOTY0YS43MTUuNzE1IDAgMCAxLS44NDIuNzA0IDQuNTggNC41OCAwIDAgMC0uODEzLS4wNzVjLS44IDAtMS40NDEuMTU0LTEuOTI2LjQ2Mi0uNDg1LjMwOS0uODU2LjY2MS0xLjExMyAxLjA2YTMuNiAzLjYgMCAwIDAtLjUxNCAxLjE5MmMtLjA4Ni4zOTgtLjEyOC42OTYtLjEyOC44OTV2Ni4zNTVhMS4zMSAxLjMxIDAgMCAxLTEuMzEgMS4zMWgtLjgwNGExLjMxIDEuMzEgMCAwIDEtMS4zMS0xLjMxVjExLjY5NGMwLS43MjMuNTg2LTEuMzEgMS4zMS0xLjMxem0xMS41ODUgMGguODA0Yy43MjMgMCAxLjMxLjU4NyAxLjMxIDEuMzFWMjMuMzlhMS4zMSAxLjMxIDAgMCAxLTEuMzEgMS4zMWgtLjgwNGExLjMxIDEuMzEgMCAwIDEtMS4zMS0xLjMxVjExLjY5NGMwLS43MjMuNTg2LTEuMzEgMS4zMS0xLjMxem0tMS43OTUtNC44NjJjMC0uNTc2LjIwNC0xLjA3OC42MTMtMS41MDYuNDEtLjQyNy45MjgtLjY0MSAxLjU1NS0uNjQxLjYyOCAwIDEuMTU2LjIwNCAxLjU4NC42MTEuNDI4LjQwOC42NDIuOTIuNjQyIDEuNTM2IDAgLjYxNy0uMjE0IDEuMTI5LS42NDIgMS41MzYtLjQyOC40MDgtLjk1Ni42MTItMS41ODQuNjEyLS42MjcgMC0xLjE0Ni0uMjE0LTEuNTU1LS42NDFhMi4xMDggMi4xMDggMCAwIDEtLjYxMy0xLjUwN3ptMTQuNzUzIDguMTMzYy0uNjk1LS41MS0xLjMxNC0uNzY2LTEuODU1LS43NjYtLjQ1NyAwLS45MDQuMTItMS4zNDIuMzU4LS40MzcuMjM5LS42NTYuNjI2LS42NTYgMS4xNjMgMCAuNDM4LjE4Ljc1Ni41NDIuOTU1LjM2Mi4xOTguODE4LjM2OCAxLjM3LjUwNy41NTIuMTM5IDEuMTQ2LjI4MyAxLjc4My40MzIuNjM4LjE1IDEuMjMyLjM3OCAxLjc4NC42ODYuNTUyLjMwOCAxLjAwOC43MyAxLjM3IDEuMjY4LjM2MS41MzcuNTQyIDEuMjcyLjU0MiAyLjIwNyAwIC44NTUtLjE3NiAxLjU3NS0uNTI4IDIuMTYyYTQuMjQxIDQuMjQxIDAgMCAxLTEuMzcgMS40MTcgNS45MjcgNS45MjcgMCAwIDEtMS44OTcuNzc1IDkuNTUzIDkuNTUzIDAgMCAxLTIuMTEyLjIzOWMtMS4wNjUgMC0yLjA0NS0uMTYtMi45NC0uNDc3LS4zNS0uMTI1LS43Ny0uMzc1LTEuMjYtLjc1MWExLjMxIDEuMzEgMCAwIDEtLjExOS0xLjk3NmwuMzU1LS4zNDhhMS4zMSAxLjMxIDAgMCAxIDEuNzgzLS4wNDhjLjIwOC4xODMuMzg4LjMyNC41NC40MjMuNTA0LjMyOSAxLjExOC40OTMgMS44NC40OTMuMjQ4IDAgLjUwNS0uMDMuNzcxLS4wOS4yNjctLjA2LjUxNC0uMTU5Ljc0Mi0uMjk4LjIyOC0uMTQuNDE0LS4zMTMuNTU3LS41MjIuMTQyLS4yMDkuMjE0LS40NTIuMjE0LS43MyAwLS40OTgtLjE4MS0uODY2LS41NDMtMS4xMDQtLjM2MS0uMjM5LS44MTgtLjQzMy0xLjM3LS41ODJhMjguNzQ2IDI4Ljc0NiAwIDAgMC0xLjc4My0uNDE3IDYuNzA3IDYuNzA3IDAgMCAxLTEuNzgzLS42MjcgMy43OTUgMy43OTUgMCAwIDEtMS4zNy0xLjIwOGMtLjM2MS0uNTE3LS41NDItMS4yMzMtLjU0Mi0yLjE0NyAwLS43OTUuMTU3LTEuNDg2LjQ3LTIuMDczYTQuMjY1IDQuMjY1IDAgMCAxIDEuMjQyLTEuNDQ2IDUuMjU2IDUuMjU2IDAgMCAxIDEuNzctLjgzNiA3Ljc3MyA3Ljc3MyAwIDAgMSAyLjAyNS0uMjY4Yy45MTMgMCAxLjgxNy4xNjQgMi43MTEuNDkyLjMyNC4xMTkuNjg1LjMzOSAxLjA4NC42NmExLjMxIDEuMzEgMCAwIDEgLjA3NSAxLjk3NWwtLjQyNi40MDFhMS4zMSAxLjMxIDAgMCAxLTEuNjc0LjEwMXptNy43ODctMy4yNzFoLjYzM2MuNzIzIDAgMS4zMS41ODcgMS4zMSAxLjMxdi45MjdhNS42MDIgNS42MDIgMCAwIDEgMS41MjctMS44MDVjLjY3NS0uNTI3IDEuNTgzLS43OSAyLjcyNS0uNzkgMi4xNSAwIDMuNTc2Ljg4NSA0LjI4IDIuNjU0LjQ5NS0uOTE0IDEuMTEzLTEuNTg1IDEuODU1LTIuMDEzLjc0Mi0uNDI3IDEuNjI2LS42NDEgMi42NTQtLjY0MS45MTMgMCAxLjY4My4xNTkgMi4zMTEuNDc3YTQuMDg0IDQuMDg0IDAgMCAxIDEuNTI3IDEuMzEyYy4zOS41NTcuNjcgMS4yMDguODQxIDEuOTU0LjE3Mi43NDYuMjU3IDEuNTQ2LjI1NyAyLjR2Ny4yMmExLjMxIDEuMzEgMCAwIDEtMS4zMSAxLjMxaC0uODA0YTEuMzEgMS4zMSAwIDAgMS0xLjMxLTEuMzF2LTYuODAyYzAtLjQzNy0uMDM4LS44Ni0uMTE0LTEuMjY3YTMuMTExIDMuMTExIDAgMCAwLS40LTEuMDc0IDIuMDYyIDIuMDYyIDAgMCAwLS43Ny0uNzNjLS4zMjQtLjE4LS43NDItLjI2OS0xLjI1Ni0uMjY5LS41MzIgMC0uOTg0LjEwNC0xLjM1NS4zMTNhMi42ODYgMi42ODYgMCAwIDAtLjkxMy44MzUgMy41MDggMy41MDggMCAwIDAtLjUxNCAxLjE5MyA1Ljk0IDUuOTQgMCAwIDAtLjE1NyAxLjM1N3Y2LjQ0NWExLjMxIDEuMzEgMCAwIDEtMS4zMSAxLjMxaC0uODA0YTEuMzEgMS4zMSAwIDAgMS0xLjMxLTEuMzF2LTcuMjJjMC0uODk1LS4xOC0xLjYwNi0uNTQyLTIuMTMzLS4zNjItLjUyNi0uOTYtLjc5LTEuNzk4LS43OS0uNTcgMC0xLjA1MS4xLTEuNDQxLjI5OC0uMzkuMi0uNzEzLjQ2OC0uOTcuODA2YTMuMjYgMy4yNiAwIDAgMC0uNTU3IDEuMTYzIDUuNDEzIDUuNDEzIDAgMCAwLS4xNyAxLjM3MnY2LjUwNGExLjMxIDEuMzEgMCAwIDEtMS4zMTEgMS4zMWgtLjgwNGExLjMxIDEuMzEgMCAwIDEtMS4zMS0xLjMxVjExLjY5NGMwLS43MjMuNTg3LTEuMzEgMS4zMS0xLjMxem0yNS40NTQgMGguODAzYy43MjQgMCAxLjMxLjU4NyAxLjMxIDEuMzFWMjMuMzlhMS4zMSAxLjMxIDAgMCAxLTEuMzEgMS4zMWgtLjgwM2ExLjMxIDEuMzEgMCAwIDEtMS4zMS0xLjMxVjExLjY5NGMwLS43MjMuNTg2LTEuMzEgMS4zMS0xLjMxem0tMS43OTYtNC44NjJjMC0uNTc2LjIwNS0xLjA3OC42MTQtMS41MDYuNDA5LS40MjcuOTI3LS42NDEgMS41NTUtLjY0MS42MjggMCAxLjE1Ni4yMDQgMS41ODQuNjExLjQyOC40MDguNjQyLjkyLjY0MiAxLjUzNiAwIC42MTctLjIxNCAxLjEyOS0uNjQyIDEuNTM2LS40MjguNDA4LS45NTYuNjEyLTEuNTg0LjYxMi0uNjI4IDAtMS4xNDYtLjIxNC0xLjU1NS0uNjQxYTIuMTA4IDIuMTA4IDAgMCAxLS42MTQtMS41MDd6bTE2Ljc1MSA4LjM3M2EzLjU2NCAzLjU2NCAwIDAgMC0uMzcxLS4yNiAyLjYwNyAyLjYwNyAwIDAgMC0xLjM0Mi0uMzg4Yy0uNjI3IDAtMS4xODkuMTItMS42ODMuMzU4YTMuOTkgMy45OSAwIDAgMC0xLjI3Ljk1NCA0LjA3OCA0LjA3OCAwIDAgMC0uNzk5IDEuMzcyIDQuODQ1IDQuODQ1IDAgMCAwLS4yNzEgMS42MWMwIC41NTguMDkgMS4wOTQuMjcxIDEuNjExLjE4LjUxNy40NDcuOTc1LjggMS4zNzJhMy45OSAzLjk5IDAgMCAwIDEuMjY5Ljk1NWMuNDk0LjIzOCAxLjA1Ni4zNTggMS42ODMuMzU4LjUzMyAwIDEuMDI4LS4xMTUgMS40ODQtLjM0My4wOTMtLjA0Ny4xOTMtLjExLjMtLjE4OWExLjMxIDEuMzEgMCAwIDEgMS43NTYuMTg1bC41Mi41ODRhMS4yNDggMS4yNDggMCAwIDEtLjMwNyAxLjkxIDcuOTggNy45OCAwIDAgMS0yLjY2OC45N2MtLjQxOS4wNjktLjc4LjEwNC0xLjA4NS4xMDRhNy45MDQgNy45MDQgMCAwIDEtMi45MS0uNTM3QTYuOTM4IDYuOTM4IDAgMCAxIDEzMC4zNjUgMjNhNy4yMyA3LjIzIDAgMCAxLTEuNTgzLTIuMzcxYy0uMzktLjkyNS0uNTg1LTEuOTU0LS41ODUtMy4wODcgMC0xLjEzMy4xOTUtMi4xNjIuNTg1LTMuMDg3YTcuMjMgNy4yMyAwIDAgMSAxLjU4My0yLjM3MSA2LjkzOCA2LjkzOCAwIDAgMSAyLjM2OS0xLjUyMSA3LjkwNCA3LjkwNCAwIDAgMSAyLjkxLS41MzdjLjg3NiAwIDEuNzU1LjE3NCAyLjY0LjUyMi4zMzcuMTMzLjczNS4zNyAxLjE5My43MTFhMS4zMSAxLjMxIDAgMCAxIC4xNjQgMS45NTdsLS41My41NTNhMS4zMSAxLjMxIDAgMCAxLTEuNzU0LjEyNnoiLz4KPC9zdmc+"
6
+ alt="Prismic"
7
+ >
8
+ <figcaption>Loading preview...</figcaption>
9
+ </figure>
10
+ </section>
11
+ </template>
12
+
13
+ <script setup>
14
+ import { onMounted } from 'vue'
15
+
16
+ useMeta({
17
+ title: 'Prismic Preview - Loading'
18
+ })
19
+
20
+ // TODO: refactor into simple hook
21
+ const { client, options: { linkResolver } } = usePrismic()
22
+ const { push } = useRouter()
23
+ onMounted(async () => {
24
+ const redirectURL = await client.resolvePreviewURL({
25
+ linkResolver,
26
+ defaultURL: '/'
27
+ })
28
+
29
+ push(redirectURL ?? '/')
30
+ })
31
+ </script>
32
+
33
+ <style scoped>
34
+ .prismic-preview {
35
+ width: 100%;
36
+ height: 100vh;
37
+ position: fixed;
38
+ top: 0;
39
+ left: 0;
40
+ display: flex;
41
+ justify-content: center;
42
+ align-items: center;
43
+ background: #ffffff;
44
+ color: #666666;
45
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
46
+ font-size: 1rem;
47
+ text-align: center;
48
+ }
49
+
50
+ img {
51
+ margin-bottom: 1.25rem;
52
+ }
53
+ </style>
package/src/types.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { PrismicPluginOptions } from '@prismicio/vue'
2
+
3
+ export type PrismicModuleOptions = Omit<PrismicPluginOptions, 'endpoint' | 'client' | 'linkResolver'> & {
4
+ endpoint: string,
5
+ client?: string,
6
+ linkResolver?: string,
7
+ preview?: string | false,
8
+ };
package/src/utils.ts ADDED
@@ -0,0 +1,14 @@
1
+ import { existsSync } from 'fs'
2
+
3
+ export const fileExists = (path?: string, extensions = ['js', 'ts']): string | null => {
4
+ if (!path) {
5
+ return null
6
+ } else if (existsSync(path)) {
7
+ // If path already contains/forces the extension
8
+ return path
9
+ }
10
+
11
+ const extension = extensions.find(extension => existsSync(`${path}.${extension}`))
12
+
13
+ return extension ? `${path}.${extension}` : null
14
+ }
package/src/generator.js DELETED
@@ -1,37 +0,0 @@
1
- const Prismic = require('@prismicio/client')
2
- const logger = require('./logger')
3
-
4
- function generate (options) {
5
- this.nuxt.hook('generate:before', () => {
6
- const client = Prismic.client(options.endpoint, options.apiOptions)
7
- const maybeF = this.options.generate.routes || []
8
-
9
- const fetchRoutes = async (page = 1, routes = []) => {
10
- const response = await client.query('', {
11
- pageSize: 100,
12
- lang: '*',
13
- page
14
- })
15
- const allRoutes = routes.concat(response.results.map(e => e.url))
16
- /* istanbul ignore next */
17
- if (response.results_size + routes.length < response.total_results_size) {
18
- return fetchRoutes(page + 1, allRoutes)
19
- }
20
- return [...new Set(allRoutes)]
21
- }
22
-
23
- this.options.generate.routes = async () => {
24
- try {
25
- const prismicRoutes = await fetchRoutes()
26
- const userRoutes =
27
- typeof maybeF === 'function' ? await maybeF(options) : maybeF
28
- return [...new Set(prismicRoutes.concat(userRoutes))].filter(e => e)
29
- } catch (e) /* istanbul ignore next */ {
30
- logger.error(e)
31
- return []
32
- }
33
- }
34
- })
35
- }
36
-
37
- module.exports = generate
package/src/logger.js DELETED
@@ -1 +0,0 @@
1
- module.exports = require('consola').withScope('@nuxtjs/prismic')
package/src/module.js DELETED
@@ -1,98 +0,0 @@
1
- const path = require('path')
2
- const fs = require('fs')
3
- const logger = require('./logger')
4
- const generate = require('./generator')
5
-
6
- function install (moduleOptions) {
7
- const options = {
8
- preview: true,
9
- previewReloadType: 'hot',
10
- components: true,
11
- modern: false,
12
- ...moduleOptions,
13
- ...(this.options.prismic || {})
14
- }
15
- if (options.preview === true) {
16
- options.preview = '/preview'
17
- }
18
- if (options.modern === true && typeof options.disableGenerator === 'undefined') {
19
- options.disableGenerator = true
20
- }
21
- if (!options.endpoint) {
22
- logger.warn('Options `endpoint` is required, disabling module...')
23
- return
24
- }
25
- const repo = options.endpoint.replace(/^https?:\/\//, '').replace(/(\.cdn)?\.prismic.+/, '')
26
- const app = this.options.dir.app || 'app'
27
-
28
- // Add in Prismic libraries to enable preview
29
- if (options.preview) {
30
- // Add /preview
31
- const userPreviewPage = path.join(this.options.srcDir, app, 'prismic', 'pages', 'preview.vue')
32
- const userPreviewPageExists = fs.existsSync(userPreviewPage)
33
-
34
- this.addTemplate({
35
- fileName: 'prismic/pages/preview.vue',
36
- src: userPreviewPageExists ? userPreviewPage : path.join(__dirname, '../templates/pages/preview.vue')
37
- })
38
- this.extendRoutes((routes, resolve) => {
39
- routes.unshift({
40
- name: 'prismic-preview',
41
- path: options.preview,
42
- component: resolve(this.options.buildDir, 'prismic/pages/preview.vue')
43
- })
44
- })
45
- }
46
-
47
- // Add components
48
- if (options.components) {
49
- this.addPlugin({
50
- fileName: 'prismic/plugins/prismic-components.js',
51
- src: path.resolve(__dirname, '../templates/plugins/prismic-components.js')
52
- })
53
- }
54
-
55
- // Add templates & prismic plugin
56
- const userLinkResolver = path.join(this.options.srcDir, app, 'prismic', 'link-resolver.js')
57
- const userLinkResolverExists = fs.existsSync(userLinkResolver)
58
- const userHtmlSerializer = path.join(this.options.srcDir, app, 'prismic', 'html-serializer.js')
59
-
60
- const apiOptions = options.apiOptions || {}
61
- if (!userLinkResolverExists && !options.linkResolver && !apiOptions.routes) {
62
- logger.warn('Please create ~/app/prismic/link-resolver.js')
63
- }
64
- this.addTemplate({
65
- fileName: 'prismic/link-resolver.js',
66
- src: userLinkResolverExists ? userLinkResolver : path.join(__dirname, '../templates/link-resolver.js'),
67
- options
68
- })
69
- this.addTemplate({
70
- fileName: 'prismic/html-serializer.js',
71
- src: fs.existsSync(userHtmlSerializer) ? userHtmlSerializer : path.join(__dirname, '../templates/html-serializer.js'),
72
- options
73
- })
74
- this.addPlugin({
75
- fileName: 'prismic/plugins/prismic.js',
76
- src: path.resolve(__dirname, '../templates/plugins/prismic.js'),
77
- options: {
78
- preview: options.preview,
79
- previewReloadType: options.previewReloadType,
80
- endpoint: options.endpoint,
81
- modern: options.modern,
82
- apiOptions,
83
- repo,
84
- script: `//static.cdn.prismic.io/prismic.min.js?repo=${repo}&new=true`
85
- }
86
- })
87
-
88
- if (
89
- options.apiOptions &&
90
- options.apiOptions.routes &&
91
- !options.disableGenerator
92
- ) {
93
- generate.call(this, options)
94
- }
95
- }
96
-
97
- module.exports = install
98
- module.exports.meta = require('../package.json')
@@ -1,2 +0,0 @@
1
- <% if (typeof options.htmlSerializer === 'string') { %>export { default } from '<%= options.htmlSerializer %>'<% }
2
- else {%>export default <%= options.htmlSerializer ? serialize(options.htmlSerializer) : 'null' %><% } %>
@@ -1,2 +0,0 @@
1
- <% if (typeof options.linkResolver === 'string') { %>export { default } from '<%= options.linkResolver %>'<% }
2
- else { %>export default <%= options.linkResolver ? serialize(options.linkResolver) : "function (doc) { return null }" %><% } %>
@@ -1,42 +0,0 @@
1
- <template>
2
- <div class="preview-overlay">
3
- <div class="box">
4
- <img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNDAiIGhlaWdodD0iMzYiPgogIDxwYXRoIGZpbGw9IiMyMTI3MzUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTM1LjUzOCAxOC43NGwtMi42NTUtMi42NmExLjEyNiAxLjEyNiAwIDAgMS0uMzI5LS43OTZ2LTMuMjU2YzAtMy4wMDktLjMxMy00LjEtLjktNS4yYTYuMTI3IDYuMTI3IDAgMCAwLTIuNTQ2LTIuNTUxYy0xLjA5Ny0uNTg5LTIuMTg2LS45MDItNS4xODgtLjkwMmgtNC4yOTVhLjIyNS4yMjUgMCAwIDEtLjE1OC0uMzg0TDIyLjEyMi4zM2MuMjEtLjIxMS40OTYtLjMzLjc5NC0uMzNoMS40OTNjNC4wMDMgMCA1LjQ1NS40MTggNi45MTkgMS4yMDJhOC4xNjkgOC4xNjkgMCAwIDEgMy4zOTQgMy40MDJjLjc4MyAxLjQ2NyAxLjIgMi45MjIgMS4yIDYuOTMzdjcuMDQ1YS4yMjUuMjI1IDAgMCAxLS4zODQuMTU5ek0xNy4yMjIgMzUuNjE3bDIuNjU1LTIuNjYxYy4yMS0uMjExLjQ5Ni0uMzMuNzk0LS4zM2gzLjI0OWMzLjAwMiAwIDQuMDktLjMxMyA1LjE4OC0uOTAyYTYuMTI3IDYuMTI3IDAgMCAwIDIuNTQ2LTIuNTUxYy41ODctMS4xLjktMi4xOTEuOS01LjJ2LTQuMzA0YS4yMjUuMjI1IDAgMCAxIC4zODMtLjE1OWwyLjY1NiAyLjY2MWMuMjEuMjExLjMyOS40OTguMzI5Ljc5NnYxLjQ5N2MwIDQuMDExLS40MTcgNS40NjYtMS4yIDYuOTMzYTguMTY5IDguMTY5IDAgMCAxLTMuMzk0IDMuNDAyQzI5Ljg2NCAzNS41ODIgMjguNDEyIDM2IDI0LjQwOSAzNkgxNy4zOGEuMjI1LjIyNSAwIDAgMS0uMTU4LS4zODR6TS4zODMgMTcuMjU5TDMuMDQgMTkuOTJjLjIxLjIxMS4zMjkuNDk4LjMyOS43OTZ2My4yNTZjMCAzLjAwOS4zMTIgNC4xLjkgNS4yYTYuMTI3IDYuMTI3IDAgMCAwIDIuNTQ1IDIuNTUxYzEuMDk4LjU4OSAyLjE4Ny45MDIgNS4xODkuOTAyaDQuMjk0YS4yMjUuMjI1IDAgMCAxIC4xNi4zODRsLTIuNjU3IDIuNjYxYy0uMjEuMjExLS40OTYuMzMtLjc5My4zM2gtMS40OTRjLTQuMDAzIDAtNS40NTQtLjQxOC02LjkxOC0xLjIwMkE4LjE2OSA4LjE2OSAwIDAgMSAxLjIgMzEuMzk2Qy40MTcgMjkuOTI5IDAgMjguNDc0IDAgMjQuNDYzdi03LjA0NWEuMjI1LjIyNSAwIDAgMSAuMzgzLS4xNTl6TTE2LjA0NSAzLjA0NWMtLjIxMS4yMTEtLjQ5Ni4zMy0uNzk0LjMzaC0zLjI0OWMtMy4wMDIgMC00LjA5MS4zMTMtNS4xODkuOTAyYTYuMTI3IDYuMTI3IDAgMCAwLTIuNTQ2IDIuNTUxYy0uNTg3IDEuMS0uOSAyLjE5MS0uOSA1LjJ2NC4zMDRhLjIyNS4yMjUgMCAwIDEtLjM4My4xNTlMLjMzIDEzLjgzQTEuMTI2IDEuMTI2IDAgMCAxIDAgMTMuMDM0di0xLjQ5N2MwLTQuMDExLjQxNy01LjQ2NiAxLjItNi45MzNhOC4xNjkgOC4xNjkgMCAwIDEgMy4zOTQtMy40MDJDNi4wNTguNDE4IDcuNTEgMCAxMS41MTIgMGg3LjAzYS4yMjUuMjI1IDAgMCAxIC4xNTguMzg0bC0yLjY1NSAyLjY2MXptMTMuODg0IDEwLjA5MWwtMy42Mi0zLjQ2OGMtLjI0LS4yNC0uNTItLjQxNC0uODE5LS41MjNBMi4yMzYgMi4yMzYgMCAwIDAgMjQuNjk2IDlIMTQuMDFhLjIyNS4yMjUgMCAwIDEtLjE1OS0uMzg0bDIuNjU5LTIuNjYyYy4yMS0uMjEuNDk1LS4zMjkuNzkzLS4zMjloOC41MTZjMi40OCAwIDQuNDkgMi4wMTUgNC40OSA0LjV2Mi44NDlhLjIyNS4yMjUgMCAwIDEtLjM4LjE2MnptLTcuMTE1IDE2Ljg2MWwzLjQ2LTMuNjI5Yy4yNC0uMjQuNDE0LS41Mi41MjMtLjgyYTIuMjUgMi4yNSAwIDAgMCAuMTQ0LS43OTV2LTEwLjcxYS4yMjUuMjI1IDAgMCAxIC4zODQtLjE1OWwyLjY1NiAyLjY2NGMuMjEuMjExLjMyOC40OTcuMzI4Ljc5NnY4LjUzNGMwIDIuNDg1LTIuMDEgNC41LTQuNDkgNC41aC0yLjg0M2EuMjI1LjIyNSAwIDAgMS0uMTYyLS4zOHpNNS45OTIgMjIuODY0bDMuNjIyIDMuNDY4Yy4yMzkuMjQuNTIuNDE0LjgxOC41MjMuMjQ2LjA5NC41MTQuMTQ1Ljc5NC4xNDVoMTAuNjg2YS4yMjUuMjI1IDAgMCAxIC4xNTguMzg0bC0yLjY1OCAyLjY2MmMtLjIxLjIxLS40OTYuMzI5LS43OTMuMzI5aC04LjUxNmE0LjQ5NSA0LjQ5NSAwIDAgMS00LjQ5LTQuNXYtMi44NDlhLjIyNS4yMjUgMCAwIDEgLjM4LS4xNjJ6bTcuMTE2LTE2Ljg1OWwtMy40NjEgMy42M2MtLjI0LjI0LS40MTMuNTItLjUyMi44MmEyLjI1IDIuMjUgMCAwIDAtLjE0NS43OTV2MTAuNzFhLjIyNS4yMjUgMCAwIDEtLjM4My4xNThsLTIuNjU2LTIuNjY0YTEuMTI2IDEuMTI2IDAgMCAxLS4zMjgtLjc5NXYtOC41MzRjMC0yLjQ4NSAyLjAxLTQuNSA0LjQ5LTQuNWgyLjg0M2EuMjI1LjIyNSAwIDAgMSAuMTYyLjM4em0zMy4xMDUgNC4zNzloLjg2OGMuNTkzIDAgMS4wNzQuNDggMS4wNzQgMS4wNzR2MS4wMTZjMCAuMDMyLjAyNi4wNTcuMDU3LjA1Ny40OTUtLjg3NSAxLjE2LTEuNTEgMS45OTgtMS45MDlhNi4yMzYgNi4yMzYgMCAwIDEgMi43MS0uNTk2YzEuMDQ3IDAgMS45ODkuMTk0IDIuODI2LjU4Mi44MzcuMzg3IDEuNTUuOTIgMi4xNCAxLjU5NWE2Ljg5NiA2Ljg5NiAwIDAgMSAxLjM0IDIuMzg2Yy4zMDUuOTE1LjQ1NyAxLjkuNDU3IDIuOTUzYTguNzk1IDguNzk1IDAgMCAxLS40ODUgMi45NTMgNy40MTggNy40MTggMCAwIDEtMS4zNTUgMi4zODYgNi4yNjkgNi4yNjkgMCAwIDEtMi4wOTcgMS41OTUgNi4xODIgNi4xODIgMCAwIDEtMi42ODMuNTgyYy0uNjQ3IDAtMS4yMTctLjA3LTEuNzEyLS4yMDlhNS43NTEgNS43NTEgMCAwIDEtMS4zMTItLjUzNyA1LjI1MiA1LjI1MiAwIDAgMS0uOTctLjcgNS4wMTIgNS4wMTIgMCAwIDEtLjY1Ny0uNzMxLjA4Ni4wODYgMCAwIDAtLjA4Ni4wODV2Ny4yMjRhMS4zMSAxLjMxIDAgMCAxLTEuMzEgMS4zMWgtLjgwM2ExLjMxIDEuMzEgMCAwIDEtMS4zMS0xLjMxVjExLjY5NGMwLS43MjMuNTg2LTEuMzEgMS4zMS0xLjMxem0xMC4wNDYgNy4xNThjMC0uNTU3LS4wOS0xLjA5NC0uMjctMS42MWE0LjA3OCA0LjA3OCAwIDAgMC0uOC0xLjM3MyAzLjk5IDMuOTkgMCAwIDAtMS4yNy0uOTU0Yy0uNDk0LS4yMzktMS4wNTUtLjM1OC0xLjY4My0uMzU4LS42MjggMC0xLjE5LjEyLTEuNjg0LjM1OGEzLjk5IDMuOTkgMCAwIDAtMS4yNy45NTQgNC4wNzggNC4wNzggMCAwIDAtLjc5OSAxLjM3MiA0Ljg0NSA0Ljg0NSAwIDAgMC0uMjcgMS42MWMwIC41NTguMDkgMS4wOTQuMjcgMS42MTEuMTgxLjUxNy40NDcuOTc1LjggMS4zNzJhMy45OSAzLjk5IDAgMCAwIDEuMjcuOTU1Yy40OTQuMjM4IDEuMDU1LjM1OCAxLjY4My4zNTguNjI4IDAgMS4xODktLjEyIDEuNjgzLS4zNThhMy45OSAzLjk5IDAgMCAwIDEuMjctLjk1NWMuMzUyLS4zOTcuNjE4LS44NTUuOC0xLjM3Mi4xOC0uNTE3LjI3LTEuMDUzLjI3LTEuNjF6bTguMzU5LTcuMTU4aC45OGMuNjI2IDAgMS4xMzQuNTA3IDEuMTM0IDEuMTMzdjEuMDc3YzAgLjAzMS4wMjUuMDU3LjA1Ny4wNTcuMzgtLjgzNi45MjItMS40ODIgMS42MjYtMS45MzkuNzA0LS40NTcgMS41MTMtLjY4NiAyLjQyNi0uNjg2LjIwOSAwIC40MTQuMDIuNjEzLjA2YS43NjIuNzYyIDAgMCAxIC42MTQuNzQ3djEuOTY0YS43MTUuNzE1IDAgMCAxLS44NDIuNzA0IDQuNTggNC41OCAwIDAgMC0uODEzLS4wNzVjLS44IDAtMS40NDEuMTU0LTEuOTI2LjQ2Mi0uNDg1LjMwOS0uODU2LjY2MS0xLjExMyAxLjA2YTMuNiAzLjYgMCAwIDAtLjUxNCAxLjE5MmMtLjA4Ni4zOTgtLjEyOC42OTYtLjEyOC44OTV2Ni4zNTVhMS4zMSAxLjMxIDAgMCAxLTEuMzEgMS4zMWgtLjgwNGExLjMxIDEuMzEgMCAwIDEtMS4zMS0xLjMxVjExLjY5NGMwLS43MjMuNTg2LTEuMzEgMS4zMS0xLjMxem0xMS41ODUgMGguODA0Yy43MjMgMCAxLjMxLjU4NyAxLjMxIDEuMzFWMjMuMzlhMS4zMSAxLjMxIDAgMCAxLTEuMzEgMS4zMWgtLjgwNGExLjMxIDEuMzEgMCAwIDEtMS4zMS0xLjMxVjExLjY5NGMwLS43MjMuNTg2LTEuMzEgMS4zMS0xLjMxem0tMS43OTUtNC44NjJjMC0uNTc2LjIwNC0xLjA3OC42MTMtMS41MDYuNDEtLjQyNy45MjgtLjY0MSAxLjU1NS0uNjQxLjYyOCAwIDEuMTU2LjIwNCAxLjU4NC42MTEuNDI4LjQwOC42NDIuOTIuNjQyIDEuNTM2IDAgLjYxNy0uMjE0IDEuMTI5LS42NDIgMS41MzYtLjQyOC40MDgtLjk1Ni42MTItMS41ODQuNjEyLS42MjcgMC0xLjE0Ni0uMjE0LTEuNTU1LS42NDFhMi4xMDggMi4xMDggMCAwIDEtLjYxMy0xLjUwN3ptMTQuNzUzIDguMTMzYy0uNjk1LS41MS0xLjMxNC0uNzY2LTEuODU1LS43NjYtLjQ1NyAwLS45MDQuMTItMS4zNDIuMzU4LS40MzcuMjM5LS42NTYuNjI2LS42NTYgMS4xNjMgMCAuNDM4LjE4Ljc1Ni41NDIuOTU1LjM2Mi4xOTguODE4LjM2OCAxLjM3LjUwNy41NTIuMTM5IDEuMTQ2LjI4MyAxLjc4My40MzIuNjM4LjE1IDEuMjMyLjM3OCAxLjc4NC42ODYuNTUyLjMwOCAxLjAwOC43MyAxLjM3IDEuMjY4LjM2MS41MzcuNTQyIDEuMjcyLjU0MiAyLjIwNyAwIC44NTUtLjE3NiAxLjU3NS0uNTI4IDIuMTYyYTQuMjQxIDQuMjQxIDAgMCAxLTEuMzcgMS40MTcgNS45MjcgNS45MjcgMCAwIDEtMS44OTcuNzc1IDkuNTUzIDkuNTUzIDAgMCAxLTIuMTEyLjIzOWMtMS4wNjUgMC0yLjA0NS0uMTYtMi45NC0uNDc3LS4zNS0uMTI1LS43Ny0uMzc1LTEuMjYtLjc1MWExLjMxIDEuMzEgMCAwIDEtLjExOS0xLjk3NmwuMzU1LS4zNDhhMS4zMSAxLjMxIDAgMCAxIDEuNzgzLS4wNDhjLjIwOC4xODMuMzg4LjMyNC41NC40MjMuNTA0LjMyOSAxLjExOC40OTMgMS44NC40OTMuMjQ4IDAgLjUwNS0uMDMuNzcxLS4wOS4yNjctLjA2LjUxNC0uMTU5Ljc0Mi0uMjk4LjIyOC0uMTQuNDE0LS4zMTMuNTU3LS41MjIuMTQyLS4yMDkuMjE0LS40NTIuMjE0LS43MyAwLS40OTgtLjE4MS0uODY2LS41NDMtMS4xMDQtLjM2MS0uMjM5LS44MTgtLjQzMy0xLjM3LS41ODJhMjguNzQ2IDI4Ljc0NiAwIDAgMC0xLjc4My0uNDE3IDYuNzA3IDYuNzA3IDAgMCAxLTEuNzgzLS42MjcgMy43OTUgMy43OTUgMCAwIDEtMS4zNy0xLjIwOGMtLjM2MS0uNTE3LS41NDItMS4yMzMtLjU0Mi0yLjE0NyAwLS43OTUuMTU3LTEuNDg2LjQ3LTIuMDczYTQuMjY1IDQuMjY1IDAgMCAxIDEuMjQyLTEuNDQ2IDUuMjU2IDUuMjU2IDAgMCAxIDEuNzctLjgzNiA3Ljc3MyA3Ljc3MyAwIDAgMSAyLjAyNS0uMjY4Yy45MTMgMCAxLjgxNy4xNjQgMi43MTEuNDkyLjMyNC4xMTkuNjg1LjMzOSAxLjA4NC42NmExLjMxIDEuMzEgMCAwIDEgLjA3NSAxLjk3NWwtLjQyNi40MDFhMS4zMSAxLjMxIDAgMCAxLTEuNjc0LjEwMXptNy43ODctMy4yNzFoLjYzM2MuNzIzIDAgMS4zMS41ODcgMS4zMSAxLjMxdi45MjdhNS42MDIgNS42MDIgMCAwIDEgMS41MjctMS44MDVjLjY3NS0uNTI3IDEuNTgzLS43OSAyLjcyNS0uNzkgMi4xNSAwIDMuNTc2Ljg4NSA0LjI4IDIuNjU0LjQ5NS0uOTE0IDEuMTEzLTEuNTg1IDEuODU1LTIuMDEzLjc0Mi0uNDI3IDEuNjI2LS42NDEgMi42NTQtLjY0MS45MTMgMCAxLjY4My4xNTkgMi4zMTEuNDc3YTQuMDg0IDQuMDg0IDAgMCAxIDEuNTI3IDEuMzEyYy4zOS41NTcuNjcgMS4yMDguODQxIDEuOTU0LjE3Mi43NDYuMjU3IDEuNTQ2LjI1NyAyLjR2Ny4yMmExLjMxIDEuMzEgMCAwIDEtMS4zMSAxLjMxaC0uODA0YTEuMzEgMS4zMSAwIDAgMS0xLjMxLTEuMzF2LTYuODAyYzAtLjQzNy0uMDM4LS44Ni0uMTE0LTEuMjY3YTMuMTExIDMuMTExIDAgMCAwLS40LTEuMDc0IDIuMDYyIDIuMDYyIDAgMCAwLS43Ny0uNzNjLS4zMjQtLjE4LS43NDItLjI2OS0xLjI1Ni0uMjY5LS41MzIgMC0uOTg0LjEwNC0xLjM1NS4zMTNhMi42ODYgMi42ODYgMCAwIDAtLjkxMy44MzUgMy41MDggMy41MDggMCAwIDAtLjUxNCAxLjE5MyA1Ljk0IDUuOTQgMCAwIDAtLjE1NyAxLjM1N3Y2LjQ0NWExLjMxIDEuMzEgMCAwIDEtMS4zMSAxLjMxaC0uODA0YTEuMzEgMS4zMSAwIDAgMS0xLjMxLTEuMzF2LTcuMjJjMC0uODk1LS4xOC0xLjYwNi0uNTQyLTIuMTMzLS4zNjItLjUyNi0uOTYtLjc5LTEuNzk4LS43OS0uNTcgMC0xLjA1MS4xLTEuNDQxLjI5OC0uMzkuMi0uNzEzLjQ2OC0uOTcuODA2YTMuMjYgMy4yNiAwIDAgMC0uNTU3IDEuMTYzIDUuNDEzIDUuNDEzIDAgMCAwLS4xNyAxLjM3MnY2LjUwNGExLjMxIDEuMzEgMCAwIDEtMS4zMTEgMS4zMWgtLjgwNGExLjMxIDEuMzEgMCAwIDEtMS4zMS0xLjMxVjExLjY5NGMwLS43MjMuNTg3LTEuMzEgMS4zMS0xLjMxem0yNS40NTQgMGguODAzYy43MjQgMCAxLjMxLjU4NyAxLjMxIDEuMzFWMjMuMzlhMS4zMSAxLjMxIDAgMCAxLTEuMzEgMS4zMWgtLjgwM2ExLjMxIDEuMzEgMCAwIDEtMS4zMS0xLjMxVjExLjY5NGMwLS43MjMuNTg2LTEuMzEgMS4zMS0xLjMxem0tMS43OTYtNC44NjJjMC0uNTc2LjIwNS0xLjA3OC42MTQtMS41MDYuNDA5LS40MjcuOTI3LS42NDEgMS41NTUtLjY0MS42MjggMCAxLjE1Ni4yMDQgMS41ODQuNjExLjQyOC40MDguNjQyLjkyLjY0MiAxLjUzNiAwIC42MTctLjIxNCAxLjEyOS0uNjQyIDEuNTM2LS40MjguNDA4LS45NTYuNjEyLTEuNTg0LjYxMi0uNjI4IDAtMS4xNDYtLjIxNC0xLjU1NS0uNjQxYTIuMTA4IDIuMTA4IDAgMCAxLS42MTQtMS41MDd6bTE2Ljc1MSA4LjM3M2EzLjU2NCAzLjU2NCAwIDAgMC0uMzcxLS4yNiAyLjYwNyAyLjYwNyAwIDAgMC0xLjM0Mi0uMzg4Yy0uNjI3IDAtMS4xODkuMTItMS42ODMuMzU4YTMuOTkgMy45OSAwIDAgMC0xLjI3Ljk1NCA0LjA3OCA0LjA3OCAwIDAgMC0uNzk5IDEuMzcyIDQuODQ1IDQuODQ1IDAgMCAwLS4yNzEgMS42MWMwIC41NTguMDkgMS4wOTQuMjcxIDEuNjExLjE4LjUxNy40NDcuOTc1LjggMS4zNzJhMy45OSAzLjk5IDAgMCAwIDEuMjY5Ljk1NWMuNDk0LjIzOCAxLjA1Ni4zNTggMS42ODMuMzU4LjUzMyAwIDEuMDI4LS4xMTUgMS40ODQtLjM0My4wOTMtLjA0Ny4xOTMtLjExLjMtLjE4OWExLjMxIDEuMzEgMCAwIDEgMS43NTYuMTg1bC41Mi41ODRhMS4yNDggMS4yNDggMCAwIDEtLjMwNyAxLjkxIDcuOTggNy45OCAwIDAgMS0yLjY2OC45N2MtLjQxOS4wNjktLjc4LjEwNC0xLjA4NS4xMDRhNy45MDQgNy45MDQgMCAwIDEtMi45MS0uNTM3QTYuOTM4IDYuOTM4IDAgMCAxIDEzMC4zNjUgMjNhNy4yMyA3LjIzIDAgMCAxLTEuNTgzLTIuMzcxYy0uMzktLjkyNS0uNTg1LTEuOTU0LS41ODUtMy4wODcgMC0xLjEzMy4xOTUtMi4xNjIuNTg1LTMuMDg3YTcuMjMgNy4yMyAwIDAgMSAxLjU4My0yLjM3MSA2LjkzOCA2LjkzOCAwIDAgMSAyLjM2OS0xLjUyMSA3LjkwNCA3LjkwNCAwIDAgMSAyLjkxLS41MzdjLjg3NiAwIDEuNzU1LjE3NCAyLjY0LjUyMi4zMzcuMTMzLjczNS4zNyAxLjE5My43MTFhMS4zMSAxLjMxIDAgMCAxIC4xNjQgMS45NTdsLS41My41NTNhMS4zMSAxLjMxIDAgMCAxLTEuNzU0LjEyNnoiLz4KPC9zdmc+" alt="Prismic">
5
- <h1>Loading preview...</h1>
6
- </div>
7
- </div>
8
- </template>
9
-
10
- <script>
11
- export default {
12
- head: {
13
- title: 'Prismic Preview'
14
- },
15
- mounted () {
16
- this.$prismic.preview()
17
- }
18
- }
19
- </script>
20
-
21
- <style scoped>
22
- .preview-overlay {
23
- width: 100%;
24
- height: 100vh;
25
- position: fixed;
26
- top: 0;
27
- left: 0;
28
- background: white;
29
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
30
- color: #666;
31
- font-size: 20px;
32
- text-align: center;
33
- display: table;
34
- }
35
- .box {
36
- display: table-cell;
37
- vertical-align: middle;
38
- }
39
- img {
40
- margin-bottom: 20px;
41
- }
42
- </style>
@@ -1,6 +0,0 @@
1
- import Vue from 'vue'
2
- import { common, nuxt } from '@prismicio/vue/components/common'
3
-
4
- Object.entries({ ...common, ...nuxt }).forEach(([_, c]) => {
5
- Vue.component(c.name, c)
6
- })
@@ -1,169 +0,0 @@
1
- import Vue from 'vue'
2
- import Prismic from '@prismicio/client'
3
- import PrismicDOM from 'prismic-dom'
4
-
5
- import linkResolver from '../link-resolver.js'
6
- import htmlSerializer from '../html-serializer.js'
7
-
8
- export default async (context, inject) => {
9
- const { req, route, res, query, redirect, nuxtState, base } = context
10
- let options = {}
11
-
12
- // Pass through server requests, primarily for preview
13
- if (process.server) {
14
- options.req = req
15
- }
16
-
17
- let api = {}
18
- try {
19
- <% if (options.modern) { %>
20
- api = Prismic.client('<%= options.endpoint %>', Object.assign({}, options, <%= JSON.stringify(options.apiOptions) %>))
21
- <% } else { %>
22
- api = await Prismic.api('<%= options.endpoint %>', Object.assign({}, options, <%= JSON.stringify(options.apiOptions) %>))
23
- <% } %>
24
- } catch (error) {
25
- console.error(error)
26
- console.error("Failed to init Prismic API, preventing app fatal error.")
27
- }
28
-
29
- let prismic = new Vue({
30
- computed: {
31
- api() {
32
- return api
33
- },
34
- apiEndpoint() {
35
- return '<%= options.endpoint %>'
36
- },
37
- predicate() {
38
- return Prismic.Predicates
39
- },
40
- predicates() {
41
- return Prismic.Predicates
42
- },
43
- dom() {
44
- return PrismicDOM
45
- }
46
- },
47
- methods: {
48
- asHTML(richText) {
49
- return this.asHtml(richText)
50
- },
51
- asHtml(richText) {
52
- if (richText) {
53
- return PrismicDOM.RichText.asHtml(
54
- richText,
55
- linkResolver,
56
- htmlSerializer
57
- )
58
- }
59
- },
60
- asText(richText) {
61
- if (richText) {
62
- return PrismicDOM.RichText.asText(richText)
63
- }
64
- },
65
- asLink(link) {
66
- if (link) {
67
- return PrismicDOM.Link.url(
68
- link,
69
- linkResolver
70
- )
71
- }
72
- },
73
- asDate(date) {
74
- if (date) {
75
- return PrismicDOM.Date(date)
76
- }
77
- },
78
- <% if (options.preview) { %>
79
- async preview() {
80
- let url = '/'
81
- const { token, documentId } = query
82
-
83
- if (token) {
84
- const previewResolver = await this.api.getPreviewResolver(token, documentId)
85
- const maybeUrl = await previewResolver.resolve(this.linkResolver, '/')
86
- if (maybeUrl) {
87
- url = maybeUrl
88
- }
89
- }
90
- if (process.server) {
91
- redirect(302, url)
92
- } else {
93
- // Add the base path onto the url to preview
94
- url = `${base.replace(/\/$/, '')}${url}`
95
-
96
- window.location.replace(url)
97
- }
98
- },<% } %>
99
- ...(linkResolver && { linkResolver }),
100
- ...(htmlSerializer && { htmlSerializer })
101
- }
102
- })
103
-
104
- inject('prismic', prismic)
105
- context.$prismic = prismic
106
-
107
- <% if (options.preview) { %>
108
- // Load prismic script after Nuxt app is mounted
109
- if (process.client) {
110
- window.<%= globals.readyCallback %> && window.<%= globals.readyCallback %>((app) => {
111
- const script = document.createElement('script')
112
-
113
- script.src = '<%= options.script %>'
114
- document.body.appendChild(script)
115
-
116
- <% if (options.previewReloadType === 'hot') { %>
117
- window.addEventListener('prismicPreviewUpdate', async (event) => {
118
- if (app && 'refresh' in app && typeof app.refresh === 'function') {
119
- event.preventDefault();
120
- if (app.$store && app.$store._actions.nuxtServerInit) {
121
- await app.$store.dispatch('nuxtServerInit', app.$options.context)
122
- }
123
- await app.refresh();
124
- }
125
- });
126
- <% } %>
127
- })
128
- }
129
- // Preview mode
130
- if (process.server && !process.static && route.path === '<%= options.preview %>') {
131
- // Server side
132
- await prismic.preview()
133
- }
134
- if (process.client && process.static && route.path !== '<%= options.preview %>') {
135
- // Client side
136
- const getPreviewCookie = function () {
137
- var value = `; ${document.cookie}`
138
- var parts = value.split(`; ${Prismic.previewCookie}=`)
139
- if (parts.length !== 2) return null
140
- let cookie = parts.pop().split(';').shift()
141
- try {
142
- cookie = JSON.parse(decodeURIComponent(cookie))
143
- } catch (e) {
144
- cookie = null
145
- }
146
- return cookie
147
- }
148
- const repo = '<%= options.repo %>'
149
- const previewCookie = getPreviewCookie()
150
- // Used in prismic_preview middleware
151
- prismic.isPreview = previewCookie && previewCookie[`${repo}.prismic.io`] && previewCookie[`${repo}.prismic.io`].preview
152
-
153
- // Refresh data from Prismic preview
154
- if (prismic.isPreview) {
155
- console.info('[@nuxtjs/prismic] Reload page data for preview')
156
- if (context.enablePreview) {
157
- context.enablePreview()
158
- } else {
159
- // Legacy static preview
160
- window.<%= globals.readyCallback %>(async (app) => {
161
- if (app.$store && app.$store._actions.nuxtServerInit) {
162
- await app.$store.dispatch('nuxtServerInit', app.$options.context)
163
- }
164
- await app.refresh()
165
- })
166
- }
167
- }
168
- }<% } %>
169
- }