@nuxtjs/prismic 3.0.0-alpha.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/dist/module.d.ts CHANGED
@@ -1,10 +1,13 @@
1
1
  import * as _nuxt_schema from '@nuxt/schema';
2
2
  import { PrismicPluginOptions } from '@prismicio/vue';
3
3
 
4
- declare type PrismicModuleOptions = PrismicPluginOptions & {
4
+ declare type PrismicModuleOptions = Omit<PrismicPluginOptions, 'endpoint' | 'client' | 'linkResolver'> & {
5
+ endpoint: string;
6
+ client?: string;
7
+ linkResolver?: string;
5
8
  preview?: string | false;
6
9
  };
7
10
 
8
11
  declare const _default: _nuxt_schema.NuxtModule<PrismicModuleOptions>;
9
12
 
10
- export { _default as default };
13
+ export { PrismicModuleOptions as ModuleOptions, PrismicModuleOptions, _default as default };
package/dist/module.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuxtjs/prismic",
3
- "version": "3.0.0-alpha.1",
3
+ "version": "3.0.0-alpha.2",
4
4
  "configKey": "prismic",
5
5
  "compatibility": {
6
6
  "nuxt": "^3.0.0"
package/dist/module.mjs CHANGED
@@ -1,11 +1,23 @@
1
1
  import { join } from 'path';
2
- import { existsSync } from 'fs';
3
- import { defineNuxtModule, createResolver, addPlugin, addComponent, addAutoImport, extendPages } from '@nuxt/kit';
2
+ import { defineNuxtModule, createResolver, addPlugin, addComponent, addAutoImport, extendPages, addTemplate } from '@nuxt/kit';
3
+ import { cleanDoubleSlashes } from 'ufo';
4
+ import { isRepositoryEndpoint, getRepositoryName } from '@prismicio/client';
4
5
  import * as prismicVue from '@prismicio/vue';
6
+ import { existsSync } from 'fs';
5
7
  import consola from 'consola';
6
8
 
7
9
  const name = "@nuxtjs/prismic";
8
- const version = "3.0.0-alpha.1";
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
+ };
9
21
 
10
22
  const logger = consola.withScope("nuxt:prismic");
11
23
 
@@ -16,26 +28,44 @@ const module = defineNuxtModule({
16
28
  configKey: "prismic",
17
29
  compatibility: { nuxt: "^3.0.0" }
18
30
  },
19
- defaults: {
31
+ defaults: (nuxt) => ({
20
32
  endpoint: "",
21
33
  clientConfig: {},
22
- linkResolver: void 0,
34
+ client: cleanDoubleSlashes(`~/${nuxt.options.dir.app}/prismic/client`),
35
+ linkResolver: cleanDoubleSlashes(`~/${nuxt.options.dir.app}/prismic/linkResolver`),
23
36
  htmlSerializer: void 0,
24
37
  injectComponents: true,
25
- components: {
26
- linkInternalComponent: "nuxt-link"
27
- },
38
+ components: {},
28
39
  preview: "/preview"
29
- },
40
+ }),
30
41
  hooks: {},
31
42
  setup(mergedOptions, nuxt) {
32
43
  var _a, _b, _c;
33
- if (!mergedOptions.client && !mergedOptions.endpoint) {
34
- logger.warn("Options `endpoint` or `client` are required, disabling module...");
44
+ if (!mergedOptions.endpoint) {
45
+ logger.warn("Options `endpoint` is required, disabling module...");
35
46
  return;
36
47
  }
37
48
  const resolver = createResolver(import.meta.url);
38
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);
39
69
  (_a = nuxt.options).publicRuntimeConfig || (_a.publicRuntimeConfig = {});
40
70
  nuxt.options.publicRuntimeConfig[name] = mergedOptions;
41
71
  addPlugin(resolver.resolve("runtime/plugin"));
@@ -64,9 +94,9 @@ const module = defineNuxtModule({
64
94
  });
65
95
  addAutoImport(composableAutoImports);
66
96
  if (mergedOptions.preview) {
67
- const userPreviewPagePath = join(nuxt.options.srcDir, nuxt.options.dir.pages, `${mergedOptions.preview}.vue`);
68
- if (existsSync(userPreviewPagePath)) {
69
- logger.info(`Using user-defined preview page at \`${userPreviewPagePath.replace(join(nuxt.options.rootDir), "~~").replace(/\\/g, "/")}\`, available at \`${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}\``);
70
100
  } else {
71
101
  logger.info(`Using default preview page, available at \`${mergedOptions.preview}\``);
72
102
  extendPages((pages) => {
@@ -77,16 +107,7 @@ const module = defineNuxtModule({
77
107
  });
78
108
  });
79
109
  }
80
- let repositoryName = "";
81
- if (mergedOptions.client) {
82
- repositoryName = new URL(mergedOptions.client.endpoint).host.split(".")[0];
83
- } else {
84
- try {
85
- repositoryName = new URL(mergedOptions.endpoint).host.split(".")[0];
86
- } catch (error) {
87
- repositoryName = mergedOptions.endpoint;
88
- }
89
- }
110
+ const repositoryName = isRepositoryEndpoint(mergedOptions.endpoint) ? getRepositoryName(mergedOptions.endpoint) : mergedOptions.endpoint;
90
111
  (_b = nuxt.options).meta || (_b.meta = {});
91
112
  (_c = nuxt.options.meta).script || (_c.script = []);
92
113
  nuxt.options.meta.script.push({
@@ -1,10 +1,20 @@
1
1
  import { defineNuxtPlugin } from "#app";
2
+ import NuxtLink from "#app/components/nuxt-link";
2
3
  import { createPrismic } from "@prismicio/vue";
3
4
  import { name as pkgName } from "../../package.json";
5
+ import linkResolver from "#build/prismic/linkResolver";
6
+ import client from "#build/prismic/client";
4
7
  export default defineNuxtPlugin((nuxtApp) => {
5
8
  const mergedOptions = nuxtApp.payload.config[pkgName];
6
9
  nuxtApp.vueApp.use(createPrismic({
7
10
  ...mergedOptions,
8
- injectComponents: false
11
+ client,
12
+ linkResolver,
13
+ injectComponents: false,
14
+ components: {
15
+ linkInternalComponent: NuxtLink,
16
+ linkExternalComponent: NuxtLink,
17
+ ...mergedOptions.components
18
+ }
9
19
  }));
10
20
  });
package/dist/types.d.ts CHANGED
@@ -1,6 +1,10 @@
1
1
 
2
- import { } from './module'
2
+ import { ModuleOptions } from './module'
3
3
 
4
+ declare module '@nuxt/schema' {
5
+ interface NuxtConfig { ['prismic']?: Partial<ModuleOptions> }
6
+ interface NuxtOptions { ['prismic']?: ModuleOptions }
7
+ }
4
8
 
5
9
 
6
10
  export { default } from './module'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuxtjs/prismic",
3
- "version": "3.0.0-alpha.1",
3
+ "version": "3.0.0-alpha.2",
4
4
  "description": "Easily connect your Nuxt 3 application to your content hosted on Prismic",
5
5
  "keywords": [
6
6
  "nuxt",
@@ -36,31 +36,28 @@
36
36
  "dev": "nuxi dev playground",
37
37
  "dev:build": "nuxi build playground",
38
38
  "lint": "eslint --ext .js,.ts .",
39
- "playground:build": "nuxi build playground",
40
- "playground:dev": "nuxi dev playground",
41
39
  "prepare": "nuxi prepare playground && npm run build",
42
40
  "release": "npm run build && npm run test && standard-version && git push --follow-tags && npm run build && npm publish",
43
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",
44
42
  "release:alpha:dry": "standard-version --release-as major --prerelease alpha --dry-run",
45
43
  "release:dry": "standard-version --dry-run",
46
44
  "test": "npm run lint && npm run unit",
47
- "unit": "nyc --reporter=lcovonly --reporter=text --exclude-after-remap=false ava"
45
+ "unit": "echo \"TODO: vitest & nuxt-test-utils\""
48
46
  },
49
47
  "dependencies": {
50
48
  "@nuxt/kit": "npm:@nuxt/kit-edge@latest",
49
+ "@prismicio/client": "^6.4.2",
51
50
  "@prismicio/vue": "^3.0.0-beta",
52
- "consola": "^2.15.3"
51
+ "consola": "^2.15.3",
52
+ "ufo": "^0.8.1"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@nuxt/module-builder": "latest",
56
56
  "@nuxtjs/eslint-config-typescript": "latest",
57
- "ava": "^3.15.0",
58
- "eslint": "^8.9.0",
57
+ "eslint": "^8.11.0",
59
58
  "nuxt3": "latest",
60
- "nyc": "^15.1.0",
61
59
  "standard-version": "^9.3.2",
62
- "ts-eager": "^2.0.2",
63
- "typescript": "^4.5.5"
60
+ "typescript": "^4.6.2"
64
61
  },
65
62
  "engines": {
66
63
  "node": ">=12.7.0"
package/src/module.ts CHANGED
@@ -1,13 +1,29 @@
1
1
  import { join } from 'path'
2
- import { existsSync } from 'fs'
3
- import { defineNuxtModule, createResolver, addPlugin, addAutoImport, addComponent, extendPages } from '@nuxt/kit'
4
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'
5
15
  import * as prismicVue from '@prismicio/vue'
6
16
 
7
17
  import { name as pkgName, version as pkgVersion } from '../package.json'
8
- import { PrismicModuleOptions } from './types'
18
+ import type { PrismicModuleOptions } from './types'
19
+ import { fileExists } from './utils'
9
20
  import { logger } from './logger'
10
21
 
22
+ // Options export
23
+ export type { PrismicModuleOptions } from './types'
24
+ export type { PrismicModuleOptions as ModuleOptions } from './types'
25
+
26
+ // Module export
11
27
  export default defineNuxtModule<PrismicModuleOptions>({
12
28
  meta: {
13
29
  name: pkgName,
@@ -15,21 +31,20 @@ export default defineNuxtModule<PrismicModuleOptions>({
15
31
  configKey: 'prismic',
16
32
  compatibility: { nuxt: '^3.0.0' }
17
33
  },
18
- defaults: {
34
+ defaults: nuxt => ({
19
35
  endpoint: '',
20
36
  clientConfig: {},
21
- linkResolver: undefined,
37
+ client: cleanDoubleSlashes(`~/${nuxt.options.dir.app}/prismic/client`),
38
+ linkResolver: cleanDoubleSlashes(`~/${nuxt.options.dir.app}/prismic/linkResolver`),
22
39
  htmlSerializer: undefined,
23
40
  injectComponents: true,
24
- components: {
25
- linkInternalComponent: 'nuxt-link'
26
- },
41
+ components: {},
27
42
  preview: '/preview'
28
- },
43
+ }),
29
44
  hooks: {},
30
45
  setup (mergedOptions, nuxt) {
31
- if (!mergedOptions.client && !mergedOptions.endpoint) {
32
- logger.warn('Options `endpoint` or `client` are required, disabling module...')
46
+ if (!mergedOptions.endpoint) {
47
+ logger.warn('Options `endpoint` is required, disabling module...')
33
48
  return
34
49
  }
35
50
 
@@ -37,8 +52,33 @@ export default defineNuxtModule<PrismicModuleOptions>({
37
52
  const resolver = createResolver(import.meta.url)
38
53
  nuxt.options.build.transpile.push(resolver.resolve('runtime'))
39
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
+
40
80
  // Expose options through public runtime config
41
- nuxt.options.publicRuntimeConfig ||= {}
81
+ nuxt.options.publicRuntimeConfig ||= {} as typeof nuxt.options.publicRuntimeConfig
42
82
  nuxt.options.publicRuntimeConfig[pkgName] = mergedOptions
43
83
 
44
84
  // Add plugin
@@ -77,11 +117,10 @@ export default defineNuxtModule<PrismicModuleOptions>({
77
117
 
78
118
  // Add preview route
79
119
  if (mergedOptions.preview) {
80
- const userPreviewPagePath = join(nuxt.options.srcDir, nuxt.options.dir.pages, `${mergedOptions.preview}.vue`)
120
+ const maybeUserPreviewPage = fileExists(join(nuxt.options.srcDir, nuxt.options.dir.pages, mergedOptions.preview), ['js', 'ts', 'vue'])
81
121
 
82
- if (existsSync(userPreviewPagePath)) {
83
- logger.info(`Using user-defined preview page at \`${
84
- userPreviewPagePath.replace(join(nuxt.options.rootDir), '~~').replace(/\\/g, '/')
122
+ if (maybeUserPreviewPage) {
123
+ logger.info(`Using user-defined preview page at \`${maybeUserPreviewPage.replace(join(nuxt.options.srcDir), '~').replace(/\\/g, '/')
85
124
  }\`, available at \`${mergedOptions.preview}\``)
86
125
  } else {
87
126
  logger.info(`Using default preview page, available at \`${mergedOptions.preview}\``)
@@ -95,19 +134,10 @@ export default defineNuxtModule<PrismicModuleOptions>({
95
134
  })
96
135
  }
97
136
 
98
- // TODO: Refactor with new client helpers
99
- let repositoryName = ''
100
- if (mergedOptions.client) {
101
- repositoryName = new URL(mergedOptions.client.endpoint).host.split('.')[0]
102
- } else {
103
- try {
104
- repositoryName = new URL(mergedOptions.endpoint).host.split('.')[0]
105
- } catch (error) {
106
- repositoryName = mergedOptions.endpoint
107
- }
108
- }
109
-
110
137
  // Add toolbar
138
+ const repositoryName = isRepositoryEndpoint(mergedOptions.endpoint)
139
+ ? getRepositoryName(mergedOptions.endpoint)
140
+ : mergedOptions.endpoint
111
141
  nuxt.options.meta ||= {}
112
142
  nuxt.options.meta.script ||= []
113
143
  nuxt.options.meta.script.push({
@@ -1,14 +1,26 @@
1
1
  import { defineNuxtPlugin } from '#app'
2
+ import NuxtLink from '#app/components/nuxt-link'
3
+
2
4
  import { createPrismic } from '@prismicio/vue'
3
5
 
4
6
  import { name as pkgName } from '../../package.json'
5
7
  import { PrismicModuleOptions } from '../types'
6
8
 
9
+ import linkResolver from '#build/prismic/linkResolver'
10
+ import client from '#build/prismic/client'
11
+
7
12
  export default defineNuxtPlugin((nuxtApp) => {
8
13
  const mergedOptions: PrismicModuleOptions = nuxtApp.payload.config[pkgName]
9
14
 
10
15
  nuxtApp.vueApp.use(createPrismic({
11
16
  ...mergedOptions,
12
- injectComponents: false // Handled at module level
17
+ client,
18
+ linkResolver,
19
+ injectComponents: false, // Handled at module level
20
+ components: {
21
+ linkInternalComponent: NuxtLink,
22
+ linkExternalComponent: NuxtLink,
23
+ ...mergedOptions.components
24
+ }
13
25
  }))
14
26
  })
package/src/types.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  import { PrismicPluginOptions } from '@prismicio/vue'
2
2
 
3
- export type PrismicModuleOptions = PrismicPluginOptions & {
4
- preview?: string | false
3
+ export type PrismicModuleOptions = Omit<PrismicPluginOptions, 'endpoint' | 'client' | 'linkResolver'> & {
4
+ endpoint: string,
5
+ client?: string,
6
+ linkResolver?: string,
7
+ preview?: string | false,
5
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
+ }