@vezham/config 0.0.0-stage → 26.0.0-alpha.6
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/LICENSE +173 -0
- package/README.md +14 -2
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +0 -0
- package/dist/lib/deploy/cli.d.ts +3 -0
- package/dist/lib/deploy/cli.d.ts.map +1 -0
- package/dist/lib/deploy/cli.js +12 -0
- package/dist/lib/deploy/firebase.d.ts +3 -0
- package/dist/lib/deploy/firebase.d.ts.map +1 -0
- package/dist/lib/deploy/firebase.js +106 -0
- package/dist/lib/deploy/index.d.ts +4 -0
- package/dist/lib/deploy/index.d.ts.map +1 -0
- package/dist/lib/deploy/index.js +42 -0
- package/dist/lib/deploy/paths.d.ts +3 -0
- package/dist/lib/deploy/paths.d.ts.map +1 -0
- package/dist/lib/deploy/paths.js +6 -0
- package/dist/lib/deploy/presets.d.ts +5 -0
- package/dist/lib/deploy/presets.d.ts.map +1 -0
- package/dist/lib/deploy/presets.js +10 -0
- package/dist/lib/deploy/types.d.ts +97 -0
- package/dist/lib/deploy/types.d.ts.map +1 -0
- package/dist/lib/deploy/vercel.d.ts +3 -0
- package/dist/lib/deploy/vercel.d.ts.map +1 -0
- package/dist/lib/deploy/vercel.js +47 -0
- package/dist/lib/framework.d.ts +3 -0
- package/dist/lib/framework.d.ts.map +1 -0
- package/dist/lib/framework.js +7 -0
- package/dist/lib/i18n.d.ts +6 -0
- package/dist/lib/i18n.d.ts.map +1 -0
- package/dist/lib/i18n.js +11 -0
- package/dist/lib/integrations/next/index.d.ts +4 -0
- package/dist/lib/integrations/next/index.d.ts.map +1 -0
- package/dist/lib/integrations/next/index.js +29 -0
- package/dist/lib/integrations/playwright/index.d.ts +11 -0
- package/dist/lib/integrations/playwright/index.d.ts.map +1 -0
- package/dist/lib/integrations/playwright/index.js +77 -0
- package/dist/lib/integrations/playwright/test.d.ts +5 -0
- package/dist/lib/integrations/playwright/test.d.ts.map +1 -0
- package/dist/lib/integrations/playwright/test.js +23 -0
- package/dist/lib/integrations/vite/index.d.ts +12 -0
- package/dist/lib/integrations/vite/index.d.ts.map +1 -0
- package/dist/lib/integrations/vite/index.js +34 -0
- package/dist/lib/integrations/vite-lib/base.d.ts +3 -0
- package/dist/lib/integrations/vite-lib/base.d.ts.map +1 -0
- package/dist/lib/integrations/vite-lib/base.js +31 -0
- package/dist/lib/integrations/vite-lib/index.d.ts +3 -0
- package/dist/lib/integrations/vite-lib/index.d.ts.map +1 -0
- package/dist/lib/integrations/vite-lib/index.js +42 -0
- package/dist/lib/integrations/vite-lib/react.d.ts +3 -0
- package/dist/lib/integrations/vite-lib/react.d.ts.map +1 -0
- package/dist/lib/integrations/vite-lib/react.js +10 -0
- package/dist/lib/integrations/vitest/framework.d.ts +4 -0
- package/dist/lib/integrations/vitest/framework.d.ts.map +1 -0
- package/dist/lib/integrations/vitest/framework.js +5 -0
- package/dist/lib/integrations/vitest/frameworks/docs-plugins.d.ts +3 -0
- package/dist/lib/integrations/vitest/frameworks/docs-plugins.d.ts.map +1 -0
- package/dist/lib/integrations/vitest/frameworks/docs-plugins.js +27 -0
- package/dist/lib/integrations/vitest/frameworks/docs.d.ts +3 -0
- package/dist/lib/integrations/vitest/frameworks/docs.d.ts.map +1 -0
- package/dist/lib/integrations/vitest/frameworks/docs.js +5 -0
- package/dist/lib/integrations/vitest/frameworks/next.d.ts +3 -0
- package/dist/lib/integrations/vitest/frameworks/next.d.ts.map +1 -0
- package/dist/lib/integrations/vitest/frameworks/next.js +5 -0
- package/dist/lib/integrations/vitest/frameworks/react.d.ts +3 -0
- package/dist/lib/integrations/vitest/frameworks/react.d.ts.map +1 -0
- package/dist/lib/integrations/vitest/frameworks/react.js +5 -0
- package/dist/lib/integrations/vitest/index.d.ts +4 -0
- package/dist/lib/integrations/vitest/index.d.ts.map +1 -0
- package/dist/lib/integrations/vitest/index.js +4 -0
- package/dist/lib/integrations/vitest/setup/next.d.ts +2 -0
- package/dist/lib/integrations/vitest/setup/next.d.ts.map +1 -0
- package/dist/lib/integrations/vitest/setup/next.js +11 -0
- package/dist/lib/integrations/vitest/setup/react.d.ts +2 -0
- package/dist/lib/integrations/vitest/setup/react.d.ts.map +1 -0
- package/dist/lib/integrations/vitest/setup/react.js +36 -0
- package/dist/lib/integrations/vitest/shared.d.ts +3 -0
- package/dist/lib/integrations/vitest/shared.d.ts.map +1 -0
- package/dist/lib/integrations/vitest/shared.js +24 -0
- package/dist/lib/metadata/cli.d.ts +3 -0
- package/dist/lib/metadata/cli.d.ts.map +1 -0
- package/dist/lib/metadata/cli.js +13 -0
- package/dist/lib/metadata/env.d.ts +9 -0
- package/dist/lib/metadata/env.d.ts.map +1 -0
- package/dist/lib/metadata/env.js +36 -0
- package/dist/lib/metadata/html.d.ts +3 -0
- package/dist/lib/metadata/html.d.ts.map +1 -0
- package/dist/lib/metadata/html.js +96 -0
- package/dist/lib/metadata/index.d.ts +7 -0
- package/dist/lib/metadata/index.d.ts.map +1 -0
- package/dist/lib/metadata/index.js +61 -0
- package/dist/lib/metadata/next.d.ts +79 -0
- package/dist/lib/metadata/next.d.ts.map +1 -0
- package/dist/lib/metadata/next.js +106 -0
- package/dist/lib/metadata/public.d.ts +3 -0
- package/dist/lib/metadata/public.d.ts.map +1 -0
- package/dist/lib/metadata/public.js +107 -0
- package/dist/lib/metadata/render.d.ts +7 -0
- package/dist/lib/metadata/render.d.ts.map +1 -0
- package/dist/lib/metadata/render.js +37 -0
- package/dist/lib/metadata/runtime.d.ts +68 -0
- package/dist/lib/metadata/runtime.d.ts.map +1 -0
- package/dist/lib/metadata/runtime.js +134 -0
- package/dist/lib/metadata/tanstack.d.ts +71 -0
- package/dist/lib/metadata/tanstack.d.ts.map +1 -0
- package/dist/lib/metadata/tanstack.js +194 -0
- package/dist/lib/metadata/templates/not-found.html +224 -0
- package/dist/lib/metadata/templates/offline.html +210 -0
- package/dist/lib/metadata/types.d.ts +118 -0
- package/dist/lib/metadata/types.d.ts.map +1 -0
- package/dist/lib/navigation/app-menu.d.ts +2 -0
- package/dist/lib/navigation/app-menu.d.ts.map +1 -0
- package/dist/lib/navigation/app-menu.js +45 -0
- package/dist/lib/navigation/control-center.d.ts +2 -0
- package/dist/lib/navigation/control-center.d.ts.map +1 -0
- package/dist/lib/navigation/control-center.js +66 -0
- package/dist/lib/navigation/index.d.ts +5 -0
- package/dist/lib/navigation/index.d.ts.map +1 -0
- package/dist/lib/navigation/index.js +59 -0
- package/dist/lib/navigation/toolbar.d.ts +2 -0
- package/dist/lib/navigation/toolbar.d.ts.map +1 -0
- package/dist/lib/navigation/toolbar.js +78 -0
- package/dist/lib/presets/app/index.d.ts +21 -0
- package/dist/lib/presets/app/index.d.ts.map +1 -0
- package/dist/lib/presets/app/index.js +114 -0
- package/dist/lib/presets/cdn/index.d.ts +2 -0
- package/dist/lib/presets/cdn/index.d.ts.map +1 -0
- package/dist/lib/presets/cdn/index.js +2 -0
- package/dist/lib/presets/docs/cli.d.ts +3 -0
- package/dist/lib/presets/docs/cli.d.ts.map +1 -0
- package/dist/lib/presets/docs/cli.js +18 -0
- package/dist/lib/presets/docs/config.d.ts +40 -0
- package/dist/lib/presets/docs/config.d.ts.map +1 -0
- package/dist/lib/presets/docs/config.js +39 -0
- package/dist/lib/presets/docs/files.d.ts +2 -0
- package/dist/lib/presets/docs/files.d.ts.map +1 -0
- package/dist/lib/presets/docs/files.js +13 -0
- package/dist/lib/presets/docs/index.d.ts +7 -0
- package/dist/lib/presets/docs/index.d.ts.map +1 -0
- package/dist/lib/presets/docs/index.js +6 -0
- package/dist/lib/presets/docs/mdx-path.d.ts +7 -0
- package/dist/lib/presets/docs/mdx-path.d.ts.map +1 -0
- package/dist/lib/presets/docs/mdx-path.js +19 -0
- package/dist/lib/presets/docs/og-image.d.ts +9 -0
- package/dist/lib/presets/docs/og-image.d.ts.map +1 -0
- package/dist/lib/presets/docs/og-image.js +88 -0
- package/dist/lib/presets/docs/og-output.d.ts +5 -0
- package/dist/lib/presets/docs/og-output.d.ts.map +1 -0
- package/dist/lib/presets/docs/og-output.js +34 -0
- package/dist/lib/presets/docs/og.d.ts +9 -0
- package/dist/lib/presets/docs/og.d.ts.map +1 -0
- package/dist/lib/presets/docs/og.js +112 -0
- package/dist/lib/presets/docs/openapi.d.ts +3 -0
- package/dist/lib/presets/docs/openapi.d.ts.map +1 -0
- package/dist/lib/presets/docs/openapi.js +105 -0
- package/dist/lib/presets/docs/routes.d.ts +7 -0
- package/dist/lib/presets/docs/routes.d.ts.map +1 -0
- package/dist/lib/presets/docs/routes.js +109 -0
- package/dist/lib/presets/docs/types.d.ts +31 -0
- package/dist/lib/presets/docs/types.d.ts.map +1 -0
- package/dist/lib/presets/docs/vite.d.ts +11 -0
- package/dist/lib/presets/docs/vite.d.ts.map +1 -0
- package/dist/lib/presets/docs/vite.js +78 -0
- package/dist/lib/presets/files.d.ts +5 -0
- package/dist/lib/presets/files.d.ts.map +1 -0
- package/dist/lib/presets/files.js +21 -0
- package/dist/lib/presets/route-files.d.ts +22 -0
- package/dist/lib/presets/route-files.d.ts.map +1 -0
- package/dist/lib/presets/route-files.js +49 -0
- package/dist/lib/yaml-config.d.ts +2 -0
- package/dist/lib/yaml-config.d.ts.map +1 -0
- package/dist/lib/yaml-config.js +6 -0
- package/package.json +119 -3
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { getTanStackHead } from "./tanstack.js";
|
|
2
|
+
import { escapeHtml, generatedNotice } from "./render.js";
|
|
3
|
+
//#region src/lib/metadata/html.ts
|
|
4
|
+
var indexMetadataStartMarker = "<!-- VX_METADATA_START -->";
|
|
5
|
+
var indexMetadataEndMarker = "<!-- VX_METADATA_END -->";
|
|
6
|
+
var isDefined = (value) => value !== void 0;
|
|
7
|
+
var normalizeHtmlAttributeName = (name) => name === "charSet" ? "charset" : name;
|
|
8
|
+
var renderHtmlAttribute = ([name, value]) => {
|
|
9
|
+
if (value === void 0) return;
|
|
10
|
+
if (value === true) return name;
|
|
11
|
+
if (value === false) return;
|
|
12
|
+
return `${normalizeHtmlAttributeName(name)}="${escapeHtml(value)}"`;
|
|
13
|
+
};
|
|
14
|
+
var renderHtmlTag = (tag, attributes, indent = " ") => {
|
|
15
|
+
const renderedAttributes = Object.entries(attributes).map(renderHtmlAttribute).filter(isDefined);
|
|
16
|
+
const inlineTag = `${indent}<${tag} ${renderedAttributes.join(" ")} />`;
|
|
17
|
+
if (inlineTag.length <= 80) return inlineTag;
|
|
18
|
+
return `${indent}<${tag}\n${renderedAttributes.map((attribute) => `${indent} ${attribute}`).join("\n")} />`;
|
|
19
|
+
};
|
|
20
|
+
var escapeRegex = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
21
|
+
var getIndexHtmlMetadataBlock = (config, projectRoot = process.cwd()) => {
|
|
22
|
+
const head = getTanStackHead(config, projectRoot);
|
|
23
|
+
const [charsetMeta, ...meta] = head.meta;
|
|
24
|
+
const renderHeadMetaEntry = (entry) => {
|
|
25
|
+
if (typeof entry.title === "string") return ` <title>${escapeHtml(entry.title)}</title>`;
|
|
26
|
+
return renderHtmlTag("meta", entry);
|
|
27
|
+
};
|
|
28
|
+
const note = (label) => ` <!-- wjdlz/NOTE: ${label} -->`;
|
|
29
|
+
const isMetaName = (entry, names) => typeof entry.name === "string" && names.includes(entry.name);
|
|
30
|
+
const webMeta = meta.filter((entry) => entry.title || isMetaName(entry, [
|
|
31
|
+
"viewport",
|
|
32
|
+
"author",
|
|
33
|
+
"keywords",
|
|
34
|
+
"description"
|
|
35
|
+
]));
|
|
36
|
+
const themeMeta = meta.filter((entry) => isMetaName(entry, ["theme-color", "background-color"]));
|
|
37
|
+
const mobileMeta = meta.filter((entry) => isMetaName(entry, ["mobile-web-app-capable"]));
|
|
38
|
+
const appleMeta = meta.filter((entry) => typeof entry.name === "string" && entry.name.startsWith("apple-"));
|
|
39
|
+
const microsoftMeta = meta.filter((entry) => isMetaName(entry, [
|
|
40
|
+
"application-name",
|
|
41
|
+
"msapplication-config",
|
|
42
|
+
"msapplication-starturl"
|
|
43
|
+
]));
|
|
44
|
+
const openGraphMeta = meta.filter((entry) => typeof entry.property === "string" && entry.property.startsWith("og:"));
|
|
45
|
+
const twitterMeta = meta.filter((entry) => typeof entry.name === "string" && entry.name.startsWith("twitter:"));
|
|
46
|
+
const pwaLinks = head.links.filter((link) => link.rel === "manifest" || link.rel === "icon" || link.rel === "shortcut icon" || link.rel === "mask-icon");
|
|
47
|
+
const appleLinks = head.links.filter((link) => typeof link.rel === "string" && link.rel.startsWith("apple-touch-"));
|
|
48
|
+
return [
|
|
49
|
+
` ${indexMetadataStartMarker}`,
|
|
50
|
+
` <!-- ${generatedNotice} -->`,
|
|
51
|
+
note("WEB"),
|
|
52
|
+
...charsetMeta ? [renderHeadMetaEntry(charsetMeta)] : [],
|
|
53
|
+
renderHtmlTag("meta", {
|
|
54
|
+
"http-equiv": "X-UA-Compatible",
|
|
55
|
+
content: "IE=edge"
|
|
56
|
+
}),
|
|
57
|
+
...webMeta.map(renderHeadMetaEntry),
|
|
58
|
+
"",
|
|
59
|
+
note("PWA::THEME"),
|
|
60
|
+
...themeMeta.map(renderHeadMetaEntry),
|
|
61
|
+
...pwaLinks.map((link) => renderHtmlTag("link", link)),
|
|
62
|
+
"",
|
|
63
|
+
note("PWA::MOBILE"),
|
|
64
|
+
...mobileMeta.map(renderHeadMetaEntry),
|
|
65
|
+
"",
|
|
66
|
+
note("APPLE"),
|
|
67
|
+
...appleMeta.map(renderHeadMetaEntry),
|
|
68
|
+
...appleLinks.map((link) => renderHtmlTag("link", link)),
|
|
69
|
+
"",
|
|
70
|
+
note("MICROSOFT"),
|
|
71
|
+
...microsoftMeta.map(renderHeadMetaEntry),
|
|
72
|
+
"",
|
|
73
|
+
note("META"),
|
|
74
|
+
...openGraphMeta.map(renderHeadMetaEntry),
|
|
75
|
+
"",
|
|
76
|
+
note("TWITTER"),
|
|
77
|
+
...twitterMeta.map(renderHeadMetaEntry),
|
|
78
|
+
` ${indexMetadataEndMarker}`
|
|
79
|
+
].join("\n");
|
|
80
|
+
};
|
|
81
|
+
var getPreservedIndexHeadContent = (headContent) => headContent.split("\n").filter((line) => {
|
|
82
|
+
const trimmedLine = line.trim();
|
|
83
|
+
return trimmedLine.startsWith("<base ") || trimmedLine.startsWith("<script ");
|
|
84
|
+
}).join("\n");
|
|
85
|
+
var syncIndexHtmlContent = (content, config, projectRoot = process.cwd()) => {
|
|
86
|
+
const metadataBlock = getIndexHtmlMetadataBlock(config, projectRoot);
|
|
87
|
+
const headPattern = /(<head>\n)([\s\S]*?)(\n\s*<\/head>)/;
|
|
88
|
+
const headMatch = content.match(headPattern);
|
|
89
|
+
if (!headMatch) throw new Error("Unable to sync Vx metadata because index.html has no head");
|
|
90
|
+
const [, headStart, headContent, headEnd] = headMatch;
|
|
91
|
+
const existingBlockPattern = new RegExp(`${escapeRegex(` ${indexMetadataStartMarker}`)}[\\s\\S]*?${escapeRegex(` ${indexMetadataEndMarker}`)}`);
|
|
92
|
+
const nextHeadContent = [getPreservedIndexHeadContent(headContent.replace(existingBlockPattern, "")), metadataBlock].filter(Boolean).join("\n\n");
|
|
93
|
+
return content.replace(headPattern, `${headStart}${nextHeadContent}${headEnd}`);
|
|
94
|
+
};
|
|
95
|
+
//#endregion
|
|
96
|
+
export { syncIndexHtmlContent };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type GenerateMetadataOptions, type MetadataFile, type VxConfig } from './types';
|
|
2
|
+
export declare const loadVxAppConfig: (projectRoot?: string) => VxConfig;
|
|
3
|
+
export declare const getMetadataFiles: (config: VxConfig, projectRoot?: string) => MetadataFile[];
|
|
4
|
+
export declare const generateMetadata: (options?: GenerateMetadataOptions) => string[];
|
|
5
|
+
export declare const watchMetadata: (options?: GenerateMetadataOptions) => import("node:fs").FSWatcher;
|
|
6
|
+
export type { GenerateMetadataOptions } from './types';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/metadata/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EACjB,KAAK,QAAQ,EACd,MAAM,SAAS,CAAA;AAOhB,eAAO,MAAM,eAAe,GAAI,oBAA2B,aAU1D,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,QAAQ,EAChB,oBAA2B,KAC1B,YAAY,EA+Bd,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,UAAS,uBAA4B,aASrE,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,UAAS,uBAA4B,gCAclE,CAAA;AAGD,YAAY,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { validateFramework } from "../framework.js";
|
|
2
|
+
import { readYamlConfig } from "../yaml-config.js";
|
|
3
|
+
import { getNavigationFiles } from "../navigation/index.js";
|
|
4
|
+
import { getVxEnv, syncEnvContent } from "./env.js";
|
|
5
|
+
import { getGeneratedMetadataModule } from "./render.js";
|
|
6
|
+
import { syncIndexHtmlContent } from "./html.js";
|
|
7
|
+
import { getPublicMetadataFiles } from "./public.js";
|
|
8
|
+
import { existsSync, mkdirSync, readFileSync, watch, writeFileSync } from "node:fs";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
//#region src/lib/metadata/index.ts
|
|
11
|
+
var writeMetadataFile = ({ path: file, content }) => {
|
|
12
|
+
mkdirSync(path.dirname(file), { recursive: true });
|
|
13
|
+
writeFileSync(file, content);
|
|
14
|
+
};
|
|
15
|
+
var loadVxAppConfig = (projectRoot = process.cwd()) => {
|
|
16
|
+
const configFile = path.resolve(projectRoot, "vx.app.yaml");
|
|
17
|
+
if (!existsSync(configFile)) throw new Error(`Missing vx.app.yaml at ${configFile}`);
|
|
18
|
+
const config = readYamlConfig(configFile);
|
|
19
|
+
validateFramework(config.framework);
|
|
20
|
+
return config;
|
|
21
|
+
};
|
|
22
|
+
var getMetadataFiles = (config, projectRoot = process.cwd()) => {
|
|
23
|
+
const indexFile = path.resolve(projectRoot, "index.html");
|
|
24
|
+
const envFile = path.resolve(projectRoot, ".env");
|
|
25
|
+
return [
|
|
26
|
+
...getNavigationFiles(projectRoot),
|
|
27
|
+
...getPublicMetadataFiles(config, projectRoot),
|
|
28
|
+
...existsSync(indexFile) ? [{
|
|
29
|
+
path: indexFile,
|
|
30
|
+
content: syncIndexHtmlContent(readFileSync(indexFile, "utf8"), config, projectRoot)
|
|
31
|
+
}] : [],
|
|
32
|
+
{
|
|
33
|
+
path: path.join(projectRoot, "src/generated/vx.ts"),
|
|
34
|
+
content: getGeneratedMetadataModule(config, projectRoot)
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
path: envFile,
|
|
38
|
+
content: syncEnvContent(existsSync(envFile) ? readFileSync(envFile, "utf8") : "", getVxEnv(config))
|
|
39
|
+
}
|
|
40
|
+
];
|
|
41
|
+
};
|
|
42
|
+
var generateMetadata = (options = {}) => {
|
|
43
|
+
const projectRoot = path.resolve(options.projectRoot ?? process.cwd());
|
|
44
|
+
const files = getMetadataFiles(loadVxAppConfig(projectRoot), projectRoot);
|
|
45
|
+
for (const file of files) writeMetadataFile(file);
|
|
46
|
+
return files.map((file) => file.path);
|
|
47
|
+
};
|
|
48
|
+
var watchMetadata = (options = {}) => {
|
|
49
|
+
const projectRoot = path.resolve(options.projectRoot ?? process.cwd());
|
|
50
|
+
const configFile = path.join(projectRoot, "vx.app.yaml");
|
|
51
|
+
const regenerate = () => {
|
|
52
|
+
const files = generateMetadata(options);
|
|
53
|
+
console.log(`Generated ${files.length} metadata files from ${configFile}`);
|
|
54
|
+
};
|
|
55
|
+
regenerate();
|
|
56
|
+
return watch(projectRoot, { persistent: true }, (_event, filename) => {
|
|
57
|
+
if (filename === "vx.app.yaml" || filename === "vx.nav.yaml") regenerate();
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
//#endregion
|
|
61
|
+
export { generateMetadata, getMetadataFiles, loadVxAppConfig, watchMetadata };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { VxConfig } from './types';
|
|
2
|
+
export declare const getNextMetadata: (config: VxConfig, projectRoot?: string) => {
|
|
3
|
+
metadataBase: URL | undefined;
|
|
4
|
+
title: string;
|
|
5
|
+
description: string;
|
|
6
|
+
applicationName: string;
|
|
7
|
+
authors: {
|
|
8
|
+
name: string;
|
|
9
|
+
url: string;
|
|
10
|
+
}[] | undefined;
|
|
11
|
+
keywords: string[];
|
|
12
|
+
manifest: string;
|
|
13
|
+
icons: {
|
|
14
|
+
icon: ({
|
|
15
|
+
url: string;
|
|
16
|
+
type: string;
|
|
17
|
+
media: string;
|
|
18
|
+
color?: undefined;
|
|
19
|
+
} | {
|
|
20
|
+
url: string;
|
|
21
|
+
type: string;
|
|
22
|
+
media: string;
|
|
23
|
+
color: string;
|
|
24
|
+
})[];
|
|
25
|
+
shortcut: {
|
|
26
|
+
url: string;
|
|
27
|
+
media: string;
|
|
28
|
+
}[];
|
|
29
|
+
apple: {
|
|
30
|
+
url: string;
|
|
31
|
+
}[];
|
|
32
|
+
other: {
|
|
33
|
+
rel: string;
|
|
34
|
+
url: string;
|
|
35
|
+
media: string;
|
|
36
|
+
color: string;
|
|
37
|
+
}[];
|
|
38
|
+
};
|
|
39
|
+
appleWebApp: {
|
|
40
|
+
title: string;
|
|
41
|
+
capable: boolean;
|
|
42
|
+
startupImage: {
|
|
43
|
+
media: string;
|
|
44
|
+
url: string;
|
|
45
|
+
}[];
|
|
46
|
+
};
|
|
47
|
+
openGraph: {
|
|
48
|
+
type: string;
|
|
49
|
+
title: string;
|
|
50
|
+
description: string;
|
|
51
|
+
images: string[];
|
|
52
|
+
url: string;
|
|
53
|
+
};
|
|
54
|
+
twitter: {
|
|
55
|
+
creator: string;
|
|
56
|
+
site: string;
|
|
57
|
+
title: string;
|
|
58
|
+
description: string;
|
|
59
|
+
images: string[];
|
|
60
|
+
card: string;
|
|
61
|
+
};
|
|
62
|
+
other: {
|
|
63
|
+
'mobile-web-app-capable': string;
|
|
64
|
+
'msapplication-config': string;
|
|
65
|
+
'msapplication-starturl': string;
|
|
66
|
+
'twitter:url': string;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
export declare const getNextViewport: (config: VxConfig, projectRoot?: string) => {
|
|
70
|
+
width: string;
|
|
71
|
+
initialScale: number;
|
|
72
|
+
maximumScale: number;
|
|
73
|
+
userScalable: boolean;
|
|
74
|
+
themeColor: {
|
|
75
|
+
media: string;
|
|
76
|
+
color: string;
|
|
77
|
+
}[];
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=next.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../../src/lib/metadata/next.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,eAAO,MAAM,eAAe,GAC1B,QAAQ,QAAQ,EAChB,oBAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiG5B,CAAA;AAED,eAAO,MAAM,eAAe,GAC1B,QAAQ,QAAQ,EAChB,oBAA2B;;;;;;;;;CAoB5B,CAAA"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { getRuntimeMetadata } from "./runtime.js";
|
|
2
|
+
//#region src/lib/metadata/next.ts
|
|
3
|
+
var getNextMetadata = (config, projectRoot = process.cwd()) => {
|
|
4
|
+
const metadata = getRuntimeMetadata(config, projectRoot);
|
|
5
|
+
return {
|
|
6
|
+
metadataBase: metadata.url ? new URL(metadata.url) : void 0,
|
|
7
|
+
title: metadata.title,
|
|
8
|
+
description: metadata.description,
|
|
9
|
+
applicationName: metadata.microsoft.applicationName,
|
|
10
|
+
authors: metadata.author?.name ? [{
|
|
11
|
+
name: metadata.author.name,
|
|
12
|
+
url: metadata.author.url
|
|
13
|
+
}] : void 0,
|
|
14
|
+
keywords: metadata.keywords,
|
|
15
|
+
manifest: metadata.manifest,
|
|
16
|
+
icons: {
|
|
17
|
+
icon: [
|
|
18
|
+
{
|
|
19
|
+
url: metadata.icons.faviconLight,
|
|
20
|
+
type: "image/x-icon",
|
|
21
|
+
media: "(prefers-color-scheme: light)"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
url: metadata.icons.faviconDark,
|
|
25
|
+
type: "image/x-icon",
|
|
26
|
+
media: "(prefers-color-scheme: dark)"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
url: metadata.icons.maskIcon,
|
|
30
|
+
type: "image/svg+xml",
|
|
31
|
+
media: "(prefers-color-scheme: light)",
|
|
32
|
+
color: "black"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
url: metadata.icons.maskIcon,
|
|
36
|
+
type: "image/svg+xml",
|
|
37
|
+
media: "(prefers-color-scheme: dark)",
|
|
38
|
+
color: "white"
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
shortcut: [{
|
|
42
|
+
url: metadata.icons.faviconLight,
|
|
43
|
+
media: "(prefers-color-scheme: light)"
|
|
44
|
+
}, {
|
|
45
|
+
url: metadata.icons.faviconDark,
|
|
46
|
+
media: "(prefers-color-scheme: dark)"
|
|
47
|
+
}],
|
|
48
|
+
apple: [{ url: metadata.apple.touchIcon }],
|
|
49
|
+
other: [{
|
|
50
|
+
rel: "mask-icon",
|
|
51
|
+
url: metadata.icons.maskIcon,
|
|
52
|
+
media: "(prefers-color-scheme: light)",
|
|
53
|
+
color: "black"
|
|
54
|
+
}, {
|
|
55
|
+
rel: "mask-icon",
|
|
56
|
+
url: metadata.icons.maskIcon,
|
|
57
|
+
media: "(prefers-color-scheme: dark)",
|
|
58
|
+
color: "white"
|
|
59
|
+
}]
|
|
60
|
+
},
|
|
61
|
+
appleWebApp: {
|
|
62
|
+
title: metadata.apple.title,
|
|
63
|
+
capable: metadata.apple.capable,
|
|
64
|
+
startupImage: metadata.apple.startupImages
|
|
65
|
+
},
|
|
66
|
+
openGraph: {
|
|
67
|
+
type: metadata.openGraph.type,
|
|
68
|
+
title: metadata.openGraph.title,
|
|
69
|
+
description: metadata.openGraph.description,
|
|
70
|
+
images: [metadata.openGraph.image],
|
|
71
|
+
url: metadata.openGraph.url
|
|
72
|
+
},
|
|
73
|
+
twitter: {
|
|
74
|
+
creator: metadata.twitter.creator,
|
|
75
|
+
site: metadata.twitter.site,
|
|
76
|
+
title: metadata.twitter.title,
|
|
77
|
+
description: metadata.twitter.description,
|
|
78
|
+
images: [metadata.twitter.image],
|
|
79
|
+
card: metadata.twitter.card
|
|
80
|
+
},
|
|
81
|
+
other: {
|
|
82
|
+
"mobile-web-app-capable": metadata.mobileWebAppCapable ? "yes" : "no",
|
|
83
|
+
"msapplication-config": metadata.microsoft.config,
|
|
84
|
+
"msapplication-starturl": metadata.microsoft.startUrl,
|
|
85
|
+
"twitter:url": metadata.twitter.url
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
var getNextViewport = (config, projectRoot = process.cwd()) => {
|
|
90
|
+
const metadata = getRuntimeMetadata(config, projectRoot);
|
|
91
|
+
return {
|
|
92
|
+
width: "device-width",
|
|
93
|
+
initialScale: 1,
|
|
94
|
+
maximumScale: 1.5,
|
|
95
|
+
userScalable: true,
|
|
96
|
+
themeColor: [{
|
|
97
|
+
media: "(prefers-color-scheme: light)",
|
|
98
|
+
color: metadata.theme.lightColor
|
|
99
|
+
}, {
|
|
100
|
+
media: "(prefers-color-scheme: dark)",
|
|
101
|
+
color: metadata.theme.darkColor
|
|
102
|
+
}]
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
//#endregion
|
|
106
|
+
export { getNextMetadata, getNextViewport };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/lib/metadata/public.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAiErD,eAAO,MAAM,sBAAsB,GACjC,QAAQ,QAAQ,EAChB,aAAa,MAAM,KAClB,YAAY,EA8Cd,CAAA"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { createVersionedAssetUrl, getProjectAssetBaseUrl, getStaticAssetUrl, lowerFirst, normalizeIcons, toAssetUrl } from "./runtime.js";
|
|
2
|
+
import { generatedNotice, renderMetadataTemplate, stringifyManifest } from "./render.js";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
//#region src/lib/metadata/public.ts
|
|
5
|
+
var createManifest = (config, versionedAssetUrl) => {
|
|
6
|
+
const { core, pwa } = config;
|
|
7
|
+
return {
|
|
8
|
+
manifest_version: 1,
|
|
9
|
+
version: core.version,
|
|
10
|
+
id: core.id,
|
|
11
|
+
name: core.name,
|
|
12
|
+
short_name: core.shortName,
|
|
13
|
+
description: lowerFirst(core.description),
|
|
14
|
+
scope: pwa.scope,
|
|
15
|
+
start_url: `${pwa.startUrl}?utm_source=homescreen&utm_medium=shortcut&pwa=true`,
|
|
16
|
+
display: pwa.display,
|
|
17
|
+
orientation: pwa.orientation,
|
|
18
|
+
theme_color: config.branding.themeColor,
|
|
19
|
+
background_color: config.branding.backgroundColor,
|
|
20
|
+
categories: pwa.categories,
|
|
21
|
+
icons: normalizeIcons(pwa.icons).map((icon) => ({
|
|
22
|
+
src: toAssetUrl(icon.src, versionedAssetUrl),
|
|
23
|
+
sizes: icon.sizes,
|
|
24
|
+
type: icon.type
|
|
25
|
+
})),
|
|
26
|
+
screenshots: pwa.screenshots.map((screenshot) => ({
|
|
27
|
+
src: toAssetUrl(screenshot.src, versionedAssetUrl),
|
|
28
|
+
type: screenshot.type,
|
|
29
|
+
sizes: screenshot.sizes
|
|
30
|
+
})),
|
|
31
|
+
shortcuts: pwa.shortcuts.map((shortcut) => ({
|
|
32
|
+
name: shortcut.name,
|
|
33
|
+
short_name: shortcut.shortName,
|
|
34
|
+
url: `${shortcut.url}?utm_source=jumplist&utm_medium=shortcut&pwa=true`,
|
|
35
|
+
icons: normalizeIcons(shortcut.icons).map((icon) => ({
|
|
36
|
+
src: toAssetUrl(icon.src, versionedAssetUrl),
|
|
37
|
+
sizes: icon.sizes,
|
|
38
|
+
type: icon.type
|
|
39
|
+
}))
|
|
40
|
+
}))
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
var renderBrowserConfig = (versionedAssetUrl) => {
|
|
44
|
+
return `<?xml version="1.0" encoding="utf-8" ?>
|
|
45
|
+
<!-- ${generatedNotice} -->
|
|
46
|
+
<browserconfig>
|
|
47
|
+
<msapplication>
|
|
48
|
+
<tile>
|
|
49
|
+
<square70x70logo
|
|
50
|
+
src="${versionedAssetUrl("icons/icon-square-70x70.png")}" />
|
|
51
|
+
<square150x150logo
|
|
52
|
+
src="${versionedAssetUrl("icons/icon-square-150x150.png")}" />
|
|
53
|
+
<wide310x150logo
|
|
54
|
+
src="${versionedAssetUrl("icons/icon-square-310x150.png")}" />
|
|
55
|
+
<square310x310logo
|
|
56
|
+
src="${versionedAssetUrl("icons/icon-square-310x310.png")}" />
|
|
57
|
+
<tilecolor>transparent</tilecolor>
|
|
58
|
+
</tile>
|
|
59
|
+
</msapplication>
|
|
60
|
+
</browserconfig>
|
|
61
|
+
`;
|
|
62
|
+
};
|
|
63
|
+
var getPublicMetadataFiles = (config, projectRoot) => {
|
|
64
|
+
const { core } = config;
|
|
65
|
+
const publicDir = path.resolve(projectRoot, "public");
|
|
66
|
+
const versionedAssetUrl = createVersionedAssetUrl(getProjectAssetBaseUrl(projectRoot), core.version);
|
|
67
|
+
const offlinePage = renderMetadataTemplate("offline.html", {
|
|
68
|
+
generatedNotice,
|
|
69
|
+
author: core.publisher.name,
|
|
70
|
+
appName: core.name,
|
|
71
|
+
imageUrl: getStaticAssetUrl("vassets/no-internet.svg", core.version)
|
|
72
|
+
});
|
|
73
|
+
const notFoundPage = renderMetadataTemplate("not-found.html", {
|
|
74
|
+
generatedNotice,
|
|
75
|
+
author: core.publisher.name,
|
|
76
|
+
appName: core.name,
|
|
77
|
+
imageUrl: getStaticAssetUrl("vassets/no-internet.svg", core.version)
|
|
78
|
+
});
|
|
79
|
+
return [
|
|
80
|
+
{
|
|
81
|
+
path: path.join(publicDir, "manifest.webmanifest"),
|
|
82
|
+
content: `${stringifyManifest(createManifest(config, versionedAssetUrl))}\n`
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
path: path.join(publicDir, "browserconfig.xml"),
|
|
86
|
+
content: renderBrowserConfig(versionedAssetUrl)
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
path: path.join(publicDir, "robots.txt"),
|
|
90
|
+
content: `# ${generatedNotice}\n# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n`
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
path: path.join(publicDir, "sw.js"),
|
|
94
|
+
content: `/* ${generatedNotice} */\n/* global importScripts */\nimportScripts('https://static.cdn.vezham.com/workers/sw.js?vx=${core.version}')\n`
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
path: path.join(publicDir, "offline.html"),
|
|
98
|
+
content: offlinePage
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
path: path.join(publicDir, "404.html"),
|
|
102
|
+
content: notFoundPage
|
|
103
|
+
}
|
|
104
|
+
];
|
|
105
|
+
};
|
|
106
|
+
//#endregion
|
|
107
|
+
export { getPublicMetadataFiles };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type VxConfig } from './types';
|
|
2
|
+
export declare const generatedNotice = "Generated by Vx metadata. DO NOT EDIT.";
|
|
3
|
+
export declare const stringifyManifest: (manifest: Record<string, unknown>) => string;
|
|
4
|
+
export declare const escapeHtml: (value: string) => string;
|
|
5
|
+
export declare const renderMetadataTemplate: (name: string, values: Record<string, string>) => string;
|
|
6
|
+
export declare const getGeneratedMetadataModule: (config: VxConfig, projectRoot?: string) => string;
|
|
7
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/lib/metadata/render.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,eAAO,MAAM,eAAe,2CAA2C,CAAA;AAEvE,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAIhE,CAAA;AAIH,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,WAKZ,CAAA;AAO5B,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,EACZ,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAY1B,CAAA;AAEN,eAAO,MAAM,0BAA0B,GACrC,QAAQ,QAAQ,EAChB,oBAA2B,WAsB3B,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { resolveI18n } from "../i18n.js";
|
|
2
|
+
import { resolveDocsConfig } from "../presets/docs/config.js";
|
|
3
|
+
import { getRuntimeMetadata } from "./runtime.js";
|
|
4
|
+
import { getNextMetadata, getNextViewport } from "./next.js";
|
|
5
|
+
import { getTanStackHead } from "./tanstack.js";
|
|
6
|
+
import { readFileSync } from "node:fs";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
//#region src/lib/metadata/render.ts
|
|
10
|
+
var generatedNotice = "Generated by Vx metadata. DO NOT EDIT.";
|
|
11
|
+
var stringifyManifest = (manifest) => JSON.stringify(manifest, null, 2).replace("\"categories\": [\n \"productivity\",\n \"personalization\",\n \"utilities\"\n ]", "\"categories\": [\"productivity\", \"personalization\", \"utilities\"]");
|
|
12
|
+
var stringifyTs = (value) => JSON.stringify(value, null, 2);
|
|
13
|
+
var escapeHtml = (value) => value.replaceAll("&", "&").replaceAll("\"", """).replaceAll("<", "<").replaceAll(">", ">");
|
|
14
|
+
var metadataTemplatesDir = path.join(path.dirname(fileURLToPath(import.meta.url)), "templates");
|
|
15
|
+
var renderMetadataTemplate = (name, values) => readFileSync(path.join(metadataTemplatesDir, name), "utf8").replace(/^[ \t]*<!-- prettier-ignore -->\r?\n/gm, "").replaceAll(/\{\{(\w+)\}\}/g, (_, key) => {
|
|
16
|
+
const value = values[key];
|
|
17
|
+
if (value === void 0) throw new Error(`Missing metadata template value: ${key}`);
|
|
18
|
+
return escapeHtml(value);
|
|
19
|
+
});
|
|
20
|
+
var getGeneratedMetadataModule = (config, projectRoot = process.cwd()) => `// ${generatedNotice}
|
|
21
|
+
|
|
22
|
+
export const vxMetadata = ${stringifyTs(getRuntimeMetadata(config, projectRoot))} as const
|
|
23
|
+
|
|
24
|
+
export const vxCore = ${stringifyTs(config.core)} as const
|
|
25
|
+
|
|
26
|
+
${config.framework === "tanstack-docs" ? `export const vxDocs = ${stringifyTs(resolveDocsConfig(config.docs))} as const` : ""}
|
|
27
|
+
|
|
28
|
+
export const vxI18n = ${stringifyTs(resolveI18n(config.i18n))} as const
|
|
29
|
+
|
|
30
|
+
export type Locale = (typeof vxI18n.languages)[number]
|
|
31
|
+
${config.framework === "next" ? `
|
|
32
|
+
export const nextMetadata = ${stringifyTs(getNextMetadata(config, projectRoot))}
|
|
33
|
+
|
|
34
|
+
export const nextViewport = ${stringifyTs(getNextViewport(config, projectRoot))}` : config.framework === "tanstack" || config.framework === "tanstack-docs" ? `
|
|
35
|
+
export const tanstackHead = ${stringifyTs(getTanStackHead(config, projectRoot))}` : ""}`;
|
|
36
|
+
//#endregion
|
|
37
|
+
export { escapeHtml, generatedNotice, getGeneratedMetadataModule, renderMetadataTemplate, stringifyManifest };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type VxConfig, type VxIcon, type VxIconSource } from './types';
|
|
2
|
+
export declare const lowerFirst: (value: string) => string;
|
|
3
|
+
export declare const getProjectAssetBaseUrl: (projectRoot: string) => string;
|
|
4
|
+
export declare const createVersionedAssetUrl: (baseUrl: string, version: string) => (assetPath: string) => string;
|
|
5
|
+
export declare const getStaticAssetUrl: (assetPath: string, version: string) => string;
|
|
6
|
+
export declare const toAssetUrl: (assetPath: string, versionedAssetUrl: (assetPath: string) => string) => string;
|
|
7
|
+
type SocialImageSource = 'default' | 'path' | 'url';
|
|
8
|
+
export declare const normalizeIcons: (icons: VxIconSource) => VxIcon[];
|
|
9
|
+
export declare const getRuntimeMetadata: (config: VxConfig, projectRoot?: string) => {
|
|
10
|
+
title: string;
|
|
11
|
+
description: string;
|
|
12
|
+
url: string;
|
|
13
|
+
manifest: string;
|
|
14
|
+
browserConfig: string;
|
|
15
|
+
startUrl: string;
|
|
16
|
+
author: {
|
|
17
|
+
name: string;
|
|
18
|
+
url: string;
|
|
19
|
+
};
|
|
20
|
+
keywords: string[];
|
|
21
|
+
theme: {
|
|
22
|
+
lightColor: string;
|
|
23
|
+
darkColor: string;
|
|
24
|
+
lightBackgroundColor: string;
|
|
25
|
+
darkBackgroundColor: string;
|
|
26
|
+
};
|
|
27
|
+
mobileWebAppCapable: boolean;
|
|
28
|
+
apple: {
|
|
29
|
+
title: string;
|
|
30
|
+
capable: boolean;
|
|
31
|
+
touchIcon: string;
|
|
32
|
+
startupImages: {
|
|
33
|
+
media: string;
|
|
34
|
+
url: string;
|
|
35
|
+
}[];
|
|
36
|
+
};
|
|
37
|
+
icons: {
|
|
38
|
+
faviconLight: string;
|
|
39
|
+
faviconDark: string;
|
|
40
|
+
maskIcon: string;
|
|
41
|
+
};
|
|
42
|
+
microsoft: {
|
|
43
|
+
applicationName: string;
|
|
44
|
+
config: string;
|
|
45
|
+
startUrl: string;
|
|
46
|
+
};
|
|
47
|
+
openGraph: {
|
|
48
|
+
type: string;
|
|
49
|
+
title: string;
|
|
50
|
+
description: string;
|
|
51
|
+
image: string;
|
|
52
|
+
imageSource: SocialImageSource;
|
|
53
|
+
url: string;
|
|
54
|
+
};
|
|
55
|
+
twitter: {
|
|
56
|
+
creator: string;
|
|
57
|
+
site: string;
|
|
58
|
+
title: string;
|
|
59
|
+
description: string;
|
|
60
|
+
image: string;
|
|
61
|
+
url: string;
|
|
62
|
+
card: string;
|
|
63
|
+
};
|
|
64
|
+
defaultLanguage: string;
|
|
65
|
+
languages: string[];
|
|
66
|
+
};
|
|
67
|
+
export {};
|
|
68
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/lib/metadata/runtime.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,YAAY,EAGlB,MAAM,SAAS,CAAA;AAEhB,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,WAC6B,CAAA;AAIrE,eAAO,MAAM,sBAAsB,GAAI,aAAa,MAAM,WACmC,CAAA;AAE7F,eAAO,MAAM,uBAAuB,GAAI,SAAS,MAAM,EAAE,SAAS,MAAM,MAG9D,WAAW,MAAM,WAE1B,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,WAAW,MAAM,EAAE,SAAS,MAAM,WAC+B,CAAA;AAEnG,eAAO,MAAM,UAAU,GACrB,WAAW,MAAM,EACjB,mBAAmB,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,WAIhB,CAAA;AAElC,KAAK,iBAAiB,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAAA;AAyEnD,eAAO,MAAM,cAAc,GAAI,OAAO,YAAY,KAAG,MAAM,EAU1D,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,QAAQ,EAChB,oBAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiF5B,CAAA"}
|