@refrakt-md/nuxt 0.14.2 → 0.14.4

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,10 +1,22 @@
1
- import type { SeoInput } from '@refrakt-md/transform';
2
- export type RefraktMetaInput = SeoInput;
1
+ import type { SeoInput, SeoToHtmlOptions } from '@refrakt-md/transform';
2
+ /**
3
+ * Input shape for {@link buildRefraktHead}. Combines page-level SEO input
4
+ * (title, frontmatter, per-page seo block) with site-level options
5
+ * (siteName, baseUrl, defaultImage, logo) — matching the surface every
6
+ * other adapter accepts.
7
+ */
8
+ export type RefraktMetaInput = SeoInput & SeoToHtmlOptions;
3
9
  /**
4
10
  * Build head meta configuration for use with Nuxt's useHead().
5
11
  *
6
12
  * Returns an object suitable for passing to useHead() containing
7
- * title, meta tags (OG, description), and script tags (JSON-LD).
13
+ * title, meta tags (OG, description, og:site_name), link tags
14
+ * (canonical), and script tags (JSON-LD — including WebSite and
15
+ * Organization entries when `baseUrl` + `siteName` are supplied).
16
+ *
17
+ * When site-level options are passed, the output mirrors what the
18
+ * `seoToHtml` helper emits for the other adapters, so SEO is consistent
19
+ * across the refrakt stack.
8
20
  */
