@blinkk/root 3.0.2 → 3.0.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.
- package/dist/{chunk-FQBA5QSG.js → chunk-3Z5TNZEP.js} +3 -3
- package/dist/chunk-3Z5TNZEP.js.map +7 -0
- package/dist/{chunk-JCRXBB26.js → chunk-6NBKAR5Y.js} +2 -2
- package/dist/chunk-6NBKAR5Y.js.map +7 -0
- package/dist/chunk-6P3B7ZXL.js +1 -1
- package/dist/chunk-6P3B7ZXL.js.map +7 -1
- package/dist/{chunk-PVBPP5LN.js → chunk-7PSEEE6C.js} +10 -10
- package/dist/chunk-7PSEEE6C.js.map +7 -0
- package/dist/{chunk-WAZTR3DX.js → chunk-KW7KTYGC.js} +2 -2
- package/dist/chunk-KW7KTYGC.js.map +7 -0
- package/dist/{chunk-GSR74KEI.js → chunk-URG2INLL.js} +1477 -85
- package/dist/chunk-URG2INLL.js.map +7 -0
- package/dist/{chunk-4PO5HYET.js → chunk-X2C2MEJ2.js} +39 -4
- package/dist/chunk-X2C2MEJ2.js.map +7 -0
- package/dist/chunk-XSNCF7WU.js +1 -1
- package/dist/chunk-XSNCF7WU.js.map +7 -1
- package/dist/cli/build.d.ts +7 -0
- package/dist/cli/cli.d.ts +12 -0
- package/dist/cli/codegen.d.ts +5 -0
- package/dist/cli/create-package.d.ts +14 -0
- package/dist/cli/dev.d.ts +10 -0
- package/dist/cli/gae-deploy.d.ts +18 -0
- package/dist/cli/preview.d.ts +8 -0
- package/dist/cli/secrets.d.ts +9 -0
- package/dist/cli/start.d.ts +8 -0
- package/dist/cli/startup/check-version.d.ts +17 -0
- package/dist/cli/startup/startup-tasks.d.ts +39 -0
- package/dist/cli.js +4 -4
- package/dist/cli.js.map +7 -1
- package/dist/core/components/Body.d.ts +23 -0
- package/dist/core/components/Head.d.ts +18 -0
- package/dist/core/components/Html.d.ts +24 -0
- package/dist/core/components/Script.d.ts +16 -0
- package/dist/core/config.d.ts +285 -0
- package/dist/core/core.d.ts +14 -0
- package/dist/core/hooks/useI18nContext.d.ts +11 -0
- package/dist/core/hooks/useRequestContext.d.ts +36 -0
- package/dist/core/hooks/useStringParams.d.ts +34 -0
- package/dist/core/hooks/useTranslations.d.ts +20 -0
- package/dist/core/hooks/useTranslationsMiddleware.d.ts +25 -0
- package/dist/core/pages/DevErrorPage.d.ts +9 -0
- package/dist/core/pages/DevNotFoundPage.d.ts +10 -0
- package/dist/core/pages/ErrorPage.d.ts +9 -0
- package/dist/core/plugin.d.ts +80 -0
- package/dist/core/pod.d.ts +54 -0
- package/dist/core/types.d.ts +228 -0
- package/dist/core.js +3 -3
- package/dist/core.js.map +7 -1
- package/dist/functions/functions.d.ts +1 -0
- package/dist/functions/server.d.ts +10 -0
- package/dist/functions.js +5 -5
- package/dist/functions.js.map +7 -1
- package/dist/jsx/jsx-dev-runtime.d.ts +10 -1
- package/dist/jsx/jsx-dev-runtime.js +2 -2
- package/dist/jsx/jsx-dev-runtime.js.map +7 -1
- package/dist/{jsx-C8cJO55i.d.ts → jsx/jsx-render.d.ts} +3 -6
- package/dist/jsx/jsx-runtime.d.ts +120 -1
- package/dist/jsx/jsx-runtime.js +2 -2
- package/dist/jsx/jsx-runtime.js.map +7 -1
- package/dist/jsx/jsx.d.ts +37 -0
- package/dist/{jsx-dev-runtime-DHf9jiFH.d.ts → jsx/types.d.ts} +8 -124
- package/dist/jsx.js +3 -3
- package/dist/jsx.js.map +7 -1
- package/dist/middleware/common.d.ts +22 -0
- package/dist/middleware/hooks.d.ts +8 -0
- package/dist/middleware/middleware.d.ts +3 -0
- package/dist/middleware/multipart.d.ts +11 -0
- package/dist/middleware/redirects.d.ts +10 -0
- package/dist/middleware/session.d.ts +24 -0
- package/dist/middleware.js +2 -2
- package/dist/middleware.js.map +7 -1
- package/dist/node/element-graph.d.ts +51 -0
- package/dist/node/load-config.d.ts +17 -0
- package/dist/node/monorepo.d.ts +14 -0
- package/dist/node/node.d.ts +4 -0
- package/dist/node/pod-collector.d.ts +33 -0
- package/dist/node/pods-vite-plugin.d.ts +6 -0
- package/dist/node/vite-plugin-preact-alias.d.ts +10 -0
- package/dist/node/vite-plugin-prune-empty-chunks.d.ts +27 -0
- package/dist/node/vite-plugin-root-jsx-virtual.d.ts +16 -0
- package/dist/node/vite.d.ts +18 -0
- package/dist/node.js +2 -2
- package/dist/node.js.map +7 -1
- package/dist/render/accept-language.d.ts +8 -0
- package/dist/render/asset-map/asset-map.d.ts +25 -0
- package/dist/render/asset-map/build-asset-map.d.ts +47 -0
- package/dist/render/asset-map/dev-asset-map.d.ts +26 -0
- package/dist/render/countrie-language.d.ts +13 -0
- package/dist/render/html-minify.d.ts +3 -0
- package/dist/render/html-pretty.d.ts +3 -0
- package/dist/render/i18n-fallbacks.d.ts +11 -0
- package/dist/render/render.d.ts +91 -0
- package/dist/render/route-trie.d.ts +44 -0
- package/dist/render/router.d.ts +18 -0
- package/dist/render.js +9 -9
- package/dist/render.js.map +7 -1
- package/dist/secrets/env-file.d.ts +44 -0
- package/dist/secrets/gcloud.d.ts +28 -0
- package/dist/secrets/hash.d.ts +11 -0
- package/dist/secrets/manifest.d.ts +60 -0
- package/dist/secrets/secrets.d.ts +118 -0
- package/dist/utils/batch.d.ts +1 -0
- package/dist/utils/elements.d.ts +12 -0
- package/dist/utils/fsutils.d.ts +24 -0
- package/dist/utils/i18n.d.ts +8 -0
- package/dist/utils/ports.d.ts +8 -0
- package/dist/utils/rand.d.ts +10 -0
- package/dist/utils/url-path-params.d.ts +2 -0
- package/package.json +14 -15
- package/dist/chunk-4PO5HYET.js.map +0 -1
- package/dist/chunk-FQBA5QSG.js.map +0 -1
- package/dist/chunk-GSR74KEI.js.map +0 -1
- package/dist/chunk-JCRXBB26.js.map +0 -1
- package/dist/chunk-PVBPP5LN.js.map +0 -1
- package/dist/chunk-WAZTR3DX.js.map +0 -1
- package/dist/cli.d.ts +0 -60
- package/dist/core.d.ts +0 -214
- package/dist/functions.d.ts +0 -14
- package/dist/jsx.d.ts +0 -2
- package/dist/middleware.d.ts +0 -43
- package/dist/node.d.ts +0 -91
- package/dist/render.d.ts +0 -8
- package/dist/types-B-pJtsB4.d.ts +0 -827
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Fragment
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3Z5TNZEP.js";
|
|
4
4
|
|
|
5
5
|
// src/jsx/jsx-render.ts
|
|
6
6
|
import { options as preactOptions } from "preact";
|
|
@@ -57,11 +57,14 @@ var DEFAULT_BLOCK_ELEMENTS = /* @__PURE__ */ new Set([
|
|
|
57
57
|
"nav",
|
|
58
58
|
"noscript",
|
|
59
59
|
"ol",
|
|
60
|
+
"optgroup",
|
|
61
|
+
"option",
|
|
60
62
|
"p",
|
|
61
63
|
"pre",
|
|
62
64
|
"script",
|
|
63
65
|
"search",
|
|
64
66
|
"section",
|
|
67
|
+
"select",
|
|
65
68
|
"style",
|
|
66
69
|
"summary",
|
|
67
70
|
"table",
|
|
@@ -82,6 +85,37 @@ var ALWAYS_BLOCK_ELEMENTS = /* @__PURE__ */ new Set([
|
|
|
82
85
|
"style",
|
|
83
86
|
"title"
|
|
84
87
|
]);
|
|
88
|
+
var BOOLEAN_ATTRS = /* @__PURE__ */ new Set([
|
|
89
|
+
"allowfullscreen",
|
|
90
|
+
"async",
|
|
91
|
+
"autofocus",
|
|
92
|
+
"autoplay",
|
|
93
|
+
"capture",
|
|
94
|
+
"checked",
|
|
95
|
+
"controls",
|
|
96
|
+
"default",
|
|
97
|
+
"defer",
|
|
98
|
+
"disabled",
|
|
99
|
+
"disableremoteplayback",
|
|
100
|
+
"download",
|
|
101
|
+
"draggable",
|
|
102
|
+
"formnovalidate",
|
|
103
|
+
"hidden",
|
|
104
|
+
"inert",
|
|
105
|
+
"ismap",
|
|
106
|
+
"itemscope",
|
|
107
|
+
"loop",
|
|
108
|
+
"multiple",
|
|
109
|
+
"muted",
|
|
110
|
+
"nomodule",
|
|
111
|
+
"novalidate",
|
|
112
|
+
"open",
|
|
113
|
+
"playsinline",
|
|
114
|
+
"readonly",
|
|
115
|
+
"required",
|
|
116
|
+
"reversed",
|
|
117
|
+
"selected"
|
|
118
|
+
]);
|
|
85
119
|
var PROP_TO_ATTR = {
|
|
86
120
|
acceptCharset: "accept-charset",
|
|
87
121
|
autoCapitalize: "autocapitalize",
|
|
@@ -94,6 +128,7 @@ var PROP_TO_ATTR = {
|
|
|
94
128
|
contentEditable: "contenteditable",
|
|
95
129
|
crossOrigin: "crossorigin",
|
|
96
130
|
dateTime: "datetime",
|
|
131
|
+
disableRemotePlayback: "disableremoteplayback",
|
|
97
132
|
encType: "enctype",
|
|
98
133
|
formAction: "formaction",
|
|
99
134
|
formEncType: "formenctype",
|
|
@@ -421,9 +456,9 @@ function renderJsxToString(vnode, options) {
|
|
|
421
456
|
let value = props[key];
|
|
422
457
|
if (!isDef(value)) continue;
|
|
423
458
|
if (typeof value === "function") continue;
|
|
424
|
-
if (value === false && !key.startsWith("data-")) continue;
|
|
425
459
|
const attrName = PROP_TO_ATTR[key] || key;
|
|
426
|
-
if (value ===
|
|
460
|
+
if (value === false && BOOLEAN_ATTRS.has(attrName)) continue;
|
|
461
|
+
if (value === true && BOOLEAN_ATTRS.has(attrName)) {
|
|
427
462
|
result += " " + attrName;
|
|
428
463
|
continue;
|
|
429
464
|
}
|
|
@@ -472,4 +507,4 @@ function noop() {
|
|
|
472
507
|
export {
|
|
473
508
|
renderJsxToString
|
|
474
509
|
};
|
|
475
|
-
//# sourceMappingURL=chunk-
|
|
510
|
+
//# sourceMappingURL=chunk-X2C2MEJ2.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/jsx/jsx-render.ts"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable n/no-extraneous-import */\nimport {options as preactOptions} from 'preact';\nimport {VNode, Fragment} from './jsx-runtime.js';\n\n/** HTML void elements (self-closing, no end tag). */\nconst VOID_ELEMENTS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\n/** Tags whose text content may contain literal newlines that should not be treated as block-child indicators. */\nconst RAW_CONTENT_ELEMENTS = new Set(['pre', 'textarea', 'script', 'style']);\n\n/**\n * Standard HTML block-level elements. Also includes the `<select>` content\n * model (`select`/`optgroup`/`option`) so that each `<option>` renders on its\n * own line in pretty mode, even though those tags aren't block-level per CSS.\n */\nconst DEFAULT_BLOCK_ELEMENTS = new Set([\n 'address',\n 'article',\n 'aside',\n 'base',\n 'blockquote',\n 'body',\n 'dd',\n 'details',\n 'dialog',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'li',\n 'link',\n 'main',\n 'meta',\n 'nav',\n 'noscript',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'pre',\n 'script',\n 'search',\n 'section',\n 'select',\n 'style',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'ul',\n]);\n\n/**\n * Non-visual metadata and resource elements. These produce no inline rendered\n * content, so in pretty mode they always start on their own line \u2014 even inside\n * a parent with mixed text/element children, where the inline heuristic would\n * otherwise keep all siblings on a single line. (`base`/`link`/`meta` are void;\n * `script`/`style`/`title` render no visible text.)\n */\nconst ALWAYS_BLOCK_ELEMENTS = new Set([\n 'base',\n 'link',\n 'meta',\n 'script',\n 'style',\n 'title',\n]);\n\n/**\n * HTML/SVG boolean attributes.\n * When present with a truthy value, render as a minimized attribute.\n */\nconst BOOLEAN_ATTRS = new Set([\n 'allowfullscreen',\n 'async',\n 'autofocus',\n 'autoplay',\n 'capture',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'formnovalidate',\n 'hidden',\n 'inert',\n 'ismap',\n 'itemscope',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected',\n]);\n\n/** JSX prop name -> HTML attribute name. */\nconst PROP_TO_ATTR: Record<string, string> = {\n acceptCharset: 'accept-charset',\n autoCapitalize: 'autocapitalize',\n autoComplete: 'autocomplete',\n autoFocus: 'autofocus',\n autoPlay: 'autoplay',\n charSet: 'charset',\n className: 'class',\n colSpan: 'colspan',\n contentEditable: 'contenteditable',\n crossOrigin: 'crossorigin',\n dateTime: 'datetime',\n disableRemotePlayback: 'disableremoteplayback',\n encType: 'enctype',\n formAction: 'formaction',\n formEncType: 'formenctype',\n formMethod: 'formmethod',\n formNoValidate: 'formnovalidate',\n formTarget: 'formtarget',\n frameBorder: 'frameborder',\n hrefLang: 'hreflang',\n htmlFor: 'for',\n httpEquiv: 'http-equiv',\n inputMode: 'inputmode',\n itemProp: 'itemprop',\n itemRef: 'itemref',\n itemScope: 'itemscope',\n itemType: 'itemtype',\n maxLength: 'maxlength',\n mediaGroup: 'mediagroup',\n minLength: 'minlength',\n noModule: 'nomodule',\n noValidate: 'novalidate',\n playsInline: 'playsinline',\n readOnly: 'readonly',\n referrerPolicy: 'referrerpolicy',\n rowSpan: 'rowspan',\n spellCheck: 'spellcheck',\n srcDoc: 'srcdoc',\n srcLang: 'srclang',\n srcSet: 'srcset',\n tabIndex: 'tabindex',\n useMap: 'usemap',\n\n // SVG presentation attributes (camelCase -> kebab-case).\n clipPath: 'clip-path',\n clipRule: 'clip-rule',\n colorInterpolation: 'color-interpolation',\n colorInterpolationFilters: 'color-interpolation-filters',\n dominantBaseline: 'dominant-baseline',\n fillOpacity: 'fill-opacity',\n fillRule: 'fill-rule',\n floodColor: 'flood-color',\n floodOpacity: 'flood-opacity',\n imageRendering: 'image-rendering',\n letterSpacing: 'letter-spacing',\n lightingColor: 'lighting-color',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n paintOrder: 'paint-order',\n pointerEvents: 'pointer-events',\n shapeRendering: 'shape-rendering',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strokeDasharray: 'stroke-dasharray',\n strokeDashoffset: 'stroke-dashoffset',\n strokeLinecap: 'stroke-linecap',\n strokeLinejoin: 'stroke-linejoin',\n strokeMiterlimit: 'stroke-miterlimit',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n textAnchor: 'text-anchor',\n textDecoration: 'text-decoration',\n textRendering: 'text-rendering',\n transformOrigin: 'transform-origin',\n vectorEffect: 'vector-effect',\n wordSpacing: 'word-spacing',\n writingMode: 'writing-mode',\n};\n\nconst AMP = '&';\nconst LT = '<';\nconst GT = '>';\nconst QUOT = '"';\n\n// Shared empty object reused as the per-component context map when no contexts\n// have ever been pushed. Components only ever read from this map, so sharing is\n// safe and avoids a per-render allocation in the common case.\nconst EMPTY_GLOBAL_CTX: Record<string, any> = {};\n\n/** Returns `true` when `value` is neither `null` nor `undefined`. */\nfunction isDef<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nfunction escapeHtml(str: string): string {\n let result = '';\n let last = 0;\n for (let i = 0; i < str.length; i++) {\n const ch = str.charCodeAt(i);\n let escaped: string | undefined;\n if (ch === 38) escaped = AMP;\n else if (ch === 60) escaped = LT;\n else if (ch === 62) escaped = GT;\n if (escaped) {\n result += str.slice(last, i) + escaped;\n last = i + 1;\n }\n }\n if (last === 0) return str;\n return result + str.slice(last);\n}\n\nfunction escapeAttr(str: string): string {\n let result = '';\n let last = 0;\n for (let i = 0; i < str.length; i++) {\n const ch = str.charCodeAt(i);\n let escaped: string | undefined;\n if (ch === 38) escaped = AMP;\n else if (ch === 34) escaped = QUOT;\n else if (ch === 60) escaped = LT;\n else if (ch === 62) escaped = GT;\n if (escaped) {\n result += str.slice(last, i) + escaped;\n last = i + 1;\n }\n }\n if (last === 0) return str;\n return result + str.slice(last);\n}\n\nconst STYLE_KEY_CACHE = new Map<string, string>();\nconst UPPERCASE_RE = /[A-Z]/g;\n\nfunction toKebabCase(key: string): string {\n let cached = STYLE_KEY_CACHE.get(key);\n if (cached === undefined) {\n cached = key.replace(UPPERCASE_RE, (m) => '-' + m.toLowerCase());\n STYLE_KEY_CACHE.set(key, cached);\n }\n return cached;\n}\n\nfunction styleToString(style: Record<string, any>): string {\n let result = '';\n let first = true;\n for (const key in style) {\n const value = style[key];\n if (!isDef(value) || value === '') continue;\n if (first) {\n first = false;\n } else {\n result += ';';\n }\n result += `${toKebabCase(key)}:${value}`;\n }\n return result;\n}\n\nexport interface JsxRenderOptions {\n /** Render mode. `'pretty'` adds newlines around block elements; `'minimal'` outputs compact HTML. Default: `'pretty'`. */\n mode?: 'pretty' | 'minimal';\n /** Additional tag names to treat as block-level elements in pretty mode. */\n blockElements?: string[];\n}\n\n/**\n * Renders a Preact VNode tree to an HTML string.\n */\nexport function renderJsxToString(\n vnode: VNode,\n options?: JsxRenderOptions\n): string {\n const mode = options?.mode ?? 'pretty';\n const isPretty = mode === 'pretty';\n // In minimal mode `blockSet` is unused (the `isPretty` guard short-circuits\n // any `.has()` call). In pretty mode without custom block elements, reuse the\n // module-level Set instead of allocating a copy.\n let blockSet: ReadonlySet<string> = DEFAULT_BLOCK_ELEMENTS;\n if (isPretty && options?.blockElements && options.blockElements.length > 0) {\n const merged = new Set(DEFAULT_BLOCK_ELEMENTS);\n for (const el of options.blockElements) {\n merged.add(el);\n }\n blockSet = merged;\n }\n\n // Context stacks: context.__c (id) -> value[]\n let contextStacks: Map<string, any[]> | undefined;\n\n // Version counter that bumps whenever a context value is pushed or popped.\n // `buildGlobalContext` uses it to skip rebuilding when nothing changed\n // between sibling component renders (the common case).\n let ctxVersion = 0;\n let cachedGlobalCtx: Record<string, any> = EMPTY_GLOBAL_CTX;\n let cachedGlobalCtxVersion = 0;\n\n function pushCtx(contextId: string, value: any) {\n if (!contextStacks) {\n contextStacks = new Map<string, any[]>();\n }\n let stack = contextStacks.get(contextId);\n if (!stack) {\n stack = [];\n contextStacks.set(contextId, stack);\n }\n stack.push(value);\n ctxVersion++;\n }\n\n function popCtx(contextId: string) {\n const stack = contextStacks?.get(contextId);\n if (stack) {\n stack.pop();\n if (stack.length === 0) {\n contextStacks?.delete(contextId);\n }\n }\n ctxVersion++;\n }\n\n /** Builds the __n (global context) map for hooks. */\n function buildGlobalContext(): Record<string, any> {\n if (ctxVersion === cachedGlobalCtxVersion) return cachedGlobalCtx;\n if (!contextStacks || contextStacks.size === 0) {\n cachedGlobalCtx = EMPTY_GLOBAL_CTX;\n cachedGlobalCtxVersion = ctxVersion;\n return cachedGlobalCtx;\n }\n const globalCtx: Record<string, any> = {};\n for (const [contextId, stack] of contextStacks) {\n if (stack.length > 0) {\n // useContext expects provider.props.value and provider.sub().\n globalCtx[contextId] = {\n props: {value: stack[stack.length - 1]},\n sub: noop,\n };\n }\n }\n cachedGlobalCtx = globalCtx;\n cachedGlobalCtxVersion = ctxVersion;\n return globalCtx;\n }\n\n function render(node: any, inline?: boolean): string {\n if (!isDef(node) || typeof node === 'boolean') return '';\n if (typeof node === 'string') return escapeHtml(node);\n if (typeof node === 'number' || typeof node === 'bigint')\n return String(node);\n if (Array.isArray(node)) {\n let out = '';\n for (let i = 0; i < node.length; i++) {\n out += render(node[i], inline);\n }\n return out;\n }\n\n // Must be a VNode-like object.\n if (typeof node !== 'object' || !('type' in node)) return '';\n\n const {type, props} = node;\n\n // Fragment.\n if (type === Fragment) {\n return renderChildren(props?.children);\n }\n\n // Component (function or class).\n if (typeof type === 'function') {\n return renderComponent(node);\n }\n\n // HTML element.\n if (typeof type === 'string') {\n return renderElement(type, props, inline);\n }\n\n return '';\n }\n\n function renderComponent(vnode: VNode): string {\n const {type, props} = vnode;\n const fn = type as Function;\n\n // Detect context Provider.\n // Root.js local JSX runtime: Provider._isProvider === true, Provider._context\n // is the Context object with a _stack array.\n // Preact >=10.27: Provider === Context (same function). `fn.__c` is the\n // context id string (e.g. \"__cC0\").\n // Preact <10.27: Provider._contextRef (mangled `fn.__`) points to the\n // context object which has `__c` (id) and `__` (default value).\n const fnAny = fn as any;\n if (fnAny._isProvider && fnAny._context) {\n const ctx = fnAny._context;\n ctx._stack.push((props as any).value);\n const result = renderChildren(props.children);\n ctx._stack.pop();\n return result;\n }\n let contextId: string | undefined;\n if (typeof fnAny.__c === 'string' && fnAny.__c.startsWith('__cC')) {\n contextId = fnAny.__c;\n } else if (fnAny.__ && typeof fnAny.__ === 'object' && fnAny.__.__c) {\n contextId = fnAny.__.__c;\n }\n if (contextId) {\n pushCtx(contextId, (props as any).value);\n const result = renderChildren(props.children);\n popCtx(contextId);\n return result;\n }\n\n // Detect context Consumer.\n if ((fn as any).contextType) {\n const ctx = (fn as any).contextType;\n const ctxId: string = ctx.__c;\n const stack = contextStacks?.get(ctxId);\n const value =\n stack && stack.length > 0 ? stack[stack.length - 1] : ctx.__;\n if (typeof props.children === 'function') {\n return render(props.children(value));\n }\n return renderChildren(props.children);\n }\n\n // Regular component \u2014 set up a fake component instance so Preact hooks\n // (useContext, useState, useMemo, etc.) work during SSR.\n // Preact's useContext reads from `component.context[context.__c]`.\n const component: any = {\n props,\n context: buildGlobalContext(),\n state: {},\n __v: vnode, // _vnode\n __d: false, // _dirty\n __h: [], // _renderCallbacks\n __s: {}, // _nextState\n __H: null, // _hooks (initialised by hooks addon)\n };\n (vnode as any).__c = component;\n\n // Trigger Preact option hooks so the hooks addon can set currentComponent.\n (preactOptions as any).__b?.(vnode);\n (preactOptions as any).__r?.(vnode);\n\n try {\n // Class component.\n if (fn.prototype && fn.prototype.render) {\n const instance = new (fn as any)(props, component.context);\n instance.__n = component.__n;\n instance.__H = component.__H;\n (vnode as any).__c = instance;\n (preactOptions as any).__r?.(vnode);\n return render(instance.render(instance.props, instance.state));\n }\n\n // Functional component.\n const rendered = fn(props, component.context);\n return render(rendered);\n } finally {\n preactOptions.diffed?.(vnode as any);\n }\n }\n\n function renderElement(\n tag: string,\n props: Record<string, any>,\n inline?: boolean\n ): string {\n // Metadata/resource elements always break onto their own line, even within\n // mixed (text + element) content where the inline heuristic applies, since\n // they render no inline visual output.\n const isBlock =\n isPretty &&\n (ALWAYS_BLOCK_ELEMENTS.has(tag) || (!inline && blockSet.has(tag)));\n const isVoid = VOID_ELEMENTS.has(tag);\n const attrs = renderAttrs(tag, props);\n let result = '<' + tag + attrs + '>';\n\n if (isVoid) {\n if (isBlock) result += '\\n';\n return result;\n }\n\n let inner = '';\n if (isDef(props?.dangerouslySetInnerHTML?.__html)) {\n inner = props.dangerouslySetInnerHTML.__html;\n } else if (isDef(props?.children)) {\n inner = renderChildren(props.children);\n } else if (tag === 'textarea' && props) {\n // For <textarea>, render value/defaultValue as text content since\n // browsers ignore the value attribute on textarea elements.\n const textVal = props.value ?? props.defaultValue;\n if (isDef(textVal)) {\n inner = escapeHtml(String(textVal));\n }\n }\n\n if (isBlock) {\n // When inner content contains block children (indicated by newlines),\n // add a newline after the opening tag so content starts on its own line.\n // Exempt raw-content elements (pre, textarea, script, style) where\n // newlines are literal text, not block-child indicators.\n const hasBlockChildren =\n !RAW_CONTENT_ELEMENTS.has(tag) && inner.includes('\\n');\n if (hasBlockChildren) {\n result += '\\n' + inner + '</' + tag + '>\\n';\n } else {\n result += inner + '</' + tag + '>\\n';\n }\n } else {\n result += inner + '</' + tag + '>';\n }\n\n return result;\n }\n\n function renderAttrs(tag: string, props: Record<string, any>): string {\n if (!props) return '';\n let result = '';\n for (const key in props) {\n if (\n key === 'children' ||\n key === 'dangerouslySetInnerHTML' ||\n key === 'key' ||\n key === 'ref' ||\n key === '__self' ||\n key === '__source'\n ) {\n continue;\n }\n // Skip value/defaultValue on textarea \u2014 rendered as text content.\n if (tag === 'textarea' && (key === 'value' || key === 'defaultValue')) {\n continue;\n }\n\n let value = props[key];\n if (!isDef(value)) continue;\n // Skip function-valued props such as event handlers (e.g. onClick={fn}):\n // client-side handler functions can't be serialized to HTML. String\n // values like <select onChange=\"...\"> are inline HTML event attributes,\n // so they are preserved and rendered as-is.\n if (typeof value === 'function') continue;\n\n const attrName = PROP_TO_ATTR[key] || key;\n\n // For boolean attributes, `false` removes the attribute. For all other\n // attributes, `false` is stringified (e.g. data-foo=\"false\").\n if (value === false && BOOLEAN_ATTRS.has(attrName)) continue;\n\n // Boolean attributes are minimized when true; other attributes use\n // explicit string serialization (e.g. id=\"true\", data-foo=\"true\").\n if (value === true && BOOLEAN_ATTRS.has(attrName)) {\n result += ' ' + attrName;\n continue;\n }\n\n // Style objects.\n if (key === 'style' && typeof value === 'object') {\n value = styleToString(value);\n if (!value) continue;\n }\n\n result += ' ' + attrName + '=\"' + escapeAttr(String(value)) + '\"';\n }\n return result;\n }\n\n /**\n * Returns true if a child node is a text-like value (string, number).\n */\n function isTextNode(child: any): boolean {\n if (!isDef(child) || typeof child === 'boolean') return false;\n return (\n typeof child === 'string' ||\n typeof child === 'number' ||\n typeof child === 'bigint'\n );\n }\n\n /**\n * Checks if an array of children contains a mix of text nodes and elements.\n * When mixed, block elements should render inline to avoid breaking text flow.\n */\n function hasMixedContent(children: any[]): boolean {\n let hasText = false;\n let hasElement = false;\n for (const child of children) {\n if (isTextNode(child)) {\n hasText = true;\n } else if (isDef(child) && typeof child === 'object' && 'type' in child) {\n hasElement = true;\n }\n if (hasText && hasElement) return true;\n }\n return false;\n }\n\n function renderChildren(children: any): string {\n if (!isDef(children)) return '';\n if (Array.isArray(children)) {\n const inline = isPretty && hasMixedContent(children);\n let out = '';\n for (let i = 0; i < children.length; i++) {\n out += render(children[i], inline);\n }\n return out;\n }\n return render(children);\n }\n\n return render(vnode);\n}\n\nfunction noop() {}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["vnode"]
|
|
7
|
+
}
|
package/dist/chunk-XSNCF7WU.js
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/core/plugin.ts"],
|
|
4
|
+
"sourcesContent": ["import {ViteDevServer, PluginOption as VitePlugin} from 'vite';\nimport {RootConfig} from './config.js';\nimport {Pod, PodFactory} from './pod.js';\nimport {NextFunction, Request, Response, Server} from './types.js';\n\ntype MaybePromise<T> = T | Promise<T>;\n\ntype PreBuildHook = (rootConfig: RootConfig) => MaybePromise<void>;\n\nexport interface PostBuildOptions {\n /** Whether the build was SSR-only (no SSG pre-rendering). */\n ssrOnly?: boolean;\n}\n\ntype PostBuildHook = (\n rootConfig: RootConfig,\n options?: PostBuildOptions\n) => MaybePromise<void>;\n\nexport type ConfigureServerHook = (\n server: Server,\n options: ConfigureServerOptions\n) => MaybePromise<void> | MaybePromise<() => void>;\n\nexport interface ConfigureServerOptions {\n type: 'dev' | 'preview' | 'prod';\n rootConfig: RootConfig;\n}\n\nexport interface PluginHooks {\n /**\n * Hook that runs before the build starts.\n */\n preBuild?: PreBuildHook;\n\n /**\n * Hook that runs after the build completes.\n */\n postBuild?: PostBuildHook;\n\n /**\n * Post-render hook that's called before the HTML is rendered to the response\n * object. If a string is returned from this hook, it will replace the\n * rendered HTML.\n */\n preRender?: (html: string) => void | MaybePromise<string>;\n}\n\nexport interface Plugin {\n [key: string]: any;\n /** The name of the plugin. */\n name?: string;\n /**\n * Configures the root.js express server. Any middleware defined by the plugin\n * will be added to the server first. If a callback fn is returned, it will\n * be called after the root.js middlewares are added.\n */\n configureServer?: ConfigureServerHook;\n /**\n * Hook for file changes.\n */\n onFileChange?: (\n eventName: 'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir',\n path: string\n ) => void;\n /**\n * Returns a list of deps to bundle for ssr. The files will be bundled and\n * output to `dist/server/`. The return value should be a map of\n * `{output filename => input filepath}`.\n *\n * E.g. a value of `{foo: 'path/to/bar.js'}` will output `dist/server/foo.js`.\n *\n * @experimental This config is subject to change to be incorporated into a\n * broader config option called \"ssr\" or \"ssrOptions\".\n */\n ssrInput?: () => {[entryAlias: string]: string};\n /** Adds vite plugins. */\n vitePlugins?: VitePlugin[];\n /** Plugin lifecycle callback hooks. */\n hooks?: PluginHooks;\n /** Custom 404 handler. */\n handle404?: (\n req: Request,\n res: Response,\n next: NextFunction\n ) => void | Promise<void>;\n\n /**\n * Registers a pod (a mini root.js site) that gets merged into the parent\n * site at dev/build time. A plugin may return a single pod, an array of\n * pods, or a factory that receives the rootConfig.\n */\n pod?: Pod | Pod[] | PodFactory;\n}\n\n/**\n * Runs the pre-hook configureServer method of every plugin, calls a callback\n * function, and then runs the configureServer's post-hook if provided. Plugins\n * provide a post-hook by returning a callback function from configureServer.\n */\nexport async function configureServerPlugins(\n server: Server,\n callback: () => Promise<void>,\n plugins: Plugin[],\n options: ConfigureServerOptions\n) {\n const postHooks: Array<() => void> = [];\n const viteServer = server.get('viteServer') as ViteDevServer;\n\n // Call the `configureServer()` method for each plugin.\n for (const plugin of plugins) {\n if (plugin.configureServer) {\n const postHook = await plugin.configureServer(server, options);\n if (postHook) {\n postHooks.push(postHook);\n }\n }\n\n if (viteServer && plugin.onFileChange) {\n viteServer.watcher.on('all', plugin.onFileChange);\n }\n }\n\n // Register any built-in middleware.\n callback();\n\n // Run any post hooks returned by `plugin.configureServer()`.\n for (const postHook of postHooks) {\n await postHook();\n }\n}\n\nexport function getVitePlugins(plugins: Plugin[]): VitePlugin[] {\n const vitePlugins: VitePlugin[] = [];\n for (const plugin of plugins) {\n if (plugin.vitePlugins) {\n vitePlugins.push(...plugin.vitePlugins);\n }\n }\n return vitePlugins;\n}\n"],
|
|
5
|
+
"mappings": ";AAoGA,eAAsB,uBACpB,QACA,UACA,SACA,SACA;AACA,QAAM,YAA+B,CAAC;AACtC,QAAM,aAAa,OAAO,IAAI,YAAY;AAG1C,aAAW,UAAU,SAAS;AAC5B,QAAI,OAAO,iBAAiB;AAC1B,YAAM,WAAW,MAAM,OAAO,gBAAgB,QAAQ,OAAO;AAC7D,UAAI,UAAU;AACZ,kBAAU,KAAK,QAAQ;AAAA,MACzB;AAAA,IACF;AAEA,QAAI,cAAc,OAAO,cAAc;AACrC,iBAAW,QAAQ,GAAG,OAAO,OAAO,YAAY;AAAA,IAClD;AAAA,EACF;AAGA,WAAS;AAGT,aAAW,YAAY,WAAW;AAChC,UAAM,SAAS;AAAA,EACjB;AACF;AAEO,SAAS,eAAe,SAAiC;AAC9D,QAAM,cAA4B,CAAC;AACnC,aAAW,UAAU,SAAS;AAC5B,QAAI,OAAO,aAAa;AACtB,kBAAY,KAAK,GAAG,OAAO,WAAW;AAAA,IACxC;AAAA,EACF;AACA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { build, BuildOptions } from './build.js';
|
|
2
|
+
import { createPackage } from './create-package.js';
|
|
3
|
+
import { dev, createDevServer } from './dev.js';
|
|
4
|
+
import { preview, createPreviewServer } from './preview.js';
|
|
5
|
+
import { start, createProdServer } from './start.js';
|
|
6
|
+
declare class CliRunner {
|
|
7
|
+
private name;
|
|
8
|
+
private version;
|
|
9
|
+
constructor(name: string, version: string);
|
|
10
|
+
run(argv: string[]): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export { CliRunner, build, BuildOptions, createPackage, dev, createDevServer, preview, createPreviewServer, start, createProdServer, };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type DeployTarget = 'appengine' | 'firebase';
|
|
2
|
+
interface CreatePackageOptions {
|
|
3
|
+
mode?: string;
|
|
4
|
+
out?: string;
|
|
5
|
+
target?: DeployTarget;
|
|
6
|
+
version?: string;
|
|
7
|
+
appYaml?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function createPackage(rootProjectDir?: string, options?: CreatePackageOptions): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Compiles a `.ts` file to `.js`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function bundleTsFile(srcPath: string, outPath: string): Promise<void>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Server } from '../core/types.js';
|
|
2
|
+
export interface DevOptions {
|
|
3
|
+
host?: string;
|
|
4
|
+
version?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function dev(rootProjectDir?: string, options?: DevOptions): Promise<void>;
|
|
7
|
+
export declare function createDevServer(options?: {
|
|
8
|
+
rootDir?: string;
|
|
9
|
+
port?: number;
|
|
10
|
+
}): Promise<Server>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface GaeDeployOptions {
|
|
2
|
+
/** GCP project id. */
|
|
3
|
+
project?: string;
|
|
4
|
+
/** Prefix to append to the version. */
|
|
5
|
+
prefix?: string;
|
|
6
|
+
/** Whether to divert traffic to the new version. */
|
|
7
|
+
promote?: boolean;
|
|
8
|
+
/** If provided, verifies that the given URL path returns a 200 response. */
|
|
9
|
+
healthcheckUrl?: string;
|
|
10
|
+
/** If provided, the latest N versions are preserved, all others are deleted */
|
|
11
|
+
maxVersions?: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function gaeDeploy(appDir: string, options?: GaeDeployOptions): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Returns whether the App Engine service succeeds in handling a health check
|
|
16
|
+
* request.
|
|
17
|
+
*/
|
|
18
|
+
export declare function testHealth(project: string, service: string, version: string, healthcheckUrl: string): Promise<boolean>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Server } from '../core/types.js';
|
|
2
|
+
export interface PreviewOptions {
|
|
3
|
+
host?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function preview(rootProjectDir?: string, options?: PreviewOptions): Promise<void>;
|
|
6
|
+
export declare function createPreviewServer(options: {
|
|
7
|
+
rootDir: string;
|
|
8
|
+
}): Promise<Server>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/** Registers the `root secrets …` command group. */
|
|
3
|
+
export declare function registerSecretsCommands(program: Command): void;
|
|
4
|
+
/**
|
|
5
|
+
* Runs a blocking secrets sync at the start of `root dev` so managed values are
|
|
6
|
+
* live before the server starts. Never throws and never blocks longer than
|
|
7
|
+
* {@link DEV_SYNC_TIMEOUT_MS}; failures degrade to a notice so dev still starts.
|
|
8
|
+
*/
|
|
9
|
+
export declare function syncSecretsOnDev(rootDir: string): Promise<void>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Server } from '../core/types.js';
|
|
2
|
+
export interface StartOptions {
|
|
3
|
+
host?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function start(rootProjectDir?: string, options?: StartOptions): Promise<void>;
|
|
6
|
+
export declare function createProdServer(options: {
|
|
7
|
+
rootDir: string;
|
|
8
|
+
}): Promise<Server>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { StartupTask } from './startup-tasks.js';
|
|
2
|
+
/**
|
|
3
|
+
* Startup task that checks whether a newer version of `@blinkk/root` has been
|
|
4
|
+
* published to npm and, if so, prints an update notice. Throttled to run at
|
|
5
|
+
* most once per day.
|
|
6
|
+
*/
|
|
7
|
+
export declare const checkVersionTask: StartupTask;
|
|
8
|
+
/**
|
|
9
|
+
* Returns true if `latest` is a higher semantic version than `current`.
|
|
10
|
+
* Pre-release identifiers are ignored.
|
|
11
|
+
*/
|
|
12
|
+
export declare function isNewerVersion(current: string, latest: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Returns true if `version` is an alpha, beta, or rc pre-release build, e.g.
|
|
15
|
+
* `3.1.0-rc.1`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isPrerelease(version: string): boolean;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface StartupTaskContext {
|
|
2
|
+
/** Absolute path to the root project directory. */
|
|
3
|
+
rootDir: string;
|
|
4
|
+
/** Currently installed version of the `@blinkk/root` package. */
|
|
5
|
+
version?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface StartupTask {
|
|
8
|
+
/**
|
|
9
|
+
* Unique id for the task. Used as the persistence key for the last run time,
|
|
10
|
+
* so it must remain stable across releases.
|
|
11
|
+
*/
|
|
12
|
+
name: string;
|
|
13
|
+
/**
|
|
14
|
+
* Minimum time (in milliseconds) that must elapse between runs. When set, the
|
|
15
|
+
* task is skipped if it last ran more recently than this interval. Omit to
|
|
16
|
+
* run on every startup.
|
|
17
|
+
*/
|
|
18
|
+
throttle?: number;
|
|
19
|
+
/**
|
|
20
|
+
* Optional predicate evaluated before the throttle check. When it returns
|
|
21
|
+
* false the task is skipped entirely (and its throttle is left untouched).
|
|
22
|
+
* Useful for opt-out flags, e.g. an env var that disables the task.
|
|
23
|
+
*/
|
|
24
|
+
enabled?: (ctx: StartupTaskContext) => boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Task logic. Thrown errors are swallowed by the runner so that a failing
|
|
27
|
+
* startup task never prevents `root` commands from starting.
|
|
28
|
+
*/
|
|
29
|
+
run: (ctx: StartupTaskContext) => Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Runs all registered startup tasks, honoring each task's throttle interval.
|
|
33
|
+
*
|
|
34
|
+
* Tasks are best-effort: failures are swallowed and never block startup. The
|
|
35
|
+
* last run time of each task is persisted to the user's home directory so that
|
|
36
|
+
* throttled tasks (e.g. the version check) run at most once per interval across
|
|
37
|
+
* separate `root` invocations.
|
|
38
|
+
*/
|
|
39
|
+
export declare function runStartupTasks(ctx: StartupTaskContext): Promise<void>;
|
package/dist/cli.js
CHANGED
|
@@ -8,10 +8,10 @@ import {
|
|
|
8
8
|
dev,
|
|
9
9
|
preview,
|
|
10
10
|
start
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-URG2INLL.js";
|
|
12
12
|
import "./chunk-6P3B7ZXL.js";
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-6NBKAR5Y.js";
|
|
14
|
+
import "./chunk-7PSEEE6C.js";
|
|
15
15
|
import "./chunk-XSNCF7WU.js";
|
|
16
16
|
export {
|
|
17
17
|
CliRunner,
|
|
@@ -24,4 +24,4 @@ export {
|
|
|
24
24
|
preview,
|
|
25
25
|
start
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=cli.js.map
|
|
27
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ComponentChildren, FunctionalComponent } from 'preact';
|
|
2
|
+
export type BodyProps = preact.JSX.HTMLAttributes<HTMLBodyElement> & {
|
|
3
|
+
children?: ComponentChildren;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* The `<Body>` component can be used to update attrs in the `<body>` tag.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
*
|
|
10
|
+
* ```tsx
|
|
11
|
+
* <Body className="body">
|
|
12
|
+
* <h1>Hello world</h1>
|
|
13
|
+
* </Body>
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Output:
|
|
17
|
+
*
|
|
18
|
+
* ```html
|
|
19
|
+
* <body class="body">
|
|
20
|
+
* <h1>Hello world</h1>
|
|
21
|
+
* </body>
|
|
22
|
+
*/
|
|
23
|
+
export declare const Body: FunctionalComponent<BodyProps>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ComponentChildren, FunctionalComponent } from 'preact';
|
|
2
|
+
export type HeadProps = preact.JSX.HTMLAttributes<HTMLHeadElement> & {
|
|
3
|
+
children?: ComponentChildren;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* The <Head> component can be used for injecting elements into the HTML head
|
|
7
|
+
* tag from any part of a page. The <Head> can be added via any component or
|
|
8
|
+
* sub-component and will automatically be hoisted to the `<head>` element.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
*
|
|
12
|
+
* ```tsx
|
|
13
|
+
* <Head>
|
|
14
|
+
* <link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
15
|
+
* </Head>
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare const Head: FunctionalComponent<HeadProps>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ComponentChildren, FunctionalComponent } from 'preact';
|
|
2
|
+
export interface HtmlContext {
|
|
3
|
+
htmlAttrs: preact.JSX.HTMLAttributes<HTMLHtmlElement>;
|
|
4
|
+
headAttrs: preact.JSX.HTMLAttributes<HTMLHeadElement>;
|
|
5
|
+
headComponents: ComponentChildren[];
|
|
6
|
+
bodyAttrs: preact.JSX.HTMLAttributes<HTMLBodyElement>;
|
|
7
|
+
scriptDeps: Array<preact.JSX.ScriptHTMLAttributes<HTMLScriptElement>>;
|
|
8
|
+
}
|
|
9
|
+
export declare const HTML_CONTEXT: import("preact").Context<HtmlContext | null>;
|
|
10
|
+
export type HtmlProps = preact.JSX.HTMLAttributes<HTMLHtmlElement> & {
|
|
11
|
+
children?: ComponentChildren;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* The `<Html>` component can be used to update attrs in the `<html>` tag.
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
*
|
|
18
|
+
* ```tsx
|
|
19
|
+
* <Html lang="en-US">
|
|
20
|
+
* <h1>Hello world</h1>
|
|
21
|
+
* </Html>
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare const Html: FunctionalComponent<HtmlProps>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FunctionalComponent } from 'preact';
|
|
2
|
+
export type ScriptProps = preact.JSX.HTMLAttributes<HTMLScriptElement> & {
|
|
3
|
+
src?: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* The <Script> component is used for rendering any custom script modules. At
|
|
7
|
+
* the moment, the system only pre-renders and bundles files that are in the
|
|
8
|
+
* `/bundles` folder at the root of the project.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
*
|
|
12
|
+
* ```tsx
|
|
13
|
+
* <Script src="/bundles/main.ts" />
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare const Script: FunctionalComponent<ScriptProps>;
|