@preprio/toolkit 0.3.4 → 0.4.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.
package/README.md CHANGED
@@ -1,9 +1,14 @@
1
1
  # @preprio/toolkit
2
2
 
3
- > **Beta — pre-1.0.** The package is published to `latest` and is safe to use, but the
4
- > public API can still change between minor versions (`0.2.x` → `0.3.0`). Every change
5
- > is documented in [Breaking changes](https://github.com/preprio/prepr-toolkit/blob/main/RELEASING.md#breaking-changes). Pin an exact
6
- > version in production, or use a tilde range (`~0.2.0`) so you only pick up patches.
3
+ > **Stable, pre-1.0.** The core is stable and published to `latest`. The package follows
4
+ > semver: minor and patch releases never break the public API, and any breaking change
5
+ > ships as a major bump with a migration entry in
6
+ > [Breaking changes](https://github.com/preprio/prepr-toolkit/blob/main/RELEASING.md#breaking-changes).
7
+ >
8
+ > **Framework support.** The Next.js and Astro integrations are tested end to end. The
9
+ > Nuxt, SvelteKit, and vanilla wrappers share the same core but have seen less real-world
10
+ > use. If you hit a problem with any of them, please
11
+ > [open an issue](https://github.com/preprio/prepr-toolkit/issues).
7
12
 
8
13
  A framework-agnostic TypeScript library that provides preview functionality, visual editing, and A/B testing for [Prepr CMS](https://prepr.io). Ships thin wrappers for Next.js, Nuxt, Astro, and SvelteKit on top of a vanilla core that runs anywhere.
9
14
 
@@ -30,7 +30,7 @@ __export(astro_exports, {
30
30
  module.exports = __toCommonJS(astro_exports);
31
31
 
32
32
  // src/version.ts
33
- var VERSION = "0.3.4";
33
+ var VERSION = "0.4.0";
34
34
 
35
35
  // src/core/features.ts
36
36
  function isEnabled(config) {
@@ -83,7 +83,8 @@ var PREPR_HEADER_KEYS = [
83
83
  "Prepr-Visitor-IP",
84
84
  "Prepr-Hubspot-Id",
85
85
  "Prepr-Customer-Id-Created",
86
- "Prepr-User-Agent"
86
+ "Prepr-User-Agent",
87
+ "Prepr-Package"
87
88
  ];
88
89
  function getPreprHeadersFromHeaders(headers) {
89
90
  const preprHeaders = {};
@@ -60,6 +60,7 @@ interface PreprHeaders {
60
60
  readonly 'Prepr-Hubspot-Id'?: string;
61
61
  readonly 'Prepr-Customer-Id-Created'?: 'true';
62
62
  readonly 'Prepr-User-Agent'?: string;
63
+ readonly 'Prepr-Package'?: string;
63
64
  }
64
65
 
65
66
  interface PreprMiddlewareOptions {
@@ -60,6 +60,7 @@ interface PreprHeaders {
60
60
  readonly 'Prepr-Hubspot-Id'?: string;
61
61
  readonly 'Prepr-Customer-Id-Created'?: 'true';
62
62
  readonly 'Prepr-User-Agent'?: string;
63
+ readonly 'Prepr-Package'?: string;
63
64
  }
64
65
 
65
66
  interface PreprMiddlewareOptions {
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var VERSION = "0.3.4";
2
+ var VERSION = "0.4.0";
3
3
 
4
4
  // src/core/features.ts
5
5
  function isEnabled(config) {
@@ -52,7 +52,8 @@ var PREPR_HEADER_KEYS = [
52
52
  "Prepr-Visitor-IP",
53
53
  "Prepr-Hubspot-Id",
54
54
  "Prepr-Customer-Id-Created",
55
- "Prepr-User-Agent"
55
+ "Prepr-User-Agent",
56
+ "Prepr-Package"
56
57
  ];
57
58
  function getPreprHeadersFromHeaders(headers) {
58
59
  const preprHeaders = {};
@@ -1,3 +1,6 @@
1
+ // src/version.ts
2
+ var VERSION = "0.4.0";
3
+
1
4
  // src/core/features.ts
2
5
  function isEnabled(config) {
3
6
  if (typeof config === "boolean") return config;
@@ -2281,6 +2284,7 @@ function loadTrackingPixel(trackingId, config) {
2281
2284
  } else {
2282
2285
  queueFn("init", trackingId);
2283
2286
  }
2287
+ queueFn("param", "pp", VERSION);
2284
2288
  queueFn("event", "pageload");
2285
2289
  }
2286
2290
  function trackEvent(name, data) {
@@ -2303,6 +2307,7 @@ function setTrackingParam(key, value) {
2303
2307
  }
2304
2308
 
2305
2309
  export {
2310
+ VERSION,
2306
2311
  resolveFeatures,
2307
2312
  COOKIE_PREVIEW_MODE,
2308
2313
  COOKIE_SEGMENT,
package/dist/index.cjs CHANGED
@@ -44,7 +44,7 @@ __export(src_exports, {
44
44
  module.exports = __toCommonJS(src_exports);
45
45
 
46
46
  // src/version.ts
47
- var VERSION = "0.3.4";
47
+ var VERSION = "0.4.0";
48
48
 
49
49
  // src/core/features.ts
50
50
  function isEnabled(config) {
@@ -2319,7 +2319,8 @@ var PREPR_HEADER_KEYS = [
2319
2319
  "Prepr-Visitor-IP",
2320
2320
  "Prepr-Hubspot-Id",
2321
2321
  "Prepr-Customer-Id-Created",
2322
- "Prepr-User-Agent"
2322
+ "Prepr-User-Agent",
2323
+ "Prepr-Package"
2323
2324
  ];
2324
2325
  function getPreprHeadersFromHeaders(headers) {
2325
2326
  const preprHeaders = {};
@@ -2639,6 +2640,7 @@ function loadTrackingPixel(trackingId, config) {
2639
2640
  } else {
2640
2641
  queueFn("init", trackingId);
2641
2642
  }
2643
+ queueFn("param", "pp", VERSION);
2642
2644
  queueFn("event", "pageload");
2643
2645
  }
2644
2646
  function trackEvent(name, data) {
package/dist/index.d.cts CHANGED
@@ -1,11 +1,11 @@
1
- import { P as PreprFeatures, R as ResolvedPreprFeatures, L as Locale, a as PreprSegment, b as PreprVariant, c as PreprToolbarProps, d as PreprPreviewOptions, e as PreprErrorCode, f as PreprHeaders } from './pixel-B6FtY-11.cjs';
2
- export { g as PreprEnvironment, h as PreprEventType, i as PreprFeatureConfig, j as PreprHeaderName, k as PreprPixelConfig, l as PreprToolbarComponentProps, m as PreprToolbarOptions, n as loadTrackingPixel, s as setTrackingParam, t as trackEvent } from './pixel-B6FtY-11.cjs';
1
+ import { P as PreprFeatures, R as ResolvedPreprFeatures, L as Locale, a as PreprSegment, b as PreprVariant, c as PreprToolbarProps, d as PreprPreviewOptions, e as PreprErrorCode, f as PreprHeaders } from './pixel-Wsfvw9G2.cjs';
2
+ export { g as PreprEnvironment, h as PreprEventType, i as PreprFeatureConfig, j as PreprHeaderName, k as PreprPixelConfig, l as PreprToolbarComponentProps, m as PreprToolbarOptions, n as loadTrackingPixel, s as setTrackingParam, t as trackEvent } from './pixel-Wsfvw9G2.cjs';
3
3
 
4
4
  /**
5
5
  * Package version; must match package.json. Lives in its own leaf module so
6
6
  * core can import it without cycling through the barrel.
7
7
  */
8
- declare const VERSION = "0.3.4";
8
+ declare const VERSION = "0.4.0";
9
9
 
10
10
  /**
11
11
  * Resolve a `PreprFeatures` bag to plain booleans, defaulting every omitted key
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { P as PreprFeatures, R as ResolvedPreprFeatures, L as Locale, a as PreprSegment, b as PreprVariant, c as PreprToolbarProps, d as PreprPreviewOptions, e as PreprErrorCode, f as PreprHeaders } from './pixel-B6FtY-11.js';
2
- export { g as PreprEnvironment, h as PreprEventType, i as PreprFeatureConfig, j as PreprHeaderName, k as PreprPixelConfig, l as PreprToolbarComponentProps, m as PreprToolbarOptions, n as loadTrackingPixel, s as setTrackingParam, t as trackEvent } from './pixel-B6FtY-11.js';
1
+ import { P as PreprFeatures, R as ResolvedPreprFeatures, L as Locale, a as PreprSegment, b as PreprVariant, c as PreprToolbarProps, d as PreprPreviewOptions, e as PreprErrorCode, f as PreprHeaders } from './pixel-Wsfvw9G2.js';
2
+ export { g as PreprEnvironment, h as PreprEventType, i as PreprFeatureConfig, j as PreprHeaderName, k as PreprPixelConfig, l as PreprToolbarComponentProps, m as PreprToolbarOptions, n as loadTrackingPixel, s as setTrackingParam, t as trackEvent } from './pixel-Wsfvw9G2.js';
3
3
 
4
4
  /**
5
5
  * Package version; must match package.json. Lives in its own leaf module so
6
6
  * core can import it without cycling through the barrel.
7
7
  */
8
- declare const VERSION = "0.3.4";
8
+ declare const VERSION = "0.4.0";
9
9
 
10
10
  /**
11
11
  * Resolve a `PreprFeatures` bag to plain booleans, defaulting every omitted key
package/dist/index.js CHANGED
@@ -9,6 +9,7 @@ import {
9
9
  PARAM_SEGMENT,
10
10
  PARAM_VARIANT,
11
11
  PreprToolbarElement,
12
+ VERSION,
12
13
  createPreprPreview,
13
14
  createToolbarStore,
14
15
  definePreprToolbar,
@@ -17,10 +18,7 @@ import {
17
18
  setTrackingParam,
18
19
  stegaClean,
19
20
  trackEvent
20
- } from "./chunk-HXQ6JUZM.js";
21
-
22
- // src/version.ts
23
- var VERSION = "0.3.4";
21
+ } from "./chunk-XFRVWN3C.js";
24
22
 
25
23
  // src/core/server.ts
26
24
  var PreprError = class extends Error {
@@ -55,7 +53,8 @@ var PREPR_HEADER_KEYS = [
55
53
  "Prepr-Visitor-IP",
56
54
  "Prepr-Hubspot-Id",
57
55
  "Prepr-Customer-Id-Created",
58
- "Prepr-User-Agent"
56
+ "Prepr-User-Agent",
57
+ "Prepr-Package"
59
58
  ];
60
59
  function getPreprHeadersFromHeaders(headers) {
61
60
  const preprHeaders = {};
@@ -2265,6 +2265,9 @@ function createPreprPreview(opts = {}) {
2265
2265
  // src/react/components.ts
2266
2266
  var import_react = require("react");
2267
2267
 
2268
+ // src/version.ts
2269
+ var VERSION = "0.4.0";
2270
+
2268
2271
  // src/core/pixel.ts
2269
2272
  var PIXEL_SCRIPT_URL = "https://cdn.tracking.prepr.io/js/prepr.min.js";
2270
2273
  var CACHE_BUST_INTERVAL_MS = 24 * 60 * 60 * 1e3;
@@ -2300,6 +2303,7 @@ function loadTrackingPixel(trackingId, config) {
2300
2303
  } else {
2301
2304
  queueFn("init", trackingId);
2302
2305
  }
2306
+ queueFn("param", "pp", VERSION);
2303
2307
  queueFn("event", "pageload");
2304
2308
  }
2305
2309
 
@@ -1,4 +1,4 @@
1
- import { k as PreprPixelConfig, l as PreprToolbarComponentProps } from '../pixel-B6FtY-11.cjs';
1
+ import { k as PreprPixelConfig, l as PreprToolbarComponentProps } from '../pixel-Wsfvw9G2.cjs';
2
2
 
3
3
  interface PreprTrackingPixelProps {
4
4
  /** Prepr tracking/access token. */
@@ -1,4 +1,4 @@
1
- import { k as PreprPixelConfig, l as PreprToolbarComponentProps } from '../pixel-B6FtY-11.js';
1
+ import { k as PreprPixelConfig, l as PreprToolbarComponentProps } from '../pixel-Wsfvw9G2.js';
2
2
 
3
3
  interface PreprTrackingPixelProps {
4
4
  /** Prepr tracking/access token. */
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  createPreprPreview,
4
4
  loadTrackingPixel
5
- } from "../chunk-HXQ6JUZM.js";
5
+ } from "../chunk-XFRVWN3C.js";
6
6
 
7
7
  // src/nextjs/components.ts
8
8
  import { usePathname, useRouter } from "next/navigation";
@@ -38,7 +38,7 @@ module.exports = __toCommonJS(nextjs_exports);
38
38
  var import_server = require("next/server");
39
39
 
40
40
  // src/version.ts
41
- var VERSION = "0.3.4";
41
+ var VERSION = "0.4.0";
42
42
 
43
43
  // src/core/constants.ts
44
44
  var COOKIE_PREVIEW_MODE = "Prepr-Preview-Mode";
@@ -297,7 +297,8 @@ var PREPR_HEADER_KEYS = [
297
297
  "Prepr-Visitor-IP",
298
298
  "Prepr-Hubspot-Id",
299
299
  "Prepr-Customer-Id-Created",
300
- "Prepr-User-Agent"
300
+ "Prepr-User-Agent",
301
+ "Prepr-Package"
301
302
  ];
302
303
  function getPreprHeadersFromHeaders(headers2) {
303
304
  const preprHeaders = {};
@@ -120,6 +120,7 @@ interface PreprHeaders {
120
120
  readonly 'Prepr-Hubspot-Id'?: string;
121
121
  readonly 'Prepr-Customer-Id-Created'?: 'true';
122
122
  readonly 'Prepr-User-Agent'?: string;
123
+ readonly 'Prepr-Package'?: string;
123
124
  }
124
125
  type PreprErrorCode = 'INVALID_TOKEN' | 'MISSING_TOKEN' | 'HTTP_ERROR' | 'FETCH_ERROR' | 'INVALID_RESPONSE' | 'CONTEXT_ERROR';
125
126
 
@@ -120,6 +120,7 @@ interface PreprHeaders {
120
120
  readonly 'Prepr-Hubspot-Id'?: string;
121
121
  readonly 'Prepr-Customer-Id-Created'?: 'true';
122
122
  readonly 'Prepr-User-Agent'?: string;
123
+ readonly 'Prepr-Package'?: string;
123
124
  }
124
125
  type PreprErrorCode = 'INVALID_TOKEN' | 'MISSING_TOKEN' | 'HTTP_ERROR' | 'FETCH_ERROR' | 'INVALID_RESPONSE' | 'CONTEXT_ERROR';
125
126
 
@@ -2,7 +2,7 @@
2
2
  import { NextResponse } from "next/server";
3
3
 
4
4
  // src/version.ts
5
- var VERSION = "0.3.4";
5
+ var VERSION = "0.4.0";
6
6
 
7
7
  // src/core/constants.ts
8
8
  var COOKIE_PREVIEW_MODE = "Prepr-Preview-Mode";
@@ -261,7 +261,8 @@ var PREPR_HEADER_KEYS = [
261
261
  "Prepr-Visitor-IP",
262
262
  "Prepr-Hubspot-Id",
263
263
  "Prepr-Customer-Id-Created",
264
- "Prepr-User-Agent"
264
+ "Prepr-User-Agent",
265
+ "Prepr-Package"
265
266
  ];
266
267
  function getPreprHeadersFromHeaders(headers2) {
267
268
  const preprHeaders = {};
@@ -35,7 +35,7 @@ __export(nuxt_exports, {
35
35
  module.exports = __toCommonJS(nuxt_exports);
36
36
 
37
37
  // src/version.ts
38
- var VERSION = "0.3.4";
38
+ var VERSION = "0.4.0";
39
39
 
40
40
  // src/core/constants.ts
41
41
  var COOKIE_PREVIEW_MODE = "Prepr-Preview-Mode";
@@ -295,7 +295,8 @@ var PREPR_HEADER_KEYS = [
295
295
  "Prepr-Visitor-IP",
296
296
  "Prepr-Hubspot-Id",
297
297
  "Prepr-Customer-Id-Created",
298
- "Prepr-User-Agent"
298
+ "Prepr-User-Agent",
299
+ "Prepr-Package"
299
300
  ];
300
301
  function getPreprHeadersFromHeaders(headers) {
301
302
  const preprHeaders = {};
@@ -60,6 +60,7 @@ interface PreprHeaders {
60
60
  readonly 'Prepr-Hubspot-Id'?: string;
61
61
  readonly 'Prepr-Customer-Id-Created'?: 'true';
62
62
  readonly 'Prepr-User-Agent'?: string;
63
+ readonly 'Prepr-Package'?: string;
63
64
  }
64
65
  type PreprErrorCode = 'INVALID_TOKEN' | 'MISSING_TOKEN' | 'HTTP_ERROR' | 'FETCH_ERROR' | 'INVALID_RESPONSE' | 'CONTEXT_ERROR';
65
66
 
@@ -60,6 +60,7 @@ interface PreprHeaders {
60
60
  readonly 'Prepr-Hubspot-Id'?: string;
61
61
  readonly 'Prepr-Customer-Id-Created'?: 'true';
62
62
  readonly 'Prepr-User-Agent'?: string;
63
+ readonly 'Prepr-Package'?: string;
63
64
  }
64
65
  type PreprErrorCode = 'INVALID_TOKEN' | 'MISSING_TOKEN' | 'HTTP_ERROR' | 'FETCH_ERROR' | 'INVALID_RESPONSE' | 'CONTEXT_ERROR';
65
66
 
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var VERSION = "0.3.4";
2
+ var VERSION = "0.4.0";
3
3
 
4
4
  // src/core/constants.ts
5
5
  var COOKIE_PREVIEW_MODE = "Prepr-Preview-Mode";
@@ -259,7 +259,8 @@ var PREPR_HEADER_KEYS = [
259
259
  "Prepr-Visitor-IP",
260
260
  "Prepr-Hubspot-Id",
261
261
  "Prepr-Customer-Id-Created",
262
- "Prepr-User-Agent"
262
+ "Prepr-User-Agent",
263
+ "Prepr-Package"
263
264
  ];
264
265
  function getPreprHeadersFromHeaders(headers) {
265
266
  const preprHeaders = {};
@@ -127,6 +127,7 @@ interface PreprHeaders {
127
127
  readonly 'Prepr-Hubspot-Id'?: string;
128
128
  readonly 'Prepr-Customer-Id-Created'?: 'true';
129
129
  readonly 'Prepr-User-Agent'?: string;
130
+ readonly 'Prepr-Package'?: string;
130
131
  }
131
132
  type PreprErrorCode = 'INVALID_TOKEN' | 'MISSING_TOKEN' | 'HTTP_ERROR' | 'FETCH_ERROR' | 'INVALID_RESPONSE' | 'CONTEXT_ERROR';
132
133
 
@@ -127,6 +127,7 @@ interface PreprHeaders {
127
127
  readonly 'Prepr-Hubspot-Id'?: string;
128
128
  readonly 'Prepr-Customer-Id-Created'?: 'true';
129
129
  readonly 'Prepr-User-Agent'?: string;
130
+ readonly 'Prepr-Package'?: string;
130
131
  }
131
132
  type PreprErrorCode = 'INVALID_TOKEN' | 'MISSING_TOKEN' | 'HTTP_ERROR' | 'FETCH_ERROR' | 'INVALID_RESPONSE' | 'CONTEXT_ERROR';
132
133
 
@@ -2261,6 +2261,9 @@ function createPreprPreview(opts = {}) {
2261
2261
  return controller;
2262
2262
  }
2263
2263
 
2264
+ // src/version.ts
2265
+ var VERSION = "0.4.0";
2266
+
2264
2267
  // src/core/pixel.ts
2265
2268
  var PIXEL_SCRIPT_URL = "https://cdn.tracking.prepr.io/js/prepr.min.js";
2266
2269
  var CACHE_BUST_INTERVAL_MS = 24 * 60 * 60 * 1e3;
@@ -2296,6 +2299,7 @@ function loadTrackingPixel(trackingId, config) {
2296
2299
  } else {
2297
2300
  queueFn("init", trackingId);
2298
2301
  }
2302
+ queueFn("param", "pp", VERSION);
2299
2303
  queueFn("event", "pageload");
2300
2304
  }
2301
2305
 
@@ -2237,6 +2237,9 @@ function createPreprPreview(opts = {}) {
2237
2237
  return controller;
2238
2238
  }
2239
2239
 
2240
+ // src/version.ts
2241
+ var VERSION = "0.4.0";
2242
+
2240
2243
  // src/core/pixel.ts
2241
2244
  var PIXEL_SCRIPT_URL = "https://cdn.tracking.prepr.io/js/prepr.min.js";
2242
2245
  var CACHE_BUST_INTERVAL_MS = 24 * 60 * 60 * 1e3;
@@ -2272,6 +2275,7 @@ function loadTrackingPixel(trackingId, config) {
2272
2275
  } else {
2273
2276
  queueFn("init", trackingId);
2274
2277
  }
2278
+ queueFn("param", "pp", VERSION);
2275
2279
  queueFn("event", "pageload");
2276
2280
  }
2277
2281
 
@@ -35,7 +35,7 @@ __export(sveltekit_exports, {
35
35
  module.exports = __toCommonJS(sveltekit_exports);
36
36
 
37
37
  // src/version.ts
38
- var VERSION = "0.3.4";
38
+ var VERSION = "0.4.0";
39
39
 
40
40
  // src/core/constants.ts
41
41
  var COOKIE_PREVIEW_MODE = "Prepr-Preview-Mode";
@@ -291,7 +291,8 @@ var PREPR_HEADER_KEYS = [
291
291
  "Prepr-Visitor-IP",
292
292
  "Prepr-Hubspot-Id",
293
293
  "Prepr-Customer-Id-Created",
294
- "Prepr-User-Agent"
294
+ "Prepr-User-Agent",
295
+ "Prepr-Package"
295
296
  ];
296
297
  function getPreprHeadersFromHeaders(headers) {
297
298
  const preprHeaders = {};
@@ -60,6 +60,7 @@ interface PreprHeaders {
60
60
  readonly 'Prepr-Hubspot-Id'?: string;
61
61
  readonly 'Prepr-Customer-Id-Created'?: 'true';
62
62
  readonly 'Prepr-User-Agent'?: string;
63
+ readonly 'Prepr-Package'?: string;
63
64
  }
64
65
  type PreprErrorCode = 'INVALID_TOKEN' | 'MISSING_TOKEN' | 'HTTP_ERROR' | 'FETCH_ERROR' | 'INVALID_RESPONSE' | 'CONTEXT_ERROR';
65
66
 
@@ -60,6 +60,7 @@ interface PreprHeaders {
60
60
  readonly 'Prepr-Hubspot-Id'?: string;
61
61
  readonly 'Prepr-Customer-Id-Created'?: 'true';
62
62
  readonly 'Prepr-User-Agent'?: string;
63
+ readonly 'Prepr-Package'?: string;
63
64
  }
64
65
  type PreprErrorCode = 'INVALID_TOKEN' | 'MISSING_TOKEN' | 'HTTP_ERROR' | 'FETCH_ERROR' | 'INVALID_RESPONSE' | 'CONTEXT_ERROR';
65
66
 
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var VERSION = "0.3.4";
2
+ var VERSION = "0.4.0";
3
3
 
4
4
  // src/core/constants.ts
5
5
  var COOKIE_PREVIEW_MODE = "Prepr-Preview-Mode";
@@ -255,7 +255,8 @@ var PREPR_HEADER_KEYS = [
255
255
  "Prepr-Visitor-IP",
256
256
  "Prepr-Hubspot-Id",
257
257
  "Prepr-Customer-Id-Created",
258
- "Prepr-User-Agent"
258
+ "Prepr-User-Agent",
259
+ "Prepr-Package"
259
260
  ];
260
261
  function getPreprHeadersFromHeaders(headers) {
261
262
  const preprHeaders = {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@preprio/toolkit",
3
- "version": "0.3.4",
3
+ "version": "0.4.0",
4
4
  "description": "Prepr personalization, A/B testing and preview toolkit for React, Next.js, Nuxt, Astro, SvelteKit and Express",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Prepr B.V. (https://prepr.io)",