9
21
  export declare function buildRefraktHead(input: RefraktMetaInput): {
10
22
  title: string;
@@ -13,6 +25,10 @@ export declare function buildRefraktHead(input: RefraktMetaInput): {
13
25
  property?: string;
14
26
  content: string;
15
27
  }>;
28
+ link: Array<{
29
+ rel: string;
30
+ href: string;
31
+ }>;
16
32
  script: Array<{
17
33
  type: string;
18
34
  children: string;
@@ -1 +1 @@
1
- {"version":3,"file":"composables.d.ts","sourceRoot":"","sources":["../src/composables.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAExC;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD,CAqCA"}
1
+ {"version":3,"file":"composables.d.ts","sourceRoot":"","sources":["../src/composables.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAExE;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAE3D;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,IAAI,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3C,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD,CA2EA"}
@@ -3,11 +3,19 @@ import { extractSeoData } from '@refrakt-md/transform';
3
3
  * Build head meta configuration for use with Nuxt's useHead().
4
4
  *
5
5
  * Returns an object suitable for passing to useHead() containing
6
- * title, meta tags (OG, description), and script tags (JSON-LD).
6
+ * title, meta tags (OG, description, og:site_name), link tags
7
+ * (canonical), and script tags (JSON-LD — including WebSite and
8
+ * Organization entries when `baseUrl` + `siteName` are supplied).
9
+ *
10
+ * When site-level options are passed, the output mirrors what the
11
+ * `seoToHtml` helper emits for the other adapters, so SEO is consistent
12
+ * across the refrakt stack.
7
13
  */
8
14
  export function buildRefraktHead(input) {
15
+ const { siteName, baseUrl, defaultImage, logo } = input;
9
16
  const data = extractSeoData(input);
10
17
  const meta = [];
18
+ const link = [];
11
19
  const script = [];
12
20
  if (data.description) {
13
21
  meta.push({ name: 'description', content: data.description });
@@ -18,23 +26,56 @@ export function buildRefraktHead(input) {
18
26
  meta.push({ property: 'og:title', content: data.title });
19
27
  meta.push({ name: 'twitter:title', content: data.title });
20
28
  }
21
- if (data.ogImage) {
22
- meta.push({ property: 'og:image', content: data.ogImage });
29
+ // OG image — per-page wins; fall back to site-level defaultImage (prefixed
30
+ // with baseUrl if defaultImage isn't already absolute).
31
+ const resolvedImage = data.ogImage ?? (defaultImage ? (baseUrl ?? '') + defaultImage : undefined);
32
+ if (resolvedImage) {
33
+ meta.push({ property: 'og:image', content: resolvedImage });
23
34
  meta.push({ name: 'twitter:card', content: 'summary_large_image' });
24
- meta.push({ name: 'twitter:image', content: data.ogImage });
35
+ meta.push({ name: 'twitter:image', content: resolvedImage });
25
36
  }
26
37
  else {
27
38
  meta.push({ name: 'twitter:card', content: 'summary' });
28
39
  }
40
+ // OG url + canonical link — absolutize against baseUrl when supplied.
29
41
  if (data.ogUrl) {
30
- meta.push({ property: 'og:url', content: data.ogUrl });
42
+ const absoluteUrl = (baseUrl ?? '') + data.ogUrl;
43
+ meta.push({ property: 'og:url', content: absoluteUrl });
44
+ link.push({ rel: 'canonical', href: absoluteUrl });
31
45
  }
32
46
  if (data.ogType) {
33
47
  meta.push({ property: 'og:type', content: data.ogType });
34
48
  }
49
+ if (siteName) {
50
+ meta.push({ property: 'og:site_name', content: siteName });
51
+ }
35
52
  for (const schema of data.jsonLd) {
36
53
  script.push({ type: 'application/ld+json', children: JSON.stringify(schema) });
37
54
  }
38
- return { title: data.title, meta, script };
55
+ // WebSite + Organization JSON-LD when baseUrl is supplied — matches
56
+ // seoToHtml's emission for the other adapters.
57
+ if (baseUrl) {
58
+ const name = siteName ?? '';
59
+ script.push({
60
+ type: 'application/ld+json',
61
+ children: JSON.stringify({
62
+ '@context': 'https://schema.org',
63
+ '@type': 'WebSite',
64
+ name,
65
+ url: baseUrl,
66
+ }),
67
+ });
68
+ const org = {
69
+ '@context': 'https://schema.org',
70
+ '@type': 'Organization',
71
+ name,
72
+ url: baseUrl,
73
+ };
74
+ if (logo) {
75
+ org.logo = baseUrl + logo;
76
+ }
77
+ script.push({ type: 'application/ld+json', children: JSON.stringify(org) });
78
+ }
79
+ return { title: data.title, meta, link, script };
39
80
  }
40
81
  //# sourceMappingURL=composables.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"composables.js","sourceRoot":"","sources":["../src/composables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKvD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAuB;IAKvD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,IAAI,GAAiE,EAAE,CAAC;IAC9E,MAAM,MAAM,GAA8C,EAAE,CAAC;IAE7D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACP,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"composables.js","sourceRoot":"","sources":["../src/composables.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":";AAOA,wBAuCG"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":";AAgBA,wBAsHG"}
package/dist/module.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { defineNuxtModule } from 'nuxt/kit';
2
- import { resolve } from 'node:path';
2
+ import { dirname, resolve } from 'node:path';
3
3
  import { CORE_PACKAGES } from '@refrakt-md/transform';
4
- import { loadRefraktConfig, resolveSite } from '@refrakt-md/transform/node';
4
+ import { loadRefraktConfig, resolveSite, createSiteTokensVitePlugin, createRunesCssVitePlugin, computeUsedCssBlocks, setupContentHmr, SITE_TOKENS_VIRTUAL_ID, RUNES_VIRTUAL_ID, } from '@refrakt-md/transform/node';
5
5
  import { getThemePackage } from '@refrakt-md/types';
6
6
  export default defineNuxtModule({
7
7
  meta: {
@@ -12,9 +12,11 @@ export default defineNuxtModule({
12
12
  configPath: './refrakt.config.json',
13
13
  },
14
14
  setup(options, nuxt) {
15
- const refraktConfig = loadRefraktConfig(options.configPath);
15
+ const configPath = options.configPath;
16
+ const refraktConfig = loadRefraktConfig(configPath);
16
17
  const { site } = resolveSite(refraktConfig, options.site);
17
18
  const themePackage = getThemePackage(site.theme);
19
+ const configDir = dirname(resolve(configPath));
18
20
  // Add packages to transpile list
19
21
  const transpile = [
20
22
  ...CORE_PACKAGES,
@@ -24,11 +26,69 @@ export default defineNuxtModule({
24
26
  ...(site.plugins ?? []),
25
27
  ];
26
28
  nuxt.options.build.transpile.push(...transpile);
29
+ // Inject tree-shaken runes CSS + site-tokens overrides. Order matters:
30
+ // per-rune CSS first (includes base.css), site-tokens CSS second so the
31
+ // `--rf-*` cascade resolves to the override value last.
32
+ nuxt.options.css = nuxt.options.css ?? [];
33
+ nuxt.options.css.push(RUNES_VIRTUAL_ID, SITE_TOKENS_VIRTUAL_ID);
34
+ // Callback the runes Vite plugin invokes in `buildStart` to compute
35
+ // the tree-shaken rune set + print the standard Phase 1/2/3/4 + warnings
36
+ // summary to stderr (matches SvelteKit reference output). Same shape
37
+ // as the Astro integration.
38
+ let summaryPrinted = false;
39
+ const getUsedBlocks = async () => {
40
+ try {
41
+ const { createRefraktLoader, analyzeRuneUsage, formatPipelineSummary } = await import('@refrakt-md/content');
42
+ const themeModule = await import(themePackage + '/transform');
43
+ const themeConfig = themeModule.themeConfig ?? themeModule.luminaConfig ?? themeModule.default;
44
+ const loader = createRefraktLoader({
45
+ configPath,
46
+ site: options.site,
47
+ variables: options.variables,
48
+ security: options.security,
49
+ });
50
+ const loadedSite = await loader.getSite();
51
+ if (!summaryPrinted) {
52
+ process.stderr.write(formatPipelineSummary(loadedSite.pipelineStats, loadedSite.pipelineWarnings));
53
+ summaryPrinted = true;
54
+ }
55
+ const report = analyzeRuneUsage(loadedSite.pages);
56
+ const { usedBlocks } = await computeUsedCssBlocks(report.allTypes, themeConfig, themePackage);
57
+ return { usedBlocks, themePackage, themeConfig };
58
+ }
59
+ catch (err) {
60
+ // eslint-disable-next-line no-console
61
+ console.warn('[refrakt] CSS tree-shaking skipped:', err.message);
62
+ return { themePackage, fallbackToBarrel: true };
63
+ }
64
+ };
65
+ // Resolve content + sandbox paths for the HMR watcher.
66
+ const contentDir = resolve(nuxt.options.rootDir, site.contentDir);
67
+ const examplesDir = site.sandbox?.examplesDir
68
+ ? resolve(nuxt.options.rootDir, site.sandbox.examplesDir)
69
+ : undefined;
70
+ // Content-HMR Vite plugin — registers the watcher in `configureServer`
71
+ // so `.md` edits trigger a full browser reload during `nuxt dev`.
72
+ // Mirrors the SvelteKit reference behaviour.
73
+ const contentHmrPlugin = {
74
+ name: 'refrakt-md:content-hmr',
75
+ configureServer(server) {
76
+ setupContentHmr(server, contentDir, examplesDir);
77
+ },
78
+ };
79
+ // Register the Vite plugins serving virtual:refrakt/site-tokens.css,
80
+ // virtual:refrakt/runes.css, and the content-HMR watcher. Shared
81
+ // factories from @refrakt-md/transform/node — same plugins the Astro
82
+ // integration uses.
83
+ nuxt.options.vite = nuxt.options.vite ?? {};
84
+ nuxt.options.vite.plugins = nuxt.options.vite.plugins ?? [];
85
+ nuxt.options.vite.plugins.push(createSiteTokensVitePlugin(site, configDir), createRunesCssVitePlugin(getUsedBlocks), contentHmrPlugin);
27
86
  // Configure Vue to treat rf-* as custom elements (compose with existing)
28
87
  const prevIsCustomElement = nuxt.options.vue.compilerOptions.isCustomElement;
29
88
  nuxt.options.vue.compilerOptions.isCustomElement = (tag) => tag.startsWith('rf-') || (prevIsCustomElement ? prevIsCustomElement(tag) : false);
30
- // Watch content directory for HMR
31
- const contentDir = resolve(nuxt.options.rootDir, site.contentDir);
89
+ // Also wire the Nuxt builder:watch hook to trigger app regeneration on
90
+ // `.md` changes complements the Vite content-HMR watcher above
91
+ // (which handles the browser reload; this handles Nuxt's own pipeline).
32
92
  nuxt.hook('builder:watch', async (_event, relativePath) => {
33
93
  if (relativePath.endsWith('.md')) {
34
94
  const absPath = resolve(nuxt.options.rootDir, relativePath);
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,eAAe,gBAAgB,CAAqB;IACnD,IAAI,EAAE;QACL,IAAI,EAAE,kBAAkB;QACxB,SAAS,EAAE,SAAS;KACpB;IACD,QAAQ,EAAE;QACT,UAAU,EAAE,uBAAuB;KACnC;IACD,KAAK,CAAC,OAA2B,EAAE,IAAS;QAC3C,MAAM,aAAa,GAAG,iBAAiB,CAAC,OAAO,CAAC,UAAW,CAAC,CAAC;QAC7D,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjD,iCAAiC;QACjC,MAAM,SAAS,GAAG;YACjB,GAAG,aAAa;YAChB,kBAAkB;YAClB,YAAY;YACZ,GAAG,YAAY,OAAO;YACtB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;SACvB,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAEhD,yEAAyE;QACzE,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC;QAC7E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CAClE,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAEnF,kCAAkC;QAClC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,MAAc,EAAE,YAAoB,EAAE,EAAE;YACzE,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBAC5D,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBACpC,MAAM,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;gBAC5C,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;CACD,CAAC,CAAC"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EACN,iBAAiB,EACjB,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,gBAAgB,GAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,eAAe,gBAAgB,CAAqB;IACnD,IAAI,EAAE;QACL,IAAI,EAAE,kBAAkB;QACxB,SAAS,EAAE,SAAS;KACpB;IACD,QAAQ,EAAE;QACT,UAAU,EAAE,uBAAuB;KACnC;IACD,KAAK,CAAC,OAA2B,EAAE,IAAS;QAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAW,CAAC;QACvC,MAAM,aAAa,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAE/C,iCAAiC;QACjC,MAAM,SAAS,GAAG;YACjB,GAAG,aAAa;YAChB,kBAAkB;YAClB,YAAY;YACZ,GAAG,YAAY,OAAO;YACtB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;SACvB,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAEhD,uEAAuE;QACvE,wEAAwE;QACxE,wDAAwD;QACxD,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,CAAC;QAEhE,oEAAoE;QACpE,yEAAyE;QACzE,qEAAqE;QACrE,4BAA4B;QAC5B,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAChC,IAAI,CAAC;gBACJ,MAAM,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,GACrE,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBACrC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC,CAAC;gBAC9D,MAAM,WAAW,GAChB,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,YAAY,IAAI,WAAW,CAAC,OAAO,CAAC;gBAC5E,MAAM,MAAM,GAAG,mBAAmB,CAAC;oBAClC,UAAU;oBACV,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBAC1B,CAAC,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC1C,IAAI,CAAC,cAAc,EAAE,CAAC;oBACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB,qBAAqB,CACpB,UAAU,CAAC,aAAa,EACxB,UAAU,CAAC,gBAAgB,CAC3B,CACD,CAAC;oBACF,cAAc,GAAG,IAAI,CAAC;gBACvB,CAAC;gBACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,oBAAoB,CAChD,MAAM,CAAC,QAAQ,EACf,WAAW,EACX,YAAY,CACZ,CAAC;gBACF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;YAClD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;gBAC5E,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,IAAa,EAAE,CAAC;YAC1D,CAAC;QACF,CAAC,CAAC;QAEF,uDAAuD;QACvD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW;YAC5C,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YACzD,CAAC,CAAC,SAAS,CAAC;QAEb,uEAAuE;QACvE,kEAAkE;QAClE,6CAA6C;QAC7C,MAAM,gBAAgB,GAAG;YACxB,IAAI,EAAE,wBAAwB;YAC9B,eAAe,CAAC,MAAW;gBAC1B,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;YAClD,CAAC;SACD,CAAC;QAEF,qEAAqE;QACrE,iEAAiE;QACjE,qEAAqE;QACrE,oBAAoB;QACpB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAC7B,0BAA0B,CAAC,IAAI,EAAE,SAAS,CAAC,EAC3C,wBAAwB,CAAC,aAAa,CAAC,EACvC,gBAAgB,CAChB,CAAC;QAEF,yEAAyE;QACzE,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC;QAC7E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CAClE,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAEnF,uEAAuE;QACvE,iEAAiE;QACjE,wEAAwE;QACxE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,MAAc,EAAE,YAAoB,EAAE,EAAE;YACzE,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBAC5D,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBACpC,MAAM,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;gBAC5C,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;CACD,CAAC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { AdapterTheme } from '@refrakt-md/transform';
2
+ import type { SecurityPolicy } from '@refrakt-md/types';
2
3
  /**
3
4
  * Theme definition for the Nuxt adapter.
4
5
  *
@@ -11,5 +12,9 @@ export interface RefraktNuxtOptions {
11
12
  /** Which site to use from the config. Required when the config declares
12
13
  * multiple `sites.*`; optional (and resolves to the lone site) otherwise. */
13
14
  site?: string;
15
+ /** Security policy for untrusted author content. Defaults to `'trusted'`. */
16
+ security?: SecurityPolicy;
17
+ /** Markdoc variables available in content via `{% $name %}` syntax. */
18
+ variables?: Record<string, unknown>;
14
19
  }
15
20
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,YAAY,CAAC;AAErC,MAAM,WAAW,kBAAkB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;kFAC8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;CACd"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,YAAY,CAAC;AAErC,MAAM,WAAW,kBAAkB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;kFAC8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@refrakt-md/nuxt",
3
3
  "description": "Nuxt module for refrakt.md — render Markdoc runes in Nuxt projects",
4
- "version": "0.14.2",
4
+ "version": "0.14.4",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -33,10 +33,10 @@
33
33
  "build": "tsc"
34
34
  },
35
35
  "dependencies": {
36
- "@refrakt-md/behaviors": "0.14.2",
37
- "@refrakt-md/content": "0.14.2",
38
- "@refrakt-md/transform": "0.14.2",
39
- "@refrakt-md/types": "0.14.2"
36
+ "@refrakt-md/behaviors": "0.14.4",
37
+ "@refrakt-md/content": "0.14.4",
38
+ "@refrakt-md/transform": "0.14.4",
39
+ "@refrakt-md/types": "0.14.4"
40
40
  },
41
41
  "devDependencies": {
42
42
  "nuxt": "^3.0.0",