Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
export const createDocumentFileChunks = (uidl: ProjectUIDL, options: EntryFileOptions) => {
const { settings, meta, assets, manifest } = uidl.globals
const htmlNode = ASTBuilders.createJSXTag('html')
const headNode = ASTBuilders.createJSXTag('Head')
const bodyNode = ASTBuilders.createJSXTag('body')
const mainNode = ASTBuilders.createJSXTag('Main')
const nextScriptNode = ASTBuilders.createJSXTag('NextScript')
ASTUtils.addChildJSXTag(bodyNode, mainNode)
ASTUtils.addChildJSXTag(bodyNode, nextScriptNode)
ASTUtils.addChildJSXTag(htmlNode, headNode)
ASTUtils.addChildJSXTag(htmlNode, bodyNode)
if (settings.language) {
ASTUtils.addAttributeToJSXTag(htmlNode, 'lang', settings.language)
}
// NOTE: Title is added in per page, not in the layout file
if (manifest) {
const linkTag = ASTBuilders.createJSXTag('link')
ASTUtils.addAttributeToJSXTag(linkTag, 'rel', 'manifest')
ASTUtils.addAttributeToJSXTag(linkTag, 'href', `${options.assetsPrefix}/manifest.json`)
ASTUtils.addChildJSXTag(headNode, linkTag)
}
meta.forEach((metaItem) => {
const metaTag = ASTBuilders.createJSXTag('meta')
export const createDocumentFileChunks = (uidl: ProjectUIDL, options: EntryFileOptions) => {
const { settings, meta, assets, manifest } = uidl.globals
const htmlNode = ASTBuilders.createJSXTag('html')
const headNode = ASTBuilders.createJSXTag('Head')
const bodyNode = ASTBuilders.createJSXTag('body')
const mainNode = ASTBuilders.createJSXTag('Main')
const nextScriptNode = ASTBuilders.createJSXTag('NextScript')
ASTUtils.addChildJSXTag(bodyNode, mainNode)
ASTUtils.addChildJSXTag(bodyNode, nextScriptNode)
ASTUtils.addChildJSXTag(htmlNode, headNode)
ASTUtils.addChildJSXTag(htmlNode, bodyNode)
if (settings.language) {
ASTUtils.addAttributeToJSXTag(htmlNode, 'lang', settings.language)
}
// NOTE: Title is added in per page, not in the layout file
if (manifest) {
const linkTag = ASTBuilders.createJSXTag('link')
ASTUtils.addAttributeToJSXTag(linkTag, 'rel', 'manifest')
ASTUtils.addAttributeToJSXTag(linkTag, 'href', `${options.assetsPrefix}/manifest.json`)
ASTUtils.addChildJSXTag(headNode, linkTag)
}
t.jsxExpressionContainer(
t.objectExpression([
t.objectProperty(
t.identifier('__html'),
t.memberExpression(t.identifier('props'), t.identifier('body'))
),
])
)
)
)
ASTUtils.addChildJSXTag(bodyNode, bodyDiv)
addJSXExpressionContainer(bodyNode, 'props', 'postBodyComponents')
ASTUtils.addChildJSXTag(htmlNode, headNode)
ASTUtils.addChildJSXTag(htmlNode, bodyNode)
return htmlNode
}
export const createRouteRouterTag = (flavour: string, routeJSXDefinitions: types.JSXElement[]) => {
const routerTag = ASTBuilders.createJSXTag('Router')
if (flavour === 'preact') {
routeJSXDefinitions.forEach((route) => ASTUtils.addChildJSXTag(routerTag, route))
return routerTag
}
const divContainer = ASTBuilders.createJSXTag('div')
ASTUtils.addChildJSXTag(routerTag, divContainer)
routeJSXDefinitions.forEach((route) => ASTUtils.addChildJSXTag(divContainer, route))
return routerTag
}
)
bodyDiv.openingElement.attributes.push(
t.jsxAttribute(
t.jsxIdentifier('dangerouslySetInnerHTML'),
t.jsxExpressionContainer(
t.objectExpression([
t.objectProperty(
t.identifier('__html'),
t.memberExpression(t.identifier('props'), t.identifier('body'))
),
])
)
)
)
ASTUtils.addChildJSXTag(bodyNode, bodyDiv)
addJSXExpressionContainer(bodyNode, 'props', 'postBodyComponents')
ASTUtils.addChildJSXTag(htmlNode, headNode)
ASTUtils.addChildJSXTag(htmlNode, bodyNode)
return htmlNode
}
routeJSXDefinitions.forEach((route) => ASTUtils.addChildJSXTag(routerTag, route))
return routerTag
ASTUtils.addAttributeToJSXTag(charSetMetaTag, 'charSet', 'utf-8')
ASTUtils.addChildJSXTag(headNode, charSetMetaTag)
const httpMetaTag = ASTBuilders.createSelfClosingJSXTag('meta')
ASTUtils.addAttributeToJSXTag(httpMetaTag, 'httpEquiv', 'x-ua-compatible')
ASTUtils.addAttributeToJSXTag(httpMetaTag, 'content', 'ie=edge')
ASTUtils.addChildJSXTag(headNode, httpMetaTag)
const viewPortMeta = ASTBuilders.createSelfClosingJSXTag('meta')
ASTUtils.addAttributeToJSXTag(viewPortMeta, 'name', 'viewport')
ASTUtils.addAttributeToJSXTag(
viewPortMeta,
'content',
'width=device-width, initial-scale=1, shrink-to-fit=no'
)
ASTUtils.addChildJSXTag(headNode, viewPortMeta)
addJSXExpressionContainer(bodyNode, 'props', 'preBodyComponents')
ASTUtils.addChildJSXText(noScriptNode, 'This app works best with JavaScript enabled.')
ASTUtils.addAttributeToJSXTag(noScriptNode, 'key', 'noscript')
ASTUtils.addAttributeToJSXTag(noScriptNode, 'id', 'gatsby-noscript')
ASTUtils.addChildJSXTag(bodyNode, noScriptNode)
addSpreadAttributes(htmlNode, 'props', 'htmlAttributes')
addSpreadAttributes(bodyNode, 'props', 'bodyAttributes')
addJSXExpressionContainer(headNode, 'props', 'headComponents')
if (settings.language) {
ASTUtils.addAttributeToJSXTag(htmlNode, 'lang', settings.language)
}
const viewPortMeta = ASTBuilders.createSelfClosingJSXTag('meta')
ASTUtils.addAttributeToJSXTag(viewPortMeta, 'name', 'viewport')
ASTUtils.addAttributeToJSXTag(
viewPortMeta,
'content',
'width=device-width, initial-scale=1, shrink-to-fit=no'
)
ASTUtils.addChildJSXTag(headNode, viewPortMeta)
addJSXExpressionContainer(bodyNode, 'props', 'preBodyComponents')
ASTUtils.addChildJSXText(noScriptNode, 'This app works best with JavaScript enabled.')
ASTUtils.addAttributeToJSXTag(noScriptNode, 'key', 'noscript')
ASTUtils.addAttributeToJSXTag(noScriptNode, 'id', 'gatsby-noscript')
ASTUtils.addChildJSXTag(bodyNode, noScriptNode)
addSpreadAttributes(htmlNode, 'props', 'htmlAttributes')
addSpreadAttributes(bodyNode, 'props', 'bodyAttributes')
addJSXExpressionContainer(headNode, 'props', 'headComponents')
if (settings.language) {
ASTUtils.addAttributeToJSXTag(htmlNode, 'lang', settings.language)
}
ASTBuilders.appendAssetsAST(assets, options, headNode, bodyNode)
meta.forEach((metaItem) => {
const metaTag = ASTBuilders.createJSXTag('meta')
Object.keys(metaItem).forEach((key) => {
const metaValue = UIDLUtils.prefixAssetsPath(options.assetsPrefix, metaItem[key])
ASTUtils.addAttributeToJSXTag(metaTag, key, metaValue)
routes.forEach((routeNode) => {
const pageKey = routeNode.content.value.toString()
const pageDefinition = routeDefinitions.values.find((route) => route.value === pageKey)
const { componentName, navLink } = pageDefinition.pageOptions
const stencilRouteTag = ASTBuilders.createJSXTag('stencil-route')
ASTUtils.addAttributeToJSXTag(stencilRouteTag, 'url', navLink)
if (navLink === '/') {
ASTUtils.addAttributeToJSXTag(stencilRouteTag, 'exact', true)
}
ASTUtils.addAttributeToJSXTag(
stencilRouteTag,
'component',
UIDLUtils.createWebComponentFriendlyName(componentName)
)
ASTUtils.addChildJSXTag(stencilRouteSwitchTag, stencilRouteTag)
})
export const createClassDeclaration = (
routes: UIDLConditionalNode[],
routeDefinitions: UIDLStateDefinition,
t = types
) => {
const stencilRouterTag = ASTBuilders.createJSXTag('stencil-router')
const stencilRouteSwitchTag = ASTBuilders.createJSXTag('stencil-route-switch')
ASTUtils.addChildJSXTag(stencilRouterTag, stencilRouteSwitchTag)
routes.forEach((routeNode) => {
const pageKey = routeNode.content.value.toString()
const pageDefinition = routeDefinitions.values.find((route) => route.value === pageKey)
const { componentName, navLink } = pageDefinition.pageOptions
const stencilRouteTag = ASTBuilders.createJSXTag('stencil-route')
ASTUtils.addAttributeToJSXTag(stencilRouteTag, 'url', navLink)
if (navLink === '/') {
ASTUtils.addAttributeToJSXTag(stencilRouteTag, 'exact', true)
}
ASTUtils.addAttributeToJSXTag(
stencilRouteTag,
'component',
UIDLUtils.createWebComponentFriendlyName(componentName)
)