@prismicio/vue 2.0.10 → 2.1.0

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.
@@ -1,28 +1,17 @@
1
- import PrismicDom, { RichText } from 'prismic-dom';
2
-
3
- function _defineProperty(obj, key, value) {
4
- if (key in obj) {
5
- Object.defineProperty(obj, key, {
6
- value: value,
7
- enumerable: true,
8
- configurable: true,
9
- writable: true
10
- });
11
- } else {
12
- obj[key] = value;
13
- }
14
-
15
- return obj;
16
- }
1
+ import PrismicDom, { RichText as RichText$1 } from 'prismic-dom';
17
2
 
18
3
  function ownKeys(object, enumerableOnly) {
19
4
  var keys = Object.keys(object);
20
5
 
21
6
  if (Object.getOwnPropertySymbols) {
22
7
  var symbols = Object.getOwnPropertySymbols(object);
23
- if (enumerableOnly) symbols = symbols.filter(function (sym) {
24
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
25
- });
8
+
9
+ if (enumerableOnly) {
10
+ symbols = symbols.filter(function (sym) {
11
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
12
+ });
13
+ }
14
+
26
15
  keys.push.apply(keys, symbols);
27
16
  }
28
17
 
@@ -49,6 +38,21 @@ function _objectSpread2(target) {
49
38
  return target;
50
39
  }
51
40
 
41
+ function _defineProperty(obj, key, value) {
42
+ if (key in obj) {
43
+ Object.defineProperty(obj, key, {
44
+ value: value,
45
+ enumerable: true,
46
+ configurable: true,
47
+ writable: true
48
+ });
49
+ } else {
50
+ obj[key] = value;
51
+ }
52
+
53
+ return obj;
54
+ }
55
+
52
56
  var Embed = {
53
57
  name: 'PrismicEmbed',
54
58
  functional: true,
@@ -107,10 +111,15 @@ var Image = {
107
111
  render: function render(h, _ref) {
108
112
  var props = _ref.props,
109
113
  data = _ref.data;
110
- var _props$field = props.field,
111
- url = _props$field.url,
112
- alt = _props$field.alt,
113
- copyright = _props$field.copyright;
114
+ var field = props.field;
115
+
116
+ if (!field) {
117
+ return null;
118
+ }
119
+
120
+ var url = field.url,
121
+ alt = field.alt,
122
+ copyright = field.copyright;
114
123
  return h('img', Object.assign(data, {
115
124
  attrs: _objectSpread2(_objectSpread2({}, data.attrs), {}, {
116
125
  src: url,
@@ -121,11 +130,24 @@ var Image = {
121
130
  }
122
131
  };
123
132
 
133
+ var isInternalURL = function isInternalURL(url) {
134
+ /**
135
+ * @see Regex101 expression: {@link https://regex101.com/r/1y7iod/1}
136
+ */
137
+ var isInternal = /^\/(?!\/)/.test(url);
138
+ /**
139
+ * @see Regex101 expression: {@link https://regex101.com/r/RnUseS/1}
140
+ */
141
+
142
+ var isSpecialLink = !isInternal && !/^https?:\/\//i.test(url);
143
+ return isInternal && !isSpecialLink;
144
+ };
145
+
124
146
  var Link = (function (_ref) {
125
147
  var _ref$component = _ref.component,
126
- component = _ref$component === void 0 ? 'a' : _ref$component;
148
+ component = _ref$component === void 0 ? "a" : _ref$component;
127
149
  return {
128
- name: 'PrismicLink',
150
+ name: "PrismicLink",
129
151
  functional: true,
130
152
  props: {
131
153
  field: {
@@ -134,10 +156,22 @@ var Link = (function (_ref) {
134
156
  },
135
157
  linkResolver: {
136
158
  type: Function,
137
- required: false,
138
- "default": function _default() {
139
- return null;
140
- }
159
+ required: false
160
+ },
161
+ target: {
162
+ type: String,
163
+ "default": undefined,
164
+ required: false
165
+ },
166
+ rel: {
167
+ type: String,
168
+ "default": undefined,
169
+ required: false
170
+ },
171
+ blankTargetRelAttribute: {
172
+ type: String,
173
+ "default": "noopener noreferrer",
174
+ required: false
141
175
  }
142
176
  },
143
177
  render: function render(h, _ref2) {
@@ -152,9 +186,11 @@ var Link = (function (_ref) {
152
186
  return null;
153
187
  }
154
188
 
155
- var url = parent.$prismic ? parent.$prismic.asLink(field, linkResolver) : PrismicDom.Link.url(field, linkResolver);
189
+ var url = parent.$prismic ? parent.$prismic.asLink(field, linkResolver) : PrismicDom.Link.url(field, linkResolver || function () {
190
+ return null;
191
+ });
156
192
 
157
- if (url.indexOf('/') === 0) {
193
+ if (isInternalURL(url) && !props.target) {
158
194
  data.props = data.props || {};
159
195
  data.props.to = url;
160
196
  return h(component, data, children);
@@ -162,23 +198,37 @@ var Link = (function (_ref) {
162
198
 
163
199
  data.attrs = _objectSpread2(_objectSpread2({}, data.attrs), {}, {
164
200
  href: url
165
- }, field.target && {
166
- target: field.target,
167
- rel: 'noopener'
168
201
  });
169
- return h('a', data, children);
202
+
203
+ if (typeof props.target !== "undefined") {
204
+ data.attrs.target = props.target;
205
+ } else if (field.target) {
206
+ data.attrs.target = field.target;
207
+ }
208
+
209
+ if (typeof props.rel !== "undefined") {
210
+ data.attrs.rel = props.rel;
211
+ } else if (data.attrs.target === "_blank") {
212
+ data.attrs.rel = props.blankTargetRelAttribute;
213
+ }
214
+
215
+ return h("a", data, children);
170
216
  }
171
217
  };
172
218
  });
173
219
 
174
- var RichText$1 = {
175
- name: 'PrismicRichText',
220
+ var RichText = {
221
+ name: "PrismicRichText",
176
222
  functional: true,
177
223
  props: {
178
224
  field: {
179
225
  type: Array,
180
226
  required: true
181
227
  },
228
+ linkResolver: {
229
+ type: Function,
230
+ required: false
231
+ },
182
232
  htmlSerializer: {
183
233
  type: Function,
184
234
  required: false
@@ -186,15 +236,15 @@ var RichText$1 = {
186
236
  wrapper: {
187
237
  type: String,
188
238
  required: false,
189
- "default": 'div'
239
+ "default": "div"
190
240
  }
191
241
  },
192
242
  render: function render(h, _ref) {
193
243
  var props = _ref.props,
194
244
  data = _ref.data,
195
- children = _ref.children,
196
245
  parent = _ref.parent;
197
246
  var field = props.field,
247
+ linkResolver = props.linkResolver,
198
248
  htmlSerializer = props.htmlSerializer,
199
249
  wrapper = props.wrapper;
200
250
 
@@ -202,7 +252,48 @@ var RichText$1 = {
202
252
  return null;
203
253
  }
204
254
 
205
- var innerHTML = RichText.asHtml(field, parent.$prismic.linkResolver, htmlSerializer || parent.$prismic.htmlSerializer);
255
+ var innerHTML = RichText$1.asHtml(field, linkResolver ? linkResolver : parent.$prismic ? parent.$prismic.linkResolver : undefined, htmlSerializer ? htmlSerializer : parent.$prismic ? parent.$prismic.htmlSerializer : undefined);
256
+ return h(wrapper, _objectSpread2(_objectSpread2({}, data), {}, {
257
+ domProps: {
258
+ innerHTML: innerHTML
259
+ }
260
+ }));
261
+ }
262
+ };
263
+
264
+ var Text = {
265
+ name: "PrismicText",
266
+ functional: true,
267
+ props: {
268
+ field: {
269
+ type: Array,
270
+ required: true
271
+ },
272
+ separator: {
273
+ type: String,
274
+ "default": undefined,
275
+ required: false
276
+ },
277
+ wrapper: {
278
+ type: String,
279
+ required: false,
280
+ "default": "div"
281
+ }
282
+ },
283
+ render: function render(h, _ref) {
284
+ var props = _ref.props,
285
+ data = _ref.data;
286
+ _ref.children;
287
+ _ref.parent;
288
+ var field = props.field,
289
+ separator = props.separator,
290
+ wrapper = props.wrapper;
291
+
292
+ if (!field) {
293
+ return null;
294
+ }
295
+
296
+ var innerHTML = RichText$1.asText(field, separator);
206
297
  return h(wrapper, _objectSpread2(_objectSpread2({}, data), {}, {
207
298
  domProps: {
208
299
  innerHTML: innerHTML
@@ -211,17 +302,161 @@ var RichText$1 = {
211
302
  }
212
303
  };
213
304
 
305
+ // We need to polyfill process if it doesn't exist, such as in the browser.
306
+ if (typeof process === "undefined") {
307
+ globalThis.process = {
308
+ env: {}
309
+ };
310
+ }
311
+ /**
312
+ * `true` if in the production environment, `false` otherwise.
313
+ *
314
+ * This boolean can be used to perform actions only in development environments,
315
+ * such as logging.
316
+ */
317
+
318
+
319
+ var __PRODUCTION__ = process.env.NODE_ENV === "production";
320
+
321
+ var getSliceComponentProps = function getSliceComponentProps(propsHint) {
322
+ return {
323
+ slice: {
324
+ type: Object,
325
+ required: true
326
+ },
327
+ index: {
328
+ type: Number,
329
+ required: true
330
+ },
331
+ slices: {
332
+ type: Array,
333
+ required: true
334
+ },
335
+ context: {
336
+ type: null,
337
+ required: true
338
+ }
339
+ };
340
+ };
341
+ var TODOSliceComponent = __PRODUCTION__ ? null : {
342
+ name: "TODOSliceCOmponent",
343
+ functional: true,
344
+ props: getSliceComponentProps(),
345
+ render: function render(h, _ref) {
346
+ var props = _ref.props,
347
+ data = _ref.data;
348
+ console.warn("[SliceZone] Could not find a component for Slice type \"".concat(props.slice.slice_type, "\""), props.slice);
349
+ return h("section", _objectSpread2(_objectSpread2({}, data), {}, {
350
+ attrs: _objectSpread2(_objectSpread2({}, data.attrs), {}, {
351
+ "data-slice-zone-todo-component": "",
352
+ "data-slice-type": props.slice.slice_type
353
+ })
354
+ }), ["Could not find a component for Slice type \"".concat(props.slice.slice_type, "\"")]);
355
+ }
356
+ }; // Just mimiced to prevent confusion but doesn't provide any value with version 2 of this kit
357
+
358
+ var defineSliceZoneComponents = function defineSliceZoneComponents(components) {
359
+ return components;
360
+ };
361
+ var SliceZone = {
362
+ name: "SliceZone",
363
+ props: {
364
+ slices: {
365
+ type: Array,
366
+ required: true
367
+ },
368
+ components: {
369
+ type: Object,
370
+ "default": undefined,
371
+ required: false
372
+ },
373
+ resolver: {
374
+ type: Function,
375
+ "default": undefined,
376
+ required: false
377
+ },
378
+ context: {
379
+ type: null,
380
+ "default": undefined,
381
+ required: false
382
+ },
383
+ defaultComponent: {
384
+ type: Object,
385
+ "default": undefined,
386
+ required: false
387
+ },
388
+ wrapper: {
389
+ type: [String, Object, Function],
390
+ "default": "div",
391
+ required: false
392
+ }
393
+ },
394
+ computed: {
395
+ renderedSlices: function renderedSlices() {
396
+ var _this = this;
397
+
398
+ if (!this.slices) {
399
+ return null;
400
+ }
401
+
402
+ return this.slices.map(function (slice, index) {
403
+ var component = _this.components && slice.slice_type in _this.components ? _this.components[slice.slice_type] : _this.defaultComponent || TODOSliceComponent; // TODO: Remove `resolver` in v3 in favor of `components`.
404
+
405
+ if (_this.resolver) {
406
+ var resolvedComponent = _this.resolver({
407
+ slice: slice,
408
+ sliceName: slice.slice_type,
409
+ i: index
410
+ });
411
+
412
+ if (resolvedComponent) {
413
+ component = resolvedComponent;
414
+ }
415
+ }
416
+
417
+ var p = {
418
+ key: "".concat(slice.slice_type, "-").concat(index),
419
+ props: {
420
+ slice: slice,
421
+ index: index,
422
+ context: _this.context,
423
+ slices: _this.slices
424
+ }
425
+ };
426
+ return {
427
+ component: component,
428
+ p: p
429
+ };
430
+ });
431
+ }
432
+ },
433
+ render: function render(h) {
434
+ // Prevent fatal if user didn't check for field, throws `Invalid prop` warn
435
+ if (!this.slices) {
436
+ return null;
437
+ }
438
+
439
+ return h(this.wrapper, this.renderedSlices.map(function (_ref2) {
440
+ var component = _ref2.component,
441
+ p = _ref2.p;
442
+ return h(component, p);
443
+ }));
444
+ }
445
+ };
446
+
214
447
  var NuxtLink = Link({
215
- component: 'nuxt-link'
448
+ component: "nuxt-link"
216
449
  });
217
450
  var VueRouterLink = Link({
218
- component: 'router-link'
451
+ component: "router-link"
219
452
  });
220
453
  var exp = {
221
454
  common: {
222
455
  Embed: Embed,
223
456
  Image: Image,
224
- RichText: RichText$1
457
+ RichText: RichText,
458
+ Text: Text,
459
+ SliceZone: SliceZone
225
460
  },
226
461
  nuxt: {
227
462
  Link: NuxtLink
@@ -230,10 +465,12 @@ var exp = {
230
465
  Link: VueRouterLink
231
466
  }
232
467
  };
468
+ exp.common;
469
+ exp.nuxt;
470
+ exp.vueRouter;
233
471
 
234
- var common$1 = exp.common;
235
- var nuxt$1 = exp.nuxt;
236
- var vueRouter$1 = exp.vueRouter;
472
+ var common = exp.common;
473
+ var nuxt = exp.nuxt;
474
+ var vueRouter = exp.vueRouter;
237
475
 
238
- export default exp;
239
- export { common$1 as common, nuxt$1 as nuxt, vueRouter$1 as vueRouter };
476
+ export { common, exp as default, defineSliceZoneComponents, getSliceComponentProps, nuxt, vueRouter };