}\n \n )\n}\n\nconst StaticQuery = props => {\n const { data, query, render, children } = props\n\n return (\n \n {staticQueryData => (\n \n )}\n \n )\n}\n\nconst useStaticQuery = query => {\n if (\n typeof React.useContext !== `function` &&\n process.env.NODE_ENV === `development`\n ) {\n throw new Error(\n `You're likely using a version of React that doesn't support Hooks\\n` +\n `Please update React and ReactDOM to 16.8.0 or later to use the useStaticQuery hook.`\n )\n }\n const context = React.useContext(StaticQueryContext)\n\n // query is a stringified number like `3303882` when wrapped with graphql, If a user forgets\n // to wrap the query in a grqphql, then casting it to a Number results in `NaN` allowing us to\n // catch the misuse of the API and give proper direction\n if (isNaN(Number(query))) {\n throw new Error(`useStaticQuery was called with a string but expects to be called using \\`graphql\\`. Try this:\n\nimport { useStaticQuery, graphql } from 'gatsby';\n\nuseStaticQuery(graphql\\`${query}\\`);\n`)\n }\n\n if (context[query]?.data) {\n return context[query].data\n } else {\n throw new Error(\n `The result of this StaticQuery could not be fetched.\\n\\n` +\n `This is likely a bug in Gatsby and if refreshing the page does not fix it, ` +\n `please open an issue in https://github.com/gatsbyjs/gatsby/issues`\n )\n }\n}\n\nStaticQuery.propTypes = {\n data: PropTypes.object,\n query: PropTypes.string.isRequired,\n render: PropTypes.func,\n children: PropTypes.func,\n}\n\nfunction graphql() {\n throw new Error(\n `It appears like Gatsby is misconfigured. Gatsby related \\`graphql\\` calls ` +\n `are supposed to only be evaluated at compile time, and then compiled away. ` +\n `Unfortunately, something went wrong and the query was left in the compiled code.\\n\\n` +\n `Unless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.`\n )\n}\n\nexport {\n Link,\n withAssetPrefix,\n withPrefix,\n graphql,\n parsePath,\n navigate,\n push, // TODO replace for v3\n replace, // TODO remove replace for v3\n navigateTo, // TODO: remove navigateTo for v3\n useScrollRestoration,\n StaticQueryContext,\n StaticQuery,\n PageRenderer,\n useStaticQuery,\n prefetchPathname,\n}\n","var isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw $TypeError(tryToString(argument) + ' is not a function');\n};\n","const set = require('regenerate')(0x11288);\nset.addRange(0xA66, 0xA6F).addRange(0x11280, 0x11286).addRange(0x1128A, 0x1128D).addRange(0x1128F, 0x1129D).addRange(0x1129F, 0x112A9);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x10450, 0x1047F);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x1E900, 0x1E94B).addRange(0x1E950, 0x1E959).addRange(0x1E95E, 0x1E95F);\nmodule.exports = set;","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","const set = require('regenerate')();\nset.addRange(0x964, 0x965).addRange(0x9E6, 0x9EF).addRange(0xA800, 0xA82C);\nmodule.exports = set;","const set = require('regenerate')(0x16FE0);\nset.addRange(0x17000, 0x187F7).addRange(0x18800, 0x18AFF).addRange(0x18D00, 0x18D08);\nmodule.exports = set;","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","import React, { useState } from \"react\"\n\nimport Osx from \"./tk/osx.mdx\"\nimport Arch from \"./tk/arch.mdx\"\nimport Go from \"./tk/go.mdx\"\nimport Binary from \"./tk/binary.mdx\"\n\nimport JbOsx from \"./jb/osx.mdx\"\nimport JbArch from \"./jb/arch.mdx\"\nimport JbGo from \"./jb/go.mdx\"\nimport JbBinary from \"./jb/binary.mdx\"\n\nexport const Tanka = {\n macOS: ,\n ArchLinux: ,\n Binary: ,\n Go: ,\n}\n\nexport const Jb = {\n macOS: ,\n ArchLinux: ,\n Binary: ,\n Go: ,\n}\n\nexport const PlatformInstall = ({ elems, def }) => {\n const [current, setCurrent] = useState(def)\n\n return (\n
\n
\n {Object.keys(elems).map(e => (\n \n ))}\n
\n
\n {elems[current]}\n
\n
\n )\n}\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","const set = require('regenerate')();\nset.addRange(0x10A80, 0x10A9F);\nmodule.exports = set;","import './src/index.css'\n","module.exports = new Set([\n// Non-binary properties:\n'General_Category', 'Script', 'Script_Extensions',\n// Binary properties:\n'Alphabetic', 'Any', 'ASCII', 'ASCII_Hex_Digit', 'Assigned', 'Bidi_Control', 'Bidi_Mirrored', 'Case_Ignorable', 'Cased', 'Changes_When_Casefolded', 'Changes_When_Casemapped', 'Changes_When_Lowercased', 'Changes_When_NFKC_Casefolded', 'Changes_When_Titlecased', 'Changes_When_Uppercased', 'Dash', 'Default_Ignorable_Code_Point', 'Deprecated', 'Diacritic', 'Emoji', 'Emoji_Component', 'Emoji_Modifier', 'Emoji_Modifier_Base', 'Emoji_Presentation', 'Extended_Pictographic', 'Extender', 'Grapheme_Base', 'Grapheme_Extend', 'Hex_Digit', 'ID_Continue', 'ID_Start', 'Ideographic', 'IDS_Binary_Operator', 'IDS_Trinary_Operator', 'Join_Control', 'Logical_Order_Exception', 'Lowercase', 'Math', 'Noncharacter_Code_Point', 'Pattern_Syntax', 'Pattern_White_Space', 'Quotation_Mark', 'Radical', 'Regional_Indicator', 'Sentence_Terminal', 'Soft_Dotted', 'Terminal_Punctuation', 'Unified_Ideograph', 'Uppercase', 'Variation_Selector', 'White_Space', 'XID_Continue', 'XID_Start']);","// Generated by CoffeeScript 1.12.4\n(function () {\n var isNumber, ratios;\n isNumber = require('lodash.isnumber');\n ratios = {\n \"minor second\": 16 / 15,\n \"major second\": 9 / 8,\n \"minor third\": 6 / 5,\n \"major third\": 4 / 3,\n \"augmented fourth\": Math.sqrt(2),\n \"perfect fifth\": 3 / 2,\n \"minor sixth\": 8 / 5,\n \"golden\": 1.61803398875,\n \"phi\": 1.61803398875,\n \"major sixth\": 5 / 3,\n \"minor seventh\": 16 / 9,\n \"major seventh\": 15 / 8,\n \"octave\": 2,\n \"major tenth\": 5 / 2,\n \"major eleventh\": 8 / 3,\n \"major twelfth\": 3,\n \"double octave\": 4\n };\n module.exports = function (value, ratio) {\n var r;\n if (value == null) {\n value = 0;\n }\n if (ratio == null) {\n ratio = \"golden\";\n }\n if (isNumber(ratio)) {\n r = ratio;\n } else if (ratios[ratio] != null) {\n r = ratios[ratio];\n } else {\n r = ratios['golden'];\n }\n return Math.pow(r, value);\n };\n}).call(this);","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`For all other operating systems, we provide pre-compiled binaries for Tanka at\n`}{`GitHub Releases`}{`.`}
\n
{`Just grab the latest version from there, download it and put somewhere in your\n`}{`$PATH`}{` (e.g. to `}{`/usr/local/bin/tk`}{`)`}
\n
{`Linux, macOS`}
\n
{`For Linux and macOS, download the binary for your architecture, put it somewhere on your `}{`$PATH`}{`, and make it an executable:`}
\n \n \n )\n}\n","import \"core-js/modules/es.regexp.flags.js\";\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT \n * @author Lea Verou \n * @namespace\n * @public\n */\n/**\n * prism-react-renderer:\n * This file has been modified to remove:\n * - globals and window dependency\n * - worker support\n * - highlightAll and other element dependent methods\n * - _.hooks helpers\n * - UMD/node-specific hacks\n * It has also been run through prettier\n */\n\nvar Prism = function () {\n // Private helper vars\n var lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n var uniqueId = 0;\n\n // The grammar object for plaintext\n var plainTextGrammar = {};\n var _ = {\n /**\n * A namespace for utility methods.\n *\n * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n * change or disappear at any time.\n *\n * @namespace\n * @memberof Prism\n */\n util: {\n encode: function encode(tokens) {\n if (tokens instanceof Token) {\n return new Token(tokens.type, encode(tokens.content), tokens.alias);\n } else if (Array.isArray(tokens)) {\n return tokens.map(encode);\n } else {\n return tokens.replace(/&/g, '&').replace(/
} [visited]\n * @returns {T}\n * @template T\n */\n clone: function deepClone(o, visited) {\n visited = visited || {};\n var clone;\n var id;\n switch (_.util.type(o)) {\n case 'Object':\n id = _.util.objId(o);\n if (visited[id]) {\n return visited[id];\n }\n clone = /** @type {Record} */{};\n visited[id] = clone;\n for (var key in o) {\n if (o.hasOwnProperty(key)) {\n clone[key] = deepClone(o[key], visited);\n }\n }\n return (/** @type {any} */clone\n );\n case 'Array':\n id = _.util.objId(o);\n if (visited[id]) {\n return visited[id];\n }\n clone = [];\n visited[id] = clone;\n /** @type {Array} */ /** @type {any} */o.forEach(function (v, i) {\n clone[i] = deepClone(v, visited);\n });\n return (/** @type {any} */clone\n );\n default:\n return o;\n }\n },\n /**\n * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n *\n * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n *\n * @param {Element} element\n * @returns {string}\n */\n getLanguage: function (element) {\n while (element) {\n var m = lang.exec(element.className);\n if (m) {\n return m[1].toLowerCase();\n }\n element = element.parentElement;\n }\n return 'none';\n },\n /**\n * Sets the Prism `language-xxxx` class of the given element.\n *\n * @param {Element} element\n * @param {string} language\n * @returns {void}\n */\n setLanguage: function (element, language) {\n // remove all `language-xxxx` classes\n // (this might leave behind a leading space)\n element.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n // add the new `language-xxxx` class\n // (using `classList` will automatically clean up spaces for us)\n element.classList.add('language-' + language);\n },\n /**\n * Returns whether a given class is active for `element`.\n *\n * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n * given class is just the given class with a `no-` prefix.\n *\n * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n * ancestors have the given class or the negated version of it, then the default activation will be returned.\n *\n * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n * version of it, the class is considered active.\n *\n * @param {Element} element\n * @param {string} className\n * @param {boolean} [defaultActivation=false]\n * @returns {boolean}\n */\n isActive: function (element, className, defaultActivation) {\n var no = 'no-' + className;\n while (element) {\n var classList = element.classList;\n if (classList.contains(className)) {\n return true;\n }\n if (classList.contains(no)) {\n return false;\n }\n element = element.parentElement;\n }\n return !!defaultActivation;\n }\n },\n /**\n * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n *\n * @namespace\n * @memberof Prism\n * @public\n */\n languages: {\n /**\n * The grammar for plain, unformatted text.\n */\n plain: plainTextGrammar,\n plaintext: plainTextGrammar,\n text: plainTextGrammar,\n txt: plainTextGrammar,\n /**\n * Creates a deep copy of the language with the given id and appends the given tokens.\n *\n * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n * will be overwritten at its original position.\n *\n * ## Best practices\n *\n * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n *\n * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n *\n * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n * @param {Grammar} redef The new tokens to append.\n * @returns {Grammar} The new language created.\n * @public\n * @example\n * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n * // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n * // at its original position\n * 'comment': { ... },\n * // CSS doesn't have a 'color' token, so this token will be appended\n * 'color': /\\b(?:red|green|blue)\\b/\n * });\n */\n extend: function (id, redef) {\n var lang = _.util.clone(_.languages[id]);\n for (var key in redef) {\n lang[key] = redef[key];\n }\n return lang;\n },\n /**\n * Inserts tokens _before_ another token in a language definition or any other grammar.\n *\n * ## Usage\n *\n * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n * in HTML through ``\nconst INITIAL_IFRAME_CONTENT = ` ${CLEAR_PADDING} `\n\nconst IframeWrapper = ({ children, style }) => {\n const [containerHeight, setHeight] = useState()\n return (\n \n )\n}\n\nconst NormalWrapper = ({ children, style }) => {\n return (\n
{`On macOS, Jsonnet Bundler is best installed using `}{`brew`}{`:`}
\n
{`$ brew install jsonnet-bundler`}
\n
{`This downloads the most recent version of Jsonnet Bundler and installs it.`} {`\n`}{`Also, Jsonnet Bundler is automatically kept up to date as part of `}{`brew upgrade`}{`.`}
\n)\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","const set = require('regenerate')(0x2B, 0x7C, 0x7E, 0xAC, 0xB1, 0xD7, 0xF7, 0x3F6, 0x2044, 0x2052, 0x2118, 0x214B, 0x21A0, 0x21A3, 0x21A6, 0x21AE, 0x21D2, 0x21D4, 0x237C, 0x25B7, 0x25C1, 0x266F, 0xFB29, 0xFE62, 0xFF0B, 0xFF5C, 0xFF5E, 0xFFE2, 0x1D6C1, 0x1D6DB, 0x1D6FB, 0x1D715, 0x1D735, 0x1D74F, 0x1D76F, 0x1D789, 0x1D7A9, 0x1D7C3);\nset.addRange(0x3C, 0x3E).addRange(0x606, 0x608).addRange(0x207A, 0x207C).addRange(0x208A, 0x208C).addRange(0x2140, 0x2144).addRange(0x2190, 0x2194).addRange(0x219A, 0x219B).addRange(0x21CE, 0x21CF).addRange(0x21F4, 0x22FF).addRange(0x2320, 0x2321).addRange(0x239B, 0x23B3).addRange(0x23DC, 0x23E1).addRange(0x25F8, 0x25FF).addRange(0x27C0, 0x27C4).addRange(0x27C7, 0x27E5).addRange(0x27F0, 0x27FF).addRange(0x2900, 0x2982).addRange(0x2999, 0x29D7).addRange(0x29DC, 0x29FB).addRange(0x29FE, 0x2AFF).addRange(0x2B30, 0x2B44).addRange(0x2B47, 0x2B4C).addRange(0xFE64, 0xFE66).addRange(0xFF1C, 0xFF1E).addRange(0xFFE9, 0xFFEC).addRange(0x1EEF0, 0x1EEF1);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x1980, 0x19AB).addRange(0x19B0, 0x19C9).addRange(0x19D0, 0x19DA).addRange(0x19DE, 0x19DF);\nmodule.exports = set;","'use strict';\n\nvar matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\nmodule.exports = function (str) {\n if (typeof str !== 'string') {\n throw new TypeError('Expected a string');\n }\n return str.replace(matchOperatorsRe, '\\\\$&');\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.codeRenderer = codeRenderer;\nexports[\"default\"] = createRenderer;\nvar _marked = _interopRequireDefault(require(\"marked\"));\nvar _he = _interopRequireDefault(require(\"he\"));\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\nfunction codeRenderer(tracker, options) {\n function CodeComponent(props) {\n var children;\n try {\n // eslint-disable-next-line react/no-danger-with-children\n children = options.createElement('code', {\n className: \"language-\".concat(props.language),\n dangerouslySetInnerHTML: options.highlight ? {\n __html: options.highlight(props.language, props.code)\n } : null\n }, options.highlight ? null : props.code);\n } catch (e) {\n // eslint-disable-next-line\n console.warn(\"\".concat(props.language, \" is not supported by your defined highlighter.\"));\n children = options.createElement('code', null, props.code);\n }\n return options.createElement('pre', null, children);\n }\n return function (code, language) {\n // eslint-disable-next-line no-plusplus, no-param-reassign\n var elementId = tracker.nextElementId++; // eslint-disable-next-line no-param-reassign\n\n tracker.elements[elementId] = options.createElement(options.elements && options.elements.code || CodeComponent, {\n key: elementId,\n code: code,\n language: language\n });\n tracker.tree.push(tracker.elements[elementId]);\n return \"{{\".concat(elementId, \"}}\");\n };\n}\nfunction createRenderer(tracker, options) {\n var overrides = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var renderer = new _marked[\"default\"].Renderer();\n function getTocPosition(toc, level) {\n var currentLevel = toc.children; // eslint-disable-next-line no-constant-condition\n\n while (true) {\n if (!currentLevel.length || currentLevel[currentLevel.length - 1].level === level) {\n return currentLevel;\n }\n currentLevel = currentLevel[currentLevel.length - 1].children;\n }\n }\n function populateInlineContent() {\n var content = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var contentArray = content.split(/(\\{\\{.*?\\}\\})/);\n var extractedElements = contentArray.map(function (text) {\n var elementIdMatch = text.match(/\\{\\{(.*)\\}\\}/);\n if (elementIdMatch) {\n tracker.tree.splice(tracker.tree.indexOf(tracker.elements[elementIdMatch[1]]), 1);\n return tracker.elements[elementIdMatch[1]];\n }\n if (text !== '') {\n return _he[\"default\"].decode(text);\n }\n return null;\n });\n return extractedElements;\n }\n function addElement(tag) {\n var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var children = arguments.length > 2 ? arguments[2] : undefined;\n var type = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : tag;\n // eslint-disable-next-line no-plusplus, no-param-reassign\n var elementId = tracker.nextElementId++;\n var inlineContent = null;\n var elementType = options.elements && options.elements[type];\n if (children) {\n inlineContent = Array.isArray(children) ? children.map(populateInlineContent) : populateInlineContent(children);\n } // eslint-disable-next-line no-param-reassign\n\n tracker.elements[elementId] = options.createElement(elementType || tag, Object.assign({\n key: elementId\n }, props, elementType ? {\n context: tracker.context\n } : {}), inlineContent);\n tracker.tree.push(tracker.elements[elementId]);\n return \"{{\".concat(elementId, \"}}\");\n }\n renderer.code = overrides.code || codeRenderer(tracker, options);\n renderer.html = overrides.html || function (html) {\n // eslint-disable-next-line no-plusplus, no-param-reassign\n var elementId = tracker.nextElementId++;\n tracker.tree.push(options.createElement('div', {\n key: elementId,\n dangerouslySetInnerHTML: {\n __html: html\n }\n }));\n };\n renderer.paragraph = overrides.paragraph || function (text) {\n return addElement('p', null, text);\n };\n renderer.blockquote = overrides.blockquote || function (text) {\n return addElement('blockquote', null, text);\n };\n renderer.link = overrides.link || function (href, title, text) {\n return addElement('a', {\n href: href,\n title: title\n }, text);\n };\n renderer.br = overrides.br || function () {\n return addElement('br');\n };\n renderer.hr = overrides.hr || function () {\n return addElement('hr');\n };\n renderer.strong = overrides.strong || function (text) {\n return addElement('strong', null, text);\n };\n renderer.del = overrides.del || function (text) {\n return addElement('del', null, text);\n };\n renderer.em = overrides.em || function (text) {\n return addElement('em', null, text);\n };\n renderer.heading = overrides.heading || function (text, level) {\n // eslint-disable-next-line no-param-reassign\n tracker.currentId = tracker.currentId.slice(0, level - 1);\n tracker.currentId.push(text.replace(/\\s/g, '-').toLowerCase());\n var id = tracker.currentId.join('-');\n var lastToc = tracker.toc[tracker.toc.length - 1];\n if (!lastToc || lastToc.level > level) {\n tracker.toc.push({\n id: id,\n title: text,\n level: level,\n children: []\n });\n } else {\n var tocPosition = getTocPosition(lastToc, level);\n tocPosition.push({\n id: id,\n title: text,\n level: level,\n children: []\n });\n }\n return addElement(\"h\".concat(level), {\n id: id\n }, text);\n };\n renderer.list = overrides.list || function (body, ordered) {\n return addElement(ordered ? 'ol' : 'ul', null, body);\n };\n renderer.listitem = overrides.listitem || function (text) {\n return addElement('li', null, text);\n };\n renderer.table = overrides.table || function (header, body) {\n return addElement('table', null, [addElement('thead', null, header), addElement('tbody', null, body)]);\n };\n renderer.thead = overrides.thead || function (content) {\n return addElement('thead', null, content);\n };\n renderer.tbody = overrides.tbody || function (content) {\n return addElement('tbody', null, content);\n };\n renderer.tablerow = overrides.tablerow || function (content) {\n return addElement('tr', null, content);\n };\n renderer.tablecell = overrides.tablecell || function (content, flag) {\n var tag = flag.header ? 'th' : 'td';\n return addElement(tag, {\n className: flag.align ? \"text-\".concat(flag.align) : undefined\n }, content);\n };\n renderer.codespan = overrides.codespan || function (text) {\n return addElement('code', null, text, 'codespan');\n };\n renderer.image = overrides.image || function (href, title, text) {\n return addElement('img', {\n src: href,\n alt: text\n });\n };\n return renderer;\n}","const set = require('regenerate')(0x11D3A);\nset.addRange(0x11D00, 0x11D06).addRange(0x11D08, 0x11D09).addRange(0x11D0B, 0x11D36).addRange(0x11D3C, 0x11D3D).addRange(0x11D3F, 0x11D47).addRange(0x11D50, 0x11D59);\nmodule.exports = set;","const set = require('regenerate')(0x10C7, 0x10CD, 0x2D27, 0x2D2D);\nset.addRange(0x10A0, 0x10C5).addRange(0x10D0, 0x10FF).addRange(0x1C90, 0x1CBA).addRange(0x1CBD, 0x1CBF).addRange(0x2D00, 0x2D25);\nmodule.exports = set;","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","const set = require('regenerate')(0x20, 0x85);\nset.addRange(0x9, 0xD).addRange(0x200E, 0x200F).addRange(0x2028, 0x2029);\nmodule.exports = set;","'use strict';\n\nconst generate = require('regjsgen').generate;\nconst parse = require('regjsparser').parse;\nconst regenerate = require('regenerate');\nconst unicodeMatchProperty = require('unicode-match-property-ecmascript');\nconst unicodeMatchPropertyValue = require('unicode-match-property-value-ecmascript');\nconst iuMappings = require('./data/iu-mappings.js');\nconst ESCAPE_SETS = require('./data/character-class-escape-sets.js');\n\n// Prepare a Regenerate set containing all code points, used for negative\n// character classes (if any).\nconst UNICODE_SET = regenerate().addRange(0x0, 0x10FFFF);\n// Without the `u` flag, the range stops at 0xFFFF.\n// https://mths.be/es6#sec-pattern-semantics\nconst BMP_SET = regenerate().addRange(0x0, 0xFFFF);\n\n// Prepare a Regenerate set containing all code points that are supposed to be\n// matched by `/./u`. https://mths.be/es6#sec-atom\nconst DOT_SET_UNICODE = UNICODE_SET.clone() // all Unicode code points\n.remove(\n// minus `LineTerminator`s (https://mths.be/es6#sec-line-terminators):\n0x000A,\n// Line Feed \n0x000D,\n// Carriage Return \n0x2028,\n// Line Separator \n0x2029 // Paragraph Separator \n);\n\nconst getCharacterClassEscapeSet = (character, unicode, ignoreCase) => {\n if (unicode) {\n if (ignoreCase) {\n return ESCAPE_SETS.UNICODE_IGNORE_CASE.get(character);\n }\n return ESCAPE_SETS.UNICODE.get(character);\n }\n return ESCAPE_SETS.REGULAR.get(character);\n};\nconst getUnicodeDotSet = dotAll => {\n return dotAll ? UNICODE_SET : DOT_SET_UNICODE;\n};\nconst getUnicodePropertyValueSet = (property, value) => {\n const path = value ? \"\".concat(property, \"/\").concat(value) : \"Binary_Property/\".concat(property);\n try {\n return require(\"regenerate-unicode-properties/\".concat(path, \".js\"));\n } catch (exception) {\n throw new Error(\"Failed to recognize value `\".concat(value, \"` for property \") + \"`\".concat(property, \"`.\"));\n }\n};\nconst handleLoneUnicodePropertyNameOrValue = value => {\n // It could be a `General_Category` value or a binary property.\n // Note: `unicodeMatchPropertyValue` throws on invalid values.\n try {\n const property = 'General_Category';\n const category = unicodeMatchPropertyValue(property, value);\n return getUnicodePropertyValueSet(property, category);\n } catch (exception) {}\n // It’s not a `General_Category` value, so check if it’s a binary\n // property. Note: `unicodeMatchProperty` throws on invalid properties.\n const property = unicodeMatchProperty(value);\n return getUnicodePropertyValueSet(property);\n};\nconst getUnicodePropertyEscapeSet = (value, isNegative) => {\n const parts = value.split('=');\n const firstPart = parts[0];\n let set;\n if (parts.length == 1) {\n set = handleLoneUnicodePropertyNameOrValue(firstPart);\n } else {\n // The pattern consists of two parts, i.e. `Property=Value`.\n const property = unicodeMatchProperty(firstPart);\n const value = unicodeMatchPropertyValue(property, parts[1]);\n set = getUnicodePropertyValueSet(property, value);\n }\n if (isNegative) {\n return UNICODE_SET.clone().remove(set);\n }\n return set.clone();\n};\n\n// Given a range of code points, add any case-folded code points in that range\n// to a set.\nregenerate.prototype.iuAddRange = function (min, max) {\n const $this = this;\n do {\n const folded = caseFold(min);\n if (folded) {\n $this.add(folded);\n }\n } while (++min <= max);\n return $this;\n};\nconst update = (item, pattern) => {\n let tree = parse(pattern, config.useUnicodeFlag ? 'u' : '');\n switch (tree.type) {\n case 'characterClass':\n case 'group':\n case 'value':\n // No wrapping needed.\n break;\n default:\n // Wrap the pattern in a non-capturing group.\n tree = wrap(tree, pattern);\n }\n Object.assign(item, tree);\n};\nconst wrap = (tree, pattern) => {\n // Wrap the pattern in a non-capturing group.\n return {\n 'type': 'group',\n 'behavior': 'ignore',\n 'body': [tree],\n 'raw': \"(?:\".concat(pattern, \")\")\n };\n};\nconst caseFold = codePoint => {\n return iuMappings.get(codePoint) || false;\n};\nconst processCharacterClass = (characterClassItem, regenerateOptions) => {\n const set = regenerate();\n for (const item of characterClassItem.body) {\n switch (item.type) {\n case 'value':\n set.add(item.codePoint);\n if (config.ignoreCase && config.unicode && !config.useUnicodeFlag) {\n const folded = caseFold(item.codePoint);\n if (folded) {\n set.add(folded);\n }\n }\n break;\n case 'characterClassRange':\n const min = item.min.codePoint;\n const max = item.max.codePoint;\n set.addRange(min, max);\n if (config.ignoreCase && config.unicode && !config.useUnicodeFlag) {\n set.iuAddRange(min, max);\n }\n break;\n case 'characterClassEscape':\n set.add(getCharacterClassEscapeSet(item.value, config.unicode, config.ignoreCase));\n break;\n case 'unicodePropertyEscape':\n set.add(getUnicodePropertyEscapeSet(item.value, item.negative));\n break;\n // The `default` clause is only here as a safeguard; it should never be\n // reached. Code coverage tools should ignore it.\n /* istanbul ignore next */\n default:\n throw new Error(\"Unknown term type: \".concat(item.type));\n }\n }\n if (characterClassItem.negative) {\n update(characterClassItem, \"(?!\".concat(set.toString(regenerateOptions), \")[\\\\s\\\\S]\"));\n } else {\n update(characterClassItem, set.toString(regenerateOptions));\n }\n return characterClassItem;\n};\nconst updateNamedReference = (item, index) => {\n delete item.name;\n item.matchIndex = index;\n};\nconst assertNoUnmatchedReferences = groups => {\n const unmatchedReferencesNames = Object.keys(groups.unmatchedReferences);\n if (unmatchedReferencesNames.length > 0) {\n throw new Error(\"Unknown group names: \".concat(unmatchedReferencesNames));\n }\n};\nconst processTerm = (item, regenerateOptions, groups) => {\n switch (item.type) {\n case 'dot':\n if (config.useDotAllFlag) {\n break;\n } else if (config.unicode) {\n update(item, getUnicodeDotSet(config.dotAll).toString(regenerateOptions));\n } else if (config.dotAll) {\n // TODO: consider changing this at the regenerate level.\n update(item, '[\\\\s\\\\S]');\n }\n break;\n case 'characterClass':\n item = processCharacterClass(item, regenerateOptions);\n break;\n case 'unicodePropertyEscape':\n if (config.unicodePropertyEscape) {\n update(item, getUnicodePropertyEscapeSet(item.value, item.negative).toString(regenerateOptions));\n }\n break;\n case 'characterClassEscape':\n update(item, getCharacterClassEscapeSet(item.value, config.unicode, config.ignoreCase).toString(regenerateOptions));\n break;\n case 'group':\n if (item.behavior == 'normal') {\n groups.lastIndex++;\n }\n if (item.name && config.namedGroup) {\n const name = item.name.value;\n if (groups.names[name]) {\n throw new Error(\"Multiple groups with the same name (\".concat(name, \") are not allowed.\"));\n }\n const index = groups.lastIndex;\n delete item.name;\n groups.names[name] = index;\n if (groups.onNamedGroup) {\n groups.onNamedGroup.call(null, name, index);\n }\n if (groups.unmatchedReferences[name]) {\n groups.unmatchedReferences[name].forEach(reference => {\n updateNamedReference(reference, index);\n });\n delete groups.unmatchedReferences[name];\n }\n }\n /* falls through */\n case 'alternative':\n case 'disjunction':\n case 'quantifier':\n item.body = item.body.map(term => {\n return processTerm(term, regenerateOptions, groups);\n });\n break;\n case 'value':\n const codePoint = item.codePoint;\n const set = regenerate(codePoint);\n if (config.ignoreCase && config.unicode && !config.useUnicodeFlag) {\n const folded = caseFold(codePoint);\n if (folded) {\n set.add(folded);\n }\n }\n update(item, set.toString(regenerateOptions));\n break;\n case 'reference':\n if (item.name) {\n const name = item.name.value;\n const index = groups.names[name];\n if (index) {\n updateNamedReference(item, index);\n break;\n }\n if (!groups.unmatchedReferences[name]) {\n groups.unmatchedReferences[name] = [];\n }\n // Keep track of references used before the corresponding group.\n groups.unmatchedReferences[name].push(item);\n }\n break;\n case 'anchor':\n case 'empty':\n case 'group':\n // Nothing to do here.\n break;\n // The `default` clause is only here as a safeguard; it should never be\n // reached. Code coverage tools should ignore it.\n /* istanbul ignore next */\n default:\n throw new Error(\"Unknown term type: \".concat(item.type));\n }\n return item;\n};\nconst config = {\n 'ignoreCase': false,\n 'unicode': false,\n 'dotAll': false,\n 'useDotAllFlag': false,\n 'useUnicodeFlag': false,\n 'unicodePropertyEscape': false,\n 'namedGroup': false\n};\nconst rewritePattern = (pattern, flags, options) => {\n config.unicode = flags && flags.includes('u');\n const regjsparserFeatures = {\n 'unicodePropertyEscape': config.unicode,\n 'namedGroups': true,\n 'lookbehind': options && options.lookbehind\n };\n config.ignoreCase = flags && flags.includes('i');\n const supportDotAllFlag = options && options.dotAllFlag;\n config.dotAll = supportDotAllFlag && flags && flags.includes('s');\n config.namedGroup = options && options.namedGroup;\n config.useDotAllFlag = options && options.useDotAllFlag;\n config.useUnicodeFlag = options && options.useUnicodeFlag;\n config.unicodePropertyEscape = options && options.unicodePropertyEscape;\n if (supportDotAllFlag && config.useDotAllFlag) {\n throw new Error('`useDotAllFlag` and `dotAllFlag` cannot both be true!');\n }\n const regenerateOptions = {\n 'hasUnicodeFlag': config.useUnicodeFlag,\n 'bmpOnly': !config.unicode\n };\n const groups = {\n 'onNamedGroup': options && options.onNamedGroup,\n 'lastIndex': 0,\n 'names': Object.create(null),\n // { [name]: index }\n 'unmatchedReferences': Object.create(null) // { [name]: Array }\n };\n\n const tree = parse(pattern, flags, regjsparserFeatures);\n // Note: `processTerm` mutates `tree` and `groups`.\n processTerm(tree, regenerateOptions, groups);\n assertNoUnmatchedReferences(groups);\n return generate(tree);\n};\nmodule.exports = rewritePattern;","const set = require('regenerate')();\nset.addRange(0x800, 0x82D).addRange(0x830, 0x83E);\nmodule.exports = set;","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\nfunction head(array) {\n return (array && array.length) ? array[0] : undefined;\n}\n\nmodule.exports = head;\n","module.exports = new Map([['General_Category', new Map([['C', 'Other'], ['Cc', 'Control'], ['cntrl', 'Control'], ['Cf', 'Format'], ['Cn', 'Unassigned'], ['Co', 'Private_Use'], ['Cs', 'Surrogate'], ['L', 'Letter'], ['LC', 'Cased_Letter'], ['Ll', 'Lowercase_Letter'], ['Lm', 'Modifier_Letter'], ['Lo', 'Other_Letter'], ['Lt', 'Titlecase_Letter'], ['Lu', 'Uppercase_Letter'], ['M', 'Mark'], ['Combining_Mark', 'Mark'], ['Mc', 'Spacing_Mark'], ['Me', 'Enclosing_Mark'], ['Mn', 'Nonspacing_Mark'], ['N', 'Number'], ['Nd', 'Decimal_Number'], ['digit', 'Decimal_Number'], ['Nl', 'Letter_Number'], ['No', 'Other_Number'], ['P', 'Punctuation'], ['punct', 'Punctuation'], ['Pc', 'Connector_Punctuation'], ['Pd', 'Dash_Punctuation'], ['Pe', 'Close_Punctuation'], ['Pf', 'Final_Punctuation'], ['Pi', 'Initial_Punctuation'], ['Po', 'Other_Punctuation'], ['Ps', 'Open_Punctuation'], ['S', 'Symbol'], ['Sc', 'Currency_Symbol'], ['Sk', 'Modifier_Symbol'], ['Sm', 'Math_Symbol'], ['So', 'Other_Symbol'], ['Z', 'Separator'], ['Zl', 'Line_Separator'], ['Zp', 'Paragraph_Separator'], ['Zs', 'Space_Separator'], ['Other', 'Other'], ['Control', 'Control'], ['Format', 'Format'], ['Unassigned', 'Unassigned'], ['Private_Use', 'Private_Use'], ['Surrogate', 'Surrogate'], ['Letter', 'Letter'], ['Cased_Letter', 'Cased_Letter'], ['Lowercase_Letter', 'Lowercase_Letter'], ['Modifier_Letter', 'Modifier_Letter'], ['Other_Letter', 'Other_Letter'], ['Titlecase_Letter', 'Titlecase_Letter'], ['Uppercase_Letter', 'Uppercase_Letter'], ['Mark', 'Mark'], ['Spacing_Mark', 'Spacing_Mark'], ['Enclosing_Mark', 'Enclosing_Mark'], ['Nonspacing_Mark', 'Nonspacing_Mark'], ['Number', 'Number'], ['Decimal_Number', 'Decimal_Number'], ['Letter_Number', 'Letter_Number'], ['Other_Number', 'Other_Number'], ['Punctuation', 'Punctuation'], ['Connector_Punctuation', 'Connector_Punctuation'], ['Dash_Punctuation', 'Dash_Punctuation'], ['Close_Punctuation', 'Close_Punctuation'], ['Final_Punctuation', 'Final_Punctuation'], ['Initial_Punctuation', 'Initial_Punctuation'], ['Other_Punctuation', 'Other_Punctuation'], ['Open_Punctuation', 'Open_Punctuation'], ['Symbol', 'Symbol'], ['Currency_Symbol', 'Currency_Symbol'], ['Modifier_Symbol', 'Modifier_Symbol'], ['Math_Symbol', 'Math_Symbol'], ['Other_Symbol', 'Other_Symbol'], ['Separator', 'Separator'], ['Line_Separator', 'Line_Separator'], ['Paragraph_Separator', 'Paragraph_Separator'], ['Space_Separator', 'Space_Separator']])], ['Script', new Map([['Adlm', 'Adlam'], ['Aghb', 'Caucasian_Albanian'], ['Ahom', 'Ahom'], ['Arab', 'Arabic'], ['Armi', 'Imperial_Aramaic'], ['Armn', 'Armenian'], ['Avst', 'Avestan'], ['Bali', 'Balinese'], ['Bamu', 'Bamum'], ['Bass', 'Bassa_Vah'], ['Batk', 'Batak'], ['Beng', 'Bengali'], ['Bhks', 'Bhaiksuki'], ['Bopo', 'Bopomofo'], ['Brah', 'Brahmi'], ['Brai', 'Braille'], ['Bugi', 'Buginese'], ['Buhd', 'Buhid'], ['Cakm', 'Chakma'], ['Cans', 'Canadian_Aboriginal'], ['Cari', 'Carian'], ['Cham', 'Cham'], ['Cher', 'Cherokee'], ['Chrs', 'Chorasmian'], ['Copt', 'Coptic'], ['Qaac', 'Coptic'], ['Cpmn', 'Cypro_Minoan'], ['Cprt', 'Cypriot'], ['Cyrl', 'Cyrillic'], ['Deva', 'Devanagari'], ['Diak', 'Dives_Akuru'], ['Dogr', 'Dogra'], ['Dsrt', 'Deseret'], ['Dupl', 'Duployan'], ['Egyp', 'Egyptian_Hieroglyphs'], ['Elba', 'Elbasan'], ['Elym', 'Elymaic'], ['Ethi', 'Ethiopic'], ['Geor', 'Georgian'], ['Glag', 'Glagolitic'], ['Gong', 'Gunjala_Gondi'], ['Gonm', 'Masaram_Gondi'], ['Goth', 'Gothic'], ['Gran', 'Grantha'], ['Grek', 'Greek'], ['Gujr', 'Gujarati'], ['Guru', 'Gurmukhi'], ['Hang', 'Hangul'], ['Hani', 'Han'], ['Hano', 'Hanunoo'], ['Hatr', 'Hatran'], ['Hebr', 'Hebrew'], ['Hira', 'Hiragana'], ['Hluw', 'Anatolian_Hieroglyphs'], ['Hmng', 'Pahawh_Hmong'], ['Hmnp', 'Nyiakeng_Puachue_Hmong'], ['Hrkt', 'Katakana_Or_Hiragana'], ['Hung', 'Old_Hungarian'], ['Ital', 'Old_Italic'], ['Java', 'Javanese'], ['Kali', 'Kayah_Li'], ['Kana', 'Katakana'], ['Kawi', 'Kawi'], ['Khar', 'Kharoshthi'], ['Khmr', 'Khmer'], ['Khoj', 'Khojki'], ['Kits', 'Khitan_Small_Script'], ['Knda', 'Kannada'], ['Kthi', 'Kaithi'], ['Lana', 'Tai_Tham'], ['Laoo', 'Lao'], ['Latn', 'Latin'], ['Lepc', 'Lepcha'], ['Limb', 'Limbu'], ['Lina', 'Linear_A'], ['Linb', 'Linear_B'], ['Lisu', 'Lisu'], ['Lyci', 'Lycian'], ['Lydi', 'Lydian'], ['Mahj', 'Mahajani'], ['Maka', 'Makasar'], ['Mand', 'Mandaic'], ['Mani', 'Manichaean'], ['Marc', 'Marchen'], ['Medf', 'Medefaidrin'], ['Mend', 'Mende_Kikakui'], ['Merc', 'Meroitic_Cursive'], ['Mero', 'Meroitic_Hieroglyphs'], ['Mlym', 'Malayalam'], ['Modi', 'Modi'], ['Mong', 'Mongolian'], ['Mroo', 'Mro'], ['Mtei', 'Meetei_Mayek'], ['Mult', 'Multani'], ['Mymr', 'Myanmar'], ['Nagm', 'Nag_Mundari'], ['Nand', 'Nandinagari'], ['Narb', 'Old_North_Arabian'], ['Nbat', 'Nabataean'], ['Newa', 'Newa'], ['Nkoo', 'Nko'], ['Nshu', 'Nushu'], ['Ogam', 'Ogham'], ['Olck', 'Ol_Chiki'], ['Orkh', 'Old_Turkic'], ['Orya', 'Oriya'], ['Osge', 'Osage'], ['Osma', 'Osmanya'], ['Ougr', 'Old_Uyghur'], ['Palm', 'Palmyrene'], ['Pauc', 'Pau_Cin_Hau'], ['Perm', 'Old_Permic'], ['Phag', 'Phags_Pa'], ['Phli', 'Inscriptional_Pahlavi'], ['Phlp', 'Psalter_Pahlavi'], ['Phnx', 'Phoenician'], ['Plrd', 'Miao'], ['Prti', 'Inscriptional_Parthian'], ['Rjng', 'Rejang'], ['Rohg', 'Hanifi_Rohingya'], ['Runr', 'Runic'], ['Samr', 'Samaritan'], ['Sarb', 'Old_South_Arabian'], ['Saur', 'Saurashtra'], ['Sgnw', 'SignWriting'], ['Shaw', 'Shavian'], ['Shrd', 'Sharada'], ['Sidd', 'Siddham'], ['Sind', 'Khudawadi'], ['Sinh', 'Sinhala'], ['Sogd', 'Sogdian'], ['Sogo', 'Old_Sogdian'], ['Sora', 'Sora_Sompeng'], ['Soyo', 'Soyombo'], ['Sund', 'Sundanese'], ['Sylo', 'Syloti_Nagri'], ['Syrc', 'Syriac'], ['Tagb', 'Tagbanwa'], ['Takr', 'Takri'], ['Tale', 'Tai_Le'], ['Talu', 'New_Tai_Lue'], ['Taml', 'Tamil'], ['Tang', 'Tangut'], ['Tavt', 'Tai_Viet'], ['Telu', 'Telugu'], ['Tfng', 'Tifinagh'], ['Tglg', 'Tagalog'], ['Thaa', 'Thaana'], ['Thai', 'Thai'], ['Tibt', 'Tibetan'], ['Tirh', 'Tirhuta'], ['Tnsa', 'Tangsa'], ['Toto', 'Toto'], ['Ugar', 'Ugaritic'], ['Vaii', 'Vai'], ['Vith', 'Vithkuqi'], ['Wara', 'Warang_Citi'], ['Wcho', 'Wancho'], ['Xpeo', 'Old_Persian'], ['Xsux', 'Cuneiform'], ['Yezi', 'Yezidi'], ['Yiii', 'Yi'], ['Zanb', 'Zanabazar_Square'], ['Zinh', 'Inherited'], ['Qaai', 'Inherited'], ['Zyyy', 'Common'], ['Zzzz', 'Unknown'], ['Adlam', 'Adlam'], ['Caucasian_Albanian', 'Caucasian_Albanian'], ['Arabic', 'Arabic'], ['Imperial_Aramaic', 'Imperial_Aramaic'], ['Armenian', 'Armenian'], ['Avestan', 'Avestan'], ['Balinese', 'Balinese'], ['Bamum', 'Bamum'], ['Bassa_Vah', 'Bassa_Vah'], ['Batak', 'Batak'], ['Bengali', 'Bengali'], ['Bhaiksuki', 'Bhaiksuki'], ['Bopomofo', 'Bopomofo'], ['Brahmi', 'Brahmi'], ['Braille', 'Braille'], ['Buginese', 'Buginese'], ['Buhid', 'Buhid'], ['Chakma', 'Chakma'], ['Canadian_Aboriginal', 'Canadian_Aboriginal'], ['Carian', 'Carian'], ['Cherokee', 'Cherokee'], ['Chorasmian', 'Chorasmian'], ['Coptic', 'Coptic'], ['Cypro_Minoan', 'Cypro_Minoan'], ['Cypriot', 'Cypriot'], ['Cyrillic', 'Cyrillic'], ['Devanagari', 'Devanagari'], ['Dives_Akuru', 'Dives_Akuru'], ['Dogra', 'Dogra'], ['Deseret', 'Deseret'], ['Duployan', 'Duployan'], ['Egyptian_Hieroglyphs', 'Egyptian_Hieroglyphs'], ['Elbasan', 'Elbasan'], ['Elymaic', 'Elymaic'], ['Ethiopic', 'Ethiopic'], ['Georgian', 'Georgian'], ['Glagolitic', 'Glagolitic'], ['Gunjala_Gondi', 'Gunjala_Gondi'], ['Masaram_Gondi', 'Masaram_Gondi'], ['Gothic', 'Gothic'], ['Grantha', 'Grantha'], ['Greek', 'Greek'], ['Gujarati', 'Gujarati'], ['Gurmukhi', 'Gurmukhi'], ['Hangul', 'Hangul'], ['Han', 'Han'], ['Hanunoo', 'Hanunoo'], ['Hatran', 'Hatran'], ['Hebrew', 'Hebrew'], ['Hiragana', 'Hiragana'], ['Anatolian_Hieroglyphs', 'Anatolian_Hieroglyphs'], ['Pahawh_Hmong', 'Pahawh_Hmong'], ['Nyiakeng_Puachue_Hmong', 'Nyiakeng_Puachue_Hmong'], ['Katakana_Or_Hiragana', 'Katakana_Or_Hiragana'], ['Old_Hungarian', 'Old_Hungarian'], ['Old_Italic', 'Old_Italic'], ['Javanese', 'Javanese'], ['Kayah_Li', 'Kayah_Li'], ['Katakana', 'Katakana'], ['Kharoshthi', 'Kharoshthi'], ['Khmer', 'Khmer'], ['Khojki', 'Khojki'], ['Khitan_Small_Script', 'Khitan_Small_Script'], ['Kannada', 'Kannada'], ['Kaithi', 'Kaithi'], ['Tai_Tham', 'Tai_Tham'], ['Lao', 'Lao'], ['Latin', 'Latin'], ['Lepcha', 'Lepcha'], ['Limbu', 'Limbu'], ['Linear_A', 'Linear_A'], ['Linear_B', 'Linear_B'], ['Lycian', 'Lycian'], ['Lydian', 'Lydian'], ['Mahajani', 'Mahajani'], ['Makasar', 'Makasar'], ['Mandaic', 'Mandaic'], ['Manichaean', 'Manichaean'], ['Marchen', 'Marchen'], ['Medefaidrin', 'Medefaidrin'], ['Mende_Kikakui', 'Mende_Kikakui'], ['Meroitic_Cursive', 'Meroitic_Cursive'], ['Meroitic_Hieroglyphs', 'Meroitic_Hieroglyphs'], ['Malayalam', 'Malayalam'], ['Mongolian', 'Mongolian'], ['Mro', 'Mro'], ['Meetei_Mayek', 'Meetei_Mayek'], ['Multani', 'Multani'], ['Myanmar', 'Myanmar'], ['Nag_Mundari', 'Nag_Mundari'], ['Nandinagari', 'Nandinagari'], ['Old_North_Arabian', 'Old_North_Arabian'], ['Nabataean', 'Nabataean'], ['Nko', 'Nko'], ['Nushu', 'Nushu'], ['Ogham', 'Ogham'], ['Ol_Chiki', 'Ol_Chiki'], ['Old_Turkic', 'Old_Turkic'], ['Oriya', 'Oriya'], ['Osage', 'Osage'], ['Osmanya', 'Osmanya'], ['Old_Uyghur', 'Old_Uyghur'], ['Palmyrene', 'Palmyrene'], ['Pau_Cin_Hau', 'Pau_Cin_Hau'], ['Old_Permic', 'Old_Permic'], ['Phags_Pa', 'Phags_Pa'], ['Inscriptional_Pahlavi', 'Inscriptional_Pahlavi'], ['Psalter_Pahlavi', 'Psalter_Pahlavi'], ['Phoenician', 'Phoenician'], ['Miao', 'Miao'], ['Inscriptional_Parthian', 'Inscriptional_Parthian'], ['Rejang', 'Rejang'], ['Hanifi_Rohingya', 'Hanifi_Rohingya'], ['Runic', 'Runic'], ['Samaritan', 'Samaritan'], ['Old_South_Arabian', 'Old_South_Arabian'], ['Saurashtra', 'Saurashtra'], ['SignWriting', 'SignWriting'], ['Shavian', 'Shavian'], ['Sharada', 'Sharada'], ['Siddham', 'Siddham'], ['Khudawadi', 'Khudawadi'], ['Sinhala', 'Sinhala'], ['Sogdian', 'Sogdian'], ['Old_Sogdian', 'Old_Sogdian'], ['Sora_Sompeng', 'Sora_Sompeng'], ['Soyombo', 'Soyombo'], ['Sundanese', 'Sundanese'], ['Syloti_Nagri', 'Syloti_Nagri'], ['Syriac', 'Syriac'], ['Tagbanwa', 'Tagbanwa'], ['Takri', 'Takri'], ['Tai_Le', 'Tai_Le'], ['New_Tai_Lue', 'New_Tai_Lue'], ['Tamil', 'Tamil'], ['Tangut', 'Tangut'], ['Tai_Viet', 'Tai_Viet'], ['Telugu', 'Telugu'], ['Tifinagh', 'Tifinagh'], ['Tagalog', 'Tagalog'], ['Thaana', 'Thaana'], ['Tibetan', 'Tibetan'], ['Tirhuta', 'Tirhuta'], ['Tangsa', 'Tangsa'], ['Ugaritic', 'Ugaritic'], ['Vai', 'Vai'], ['Vithkuqi', 'Vithkuqi'], ['Warang_Citi', 'Warang_Citi'], ['Wancho', 'Wancho'], ['Old_Persian', 'Old_Persian'], ['Cuneiform', 'Cuneiform'], ['Yezidi', 'Yezidi'], ['Yi', 'Yi'], ['Zanabazar_Square', 'Zanabazar_Square'], ['Inherited', 'Inherited'], ['Common', 'Common'], ['Unknown', 'Unknown']])], ['Script_Extensions', new Map([['Adlm', 'Adlam'], ['Aghb', 'Caucasian_Albanian'], ['Ahom', 'Ahom'], ['Arab', 'Arabic'], ['Armi', 'Imperial_Aramaic'], ['Armn', 'Armenian'], ['Avst', 'Avestan'], ['Bali', 'Balinese'], ['Bamu', 'Bamum'], ['Bass', 'Bassa_Vah'], ['Batk', 'Batak'], ['Beng', 'Bengali'], ['Bhks', 'Bhaiksuki'], ['Bopo', 'Bopomofo'], ['Brah', 'Brahmi'], ['Brai', 'Braille'], ['Bugi', 'Buginese'], ['Buhd', 'Buhid'], ['Cakm', 'Chakma'], ['Cans', 'Canadian_Aboriginal'], ['Cari', 'Carian'], ['Cham', 'Cham'], ['Cher', 'Cherokee'], ['Chrs', 'Chorasmian'], ['Copt', 'Coptic'], ['Qaac', 'Coptic'], ['Cpmn', 'Cypro_Minoan'], ['Cprt', 'Cypriot'], ['Cyrl', 'Cyrillic'], ['Deva', 'Devanagari'], ['Diak', 'Dives_Akuru'], ['Dogr', 'Dogra'], ['Dsrt', 'Deseret'], ['Dupl', 'Duployan'], ['Egyp', 'Egyptian_Hieroglyphs'], ['Elba', 'Elbasan'], ['Elym', 'Elymaic'], ['Ethi', 'Ethiopic'], ['Geor', 'Georgian'], ['Glag', 'Glagolitic'], ['Gong', 'Gunjala_Gondi'], ['Gonm', 'Masaram_Gondi'], ['Goth', 'Gothic'], ['Gran', 'Grantha'], ['Grek', 'Greek'], ['Gujr', 'Gujarati'], ['Guru', 'Gurmukhi'], ['Hang', 'Hangul'], ['Hani', 'Han'], ['Hano', 'Hanunoo'], ['Hatr', 'Hatran'], ['Hebr', 'Hebrew'], ['Hira', 'Hiragana'], ['Hluw', 'Anatolian_Hieroglyphs'], ['Hmng', 'Pahawh_Hmong'], ['Hmnp', 'Nyiakeng_Puachue_Hmong'], ['Hrkt', 'Katakana_Or_Hiragana'], ['Hung', 'Old_Hungarian'], ['Ital', 'Old_Italic'], ['Java', 'Javanese'], ['Kali', 'Kayah_Li'], ['Kana', 'Katakana'], ['Kawi', 'Kawi'], ['Khar', 'Kharoshthi'], ['Khmr', 'Khmer'], ['Khoj', 'Khojki'], ['Kits', 'Khitan_Small_Script'], ['Knda', 'Kannada'], ['Kthi', 'Kaithi'], ['Lana', 'Tai_Tham'], ['Laoo', 'Lao'], ['Latn', 'Latin'], ['Lepc', 'Lepcha'], ['Limb', 'Limbu'], ['Lina', 'Linear_A'], ['Linb', 'Linear_B'], ['Lisu', 'Lisu'], ['Lyci', 'Lycian'], ['Lydi', 'Lydian'], ['Mahj', 'Mahajani'], ['Maka', 'Makasar'], ['Mand', 'Mandaic'], ['Mani', 'Manichaean'], ['Marc', 'Marchen'], ['Medf', 'Medefaidrin'], ['Mend', 'Mende_Kikakui'], ['Merc', 'Meroitic_Cursive'], ['Mero', 'Meroitic_Hieroglyphs'], ['Mlym', 'Malayalam'], ['Modi', 'Modi'], ['Mong', 'Mongolian'], ['Mroo', 'Mro'], ['Mtei', 'Meetei_Mayek'], ['Mult', 'Multani'], ['Mymr', 'Myanmar'], ['Nagm', 'Nag_Mundari'], ['Nand', 'Nandinagari'], ['Narb', 'Old_North_Arabian'], ['Nbat', 'Nabataean'], ['Newa', 'Newa'], ['Nkoo', 'Nko'], ['Nshu', 'Nushu'], ['Ogam', 'Ogham'], ['Olck', 'Ol_Chiki'], ['Orkh', 'Old_Turkic'], ['Orya', 'Oriya'], ['Osge', 'Osage'], ['Osma', 'Osmanya'], ['Ougr', 'Old_Uyghur'], ['Palm', 'Palmyrene'], ['Pauc', 'Pau_Cin_Hau'], ['Perm', 'Old_Permic'], ['Phag', 'Phags_Pa'], ['Phli', 'Inscriptional_Pahlavi'], ['Phlp', 'Psalter_Pahlavi'], ['Phnx', 'Phoenician'], ['Plrd', 'Miao'], ['Prti', 'Inscriptional_Parthian'], ['Rjng', 'Rejang'], ['Rohg', 'Hanifi_Rohingya'], ['Runr', 'Runic'], ['Samr', 'Samaritan'], ['Sarb', 'Old_South_Arabian'], ['Saur', 'Saurashtra'], ['Sgnw', 'SignWriting'], ['Shaw', 'Shavian'], ['Shrd', 'Sharada'], ['Sidd', 'Siddham'], ['Sind', 'Khudawadi'], ['Sinh', 'Sinhala'], ['Sogd', 'Sogdian'], ['Sogo', 'Old_Sogdian'], ['Sora', 'Sora_Sompeng'], ['Soyo', 'Soyombo'], ['Sund', 'Sundanese'], ['Sylo', 'Syloti_Nagri'], ['Syrc', 'Syriac'], ['Tagb', 'Tagbanwa'], ['Takr', 'Takri'], ['Tale', 'Tai_Le'], ['Talu', 'New_Tai_Lue'], ['Taml', 'Tamil'], ['Tang', 'Tangut'], ['Tavt', 'Tai_Viet'], ['Telu', 'Telugu'], ['Tfng', 'Tifinagh'], ['Tglg', 'Tagalog'], ['Thaa', 'Thaana'], ['Thai', 'Thai'], ['Tibt', 'Tibetan'], ['Tirh', 'Tirhuta'], ['Tnsa', 'Tangsa'], ['Toto', 'Toto'], ['Ugar', 'Ugaritic'], ['Vaii', 'Vai'], ['Vith', 'Vithkuqi'], ['Wara', 'Warang_Citi'], ['Wcho', 'Wancho'], ['Xpeo', 'Old_Persian'], ['Xsux', 'Cuneiform'], ['Yezi', 'Yezidi'], ['Yiii', 'Yi'], ['Zanb', 'Zanabazar_Square'], ['Zinh', 'Inherited'], ['Qaai', 'Inherited'], ['Zyyy', 'Common'], ['Zzzz', 'Unknown'], ['Adlam', 'Adlam'], ['Caucasian_Albanian', 'Caucasian_Albanian'], ['Arabic', 'Arabic'], ['Imperial_Aramaic', 'Imperial_Aramaic'], ['Armenian', 'Armenian'], ['Avestan', 'Avestan'], ['Balinese', 'Balinese'], ['Bamum', 'Bamum'], ['Bassa_Vah', 'Bassa_Vah'], ['Batak', 'Batak'], ['Bengali', 'Bengali'], ['Bhaiksuki', 'Bhaiksuki'], ['Bopomofo', 'Bopomofo'], ['Brahmi', 'Brahmi'], ['Braille', 'Braille'], ['Buginese', 'Buginese'], ['Buhid', 'Buhid'], ['Chakma', 'Chakma'], ['Canadian_Aboriginal', 'Canadian_Aboriginal'], ['Carian', 'Carian'], ['Cherokee', 'Cherokee'], ['Chorasmian', 'Chorasmian'], ['Coptic', 'Coptic'], ['Cypro_Minoan', 'Cypro_Minoan'], ['Cypriot', 'Cypriot'], ['Cyrillic', 'Cyrillic'], ['Devanagari', 'Devanagari'], ['Dives_Akuru', 'Dives_Akuru'], ['Dogra', 'Dogra'], ['Deseret', 'Deseret'], ['Duployan', 'Duployan'], ['Egyptian_Hieroglyphs', 'Egyptian_Hieroglyphs'], ['Elbasan', 'Elbasan'], ['Elymaic', 'Elymaic'], ['Ethiopic', 'Ethiopic'], ['Georgian', 'Georgian'], ['Glagolitic', 'Glagolitic'], ['Gunjala_Gondi', 'Gunjala_Gondi'], ['Masaram_Gondi', 'Masaram_Gondi'], ['Gothic', 'Gothic'], ['Grantha', 'Grantha'], ['Greek', 'Greek'], ['Gujarati', 'Gujarati'], ['Gurmukhi', 'Gurmukhi'], ['Hangul', 'Hangul'], ['Han', 'Han'], ['Hanunoo', 'Hanunoo'], ['Hatran', 'Hatran'], ['Hebrew', 'Hebrew'], ['Hiragana', 'Hiragana'], ['Anatolian_Hieroglyphs', 'Anatolian_Hieroglyphs'], ['Pahawh_Hmong', 'Pahawh_Hmong'], ['Nyiakeng_Puachue_Hmong', 'Nyiakeng_Puachue_Hmong'], ['Katakana_Or_Hiragana', 'Katakana_Or_Hiragana'], ['Old_Hungarian', 'Old_Hungarian'], ['Old_Italic', 'Old_Italic'], ['Javanese', 'Javanese'], ['Kayah_Li', 'Kayah_Li'], ['Katakana', 'Katakana'], ['Kharoshthi', 'Kharoshthi'], ['Khmer', 'Khmer'], ['Khojki', 'Khojki'], ['Khitan_Small_Script', 'Khitan_Small_Script'], ['Kannada', 'Kannada'], ['Kaithi', 'Kaithi'], ['Tai_Tham', 'Tai_Tham'], ['Lao', 'Lao'], ['Latin', 'Latin'], ['Lepcha', 'Lepcha'], ['Limbu', 'Limbu'], ['Linear_A', 'Linear_A'], ['Linear_B', 'Linear_B'], ['Lycian', 'Lycian'], ['Lydian', 'Lydian'], ['Mahajani', 'Mahajani'], ['Makasar', 'Makasar'], ['Mandaic', 'Mandaic'], ['Manichaean', 'Manichaean'], ['Marchen', 'Marchen'], ['Medefaidrin', 'Medefaidrin'], ['Mende_Kikakui', 'Mende_Kikakui'], ['Meroitic_Cursive', 'Meroitic_Cursive'], ['Meroitic_Hieroglyphs', 'Meroitic_Hieroglyphs'], ['Malayalam', 'Malayalam'], ['Mongolian', 'Mongolian'], ['Mro', 'Mro'], ['Meetei_Mayek', 'Meetei_Mayek'], ['Multani', 'Multani'], ['Myanmar', 'Myanmar'], ['Nag_Mundari', 'Nag_Mundari'], ['Nandinagari', 'Nandinagari'], ['Old_North_Arabian', 'Old_North_Arabian'], ['Nabataean', 'Nabataean'], ['Nko', 'Nko'], ['Nushu', 'Nushu'], ['Ogham', 'Ogham'], ['Ol_Chiki', 'Ol_Chiki'], ['Old_Turkic', 'Old_Turkic'], ['Oriya', 'Oriya'], ['Osage', 'Osage'], ['Osmanya', 'Osmanya'], ['Old_Uyghur', 'Old_Uyghur'], ['Palmyrene', 'Palmyrene'], ['Pau_Cin_Hau', 'Pau_Cin_Hau'], ['Old_Permic', 'Old_Permic'], ['Phags_Pa', 'Phags_Pa'], ['Inscriptional_Pahlavi', 'Inscriptional_Pahlavi'], ['Psalter_Pahlavi', 'Psalter_Pahlavi'], ['Phoenician', 'Phoenician'], ['Miao', 'Miao'], ['Inscriptional_Parthian', 'Inscriptional_Parthian'], ['Rejang', 'Rejang'], ['Hanifi_Rohingya', 'Hanifi_Rohingya'], ['Runic', 'Runic'], ['Samaritan', 'Samaritan'], ['Old_South_Arabian', 'Old_South_Arabian'], ['Saurashtra', 'Saurashtra'], ['SignWriting', 'SignWriting'], ['Shavian', 'Shavian'], ['Sharada', 'Sharada'], ['Siddham', 'Siddham'], ['Khudawadi', 'Khudawadi'], ['Sinhala', 'Sinhala'], ['Sogdian', 'Sogdian'], ['Old_Sogdian', 'Old_Sogdian'], ['Sora_Sompeng', 'Sora_Sompeng'], ['Soyombo', 'Soyombo'], ['Sundanese', 'Sundanese'], ['Syloti_Nagri', 'Syloti_Nagri'], ['Syriac', 'Syriac'], ['Tagbanwa', 'Tagbanwa'], ['Takri', 'Takri'], ['Tai_Le', 'Tai_Le'], ['New_Tai_Lue', 'New_Tai_Lue'], ['Tamil', 'Tamil'], ['Tangut', 'Tangut'], ['Tai_Viet', 'Tai_Viet'], ['Telugu', 'Telugu'], ['Tifinagh', 'Tifinagh'], ['Tagalog', 'Tagalog'], ['Thaana', 'Thaana'], ['Tibetan', 'Tibetan'], ['Tirhuta', 'Tirhuta'], ['Tangsa', 'Tangsa'], ['Ugaritic', 'Ugaritic'], ['Vai', 'Vai'], ['Vithkuqi', 'Vithkuqi'], ['Warang_Citi', 'Warang_Citi'], ['Wancho', 'Wancho'], ['Old_Persian', 'Old_Persian'], ['Cuneiform', 'Cuneiform'], ['Yezidi', 'Yezidi'], ['Yi', 'Yi'], ['Zanabazar_Square', 'Zanabazar_Square'], ['Inherited', 'Inherited'], ['Common', 'Common'], ['Unknown', 'Unknown']])]]);","const set = require('regenerate')();\nset.addRange(0x10880, 0x1089E).addRange(0x108A7, 0x108AF);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x1B80, 0x1BBF).addRange(0x1CC0, 0x1CC7);\nmodule.exports = set;","var copyArray = require('./_copyArray'),\n isIndex = require('./_isIndex');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\nfunction reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n}\n\nmodule.exports = reorder;\n","var composeArgs = require('./_composeArgs'),\n composeArgsRight = require('./_composeArgsRight'),\n replaceHolders = require('./_replaceHolders');\n\n/** Used as the internal argument placeholder. */\nvar PLACEHOLDER = '__lodash_placeholder__';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\nfunction mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n}\n\nmodule.exports = mergeData;\n","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n tag.appendChild(document.createTextNode(''));\n return tag;\n}\nvar StyleSheet = /*#__PURE__*/\nfunction () {\n function StyleSheet(options) {\n this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.before = null;\n }\n var _proto = StyleSheet.prototype;\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n var _tag = createStyleElement(this);\n var before;\n if (this.tags.length === 0) {\n before = this.before;\n } else {\n before = this.tags[this.tags.length - 1].nextSibling;\n }\n this.container.insertBefore(_tag, before);\n this.tags.push(_tag);\n }\n var tag = this.tags[this.tags.length - 1];\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n try {\n // this is a really hot path\n // we check the second character first because having \"i\"\n // as the second character will happen less often than\n // having \"@\" as the first character\n var isImportRule = rule.charCodeAt(1) === 105 && rule.charCodeAt(0) === 64; // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n\n sheet.insertRule(rule,\n // we need to insert @import rules before anything else\n // otherwise there will be an error\n // technically this means that the @import rules will\n // _usually_(not always since there could be multiple style tags)\n // be the first ones in prod and generally later in dev\n // this shouldn't really matter in the real world though\n // @import is generally only used for font faces from google fonts and etc.\n // so while this could be technically correct then it would be slower and larger\n // for a tiny bit of correctness that won't matter in the real world\n isImportRule ? 0 : sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n this.ctr++;\n };\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n };\n return StyleSheet;\n}();\nexport { StyleSheet };","function stylis_min(W) {\n function M(d, c, e, h, a) {\n for (var m = 0, b = 0, v = 0, n = 0, q, g, x = 0, K = 0, k, u = k = q = 0, l = 0, r = 0, I = 0, t = 0, B = e.length, J = B - 1, y, f = '', p = '', F = '', G = '', C; l < B;) {\n g = e.charCodeAt(l);\n l === J && 0 !== b + n + v + m && (0 !== b && (g = 47 === b ? 10 : 47), n = v = m = 0, B++, J++);\n if (0 === b + n + v + m) {\n if (l === J && (0 < r && (f = f.replace(N, '')), 0 < f.trim().length)) {\n switch (g) {\n case 32:\n case 9:\n case 59:\n case 13:\n case 10:\n break;\n default:\n f += e.charAt(l);\n }\n g = 59;\n }\n switch (g) {\n case 123:\n f = f.trim();\n q = f.charCodeAt(0);\n k = 1;\n for (t = ++l; l < B;) {\n switch (g = e.charCodeAt(l)) {\n case 123:\n k++;\n break;\n case 125:\n k--;\n break;\n case 47:\n switch (g = e.charCodeAt(l + 1)) {\n case 42:\n case 47:\n a: {\n for (u = l + 1; u < J; ++u) {\n switch (e.charCodeAt(u)) {\n case 47:\n if (42 === g && 42 === e.charCodeAt(u - 1) && l + 2 !== u) {\n l = u + 1;\n break a;\n }\n break;\n case 10:\n if (47 === g) {\n l = u + 1;\n break a;\n }\n }\n }\n l = u;\n }\n }\n break;\n case 91:\n g++;\n case 40:\n g++;\n case 34:\n case 39:\n for (; l++ < J && e.charCodeAt(l) !== g;) {}\n }\n if (0 === k) break;\n l++;\n }\n k = e.substring(t, l);\n 0 === q && (q = (f = f.replace(ca, '').trim()).charCodeAt(0));\n switch (q) {\n case 64:\n 0 < r && (f = f.replace(N, ''));\n g = f.charCodeAt(1);\n switch (g) {\n case 100:\n case 109:\n case 115:\n case 45:\n r = c;\n break;\n default:\n r = O;\n }\n k = M(c, r, k, g, a + 1);\n t = k.length;\n 0 < A && (r = X(O, f, I), C = H(3, k, r, c, D, z, t, g, a, h), f = r.join(''), void 0 !== C && 0 === (t = (k = C.trim()).length) && (g = 0, k = ''));\n if (0 < t) switch (g) {\n case 115:\n f = f.replace(da, ea);\n case 100:\n case 109:\n case 45:\n k = f + '{' + k + '}';\n break;\n case 107:\n f = f.replace(fa, '$1 $2');\n k = f + '{' + k + '}';\n k = 1 === w || 2 === w && L('@' + k, 3) ? '@-webkit-' + k + '@' + k : '@' + k;\n break;\n default:\n k = f + k, 112 === h && (k = (p += k, ''));\n } else k = '';\n break;\n default:\n k = M(c, X(c, f, I), k, h, a + 1);\n }\n F += k;\n k = I = r = u = q = 0;\n f = '';\n g = e.charCodeAt(++l);\n break;\n case 125:\n case 59:\n f = (0 < r ? f.replace(N, '') : f).trim();\n if (1 < (t = f.length)) switch (0 === u && (q = f.charCodeAt(0), 45 === q || 96 < q && 123 > q) && (t = (f = f.replace(' ', ':')).length), 0 < A && void 0 !== (C = H(1, f, c, d, D, z, p.length, h, a, h)) && 0 === (t = (f = C.trim()).length) && (f = '\\x00\\x00'), q = f.charCodeAt(0), g = f.charCodeAt(1), q) {\n case 0:\n break;\n case 64:\n if (105 === g || 99 === g) {\n G += f + e.charAt(l);\n break;\n }\n default:\n 58 !== f.charCodeAt(t - 1) && (p += P(f, q, g, f.charCodeAt(2)));\n }\n I = r = u = q = 0;\n f = '';\n g = e.charCodeAt(++l);\n }\n }\n switch (g) {\n case 13:\n case 10:\n 47 === b ? b = 0 : 0 === 1 + q && 107 !== h && 0 < f.length && (r = 1, f += '\\x00');\n 0 < A * Y && H(0, f, c, d, D, z, p.length, h, a, h);\n z = 1;\n D++;\n break;\n case 59:\n case 125:\n if (0 === b + n + v + m) {\n z++;\n break;\n }\n default:\n z++;\n y = e.charAt(l);\n switch (g) {\n case 9:\n case 32:\n if (0 === n + m + b) switch (x) {\n case 44:\n case 58:\n case 9:\n case 32:\n y = '';\n break;\n default:\n 32 !== g && (y = ' ');\n }\n break;\n case 0:\n y = '\\\\0';\n break;\n case 12:\n y = '\\\\f';\n break;\n case 11:\n y = '\\\\v';\n break;\n case 38:\n 0 === n + b + m && (r = I = 1, y = '\\f' + y);\n break;\n case 108:\n if (0 === n + b + m + E && 0 < u) switch (l - u) {\n case 2:\n 112 === x && 58 === e.charCodeAt(l - 3) && (E = x);\n case 8:\n 111 === K && (E = K);\n }\n break;\n case 58:\n 0 === n + b + m && (u = l);\n break;\n case 44:\n 0 === b + v + n + m && (r = 1, y += '\\r');\n break;\n case 34:\n case 39:\n 0 === b && (n = n === g ? 0 : 0 === n ? g : n);\n break;\n case 91:\n 0 === n + b + v && m++;\n break;\n case 93:\n 0 === n + b + v && m--;\n break;\n case 41:\n 0 === n + b + m && v--;\n break;\n case 40:\n if (0 === n + b + m) {\n if (0 === q) switch (2 * x + 3 * K) {\n case 533:\n break;\n default:\n q = 1;\n }\n v++;\n }\n break;\n case 64:\n 0 === b + v + n + m + u + k && (k = 1);\n break;\n case 42:\n case 47:\n if (!(0 < n + m + v)) switch (b) {\n case 0:\n switch (2 * g + 3 * e.charCodeAt(l + 1)) {\n case 235:\n b = 47;\n break;\n case 220:\n t = l, b = 42;\n }\n break;\n case 42:\n 47 === g && 42 === x && t + 2 !== l && (33 === e.charCodeAt(t + 2) && (p += e.substring(t, l + 1)), y = '', b = 0);\n }\n }\n 0 === b && (f += y);\n }\n K = x;\n x = g;\n l++;\n }\n t = p.length;\n if (0 < t) {\n r = c;\n if (0 < A && (C = H(2, p, r, d, D, z, t, h, a, h), void 0 !== C && 0 === (p = C).length)) return G + p + F;\n p = r.join(',') + '{' + p + '}';\n if (0 !== w * E) {\n 2 !== w || L(p, 2) || (E = 0);\n switch (E) {\n case 111:\n p = p.replace(ha, ':-moz-$1') + p;\n break;\n case 112:\n p = p.replace(Q, '::-webkit-input-$1') + p.replace(Q, '::-moz-$1') + p.replace(Q, ':-ms-input-$1') + p;\n }\n E = 0;\n }\n }\n return G + p + F;\n }\n function X(d, c, e) {\n var h = c.trim().split(ia);\n c = h;\n var a = h.length,\n m = d.length;\n switch (m) {\n case 0:\n case 1:\n var b = 0;\n for (d = 0 === m ? '' : d[0] + ' '; b < a; ++b) {\n c[b] = Z(d, c[b], e).trim();\n }\n break;\n default:\n var v = b = 0;\n for (c = []; b < a; ++b) {\n for (var n = 0; n < m; ++n) {\n c[v++] = Z(d[n] + ' ', h[b], e).trim();\n }\n }\n }\n return c;\n }\n function Z(d, c, e) {\n var h = c.charCodeAt(0);\n 33 > h && (h = (c = c.trim()).charCodeAt(0));\n switch (h) {\n case 38:\n return c.replace(F, '$1' + d.trim());\n case 58:\n return d.trim() + c.replace(F, '$1' + d.trim());\n default:\n if (0 < 1 * e && 0 < c.indexOf('\\f')) return c.replace(F, (58 === d.charCodeAt(0) ? '' : '$1') + d.trim());\n }\n return d + c;\n }\n function P(d, c, e, h) {\n var a = d + ';',\n m = 2 * c + 3 * e + 4 * h;\n if (944 === m) {\n d = a.indexOf(':', 9) + 1;\n var b = a.substring(d, a.length - 1).trim();\n b = a.substring(0, d).trim() + b + ';';\n return 1 === w || 2 === w && L(b, 1) ? '-webkit-' + b + b : b;\n }\n if (0 === w || 2 === w && !L(a, 1)) return a;\n switch (m) {\n case 1015:\n return 97 === a.charCodeAt(10) ? '-webkit-' + a + a : a;\n case 951:\n return 116 === a.charCodeAt(3) ? '-webkit-' + a + a : a;\n case 963:\n return 110 === a.charCodeAt(5) ? '-webkit-' + a + a : a;\n case 1009:\n if (100 !== a.charCodeAt(4)) break;\n case 969:\n case 942:\n return '-webkit-' + a + a;\n case 978:\n return '-webkit-' + a + '-moz-' + a + a;\n case 1019:\n case 983:\n return '-webkit-' + a + '-moz-' + a + '-ms-' + a + a;\n case 883:\n if (45 === a.charCodeAt(8)) return '-webkit-' + a + a;\n if (0 < a.indexOf('image-set(', 11)) return a.replace(ja, '$1-webkit-$2') + a;\n break;\n case 932:\n if (45 === a.charCodeAt(4)) switch (a.charCodeAt(5)) {\n case 103:\n return '-webkit-box-' + a.replace('-grow', '') + '-webkit-' + a + '-ms-' + a.replace('grow', 'positive') + a;\n case 115:\n return '-webkit-' + a + '-ms-' + a.replace('shrink', 'negative') + a;\n case 98:\n return '-webkit-' + a + '-ms-' + a.replace('basis', 'preferred-size') + a;\n }\n return '-webkit-' + a + '-ms-' + a + a;\n case 964:\n return '-webkit-' + a + '-ms-flex-' + a + a;\n case 1023:\n if (99 !== a.charCodeAt(8)) break;\n b = a.substring(a.indexOf(':', 15)).replace('flex-', '').replace('space-between', 'justify');\n return '-webkit-box-pack' + b + '-webkit-' + a + '-ms-flex-pack' + b + a;\n case 1005:\n return ka.test(a) ? a.replace(aa, ':-webkit-') + a.replace(aa, ':-moz-') + a : a;\n case 1e3:\n b = a.substring(13).trim();\n c = b.indexOf('-') + 1;\n switch (b.charCodeAt(0) + b.charCodeAt(c)) {\n case 226:\n b = a.replace(G, 'tb');\n break;\n case 232:\n b = a.replace(G, 'tb-rl');\n break;\n case 220:\n b = a.replace(G, 'lr');\n break;\n default:\n return a;\n }\n return '-webkit-' + a + '-ms-' + b + a;\n case 1017:\n if (-1 === a.indexOf('sticky', 9)) break;\n case 975:\n c = (a = d).length - 10;\n b = (33 === a.charCodeAt(c) ? a.substring(0, c) : a).substring(d.indexOf(':', 7) + 1).trim();\n switch (m = b.charCodeAt(0) + (b.charCodeAt(7) | 0)) {\n case 203:\n if (111 > b.charCodeAt(8)) break;\n case 115:\n a = a.replace(b, '-webkit-' + b) + ';' + a;\n break;\n case 207:\n case 102:\n a = a.replace(b, '-webkit-' + (102 < m ? 'inline-' : '') + 'box') + ';' + a.replace(b, '-webkit-' + b) + ';' + a.replace(b, '-ms-' + b + 'box') + ';' + a;\n }\n return a + ';';\n case 938:\n if (45 === a.charCodeAt(5)) switch (a.charCodeAt(6)) {\n case 105:\n return b = a.replace('-items', ''), '-webkit-' + a + '-webkit-box-' + b + '-ms-flex-' + b + a;\n case 115:\n return '-webkit-' + a + '-ms-flex-item-' + a.replace(ba, '') + a;\n default:\n return '-webkit-' + a + '-ms-flex-line-pack' + a.replace('align-content', '').replace(ba, '') + a;\n }\n break;\n case 973:\n case 989:\n if (45 !== a.charCodeAt(3) || 122 === a.charCodeAt(4)) break;\n case 931:\n case 953:\n if (!0 === la.test(d)) return 115 === (b = d.substring(d.indexOf(':') + 1)).charCodeAt(0) ? P(d.replace('stretch', 'fill-available'), c, e, h).replace(':fill-available', ':stretch') : a.replace(b, '-webkit-' + b) + a.replace(b, '-moz-' + b.replace('fill-', '')) + a;\n break;\n case 962:\n if (a = '-webkit-' + a + (102 === a.charCodeAt(5) ? '-ms-' + a : '') + a, 211 === e + h && 105 === a.charCodeAt(13) && 0 < a.indexOf('transform', 10)) return a.substring(0, a.indexOf(';', 27) + 1).replace(ma, '$1-webkit-$2') + a;\n }\n return a;\n }\n function L(d, c) {\n var e = d.indexOf(1 === c ? ':' : '{'),\n h = d.substring(0, 3 !== c ? e : 10);\n e = d.substring(e + 1, d.length - 1);\n return R(2 !== c ? h : h.replace(na, '$1'), e, c);\n }\n function ea(d, c) {\n var e = P(c, c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2));\n return e !== c + ';' ? e.replace(oa, ' or ($1)').substring(4) : '(' + c + ')';\n }\n function H(d, c, e, h, a, m, b, v, n, q) {\n for (var g = 0, x = c, w; g < A; ++g) {\n switch (w = S[g].call(B, d, x, e, h, a, m, b, v, n, q)) {\n case void 0:\n case !1:\n case !0:\n case null:\n break;\n default:\n x = w;\n }\n }\n if (x !== c) return x;\n }\n function T(d) {\n switch (d) {\n case void 0:\n case null:\n A = S.length = 0;\n break;\n default:\n if ('function' === typeof d) S[A++] = d;else if ('object' === typeof d) for (var c = 0, e = d.length; c < e; ++c) {\n T(d[c]);\n } else Y = !!d | 0;\n }\n return T;\n }\n function U(d) {\n d = d.prefix;\n void 0 !== d && (R = null, d ? 'function' !== typeof d ? w = 1 : (w = 2, R = d) : w = 0);\n return U;\n }\n function B(d, c) {\n var e = d;\n 33 > e.charCodeAt(0) && (e = e.trim());\n V = e;\n e = [V];\n if (0 < A) {\n var h = H(-1, c, e, e, D, z, 0, 0, 0, 0);\n void 0 !== h && 'string' === typeof h && (c = h);\n }\n var a = M(O, e, c, 0, 0);\n 0 < A && (h = H(-2, a, e, e, D, z, a.length, 0, 0, 0), void 0 !== h && (a = h));\n V = '';\n E = 0;\n z = D = 1;\n return a;\n }\n var ca = /^\\0+/g,\n N = /[\\0\\r\\f]/g,\n aa = /: */g,\n ka = /zoo|gra/,\n ma = /([,: ])(transform)/g,\n ia = /,\\r+?/g,\n F = /([\\t\\r\\n ])*\\f?&/g,\n fa = /@(k\\w+)\\s*(\\S*)\\s*/,\n Q = /::(place)/g,\n ha = /:(read-only)/g,\n G = /[svh]\\w+-[tblr]{2}/,\n da = /\\(\\s*(.*)\\s*\\)/g,\n oa = /([\\s\\S]*?);/g,\n ba = /-self|flex-/g,\n na = /[^]*?(:[rp][el]a[\\w-]+)[^]*/,\n la = /stretch|:\\s*\\w+\\-(?:conte|avail)/,\n ja = /([^-])(image-set\\()/,\n z = 1,\n D = 1,\n E = 0,\n w = 1,\n O = [],\n S = [],\n A = 0,\n R = null,\n Y = 0,\n V = '';\n B.use = T;\n B.set = U;\n void 0 !== W && U(W);\n return B;\n}\nexport default stylis_min;","import { StyleSheet } from '@emotion/sheet';\nimport Stylis from '@emotion/stylis';\nimport '@emotion/weak-memoize';\n\n// https://github.com/thysultan/stylis.js/tree/master/plugins/rule-sheet\n// inlined to avoid umd wrapper and peerDep warnings/installing stylis\n// since we use stylis after closure compiler\nvar delimiter = '/*|*/';\nvar needle = delimiter + '}';\nfunction toSheet(block) {\n if (block) {\n Sheet.current.insert(block + '}');\n }\n}\nvar Sheet = {\n current: null\n};\nvar ruleSheet = function ruleSheet(context, content, selectors, parents, line, column, length, ns, depth, at) {\n switch (context) {\n // property\n case 1:\n {\n switch (content.charCodeAt(0)) {\n case 64:\n {\n // @import\n Sheet.current.insert(content + ';');\n return '';\n }\n // charcode for l\n\n case 108:\n {\n // charcode for b\n // this ignores label\n if (content.charCodeAt(2) === 98) {\n return '';\n }\n }\n }\n break;\n }\n // selector\n\n case 2:\n {\n if (ns === 0) return content + delimiter;\n break;\n }\n // at-rule\n\n case 3:\n {\n switch (ns) {\n // @font-face, @page\n case 102:\n case 112:\n {\n Sheet.current.insert(selectors[0] + content);\n return '';\n }\n default:\n {\n return content + (at === 0 ? delimiter : '');\n }\n }\n }\n case -2:\n {\n content.split(needle).forEach(toSheet);\n }\n }\n};\nvar createCache = function createCache(options) {\n if (options === undefined) options = {};\n var key = options.key || 'css';\n var stylisOptions;\n if (options.prefix !== undefined) {\n stylisOptions = {\n prefix: options.prefix\n };\n }\n var stylis = new Stylis(stylisOptions);\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n var inserted = {}; // $FlowFixMe\n\n var container;\n {\n container = options.container || document.head;\n var nodes = document.querySelectorAll(\"style[data-emotion-\" + key + \"]\");\n Array.prototype.forEach.call(nodes, function (node) {\n var attrib = node.getAttribute(\"data-emotion-\" + key); // $FlowFixMe\n\n attrib.split(' ').forEach(function (id) {\n inserted[id] = true;\n });\n if (node.parentNode !== container) {\n container.appendChild(node);\n }\n });\n }\n var _insert;\n {\n stylis.use(options.stylisPlugins)(ruleSheet);\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n var name = serialized.name;\n Sheet.current = sheet;\n if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n var map = serialized.map;\n Sheet.current = {\n insert: function insert(rule) {\n sheet.insert(rule + map);\n }\n };\n }\n stylis(selector, serialized.styles);\n if (shouldCache) {\n cache.inserted[name] = true;\n }\n };\n }\n if (process.env.NODE_ENV !== 'production') {\n // https://esbench.com/bench/5bf7371a4cd7e6009ef61d0a\n var commentStart = /\\/\\*/g;\n var commentEnd = /\\*\\//g;\n stylis.use(function (context, content) {\n switch (context) {\n case -1:\n {\n while (commentStart.test(content)) {\n commentEnd.lastIndex = commentStart.lastIndex;\n if (commentEnd.test(content)) {\n commentStart.lastIndex = commentEnd.lastIndex;\n continue;\n }\n throw new Error('Your styles have an unterminated comment (\"/*\" without corresponding \"*/\").');\n }\n commentStart.lastIndex = 0;\n break;\n }\n }\n });\n stylis.use(function (context, content, selectors) {\n switch (context) {\n case -1:\n {\n var flag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n var unsafePseudoClasses = content.match(/(:first|:nth|:nth-last)-child/g);\n if (unsafePseudoClasses && cache.compat !== true) {\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n var ignoreRegExp = new RegExp(unsafePseudoClass + \".*\\\\/\\\\* \" + flag + \" \\\\*\\\\/\");\n var ignore = ignoreRegExp.test(content);\n if (unsafePseudoClass && !ignore) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n }\n });\n }\n break;\n }\n }\n });\n }\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n return cache;\n};\nexport default createCache;","var isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className]);\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n if (\n // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false ||\n // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false && cache.compat !== undefined) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n do {\n var maybeStyles = cache.insert(\".\" + className, current, cache.sheet, true);\n current = current.next;\n } while (current !== undefined);\n }\n};\nexport { getRegisteredStyles, insertStyles };","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k = /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^= /* k >>> r: */\n k >>> 24;\n h = /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^ /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h = /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n h ^= h >>> 13;\n h = /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\nexport default murmur2;","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\nexport default unitlessKeys;","function memoize(fn) {\n var cache = {};\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\nexport default memoize;","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\nvar processStyleName = memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n return value;\n};\nif (process.env.NODE_ENV !== 'production') {\n var contentValuePattern = /(attr|calc|counters?|url)\\(/;\n var contentValues = ['normal', 'none', 'counter', 'open-quote', 'close-quote', 'no-open-quote', 'no-close-quote', 'initial', 'inherit', 'unset'];\n var oldProcessStyleValue = processStyleValue;\n var msPattern = /^-ms-/;\n var hyphenPattern = /-(.)/g;\n var hyphenatedCache = {};\n processStyleValue = function processStyleValue(key, value) {\n if (key === 'content') {\n if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n console.error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n }\n }\n var processed = oldProcessStyleValue(key, value);\n if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n hyphenatedCache[key] = true;\n console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n return _char.toUpperCase();\n }) + \"?\");\n }\n return processed;\n };\n}\nvar shouldWarnAboutInterpolatingClassNameFromCss = true;\nfunction handleInterpolation(mergedProps, registered, interpolation, couldBeSelectorInterpolation) {\n if (interpolation == null) {\n return '';\n }\n if (interpolation.__emotion_styles !== undefined) {\n if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n throw new Error('Component selectors can only be used in conjunction with babel-plugin-emotion.');\n }\n return interpolation;\n }\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n var styles = interpolation.styles + \";\";\n if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n styles += interpolation.map;\n }\n return styles;\n }\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result, couldBeSelectorInterpolation);\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n }\n break;\n }\n case 'string':\n if (process.env.NODE_ENV !== 'production') {\n var matched = [];\n var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n var fakeVarName = \"animation\" + matched.length;\n matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n return \"${\" + fakeVarName + \"}\";\n });\n if (matched.length) {\n console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n }\n }\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n if (registered == null) {\n return interpolation;\n }\n var cached = registered[interpolation];\n if (process.env.NODE_ENV !== 'production' && couldBeSelectorInterpolation && shouldWarnAboutInterpolatingClassNameFromCss && cached !== undefined) {\n console.error('Interpolating a className from css`` is not recommended and will cause problems with composition.\\n' + 'Interpolating a className from css`` will be completely unsupported in a future major version of Emotion');\n shouldWarnAboutInterpolatingClassNameFromCss = false;\n }\n return cached !== undefined && !couldBeSelectorInterpolation ? cached : interpolation;\n}\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i], false);\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n throw new Error('Component selectors can only be used in conjunction with babel-plugin-emotion.');\n }\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value, false);\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n default:\n {\n if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n }\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n return string;\n}\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*;/g;\nvar sourceMapPattern;\nif (process.env.NODE_ENV !== 'production') {\n sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings, false);\n } else {\n if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i], styles.charCodeAt(styles.length - 1) === 46);\n if (stringMode) {\n if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n styles += strings[i];\n }\n }\n var sourceMap;\n if (process.env.NODE_ENV !== 'production') {\n styles = styles.replace(sourceMapPattern, function (match) {\n sourceMap = match;\n return '';\n });\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' +\n // $FlowFixMe we know it's not null\n match[1];\n }\n var name = hashString(styles) + identifierName;\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n return {\n name: name,\n styles: styles,\n map: sourceMap,\n next: cursor,\n toString: function toString() {\n return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n }\n };\n }\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\nexport { serializeStyles };","import '@babel/runtime/helpers/inheritsLoose';\nimport { createContext, forwardRef, createElement, Fragment } from 'react';\nimport createCache from '@emotion/cache';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar EmotionCacheContext = /*#__PURE__*/createContext(\n// we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? createCache() : null);\nvar ThemeContext = /*#__PURE__*/createContext({});\nvar CacheProvider = EmotionCacheContext.Provider;\nvar withEmotionCache = function withEmotionCache(func) {\n var render = function render(props, ref) {\n return /*#__PURE__*/createElement(EmotionCacheContext.Consumer, null, function (cache) {\n return func(props, cache, ref);\n });\n }; // $FlowFixMe\n\n return /*#__PURE__*/forwardRef(render);\n};\n\n// thus we only need to replace what is a valid character for JS, but not for CSS\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' &&\n // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/css' like this: css`\" + props.css + \"`\");\n }\n var newProps = {};\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n newProps[typePropName] = type; // TODO: check if this still works with all of those different JSX functions\n\n if (process.env.NODE_ENV !== 'production') {\n var error = new Error();\n if (error.stack) {\n // chrome\n var match = error.stack.match(/at (?:Object\\.|Module\\.|)(?:jsx|createEmotionProps).*\\n\\s+at (?:Object\\.|)([A-Z][A-Za-z$]+) /);\n if (!match) {\n // safari and firefox\n match = error.stack.match(/.*\\n([A-Z][A-Za-z$]+)@/);\n }\n if (match) {\n newProps[labelPropName] = sanitizeIdentifier(match[1]);\n }\n }\n }\n return newProps;\n};\nvar Noop = function Noop() {\n return null;\n};\nvar render = function render(cache, props, theme, ref) {\n var cssProp = theme === null ? props.css : props.css(theme); // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n var type = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n var serialized = serializeStyles(registeredStyles);\n if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n if (labelFromStack) {\n serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n var rules = insertStyles(cache, serialized, typeof type === 'string');\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n newProps.ref = ref;\n newProps.className = className;\n var ele = /*#__PURE__*/createElement(type, newProps);\n var possiblyStyleElement = /*#__PURE__*/createElement(Noop, null);\n return /*#__PURE__*/createElement(Fragment, null, possiblyStyleElement, ele);\n}; // eslint-disable-next-line no-undef\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n if (typeof props.css === 'function') {\n return /*#__PURE__*/createElement(ThemeContext.Consumer, null, function (theme) {\n return render(cache, props, theme, ref);\n });\n }\n return render(cache, props, null, ref);\n});\nif (process.env.NODE_ENV !== 'production') {\n Emotion.displayName = 'EmotionCssPropInternal';\n}\nexport { CacheProvider as C, Emotion as E, ThemeContext as T, createEmotionProps as c, hasOwnProperty as h, withEmotionCache as w };","import { serializeStyles } from '@emotion/serialize';\nfunction css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return serializeStyles(args);\n}\nexport default css;","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport { createElement, Component, Fragment } from 'react';\nimport '@emotion/cache';\nimport { h as hasOwnProperty, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext } from './emotion-element-04d85134.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, w as withEmotionCache } from './emotion-element-04d85134.browser.esm.js';\nimport { insertStyles, getRegisteredStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { StyleSheet } from '@emotion/sheet';\nimport css from '@emotion/css';\nexport { default as css } from '@emotion/css';\nvar jsx = function jsx(type, props) {\n var args = arguments;\n if (props == null || !hasOwnProperty.call(props, 'css')) {\n // $FlowFixMe\n return createElement.apply(undefined, args);\n }\n var argsLength = args.length;\n var createElementArgArray = new Array(argsLength);\n createElementArgArray[0] = Emotion;\n createElementArgArray[1] = createEmotionProps(type, props);\n for (var i = 2; i < argsLength; i++) {\n createElementArgArray[i] = args[i];\n } // $FlowFixMe\n\n return createElement.apply(null, createElementArgArray);\n};\nvar warnedAboutCssPropForGlobal = false;\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n if (process.env.NODE_ENV !== 'production' && !warnedAboutCssPropForGlobal && (\n // check for className as well since the user is\n // probably using the custom createElement which\n // means it will be turned into a className prop\n // $FlowFixMe I don't really want to add it to the type since it shouldn't be used\n props.className || props.css)) {\n console.error(\"It looks like you're using the css prop on Global, did you mean to use the styles prop instead?\");\n warnedAboutCssPropForGlobal = true;\n }\n var styles = props.styles;\n if (typeof styles === 'function') {\n return /*#__PURE__*/createElement(ThemeContext.Consumer, null, function (theme) {\n var serialized = serializeStyles([styles(theme)]);\n return /*#__PURE__*/createElement(InnerGlobal, {\n serialized: serialized,\n cache: cache\n });\n });\n }\n var serialized = serializeStyles([styles]);\n return /*#__PURE__*/createElement(InnerGlobal, {\n serialized: serialized,\n cache: cache\n });\n});\n\n// maintain place over rerenders.\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\nvar InnerGlobal = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(InnerGlobal, _React$Component);\n function InnerGlobal(props, context, updater) {\n return _React$Component.call(this, props, context, updater) || this;\n }\n var _proto = InnerGlobal.prototype;\n _proto.componentDidMount = function componentDidMount() {\n this.sheet = new StyleSheet({\n key: this.props.cache.key + \"-global\",\n nonce: this.props.cache.sheet.nonce,\n container: this.props.cache.sheet.container\n }); // $FlowFixMe\n\n var node = document.querySelector(\"style[data-emotion-\" + this.props.cache.key + \"=\\\"\" + this.props.serialized.name + \"\\\"]\");\n if (node !== null) {\n this.sheet.tags.push(node);\n }\n if (this.props.cache.sheet.tags.length) {\n this.sheet.before = this.props.cache.sheet.tags[0];\n }\n this.insertStyles();\n };\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (prevProps.serialized.name !== this.props.serialized.name) {\n this.insertStyles();\n }\n };\n _proto.insertStyles = function insertStyles$1() {\n if (this.props.serialized.next !== undefined) {\n // insert keyframes\n insertStyles(this.props.cache, this.props.serialized.next, true);\n }\n if (this.sheet.tags.length) {\n // if this doesn't exist then it will be null so the style element will be appended\n var element = this.sheet.tags[this.sheet.tags.length - 1].nextElementSibling;\n this.sheet.before = element;\n this.sheet.flush();\n }\n this.props.cache.insert(\"\", this.props.serialized, this.sheet, false);\n };\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.sheet.flush();\n };\n _proto.render = function render() {\n return null;\n };\n return InnerGlobal;\n}(Component);\nvar keyframes = function keyframes() {\n var insertable = css.apply(void 0, arguments);\n var name = \"animation-\" + insertable.name; // $FlowFixMe\n\n return {\n name: name,\n styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n anim: 1,\n toString: function toString() {\n return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n }\n };\n};\nvar classnames = function classnames(args) {\n var len = args.length;\n var i = 0;\n var cls = '';\n for (; i < len; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n switch (typeof arg) {\n case 'boolean':\n break;\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n toAdd = '';\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n break;\n }\n default:\n {\n toAdd = arg;\n }\n }\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n return cls;\n};\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n if (registeredStyles.length < 2) {\n return className;\n }\n return rawClassName + css(registeredStyles);\n}\nvar Noop = function Noop() {\n return null;\n};\nvar ClassNames = withEmotionCache(function (props, context) {\n return /*#__PURE__*/createElement(ThemeContext.Consumer, null, function (theme) {\n var hasRendered = false;\n var css = function css() {\n if (hasRendered && process.env.NODE_ENV !== 'production') {\n throw new Error('css can only be used during render');\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n var serialized = serializeStyles(args, context.registered);\n {\n insertStyles(context, serialized, false);\n }\n return context.key + \"-\" + serialized.name;\n };\n var cx = function cx() {\n if (hasRendered && process.env.NODE_ENV !== 'production') {\n throw new Error('cx can only be used during render');\n }\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return merge(context.registered, css, classnames(args));\n };\n var content = {\n css: css,\n cx: cx,\n theme: theme\n };\n var ele = props.children(content);\n hasRendered = true;\n var possiblyStyleElement = /*#__PURE__*/createElement(Noop, null);\n return /*#__PURE__*/createElement(Fragment, null, possiblyStyleElement, ele);\n });\n});\nexport { ClassNames, Global, jsx as createElement, jsx, keyframes };","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar b = \"function\" === typeof Symbol && Symbol.for,\n c = b ? Symbol.for(\"react.element\") : 60103,\n d = b ? Symbol.for(\"react.portal\") : 60106,\n e = b ? Symbol.for(\"react.fragment\") : 60107,\n f = b ? Symbol.for(\"react.strict_mode\") : 60108,\n g = b ? Symbol.for(\"react.profiler\") : 60114,\n h = b ? Symbol.for(\"react.provider\") : 60109,\n k = b ? Symbol.for(\"react.context\") : 60110,\n l = b ? Symbol.for(\"react.async_mode\") : 60111,\n m = b ? Symbol.for(\"react.concurrent_mode\") : 60111,\n n = b ? Symbol.for(\"react.forward_ref\") : 60112,\n p = b ? Symbol.for(\"react.suspense\") : 60113,\n q = b ? Symbol.for(\"react.suspense_list\") : 60120,\n r = b ? Symbol.for(\"react.memo\") : 60115,\n t = b ? Symbol.for(\"react.lazy\") : 60116,\n v = b ? Symbol.for(\"react.block\") : 60121,\n w = b ? Symbol.for(\"react.fundamental\") : 60117,\n x = b ? Symbol.for(\"react.responder\") : 60118,\n y = b ? Symbol.for(\"react.scope\") : 60119;\nfunction z(a) {\n if (\"object\" === typeof a && null !== a) {\n var u = a.$$typeof;\n switch (u) {\n case c:\n switch (a = a.type, a) {\n case l:\n case m:\n case e:\n case g:\n case f:\n case p:\n return a;\n default:\n switch (a = a && a.$$typeof, a) {\n case k:\n case n:\n case t:\n case r:\n case h:\n return a;\n default:\n return u;\n }\n }\n case d:\n return u;\n }\n }\n}\nfunction A(a) {\n return z(a) === m;\n}\nexports.AsyncMode = l;\nexports.ConcurrentMode = m;\nexports.ContextConsumer = k;\nexports.ContextProvider = h;\nexports.Element = c;\nexports.ForwardRef = n;\nexports.Fragment = e;\nexports.Lazy = t;\nexports.Memo = r;\nexports.Portal = d;\nexports.Profiler = g;\nexports.StrictMode = f;\nexports.Suspense = p;\nexports.isAsyncMode = function (a) {\n return A(a) || z(a) === l;\n};\nexports.isConcurrentMode = A;\nexports.isContextConsumer = function (a) {\n return z(a) === k;\n};\nexports.isContextProvider = function (a) {\n return z(a) === h;\n};\nexports.isElement = function (a) {\n return \"object\" === typeof a && null !== a && a.$$typeof === c;\n};\nexports.isForwardRef = function (a) {\n return z(a) === n;\n};\nexports.isFragment = function (a) {\n return z(a) === e;\n};\nexports.isLazy = function (a) {\n return z(a) === t;\n};\nexports.isMemo = function (a) {\n return z(a) === r;\n};\nexports.isPortal = function (a) {\n return z(a) === d;\n};\nexports.isProfiler = function (a) {\n return z(a) === g;\n};\nexports.isStrictMode = function (a) {\n return z(a) === f;\n};\nexports.isSuspense = function (a) {\n return z(a) === p;\n};\nexports.isValidElementType = function (a) {\n return \"string\" === typeof a || \"function\" === typeof a || a === e || a === m || a === g || a === f || a === p || a === q || \"object\" === typeof a && null !== a && (a.$$typeof === t || a.$$typeof === r || a.$$typeof === h || a.$$typeof === k || a.$$typeof === n || a.$$typeof === w || a.$$typeof === x || a.$$typeof === y || a.$$typeof === v);\n};\nexports.typeOf = z;","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","const set = require('regenerate')(0x11909);\nset.addRange(0x11900, 0x11906).addRange(0x1190C, 0x11913).addRange(0x11915, 0x11916).addRange(0x11918, 0x11935).addRange(0x11937, 0x11938).addRange(0x1193B, 0x11946).addRange(0x11950, 0x11959);\nmodule.exports = set;","const set = require('regenerate')(0x11FB0);\nset.addRange(0xA4D0, 0xA4FF);\nmodule.exports = set;","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","const set = require('regenerate')(0xA9CF);\nset.addRange(0x1A00, 0x1A1B).addRange(0x1A1E, 0x1A1F);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x30, 0x39).addRange(0x41, 0x46).addRange(0x61, 0x66);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x1BC00, 0x1BC6A).addRange(0x1BC70, 0x1BC7C).addRange(0x1BC80, 0x1BC88).addRange(0x1BC90, 0x1BC99).addRange(0x1BC9C, 0x1BCA3);\nmodule.exports = set;","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","const set = require('regenerate')();\nset.addRange(0x2FF2, 0x2FF3);\nmodule.exports = set;","var arraySlice = require('../internals/array-slice-simple');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import t, { Component as e } from \"react\";\nimport r from \"prop-types\";\nimport n from \"react-fast-compare\";\nimport i from \"invariant\";\nimport o from \"shallowequal\";\nfunction a() {\n return a = Object.assign || function (t) {\n for (var e = 1; e < arguments.length; e++) {\n var r = arguments[e];\n for (var n in r) Object.prototype.hasOwnProperty.call(r, n) && (t[n] = r[n]);\n }\n return t;\n }, a.apply(this, arguments);\n}\nfunction s(t, e) {\n t.prototype = Object.create(e.prototype), t.prototype.constructor = t, c(t, e);\n}\nfunction c(t, e) {\n return c = Object.setPrototypeOf || function (t, e) {\n return t.__proto__ = e, t;\n }, c(t, e);\n}\nfunction u(t, e) {\n if (null == t) return {};\n var r,\n n,\n i = {},\n o = Object.keys(t);\n for (n = 0; n < o.length; n++) e.indexOf(r = o[n]) >= 0 || (i[r] = t[r]);\n return i;\n}\nvar l = {\n BASE: \"base\",\n BODY: \"body\",\n HEAD: \"head\",\n HTML: \"html\",\n LINK: \"link\",\n META: \"meta\",\n NOSCRIPT: \"noscript\",\n SCRIPT: \"script\",\n STYLE: \"style\",\n TITLE: \"title\",\n FRAGMENT: \"Symbol(react.fragment)\"\n },\n p = {\n rel: [\"amphtml\", \"canonical\", \"alternate\"]\n },\n f = {\n type: [\"application/ld+json\"]\n },\n d = {\n charset: \"\",\n name: [\"robots\", \"description\"],\n property: [\"og:type\", \"og:title\", \"og:url\", \"og:image\", \"og:image:alt\", \"og:description\", \"twitter:url\", \"twitter:title\", \"twitter:description\", \"twitter:image\", \"twitter:image:alt\", \"twitter:card\", \"twitter:site\"]\n },\n h = Object.keys(l).map(function (t) {\n return l[t];\n }),\n m = {\n accesskey: \"accessKey\",\n charset: \"charSet\",\n class: \"className\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n \"http-equiv\": \"httpEquiv\",\n itemprop: \"itemProp\",\n tabindex: \"tabIndex\"\n },\n y = Object.keys(m).reduce(function (t, e) {\n return t[m[e]] = e, t;\n }, {}),\n T = function (t, e) {\n for (var r = t.length - 1; r >= 0; r -= 1) {\n var n = t[r];\n if (Object.prototype.hasOwnProperty.call(n, e)) return n[e];\n }\n return null;\n },\n g = function (t) {\n var e = T(t, l.TITLE),\n r = T(t, \"titleTemplate\");\n if (Array.isArray(e) && (e = e.join(\"\")), r && e) return r.replace(/%s/g, function () {\n return e;\n });\n var n = T(t, \"defaultTitle\");\n return e || n || void 0;\n },\n b = function (t) {\n return T(t, \"onChangeClientState\") || function () {};\n },\n v = function (t, e) {\n return e.filter(function (e) {\n return void 0 !== e[t];\n }).map(function (e) {\n return e[t];\n }).reduce(function (t, e) {\n return a({}, t, e);\n }, {});\n },\n A = function (t, e) {\n return e.filter(function (t) {\n return void 0 !== t[l.BASE];\n }).map(function (t) {\n return t[l.BASE];\n }).reverse().reduce(function (e, r) {\n if (!e.length) for (var n = Object.keys(r), i = 0; i < n.length; i += 1) {\n var o = n[i].toLowerCase();\n if (-1 !== t.indexOf(o) && r[o]) return e.concat(r);\n }\n return e;\n }, []);\n },\n C = function (t, e, r) {\n var n = {};\n return r.filter(function (e) {\n return !!Array.isArray(e[t]) || (void 0 !== e[t] && console && \"function\" == typeof console.warn && console.warn(\"Helmet: \" + t + ' should be of type \"Array\". Instead found type \"' + typeof e[t] + '\"'), !1);\n }).map(function (e) {\n return e[t];\n }).reverse().reduce(function (t, r) {\n var i = {};\n r.filter(function (t) {\n for (var r, o = Object.keys(t), a = 0; a < o.length; a += 1) {\n var s = o[a],\n c = s.toLowerCase();\n -1 === e.indexOf(c) || \"rel\" === r && \"canonical\" === t[r].toLowerCase() || \"rel\" === c && \"stylesheet\" === t[c].toLowerCase() || (r = c), -1 === e.indexOf(s) || \"innerHTML\" !== s && \"cssText\" !== s && \"itemprop\" !== s || (r = s);\n }\n if (!r || !t[r]) return !1;\n var u = t[r].toLowerCase();\n return n[r] || (n[r] = {}), i[r] || (i[r] = {}), !n[r][u] && (i[r][u] = !0, !0);\n }).reverse().forEach(function (e) {\n return t.push(e);\n });\n for (var o = Object.keys(i), s = 0; s < o.length; s += 1) {\n var c = o[s],\n u = a({}, n[c], i[c]);\n n[c] = u;\n }\n return t;\n }, []).reverse();\n },\n O = function (t, e) {\n if (Array.isArray(t) && t.length) for (var r = 0; r < t.length; r += 1) if (t[r][e]) return !0;\n return !1;\n },\n S = function (t) {\n return Array.isArray(t) ? t.join(\"\") : t;\n },\n E = function (t, e) {\n return Array.isArray(t) ? t.reduce(function (t, r) {\n return function (t, e) {\n for (var r = Object.keys(t), n = 0; n < r.length; n += 1) if (e[r[n]] && e[r[n]].includes(t[r[n]])) return !0;\n return !1;\n }(r, e) ? t.priority.push(r) : t.default.push(r), t;\n }, {\n priority: [],\n default: []\n }) : {\n default: t\n };\n },\n I = function (t, e) {\n var r;\n return a({}, t, ((r = {})[e] = void 0, r));\n },\n P = [l.NOSCRIPT, l.SCRIPT, l.STYLE],\n w = function (t, e) {\n return void 0 === e && (e = !0), !1 === e ? String(t) : String(t).replace(/&/g, \"&\").replace(//g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n },\n x = function (t) {\n return Object.keys(t).reduce(function (e, r) {\n var n = void 0 !== t[r] ? r + '=\"' + t[r] + '\"' : \"\" + r;\n return e ? e + \" \" + n : n;\n }, \"\");\n },\n L = function (t, e) {\n return void 0 === e && (e = {}), Object.keys(t).reduce(function (e, r) {\n return e[m[r] || r] = t[r], e;\n }, e);\n },\n j = function (e, r) {\n return r.map(function (r, n) {\n var i,\n o = ((i = {\n key: n\n })[\"data-rh\"] = !0, i);\n return Object.keys(r).forEach(function (t) {\n var e = m[t] || t;\n \"innerHTML\" === e || \"cssText\" === e ? o.dangerouslySetInnerHTML = {\n __html: r.innerHTML || r.cssText\n } : o[e] = r[t];\n }), t.createElement(e, o);\n });\n },\n M = function (e, r, n) {\n switch (e) {\n case l.TITLE:\n return {\n toComponent: function () {\n return n = r.titleAttributes, (i = {\n key: e = r.title\n })[\"data-rh\"] = !0, o = L(n, i), [t.createElement(l.TITLE, o, e)];\n var e, n, i, o;\n },\n toString: function () {\n return function (t, e, r, n) {\n var i = x(r),\n o = S(e);\n return i ? \"<\" + t + ' data-rh=\"true\" ' + i + \">\" + w(o, n) + \"\" + t + \">\" : \"<\" + t + ' data-rh=\"true\">' + w(o, n) + \"\" + t + \">\";\n }(e, r.title, r.titleAttributes, n);\n }\n };\n case \"bodyAttributes\":\n case \"htmlAttributes\":\n return {\n toComponent: function () {\n return L(r);\n },\n toString: function () {\n return x(r);\n }\n };\n default:\n return {\n toComponent: function () {\n return j(e, r);\n },\n toString: function () {\n return function (t, e, r) {\n return e.reduce(function (e, n) {\n var i = Object.keys(n).filter(function (t) {\n return !(\"innerHTML\" === t || \"cssText\" === t);\n }).reduce(function (t, e) {\n var i = void 0 === n[e] ? e : e + '=\"' + w(n[e], r) + '\"';\n return t ? t + \" \" + i : i;\n }, \"\"),\n o = n.innerHTML || n.cssText || \"\",\n a = -1 === P.indexOf(t);\n return e + \"<\" + t + ' data-rh=\"true\" ' + i + (a ? \"/>\" : \">\" + o + \"\" + t + \">\");\n }, \"\");\n }(e, r, n);\n }\n };\n }\n },\n k = function (t) {\n var e = t.baseTag,\n r = t.bodyAttributes,\n n = t.encode,\n i = t.htmlAttributes,\n o = t.noscriptTags,\n a = t.styleTags,\n s = t.title,\n c = void 0 === s ? \"\" : s,\n u = t.titleAttributes,\n h = t.linkTags,\n m = t.metaTags,\n y = t.scriptTags,\n T = {\n toComponent: function () {},\n toString: function () {\n return \"\";\n }\n };\n if (t.prioritizeSeoTags) {\n var g = function (t) {\n var e = t.linkTags,\n r = t.scriptTags,\n n = t.encode,\n i = E(t.metaTags, d),\n o = E(e, p),\n a = E(r, f);\n return {\n priorityMethods: {\n toComponent: function () {\n return [].concat(j(l.META, i.priority), j(l.LINK, o.priority), j(l.SCRIPT, a.priority));\n },\n toString: function () {\n return M(l.META, i.priority, n) + \" \" + M(l.LINK, o.priority, n) + \" \" + M(l.SCRIPT, a.priority, n);\n }\n },\n metaTags: i.default,\n linkTags: o.default,\n scriptTags: a.default\n };\n }(t);\n T = g.priorityMethods, h = g.linkTags, m = g.metaTags, y = g.scriptTags;\n }\n return {\n priority: T,\n base: M(l.BASE, e, n),\n bodyAttributes: M(\"bodyAttributes\", r, n),\n htmlAttributes: M(\"htmlAttributes\", i, n),\n link: M(l.LINK, h, n),\n meta: M(l.META, m, n),\n noscript: M(l.NOSCRIPT, o, n),\n script: M(l.SCRIPT, y, n),\n style: M(l.STYLE, a, n),\n title: M(l.TITLE, {\n title: c,\n titleAttributes: u\n }, n)\n };\n },\n H = [],\n N = function (t, e) {\n var r = this;\n void 0 === e && (e = \"undefined\" != typeof document), this.instances = [], this.value = {\n setHelmet: function (t) {\n r.context.helmet = t;\n },\n helmetInstances: {\n get: function () {\n return r.canUseDOM ? H : r.instances;\n },\n add: function (t) {\n (r.canUseDOM ? H : r.instances).push(t);\n },\n remove: function (t) {\n var e = (r.canUseDOM ? H : r.instances).indexOf(t);\n (r.canUseDOM ? H : r.instances).splice(e, 1);\n }\n }\n }, this.context = t, this.canUseDOM = e, e || (t.helmet = k({\n baseTag: [],\n bodyAttributes: {},\n encodeSpecialCharacters: !0,\n htmlAttributes: {},\n linkTags: [],\n metaTags: [],\n noscriptTags: [],\n scriptTags: [],\n styleTags: [],\n title: \"\",\n titleAttributes: {}\n }));\n },\n R = t.createContext({}),\n D = r.shape({\n setHelmet: r.func,\n helmetInstances: r.shape({\n get: r.func,\n add: r.func,\n remove: r.func\n })\n }),\n U = \"undefined\" != typeof document,\n q = /*#__PURE__*/function (e) {\n function r(t) {\n var n;\n return (n = e.call(this, t) || this).helmetData = new N(n.props.context, r.canUseDOM), n;\n }\n return s(r, e), r.prototype.render = function () {\n /*#__PURE__*/return t.createElement(R.Provider, {\n value: this.helmetData.value\n }, this.props.children);\n }, r;\n }(e);\nq.canUseDOM = U, q.propTypes = {\n context: r.shape({\n helmet: r.shape()\n }),\n children: r.node.isRequired\n}, q.defaultProps = {\n context: {}\n}, q.displayName = \"HelmetProvider\";\nvar Y = function (t, e) {\n var r,\n n = document.head || document.querySelector(l.HEAD),\n i = n.querySelectorAll(t + \"[data-rh]\"),\n o = [].slice.call(i),\n a = [];\n return e && e.length && e.forEach(function (e) {\n var n = document.createElement(t);\n for (var i in e) Object.prototype.hasOwnProperty.call(e, i) && (\"innerHTML\" === i ? n.innerHTML = e.innerHTML : \"cssText\" === i ? n.styleSheet ? n.styleSheet.cssText = e.cssText : n.appendChild(document.createTextNode(e.cssText)) : n.setAttribute(i, void 0 === e[i] ? \"\" : e[i]));\n n.setAttribute(\"data-rh\", \"true\"), o.some(function (t, e) {\n return r = e, n.isEqualNode(t);\n }) ? o.splice(r, 1) : a.push(n);\n }), o.forEach(function (t) {\n return t.parentNode.removeChild(t);\n }), a.forEach(function (t) {\n return n.appendChild(t);\n }), {\n oldTags: o,\n newTags: a\n };\n },\n B = function (t, e) {\n var r = document.getElementsByTagName(t)[0];\n if (r) {\n for (var n = r.getAttribute(\"data-rh\"), i = n ? n.split(\",\") : [], o = [].concat(i), a = Object.keys(e), s = 0; s < a.length; s += 1) {\n var c = a[s],\n u = e[c] || \"\";\n r.getAttribute(c) !== u && r.setAttribute(c, u), -1 === i.indexOf(c) && i.push(c);\n var l = o.indexOf(c);\n -1 !== l && o.splice(l, 1);\n }\n for (var p = o.length - 1; p >= 0; p -= 1) r.removeAttribute(o[p]);\n i.length === o.length ? r.removeAttribute(\"data-rh\") : r.getAttribute(\"data-rh\") !== a.join(\",\") && r.setAttribute(\"data-rh\", a.join(\",\"));\n }\n },\n K = function (t, e) {\n var r = t.baseTag,\n n = t.htmlAttributes,\n i = t.linkTags,\n o = t.metaTags,\n a = t.noscriptTags,\n s = t.onChangeClientState,\n c = t.scriptTags,\n u = t.styleTags,\n p = t.title,\n f = t.titleAttributes;\n B(l.BODY, t.bodyAttributes), B(l.HTML, n), function (t, e) {\n void 0 !== t && document.title !== t && (document.title = S(t)), B(l.TITLE, e);\n }(p, f);\n var d = {\n baseTag: Y(l.BASE, r),\n linkTags: Y(l.LINK, i),\n metaTags: Y(l.META, o),\n noscriptTags: Y(l.NOSCRIPT, a),\n scriptTags: Y(l.SCRIPT, c),\n styleTags: Y(l.STYLE, u)\n },\n h = {},\n m = {};\n Object.keys(d).forEach(function (t) {\n var e = d[t],\n r = e.newTags,\n n = e.oldTags;\n r.length && (h[t] = r), n.length && (m[t] = d[t].oldTags);\n }), e && e(), s(t, h, m);\n },\n _ = null,\n z = /*#__PURE__*/function (t) {\n function e() {\n for (var e, r = arguments.length, n = new Array(r), i = 0; i < r; i++) n[i] = arguments[i];\n return (e = t.call.apply(t, [this].concat(n)) || this).rendered = !1, e;\n }\n s(e, t);\n var r = e.prototype;\n return r.shouldComponentUpdate = function (t) {\n return !o(t, this.props);\n }, r.componentDidUpdate = function () {\n this.emitChange();\n }, r.componentWillUnmount = function () {\n this.props.context.helmetInstances.remove(this), this.emitChange();\n }, r.emitChange = function () {\n var t,\n e,\n r = this.props.context,\n n = r.setHelmet,\n i = null,\n o = (t = r.helmetInstances.get().map(function (t) {\n var e = a({}, t.props);\n return delete e.context, e;\n }), {\n baseTag: A([\"href\"], t),\n bodyAttributes: v(\"bodyAttributes\", t),\n defer: T(t, \"defer\"),\n encode: T(t, \"encodeSpecialCharacters\"),\n htmlAttributes: v(\"htmlAttributes\", t),\n linkTags: C(l.LINK, [\"rel\", \"href\"], t),\n metaTags: C(l.META, [\"name\", \"charset\", \"http-equiv\", \"property\", \"itemprop\"], t),\n noscriptTags: C(l.NOSCRIPT, [\"innerHTML\"], t),\n onChangeClientState: b(t),\n scriptTags: C(l.SCRIPT, [\"src\", \"innerHTML\"], t),\n styleTags: C(l.STYLE, [\"cssText\"], t),\n title: g(t),\n titleAttributes: v(\"titleAttributes\", t),\n prioritizeSeoTags: O(t, \"prioritizeSeoTags\")\n });\n q.canUseDOM ? (e = o, _ && cancelAnimationFrame(_), e.defer ? _ = requestAnimationFrame(function () {\n K(e, function () {\n _ = null;\n });\n }) : (K(e), _ = null)) : k && (i = k(o)), n(i);\n }, r.init = function () {\n this.rendered || (this.rendered = !0, this.props.context.helmetInstances.add(this), this.emitChange());\n }, r.render = function () {\n return this.init(), null;\n }, e;\n }(e);\nz.propTypes = {\n context: D.isRequired\n}, z.displayName = \"HelmetDispatcher\";\nvar F = [\"children\"],\n G = [\"children\"],\n W = /*#__PURE__*/function (e) {\n function r() {\n return e.apply(this, arguments) || this;\n }\n s(r, e);\n var o = r.prototype;\n return o.shouldComponentUpdate = function (t) {\n return !n(I(this.props, \"helmetData\"), I(t, \"helmetData\"));\n }, o.mapNestedChildrenToProps = function (t, e) {\n if (!e) return null;\n switch (t.type) {\n case l.SCRIPT:\n case l.NOSCRIPT:\n return {\n innerHTML: e\n };\n case l.STYLE:\n return {\n cssText: e\n };\n default:\n throw new Error(\"<\" + t.type + \" /> elements are self-closing and can not contain children. Refer to our API for more information.\");\n }\n }, o.flattenArrayTypeChildren = function (t) {\n var e,\n r = t.child,\n n = t.arrayTypeChildren;\n return a({}, n, ((e = {})[r.type] = [].concat(n[r.type] || [], [a({}, t.newChildProps, this.mapNestedChildrenToProps(r, t.nestedChildren))]), e));\n }, o.mapObjectTypeChildren = function (t) {\n var e,\n r,\n n = t.child,\n i = t.newProps,\n o = t.newChildProps,\n s = t.nestedChildren;\n switch (n.type) {\n case l.TITLE:\n return a({}, i, ((e = {})[n.type] = s, e.titleAttributes = a({}, o), e));\n case l.BODY:\n return a({}, i, {\n bodyAttributes: a({}, o)\n });\n case l.HTML:\n return a({}, i, {\n htmlAttributes: a({}, o)\n });\n default:\n return a({}, i, ((r = {})[n.type] = a({}, o), r));\n }\n }, o.mapArrayTypeChildrenToProps = function (t, e) {\n var r = a({}, e);\n return Object.keys(t).forEach(function (e) {\n var n;\n r = a({}, r, ((n = {})[e] = t[e], n));\n }), r;\n }, o.warnOnInvalidChildren = function (t, e) {\n return i(h.some(function (e) {\n return t.type === e;\n }), \"function\" == typeof t.type ? \"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.\" : \"Only elements types \" + h.join(\", \") + \" are allowed. Helmet does not support rendering <\" + t.type + \"> elements. Refer to our API for more information.\"), i(!e || \"string\" == typeof e || Array.isArray(e) && !e.some(function (t) {\n return \"string\" != typeof t;\n }), \"Helmet expects a string as a child of <\" + t.type + \">. Did you forget to wrap your children in braces? ( <\" + t.type + \">{``}\" + t.type + \"> ) Refer to our API for more information.\"), !0;\n }, o.mapChildrenToProps = function (e, r) {\n var n = this,\n i = {};\n return t.Children.forEach(e, function (t) {\n if (t && t.props) {\n var e = t.props,\n o = e.children,\n a = u(e, F),\n s = Object.keys(a).reduce(function (t, e) {\n return t[y[e] || e] = a[e], t;\n }, {}),\n c = t.type;\n switch (\"symbol\" == typeof c ? c = c.toString() : n.warnOnInvalidChildren(t, o), c) {\n case l.FRAGMENT:\n r = n.mapChildrenToProps(o, r);\n break;\n case l.LINK:\n case l.META:\n case l.NOSCRIPT:\n case l.SCRIPT:\n case l.STYLE:\n i = n.flattenArrayTypeChildren({\n child: t,\n arrayTypeChildren: i,\n newChildProps: s,\n nestedChildren: o\n });\n break;\n default:\n r = n.mapObjectTypeChildren({\n child: t,\n newProps: r,\n newChildProps: s,\n nestedChildren: o\n });\n }\n }\n }), this.mapArrayTypeChildrenToProps(i, r);\n }, o.render = function () {\n var e = this.props,\n r = e.children,\n n = u(e, G),\n i = a({}, n),\n o = n.helmetData;\n return r && (i = this.mapChildrenToProps(r, i)), !o || o instanceof N || (o = new N(o.context, o.instances)), o ? /*#__PURE__*/t.createElement(z, a({}, i, {\n context: o.value,\n helmetData: void 0\n })) : /*#__PURE__*/t.createElement(R.Consumer, null, function (e) {\n /*#__PURE__*/return t.createElement(z, a({}, i, {\n context: e\n }));\n });\n }, r;\n }(e);\nW.propTypes = {\n base: r.object,\n bodyAttributes: r.object,\n children: r.oneOfType([r.arrayOf(r.node), r.node]),\n defaultTitle: r.string,\n defer: r.bool,\n encodeSpecialCharacters: r.bool,\n htmlAttributes: r.object,\n link: r.arrayOf(r.object),\n meta: r.arrayOf(r.object),\n noscript: r.arrayOf(r.object),\n onChangeClientState: r.func,\n script: r.arrayOf(r.object),\n style: r.arrayOf(r.object),\n title: r.string,\n titleAttributes: r.object,\n titleTemplate: r.string,\n prioritizeSeoTags: r.bool,\n helmetData: r.object\n}, W.defaultProps = {\n defer: !0,\n encodeSpecialCharacters: !0,\n prioritizeSeoTags: !1\n}, W.displayName = \"Helmet\";\nexport { W as Helmet, N as HelmetData, q as HelmetProvider };","var parent = require('../../es/object/assign');\n\nmodule.exports = parent;\n","const set = require('regenerate')(0x100, 0x102, 0x104, 0x106, 0x108, 0x10A, 0x10C, 0x10E, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11A, 0x11C, 0x11E, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12A, 0x12C, 0x12E, 0x130, 0x132, 0x134, 0x136, 0x139, 0x13B, 0x13D, 0x13F, 0x141, 0x143, 0x145, 0x147, 0x14A, 0x14C, 0x14E, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15A, 0x15C, 0x15E, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16A, 0x16C, 0x16E, 0x170, 0x172, 0x174, 0x176, 0x17B, 0x17D, 0x184, 0x1A2, 0x1A4, 0x1A9, 0x1AC, 0x1B5, 0x1BC, 0x1C4, 0x1C7, 0x1CA, 0x1CD, 0x1CF, 0x1D1, 0x1D3, 0x1D5, 0x1D7, 0x1D9, 0x1DB, 0x1DE, 0x1E0, 0x1E2, 0x1E4, 0x1E6, 0x1E8, 0x1EA, 0x1EC, 0x1EE, 0x1F1, 0x1F4, 0x1FA, 0x1FC, 0x1FE, 0x200, 0x202, 0x204, 0x206, 0x208, 0x20A, 0x20C, 0x20E, 0x210, 0x212, 0x214, 0x216, 0x218, 0x21A, 0x21C, 0x21E, 0x220, 0x222, 0x224, 0x226, 0x228, 0x22A, 0x22C, 0x22E, 0x230, 0x232, 0x241, 0x248, 0x24A, 0x24C, 0x24E, 0x370, 0x372, 0x376, 0x37F, 0x386, 0x38C, 0x3CF, 0x3D8, 0x3DA, 0x3DC, 0x3DE, 0x3E0, 0x3E2, 0x3E4, 0x3E6, 0x3E8, 0x3EA, 0x3EC, 0x3EE, 0x3F4, 0x3F7, 0x460, 0x462, 0x464, 0x466, 0x468, 0x46A, 0x46C, 0x46E, 0x470, 0x472, 0x474, 0x476, 0x478, 0x47A, 0x47C, 0x47E, 0x480, 0x48A, 0x48C, 0x48E, 0x490, 0x492, 0x494, 0x496, 0x498, 0x49A, 0x49C, 0x49E, 0x4A0, 0x4A2, 0x4A4, 0x4A6, 0x4A8, 0x4AA, 0x4AC, 0x4AE, 0x4B0, 0x4B2, 0x4B4, 0x4B6, 0x4B8, 0x4BA, 0x4BC, 0x4BE, 0x4C3, 0x4C5, 0x4C7, 0x4C9, 0x4CB, 0x4CD, 0x4D0, 0x4D2, 0x4D4, 0x4D6, 0x4D8, 0x4DA, 0x4DC, 0x4DE, 0x4E0, 0x4E2, 0x4E4, 0x4E6, 0x4E8, 0x4EA, 0x4EC, 0x4EE, 0x4F0, 0x4F2, 0x4F4, 0x4F6, 0x4F8, 0x4FA, 0x4FC, 0x4FE, 0x500, 0x502, 0x504, 0x506, 0x508, 0x50A, 0x50C, 0x50E, 0x510, 0x512, 0x514, 0x516, 0x518, 0x51A, 0x51C, 0x51E, 0x520, 0x522, 0x524, 0x526, 0x528, 0x52A, 0x52C, 0x52E, 0x10C7, 0x10CD, 0x1E00, 0x1E02, 0x1E04, 0x1E06, 0x1E08, 0x1E0A, 0x1E0C, 0x1E0E, 0x1E10, 0x1E12, 0x1E14, 0x1E16, 0x1E18, 0x1E1A, 0x1E1C, 0x1E1E, 0x1E20, 0x1E22, 0x1E24, 0x1E26, 0x1E28, 0x1E2A, 0x1E2C, 0x1E2E, 0x1E30, 0x1E32, 0x1E34, 0x1E36, 0x1E38, 0x1E3A, 0x1E3C, 0x1E3E, 0x1E40, 0x1E42, 0x1E44, 0x1E46, 0x1E48, 0x1E4A, 0x1E4C, 0x1E4E, 0x1E50, 0x1E52, 0x1E54, 0x1E56, 0x1E58, 0x1E5A, 0x1E5C, 0x1E5E, 0x1E60, 0x1E62, 0x1E64, 0x1E66, 0x1E68, 0x1E6A, 0x1E6C, 0x1E6E, 0x1E70, 0x1E72, 0x1E74, 0x1E76, 0x1E78, 0x1E7A, 0x1E7C, 0x1E7E, 0x1E80, 0x1E82, 0x1E84, 0x1E86, 0x1E88, 0x1E8A, 0x1E8C, 0x1E8E, 0x1E90, 0x1E92, 0x1E94, 0x1E9E, 0x1EA0, 0x1EA2, 0x1EA4, 0x1EA6, 0x1EA8, 0x1EAA, 0x1EAC, 0x1EAE, 0x1EB0, 0x1EB2, 0x1EB4, 0x1EB6, 0x1EB8, 0x1EBA, 0x1EBC, 0x1EBE, 0x1EC0, 0x1EC2, 0x1EC4, 0x1EC6, 0x1EC8, 0x1ECA, 0x1ECC, 0x1ECE, 0x1ED0, 0x1ED2, 0x1ED4, 0x1ED6, 0x1ED8, 0x1EDA, 0x1EDC, 0x1EDE, 0x1EE0, 0x1EE2, 0x1EE4, 0x1EE6, 0x1EE8, 0x1EEA, 0x1EEC, 0x1EEE, 0x1EF0, 0x1EF2, 0x1EF4, 0x1EF6, 0x1EF8, 0x1EFA, 0x1EFC, 0x1EFE, 0x1F59, 0x1F5B, 0x1F5D, 0x1F5F, 0x2102, 0x2107, 0x2115, 0x2124, 0x2126, 0x2128, 0x2145, 0x2183, 0x2C60, 0x2C67, 0x2C69, 0x2C6B, 0x2C72, 0x2C75, 0x2C82, 0x2C84, 0x2C86, 0x2C88, 0x2C8A, 0x2C8C, 0x2C8E, 0x2C90, 0x2C92, 0x2C94, 0x2C96, 0x2C98, 0x2C9A, 0x2C9C, 0x2C9E, 0x2CA0, 0x2CA2, 0x2CA4, 0x2CA6, 0x2CA8, 0x2CAA, 0x2CAC, 0x2CAE, 0x2CB0, 0x2CB2, 0x2CB4, 0x2CB6, 0x2CB8, 0x2CBA, 0x2CBC, 0x2CBE, 0x2CC0, 0x2CC2, 0x2CC4, 0x2CC6, 0x2CC8, 0x2CCA, 0x2CCC, 0x2CCE, 0x2CD0, 0x2CD2, 0x2CD4, 0x2CD6, 0x2CD8, 0x2CDA, 0x2CDC, 0x2CDE, 0x2CE0, 0x2CE2, 0x2CEB, 0x2CED, 0x2CF2, 0xA640, 0xA642, 0xA644, 0xA646, 0xA648, 0xA64A, 0xA64C, 0xA64E, 0xA650, 0xA652, 0xA654, 0xA656, 0xA658, 0xA65A, 0xA65C, 0xA65E, 0xA660, 0xA662, 0xA664, 0xA666, 0xA668, 0xA66A, 0xA66C, 0xA680, 0xA682, 0xA684, 0xA686, 0xA688, 0xA68A, 0xA68C, 0xA68E, 0xA690, 0xA692, 0xA694, 0xA696, 0xA698, 0xA69A, 0xA722, 0xA724, 0xA726, 0xA728, 0xA72A, 0xA72C, 0xA72E, 0xA732, 0xA734, 0xA736, 0xA738, 0xA73A, 0xA73C, 0xA73E, 0xA740, 0xA742, 0xA744, 0xA746, 0xA748, 0xA74A, 0xA74C, 0xA74E, 0xA750, 0xA752, 0xA754, 0xA756, 0xA758, 0xA75A, 0xA75C, 0xA75E, 0xA760, 0xA762, 0xA764, 0xA766, 0xA768, 0xA76A, 0xA76C, 0xA76E, 0xA779, 0xA77B, 0xA780, 0xA782, 0xA784, 0xA786, 0xA78B, 0xA78D, 0xA790, 0xA792, 0xA796, 0xA798, 0xA79A, 0xA79C, 0xA79E, 0xA7A0, 0xA7A2, 0xA7A4, 0xA7A6, 0xA7A8, 0xA7B6, 0xA7B8, 0xA7BA, 0xA7BC, 0xA7BE, 0xA7C0, 0xA7C2, 0xA7C9, 0xA7D0, 0xA7D6, 0xA7D8, 0xA7F5, 0x1D49C, 0x1D4A2, 0x1D546, 0x1D7CA);\nset.addRange(0x41, 0x5A).addRange(0xC0, 0xD6).addRange(0xD8, 0xDE).addRange(0x178, 0x179).addRange(0x181, 0x182).addRange(0x186, 0x187).addRange(0x189, 0x18B).addRange(0x18E, 0x191).addRange(0x193, 0x194).addRange(0x196, 0x198).addRange(0x19C, 0x19D).addRange(0x19F, 0x1A0).addRange(0x1A6, 0x1A7).addRange(0x1AE, 0x1AF).addRange(0x1B1, 0x1B3).addRange(0x1B7, 0x1B8).addRange(0x1F6, 0x1F8).addRange(0x23A, 0x23B).addRange(0x23D, 0x23E).addRange(0x243, 0x246).addRange(0x388, 0x38A).addRange(0x38E, 0x38F).addRange(0x391, 0x3A1).addRange(0x3A3, 0x3AB).addRange(0x3D2, 0x3D4).addRange(0x3F9, 0x3FA).addRange(0x3FD, 0x42F).addRange(0x4C0, 0x4C1).addRange(0x531, 0x556).addRange(0x10A0, 0x10C5).addRange(0x13A0, 0x13F5).addRange(0x1C90, 0x1CBA).addRange(0x1CBD, 0x1CBF).addRange(0x1F08, 0x1F0F).addRange(0x1F18, 0x1F1D).addRange(0x1F28, 0x1F2F).addRange(0x1F38, 0x1F3F).addRange(0x1F48, 0x1F4D).addRange(0x1F68, 0x1F6F).addRange(0x1FB8, 0x1FBB).addRange(0x1FC8, 0x1FCB).addRange(0x1FD8, 0x1FDB).addRange(0x1FE8, 0x1FEC).addRange(0x1FF8, 0x1FFB).addRange(0x210B, 0x210D).addRange(0x2110, 0x2112).addRange(0x2119, 0x211D).addRange(0x212A, 0x212D).addRange(0x2130, 0x2133).addRange(0x213E, 0x213F).addRange(0x2C00, 0x2C2F);\nset.addRange(0x2C62, 0x2C64).addRange(0x2C6D, 0x2C70).addRange(0x2C7E, 0x2C80).addRange(0xA77D, 0xA77E).addRange(0xA7AA, 0xA7AE).addRange(0xA7B0, 0xA7B4).addRange(0xA7C4, 0xA7C7).addRange(0xFF21, 0xFF3A).addRange(0x10400, 0x10427).addRange(0x104B0, 0x104D3).addRange(0x10570, 0x1057A).addRange(0x1057C, 0x1058A).addRange(0x1058C, 0x10592).addRange(0x10594, 0x10595).addRange(0x10C80, 0x10CB2).addRange(0x118A0, 0x118BF).addRange(0x16E40, 0x16E5F).addRange(0x1D400, 0x1D419).addRange(0x1D434, 0x1D44D).addRange(0x1D468, 0x1D481).addRange(0x1D49E, 0x1D49F).addRange(0x1D4A5, 0x1D4A6).addRange(0x1D4A9, 0x1D4AC).addRange(0x1D4AE, 0x1D4B5).addRange(0x1D4D0, 0x1D4E9).addRange(0x1D504, 0x1D505).addRange(0x1D507, 0x1D50A).addRange(0x1D50D, 0x1D514).addRange(0x1D516, 0x1D51C).addRange(0x1D538, 0x1D539).addRange(0x1D53B, 0x1D53E).addRange(0x1D540, 0x1D544).addRange(0x1D54A, 0x1D550).addRange(0x1D56C, 0x1D585).addRange(0x1D5A0, 0x1D5B9).addRange(0x1D5D4, 0x1D5ED).addRange(0x1D608, 0x1D621).addRange(0x1D63C, 0x1D655).addRange(0x1D670, 0x1D689).addRange(0x1D6A8, 0x1D6C0).addRange(0x1D6E2, 0x1D6FA).addRange(0x1D71C, 0x1D734).addRange(0x1D756, 0x1D76E).addRange(0x1D790, 0x1D7A8).addRange(0x1E900, 0x1E921);\nmodule.exports = set;","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype != 42;\n});\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nimport loader from \"./loader\"\nimport InternalPageRenderer from \"./page-renderer\"\n\nconst ProdPageRenderer = ({ location }) => {\n const pageResources = loader.loadPageSync(location.pathname)\n if (!pageResources) {\n return null\n }\n return React.createElement(InternalPageRenderer, {\n location,\n pageResources,\n ...pageResources.json,\n })\n}\n\nProdPageRenderer.propTypes = {\n location: PropTypes.shape({\n pathname: PropTypes.string.isRequired,\n }).isRequired,\n}\n\nexport default ProdPageRenderer\n","var identity = require('./identity'),\n metaMap = require('./_metaMap');\n\n/**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\nvar baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n};\n\nmodule.exports = baseSetData;\n","const set = require('regenerate')(0x5E, 0x60, 0xA8, 0xAF, 0xB4, 0x37A, 0x559, 0x5BF, 0x5C4, 0x93C, 0x94D, 0x971, 0x9BC, 0x9CD, 0xA3C, 0xA4D, 0xABC, 0xACD, 0xB3C, 0xB4D, 0xB55, 0xBCD, 0xC3C, 0xC4D, 0xCBC, 0xCCD, 0xD4D, 0xDCA, 0xE4E, 0xEBA, 0xF35, 0xF37, 0xF39, 0xFC6, 0x1037, 0x108F, 0x17DD, 0x1A7F, 0x1B34, 0x1B44, 0x1CED, 0x1CF4, 0x1FBD, 0x2E2F, 0x30FC, 0xA66F, 0xA67F, 0xA8C4, 0xA953, 0xA9B3, 0xA9C0, 0xA9E5, 0xAAF6, 0xFB1E, 0xFF3E, 0xFF40, 0xFF70, 0xFFE3, 0x102E0, 0x11046, 0x11070, 0x11173, 0x111C0, 0x1133C, 0x1134D, 0x11442, 0x11446, 0x1163F, 0x1172B, 0x11943, 0x119E0, 0x11A34, 0x11A47, 0x11A99, 0x11C3F, 0x11D42, 0x11D97, 0x1E2AE);\nset.addRange(0xB7, 0xB8).addRange(0x2B0, 0x34E).addRange(0x350, 0x357).addRange(0x35D, 0x362).addRange(0x374, 0x375).addRange(0x384, 0x385).addRange(0x483, 0x487).addRange(0x591, 0x5A1).addRange(0x5A3, 0x5BD).addRange(0x5C1, 0x5C2).addRange(0x64B, 0x652).addRange(0x657, 0x658).addRange(0x6DF, 0x6E0).addRange(0x6E5, 0x6E6).addRange(0x6EA, 0x6EC).addRange(0x730, 0x74A).addRange(0x7A6, 0x7B0).addRange(0x7EB, 0x7F5).addRange(0x818, 0x819).addRange(0x898, 0x89F).addRange(0x8C9, 0x8D2).addRange(0x8E3, 0x8FE).addRange(0x951, 0x954).addRange(0xAFD, 0xAFF).addRange(0xD3B, 0xD3C).addRange(0xE47, 0xE4C).addRange(0xEC8, 0xECC).addRange(0xF18, 0xF19).addRange(0xF3E, 0xF3F).addRange(0xF82, 0xF84).addRange(0xF86, 0xF87).addRange(0x1039, 0x103A).addRange(0x1063, 0x1064).addRange(0x1069, 0x106D).addRange(0x1087, 0x108D).addRange(0x109A, 0x109B).addRange(0x135D, 0x135F).addRange(0x1714, 0x1715).addRange(0x17C9, 0x17D3).addRange(0x1939, 0x193B).addRange(0x1A75, 0x1A7C).addRange(0x1AB0, 0x1ABE).addRange(0x1AC1, 0x1ACB).addRange(0x1B6B, 0x1B73).addRange(0x1BAA, 0x1BAB).addRange(0x1C36, 0x1C37).addRange(0x1C78, 0x1C7D).addRange(0x1CD0, 0x1CE8).addRange(0x1CF7, 0x1CF9).addRange(0x1D2C, 0x1D6A).addRange(0x1DC4, 0x1DCF);\nset.addRange(0x1DF5, 0x1DFF).addRange(0x1FBF, 0x1FC1).addRange(0x1FCD, 0x1FCF).addRange(0x1FDD, 0x1FDF).addRange(0x1FED, 0x1FEF).addRange(0x1FFD, 0x1FFE).addRange(0x2CEF, 0x2CF1).addRange(0x302A, 0x302F).addRange(0x3099, 0x309C).addRange(0xA67C, 0xA67D).addRange(0xA69C, 0xA69D).addRange(0xA6F0, 0xA6F1).addRange(0xA700, 0xA721).addRange(0xA788, 0xA78A).addRange(0xA7F8, 0xA7F9).addRange(0xA8E0, 0xA8F1).addRange(0xA92B, 0xA92E).addRange(0xAA7B, 0xAA7D).addRange(0xAABF, 0xAAC2).addRange(0xAB5B, 0xAB5F).addRange(0xAB69, 0xAB6B).addRange(0xABEC, 0xABED).addRange(0xFE20, 0xFE2F).addRange(0xFF9E, 0xFF9F).addRange(0x10780, 0x10785).addRange(0x10787, 0x107B0).addRange(0x107B2, 0x107BA).addRange(0x10AE5, 0x10AE6).addRange(0x10D22, 0x10D27).addRange(0x10F46, 0x10F50).addRange(0x10F82, 0x10F85).addRange(0x110B9, 0x110BA).addRange(0x11133, 0x11134).addRange(0x111CA, 0x111CC).addRange(0x11235, 0x11236).addRange(0x112E9, 0x112EA).addRange(0x11366, 0x1136C).addRange(0x11370, 0x11374).addRange(0x114C2, 0x114C3).addRange(0x115BF, 0x115C0).addRange(0x116B6, 0x116B7).addRange(0x11839, 0x1183A).addRange(0x1193D, 0x1193E).addRange(0x11D44, 0x11D45).addRange(0x16AF0, 0x16AF4).addRange(0x16B30, 0x16B36).addRange(0x16F8F, 0x16F9F).addRange(0x16FF0, 0x16FF1).addRange(0x1AFF0, 0x1AFF3).addRange(0x1AFF5, 0x1AFFB).addRange(0x1AFFD, 0x1AFFE);\nset.addRange(0x1CF00, 0x1CF2D).addRange(0x1CF30, 0x1CF46).addRange(0x1D167, 0x1D169).addRange(0x1D16D, 0x1D172).addRange(0x1D17B, 0x1D182).addRange(0x1D185, 0x1D18B).addRange(0x1D1AA, 0x1D1AD).addRange(0x1E130, 0x1E136).addRange(0x1E2EC, 0x1E2EF).addRange(0x1E8D0, 0x1E8D6).addRange(0x1E944, 0x1E946).addRange(0x1E948, 0x1E94A);\nmodule.exports = set;","'use strict';\n\nconst canonicalProperties = require('unicode-canonical-property-names-ecmascript');\nconst propertyAliases = require('unicode-property-aliases-ecmascript');\nconst matchProperty = function (property) {\n if (canonicalProperties.has(property)) {\n return property;\n }\n if (propertyAliases.has(property)) {\n return propertyAliases.get(property);\n }\n throw new Error(\"Unknown property: \".concat(property));\n};\nmodule.exports = matchProperty;","var toString = Object.prototype.toString;\n\n/**\n * Get the native `typeof` a value.\n *\n * @param {*} `val`\n * @return {*} Native javascript type\n */\n\nmodule.exports = function kindOf(val) {\n var type = typeof val;\n\n // primitivies\n if (type === 'undefined') {\n return 'undefined';\n }\n if (val === null) {\n return 'null';\n }\n if (val === true || val === false || val instanceof Boolean) {\n return 'boolean';\n }\n if (type === 'string' || val instanceof String) {\n return 'string';\n }\n if (type === 'number' || val instanceof Number) {\n return 'number';\n }\n\n // functions\n if (type === 'function' || val instanceof Function) {\n if (typeof val.constructor.name !== 'undefined' && val.constructor.name.slice(0, 9) === 'Generator') {\n return 'generatorfunction';\n }\n return 'function';\n }\n\n // array\n if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) {\n return 'array';\n }\n\n // check for instances of RegExp and Date before calling `toString`\n if (val instanceof RegExp) {\n return 'regexp';\n }\n if (val instanceof Date) {\n return 'date';\n }\n\n // other objects\n type = toString.call(val);\n if (type === '[object RegExp]') {\n return 'regexp';\n }\n if (type === '[object Date]') {\n return 'date';\n }\n if (type === '[object Arguments]') {\n return 'arguments';\n }\n if (type === '[object Error]') {\n return 'error';\n }\n if (type === '[object Promise]') {\n return 'promise';\n }\n\n // buffer\n if (isBuffer(val)) {\n return 'buffer';\n }\n\n // es6: Map, WeakMap, Set, WeakSet\n if (type === '[object Set]') {\n return 'set';\n }\n if (type === '[object WeakSet]') {\n return 'weakset';\n }\n if (type === '[object Map]') {\n return 'map';\n }\n if (type === '[object WeakMap]') {\n return 'weakmap';\n }\n if (type === '[object Symbol]') {\n return 'symbol';\n }\n if (type === '[object Map Iterator]') {\n return 'mapiterator';\n }\n if (type === '[object Set Iterator]') {\n return 'setiterator';\n }\n if (type === '[object String Iterator]') {\n return 'stringiterator';\n }\n if (type === '[object Array Iterator]') {\n return 'arrayiterator';\n }\n\n // typed arrays\n if (type === '[object Int8Array]') {\n return 'int8array';\n }\n if (type === '[object Uint8Array]') {\n return 'uint8array';\n }\n if (type === '[object Uint8ClampedArray]') {\n return 'uint8clampedarray';\n }\n if (type === '[object Int16Array]') {\n return 'int16array';\n }\n if (type === '[object Uint16Array]') {\n return 'uint16array';\n }\n if (type === '[object Int32Array]') {\n return 'int32array';\n }\n if (type === '[object Uint32Array]') {\n return 'uint32array';\n }\n if (type === '[object Float32Array]') {\n return 'float32array';\n }\n if (type === '[object Float64Array]') {\n return 'float64array';\n }\n\n // must be a plain object\n return 'object';\n};\n\n/**\n * If you need to support Safari 5-7 (8-10 yr-old browser),\n * take a look at https://github.com/feross/is-buffer\n */\n\nfunction isBuffer(val) {\n return val.constructor && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","const set = require('regenerate')();\nset.addRange(0x1760, 0x176C).addRange(0x176E, 0x1770).addRange(0x1772, 0x1773);\nmodule.exports = set;","const set = require('regenerate')(0x1091F);\nset.addRange(0x10900, 0x1091B);\nmodule.exports = set;","const set = require('regenerate')(0x1CD0, 0x1CD2, 0x1CDA, 0x1CF2, 0x1CF4);\nset.addRange(0x951, 0x952).addRange(0x964, 0x965).addRange(0xC80, 0xC8C).addRange(0xC8E, 0xC90).addRange(0xC92, 0xCA8).addRange(0xCAA, 0xCB3).addRange(0xCB5, 0xCB9).addRange(0xCBC, 0xCC4).addRange(0xCC6, 0xCC8).addRange(0xCCA, 0xCCD).addRange(0xCD5, 0xCD6).addRange(0xCDD, 0xCDE).addRange(0xCE0, 0xCE3).addRange(0xCE6, 0xCEF).addRange(0xCF1, 0xCF2).addRange(0xA830, 0xA835);\nmodule.exports = set;","import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`On macOS, Tanka is best installed using `}{`brew`}{`:`}
\n
{`$ brew install tanka`}
\n
{`This downloads the most recent version of Tanka and installs it.`} {`\n`}{`Also, Tanka is automatically kept up to date as part of `}{`brew upgrade`}{`.`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n ","var baseConvert = require('./_baseConvert'),\n util = require('./_util');\n\n/**\n * Converts `func` of `name` to an immutable auto-curried iteratee-first data-last\n * version with conversion `options` applied. If `name` is an object its methods\n * will be converted.\n *\n * @param {string} name The name of the function to wrap.\n * @param {Function} [func] The function to wrap.\n * @param {Object} [options] The options object. See `baseConvert` for more details.\n * @returns {Function|Object} Returns the converted function or object.\n */\nfunction convert(name, func, options) {\n return baseConvert(util, name, func, options);\n}\n\nmodule.exports = convert;\n","const set = require('regenerate')();\nset.addRange(0xAA00, 0xAA36).addRange(0xAA40, 0xAA4D).addRange(0xAA50, 0xAA59).addRange(0xAA5C, 0xAA5F);\nmodule.exports = set;","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","var arrayReduce = require('./_arrayReduce'),\n deburr = require('./deburr'),\n words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nmodule.exports = createCompounder;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","const set = require('regenerate')(0x16FE4);\nset.addRange(0x18B00, 0x18CD5);\nmodule.exports = set;","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignMergeValue;\n","/**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\nfunction countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n}\n\nmodule.exports = countHolders;\n","const set = require('regenerate')();\nset.addRange(0x16A0, 0x16EA).addRange(0x16EE, 0x16F8);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0xA000, 0xA48C).addRange(0xA490, 0xA4C6);\nmodule.exports = set;","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n","var convert = require('./convert'),\n func = convert('flow', require('../flow'));\n\nfunc.placeholder = require('./placeholder');\nmodule.exports = func;\n","const set = require('regenerate')();\nset.addRange(0x1C00, 0x1C37).addRange(0x1C3B, 0x1C49).addRange(0x1C4D, 0x1C4F);\nmodule.exports = set;","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","const set = require('regenerate')(0x1804);\nset.addRange(0x1800, 0x1801).addRange(0x1806, 0x1819).addRange(0x1820, 0x1878).addRange(0x1880, 0x18AA).addRange(0x11660, 0x1166C);\nmodule.exports = set;","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","const set = require('regenerate')(0x1039F);\nset.addRange(0x10380, 0x1039D);\nmodule.exports = set;","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = global.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","var mapping = require('./_mapping'),\n fallbackHolder = require('./placeholder');\n\n/** Built-in value reference. */\nvar push = Array.prototype.push;\n\n/**\n * Creates a function, with an arity of `n`, that invokes `func` with the\n * arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} n The arity of the new function.\n * @returns {Function} Returns the new function.\n */\nfunction baseArity(func, n) {\n return n == 2\n ? function(a, b) { return func.apply(undefined, arguments); }\n : function(a) { return func.apply(undefined, arguments); };\n}\n\n/**\n * Creates a function that invokes `func`, with up to `n` arguments, ignoring\n * any additional arguments.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @param {number} n The arity cap.\n * @returns {Function} Returns the new function.\n */\nfunction baseAry(func, n) {\n return n == 2\n ? function(a, b) { return func(a, b); }\n : function(a) { return func(a); };\n}\n\n/**\n * Creates a clone of `array`.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the cloned array.\n */\nfunction cloneArray(array) {\n var length = array ? array.length : 0,\n result = Array(length);\n\n while (length--) {\n result[length] = array[length];\n }\n return result;\n}\n\n/**\n * Creates a function that clones a given object using the assignment `func`.\n *\n * @private\n * @param {Function} func The assignment function.\n * @returns {Function} Returns the new cloner function.\n */\nfunction createCloner(func) {\n return function(object) {\n return func({}, object);\n };\n}\n\n/**\n * A specialized version of `_.spread` which flattens the spread array into\n * the arguments of the invoked `func`.\n *\n * @private\n * @param {Function} func The function to spread arguments over.\n * @param {number} start The start position of the spread.\n * @returns {Function} Returns the new function.\n */\nfunction flatSpread(func, start) {\n return function() {\n var length = arguments.length,\n lastIndex = length - 1,\n args = Array(length);\n\n while (length--) {\n args[length] = arguments[length];\n }\n var array = args[start],\n otherArgs = args.slice(0, start);\n\n if (array) {\n push.apply(otherArgs, array);\n }\n if (start != lastIndex) {\n push.apply(otherArgs, args.slice(start + 1));\n }\n return func.apply(this, otherArgs);\n };\n}\n\n/**\n * Creates a function that wraps `func` and uses `cloner` to clone the first\n * argument it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} cloner The function to clone arguments.\n * @returns {Function} Returns the new immutable function.\n */\nfunction wrapImmutable(func, cloner) {\n return function() {\n var length = arguments.length;\n if (!length) {\n return;\n }\n var args = Array(length);\n while (length--) {\n args[length] = arguments[length];\n }\n var result = args[0] = cloner.apply(undefined, args);\n func.apply(undefined, args);\n return result;\n };\n}\n\n/**\n * The base implementation of `convert` which accepts a `util` object of methods\n * required to perform conversions.\n *\n * @param {Object} util The util object.\n * @param {string} name The name of the function to convert.\n * @param {Function} func The function to convert.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.cap=true] Specify capping iteratee arguments.\n * @param {boolean} [options.curry=true] Specify currying.\n * @param {boolean} [options.fixed=true] Specify fixed arity.\n * @param {boolean} [options.immutable=true] Specify immutable operations.\n * @param {boolean} [options.rearg=true] Specify rearranging arguments.\n * @returns {Function|Object} Returns the converted function or object.\n */\nfunction baseConvert(util, name, func, options) {\n var isLib = typeof name == 'function',\n isObj = name === Object(name);\n\n if (isObj) {\n options = func;\n func = name;\n name = undefined;\n }\n if (func == null) {\n throw new TypeError;\n }\n options || (options = {});\n\n var config = {\n 'cap': 'cap' in options ? options.cap : true,\n 'curry': 'curry' in options ? options.curry : true,\n 'fixed': 'fixed' in options ? options.fixed : true,\n 'immutable': 'immutable' in options ? options.immutable : true,\n 'rearg': 'rearg' in options ? options.rearg : true\n };\n\n var defaultHolder = isLib ? func : fallbackHolder,\n forceCurry = ('curry' in options) && options.curry,\n forceFixed = ('fixed' in options) && options.fixed,\n forceRearg = ('rearg' in options) && options.rearg,\n pristine = isLib ? func.runInContext() : undefined;\n\n var helpers = isLib ? func : {\n 'ary': util.ary,\n 'assign': util.assign,\n 'clone': util.clone,\n 'curry': util.curry,\n 'forEach': util.forEach,\n 'isArray': util.isArray,\n 'isError': util.isError,\n 'isFunction': util.isFunction,\n 'isWeakMap': util.isWeakMap,\n 'iteratee': util.iteratee,\n 'keys': util.keys,\n 'rearg': util.rearg,\n 'toInteger': util.toInteger,\n 'toPath': util.toPath\n };\n\n var ary = helpers.ary,\n assign = helpers.assign,\n clone = helpers.clone,\n curry = helpers.curry,\n each = helpers.forEach,\n isArray = helpers.isArray,\n isError = helpers.isError,\n isFunction = helpers.isFunction,\n isWeakMap = helpers.isWeakMap,\n keys = helpers.keys,\n rearg = helpers.rearg,\n toInteger = helpers.toInteger,\n toPath = helpers.toPath;\n\n var aryMethodKeys = keys(mapping.aryMethod);\n\n var wrappers = {\n 'castArray': function(castArray) {\n return function() {\n var value = arguments[0];\n return isArray(value)\n ? castArray(cloneArray(value))\n : castArray.apply(undefined, arguments);\n };\n },\n 'iteratee': function(iteratee) {\n return function() {\n var func = arguments[0],\n arity = arguments[1],\n result = iteratee(func, arity),\n length = result.length;\n\n if (config.cap && typeof arity == 'number') {\n arity = arity > 2 ? (arity - 2) : 1;\n return (length && length <= arity) ? result : baseAry(result, arity);\n }\n return result;\n };\n },\n 'mixin': function(mixin) {\n return function(source) {\n var func = this;\n if (!isFunction(func)) {\n return mixin(func, Object(source));\n }\n var pairs = [];\n each(keys(source), function(key) {\n if (isFunction(source[key])) {\n pairs.push([key, func.prototype[key]]);\n }\n });\n\n mixin(func, Object(source));\n\n each(pairs, function(pair) {\n var value = pair[1];\n if (isFunction(value)) {\n func.prototype[pair[0]] = value;\n } else {\n delete func.prototype[pair[0]];\n }\n });\n return func;\n };\n },\n 'nthArg': function(nthArg) {\n return function(n) {\n var arity = n < 0 ? 1 : (toInteger(n) + 1);\n return curry(nthArg(n), arity);\n };\n },\n 'rearg': function(rearg) {\n return function(func, indexes) {\n var arity = indexes ? indexes.length : 0;\n return curry(rearg(func, indexes), arity);\n };\n },\n 'runInContext': function(runInContext) {\n return function(context) {\n return baseConvert(util, runInContext(context), options);\n };\n }\n };\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Casts `func` to a function with an arity capped iteratee if needed.\n *\n * @private\n * @param {string} name The name of the function to inspect.\n * @param {Function} func The function to inspect.\n * @returns {Function} Returns the cast function.\n */\n function castCap(name, func) {\n if (config.cap) {\n var indexes = mapping.iterateeRearg[name];\n if (indexes) {\n return iterateeRearg(func, indexes);\n }\n var n = !isLib && mapping.iterateeAry[name];\n if (n) {\n return iterateeAry(func, n);\n }\n }\n return func;\n }\n\n /**\n * Casts `func` to a curried function if needed.\n *\n * @private\n * @param {string} name The name of the function to inspect.\n * @param {Function} func The function to inspect.\n * @param {number} n The arity of `func`.\n * @returns {Function} Returns the cast function.\n */\n function castCurry(name, func, n) {\n return (forceCurry || (config.curry && n > 1))\n ? curry(func, n)\n : func;\n }\n\n /**\n * Casts `func` to a fixed arity function if needed.\n *\n * @private\n * @param {string} name The name of the function to inspect.\n * @param {Function} func The function to inspect.\n * @param {number} n The arity cap.\n * @returns {Function} Returns the cast function.\n */\n function castFixed(name, func, n) {\n if (config.fixed && (forceFixed || !mapping.skipFixed[name])) {\n var data = mapping.methodSpread[name],\n start = data && data.start;\n\n return start === undefined ? ary(func, n) : flatSpread(func, start);\n }\n return func;\n }\n\n /**\n * Casts `func` to an rearged function if needed.\n *\n * @private\n * @param {string} name The name of the function to inspect.\n * @param {Function} func The function to inspect.\n * @param {number} n The arity of `func`.\n * @returns {Function} Returns the cast function.\n */\n function castRearg(name, func, n) {\n return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name]))\n ? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n])\n : func;\n }\n\n /**\n * Creates a clone of `object` by `path`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {Array|string} path The path to clone by.\n * @returns {Object} Returns the cloned object.\n */\n function cloneByPath(object, path) {\n path = toPath(path);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n result = clone(Object(object)),\n nested = result;\n\n while (nested != null && ++index < length) {\n var key = path[index],\n value = nested[key];\n\n if (value != null &&\n !(isFunction(value) || isError(value) || isWeakMap(value))) {\n nested[key] = clone(index == lastIndex ? value : Object(value));\n }\n nested = nested[key];\n }\n return result;\n }\n\n /**\n * Converts `lodash` to an immutable auto-curried iteratee-first data-last\n * version with conversion `options` applied.\n *\n * @param {Object} [options] The options object. See `baseConvert` for more details.\n * @returns {Function} Returns the converted `lodash`.\n */\n function convertLib(options) {\n return _.runInContext.convert(options)(undefined);\n }\n\n /**\n * Create a converter function for `func` of `name`.\n *\n * @param {string} name The name of the function to convert.\n * @param {Function} func The function to convert.\n * @returns {Function} Returns the new converter function.\n */\n function createConverter(name, func) {\n var realName = mapping.aliasToReal[name] || name,\n methodName = mapping.remap[realName] || realName,\n oldOptions = options;\n\n return function(options) {\n var newUtil = isLib ? pristine : helpers,\n newFunc = isLib ? pristine[methodName] : func,\n newOptions = assign(assign({}, oldOptions), options);\n\n return baseConvert(newUtil, realName, newFunc, newOptions);\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke its iteratee, with up to `n`\n * arguments, ignoring any additional arguments.\n *\n * @private\n * @param {Function} func The function to cap iteratee arguments for.\n * @param {number} n The arity cap.\n * @returns {Function} Returns the new function.\n */\n function iterateeAry(func, n) {\n return overArg(func, function(func) {\n return typeof func == 'function' ? baseAry(func, n) : func;\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke its iteratee with arguments\n * arranged according to the specified `indexes` where the argument value at\n * the first index is provided as the first argument, the argument value at\n * the second index is provided as the second argument, and so on.\n *\n * @private\n * @param {Function} func The function to rearrange iteratee arguments for.\n * @param {number[]} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n */\n function iterateeRearg(func, indexes) {\n return overArg(func, function(func) {\n var n = indexes.length;\n return baseArity(rearg(baseAry(func, n), indexes), n);\n });\n }\n\n /**\n * Creates a function that invokes `func` with its first argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function() {\n var length = arguments.length;\n if (!length) {\n return func();\n }\n var args = Array(length);\n while (length--) {\n args[length] = arguments[length];\n }\n var index = config.rearg ? 0 : (length - 1);\n args[index] = transform(args[index]);\n return func.apply(undefined, args);\n };\n }\n\n /**\n * Creates a function that wraps `func` and applys the conversions\n * rules by `name`.\n *\n * @private\n * @param {string} name The name of the function to wrap.\n * @param {Function} func The function to wrap.\n * @returns {Function} Returns the converted function.\n */\n function wrap(name, func, placeholder) {\n var result,\n realName = mapping.aliasToReal[name] || name,\n wrapped = func,\n wrapper = wrappers[realName];\n\n if (wrapper) {\n wrapped = wrapper(func);\n }\n else if (config.immutable) {\n if (mapping.mutate.array[realName]) {\n wrapped = wrapImmutable(func, cloneArray);\n }\n else if (mapping.mutate.object[realName]) {\n wrapped = wrapImmutable(func, createCloner(func));\n }\n else if (mapping.mutate.set[realName]) {\n wrapped = wrapImmutable(func, cloneByPath);\n }\n }\n each(aryMethodKeys, function(aryKey) {\n each(mapping.aryMethod[aryKey], function(otherName) {\n if (realName == otherName) {\n var data = mapping.methodSpread[realName],\n afterRearg = data && data.afterRearg;\n\n result = afterRearg\n ? castFixed(realName, castRearg(realName, wrapped, aryKey), aryKey)\n : castRearg(realName, castFixed(realName, wrapped, aryKey), aryKey);\n\n result = castCap(realName, result);\n result = castCurry(realName, result, aryKey);\n return false;\n }\n });\n return !result;\n });\n\n result || (result = wrapped);\n if (result == func) {\n result = forceCurry ? curry(result, 1) : function() {\n return func.apply(this, arguments);\n };\n }\n result.convert = createConverter(realName, func);\n result.placeholder = func.placeholder = placeholder;\n\n return result;\n }\n\n /*--------------------------------------------------------------------------*/\n\n if (!isObj) {\n return wrap(name, func, defaultHolder);\n }\n var _ = func;\n\n // Convert methods by ary cap.\n var pairs = [];\n each(aryMethodKeys, function(aryKey) {\n each(mapping.aryMethod[aryKey], function(key) {\n var func = _[mapping.remap[key] || key];\n if (func) {\n pairs.push([key, wrap(key, func, _)]);\n }\n });\n });\n\n // Convert remaining methods.\n each(keys(_), function(key) {\n var func = _[key];\n if (typeof func == 'function') {\n var length = pairs.length;\n while (length--) {\n if (pairs[length][0] == key) {\n return;\n }\n }\n func.convert = createConverter(key, func);\n pairs.push([key, func]);\n }\n });\n\n // Assign to `_` leaving `_.prototype` unchanged to allow chaining.\n each(pairs, function(pair) {\n _[pair[0]] = pair[1];\n });\n\n _.convert = convertLib;\n _.placeholder = _;\n\n // Assign aliases.\n each(keys(_), function(key) {\n each(mapping.realToAlias[key] || [], function(alias) {\n _[alias] = _[key];\n });\n });\n\n return _;\n}\n\nmodule.exports = baseConvert;\n","const set = require('regenerate')();\nset.addRange(0x10A80, 0x10A9F);\nmodule.exports = set;","function memoize(fn) {\n var cache = {};\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\nexport default memoize;","import memoize from '@emotion/memoize';\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */ && prop.charCodeAt(1) === 110\n /* n */ && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */);\n\nexport default index;","function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\n// based on https://github.com/developit/dlv\nexport var get = function get(obj, key, def, p, undef) {\n key = key && key.split ? key.split('.') : [key];\n for (p = 0; p < key.length; p++) {\n obj = obj ? obj[key[p]] : undef;\n }\n return obj === undef ? def : obj;\n};\nvar defaultBreakpoints = [40, 52, 64].map(function (n) {\n return n + 'em';\n});\nvar defaultTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fontSizes: [12, 14, 16, 20, 24, 32, 48, 64, 72]\n};\nvar aliases = {\n bg: 'backgroundColor',\n m: 'margin',\n mt: 'marginTop',\n mr: 'marginRight',\n mb: 'marginBottom',\n ml: 'marginLeft',\n mx: 'marginX',\n my: 'marginY',\n p: 'padding',\n pt: 'paddingTop',\n pr: 'paddingRight',\n pb: 'paddingBottom',\n pl: 'paddingLeft',\n px: 'paddingX',\n py: 'paddingY'\n};\nvar multiples = {\n marginX: ['marginLeft', 'marginRight'],\n marginY: ['marginTop', 'marginBottom'],\n paddingX: ['paddingLeft', 'paddingRight'],\n paddingY: ['paddingTop', 'paddingBottom'],\n size: ['width', 'height']\n};\nvar scales = {\n color: 'colors',\n backgroundColor: 'colors',\n borderColor: 'colors',\n margin: 'space',\n marginTop: 'space',\n marginRight: 'space',\n marginBottom: 'space',\n marginLeft: 'space',\n marginX: 'space',\n marginY: 'space',\n padding: 'space',\n paddingTop: 'space',\n paddingRight: 'space',\n paddingBottom: 'space',\n paddingLeft: 'space',\n paddingX: 'space',\n paddingY: 'space',\n top: 'space',\n right: 'space',\n bottom: 'space',\n left: 'space',\n gridGap: 'space',\n gridColumnGap: 'space',\n gridRowGap: 'space',\n gap: 'space',\n columnGap: 'space',\n rowGap: 'space',\n fontFamily: 'fonts',\n fontSize: 'fontSizes',\n fontWeight: 'fontWeights',\n lineHeight: 'lineHeights',\n letterSpacing: 'letterSpacings',\n border: 'borders',\n borderTop: 'borders',\n borderRight: 'borders',\n borderBottom: 'borders',\n borderLeft: 'borders',\n borderWidth: 'borderWidths',\n borderStyle: 'borderStyles',\n borderRadius: 'radii',\n borderTopRightRadius: 'radii',\n borderTopLeftRadius: 'radii',\n borderBottomRightRadius: 'radii',\n borderBottomLeftRadius: 'radii',\n borderTopWidth: 'borderWidths',\n borderTopColor: 'colors',\n borderTopStyle: 'borderStyles',\n borderBottomWidth: 'borderWidths',\n borderBottomColor: 'colors',\n borderBottomStyle: 'borderStyles',\n borderLeftWidth: 'borderWidths',\n borderLeftColor: 'colors',\n borderLeftStyle: 'borderStyles',\n borderRightWidth: 'borderWidths',\n borderRightColor: 'colors',\n borderRightStyle: 'borderStyles',\n outlineColor: 'colors',\n boxShadow: 'shadows',\n textShadow: 'shadows',\n zIndex: 'zIndices',\n width: 'sizes',\n minWidth: 'sizes',\n maxWidth: 'sizes',\n height: 'sizes',\n minHeight: 'sizes',\n maxHeight: 'sizes',\n flexBasis: 'sizes',\n size: 'sizes',\n // svg\n fill: 'colors',\n stroke: 'colors'\n};\nvar positiveOrNegative = function positiveOrNegative(scale, value) {\n if (typeof value !== 'number' || value >= 0) {\n return get(scale, value, value);\n }\n var absolute = Math.abs(value);\n var n = get(scale, absolute, absolute);\n if (typeof n === 'string') return '-' + n;\n return n * -1;\n};\nvar transforms = ['margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'top', 'bottom', 'left', 'right'].reduce(function (acc, curr) {\n var _extends2;\n return _extends({}, acc, (_extends2 = {}, _extends2[curr] = positiveOrNegative, _extends2));\n}, {});\nexport var responsive = function responsive(styles) {\n return function (theme) {\n var next = {};\n var breakpoints = get(theme, 'breakpoints', defaultBreakpoints);\n var mediaQueries = [null].concat(breakpoints.map(function (n) {\n return \"@media screen and (min-width: \" + n + \")\";\n }));\n for (var key in styles) {\n var value = typeof styles[key] === 'function' ? styles[key](theme) : styles[key];\n if (value == null) continue;\n if (!Array.isArray(value)) {\n next[key] = value;\n continue;\n }\n for (var i = 0; i < value.slice(0, mediaQueries.length).length; i++) {\n var media = mediaQueries[i];\n if (!media) {\n next[key] = value[i];\n continue;\n }\n next[media] = next[media] || {};\n if (value[i] == null) continue;\n next[media][key] = value[i];\n }\n }\n return next;\n };\n};\nexport var css = function css(args) {\n return function (props) {\n if (props === void 0) {\n props = {};\n }\n var theme = _extends({}, defaultTheme, {}, props.theme || props);\n var result = {};\n var obj = typeof args === 'function' ? args(theme) : args;\n var styles = responsive(obj)(theme);\n for (var key in styles) {\n var x = styles[key];\n var val = typeof x === 'function' ? x(theme) : x;\n if (key === 'variant') {\n var variant = css(get(theme, val))(theme);\n result = _extends({}, result, {}, variant);\n continue;\n }\n if (val && typeof val === 'object') {\n result[key] = css(val)(theme);\n continue;\n }\n var prop = get(aliases, key, key);\n var scaleName = get(scales, prop);\n var scale = get(theme, scaleName, get(theme, prop, {}));\n var transform = get(transforms, prop, get);\n var value = transform(scale, val, val);\n if (multiples[prop]) {\n var dirs = multiples[prop];\n for (var i = 0; i < dirs.length; i++) {\n result[dirs[i]] = value;\n }\n } else {\n result[prop] = value;\n }\n }\n return result;\n };\n};\nexport default css;","import { MDXProvider } from '@mdx-js/react';\nimport deepmerge from 'deepmerge';\nimport isPropValid from '@emotion/is-prop-valid';\nimport { version } from '@emotion/core/package.json';\nimport React, { forwardRef, useContext, createContext, useState, useEffect, useReducer } from 'react';\nimport { jsx, ThemeContext, Global } from '@emotion/core';\nimport css, { css as css$1, get } from '@styled-system/css';\nexport { css, get } from '@styled-system/css';\nvar getCSS = function getCSS(props) {\n if (!props.sx && !props.css) {\n return undefined;\n }\n return function (theme) {\n var styles = css(props.sx)(theme);\n var raw = typeof props.css === 'function' ? props.css(theme) : props.css;\n return [styles, raw];\n };\n};\nvar parseProps = function parseProps(props) {\n if (!props) {\n return null;\n }\n var next = {};\n for (var key in props) {\n if (key === 'sx') {\n continue;\n }\n next[key] = props[key];\n }\n var css$$1 = getCSS(props);\n if (css$$1) {\n next.css = css$$1;\n }\n return next;\n};\nvar jsx$1 = function jsx$$1(type, props) {\n var arguments$1 = arguments;\n for (var _len = arguments.length, children = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n children[_key - 2] = arguments$1[_key];\n }\n return jsx.apply(undefined, [type, parseProps(props)].concat(children));\n};\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n}\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\nvar canUseSymbol = typeof Symbol === 'function' && Symbol[\"for\"];\nvar REACT_ELEMENT = canUseSymbol ? Symbol[\"for\"]('react.element') : 0xeac7;\nvar FORWARD_REF = canUseSymbol ? Symbol[\"for\"]('react.forward_ref') : 0xeac7;\nvar isMergeableObject = function isMergeableObject(n) {\n return !!n && _typeof(n) === 'object' && n.$$typeof !== REACT_ELEMENT && n.$$typeof !== FORWARD_REF;\n};\nvar arrayMerge = function arrayMerge(destinationArray, sourceArray, options) {\n return sourceArray;\n};\nvar merge = function merge(a, b) {\n return deepmerge(a, b, {\n isMergeableObject: isMergeableObject,\n arrayMerge: arrayMerge\n });\n};\nmerge.all = function () {\n var arguments$1 = arguments;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments$1[_key];\n }\n return deepmerge.all(args, {\n isMergeableObject: isMergeableObject,\n arrayMerge: arrayMerge\n });\n};\nvar styled = function styled(tag) {\n return function () {\n var arguments$1 = arguments;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments$1[_key];\n }\n var Styled = forwardRef(function (_ref, ref) {\n var as = _ref.as,\n props = _objectWithoutProperties(_ref, [\"as\"]);\n var shouldForwardProps = typeof tag !== 'string' || as && typeof as !== 'string';\n var theme = useContext(ThemeContext);\n var nextProps = shouldForwardProps ? props : {};\n var styles = {};\n args.forEach(function (arg) {\n var style = typeof arg === 'function' ? arg(_objectSpread2({\n theme: theme\n }, props)) : arg;\n Object.assign(styles, style);\n });\n if (!shouldForwardProps) {\n for (var key in props) {\n if (!isPropValid(key)) {\n continue;\n }\n nextProps[key] = props[key];\n }\n }\n return jsx$1(as || tag, _objectSpread2({}, nextProps, {\n ref: ref,\n css: styles\n }));\n });\n return Styled;\n };\n};\nvar themed = function themed(key) {\n return function (props) {\n return css$1(get(props.theme, \"styles.\".concat(key)))(props.theme);\n };\n};\nvar tags = ['p', 'b', 'i', 'a', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'img', 'pre', 'code', 'ol', 'ul', 'li', 'blockquote', 'hr', 'em', 'table', 'tr', 'th', 'td', 'em', 'strong', 'delete',\n// mdx\n'inlineCode', 'thematicBreak',\n// other\n'div',\n// theme-ui\n'root'];\nvar aliases = {\n inlineCode: 'code',\n thematicBreak: 'hr',\n root: 'div'\n};\nvar alias = function alias(n) {\n return aliases[n] || n;\n};\nvar Styled = styled('div')(themed('div'));\nvar components = {};\ntags.forEach(function (tag) {\n components[tag] = styled(alias(tag))(themed(tag));\n Styled[tag] = components[tag];\n});\nvar createComponents = function createComponents() {\n var components = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var next = {};\n Object.keys(components).forEach(function (key) {\n next[key] = styled(components[key])(themed(key));\n });\n return next;\n};\nvar Context = createContext({\n emotionVersion: version,\n theme: null,\n components: components\n});\nvar useThemeUI = function useThemeUI() {\n return useContext(Context);\n};\nvar toVarName = function toVarName(key) {\n return \"--theme-ui-\".concat(key);\n};\nvar toVarValue = function toVarValue(key, value) {\n return \"var(\".concat(toVarName(key), \", \").concat(value, \")\");\n};\nvar join = function join() {\n var arguments$1 = arguments;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments$1[_key];\n }\n return args.filter(Boolean).join('-');\n};\nvar numberScales = {\n fontWeights: true,\n lineHeights: true\n};\nvar reservedKeys = {\n useCustomProperties: true,\n initialColorModeName: true,\n initialColorMode: true\n};\nvar toPixel = function toPixel(key, value) {\n if (typeof value !== 'number') {\n return value;\n }\n if (numberScales[key]) {\n return value;\n }\n return value + 'px';\n}; // convert theme values to custom properties\n\nvar toCustomProperties = function toCustomProperties(obj, parent, themeKey) {\n var next = Array.isArray(obj) ? [] : {};\n for (var key in obj) {\n var value = obj[key];\n var name = join(parent, key);\n if (value && _typeof(value) === 'object') {\n next[key] = toCustomProperties(value, name, key);\n continue;\n }\n if (reservedKeys[key]) {\n next[key] = value;\n continue;\n }\n var val = toPixel(themeKey || key, value);\n next[key] = toVarValue(name, val);\n }\n return next;\n};\nvar objectToVars = function objectToVars(parent, obj) {\n var vars = {};\n for (var key in obj) {\n if (key === 'modes') {\n continue;\n }\n var name = join(parent, key);\n var value = obj[key];\n if (value && _typeof(value) === 'object') {\n vars = _objectSpread2({}, vars, {}, objectToVars(name, value));\n } else {\n vars[toVarName(name)] = value;\n }\n }\n return vars;\n}; // create body styles for color modes\n\nvar createColorStyles = function createColorStyles(theme) {\n if (!theme.colors || !theme.colors.modes) {\n return {};\n }\n if (theme.useCustomProperties === false) {\n return css$1({\n color: 'text',\n bg: 'background'\n })(theme);\n }\n var modes = theme.colors.modes;\n var styles = objectToVars('colors', theme.colors);\n Object.keys(modes).forEach(function (mode) {\n var key = \"&.theme-ui-\".concat(mode);\n styles[key] = objectToVars('colors', modes[mode]);\n });\n return css$1(_objectSpread2({}, styles, {\n color: function color(t) {\n return \"var(--theme-ui-colors-text, \".concat(t.colors.text, \")\");\n },\n bg: function bg(t) {\n return \"var(--theme-ui-colors-background, \".concat(t.colors.background, \")\");\n }\n }))(theme);\n};\nvar STORAGE_KEY = 'theme-ui-color-mode';\nvar HAS_STORAGE = typeof Storage !== 'undefined';\nvar storage = {\n get: function get$$1(init) {\n return HAS_STORAGE && window.localStorage.getItem(STORAGE_KEY) || init;\n },\n set: function set(value) {\n return HAS_STORAGE && window.localStorage.setItem(STORAGE_KEY, value);\n }\n};\nvar getMediaQuery = function getMediaQuery() {\n var darkQuery = '(prefers-color-scheme: dark)';\n var mql = window.matchMedia ? window.matchMedia(darkQuery) : {};\n var dark = mql.media === darkQuery;\n return dark && mql.matches;\n};\nvar getName = function getName(theme) {\n return theme.initialColorModeName || theme.initialColorMode || 'default';\n};\nvar useColorState = function useColorState(theme) {\n var _useState = useState(getName(theme)),\n _useState2 = _slicedToArray(_useState, 2),\n mode = _useState2[0],\n setMode = _useState2[1];\n useEffect(function () {\n // initialize\n var stored = storage.get();\n document.body.classList.remove('theme-ui-' + stored);\n var dark = getMediaQuery();\n if (!stored && dark && theme.useColorSchemeMediaQuery) {\n return setMode('dark');\n }\n if (!stored || stored === mode) {\n return;\n }\n setMode(stored);\n }, []);\n useEffect(function () {\n if (!mode) {\n return;\n }\n storage.set(mode);\n }, [mode]);\n if (process.env.NODE_ENV !== 'production') {\n if (theme.colors && theme.colors.modes && Object.keys(theme.colors.modes).indexOf(getName(theme)) > -1) {\n console.warn('The `initialColorMode` value should be a unique name' + ' and cannot reference a key in `theme.colors.modes`.');\n }\n }\n return [mode, setMode];\n};\nvar useColorMode = function useColorMode() {\n var _useThemeUI = useThemeUI(),\n colorMode = _useThemeUI.colorMode,\n setColorMode = _useThemeUI.setColorMode;\n if (typeof setColorMode !== 'function') {\n throw new Error(\"[useColorMode] requires the ThemeProvider component\");\n }\n return [colorMode, setColorMode];\n};\nvar bodyColor = function bodyColor(theme) {\n return {\n body: createColorStyles(theme)\n };\n};\nvar ColorMode = function ColorMode() {\n return React.createElement(Global, {\n styles: bodyColor\n });\n};\nvar InitializeColorMode = function InitializeColorMode() {\n return React.createElement(\"script\", {\n key: \"theme-ui-no-flash\",\n dangerouslySetInnerHTML: {\n __html: \"(function() { try {\\n var mode = localStorage.getItem('theme-ui-color-mode');\\n if (!mode) return\\n document.body.classList.add('theme-ui-' + mode);\\n } catch (e) {} })();\"\n }\n });\n};\nvar mergeState = function mergeState() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var next = arguments.length > 1 ? arguments[1] : undefined;\n return merge.all({}, state, next);\n};\nvar applyColorMode = function applyColorMode(theme, mode) {\n if (!mode) {\n return theme;\n }\n var modes = get(theme, 'colors.modes', {});\n return merge.all({}, theme, {\n colors: get(modes, mode, {})\n });\n};\nvar BaseProvider = function BaseProvider(_ref) {\n var context = _ref.context,\n components$$1 = _ref.components,\n children = _ref.children;\n var theme = _objectSpread2({}, context.theme);\n if (theme.useCustomProperties !== false) {\n theme.colors = toCustomProperties(theme.colors, 'colors');\n }\n return jsx$1(ThemeContext.Provider, {\n value: theme\n }, jsx$1(MDXProvider, {\n components: components$$1\n }, jsx$1(Context.Provider, {\n value: context,\n children: children\n })));\n};\nvar RootProvider = function RootProvider(_ref2) {\n var _ref2$theme = _ref2.theme,\n propsTheme = _ref2$theme === void 0 ? {} : _ref2$theme,\n components$$1 = _ref2.components,\n children = _ref2.children;\n // components are provided in the default Context\n var outer = useThemeUI();\n var propsThemeObject = typeof propsTheme === 'function' ? propsTheme({}) : propsTheme;\n var _useColorState = useColorState(outer.theme || propsThemeObject),\n _useColorState2 = _slicedToArray(_useColorState, 2),\n colorMode = _useColorState2[0],\n setColorMode = _useColorState2[1];\n var theme = applyColorMode(outer.theme || propsThemeObject, colorMode);\n var context = _objectSpread2({}, outer, {\n __THEME_UI__: true,\n colorMode: colorMode,\n setColorMode: setColorMode,\n components: _objectSpread2({}, outer.components, {}, createComponents(components$$1)),\n theme: theme\n });\n useEffect(function () {\n window.__THEME_UI__ = context;\n }, [context.theme, context.colorMode]);\n return jsx$1(BaseProvider, {\n context: context,\n components: context.components,\n children: children\n });\n};\nvar NestedProvider = function NestedProvider(_ref3) {\n var theme = _ref3.theme,\n components$$1 = _ref3.components,\n children = _ref3.children;\n var outer = useThemeUI();\n var context = typeof theme === 'function' ? _objectSpread2({}, outer, {\n theme: theme(outer.theme)\n }) : merge.all({}, outer, {\n theme: theme\n });\n return jsx$1(BaseProvider, {\n context: context,\n components: createComponents(components$$1),\n children: children\n });\n};\nvar ThemeProvider = function ThemeProvider(props) {\n var outer = useThemeUI();\n if (process.env.NODE_ENV !== 'production') {\n if (outer.emotionVersion !== version) {\n console.warn('Multiple versions of Emotion detected,', 'and theming might not work as expected.', 'Please ensure there is only one copy of @emotion/core installed in your application.');\n }\n }\n if (!props.scoped && outer.__THEME_UI__) {\n return jsx$1(NestedProvider, props);\n }\n return jsx$1(RootProvider, props);\n};\nvar ThemeStateProvider = function ThemeStateProvider(_ref4) {\n var theme = _ref4.theme,\n children = _ref4.children;\n var outer = useThemeUI();\n var _useReducer = useReducer(mergeState, theme),\n _useReducer2 = _slicedToArray(_useReducer, 2),\n state = _useReducer2[0],\n setTheme = _useReducer2[1];\n var context = _objectSpread2({}, outer, {\n theme: state,\n setTheme: setTheme\n });\n return jsx$1(Context.Provider, {\n value: context,\n children: children\n });\n};\nvar Box = styled('div')({\n boxSizing: 'border-box',\n minWidth: 0\n});\nvar Flex = styled(Box)({\n display: 'flex'\n}); // root/page layout\n\nvar Layout = function Layout(props) {\n return jsx$1(Box, _objectSpread2({}, props, {\n sx: {\n minHeight: '100vh',\n display: 'flex',\n flexDirection: 'column',\n variant: 'styles.Layout'\n }\n }));\n};\nvar Header = function Header(props) {\n return jsx$1(Box, _objectSpread2({\n as: 'header'\n }, props, {\n sx: {\n display: 'flex',\n variant: 'styles.Header'\n }\n }));\n};\nvar Main = function Main(props) {\n return jsx$1(Box, _objectSpread2({\n as: 'main'\n }, props, {\n sx: {\n flex: '1 1 auto',\n variant: 'styles.Main'\n }\n }));\n};\nvar Container = function Container(props) {\n return jsx$1(Box, _objectSpread2({}, props, {\n sx: {\n width: '100%',\n minWidth: 0,\n maxWidth: 1024,\n mx: 'auto',\n p: 4,\n variant: 'styles.Container'\n }\n }));\n};\nvar Footer = function Footer(props) {\n return jsx$1(Box, _objectSpread2({\n as: 'footer'\n }, props, {\n sx: {\n display: 'flex',\n variant: 'styles.Footer'\n }\n }));\n};\nvar BaseStyles = function BaseStyles(props) {\n return jsx$1(\"div\", _extends({}, props, {\n sx: {\n fontFamily: 'body',\n lineHeight: 'body',\n fontWeight: 'body',\n variant: 'styles'\n }\n }));\n};\nexport { jsx$1 as jsx, ThemeProvider, ThemeStateProvider, Context, useThemeUI, ColorMode, useColorMode, InitializeColorMode, Styled, components, Box, Flex, Layout, Header, Main, Container, Footer, BaseStyles };","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","const set = require('regenerate')(0x1940);\nset.addRange(0x1900, 0x191E).addRange(0x1920, 0x192B).addRange(0x1930, 0x193B).addRange(0x1944, 0x194F);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0xB01, 0xB03).addRange(0xB05, 0xB0C).addRange(0xB0F, 0xB10).addRange(0xB13, 0xB28).addRange(0xB2A, 0xB30).addRange(0xB32, 0xB33).addRange(0xB35, 0xB39).addRange(0xB3C, 0xB44).addRange(0xB47, 0xB48).addRange(0xB4B, 0xB4D).addRange(0xB55, 0xB57).addRange(0xB5C, 0xB5D).addRange(0xB5F, 0xB63).addRange(0xB66, 0xB77);\nmodule.exports = set;","const set = require('regenerate')(0x20F0);\nset.addRange(0x900, 0x952).addRange(0x955, 0x97F).addRange(0x1CD0, 0x1CF6).addRange(0x1CF8, 0x1CF9).addRange(0xA830, 0xA839).addRange(0xA8E0, 0xA8FF);\nmodule.exports = set;","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = clone;\n","const set = require('regenerate')();\nset.addRange(0x1400, 0x167F).addRange(0x18B0, 0x18F5).addRange(0x11AB0, 0x11ABF);\nmodule.exports = set;","const set = require('regenerate')(0xFB3E);\nset.addRange(0x591, 0x5C7).addRange(0x5D0, 0x5EA).addRange(0x5EF, 0x5F4).addRange(0xFB1D, 0xFB36).addRange(0xFB38, 0xFB3C).addRange(0xFB40, 0xFB41).addRange(0xFB43, 0xFB44).addRange(0xFB46, 0xFB4F);\nmodule.exports = set;","/** Used to match wrap detail comments. */\nvar reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n/**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\nfunction getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n}\n\nmodule.exports = getWrapDetails;\n","const set = require('regenerate')(0x640, 0x85E);\nset.addRange(0x840, 0x85B);\nmodule.exports = set;","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","const set = require('regenerate')();\nset.addRange(0x11150, 0x11176);\nmodule.exports = set;","const set = require('regenerate')(0xAA, 0xBA, 0x1BB, 0x294, 0x6D5, 0x6FF, 0x710, 0x7B1, 0x93D, 0x950, 0x9B2, 0x9BD, 0x9CE, 0x9FC, 0xA5E, 0xABD, 0xAD0, 0xAF9, 0xB3D, 0xB71, 0xB83, 0xB9C, 0xBD0, 0xC3D, 0xC5D, 0xC80, 0xCBD, 0xD3D, 0xD4E, 0xDBD, 0xE84, 0xEA5, 0xEBD, 0xF00, 0x103F, 0x1061, 0x108E, 0x1258, 0x12C0, 0x17DC, 0x18AA, 0x1CFA, 0x3006, 0x303C, 0x309F, 0x30FF, 0xA66E, 0xA78F, 0xA7F7, 0xA8FB, 0xAA7A, 0xAAB1, 0xAAC0, 0xAAC2, 0xAAF2, 0xFB1D, 0xFB3E, 0x10808, 0x1083C, 0x10A00, 0x10F27, 0x11075, 0x11144, 0x11147, 0x11176, 0x111DA, 0x111DC, 0x11288, 0x1133D, 0x11350, 0x114C7, 0x11644, 0x116B8, 0x11909, 0x1193F, 0x11941, 0x119E1, 0x119E3, 0x11A00, 0x11A3A, 0x11A50, 0x11A9D, 0x11C40, 0x11D46, 0x11D98, 0x11FB0, 0x16F50, 0x1DF0A, 0x1E14E, 0x1EE24, 0x1EE27, 0x1EE39, 0x1EE3B, 0x1EE42, 0x1EE47, 0x1EE49, 0x1EE4B, 0x1EE54, 0x1EE57, 0x1EE59, 0x1EE5B, 0x1EE5D, 0x1EE5F, 0x1EE64, 0x1EE7E);\nset.addRange(0x1C0, 0x1C3).addRange(0x5D0, 0x5EA).addRange(0x5EF, 0x5F2).addRange(0x620, 0x63F).addRange(0x641, 0x64A).addRange(0x66E, 0x66F).addRange(0x671, 0x6D3).addRange(0x6EE, 0x6EF).addRange(0x6FA, 0x6FC).addRange(0x712, 0x72F).addRange(0x74D, 0x7A5).addRange(0x7CA, 0x7EA).addRange(0x800, 0x815).addRange(0x840, 0x858).addRange(0x860, 0x86A).addRange(0x870, 0x887).addRange(0x889, 0x88E).addRange(0x8A0, 0x8C8).addRange(0x904, 0x939).addRange(0x958, 0x961).addRange(0x972, 0x980).addRange(0x985, 0x98C).addRange(0x98F, 0x990).addRange(0x993, 0x9A8).addRange(0x9AA, 0x9B0).addRange(0x9B6, 0x9B9).addRange(0x9DC, 0x9DD).addRange(0x9DF, 0x9E1).addRange(0x9F0, 0x9F1).addRange(0xA05, 0xA0A).addRange(0xA0F, 0xA10).addRange(0xA13, 0xA28).addRange(0xA2A, 0xA30).addRange(0xA32, 0xA33).addRange(0xA35, 0xA36).addRange(0xA38, 0xA39).addRange(0xA59, 0xA5C).addRange(0xA72, 0xA74).addRange(0xA85, 0xA8D).addRange(0xA8F, 0xA91).addRange(0xA93, 0xAA8).addRange(0xAAA, 0xAB0).addRange(0xAB2, 0xAB3).addRange(0xAB5, 0xAB9).addRange(0xAE0, 0xAE1).addRange(0xB05, 0xB0C).addRange(0xB0F, 0xB10).addRange(0xB13, 0xB28).addRange(0xB2A, 0xB30).addRange(0xB32, 0xB33).addRange(0xB35, 0xB39);\nset.addRange(0xB5C, 0xB5D).addRange(0xB5F, 0xB61).addRange(0xB85, 0xB8A).addRange(0xB8E, 0xB90).addRange(0xB92, 0xB95).addRange(0xB99, 0xB9A).addRange(0xB9E, 0xB9F).addRange(0xBA3, 0xBA4).addRange(0xBA8, 0xBAA).addRange(0xBAE, 0xBB9).addRange(0xC05, 0xC0C).addRange(0xC0E, 0xC10).addRange(0xC12, 0xC28).addRange(0xC2A, 0xC39).addRange(0xC58, 0xC5A).addRange(0xC60, 0xC61).addRange(0xC85, 0xC8C).addRange(0xC8E, 0xC90).addRange(0xC92, 0xCA8).addRange(0xCAA, 0xCB3).addRange(0xCB5, 0xCB9).addRange(0xCDD, 0xCDE).addRange(0xCE0, 0xCE1).addRange(0xCF1, 0xCF2).addRange(0xD04, 0xD0C).addRange(0xD0E, 0xD10).addRange(0xD12, 0xD3A).addRange(0xD54, 0xD56).addRange(0xD5F, 0xD61).addRange(0xD7A, 0xD7F).addRange(0xD85, 0xD96).addRange(0xD9A, 0xDB1).addRange(0xDB3, 0xDBB).addRange(0xDC0, 0xDC6).addRange(0xE01, 0xE30).addRange(0xE32, 0xE33).addRange(0xE40, 0xE45).addRange(0xE81, 0xE82).addRange(0xE86, 0xE8A).addRange(0xE8C, 0xEA3).addRange(0xEA7, 0xEB0).addRange(0xEB2, 0xEB3).addRange(0xEC0, 0xEC4).addRange(0xEDC, 0xEDF).addRange(0xF40, 0xF47).addRange(0xF49, 0xF6C).addRange(0xF88, 0xF8C).addRange(0x1000, 0x102A).addRange(0x1050, 0x1055).addRange(0x105A, 0x105D).addRange(0x1065, 0x1066);\nset.addRange(0x106E, 0x1070).addRange(0x1075, 0x1081).addRange(0x1100, 0x1248).addRange(0x124A, 0x124D).addRange(0x1250, 0x1256).addRange(0x125A, 0x125D).addRange(0x1260, 0x1288).addRange(0x128A, 0x128D).addRange(0x1290, 0x12B0).addRange(0x12B2, 0x12B5).addRange(0x12B8, 0x12BE).addRange(0x12C2, 0x12C5).addRange(0x12C8, 0x12D6).addRange(0x12D8, 0x1310).addRange(0x1312, 0x1315).addRange(0x1318, 0x135A).addRange(0x1380, 0x138F).addRange(0x1401, 0x166C).addRange(0x166F, 0x167F).addRange(0x1681, 0x169A).addRange(0x16A0, 0x16EA).addRange(0x16F1, 0x16F8).addRange(0x1700, 0x1711).addRange(0x171F, 0x1731).addRange(0x1740, 0x1751).addRange(0x1760, 0x176C).addRange(0x176E, 0x1770).addRange(0x1780, 0x17B3).addRange(0x1820, 0x1842).addRange(0x1844, 0x1878).addRange(0x1880, 0x1884).addRange(0x1887, 0x18A8).addRange(0x18B0, 0x18F5).addRange(0x1900, 0x191E).addRange(0x1950, 0x196D).addRange(0x1970, 0x1974).addRange(0x1980, 0x19AB).addRange(0x19B0, 0x19C9).addRange(0x1A00, 0x1A16).addRange(0x1A20, 0x1A54).addRange(0x1B05, 0x1B33).addRange(0x1B45, 0x1B4C).addRange(0x1B83, 0x1BA0).addRange(0x1BAE, 0x1BAF).addRange(0x1BBA, 0x1BE5).addRange(0x1C00, 0x1C23).addRange(0x1C4D, 0x1C4F).addRange(0x1C5A, 0x1C77).addRange(0x1CE9, 0x1CEC).addRange(0x1CEE, 0x1CF3).addRange(0x1CF5, 0x1CF6);\nset.addRange(0x2135, 0x2138).addRange(0x2D30, 0x2D67).addRange(0x2D80, 0x2D96).addRange(0x2DA0, 0x2DA6).addRange(0x2DA8, 0x2DAE).addRange(0x2DB0, 0x2DB6).addRange(0x2DB8, 0x2DBE).addRange(0x2DC0, 0x2DC6).addRange(0x2DC8, 0x2DCE).addRange(0x2DD0, 0x2DD6).addRange(0x2DD8, 0x2DDE).addRange(0x3041, 0x3096).addRange(0x30A1, 0x30FA).addRange(0x3105, 0x312F).addRange(0x3131, 0x318E).addRange(0x31A0, 0x31BF).addRange(0x31F0, 0x31FF).addRange(0x3400, 0x4DBF).addRange(0x4E00, 0xA014).addRange(0xA016, 0xA48C).addRange(0xA4D0, 0xA4F7).addRange(0xA500, 0xA60B).addRange(0xA610, 0xA61F).addRange(0xA62A, 0xA62B).addRange(0xA6A0, 0xA6E5).addRange(0xA7FB, 0xA801).addRange(0xA803, 0xA805).addRange(0xA807, 0xA80A).addRange(0xA80C, 0xA822).addRange(0xA840, 0xA873).addRange(0xA882, 0xA8B3).addRange(0xA8F2, 0xA8F7).addRange(0xA8FD, 0xA8FE).addRange(0xA90A, 0xA925).addRange(0xA930, 0xA946).addRange(0xA960, 0xA97C).addRange(0xA984, 0xA9B2).addRange(0xA9E0, 0xA9E4).addRange(0xA9E7, 0xA9EF).addRange(0xA9FA, 0xA9FE).addRange(0xAA00, 0xAA28).addRange(0xAA40, 0xAA42).addRange(0xAA44, 0xAA4B).addRange(0xAA60, 0xAA6F).addRange(0xAA71, 0xAA76).addRange(0xAA7E, 0xAAAF).addRange(0xAAB5, 0xAAB6).addRange(0xAAB9, 0xAABD).addRange(0xAADB, 0xAADC).addRange(0xAAE0, 0xAAEA).addRange(0xAB01, 0xAB06);\nset.addRange(0xAB09, 0xAB0E).addRange(0xAB11, 0xAB16).addRange(0xAB20, 0xAB26).addRange(0xAB28, 0xAB2E).addRange(0xABC0, 0xABE2).addRange(0xAC00, 0xD7A3).addRange(0xD7B0, 0xD7C6).addRange(0xD7CB, 0xD7FB).addRange(0xF900, 0xFA6D).addRange(0xFA70, 0xFAD9).addRange(0xFB1F, 0xFB28).addRange(0xFB2A, 0xFB36).addRange(0xFB38, 0xFB3C).addRange(0xFB40, 0xFB41).addRange(0xFB43, 0xFB44).addRange(0xFB46, 0xFBB1).addRange(0xFBD3, 0xFD3D).addRange(0xFD50, 0xFD8F).addRange(0xFD92, 0xFDC7).addRange(0xFDF0, 0xFDFB).addRange(0xFE70, 0xFE74).addRange(0xFE76, 0xFEFC).addRange(0xFF66, 0xFF6F).addRange(0xFF71, 0xFF9D).addRange(0xFFA0, 0xFFBE).addRange(0xFFC2, 0xFFC7).addRange(0xFFCA, 0xFFCF).addRange(0xFFD2, 0xFFD7).addRange(0xFFDA, 0xFFDC).addRange(0x10000, 0x1000B).addRange(0x1000D, 0x10026).addRange(0x10028, 0x1003A).addRange(0x1003C, 0x1003D).addRange(0x1003F, 0x1004D).addRange(0x10050, 0x1005D).addRange(0x10080, 0x100FA).addRange(0x10280, 0x1029C).addRange(0x102A0, 0x102D0).addRange(0x10300, 0x1031F).addRange(0x1032D, 0x10340).addRange(0x10342, 0x10349).addRange(0x10350, 0x10375).addRange(0x10380, 0x1039D).addRange(0x103A0, 0x103C3).addRange(0x103C8, 0x103CF).addRange(0x10450, 0x1049D).addRange(0x10500, 0x10527).addRange(0x10530, 0x10563).addRange(0x10600, 0x10736).addRange(0x10740, 0x10755).addRange(0x10760, 0x10767);\nset.addRange(0x10800, 0x10805).addRange(0x1080A, 0x10835).addRange(0x10837, 0x10838).addRange(0x1083F, 0x10855).addRange(0x10860, 0x10876).addRange(0x10880, 0x1089E).addRange(0x108E0, 0x108F2).addRange(0x108F4, 0x108F5).addRange(0x10900, 0x10915).addRange(0x10920, 0x10939).addRange(0x10980, 0x109B7).addRange(0x109BE, 0x109BF).addRange(0x10A10, 0x10A13).addRange(0x10A15, 0x10A17).addRange(0x10A19, 0x10A35).addRange(0x10A60, 0x10A7C).addRange(0x10A80, 0x10A9C).addRange(0x10AC0, 0x10AC7).addRange(0x10AC9, 0x10AE4).addRange(0x10B00, 0x10B35).addRange(0x10B40, 0x10B55).addRange(0x10B60, 0x10B72).addRange(0x10B80, 0x10B91).addRange(0x10C00, 0x10C48).addRange(0x10D00, 0x10D23).addRange(0x10E80, 0x10EA9).addRange(0x10EB0, 0x10EB1).addRange(0x10F00, 0x10F1C).addRange(0x10F30, 0x10F45).addRange(0x10F70, 0x10F81).addRange(0x10FB0, 0x10FC4).addRange(0x10FE0, 0x10FF6).addRange(0x11003, 0x11037).addRange(0x11071, 0x11072).addRange(0x11083, 0x110AF).addRange(0x110D0, 0x110E8).addRange(0x11103, 0x11126).addRange(0x11150, 0x11172).addRange(0x11183, 0x111B2).addRange(0x111C1, 0x111C4).addRange(0x11200, 0x11211).addRange(0x11213, 0x1122B).addRange(0x11280, 0x11286).addRange(0x1128A, 0x1128D).addRange(0x1128F, 0x1129D).addRange(0x1129F, 0x112A8).addRange(0x112B0, 0x112DE).addRange(0x11305, 0x1130C).addRange(0x1130F, 0x11310).addRange(0x11313, 0x11328).addRange(0x1132A, 0x11330);\nset.addRange(0x11332, 0x11333).addRange(0x11335, 0x11339).addRange(0x1135D, 0x11361).addRange(0x11400, 0x11434).addRange(0x11447, 0x1144A).addRange(0x1145F, 0x11461).addRange(0x11480, 0x114AF).addRange(0x114C4, 0x114C5).addRange(0x11580, 0x115AE).addRange(0x115D8, 0x115DB).addRange(0x11600, 0x1162F).addRange(0x11680, 0x116AA).addRange(0x11700, 0x1171A).addRange(0x11740, 0x11746).addRange(0x11800, 0x1182B).addRange(0x118FF, 0x11906).addRange(0x1190C, 0x11913).addRange(0x11915, 0x11916).addRange(0x11918, 0x1192F).addRange(0x119A0, 0x119A7).addRange(0x119AA, 0x119D0).addRange(0x11A0B, 0x11A32).addRange(0x11A5C, 0x11A89).addRange(0x11AB0, 0x11AF8).addRange(0x11C00, 0x11C08).addRange(0x11C0A, 0x11C2E).addRange(0x11C72, 0x11C8F).addRange(0x11D00, 0x11D06).addRange(0x11D08, 0x11D09).addRange(0x11D0B, 0x11D30).addRange(0x11D60, 0x11D65).addRange(0x11D67, 0x11D68).addRange(0x11D6A, 0x11D89).addRange(0x11EE0, 0x11EF2).addRange(0x12000, 0x12399).addRange(0x12480, 0x12543).addRange(0x12F90, 0x12FF0).addRange(0x13000, 0x1342E).addRange(0x14400, 0x14646).addRange(0x16800, 0x16A38).addRange(0x16A40, 0x16A5E).addRange(0x16A70, 0x16ABE).addRange(0x16AD0, 0x16AED).addRange(0x16B00, 0x16B2F).addRange(0x16B63, 0x16B77).addRange(0x16B7D, 0x16B8F).addRange(0x16F00, 0x16F4A).addRange(0x17000, 0x187F7).addRange(0x18800, 0x18CD5).addRange(0x18D00, 0x18D08).addRange(0x1B000, 0x1B122);\nset.addRange(0x1B150, 0x1B152).addRange(0x1B164, 0x1B167).addRange(0x1B170, 0x1B2FB).addRange(0x1BC00, 0x1BC6A).addRange(0x1BC70, 0x1BC7C).addRange(0x1BC80, 0x1BC88).addRange(0x1BC90, 0x1BC99).addRange(0x1E100, 0x1E12C).addRange(0x1E290, 0x1E2AD).addRange(0x1E2C0, 0x1E2EB).addRange(0x1E7E0, 0x1E7E6).addRange(0x1E7E8, 0x1E7EB).addRange(0x1E7ED, 0x1E7EE).addRange(0x1E7F0, 0x1E7FE).addRange(0x1E800, 0x1E8C4).addRange(0x1EE00, 0x1EE03).addRange(0x1EE05, 0x1EE1F).addRange(0x1EE21, 0x1EE22).addRange(0x1EE29, 0x1EE32).addRange(0x1EE34, 0x1EE37).addRange(0x1EE4D, 0x1EE4F).addRange(0x1EE51, 0x1EE52).addRange(0x1EE61, 0x1EE62).addRange(0x1EE67, 0x1EE6A).addRange(0x1EE6C, 0x1EE72).addRange(0x1EE74, 0x1EE77).addRange(0x1EE79, 0x1EE7C).addRange(0x1EE80, 0x1EE89).addRange(0x1EE8B, 0x1EE9B).addRange(0x1EEA1, 0x1EEA3).addRange(0x1EEA5, 0x1EEA9).addRange(0x1EEAB, 0x1EEBB).addRange(0x20000, 0x2A6DF).addRange(0x2A700, 0x2B738).addRange(0x2B740, 0x2B81D).addRange(0x2B820, 0x2CEA1).addRange(0x2CEB0, 0x2EBE0).addRange(0x2F800, 0x2FA1D).addRange(0x30000, 0x3134A);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x531, 0x556).addRange(0x559, 0x58A).addRange(0x58D, 0x58F).addRange(0xFB13, 0xFB17);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x11400, 0x1145B).addRange(0x1145D, 0x11461);\nmodule.exports = set;","const set = require('regenerate')(0x100, 0x102, 0x104, 0x106, 0x108, 0x10A, 0x10C, 0x10E, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11A, 0x11C, 0x11E, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12A, 0x12C, 0x12E, 0x130, 0x132, 0x134, 0x136, 0x139, 0x13B, 0x13D, 0x13F, 0x141, 0x143, 0x145, 0x147, 0x14A, 0x14C, 0x14E, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15A, 0x15C, 0x15E, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16A, 0x16C, 0x16E, 0x170, 0x172, 0x174, 0x176, 0x17B, 0x17D, 0x184, 0x1A2, 0x1A4, 0x1A9, 0x1AC, 0x1B5, 0x1BC, 0x1CD, 0x1CF, 0x1D1, 0x1D3, 0x1D5, 0x1D7, 0x1D9, 0x1DB, 0x1DE, 0x1E0, 0x1E2, 0x1E4, 0x1E6, 0x1E8, 0x1EA, 0x1EC, 0x1EE, 0x1F4, 0x1FA, 0x1FC, 0x1FE, 0x200, 0x202, 0x204, 0x206, 0x208, 0x20A, 0x20C, 0x20E, 0x210, 0x212, 0x214, 0x216, 0x218, 0x21A, 0x21C, 0x21E, 0x220, 0x222, 0x224, 0x226, 0x228, 0x22A, 0x22C, 0x22E, 0x230, 0x232, 0x241, 0x248, 0x24A, 0x24C, 0x24E, 0x370, 0x372, 0x376, 0x37F, 0x386, 0x38C, 0x3CF, 0x3D8, 0x3DA, 0x3DC, 0x3DE, 0x3E0, 0x3E2, 0x3E4, 0x3E6, 0x3E8, 0x3EA, 0x3EC, 0x3EE, 0x3F4, 0x3F7, 0x460, 0x462, 0x464, 0x466, 0x468, 0x46A, 0x46C, 0x46E, 0x470, 0x472, 0x474, 0x476, 0x478, 0x47A, 0x47C, 0x47E, 0x480, 0x48A, 0x48C, 0x48E, 0x490, 0x492, 0x494, 0x496, 0x498, 0x49A, 0x49C, 0x49E, 0x4A0, 0x4A2, 0x4A4, 0x4A6, 0x4A8, 0x4AA, 0x4AC, 0x4AE, 0x4B0, 0x4B2, 0x4B4, 0x4B6, 0x4B8, 0x4BA, 0x4BC, 0x4BE, 0x4C3, 0x4C5, 0x4C7, 0x4C9, 0x4CB, 0x4CD, 0x4D0, 0x4D2, 0x4D4, 0x4D6, 0x4D8, 0x4DA, 0x4DC, 0x4DE, 0x4E0, 0x4E2, 0x4E4, 0x4E6, 0x4E8, 0x4EA, 0x4EC, 0x4EE, 0x4F0, 0x4F2, 0x4F4, 0x4F6, 0x4F8, 0x4FA, 0x4FC, 0x4FE, 0x500, 0x502, 0x504, 0x506, 0x508, 0x50A, 0x50C, 0x50E, 0x510, 0x512, 0x514, 0x516, 0x518, 0x51A, 0x51C, 0x51E, 0x520, 0x522, 0x524, 0x526, 0x528, 0x52A, 0x52C, 0x52E, 0x10C7, 0x10CD, 0x1E00, 0x1E02, 0x1E04, 0x1E06, 0x1E08, 0x1E0A, 0x1E0C, 0x1E0E, 0x1E10, 0x1E12, 0x1E14, 0x1E16, 0x1E18, 0x1E1A, 0x1E1C, 0x1E1E, 0x1E20, 0x1E22, 0x1E24, 0x1E26, 0x1E28, 0x1E2A, 0x1E2C, 0x1E2E, 0x1E30, 0x1E32, 0x1E34, 0x1E36, 0x1E38, 0x1E3A, 0x1E3C, 0x1E3E, 0x1E40, 0x1E42, 0x1E44, 0x1E46, 0x1E48, 0x1E4A, 0x1E4C, 0x1E4E, 0x1E50, 0x1E52, 0x1E54, 0x1E56, 0x1E58, 0x1E5A, 0x1E5C, 0x1E5E, 0x1E60, 0x1E62, 0x1E64, 0x1E66, 0x1E68, 0x1E6A, 0x1E6C, 0x1E6E, 0x1E70, 0x1E72, 0x1E74, 0x1E76, 0x1E78, 0x1E7A, 0x1E7C, 0x1E7E, 0x1E80, 0x1E82, 0x1E84, 0x1E86, 0x1E88, 0x1E8A, 0x1E8C, 0x1E8E, 0x1E90, 0x1E92, 0x1E94, 0x1E9E, 0x1EA0, 0x1EA2, 0x1EA4, 0x1EA6, 0x1EA8, 0x1EAA, 0x1EAC, 0x1EAE, 0x1EB0, 0x1EB2, 0x1EB4, 0x1EB6, 0x1EB8, 0x1EBA, 0x1EBC, 0x1EBE, 0x1EC0, 0x1EC2, 0x1EC4, 0x1EC6, 0x1EC8, 0x1ECA, 0x1ECC, 0x1ECE, 0x1ED0, 0x1ED2, 0x1ED4, 0x1ED6, 0x1ED8, 0x1EDA, 0x1EDC, 0x1EDE, 0x1EE0, 0x1EE2, 0x1EE4, 0x1EE6, 0x1EE8, 0x1EEA, 0x1EEC, 0x1EEE, 0x1EF0, 0x1EF2, 0x1EF4, 0x1EF6, 0x1EF8, 0x1EFA, 0x1EFC, 0x1EFE, 0x1F59, 0x1F5B, 0x1F5D, 0x1F5F, 0x2126, 0x2132, 0x2183, 0x2C60, 0x2C67, 0x2C69, 0x2C6B, 0x2C72, 0x2C75, 0x2C82, 0x2C84, 0x2C86, 0x2C88, 0x2C8A, 0x2C8C, 0x2C8E, 0x2C90, 0x2C92, 0x2C94, 0x2C96, 0x2C98, 0x2C9A, 0x2C9C, 0x2C9E, 0x2CA0, 0x2CA2, 0x2CA4, 0x2CA6, 0x2CA8, 0x2CAA, 0x2CAC, 0x2CAE, 0x2CB0, 0x2CB2, 0x2CB4, 0x2CB6, 0x2CB8, 0x2CBA, 0x2CBC, 0x2CBE, 0x2CC0, 0x2CC2, 0x2CC4, 0x2CC6, 0x2CC8, 0x2CCA, 0x2CCC, 0x2CCE, 0x2CD0, 0x2CD2, 0x2CD4, 0x2CD6, 0x2CD8, 0x2CDA, 0x2CDC, 0x2CDE, 0x2CE0, 0x2CE2, 0x2CEB, 0x2CED, 0x2CF2, 0xA640, 0xA642, 0xA644, 0xA646, 0xA648, 0xA64A, 0xA64C, 0xA64E, 0xA650, 0xA652, 0xA654, 0xA656, 0xA658, 0xA65A, 0xA65C, 0xA65E, 0xA660, 0xA662, 0xA664, 0xA666, 0xA668, 0xA66A, 0xA66C, 0xA680, 0xA682, 0xA684, 0xA686, 0xA688, 0xA68A, 0xA68C, 0xA68E, 0xA690, 0xA692, 0xA694, 0xA696, 0xA698, 0xA69A, 0xA722, 0xA724, 0xA726, 0xA728, 0xA72A, 0xA72C, 0xA72E, 0xA732, 0xA734, 0xA736, 0xA738, 0xA73A, 0xA73C, 0xA73E, 0xA740, 0xA742, 0xA744, 0xA746, 0xA748, 0xA74A, 0xA74C, 0xA74E, 0xA750, 0xA752, 0xA754, 0xA756, 0xA758, 0xA75A, 0xA75C, 0xA75E, 0xA760, 0xA762, 0xA764, 0xA766, 0xA768, 0xA76A, 0xA76C, 0xA76E, 0xA779, 0xA77B, 0xA780, 0xA782, 0xA784, 0xA786, 0xA78B, 0xA78D, 0xA790, 0xA792, 0xA796, 0xA798, 0xA79A, 0xA79C, 0xA79E, 0xA7A0, 0xA7A2, 0xA7A4, 0xA7A6, 0xA7A8, 0xA7B6, 0xA7B8, 0xA7BA, 0xA7BC, 0xA7BE, 0xA7C0, 0xA7C2, 0xA7C9, 0xA7D0, 0xA7D6, 0xA7D8, 0xA7F5);\nset.addRange(0x41, 0x5A).addRange(0xC0, 0xD6).addRange(0xD8, 0xDE).addRange(0x178, 0x179).addRange(0x181, 0x182).addRange(0x186, 0x187).addRange(0x189, 0x18B).addRange(0x18E, 0x191).addRange(0x193, 0x194).addRange(0x196, 0x198).addRange(0x19C, 0x19D).addRange(0x19F, 0x1A0).addRange(0x1A6, 0x1A7).addRange(0x1AE, 0x1AF).addRange(0x1B1, 0x1B3).addRange(0x1B7, 0x1B8).addRange(0x1C4, 0x1C5).addRange(0x1C7, 0x1C8).addRange(0x1CA, 0x1CB).addRange(0x1F1, 0x1F2).addRange(0x1F6, 0x1F8).addRange(0x23A, 0x23B).addRange(0x23D, 0x23E).addRange(0x243, 0x246).addRange(0x388, 0x38A).addRange(0x38E, 0x38F).addRange(0x391, 0x3A1).addRange(0x3A3, 0x3AB).addRange(0x3F9, 0x3FA).addRange(0x3FD, 0x42F).addRange(0x4C0, 0x4C1).addRange(0x531, 0x556).addRange(0x10A0, 0x10C5).addRange(0x13A0, 0x13F5).addRange(0x1C90, 0x1CBA).addRange(0x1CBD, 0x1CBF).addRange(0x1F08, 0x1F0F).addRange(0x1F18, 0x1F1D).addRange(0x1F28, 0x1F2F).addRange(0x1F38, 0x1F3F).addRange(0x1F48, 0x1F4D).addRange(0x1F68, 0x1F6F).addRange(0x1F88, 0x1F8F).addRange(0x1F98, 0x1F9F).addRange(0x1FA8, 0x1FAF).addRange(0x1FB8, 0x1FBC).addRange(0x1FC8, 0x1FCC).addRange(0x1FD8, 0x1FDB).addRange(0x1FE8, 0x1FEC).addRange(0x1FF8, 0x1FFC).addRange(0x212A, 0x212B);\nset.addRange(0x2160, 0x216F).addRange(0x24B6, 0x24CF).addRange(0x2C00, 0x2C2F).addRange(0x2C62, 0x2C64).addRange(0x2C6D, 0x2C70).addRange(0x2C7E, 0x2C80).addRange(0xA77D, 0xA77E).addRange(0xA7AA, 0xA7AE).addRange(0xA7B0, 0xA7B4).addRange(0xA7C4, 0xA7C7).addRange(0xFF21, 0xFF3A).addRange(0x10400, 0x10427).addRange(0x104B0, 0x104D3).addRange(0x10570, 0x1057A).addRange(0x1057C, 0x1058A).addRange(0x1058C, 0x10592).addRange(0x10594, 0x10595).addRange(0x10C80, 0x10CB2).addRange(0x118A0, 0x118BF).addRange(0x16E40, 0x16E5F).addRange(0x1E900, 0x1E921);\nmodule.exports = set;","var createWrap = require('./_createWrap');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_ARY_FLAG = 128;\n\n/**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\nfunction ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n}\n\nmodule.exports = ary;\n","const set = require('regenerate')();\nset.addRange(0x10B40, 0x10B55).addRange(0x10B58, 0x10B5F);\nmodule.exports = set;","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n","const set = require('regenerate')();\nset.addRange(0x16A70, 0x16ABE).addRange(0x16AC0, 0x16AC9);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0xD800, 0xDFFF);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x11100, 0x11134).addRange(0x11136, 0x11147);\nmodule.exports = set;","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","const set = require('regenerate')();\nset.addRange(0xAA80, 0xAAC2).addRange(0xAADB, 0xAADF);\nmodule.exports = set;","var call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","const set = require('regenerate')(0x100, 0x102, 0x104, 0x106, 0x108, 0x10A, 0x10C, 0x10E, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11A, 0x11C, 0x11E, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12A, 0x12C, 0x12E, 0x130, 0x132, 0x134, 0x136, 0x139, 0x13B, 0x13D, 0x13F, 0x141, 0x143, 0x145, 0x147, 0x14A, 0x14C, 0x14E, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15A, 0x15C, 0x15E, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16A, 0x16C, 0x16E, 0x170, 0x172, 0x174, 0x176, 0x17B, 0x17D, 0x184, 0x1A2, 0x1A4, 0x1A9, 0x1AC, 0x1B5, 0x1BC, 0x1C4, 0x1C7, 0x1CA, 0x1CD, 0x1CF, 0x1D1, 0x1D3, 0x1D5, 0x1D7, 0x1D9, 0x1DB, 0x1DE, 0x1E0, 0x1E2, 0x1E4, 0x1E6, 0x1E8, 0x1EA, 0x1EC, 0x1EE, 0x1F1, 0x1F4, 0x1FA, 0x1FC, 0x1FE, 0x200, 0x202, 0x204, 0x206, 0x208, 0x20A, 0x20C, 0x20E, 0x210, 0x212, 0x214, 0x216, 0x218, 0x21A, 0x21C, 0x21E, 0x220, 0x222, 0x224, 0x226, 0x228, 0x22A, 0x22C, 0x22E, 0x230, 0x232, 0x241, 0x248, 0x24A, 0x24C, 0x24E, 0x370, 0x372, 0x376, 0x37F, 0x386, 0x38C, 0x3CF, 0x3D8, 0x3DA, 0x3DC, 0x3DE, 0x3E0, 0x3E2, 0x3E4, 0x3E6, 0x3E8, 0x3EA, 0x3EC, 0x3EE, 0x3F4, 0x3F7, 0x460, 0x462, 0x464, 0x466, 0x468, 0x46A, 0x46C, 0x46E, 0x470, 0x472, 0x474, 0x476, 0x478, 0x47A, 0x47C, 0x47E, 0x480, 0x48A, 0x48C, 0x48E, 0x490, 0x492, 0x494, 0x496, 0x498, 0x49A, 0x49C, 0x49E, 0x4A0, 0x4A2, 0x4A4, 0x4A6, 0x4A8, 0x4AA, 0x4AC, 0x4AE, 0x4B0, 0x4B2, 0x4B4, 0x4B6, 0x4B8, 0x4BA, 0x4BC, 0x4BE, 0x4C3, 0x4C5, 0x4C7, 0x4C9, 0x4CB, 0x4CD, 0x4D0, 0x4D2, 0x4D4, 0x4D6, 0x4D8, 0x4DA, 0x4DC, 0x4DE, 0x4E0, 0x4E2, 0x4E4, 0x4E6, 0x4E8, 0x4EA, 0x4EC, 0x4EE, 0x4F0, 0x4F2, 0x4F4, 0x4F6, 0x4F8, 0x4FA, 0x4FC, 0x4FE, 0x500, 0x502, 0x504, 0x506, 0x508, 0x50A, 0x50C, 0x50E, 0x510, 0x512, 0x514, 0x516, 0x518, 0x51A, 0x51C, 0x51E, 0x520, 0x522, 0x524, 0x526, 0x528, 0x52A, 0x52C, 0x52E, 0x10C7, 0x10CD, 0x1E00, 0x1E02, 0x1E04, 0x1E06, 0x1E08, 0x1E0A, 0x1E0C, 0x1E0E, 0x1E10, 0x1E12, 0x1E14, 0x1E16, 0x1E18, 0x1E1A, 0x1E1C, 0x1E1E, 0x1E20, 0x1E22, 0x1E24, 0x1E26, 0x1E28, 0x1E2A, 0x1E2C, 0x1E2E, 0x1E30, 0x1E32, 0x1E34, 0x1E36, 0x1E38, 0x1E3A, 0x1E3C, 0x1E3E, 0x1E40, 0x1E42, 0x1E44, 0x1E46, 0x1E48, 0x1E4A, 0x1E4C, 0x1E4E, 0x1E50, 0x1E52, 0x1E54, 0x1E56, 0x1E58, 0x1E5A, 0x1E5C, 0x1E5E, 0x1E60, 0x1E62, 0x1E64, 0x1E66, 0x1E68, 0x1E6A, 0x1E6C, 0x1E6E, 0x1E70, 0x1E72, 0x1E74, 0x1E76, 0x1E78, 0x1E7A, 0x1E7C, 0x1E7E, 0x1E80, 0x1E82, 0x1E84, 0x1E86, 0x1E88, 0x1E8A, 0x1E8C, 0x1E8E, 0x1E90, 0x1E92, 0x1E94, 0x1E9E, 0x1EA0, 0x1EA2, 0x1EA4, 0x1EA6, 0x1EA8, 0x1EAA, 0x1EAC, 0x1EAE, 0x1EB0, 0x1EB2, 0x1EB4, 0x1EB6, 0x1EB8, 0x1EBA, 0x1EBC, 0x1EBE, 0x1EC0, 0x1EC2, 0x1EC4, 0x1EC6, 0x1EC8, 0x1ECA, 0x1ECC, 0x1ECE, 0x1ED0, 0x1ED2, 0x1ED4, 0x1ED6, 0x1ED8, 0x1EDA, 0x1EDC, 0x1EDE, 0x1EE0, 0x1EE2, 0x1EE4, 0x1EE6, 0x1EE8, 0x1EEA, 0x1EEC, 0x1EEE, 0x1EF0, 0x1EF2, 0x1EF4, 0x1EF6, 0x1EF8, 0x1EFA, 0x1EFC, 0x1EFE, 0x1F59, 0x1F5B, 0x1F5D, 0x1F5F, 0x2102, 0x2107, 0x2115, 0x2124, 0x2126, 0x2128, 0x2145, 0x2183, 0x2C60, 0x2C67, 0x2C69, 0x2C6B, 0x2C72, 0x2C75, 0x2C82, 0x2C84, 0x2C86, 0x2C88, 0x2C8A, 0x2C8C, 0x2C8E, 0x2C90, 0x2C92, 0x2C94, 0x2C96, 0x2C98, 0x2C9A, 0x2C9C, 0x2C9E, 0x2CA0, 0x2CA2, 0x2CA4, 0x2CA6, 0x2CA8, 0x2CAA, 0x2CAC, 0x2CAE, 0x2CB0, 0x2CB2, 0x2CB4, 0x2CB6, 0x2CB8, 0x2CBA, 0x2CBC, 0x2CBE, 0x2CC0, 0x2CC2, 0x2CC4, 0x2CC6, 0x2CC8, 0x2CCA, 0x2CCC, 0x2CCE, 0x2CD0, 0x2CD2, 0x2CD4, 0x2CD6, 0x2CD8, 0x2CDA, 0x2CDC, 0x2CDE, 0x2CE0, 0x2CE2, 0x2CEB, 0x2CED, 0x2CF2, 0xA640, 0xA642, 0xA644, 0xA646, 0xA648, 0xA64A, 0xA64C, 0xA64E, 0xA650, 0xA652, 0xA654, 0xA656, 0xA658, 0xA65A, 0xA65C, 0xA65E, 0xA660, 0xA662, 0xA664, 0xA666, 0xA668, 0xA66A, 0xA66C, 0xA680, 0xA682, 0xA684, 0xA686, 0xA688, 0xA68A, 0xA68C, 0xA68E, 0xA690, 0xA692, 0xA694, 0xA696, 0xA698, 0xA69A, 0xA722, 0xA724, 0xA726, 0xA728, 0xA72A, 0xA72C, 0xA72E, 0xA732, 0xA734, 0xA736, 0xA738, 0xA73A, 0xA73C, 0xA73E, 0xA740, 0xA742, 0xA744, 0xA746, 0xA748, 0xA74A, 0xA74C, 0xA74E, 0xA750, 0xA752, 0xA754, 0xA756, 0xA758, 0xA75A, 0xA75C, 0xA75E, 0xA760, 0xA762, 0xA764, 0xA766, 0xA768, 0xA76A, 0xA76C, 0xA76E, 0xA779, 0xA77B, 0xA780, 0xA782, 0xA784, 0xA786, 0xA78B, 0xA78D, 0xA790, 0xA792, 0xA796, 0xA798, 0xA79A, 0xA79C, 0xA79E, 0xA7A0, 0xA7A2, 0xA7A4, 0xA7A6, 0xA7A8, 0xA7B6, 0xA7B8, 0xA7BA, 0xA7BC, 0xA7BE, 0xA7C0, 0xA7C2, 0xA7C9, 0xA7D0, 0xA7D6, 0xA7D8, 0xA7F5, 0x1D49C, 0x1D4A2, 0x1D546, 0x1D7CA);\nset.addRange(0x41, 0x5A).addRange(0xC0, 0xD6).addRange(0xD8, 0xDE).addRange(0x178, 0x179).addRange(0x181, 0x182).addRange(0x186, 0x187).addRange(0x189, 0x18B).addRange(0x18E, 0x191).addRange(0x193, 0x194).addRange(0x196, 0x198).addRange(0x19C, 0x19D).addRange(0x19F, 0x1A0).addRange(0x1A6, 0x1A7).addRange(0x1AE, 0x1AF).addRange(0x1B1, 0x1B3).addRange(0x1B7, 0x1B8).addRange(0x1F6, 0x1F8).addRange(0x23A, 0x23B).addRange(0x23D, 0x23E).addRange(0x243, 0x246).addRange(0x388, 0x38A).addRange(0x38E, 0x38F).addRange(0x391, 0x3A1).addRange(0x3A3, 0x3AB).addRange(0x3D2, 0x3D4).addRange(0x3F9, 0x3FA).addRange(0x3FD, 0x42F).addRange(0x4C0, 0x4C1).addRange(0x531, 0x556).addRange(0x10A0, 0x10C5).addRange(0x13A0, 0x13F5).addRange(0x1C90, 0x1CBA).addRange(0x1CBD, 0x1CBF).addRange(0x1F08, 0x1F0F).addRange(0x1F18, 0x1F1D).addRange(0x1F28, 0x1F2F).addRange(0x1F38, 0x1F3F).addRange(0x1F48, 0x1F4D).addRange(0x1F68, 0x1F6F).addRange(0x1FB8, 0x1FBB).addRange(0x1FC8, 0x1FCB).addRange(0x1FD8, 0x1FDB).addRange(0x1FE8, 0x1FEC).addRange(0x1FF8, 0x1FFB).addRange(0x210B, 0x210D).addRange(0x2110, 0x2112).addRange(0x2119, 0x211D).addRange(0x212A, 0x212D).addRange(0x2130, 0x2133).addRange(0x213E, 0x213F).addRange(0x2160, 0x216F);\nset.addRange(0x24B6, 0x24CF).addRange(0x2C00, 0x2C2F).addRange(0x2C62, 0x2C64).addRange(0x2C6D, 0x2C70).addRange(0x2C7E, 0x2C80).addRange(0xA77D, 0xA77E).addRange(0xA7AA, 0xA7AE).addRange(0xA7B0, 0xA7B4).addRange(0xA7C4, 0xA7C7).addRange(0xFF21, 0xFF3A).addRange(0x10400, 0x10427).addRange(0x104B0, 0x104D3).addRange(0x10570, 0x1057A).addRange(0x1057C, 0x1058A).addRange(0x1058C, 0x10592).addRange(0x10594, 0x10595).addRange(0x10C80, 0x10CB2).addRange(0x118A0, 0x118BF).addRange(0x16E40, 0x16E5F).addRange(0x1D400, 0x1D419).addRange(0x1D434, 0x1D44D).addRange(0x1D468, 0x1D481).addRange(0x1D49E, 0x1D49F).addRange(0x1D4A5, 0x1D4A6).addRange(0x1D4A9, 0x1D4AC).addRange(0x1D4AE, 0x1D4B5).addRange(0x1D4D0, 0x1D4E9).addRange(0x1D504, 0x1D505).addRange(0x1D507, 0x1D50A).addRange(0x1D50D, 0x1D514).addRange(0x1D516, 0x1D51C).addRange(0x1D538, 0x1D539).addRange(0x1D53B, 0x1D53E).addRange(0x1D540, 0x1D544).addRange(0x1D54A, 0x1D550).addRange(0x1D56C, 0x1D585).addRange(0x1D5A0, 0x1D5B9).addRange(0x1D5D4, 0x1D5ED).addRange(0x1D608, 0x1D621).addRange(0x1D63C, 0x1D655).addRange(0x1D670, 0x1D689).addRange(0x1D6A8, 0x1D6C0).addRange(0x1D6E2, 0x1D6FA).addRange(0x1D71C, 0x1D734).addRange(0x1D756, 0x1D76E).addRange(0x1D790, 0x1D7A8).addRange(0x1E900, 0x1E921).addRange(0x1F130, 0x1F149).addRange(0x1F150, 0x1F169).addRange(0x1F170, 0x1F189);\nmodule.exports = set;","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","const set = require('regenerate')();\nset.addRange(0xA880, 0xA8C5).addRange(0xA8CE, 0xA8D9);\nmodule.exports = set;","const set = require('regenerate')(0xAD0);\nset.addRange(0xA81, 0xA83).addRange(0xA85, 0xA8D).addRange(0xA8F, 0xA91).addRange(0xA93, 0xAA8).addRange(0xAAA, 0xAB0).addRange(0xAB2, 0xAB3).addRange(0xAB5, 0xAB9).addRange(0xABC, 0xAC5).addRange(0xAC7, 0xAC9).addRange(0xACB, 0xACD).addRange(0xAE0, 0xAE3).addRange(0xAE6, 0xAF1).addRange(0xAF9, 0xAFF);\nmodule.exports = set;","const set = require('regenerate')(0x149, 0x673, 0xF77, 0xF79, 0xE0001);\nset.addRange(0x17A3, 0x17A4).addRange(0x206A, 0x206F).addRange(0x2329, 0x232A);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x1735, 0x1736).addRange(0x1740, 0x1753);\nmodule.exports = set;","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","const set = require('regenerate')();\nset.addRange(0x10980, 0x1099F);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x7C0, 0x7FA).addRange(0x7FD, 0x7FF);\nmodule.exports = set;","const set = require('regenerate')(0x1CF2);\nset.addRange(0x951, 0x952).addRange(0x964, 0x965).addRange(0xA830, 0xA839).addRange(0x11480, 0x114C7).addRange(0x114D0, 0x114D9);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x1740, 0x1753);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x10280, 0x1029C);\nmodule.exports = set;","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","const set = require('regenerate')(0x1CDA);\nset.addRange(0x951, 0x952).addRange(0x964, 0x965).addRange(0xD00, 0xD0C).addRange(0xD0E, 0xD10).addRange(0xD12, 0xD44).addRange(0xD46, 0xD48).addRange(0xD4A, 0xD4F).addRange(0xD54, 0xD63).addRange(0xD66, 0xD7F).addRange(0xA830, 0xA832);\nmodule.exports = set;","/**\n * The default argument placeholder value for methods.\n *\n * @type {Object}\n */\nmodule.exports = {};\n","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","const set = require('regenerate')(0xB5, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10A, 0x10C, 0x10E, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11A, 0x11C, 0x11E, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12A, 0x12C, 0x12E, 0x130, 0x132, 0x134, 0x136, 0x139, 0x13B, 0x13D, 0x13F, 0x141, 0x143, 0x145, 0x147, 0x14C, 0x14E, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15A, 0x15C, 0x15E, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16A, 0x16C, 0x16E, 0x170, 0x172, 0x174, 0x176, 0x17B, 0x17D, 0x17F, 0x184, 0x1A2, 0x1A4, 0x1A9, 0x1AC, 0x1B5, 0x1BC, 0x1CD, 0x1CF, 0x1D1, 0x1D3, 0x1D5, 0x1D7, 0x1D9, 0x1DB, 0x1DE, 0x1E0, 0x1E2, 0x1E4, 0x1E6, 0x1E8, 0x1EA, 0x1EC, 0x1EE, 0x1F4, 0x1FA, 0x1FC, 0x1FE, 0x200, 0x202, 0x204, 0x206, 0x208, 0x20A, 0x20C, 0x20E, 0x210, 0x212, 0x214, 0x216, 0x218, 0x21A, 0x21C, 0x21E, 0x220, 0x222, 0x224, 0x226, 0x228, 0x22A, 0x22C, 0x22E, 0x230, 0x232, 0x241, 0x248, 0x24A, 0x24C, 0x24E, 0x345, 0x370, 0x372, 0x376, 0x37F, 0x386, 0x38C, 0x3C2, 0x3D8, 0x3DA, 0x3DC, 0x3DE, 0x3E0, 0x3E2, 0x3E4, 0x3E6, 0x3E8, 0x3EA, 0x3EC, 0x3EE, 0x3F7, 0x460, 0x462, 0x464, 0x466, 0x468, 0x46A, 0x46C, 0x46E, 0x470, 0x472, 0x474, 0x476, 0x478, 0x47A, 0x47C, 0x47E, 0x480, 0x48A, 0x48C, 0x48E, 0x490, 0x492, 0x494, 0x496, 0x498, 0x49A, 0x49C, 0x49E, 0x4A0, 0x4A2, 0x4A4, 0x4A6, 0x4A8, 0x4AA, 0x4AC, 0x4AE, 0x4B0, 0x4B2, 0x4B4, 0x4B6, 0x4B8, 0x4BA, 0x4BC, 0x4BE, 0x4C3, 0x4C5, 0x4C7, 0x4C9, 0x4CB, 0x4CD, 0x4D0, 0x4D2, 0x4D4, 0x4D6, 0x4D8, 0x4DA, 0x4DC, 0x4DE, 0x4E0, 0x4E2, 0x4E4, 0x4E6, 0x4E8, 0x4EA, 0x4EC, 0x4EE, 0x4F0, 0x4F2, 0x4F4, 0x4F6, 0x4F8, 0x4FA, 0x4FC, 0x4FE, 0x500, 0x502, 0x504, 0x506, 0x508, 0x50A, 0x50C, 0x50E, 0x510, 0x512, 0x514, 0x516, 0x518, 0x51A, 0x51C, 0x51E, 0x520, 0x522, 0x524, 0x526, 0x528, 0x52A, 0x52C, 0x52E, 0x587, 0x10C7, 0x10CD, 0x1E00, 0x1E02, 0x1E04, 0x1E06, 0x1E08, 0x1E0A, 0x1E0C, 0x1E0E, 0x1E10, 0x1E12, 0x1E14, 0x1E16, 0x1E18, 0x1E1A, 0x1E1C, 0x1E1E, 0x1E20, 0x1E22, 0x1E24, 0x1E26, 0x1E28, 0x1E2A, 0x1E2C, 0x1E2E, 0x1E30, 0x1E32, 0x1E34, 0x1E36, 0x1E38, 0x1E3A, 0x1E3C, 0x1E3E, 0x1E40, 0x1E42, 0x1E44, 0x1E46, 0x1E48, 0x1E4A, 0x1E4C, 0x1E4E, 0x1E50, 0x1E52, 0x1E54, 0x1E56, 0x1E58, 0x1E5A, 0x1E5C, 0x1E5E, 0x1E60, 0x1E62, 0x1E64, 0x1E66, 0x1E68, 0x1E6A, 0x1E6C, 0x1E6E, 0x1E70, 0x1E72, 0x1E74, 0x1E76, 0x1E78, 0x1E7A, 0x1E7C, 0x1E7E, 0x1E80, 0x1E82, 0x1E84, 0x1E86, 0x1E88, 0x1E8A, 0x1E8C, 0x1E8E, 0x1E90, 0x1E92, 0x1E94, 0x1E9E, 0x1EA0, 0x1EA2, 0x1EA4, 0x1EA6, 0x1EA8, 0x1EAA, 0x1EAC, 0x1EAE, 0x1EB0, 0x1EB2, 0x1EB4, 0x1EB6, 0x1EB8, 0x1EBA, 0x1EBC, 0x1EBE, 0x1EC0, 0x1EC2, 0x1EC4, 0x1EC6, 0x1EC8, 0x1ECA, 0x1ECC, 0x1ECE, 0x1ED0, 0x1ED2, 0x1ED4, 0x1ED6, 0x1ED8, 0x1EDA, 0x1EDC, 0x1EDE, 0x1EE0, 0x1EE2, 0x1EE4, 0x1EE6, 0x1EE8, 0x1EEA, 0x1EEC, 0x1EEE, 0x1EF0, 0x1EF2, 0x1EF4, 0x1EF6, 0x1EF8, 0x1EFA, 0x1EFC, 0x1EFE, 0x1F59, 0x1F5B, 0x1F5D, 0x1F5F, 0x2126, 0x2132, 0x2183, 0x2C60, 0x2C67, 0x2C69, 0x2C6B, 0x2C72, 0x2C75, 0x2C82, 0x2C84, 0x2C86, 0x2C88, 0x2C8A, 0x2C8C, 0x2C8E, 0x2C90, 0x2C92, 0x2C94, 0x2C96, 0x2C98, 0x2C9A, 0x2C9C, 0x2C9E, 0x2CA0, 0x2CA2, 0x2CA4, 0x2CA6, 0x2CA8, 0x2CAA, 0x2CAC, 0x2CAE, 0x2CB0, 0x2CB2, 0x2CB4, 0x2CB6, 0x2CB8, 0x2CBA, 0x2CBC, 0x2CBE, 0x2CC0, 0x2CC2, 0x2CC4, 0x2CC6, 0x2CC8, 0x2CCA, 0x2CCC, 0x2CCE, 0x2CD0, 0x2CD2, 0x2CD4, 0x2CD6, 0x2CD8, 0x2CDA, 0x2CDC, 0x2CDE, 0x2CE0, 0x2CE2, 0x2CEB, 0x2CED, 0x2CF2, 0xA640, 0xA642, 0xA644, 0xA646, 0xA648, 0xA64A, 0xA64C, 0xA64E, 0xA650, 0xA652, 0xA654, 0xA656, 0xA658, 0xA65A, 0xA65C, 0xA65E, 0xA660, 0xA662, 0xA664, 0xA666, 0xA668, 0xA66A, 0xA66C, 0xA680, 0xA682, 0xA684, 0xA686, 0xA688, 0xA68A, 0xA68C, 0xA68E, 0xA690, 0xA692, 0xA694, 0xA696, 0xA698, 0xA69A, 0xA722, 0xA724, 0xA726, 0xA728, 0xA72A, 0xA72C, 0xA72E, 0xA732, 0xA734, 0xA736, 0xA738, 0xA73A, 0xA73C, 0xA73E, 0xA740, 0xA742, 0xA744, 0xA746, 0xA748, 0xA74A, 0xA74C, 0xA74E, 0xA750, 0xA752, 0xA754, 0xA756, 0xA758, 0xA75A, 0xA75C, 0xA75E, 0xA760, 0xA762, 0xA764, 0xA766, 0xA768, 0xA76A, 0xA76C, 0xA76E, 0xA779, 0xA77B, 0xA780, 0xA782, 0xA784, 0xA786, 0xA78B, 0xA78D, 0xA790, 0xA792, 0xA796, 0xA798, 0xA79A, 0xA79C, 0xA79E, 0xA7A0, 0xA7A2, 0xA7A4, 0xA7A6, 0xA7A8, 0xA7B6, 0xA7B8, 0xA7BA, 0xA7BC, 0xA7BE, 0xA7C0, 0xA7C2, 0xA7C9, 0xA7D0, 0xA7D6, 0xA7D8, 0xA7F5);\nset.addRange(0x41, 0x5A).addRange(0xC0, 0xD6).addRange(0xD8, 0xDF).addRange(0x149, 0x14A).addRange(0x178, 0x179).addRange(0x181, 0x182).addRange(0x186, 0x187).addRange(0x189, 0x18B).addRange(0x18E, 0x191).addRange(0x193, 0x194).addRange(0x196, 0x198).addRange(0x19C, 0x19D).addRange(0x19F, 0x1A0).addRange(0x1A6, 0x1A7).addRange(0x1AE, 0x1AF).addRange(0x1B1, 0x1B3).addRange(0x1B7, 0x1B8).addRange(0x1C4, 0x1C5).addRange(0x1C7, 0x1C8).addRange(0x1CA, 0x1CB).addRange(0x1F1, 0x1F2).addRange(0x1F6, 0x1F8).addRange(0x23A, 0x23B).addRange(0x23D, 0x23E).addRange(0x243, 0x246).addRange(0x388, 0x38A).addRange(0x38E, 0x38F).addRange(0x391, 0x3A1).addRange(0x3A3, 0x3AB).addRange(0x3CF, 0x3D1).addRange(0x3D5, 0x3D6).addRange(0x3F0, 0x3F1).addRange(0x3F4, 0x3F5).addRange(0x3F9, 0x3FA).addRange(0x3FD, 0x42F).addRange(0x4C0, 0x4C1).addRange(0x531, 0x556).addRange(0x10A0, 0x10C5).addRange(0x13F8, 0x13FD).addRange(0x1C80, 0x1C88).addRange(0x1C90, 0x1CBA).addRange(0x1CBD, 0x1CBF).addRange(0x1E9A, 0x1E9B).addRange(0x1F08, 0x1F0F).addRange(0x1F18, 0x1F1D).addRange(0x1F28, 0x1F2F).addRange(0x1F38, 0x1F3F).addRange(0x1F48, 0x1F4D).addRange(0x1F68, 0x1F6F).addRange(0x1F80, 0x1FAF).addRange(0x1FB2, 0x1FB4);\nset.addRange(0x1FB7, 0x1FBC).addRange(0x1FC2, 0x1FC4).addRange(0x1FC7, 0x1FCC).addRange(0x1FD8, 0x1FDB).addRange(0x1FE8, 0x1FEC).addRange(0x1FF2, 0x1FF4).addRange(0x1FF7, 0x1FFC).addRange(0x212A, 0x212B).addRange(0x2160, 0x216F).addRange(0x24B6, 0x24CF).addRange(0x2C00, 0x2C2F).addRange(0x2C62, 0x2C64).addRange(0x2C6D, 0x2C70).addRange(0x2C7E, 0x2C80).addRange(0xA77D, 0xA77E).addRange(0xA7AA, 0xA7AE).addRange(0xA7B0, 0xA7B4).addRange(0xA7C4, 0xA7C7).addRange(0xAB70, 0xABBF).addRange(0xFB00, 0xFB06).addRange(0xFB13, 0xFB17).addRange(0xFF21, 0xFF3A).addRange(0x10400, 0x10427).addRange(0x104B0, 0x104D3).addRange(0x10570, 0x1057A).addRange(0x1057C, 0x1058A).addRange(0x1058C, 0x10592).addRange(0x10594, 0x10595).addRange(0x10C80, 0x10CB2).addRange(0x118A0, 0x118BF).addRange(0x16E40, 0x16E5F).addRange(0x1E900, 0x1E921);\nmodule.exports = set;","module.exports = false;\n","const set = require('regenerate')();\nset.addRange(0x1E800, 0x1E8C4).addRange(0x1E8C7, 0x1E8D6);\nmodule.exports = set;","var LazyWrapper = require('./_LazyWrapper'),\n LodashWrapper = require('./_LodashWrapper'),\n copyArray = require('./_copyArray');\n\n/**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\nfunction wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n}\n\nmodule.exports = wrapperClone;\n","const set = require('regenerate')();\nset.addRange(0x10500, 0x10527);\nmodule.exports = set;","module.exports = require('./flow');\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","const set = require('regenerate')();\nset.addRange(0x10300, 0x10323).addRange(0x1032D, 0x1032F);\nmodule.exports = set;","const set = require('regenerate')(0xC5D);\nset.addRange(0xC00, 0xC0C).addRange(0xC0E, 0xC10).addRange(0xC12, 0xC28).addRange(0xC2A, 0xC39).addRange(0xC3C, 0xC44).addRange(0xC46, 0xC48).addRange(0xC4A, 0xC4D).addRange(0xC55, 0xC56).addRange(0xC58, 0xC5A).addRange(0xC60, 0xC63).addRange(0xC66, 0xC6F).addRange(0xC77, 0xC7F);\nmodule.exports = set;","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","const set = require('regenerate')();\nset.addRange(0xA980, 0xA9CD).addRange(0xA9CF, 0xA9D9).addRange(0xA9DE, 0xA9DF);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x10C00, 0x10C48);\nmodule.exports = set;","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var flatten = require('./flatten'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","var global = require('../internals/global');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || defineGlobalProperty(SHARED, {});\n\nmodule.exports = store;\n","const set = require('regenerate')();\nset.addRange(0x1B80, 0x1BBF).addRange(0x1CC0, 0x1CC7);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x1E100, 0x1E12C).addRange(0x1E130, 0x1E13D).addRange(0x1E140, 0x1E149).addRange(0x1E14E, 0x1E14F);\nmodule.exports = set;","const plugins = require(`./api-runner-browser-plugins`)\nconst {\n getResourcesForPathname,\n getResourcesForPathnameSync,\n getResourceURLsForPathname,\n loadPage,\n loadPageSync,\n} = require(`./loader`).publicLoader\n\nexports.apiRunner = (api, args = {}, defaultReturn, argTransform) => {\n // Hooks for gatsby-cypress's API handler\n if (process.env.CYPRESS_SUPPORT) {\n if (window.___apiHandler) {\n window.___apiHandler(api)\n } else if (window.___resolvedAPIs) {\n window.___resolvedAPIs.push(api)\n } else {\n window.___resolvedAPIs = [api]\n }\n }\n\n let results = plugins.map(plugin => {\n if (!plugin.plugin[api]) {\n return undefined\n }\n\n // Deprecated April 2019. Use `loadPageSync` instead\n args.getResourcesForPathnameSync = getResourcesForPathnameSync\n // Deprecated April 2019. Use `loadPage` instead\n args.getResourcesForPathname = getResourcesForPathname\n args.getResourceURLsForPathname = getResourceURLsForPathname\n args.loadPage = loadPage\n args.loadPageSync = loadPageSync\n\n const result = plugin.plugin[api](args, plugin.options)\n if (result && argTransform) {\n args = argTransform({ args, result, plugin })\n }\n return result\n })\n\n // Filter out undefined results.\n results = results.filter(result => typeof result !== `undefined`)\n\n if (results.length > 0) {\n return results\n } else if (defaultReturn) {\n return [defaultReturn]\n } else {\n return []\n }\n}\n\nexports.apiRunnerAsync = (api, args, defaultReturn) =>\n plugins.reduce(\n (previous, next) =>\n next.plugin[api]\n ? previous.then(() => next.plugin[api](args, next.options))\n : previous,\n Promise.resolve()\n )\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\nfunction composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n}\n\nmodule.exports = composeArgs;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","const set = require('regenerate')(0x21, 0x2E, 0x3F, 0x589, 0x6D4, 0x7F9, 0x837, 0x839, 0x1362, 0x166E, 0x1803, 0x1809, 0x2E2E, 0x2E3C, 0x3002, 0xA4FF, 0xA6F3, 0xA6F7, 0xA92F, 0xABEB, 0xFE52, 0xFF01, 0xFF0E, 0xFF1F, 0xFF61, 0x111CD, 0x112A9, 0x11944, 0x11946, 0x16AF5, 0x16B44, 0x16E98, 0x1BC9F, 0x1DA88);\nset.addRange(0x61D, 0x61F).addRange(0x700, 0x702).addRange(0x83D, 0x83E).addRange(0x964, 0x965).addRange(0x104A, 0x104B).addRange(0x1367, 0x1368).addRange(0x1735, 0x1736).addRange(0x1944, 0x1945).addRange(0x1AA8, 0x1AAB).addRange(0x1B5A, 0x1B5B).addRange(0x1B5E, 0x1B5F).addRange(0x1B7D, 0x1B7E).addRange(0x1C3B, 0x1C3C).addRange(0x1C7E, 0x1C7F).addRange(0x203C, 0x203D).addRange(0x2047, 0x2049).addRange(0x2E53, 0x2E54).addRange(0xA60E, 0xA60F).addRange(0xA876, 0xA877).addRange(0xA8CE, 0xA8CF).addRange(0xA9C8, 0xA9C9).addRange(0xAA5D, 0xAA5F).addRange(0xAAF0, 0xAAF1).addRange(0xFE56, 0xFE57).addRange(0x10A56, 0x10A57).addRange(0x10F55, 0x10F59).addRange(0x10F86, 0x10F89).addRange(0x11047, 0x11048).addRange(0x110BE, 0x110C1).addRange(0x11141, 0x11143).addRange(0x111C5, 0x111C6).addRange(0x111DE, 0x111DF).addRange(0x11238, 0x11239).addRange(0x1123B, 0x1123C).addRange(0x1144B, 0x1144C).addRange(0x115C2, 0x115C3).addRange(0x115C9, 0x115D7).addRange(0x11641, 0x11642).addRange(0x1173C, 0x1173E).addRange(0x11A42, 0x11A43).addRange(0x11A9B, 0x11A9C).addRange(0x11C41, 0x11C42).addRange(0x11EF7, 0x11EF8).addRange(0x16A6E, 0x16A6F).addRange(0x16B37, 0x16B38);\nmodule.exports = set;","const set = require('regenerate')(0x640);\nset.addRange(0x10B80, 0x10B91).addRange(0x10B99, 0x10B9C).addRange(0x10BA9, 0x10BAF);\nmodule.exports = set;","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","const set = require('regenerate')(0x5BF, 0x5C7, 0x670, 0x711, 0x7FD, 0x9BC, 0x9D7, 0x9FE, 0xA3C, 0xA51, 0xA75, 0xABC, 0xB3C, 0xB82, 0xBD7, 0xC3C, 0xCBC, 0xD57, 0xDCA, 0xDD6, 0xE31, 0xEB1, 0xF35, 0xF37, 0xF39, 0xFC6, 0x108F, 0x17DD, 0x180F, 0x18A9, 0x1A7F, 0x1CED, 0x1CF4, 0x2D7F, 0xA802, 0xA806, 0xA80B, 0xA82C, 0xA8FF, 0xA9E5, 0xAA43, 0xAAB0, 0xAAC1, 0xFB1E, 0x101FD, 0x102E0, 0x10A3F, 0x11070, 0x110C2, 0x11173, 0x1123E, 0x11357, 0x1145E, 0x11940, 0x119E4, 0x11A47, 0x11D3A, 0x11D47, 0x16F4F, 0x16FE4, 0x1DA75, 0x1DA84, 0x1E2AE);\nset.addRange(0x300, 0x36F).addRange(0x483, 0x489).addRange(0x591, 0x5BD).addRange(0x5C1, 0x5C2).addRange(0x5C4, 0x5C5).addRange(0x610, 0x61A).addRange(0x64B, 0x65F).addRange(0x6D6, 0x6DC).addRange(0x6DF, 0x6E4).addRange(0x6E7, 0x6E8).addRange(0x6EA, 0x6ED).addRange(0x730, 0x74A).addRange(0x7A6, 0x7B0).addRange(0x7EB, 0x7F3).addRange(0x816, 0x819).addRange(0x81B, 0x823).addRange(0x825, 0x827).addRange(0x829, 0x82D).addRange(0x859, 0x85B).addRange(0x898, 0x89F).addRange(0x8CA, 0x8E1).addRange(0x8E3, 0x903).addRange(0x93A, 0x93C).addRange(0x93E, 0x94F).addRange(0x951, 0x957).addRange(0x962, 0x963).addRange(0x981, 0x983).addRange(0x9BE, 0x9C4).addRange(0x9C7, 0x9C8).addRange(0x9CB, 0x9CD).addRange(0x9E2, 0x9E3).addRange(0xA01, 0xA03).addRange(0xA3E, 0xA42).addRange(0xA47, 0xA48).addRange(0xA4B, 0xA4D).addRange(0xA70, 0xA71).addRange(0xA81, 0xA83).addRange(0xABE, 0xAC5).addRange(0xAC7, 0xAC9).addRange(0xACB, 0xACD).addRange(0xAE2, 0xAE3).addRange(0xAFA, 0xAFF).addRange(0xB01, 0xB03).addRange(0xB3E, 0xB44).addRange(0xB47, 0xB48).addRange(0xB4B, 0xB4D).addRange(0xB55, 0xB57).addRange(0xB62, 0xB63).addRange(0xBBE, 0xBC2).addRange(0xBC6, 0xBC8).addRange(0xBCA, 0xBCD);\nset.addRange(0xC00, 0xC04).addRange(0xC3E, 0xC44).addRange(0xC46, 0xC48).addRange(0xC4A, 0xC4D).addRange(0xC55, 0xC56).addRange(0xC62, 0xC63).addRange(0xC81, 0xC83).addRange(0xCBE, 0xCC4).addRange(0xCC6, 0xCC8).addRange(0xCCA, 0xCCD).addRange(0xCD5, 0xCD6).addRange(0xCE2, 0xCE3).addRange(0xD00, 0xD03).addRange(0xD3B, 0xD3C).addRange(0xD3E, 0xD44).addRange(0xD46, 0xD48).addRange(0xD4A, 0xD4D).addRange(0xD62, 0xD63).addRange(0xD81, 0xD83).addRange(0xDCF, 0xDD4).addRange(0xDD8, 0xDDF).addRange(0xDF2, 0xDF3).addRange(0xE34, 0xE3A).addRange(0xE47, 0xE4E).addRange(0xEB4, 0xEBC).addRange(0xEC8, 0xECD).addRange(0xF18, 0xF19).addRange(0xF3E, 0xF3F).addRange(0xF71, 0xF84).addRange(0xF86, 0xF87).addRange(0xF8D, 0xF97).addRange(0xF99, 0xFBC).addRange(0x102B, 0x103E).addRange(0x1056, 0x1059).addRange(0x105E, 0x1060).addRange(0x1062, 0x1064).addRange(0x1067, 0x106D).addRange(0x1071, 0x1074).addRange(0x1082, 0x108D).addRange(0x109A, 0x109D).addRange(0x135D, 0x135F).addRange(0x1712, 0x1715).addRange(0x1732, 0x1734).addRange(0x1752, 0x1753).addRange(0x1772, 0x1773).addRange(0x17B4, 0x17D3).addRange(0x180B, 0x180D).addRange(0x1885, 0x1886).addRange(0x1920, 0x192B).addRange(0x1930, 0x193B).addRange(0x1A17, 0x1A1B);\nset.addRange(0x1A55, 0x1A5E).addRange(0x1A60, 0x1A7C).addRange(0x1AB0, 0x1ACE).addRange(0x1B00, 0x1B04).addRange(0x1B34, 0x1B44).addRange(0x1B6B, 0x1B73).addRange(0x1B80, 0x1B82).addRange(0x1BA1, 0x1BAD).addRange(0x1BE6, 0x1BF3).addRange(0x1C24, 0x1C37).addRange(0x1CD0, 0x1CD2).addRange(0x1CD4, 0x1CE8).addRange(0x1CF7, 0x1CF9).addRange(0x1DC0, 0x1DFF).addRange(0x20D0, 0x20F0).addRange(0x2CEF, 0x2CF1).addRange(0x2DE0, 0x2DFF).addRange(0x302A, 0x302F).addRange(0x3099, 0x309A).addRange(0xA66F, 0xA672).addRange(0xA674, 0xA67D).addRange(0xA69E, 0xA69F).addRange(0xA6F0, 0xA6F1).addRange(0xA823, 0xA827).addRange(0xA880, 0xA881).addRange(0xA8B4, 0xA8C5).addRange(0xA8E0, 0xA8F1).addRange(0xA926, 0xA92D).addRange(0xA947, 0xA953).addRange(0xA980, 0xA983).addRange(0xA9B3, 0xA9C0).addRange(0xAA29, 0xAA36).addRange(0xAA4C, 0xAA4D).addRange(0xAA7B, 0xAA7D).addRange(0xAAB2, 0xAAB4).addRange(0xAAB7, 0xAAB8).addRange(0xAABE, 0xAABF).addRange(0xAAEB, 0xAAEF).addRange(0xAAF5, 0xAAF6).addRange(0xABE3, 0xABEA).addRange(0xABEC, 0xABED).addRange(0xFE00, 0xFE0F).addRange(0xFE20, 0xFE2F).addRange(0x10376, 0x1037A).addRange(0x10A01, 0x10A03).addRange(0x10A05, 0x10A06).addRange(0x10A0C, 0x10A0F).addRange(0x10A38, 0x10A3A).addRange(0x10AE5, 0x10AE6).addRange(0x10D24, 0x10D27).addRange(0x10EAB, 0x10EAC);\nset.addRange(0x10F46, 0x10F50).addRange(0x10F82, 0x10F85).addRange(0x11000, 0x11002).addRange(0x11038, 0x11046).addRange(0x11073, 0x11074).addRange(0x1107F, 0x11082).addRange(0x110B0, 0x110BA).addRange(0x11100, 0x11102).addRange(0x11127, 0x11134).addRange(0x11145, 0x11146).addRange(0x11180, 0x11182).addRange(0x111B3, 0x111C0).addRange(0x111C9, 0x111CC).addRange(0x111CE, 0x111CF).addRange(0x1122C, 0x11237).addRange(0x112DF, 0x112EA).addRange(0x11300, 0x11303).addRange(0x1133B, 0x1133C).addRange(0x1133E, 0x11344).addRange(0x11347, 0x11348).addRange(0x1134B, 0x1134D).addRange(0x11362, 0x11363).addRange(0x11366, 0x1136C).addRange(0x11370, 0x11374).addRange(0x11435, 0x11446).addRange(0x114B0, 0x114C3).addRange(0x115AF, 0x115B5).addRange(0x115B8, 0x115C0).addRange(0x115DC, 0x115DD).addRange(0x11630, 0x11640).addRange(0x116AB, 0x116B7).addRange(0x1171D, 0x1172B).addRange(0x1182C, 0x1183A).addRange(0x11930, 0x11935).addRange(0x11937, 0x11938).addRange(0x1193B, 0x1193E).addRange(0x11942, 0x11943).addRange(0x119D1, 0x119D7).addRange(0x119DA, 0x119E0).addRange(0x11A01, 0x11A0A).addRange(0x11A33, 0x11A39).addRange(0x11A3B, 0x11A3E).addRange(0x11A51, 0x11A5B).addRange(0x11A8A, 0x11A99).addRange(0x11C2F, 0x11C36).addRange(0x11C38, 0x11C3F).addRange(0x11C92, 0x11CA7).addRange(0x11CA9, 0x11CB6).addRange(0x11D31, 0x11D36).addRange(0x11D3C, 0x11D3D).addRange(0x11D3F, 0x11D45);\nset.addRange(0x11D8A, 0x11D8E).addRange(0x11D90, 0x11D91).addRange(0x11D93, 0x11D97).addRange(0x11EF3, 0x11EF6).addRange(0x16AF0, 0x16AF4).addRange(0x16B30, 0x16B36).addRange(0x16F51, 0x16F87).addRange(0x16F8F, 0x16F92).addRange(0x16FF0, 0x16FF1).addRange(0x1BC9D, 0x1BC9E).addRange(0x1CF00, 0x1CF2D).addRange(0x1CF30, 0x1CF46).addRange(0x1D165, 0x1D169).addRange(0x1D16D, 0x1D172).addRange(0x1D17B, 0x1D182).addRange(0x1D185, 0x1D18B).addRange(0x1D1AA, 0x1D1AD).addRange(0x1D242, 0x1D244).addRange(0x1DA00, 0x1DA36).addRange(0x1DA3B, 0x1DA6C).addRange(0x1DA9B, 0x1DA9F).addRange(0x1DAA1, 0x1DAAF).addRange(0x1E000, 0x1E006).addRange(0x1E008, 0x1E018).addRange(0x1E01B, 0x1E021).addRange(0x1E023, 0x1E024).addRange(0x1E026, 0x1E02A).addRange(0x1E130, 0x1E136).addRange(0x1E2EC, 0x1E2EF).addRange(0x1E8D0, 0x1E8D6).addRange(0x1E944, 0x1E94A).addRange(0xE0100, 0xE01EF);\nmodule.exports = set;","var isCallable = require('../internals/is-callable');\nvar definePropertyModule = require('../internals/object-define-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nmodule.exports = function (O, key, value, options) {\n if (!options) options = {};\n var simple = options.enumerable;\n var name = options.name !== undefined ? options.name : key;\n if (isCallable(value)) makeBuiltIn(value, name, options);\n if (options.global) {\n if (simple) O[key] = value;\n else defineGlobalProperty(key, value);\n } else {\n try {\n if (!options.unsafe) delete O[key];\n else if (O[key]) simple = true;\n } catch (error) { /* empty */ }\n if (simple) O[key] = value;\n else definePropertyModule.f(O, key, {\n value: value,\n enumerable: false,\n configurable: !options.nonConfigurable,\n writable: !options.nonWritable\n });\n } return O;\n};\n","const set = require('regenerate')();\nset.addRange(0x30, 0x39).addRange(0x660, 0x669).addRange(0x6F0, 0x6F9).addRange(0x7C0, 0x7C9).addRange(0x966, 0x96F).addRange(0x9E6, 0x9EF).addRange(0xA66, 0xA6F).addRange(0xAE6, 0xAEF).addRange(0xB66, 0xB6F).addRange(0xBE6, 0xBEF).addRange(0xC66, 0xC6F).addRange(0xCE6, 0xCEF).addRange(0xD66, 0xD6F).addRange(0xDE6, 0xDEF).addRange(0xE50, 0xE59).addRange(0xED0, 0xED9).addRange(0xF20, 0xF29).addRange(0x1040, 0x1049).addRange(0x1090, 0x1099).addRange(0x17E0, 0x17E9).addRange(0x1810, 0x1819).addRange(0x1946, 0x194F).addRange(0x19D0, 0x19D9).addRange(0x1A80, 0x1A89).addRange(0x1A90, 0x1A99).addRange(0x1B50, 0x1B59).addRange(0x1BB0, 0x1BB9).addRange(0x1C40, 0x1C49).addRange(0x1C50, 0x1C59).addRange(0xA620, 0xA629).addRange(0xA8D0, 0xA8D9).addRange(0xA900, 0xA909).addRange(0xA9D0, 0xA9D9).addRange(0xA9F0, 0xA9F9).addRange(0xAA50, 0xAA59).addRange(0xABF0, 0xABF9).addRange(0xFF10, 0xFF19).addRange(0x104A0, 0x104A9).addRange(0x10D30, 0x10D39).addRange(0x11066, 0x1106F).addRange(0x110F0, 0x110F9).addRange(0x11136, 0x1113F).addRange(0x111D0, 0x111D9).addRange(0x112F0, 0x112F9).addRange(0x11450, 0x11459).addRange(0x114D0, 0x114D9).addRange(0x11650, 0x11659).addRange(0x116C0, 0x116C9).addRange(0x11730, 0x11739).addRange(0x118E0, 0x118E9).addRange(0x11950, 0x11959);\nset.addRange(0x11C50, 0x11C59).addRange(0x11D50, 0x11D59).addRange(0x11DA0, 0x11DA9).addRange(0x16A60, 0x16A69).addRange(0x16AC0, 0x16AC9).addRange(0x16B50, 0x16B59).addRange(0x1D7CE, 0x1D7FF).addRange(0x1E140, 0x1E149).addRange(0x1E2F0, 0x1E2F9).addRange(0x1E950, 0x1E959).addRange(0x1FBF0, 0x1FBF9);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x16E40, 0x16E9A);\nmodule.exports = set;","const set = require('regenerate')();\nset.addRange(0x964, 0x96F).addRange(0xA830, 0xA839).addRange(0x11150, 0x11176);\nmodule.exports = set;","import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
Tanka supports CLI completion for bash, zsh and fish.
+
+
As tanka is its own completion handler, it needs to hook into your shell’s
+configuration file (.bashrc, etc).
+
When using other shells than bash, Tanka relies on a Bash compatibility
mode. It enables this automatically when installing, but please make sure no
other completion (e.g. OhMyZsh) interferes with this, or your completion might
-not work properly.
-It sometimes depends on the order the completions are being loaded, so try
-putting Tanka before or after the others.
\ No newline at end of file
+not work properly.
+It sometimes depends on the order the completions are being loaded, so try
+putting Tanka before or after the others.
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---cache-caches-gatsby-plugin-offline-app-shell-js-099d9276a41f4ba01a3c.js b/pr-preview/pr-1029/component---cache-caches-gatsby-plugin-offline-app-shell-js-099d9276a41f4ba01a3c.js
deleted file mode 100644
index 9175e44b5..000000000
--- a/pr-preview/pr-1029/component---cache-caches-gatsby-plugin-offline-app-shell-js-099d9276a41f4ba01a3c.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{zXQ9:function(t,e,n){"use strict";var u=n("TqRt");e.__esModule=!0,e.default=void 0;var a=u(n("VbXa")),o=u(n("q1tI")),r=function(t){function e(){return t.apply(this,arguments)||this}return(0,a.default)(e,t),e.prototype.render=function(){return o.default.createElement(o.default.Fragment,null)},e}(o.default.Component);e.default=r}}]);
-//# sourceMappingURL=component---cache-caches-gatsby-plugin-offline-app-shell-js-099d9276a41f4ba01a3c.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---cache-caches-gatsby-plugin-offline-app-shell-js-099d9276a41f4ba01a3c.js.map b/pr-preview/pr-1029/component---cache-caches-gatsby-plugin-offline-app-shell-js-099d9276a41f4ba01a3c.js.map
deleted file mode 100644
index 696c1362a..000000000
--- a/pr-preview/pr-1029/component---cache-caches-gatsby-plugin-offline-app-shell-js-099d9276a41f4ba01a3c.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./.cache/caches/gatsby-plugin-offline/app-shell.js"],"names":["_interopRequireDefault","require","exports","__esModule","default","_inheritsLoose2","_react","_default","_React$Component","AppShell","apply","this","arguments","prototype","render","createElement","Fragment","Component"],"mappings":"2FAEA,IAAIA,EAAyBC,EAAQ,QAErCC,EAAQC,YAAa,EACrBD,EAAQE,aAAU,EAElB,IAAIC,EAAkBL,EAAuBC,EAAQ,SAEjDK,EAASN,EAAuBC,EAAQ,SAkBxCM,EAhBwB,SAAUC,GAGpC,SAASC,IACP,OAAOD,EAAiBE,MAAMC,KAAMC,YAAcD,KASpD,OAZA,EAAIN,EAAgBD,SAASK,EAAUD,GAM1BC,EAASI,UAEfC,OAAS,WACd,OAAoBR,EAAOF,QAAQW,cAAcT,EAAOF,QAAQY,SAAU,OAGrEP,EAbmB,CAc1BH,EAAOF,QAAQa,WAGjBf,EAAQE,QAAUG","file":"component---cache-caches-gatsby-plugin-offline-app-shell-js-099d9276a41f4ba01a3c.js","sourcesContent":["\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar AppShell = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(AppShell, _React$Component);\n\n function AppShell() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = AppShell.prototype;\n\n _proto.render = function render() {\n return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);\n };\n\n return AppShell;\n}(_react.default.Component);\n\nvar _default = AppShell;\nexports.default = _default;"],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-completion-md-3d444c7b31269f9b6ec9.js b/pr-preview/pr-1029/component---docs-completion-md-3d444c7b31269f9b6ec9.js
deleted file mode 100644
index 9bdde3ba4..000000000
--- a/pr-preview/pr-1029/component---docs-completion-md-3d444c7b31269f9b6ec9.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{pdrC:function(e,t,a){"use strict";a.r(t),a.d(t,"_frontmatter",(function(){return c})),a.d(t,"default",(function(){return p}));var n=a("wx14"),r=a("Ff2n"),o=(a("q1tI"),a("7ljp")),m=a("hhGP");a("qKvR");const l=["components"],c={};void 0!==c&&c&&c===Object(c)&&Object.isExtensible(c)&&!Object.prototype.hasOwnProperty.call(c,"__filemeta")&&Object.defineProperty(c,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/completion.md"}});const i={_frontmatter:c},s=m.a;function p(e){let{components:t}=e,a=Object(r.a)(e,l);return Object(o.b)(s,Object(n.a)({},i,a,{components:t,mdxType:"MDXLayout"}),Object(o.b)("h1",{id:"command-line-completion"},"Command-line Completion"),Object(o.b)("p",null,"Tanka supports CLI completion for ",Object(o.b)("inlineCode",{parentName:"p"},"bash"),", ",Object(o.b)("inlineCode",{parentName:"p"},"zsh")," and ",Object(o.b)("inlineCode",{parentName:"p"},"fish"),"."),Object(o.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(o.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Install")),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"},"$ tk "),Object(o.b)("span",{parentName:"span",className:"mtk9"},"complete")),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Uninstall")),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"},"$ tk "),Object(o.b)("span",{parentName:"span",className:"mtk9"},"complete"),Object(o.b)("span",{parentName:"span",className:"mtk1"}," --remove")))),Object(o.b)("p",null,"As tanka is its own completion handler, it needs to hook into your shell's\nconfiguration file (",Object(o.b)("inlineCode",{parentName:"p"},".bashrc"),", etc)."),Object(o.b)("p",null,"When using other shells than ",Object(o.b)("inlineCode",{parentName:"p"},"bash"),", Tanka relies on a ",Object(o.b)("em",{parentName:"p"},"Bash compatibility\nmode"),". It enables this automatically when installing, but please make sure no\nother completion (e.g. OhMyZsh) interferes with this, or your completion might\nnot work properly.",Object(o.b)("br",{parentName:"p"}),"\n","It sometimes depends on the order the completions are being loaded, so try\nputting Tanka before or after the others."),Object(o.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==p&&p&&p===Object(p)&&Object.isExtensible(p)&&!Object.prototype.hasOwnProperty.call(p,"__filemeta")&&Object.defineProperty(p,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/completion.md"}}),p.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-completion-md-3d444c7b31269f9b6ec9.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-completion-md-3d444c7b31269f9b6ec9.js.map b/pr-preview/pr-1029/component---docs-completion-md-3d444c7b31269f9b6ec9.js.map
deleted file mode 100644
index 8bde15e94..000000000
--- a/pr-preview/pr-1029/component---docs-completion-md-3d444c7b31269f9b6ec9.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/completion.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"wRAMaA,EAAe,QAAG,IAAAA,UAAAC,OAAAD,IAAAC,OAAAC,aAAAF,KAAAC,OAAAE,UAAAC,eAAAC,KAAAL,EAAA,eAAAC,OAAAK,eAAAN,EAAA,cAAAO,cAAA,EAAAC,MAAA,CAAAC,KAAA,eAAAC,SAAA,wBAC/B,MAAMC,EAAc,CAClBX,gBAEIY,EAAYC,IACH,SAASC,EAAUC,GAG/B,IAHgC,WACjCC,GAEDD,EADIE,EAAKC,YAAAH,EAAAI,GAER,OAAOC,YAACR,EAASS,YAAA,GAAKV,EAAiBM,EAAK,CAAED,WAAYA,EAAYM,QAAQ,cAG5EF,YAAA,MACE,GAAM,2BAAyB,2BAEjCA,YAAA,8CAAyCA,YAAA,cAAYG,WAAW,KAAG,QAAsB,KAAMH,YAAA,cAAYG,WAAW,KAAG,OAAqB,QAASH,YAAA,cAAYG,WAAW,KAAG,QAAsB,KACvMH,YAAA,OACE,UAAa,yCACb,gBAAiB,QAChBA,YAAA,QAAMG,WAAW,MAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,aAAW,cACI,KACtCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,SACFH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,aACQ,KACrCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,UACE,KACzBH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,aAAW,gBACM,KACxCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,SACFH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,gBAE3BH,YAAA,4GACkBA,YAAA,cAAYG,WAAW,KAAG,WAAyB,WACrEH,YAAA,yCAAoCA,YAAA,cAAYG,WAAW,KAAG,QAAsB,uBAAwBH,YAAA,MAAIG,WAAW,KAAG,4BACvH,+KAESH,YAAA,MAAIG,WAAW,MAAS,8HAIxCH,YAAA,SACE,UAAa,2BAAyB,glCA6B3C,IAAAN,UAAAb,OAAAa,IAAAb,OAAAC,aAAAY,KAAAb,OAAAE,UAAAC,eAAAC,KAAAS,EAAA,eAAAb,OAAAK,eAAAQ,EAAA,cAAAP,cAAA,EAAAC,MAAA,CAAAC,KAAA,aAAAC,SAAA,wBAEDI,EAAWU,gBAAiB","file":"component---docs-completion-md-3d444c7b31269f9b6ec9.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Command-line Completion`}
\n
{`Tanka supports CLI completion for `}{`bash`}{`, `}{`zsh`}{` and `}{`fish`}{`.`}
{`As tanka is its own completion handler, it needs to hook into your shell's\nconfiguration file (`}{`.bashrc`}{`, etc).`}
\n
{`When using other shells than `}{`bash`}{`, Tanka relies on a `}{`Bash compatibility\nmode`}{`. It enables this automatically when installing, but please make sure no\nother completion (e.g. OhMyZsh) interferes with this, or your completion might\nnot work properly.`} {`\n`}{`It sometimes depends on the order the completions are being loaded, so try\nputting Tanka before or after the others.`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-config-md-b129057e083bbcf09ffa.js b/pr-preview/pr-1029/component---docs-config-md-b129057e083bbcf09ffa.js
deleted file mode 100644
index 36c32226e..000000000
--- a/pr-preview/pr-1029/component---docs-config-md-b129057e083bbcf09ffa.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{"9oCR":function(a,e,s){"use strict";s.r(e),s.d(e,"_frontmatter",(function(){return b})),s.d(e,"default",(function(){return r}));var t=s("wx14"),n=s("Ff2n"),m=(s("q1tI"),s("7ljp")),p=s("hhGP");s("qKvR");const c=["components"],b={};void 0!==b&&b&&b===Object(b)&&Object.isExtensible(b)&&!Object.prototype.hasOwnProperty.call(b,"__filemeta")&&Object.defineProperty(b,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/config.md"}});const N={_frontmatter:b},l=p.a;function r(a){let{components:e}=a,s=Object(n.a)(a,c);return Object(m.b)(l,Object(t.a)({},N,s,{components:e,mdxType:"MDXLayout"}),Object(m.b)("h1",{id:"configuration-reference"},"Configuration Reference"),Object(m.b)("p",null,"Tanka's behavior can be customized per Environment using a file called ",Object(m.b)("inlineCode",{parentName:"p"},"spec.json")),Object(m.b)("h2",{id:"file-format"},"File format"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"json"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},'// Config format revision. Currently only "v1alpha1"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"v1alpha1"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},'// Always "Environment". Reserved for future use')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Environment"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Descriptive fields")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Name of the Environment. Automatically set to the relative")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// path from the project root")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},""),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Arbitrary key:value string pairs. Not parsed by Tanka")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"labels"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk4"},""),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},""),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"},")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Properties influencing Tanka's behavior")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"spec"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// The Kubernetes cluster to use.")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Must be the full URL, e.g. https://cluster.fqdn:6443")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"apiServer"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},""),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// The Kubernetes context name(s) to use.")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// This field supports regular expressions and is mutually exclusive with apiServer field.")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"contextNames"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"["),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},""),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},"],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Default namespace for objects that don't explicitely specify one")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"namespace"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},""),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"|"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"default"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"default"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// diffStrategy to use. Automatically chosen by default based on")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},'// the availability of "kubectl diff".')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},'// - native: uses "kubectl diff". Recommended')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},'// - validate: uses "kubectl diff --server-side". Safest, but slower than "native"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// - subset: fallback for k8s versions below 1.13.0")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"diffStrategy"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"[native, validate, subset]"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"|"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"default"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"auto"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},'// Whether to add a "tanka.dev/environment" label to each created resource.')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},'// Required for garbage collection ("tk prune").')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"injectLabels"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},""),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"|"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"default"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"false")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")))),Object(m.b)("h2",{id:"jsonnet-access"},"Jsonnet access"),Object(m.b)("p",null,"It is possible to access above data from Jsonnet:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," tk "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"tk"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},";")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// The cluster IP")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"cluster:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," tk.env.spec.apiServer,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// The labels of your Environment")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"labels:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," tk.env.metadata.labels,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!Object.prototype.hasOwnProperty.call(r,"__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/config.md"}}),r.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-config-md-b129057e083bbcf09ffa.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-config-md-b129057e083bbcf09ffa.js.map b/pr-preview/pr-1029/component---docs-config-md-b129057e083bbcf09ffa.js.map
deleted file mode 100644
index 1872a12a6..000000000
--- a/pr-preview/pr-1029/component---docs-config-md-b129057e083bbcf09ffa.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/config.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"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","file":"component---docs-config-md-b129057e083bbcf09ffa.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Configuration Reference`}
\n
{`Tanka's behavior can be customized per Environment using a file called `}{`spec.json`}
\n
{`File format`}
\n
{`{`}{`\n`}{` `}{`// Config format revision. Currently only \"v1alpha1\"`}{`\n`}{` `}{`\"`}{`apiVersion`}{`\"`}{`:`}{` `}{`\"`}{`v1alpha1`}{`\"`}{`,`}{`\n`}{` `}{`// Always \"Environment\". Reserved for future use`}{`\n`}{` `}{`\"`}{`kind`}{`\"`}{`:`}{` `}{`\"`}{`Environment`}{`\"`}{`,`}{`\n`}{`\n`}{` `}{`// Descriptive fields`}{`\n`}{` `}{`\"`}{`metadata`}{`\"`}{`:`}{` `}{`{`}{`\n`}{` `}{`// Name of the Environment. Automatically set to the relative`}{`\n`}{` `}{`// path from the project root`}{`\n`}{` `}{`\"`}{`name`}{`\"`}{`:`}{` `}{`\"`}{``}{`\"`}{`,`}{`\n`}{`\n`}{` `}{`// Arbitrary key:value string pairs. Not parsed by Tanka`}{`\n`}{` `}{`\"`}{`labels`}{`\"`}{`:`}{` `}{`{`}{` `}{`\"`}{``}{`\"`}{`:`}{` `}{`\"`}{``}{`\"`}{` `}{`}`}{`\n`}{` `}{`},`}{`\n`}{`\n`}{` `}{`// Properties influencing Tanka's behavior`}{`\n`}{` `}{`\"`}{`spec`}{`\"`}{`:`}{` `}{`{`}{`\n`}{` `}{`// The Kubernetes cluster to use.`}{`\n`}{` `}{`// Must be the full URL, e.g. https://cluster.fqdn:6443`}{`\n`}{` `}{`\"`}{`apiServer`}{`\"`}{`:`}{` `}{`\"`}{``}{`\"`}{`,`}{`\n`}{`\n`}{` `}{`// The Kubernetes context name(s) to use.`}{`\n`}{` `}{`// This field supports regular expressions and is mutually exclusive with apiServer field.`}{`\n`}{` `}{`\"`}{`contextNames`}{`\"`}{`:`}{` `}{`[`}{`\"`}{``}{`\"`}{`],`}{`\n`}{` `}{`\n`}{` `}{`// Default namespace for objects that don't explicitely specify one`}{`\n`}{` `}{`\"`}{`namespace`}{`\"`}{`:`}{` `}{`\"`}{``}{`\"`}{` `}{`|`}{` `}{`default`}{` `}{`=`}{` `}{`\"`}{`default`}{`\"`}{`,`}{`\n`}{`\n`}{` `}{`// diffStrategy to use. Automatically chosen by default based on`}{`\n`}{` `}{`// the availability of \"kubectl diff\".`}{`\n`}{` `}{`// - native: uses \"kubectl diff\". Recommended`}{`\n`}{` `}{`// - validate: uses \"kubectl diff --server-side\". Safest, but slower than \"native\"`}{`\n`}{` `}{`// - subset: fallback for k8s versions below 1.13.0`}{`\n`}{` `}{`\"`}{`diffStrategy`}{`\"`}{`:`}{` `}{`\"`}{`[native, validate, subset]`}{`\"`}{` `}{`|`}{` `}{`default`}{` `}{`=`}{` `}{`\"`}{`auto`}{`\"`}{`,`}{`\n`}{`\n`}{` `}{`// Whether to add a \"tanka.dev/environment\" label to each created resource.`}{`\n`}{` `}{`// Required for garbage collection (\"tk prune\").`}{`\n`}{` `}{`\"`}{`injectLabels`}{`\"`}{`:`}{` `}{``}{` `}{`|`}{` `}{`default`}{` `}{`=`}{` `}{`false`}{`\n`}{` `}{`}`}{`\n`}{`}`}
\n
{`Jsonnet access`}
\n
{`It is possible to access above data from Jsonnet:`}
\n
{`local`}{` tk `}{`=`}{` `}{`import`}{` `}{`\"tk\"`}{`;`}{`\n`}{`\n`}{`{`}{`\n`}{` `}{`// The cluster IP`}{`\n`}{` `}{`cluster:`}{` tk.env.spec.apiServer,`}{`\n`}{` `}{`// The labels of your Environment`}{`\n`}{` `}{`labels:`}{` tk.env.metadata.labels,`}{`\n`}{`}`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-diff-strategy-md-6f0ae06a737588b83c43.js b/pr-preview/pr-1029/component---docs-diff-strategy-md-6f0ae06a737588b83c43.js
deleted file mode 100644
index 80cf5b51a..000000000
--- a/pr-preview/pr-1029/component---docs-diff-strategy-md-6f0ae06a737588b83c43.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{tUVA:function(e,t,a){"use strict";a.r(t),a.d(t,"_frontmatter",(function(){return o})),a.d(t,"default",(function(){return d}));var n=a("wx14"),s=a("Ff2n"),i=(a("q1tI"),a("7ljp")),r=a("hhGP");a("qKvR");const l=["components"],o={};void 0!==o&&o&&o===Object(o)&&Object.isExtensible(o)&&!Object.prototype.hasOwnProperty.call(o,"__filemeta")&&Object.defineProperty(o,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/diff-strategy.md"}});const c={_frontmatter:o},m=r.a;function d(e){let{components:t}=e,a=Object(s.a)(e,l);return Object(i.b)(m,Object(n.a)({},c,a,{components:t,mdxType:"MDXLayout"}),Object(i.b)("h1",{id:"diff-strategies"},"Diff Strategies"),Object(i.b)("p",null,"Tanka supports two different ways of computing differences between the local\nconfiguration and the live cluster state: Either ",Object(i.b)("strong",{parentName:"p"},"native")," ",Object(i.b)("inlineCode",{parentName:"p"},"kubectl diff -f -"),"\nis used, which gives the best possible results, but is only possible for\nclusters with\n",Object(i.b)("a",{parentName:"p",href:"https://kubernetes.io/blog/2019/01/14/apiserver-dry-run-and-kubectl-diff/"},"server-side diff"),"\nsupport (Kubernetes 1.13+)."),Object(i.b)("p",null,"When this is not available, Tanka falls back to ",Object(i.b)("inlineCode",{parentName:"p"},"subset")," mode."),Object(i.b)("p",null,"You can specify the diff-strategy to use on the command line as well:"),Object(i.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(i.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# native")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"tk diff --diff-strategy=native "),Object(i.b)("span",{parentName:"span",className:"mtk9"},".")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# validate: Like native but with a server-side validation")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"tk diff --diff-strategy=validate "),Object(i.b)("span",{parentName:"span",className:"mtk9"},".")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# server-side")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"tk diff --diff-strategy=server "),Object(i.b)("span",{parentName:"span",className:"mtk9"},".")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# subset")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"tk diff --diff-strategy=subset "),Object(i.b)("span",{parentName:"span",className:"mtk9"},".")))),Object(i.b)("h2",{id:"native"},"Native"),Object(i.b)("p",null,"The native diff mode is recommended, because it uses ",Object(i.b)("inlineCode",{parentName:"p"},"kubectl diff")," underneath,\nwhich sends the objects to the Kubernetes API server and computes the\ndifferences over there."),Object(i.b)("p",null,"This has the huge benefit that all possible changes by webhooks and other\ninternal components of Kubernetes can be encountered as well."),Object(i.b)("p",null,"However, this is a fairly new feature and only available on Kubernetes 1.13 or\nlater. Only the API server (master nodes) needs to have that\nversion, worker nodes do not matter."),Object(i.b)("p",null,"There is a\n",Object(i.b)("a",{parentName:"p",href:"known-issues.md#unexpected-diff-if-the-same-port-number-is-used-for-udp-and-tcp"},"known issue"),"\nwith ",Object(i.b)("inlineCode",{parentName:"p"},"kubectl diff"),", which affects ports configured to use both TCP and UDP."),Object(i.b)("h3",{id:"server-side-diffs"},"Server-side diffs"),Object(i.b)("p",null,"There are two additional modes which extend ",Object(i.b)("inlineCode",{parentName:"p"},"native"),": ",Object(i.b)("inlineCode",{parentName:"p"},"validate")," and ",Object(i.b)("inlineCode",{parentName:"p"},"server"),".\nWhile all ",Object(i.b)("inlineCode",{parentName:"p"},"kubectl diff")," commands are sent to the API server, these two\nmethods take advantage of an additional server-side diff mode (which uses the\n",Object(i.b)("inlineCode",{parentName:"p"},"kubectl diff --server-side")," flag, complementing the\n",Object(i.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/server-side-apply"},"server-side apply")," mode)."),Object(i.b)("p",null,"Since a plain ",Object(i.b)("inlineCode",{parentName:"p"},"server")," diff often produces cruft, and wouldn't be representative\nof a client-side apply, the ",Object(i.b)("inlineCode",{parentName:"p"},"validate")," method allows the server-side diff to\ncheck that all models are valid server-side, but still displays the ",Object(i.b)("inlineCode",{parentName:"p"},"native"),"\ndiff output to the user."),Object(i.b)("h2",{id:"subset"},"Subset"),Object(i.b)("p",null,"If native diffing is not supported by your cluster, Tanka provides subset diff\nas a fallback method."),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"Subset diff only compares fields present in the local configuration and\nignores all other fields"),". When you remove a field locally, you will see no\ndifferences."),Object(i.b)("p",null,"This is required, because Kubernetes adds dynamic fields to the state during\nruntime, which we cannot know of on the client side. To produce a somewhat\nusable output, we can effectively only compare what we already know about."),Object(i.b)("p",null,"If this is a problem for you, consider switching to ",Object(i.b)("a",{parentName:"p",href:"#native"},"native")," mode."),Object(i.b)("h2",{id:"external-diff-utilities"},"External diff utilities"),Object(i.b)("p",null,"You can use external diff utilities by setting the environment variable\n",Object(i.b)("inlineCode",{parentName:"p"},"KUBECTL_EXTERNAL_DIFF"),". If you want to use a GUI or interactive diff utility\nyou must also set ",Object(i.b)("inlineCode",{parentName:"p"},"KUBECTL_INTERACTIVE_DIFF=1")," to prevent Tanka from capturing\nstdout."),Object(i.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==d&&d&&d===Object(d)&&Object.isExtensible(d)&&!Object.prototype.hasOwnProperty.call(d,"__filemeta")&&Object.defineProperty(d,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/diff-strategy.md"}}),d.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-diff-strategy-md-6f0ae06a737588b83c43.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-diff-strategy-md-6f0ae06a737588b83c43.js.map b/pr-preview/pr-1029/component---docs-diff-strategy-md-6f0ae06a737588b83c43.js.map
deleted file mode 100644
index 673b8b569..000000000
--- a/pr-preview/pr-1029/component---docs-diff-strategy-md-6f0ae06a737588b83c43.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/diff-strategy.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"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","file":"component---docs-diff-strategy-md-6f0ae06a737588b83c43.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Diff Strategies`}
\n
{`Tanka supports two different ways of computing differences between the local\nconfiguration and the live cluster state: Either `}{`native`}{` `}{`kubectl diff -f -`}{`\nis used, which gives the best possible results, but is only possible for\nclusters with\n`}{`server-side diff`}{`\nsupport (Kubernetes 1.13+).`}
\n
{`When this is not available, Tanka falls back to `}{`subset`}{` mode.`}
\n
{`You can specify the diff-strategy to use on the command line as well:`}
\n
{`# native`}{`\n`}{`tk diff --diff-strategy=native `}{`.`}{`\n`}{`\n`}{`# validate: Like native but with a server-side validation`}{`\n`}{`tk diff --diff-strategy=validate `}{`.`}{`\n`}{`\n`}{`# server-side`}{`\n`}{`tk diff --diff-strategy=server `}{`.`}{`\n`}{`\n`}{`# subset`}{`\n`}{`tk diff --diff-strategy=subset `}{`.`}
\n
{`Native`}
\n
{`The native diff mode is recommended, because it uses `}{`kubectl diff`}{` underneath,\nwhich sends the objects to the Kubernetes API server and computes the\ndifferences over there.`}
\n
{`This has the huge benefit that all possible changes by webhooks and other\ninternal components of Kubernetes can be encountered as well.`}
\n
{`However, this is a fairly new feature and only available on Kubernetes 1.13 or\nlater. Only the API server (master nodes) needs to have that\nversion, worker nodes do not matter.`}
\n
{`There is a\n`}{`known issue`}{`\nwith `}{`kubectl diff`}{`, which affects ports configured to use both TCP and UDP.`}
\n
{`Server-side diffs`}
\n
{`There are two additional modes which extend `}{`native`}{`: `}{`validate`}{` and `}{`server`}{`.\nWhile all `}{`kubectl diff`}{` commands are sent to the API server, these two\nmethods take advantage of an additional server-side diff mode (which uses the\n`}{`kubectl diff --server-side`}{` flag, complementing the\n`}{`server-side apply`}{` mode).`}
\n
{`Since a plain `}{`server`}{` diff often produces cruft, and wouldn't be representative\nof a client-side apply, the `}{`validate`}{` method allows the server-side diff to\ncheck that all models are valid server-side, but still displays the `}{`native`}{`\ndiff output to the user.`}
\n
{`Subset`}
\n
{`If native diffing is not supported by your cluster, Tanka provides subset diff\nas a fallback method.`}
\n
{`Subset diff only compares fields present in the local configuration and\nignores all other fields`}{`. When you remove a field locally, you will see no\ndifferences.`}
\n
{`This is required, because Kubernetes adds dynamic fields to the state during\nruntime, which we cannot know of on the client side. To produce a somewhat\nusable output, we can effectively only compare what we already know about.`}
\n
{`If this is a problem for you, consider switching to `}{`native`}{` mode.`}
\n
{`External diff utilities`}
\n
{`You can use external diff utilities by setting the environment variable\n`}{`KUBECTL_EXTERNAL_DIFF`}{`. If you want to use a GUI or interactive diff utility\nyou must also set `}{`KUBECTL_INTERACTIVE_DIFF=1`}{` to prevent Tanka from capturing\nstdout.`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-directory-structure-md-e8d13c22da569ecf1cd2.js b/pr-preview/pr-1029/component---docs-directory-structure-md-e8d13c22da569ecf1cd2.js
deleted file mode 100644
index 4aaf63717..000000000
--- a/pr-preview/pr-1029/component---docs-directory-structure-md-e8d13c22da569ecf1cd2.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{"6SEy":function(e,a,t){"use strict";t.r(a),t.d(a,"_frontmatter",(function(){return c})),t.d(a,"default",(function(){return m}));var n=t("wx14"),s=t("Ff2n"),i=(t("q1tI"),t("7ljp")),r=t("hhGP");t("qKvR");const l=["components"],c={};void 0!==c&&c&&c===Object(c)&&Object.isExtensible(c)&&!Object.prototype.hasOwnProperty.call(c,"__filemeta")&&Object.defineProperty(c,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/directory-structure.md"}});const o={_frontmatter:c},b=r.a;function m(e){let{components:a}=e,t=Object(s.a)(e,l);return Object(i.b)(b,Object(n.a)({},o,t,{components:a,mdxType:"MDXLayout"}),Object(i.b)("h1",{id:"directory-structure"},"Directory structure"),Object(i.b)("p",null,"Tanka uses the following directories and special files:"),Object(i.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(i.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk9"},"."),Object(i.b)("span",{parentName:"span",className:"mtk1"}," "),Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# the project ()")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"├── environments "),Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# code defining clusters")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"│ └── default "),Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# ")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"│ ├── main.jsonnet "),Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# starting point of the Jsonnet compilation")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"│ └── spec.json "),Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# environment's config")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"├── jsonnetfile.json "),Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# direct dependencies")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"├── jsonnetfile.lock.json "),Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# all dependencies with exact versions")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"├── lib "),Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# libraries for this project only")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"│ └── k.libsonnet "),Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# alias file for vendor/github.com/jsonnet-libs/k8s-libsonnet/1.21/main.libsonnet")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"└── vendor "),Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# external libraries installed using jb")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"}," ├── github.com")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"}," │ ├── grafana")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"}," │ │ └── jsonnet-libs")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"}," │ │ └── ksonnet-util "),Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Grafana Labs' usability extensions to k.libsonnet")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"}," │ │ ├── ...")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"}," │ │ └── kausal.libsonnet")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"}," │ └── jsonnet-libs")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"}," │ └── k8s-libsonnet")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"}," │ └── 1.21 "),Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# kubernetes library")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"}," │ ├── ...")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"}," │ └── main.libsonnet")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"}," ├── 1.21 -"),Object(i.b)("span",{parentName:"span",className:"mtk12"},">"),Object(i.b)("span",{parentName:"span",className:"mtk1"}," github.com/jsonnet-libs/k8s-libsonnet/1.21")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"}," └── ksonnet-util -"),Object(i.b)("span",{parentName:"span",className:"mtk12"},">"),Object(i.b)("span",{parentName:"span",className:"mtk1"}," github.com/grafana/jsonnet-libs/ksonnet-util")))),Object(i.b)("h2",{id:"environments"},"Environments"),Object(i.b)("p",null,"Tanka organizes configuration in environments. For the rationale behind this,\nsee the ",Object(i.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/tutorial/environments"},"section in the tutorial"),"."),Object(i.b)("p",null,"An environment consists of at least two files:"),Object(i.b)("h4",{id:"specjson"},"spec.json"),Object(i.b)("p",null,"This file configures environment properties such as cluster connection\n(",Object(i.b)("inlineCode",{parentName:"p"},"spec.apiServer"),"), default namespace (",Object(i.b)("inlineCode",{parentName:"p"},"spec.namespace"),"), etc."),Object(i.b)("p",null,"For the full set of options, see the ",Object(i.b)("a",{parentName:"p",href:"https://github.com/grafana/tanka/blob/main/pkg/spec/v1alpha1/environment.go"},"Golang source\ncode"),"."),Object(i.b)("h4",{id:"mainjsonnet"},"main.jsonnet"),Object(i.b)("p",null,"Like other programming languages, Jsonnet needs an entrypoint into the\nevaluation, something to begin with. ",Object(i.b)("inlineCode",{parentName:"p"},"main.jsonnet")," is exactly this: The very\nfirst file being evaluated, importing or directly specifying everything required\nfor this specific environment."),Object(i.b)("h2",{id:"root-and-base"},"Root and Base"),Object(i.b)("p",null,"When talking about directories, Tanka uses the following terms:"),Object(i.b)("table",null,Object(i.b)("thead",{parentName:"table"},Object(i.b)("tr",{parentName:"thead"},Object(i.b)("th",{parentName:"tr",align:null},"Term"),Object(i.b)("th",{parentName:"tr",align:null},"Description"),Object(i.b)("th",{parentName:"tr",align:null},"Identifier file"))),Object(i.b)("tbody",{parentName:"table"},Object(i.b)("tr",{parentName:"tbody"},Object(i.b)("td",{parentName:"tr",align:null},Object(i.b)("inlineCode",{parentName:"td"},"rootDir")),Object(i.b)("td",{parentName:"tr",align:null},"The root of your project"),Object(i.b)("td",{parentName:"tr",align:null},Object(i.b)("inlineCode",{parentName:"td"},"jsonnetfile.json")," or ",Object(i.b)("inlineCode",{parentName:"td"},"tkrc.yaml"))),Object(i.b)("tr",{parentName:"tbody"},Object(i.b)("td",{parentName:"tr",align:null},Object(i.b)("inlineCode",{parentName:"td"},"baseDir")),Object(i.b)("td",{parentName:"tr",align:null},"The directory of the current environment"),Object(i.b)("td",{parentName:"tr",align:null},Object(i.b)("inlineCode",{parentName:"td"},"main.jsonnet"))))),Object(i.b)("p",null,"Regardless what subdirectory of the project you are in, Tanka will always be\nable to identify both directories, by searching for the identifier files in the\nparent directories.",Object(i.b)("br",{parentName:"p"}),"\n","Tanka needs these for correctly setting up the ",Object(i.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/libraries/import-paths"},"import paths"),"."),Object(i.b)("p",null,"This is similar to how ",Object(i.b)("inlineCode",{parentName:"p"},"git")," always works, by looking for the ",Object(i.b)("inlineCode",{parentName:"p"},".git")," directory."),Object(i.b)("h2",{id:"libraries"},"Libraries"),Object(i.b)("p",null,"Tanka relies heavily on code-reuse, so libraries are a natural thing. Roughly\nspoken, they can be imported from two paths:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"/lib"),": Project local libraries"),Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"/vendor")," External libraries")),Object(i.b)("p",null,"For more details consider the ",Object(i.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/libraries/import-paths"},"import paths"),"."),Object(i.b)("h3",{id:"jsonnetfilejson-and-the-lock"},"jsonnetfile.json and the lock"),Object(i.b)("p",null,Object(i.b)("inlineCode",{parentName:"p"},"jb")," records all external packages installed in a file called\n",Object(i.b)("inlineCode",{parentName:"p"},"jsonnetfile.json"),". This file is the source of truth about what should be\nincluded in ",Object(i.b)("inlineCode",{parentName:"p"},"vendor/"),". However, it should only include what is really directly\nrequired, all recursive dependencies will be handled just fine."),Object(i.b)("p",null,Object(i.b)("inlineCode",{parentName:"p"},"jsonnetfile.lock.json")," is generated on every run of jsonnet-bundler, including\na list of packages that must be included in ",Object(i.b)("inlineCode",{parentName:"p"},"vendor/"),", along with the exact\nversion and a ",Object(i.b)("inlineCode",{parentName:"p"},"sha256")," hash of the package contents."),Object(i.b)("p",null,"Both files should be checked into source control: The ",Object(i.b)("inlineCode",{parentName:"p"},"jsonnetfile.json"),"\nspecifies what you need and the ",Object(i.b)("inlineCode",{parentName:"p"},"jsonnetfile.lock.json")," is important to make\nsure that subsequent ",Object(i.b)("inlineCode",{parentName:"p"},"jb install")," invocations always do the exact same thing."),Object(i.b)("blockquote",null,Object(i.b)("p",{parentName:"blockquote"},Object(i.b)("strong",{parentName:"p"},"Tip"),": The ",Object(i.b)("inlineCode",{parentName:"p"},"vendor/")," directory can be safely added to ",Object(i.b)("inlineCode",{parentName:"p"},".gitignore")," to keep your\nrepository size down, as long as ",Object(i.b)("inlineCode",{parentName:"p"},"jsonnetfile.lock.json")," is checked in.")),Object(i.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==m&&m&&m===Object(m)&&Object.isExtensible(m)&&!Object.prototype.hasOwnProperty.call(m,"__filemeta")&&Object.defineProperty(m,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/directory-structure.md"}}),m.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-directory-structure-md-e8d13c22da569ecf1cd2.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-directory-structure-md-e8d13c22da569ecf1cd2.js.map b/pr-preview/pr-1029/component---docs-directory-structure-md-e8d13c22da569ecf1cd2.js.map
deleted file mode 100644
index 7abcd3767..000000000
--- a/pr-preview/pr-1029/component---docs-directory-structure-md-e8d13c22da569ecf1cd2.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/directory-structure.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"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","file":"component---docs-directory-structure-md-e8d13c22da569ecf1cd2.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Directory structure`}
\n
{`Tanka uses the following directories and special files:`}
\n
{`.`}{` `}{`# the project ()`}{`\n`}{`├── environments `}{`# code defining clusters`}{`\n`}{`│ └── default `}{`# `}{`\n`}{`│ ├── main.jsonnet `}{`# starting point of the Jsonnet compilation`}{`\n`}{`│ └── spec.json `}{`# environment's config`}{`\n`}{`├── jsonnetfile.json `}{`# direct dependencies`}{`\n`}{`├── jsonnetfile.lock.json `}{`# all dependencies with exact versions`}{`\n`}{`├── lib `}{`# libraries for this project only`}{`\n`}{`│ └── k.libsonnet `}{`# alias file for vendor/github.com/jsonnet-libs/k8s-libsonnet/1.21/main.libsonnet`}{`\n`}{`└── vendor `}{`# external libraries installed using jb`}{`\n`}{` ├── github.com`}{`\n`}{` │ ├── grafana`}{`\n`}{` │ │ └── jsonnet-libs`}{`\n`}{` │ │ └── ksonnet-util `}{`# Grafana Labs' usability extensions to k.libsonnet`}{`\n`}{` │ │ ├── ...`}{`\n`}{` │ │ └── kausal.libsonnet`}{`\n`}{` │ └── jsonnet-libs`}{`\n`}{` │ └── k8s-libsonnet`}{`\n`}{` │ └── 1.21 `}{`# kubernetes library`}{`\n`}{` │ ├── ...`}{`\n`}{` │ └── main.libsonnet`}{`\n`}{` ├── 1.21 -`}{`>`}{` github.com/jsonnet-libs/k8s-libsonnet/1.21`}{`\n`}{` └── ksonnet-util -`}{`>`}{` github.com/grafana/jsonnet-libs/ksonnet-util`}
\n
{`Environments`}
\n
{`Tanka organizes configuration in environments. For the rationale behind this,\nsee the `}{`section in the tutorial`}{`.`}
\n
{`An environment consists of at least two files:`}
\n
{`spec.json`}
\n
{`This file configures environment properties such as cluster connection\n(`}{`spec.apiServer`}{`), default namespace (`}{`spec.namespace`}{`), etc.`}
{`Like other programming languages, Jsonnet needs an entrypoint into the\nevaluation, something to begin with. `}{`main.jsonnet`}{` is exactly this: The very\nfirst file being evaluated, importing or directly specifying everything required\nfor this specific environment.`}
\n
{`Root and Base`}
\n
{`When talking about directories, Tanka uses the following terms:`}
\n
\n \n
\n
{`Term`}
\n
{`Description`}
\n
{`Identifier file`}
\n
\n \n \n
\n
{`rootDir`}
\n
{`The root of your project`}
\n
{`jsonnetfile.json`}{` or `}{`tkrc.yaml`}
\n
\n
\n
{`baseDir`}
\n
{`The directory of the current environment`}
\n
{`main.jsonnet`}
\n
\n \n
\n
{`Regardless what subdirectory of the project you are in, Tanka will always be\nable to identify both directories, by searching for the identifier files in the\nparent directories.`} {`\n`}{`Tanka needs these for correctly setting up the `}{`import paths`}{`.`}
\n
{`This is similar to how `}{`git`}{` always works, by looking for the `}{`.git`}{` directory.`}
\n
{`Libraries`}
\n
{`Tanka relies heavily on code-reuse, so libraries are a natural thing. Roughly\nspoken, they can be imported from two paths:`}
{`jb`}{` records all external packages installed in a file called\n`}{`jsonnetfile.json`}{`. This file is the source of truth about what should be\nincluded in `}{`vendor/`}{`. However, it should only include what is really directly\nrequired, all recursive dependencies will be handled just fine.`}
\n
{`jsonnetfile.lock.json`}{` is generated on every run of jsonnet-bundler, including\na list of packages that must be included in `}{`vendor/`}{`, along with the exact\nversion and a `}{`sha256`}{` hash of the package contents.`}
\n
{`Both files should be checked into source control: The `}{`jsonnetfile.json`}{`\nspecifies what you need and the `}{`jsonnetfile.lock.json`}{` is important to make\nsure that subsequent `}{`jb install`}{` invocations always do the exact same thing.`}
\n
\n
{`Tip`}{`: The `}{`vendor/`}{` directory can be safely added to `}{`.gitignore`}{` to keep your\nrepository size down, as long as `}{`jsonnetfile.lock.json`}{` is checked in.`}
\n
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-env-vars-md-102b70747bbd7865e8e8.js b/pr-preview/pr-1029/component---docs-env-vars-md-102b70747bbd7865e8e8.js
deleted file mode 100644
index 435ba04b3..000000000
--- a/pr-preview/pr-1029/component---docs-env-vars-md-102b70747bbd7865e8e8.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{YnQe:function(e,t,n){"use strict";n.r(t),n.d(t,"_frontmatter",(function(){return o})),n.d(t,"default",(function(){return O}));var a=n("wx14"),b=n("Ff2n"),p=(n("q1tI"),n("7ljp")),r=n("hhGP");n("qKvR");const c=["components"],o={};void 0!==o&&o&&o===Object(o)&&Object.isExtensible(o)&&!Object.prototype.hasOwnProperty.call(o,"__filemeta")&&Object.defineProperty(o,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/env-vars.md"}});const i={_frontmatter:o},l=r.a;function O(e){let{components:t}=e,n=Object(b.a)(e,c);return Object(p.b)(l,Object(a.a)({},i,n,{components:t,mdxType:"MDXLayout"}),Object(p.b)("h1",{id:"environment-variables"},"Environment Variables"),Object(p.b)("h3",{id:"tanka_jb_path"},"TANKA_JB_PATH"),Object(p.b)("p",null,Object(p.b)("strong",{parentName:"p"},"Description"),": Path to the ",Object(p.b)("inlineCode",{parentName:"p"},"jb")," tool executable",Object(p.b)("br",{parentName:"p"}),"\n",Object(p.b)("strong",{parentName:"p"},"Default"),": ",Object(p.b)("inlineCode",{parentName:"p"},"$PATH/jb")),Object(p.b)("h3",{id:"tanka_kubectl_path"},"TANKA_KUBECTL_PATH"),Object(p.b)("p",null,Object(p.b)("strong",{parentName:"p"},"Description"),": Path to the ",Object(p.b)("inlineCode",{parentName:"p"},"kubectl")," tool executable",Object(p.b)("br",{parentName:"p"}),"\n",Object(p.b)("strong",{parentName:"p"},"Default"),": ",Object(p.b)("inlineCode",{parentName:"p"},"$PATH/kubectl")),Object(p.b)("h3",{id:"tanka_kubectl_trace"},"TANKA_KUBECTL_TRACE"),Object(p.b)("p",null,Object(p.b)("strong",{parentName:"p"},"Description"),": Print all calls to ",Object(p.b)("inlineCode",{parentName:"p"},"kubectl"),Object(p.b)("br",{parentName:"p"}),"\n",Object(p.b)("strong",{parentName:"p"},"Default"),": ",Object(p.b)("inlineCode",{parentName:"p"},"false")),Object(p.b)("h3",{id:"tanka_helm_path"},"TANKA_HELM_PATH"),Object(p.b)("p",null,Object(p.b)("strong",{parentName:"p"},"Description"),": Path to the ",Object(p.b)("inlineCode",{parentName:"p"},"helm")," executable",Object(p.b)("br",{parentName:"p"}),"\n",Object(p.b)("strong",{parentName:"p"},"Default"),": ",Object(p.b)("inlineCode",{parentName:"p"},"$PATH/helm")),Object(p.b)("h3",{id:"tanka_kustomize_path"},"TANKA_KUSTOMIZE_PATH"),Object(p.b)("p",null,Object(p.b)("strong",{parentName:"p"},"Description"),": Path to the ",Object(p.b)("inlineCode",{parentName:"p"},"kustomize")," executable",Object(p.b)("br",{parentName:"p"}),"\n",Object(p.b)("strong",{parentName:"p"},"Default"),": ",Object(p.b)("inlineCode",{parentName:"p"},"$PATH/kustomize")),Object(p.b)("h3",{id:"pager"},"PAGER"),Object(p.b)("p",null,Object(p.b)("strong",{parentName:"p"},"Description"),": Pager to use when displaying output. Set to an empty string to disable paging.\n",Object(p.b)("strong",{parentName:"p"},"Default"),": ",Object(p.b)("inlineCode",{parentName:"p"},"less --RAW-CONTROL-CHARS --quit-if-one-screen --no-init")))}void 0!==O&&O&&O===Object(O)&&Object.isExtensible(O)&&!Object.prototype.hasOwnProperty.call(O,"__filemeta")&&Object.defineProperty(O,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/env-vars.md"}}),O.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-env-vars-md-102b70747bbd7865e8e8.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-env-vars-md-102b70747bbd7865e8e8.js.map b/pr-preview/pr-1029/component---docs-env-vars-md-102b70747bbd7865e8e8.js.map
deleted file mode 100644
index d066b0c0b..000000000
--- a/pr-preview/pr-1029/component---docs-env-vars-md-102b70747bbd7865e8e8.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/env-vars.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"wRAMaA,EAAe,QAAG,IAAAA,UAAAC,OAAAD,IAAAC,OAAAC,aAAAF,KAAAC,OAAAE,UAAAC,eAAAC,KAAAL,EAAA,eAAAC,OAAAK,eAAAN,EAAA,cAAAO,cAAA,EAAAC,MAAA,CAAAC,KAAA,eAAAC,SAAA,sBAC/B,MAAMC,EAAc,CAClBX,gBAEIY,EAAYC,IACH,SAASC,EAAUC,GAG/B,IAHgC,WACjCC,GAEDD,EADIE,EAAKC,YAAAH,EAAAI,GAER,OAAOC,YAACR,EAASS,YAAA,GAAKV,EAAiBM,EAAK,CAAED,WAAYA,EAAYM,QAAQ,cAG5EF,YAAA,MACE,GAAM,yBAAuB,yBAE/BA,YAAA,MACE,GAAM,iBAAe,iBAEvBA,YAAA,SAAGA,YAAA,UAAQG,WAAW,KAAG,eAAyB,iBAAkBH,YAAA,cAAYG,WAAW,KAAG,MAAoB,mBAAoBH,YAAA,MAAIG,WAAW,MAAS,KAChKH,YAAA,UAAQG,WAAW,KAAG,WAAqB,KAAMH,YAAA,cAAYG,WAAW,KAAG,aACzEH,YAAA,MACE,GAAM,sBAAoB,sBAE5BA,YAAA,SAAGA,YAAA,UAAQG,WAAW,KAAG,eAAyB,iBAAkBH,YAAA,cAAYG,WAAW,KAAG,WAAyB,mBAAoBH,YAAA,MAAIG,WAAW,MAAS,KACrKH,YAAA,UAAQG,WAAW,KAAG,WAAqB,KAAMH,YAAA,cAAYG,WAAW,KAAG,kBACzEH,YAAA,MACE,GAAM,uBAAqB,uBAE7BA,YAAA,SAAGA,YAAA,UAAQG,WAAW,KAAG,eAAyB,wBAAyBH,YAAA,cAAYG,WAAW,KAAG,WAAyBH,YAAA,MAAIG,WAAW,MAAS,KACxJH,YAAA,UAAQG,WAAW,KAAG,WAAqB,KAAMH,YAAA,cAAYG,WAAW,KAAG,UACzEH,YAAA,MACE,GAAM,mBAAiB,mBAEzBA,YAAA,SAAGA,YAAA,UAAQG,WAAW,KAAG,eAAyB,iBAAkBH,YAAA,cAAYG,WAAW,KAAG,QAAsB,cAAeH,YAAA,MAAIG,WAAW,MAAS,KAC7JH,YAAA,UAAQG,WAAW,KAAG,WAAqB,KAAMH,YAAA,cAAYG,WAAW,KAAG,eACzEH,YAAA,MACE,GAAM,wBAAsB,wBAE9BA,YAAA,SAAGA,YAAA,UAAQG,WAAW,KAAG,eAAyB,iBAAkBH,YAAA,cAAYG,WAAW,KAAG,aAA2B,cAAeH,YAAA,MAAIG,WAAW,MAAS,KAClKH,YAAA,UAAQG,WAAW,KAAG,WAAqB,KAAMH,YAAA,cAAYG,WAAW,KAAG,oBACzEH,YAAA,MACE,GAAM,SAAO,SAEfA,YAAA,SAAGA,YAAA,UAAQG,WAAW,KAAG,eAAyB,qFACpDH,YAAA,UAAQG,WAAW,KAAG,WAAqB,KAAMH,YAAA,cAAYG,WAAW,KAAG,kEAG5E,IAAAT,UAAAb,OAAAa,IAAAb,OAAAC,aAAAY,KAAAb,OAAAE,UAAAC,eAAAC,KAAAS,EAAA,eAAAb,OAAAK,eAAAQ,EAAA,cAAAP,cAAA,EAAAC,MAAA,CAAAC,KAAA,aAAAC,SAAA,sBAEDI,EAAWU,gBAAiB","file":"component---docs-env-vars-md-102b70747bbd7865e8e8.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Environment Variables`}
\n
{`TANKA_JB_PATH`}
\n
{`Description`}{`: Path to the `}{`jb`}{` tool executable`} {`\n`}{`Default`}{`: `}{`$PATH/jb`}
\n
{`TANKA_KUBECTL_PATH`}
\n
{`Description`}{`: Path to the `}{`kubectl`}{` tool executable`} {`\n`}{`Default`}{`: `}{`$PATH/kubectl`}
\n
{`TANKA_KUBECTL_TRACE`}
\n
{`Description`}{`: Print all calls to `}{`kubectl`} {`\n`}{`Default`}{`: `}{`false`}
\n
{`TANKA_HELM_PATH`}
\n
{`Description`}{`: Path to the `}{`helm`}{` executable`} {`\n`}{`Default`}{`: `}{`$PATH/helm`}
\n
{`TANKA_KUSTOMIZE_PATH`}
\n
{`Description`}{`: Path to the `}{`kustomize`}{` executable`} {`\n`}{`Default`}{`: `}{`$PATH/kustomize`}
\n
{`PAGER`}
\n
{`Description`}{`: Pager to use when displaying output. Set to an empty string to disable paging.\n`}{`Default`}{`: `}{`less --RAW-CONTROL-CHARS --quit-if-one-screen --no-init`}
\n\n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-exporting-md-e8c97f5d64e97c22ef1e.js b/pr-preview/pr-1029/component---docs-exporting-md-e8c97f5d64e97c22ef1e.js
deleted file mode 100644
index c1034c084..000000000
--- a/pr-preview/pr-1029/component---docs-exporting-md-e8c97f5d64e97c22ef1e.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{AXtd:function(e,a,t){"use strict";t.r(a),t.d(a,"_frontmatter",(function(){return r})),t.d(a,"default",(function(){return p}));var n=t("wx14"),s=t("Ff2n"),i=(t("q1tI"),t("7ljp")),l=t("hhGP");t("qKvR");const o=["components"],r={};void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!Object.prototype.hasOwnProperty.call(r,"__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/exporting.md"}});const m={_frontmatter:r},c=l.a;function p(e){let{components:a}=e,t=Object(s.a)(e,o);return Object(i.b)(c,Object(n.a)({},m,t,{components:a,mdxType:"MDXLayout"}),Object(i.b)("h1",{id:"exporting-as-yaml"},"Exporting as YAML"),Object(i.b)("p",null,"Tanka provides you with a day-to-day workflow for working with Kubernetes clusters:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"tk show")," for quickly checking the YAML representation looks good"),Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"tk diff")," to ensure your changes will behave like they should"),Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"tk apply")," makes it happen")),Object(i.b)("p",null,"However sometimes it can be required to integrate with other tooling that does\nonly support ",Object(i.b)("inlineCode",{parentName:"p"},".yaml")," files."),Object(i.b)("p",null,"For that case, ",Object(i.b)("inlineCode",{parentName:"p"},"tk export")," can be used:"),Object(i.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(i.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# ")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"$ tk "),Object(i.b)("span",{parentName:"span",className:"mtk12"},"export"),Object(i.b)("span",{parentName:"span",className:"mtk1"}," promtail/ environments/promtail")))),Object(i.b)("blockquote",null,Object(i.b)("p",{parentName:"blockquote"},Object(i.b)("strong",{parentName:"p"},"Note:")," The arguments flipped in v0.14.0, the ",Object(i.b)("inlineCode",{parentName:"p"},"")," comes first now.")),Object(i.b)("p",null,"This will create a separate ",Object(i.b)("inlineCode",{parentName:"p"},".yaml")," file for each Kubernetes resource included in your Jsonnet."),Object(i.b)("h2",{id:"filenames"},"Filenames"),Object(i.b)("p",null,"Tanka by default uses the following pattern:"),Object(i.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(i.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk5"},"${"),Object(i.b)("span",{parentName:"span",className:"mtk8"},"apiVersion"),Object(i.b)("span",{parentName:"span",className:"mtk5"},"}"),Object(i.b)("span",{parentName:"span",className:"mtk1"},"."),Object(i.b)("span",{parentName:"span",className:"mtk5"},"${"),Object(i.b)("span",{parentName:"span",className:"mtk8"},"kind"),Object(i.b)("span",{parentName:"span",className:"mtk5"},"}"),Object(i.b)("span",{parentName:"span",className:"mtk1"},"-"),Object(i.b)("span",{parentName:"span",className:"mtk5"},"${"),Object(i.b)("span",{parentName:"span",className:"mtk8"},"metadata.name"),Object(i.b)("span",{parentName:"span",className:"mtk5"},"}"),Object(i.b)("span",{parentName:"span",className:"mtk1"},".yaml")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# examples:")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"apps-v1.Deployment-distributor.yaml")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"v1.ConfigMap-loki.yaml")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"v1.Service-ingester.yaml")))),Object(i.b)("p",null,"If that does not fit your need, you can provide your own pattern using the ",Object(i.b)("inlineCode",{parentName:"p"},"--format")," flag:"),Object(i.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(i.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"tk "),Object(i.b)("span",{parentName:"span",className:"mtk12"},"export"),Object(i.b)("span",{parentName:"span",className:"mtk1"}," promtail environments/promtail --format="),Object(i.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(i.b)("span",{parentName:"span",className:"mtk6"},"{{.metadata.labels.app}}-{{.metadata.name}}-{{.kind}}"),Object(i.b)("span",{parentName:"span",className:"mtk5"},"'")))),Object(i.b)("blockquote",null,Object(i.b)("p",{parentName:"blockquote"},"The syntax is Go ",Object(i.b)("inlineCode",{parentName:"p"},"text/template"),". See ",Object(i.b)("a",{parentName:"p",href:"https://pkg.go.dev/text/template"},"https://pkg.go.dev/text/template"),"\nfor reference.")),Object(i.b)("p",null,"This would include the label named ",Object(i.b)("inlineCode",{parentName:"p"},"app"),", the ",Object(i.b)("inlineCode",{parentName:"p"},"name")," and ",Object(i.b)("inlineCode",{parentName:"p"},"kind")," of the resource:"),Object(i.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":""},Object(i.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},"loki-distributor-Deployment"),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},"loki-loki-ConfigMap"),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},"loki-ingester-Service"))),Object(i.b)("p",null,"You can optionally use the template function ",Object(i.b)("inlineCode",{parentName:"p"},"lower")," for lower-casing fields, e.g. in the above example"),Object(i.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(i.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"... --format="),Object(i.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(i.b)("span",{parentName:"span",className:"mtk6"},"{{.metadata.labels.app}}-{{.metadata.name}}-{{.kind | lower}}"),Object(i.b)("span",{parentName:"span",className:"mtk5"},"'")))),Object(i.b)("p",null,"would yield"),Object(i.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":""},Object(i.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},"loki-distributor-deployment"))),Object(i.b)("p",null,"etc."),Object(i.b)("p",null,"You can also use a different file extension by providing ",Object(i.b)("inlineCode",{parentName:"p"},"--extension='yml'"),", for example."),Object(i.b)("h2",{id:"multiple-environments"},"Multiple environments"),Object(i.b)("p",null,"Tanka can also export multiple inline environments, as showcased in ",Object(i.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/inline-environments#use-case-consistent-inline-environments"},"Use case: consistent inline\nenvironments"),". This follows the same\nprinciples as describe before with the addition that you can also refer to Environment specific data through the ",Object(i.b)("inlineCode",{parentName:"p"},"env"),"\nkeyword."),Object(i.b)("p",null,"For example an export might refer to data from the Environment spec:"),Object(i.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(i.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Format based on environment {{env.<...>}}")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"$ tk "),Object(i.b)("span",{parentName:"span",className:"mtk12"},"export"),Object(i.b)("span",{parentName:"span",className:"mtk1"}," exportDir environments/dev/ \\")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"}," --format "),Object(i.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(i.b)("span",{parentName:"span",className:"mtk6"},"{{env.metadata.labels.cluster}}/{{env.spec.namespace}}//{{.kind}}-{{.metadata.name}}"),Object(i.b)("span",{parentName:"span",className:"mtk5"},"'")))),Object(i.b)("p",null,"Even more advanced use cases allow you to export multiple environments in a single execution:"),Object(i.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(i.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Export multiple environments")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"$ tk "),Object(i.b)("span",{parentName:"span",className:"mtk12"},"export"),Object(i.b)("span",{parentName:"span",className:"mtk1"}," exportDir environments/dev/ environments/qa/")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Recursive export")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"$ tk "),Object(i.b)("span",{parentName:"span",className:"mtk12"},"export"),Object(i.b)("span",{parentName:"span",className:"mtk1"}," exportDir environments/ --recursive")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Recursive export with labelSelector")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"$ tk "),Object(i.b)("span",{parentName:"span",className:"mtk12"},"export"),Object(i.b)("span",{parentName:"span",className:"mtk1"}," exportDir environments/ -r -l team=infra")))),Object(i.b)("h2",{id:"performance-features"},"Performance features"),Object(i.b)("p",null,"When exporting a large amount of environments, jsonnet evaluation can become a bottleneck. To speed up the process, Tanka provides a few optional features."),Object(i.b)("h3",{id:"partial-export-in-a-gitops-context"},"Partial export (in a GitOps context)"),Object(i.b)("p",null,"Given multiple environments, one may want to only export the environments that were modified since the last export. This is enabled by passing both the ",Object(i.b)("inlineCode",{parentName:"p"},"--merge-strategy=replace-envs")," flags."),Object(i.b)("p",null,"When these flags are passed, Tanka will:"),Object(i.b)("ol",null,Object(i.b)("li",{parentName:"ol"},"Delete the manifests that were previously exported by the environments that are being exported. This is done by looking at the ",Object(i.b)("inlineCode",{parentName:"li"},"manifest.json")," file that is generated by Tanka when exporting. The related entries are also removed from the ",Object(i.b)("inlineCode",{parentName:"li"},"manifest.json")," file."),Object(i.b)("li",{parentName:"ol"},"Generate the manifests for the targeted environments into the output directory."),Object(i.b)("li",{parentName:"ol"},"Add in the new manifests entries into the ",Object(i.b)("inlineCode",{parentName:"li"},"manifest.json")," file and re-export it.")),Object(i.b)("h4",{id:"finding-out-which-environments-to-export"},"Finding out which environments to export"),Object(i.b)("p",null,"Tanka provides the ",Object(i.b)("inlineCode",{parentName:"p"},"tk tool importers")," command to figure out which ",Object(i.b)("inlineCode",{parentName:"p"},"main.jsonnet")," need to be re-exported based on what files were modified in a workspace."),Object(i.b)("p",null,"If, for example, the ",Object(i.b)("inlineCode",{parentName:"p"},"lib/my-lib/main.libsonnet")," file was modified, you could run the command like this to find which files to export:"),Object(i.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"console"},Object(i.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},"# Find out which envs to re-export"),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},"$ tk tool importers lib/my-lib/main.libsonnet"),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},"my-repo-path/jsonnet/environments/my-env/main.jsonnet"),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"}),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},"# Re-export the envs"),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},"$ tk export myoutputdir my-repo-path/jsonnet/environments/my-env/main.jsonnet --merge-strategy=replace-envs"))),Object(i.b)("p",null,"Note that deleted environments need special consideration when doing this.\nThe ",Object(i.b)("inlineCode",{parentName:"p"},"tk tool importers")," utility only works with existing files so deleting an environment will result in stale ",Object(i.b)("inlineCode",{parentName:"p"},"manifest.json")," entries and moving an environment will result in manifest conflicts.\nIn order to correctly handle deleted environments, they need to be passed to the export command:"),Object(i.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"console"},Object(i.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},"$ tk export myoutputdir my-repo-path/jsonnet/environments/my-new-env-path/main.jsonnet --merge-strategy=replace-envs \\"),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"}," --merge-deleted-envs my-repo-path/jsonnet/environments/my-old-env-path/main.jsonnet \\"),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"}," --merge-deleted-envs my-repo-path/jsonnet/environments/other-deleted-env-path/main.jsonnet"))),Object(i.b)("h3",{id:"using-a-memory-ballast"},"Using a memory ballast"),Object(i.b)("p",null,Object(i.b)("em",{parentName:"p"},"Read ",Object(i.b)("a",{parentName:"em",href:"https://blog.twitch.tv/en/2019/04/10/go-memory-ballast-how-i-learnt-to-stop-worrying-and-love-the-heap/"},"this blog post")," for more information about memory ballasts.")),Object(i.b)("p",null,"For large environments that load lots of data into memory on evaluation, a memory ballast can dramatically improve performance. This feature is exposed through the ",Object(i.b)("inlineCode",{parentName:"p"},"--mem-ballast-size-bytes")," flag on the export command."),Object(i.b)("p",null,"Anecdotally (Grafana Labs), environments that took around a minute to load were able to load in around 45 secs with a ballast of 5GB (",Object(i.b)("inlineCode",{parentName:"p"},"--mem-ballast-size-bytes=5368709120"),"). Decreasing the ballast size resulted in negative impact on performance, and increasing it more did not result in any noticeable impact."),Object(i.b)("h3",{id:"caching"},"Caching"),Object(i.b)("p",null,"Tanka can also cache the results of the export. This is useful if you often export the same files and want to avoid recomputing them. The cache key is calculated from the main file and all of its transitive imports, so any change to any file possibly used in an environment will invalidate the cache."),Object(i.b)("p",null,"This is configured by two flags:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"--cache-path"),": The local filesystem path where the cache will be stored. The cache is a flat directory of json files (one per environment)."),Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"--cache-envs"),": If exporting multiple environments, this flag can be used to specify, with regexes, which environments to cache. If not specified, all environments are cached.")),Object(i.b)("p",null,"Notes:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Using the cache might be slower than evaluating jsonnet directy. It is only recommended for environments that are very CPU intensive to evaluate."),Object(i.b)("li",{parentName:"ul"},"To use object storage, you can point the ",Object(i.b)("inlineCode",{parentName:"li"},"--cache-path")," to a FUSE mount, such as ",Object(i.b)("a",{parentName:"li",href:"https://github.com/s3fs-fuse/s3fs-fuse"},Object(i.b)("inlineCode",{parentName:"a"},"s3fs")))),Object(i.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==p&&p&&p===Object(p)&&Object.isExtensible(p)&&!Object.prototype.hasOwnProperty.call(p,"__filemeta")&&Object.defineProperty(p,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/exporting.md"}}),p.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-exporting-md-e8c97f5d64e97c22ef1e.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-exporting-md-e8c97f5d64e97c22ef1e.js.map b/pr-preview/pr-1029/component---docs-exporting-md-e8c97f5d64e97c22ef1e.js.map
deleted file mode 100644
index 63f065022..000000000
--- a/pr-preview/pr-1029/component---docs-exporting-md-e8c97f5d64e97c22ef1e.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/exporting.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"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","file":"component---docs-exporting-md-e8c97f5d64e97c22ef1e.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Exporting as YAML`}
\n
{`Tanka provides you with a day-to-day workflow for working with Kubernetes clusters:`}
\n
\n
{`tk show`}{` for quickly checking the YAML representation looks good`}
\n
{`tk diff`}{` to ensure your changes will behave like they should`}
\n
{`tk apply`}{` makes it happen`}
\n
\n
{`However sometimes it can be required to integrate with other tooling that does\nonly support `}{`.yaml`}{` files.`}
{`You can also use a different file extension by providing `}{`--extension='yml'`}{`, for example.`}
\n
{`Multiple environments`}
\n
{`Tanka can also export multiple inline environments, as showcased in `}{`Use case: consistent inline\nenvironments`}{`. This follows the same\nprinciples as describe before with the addition that you can also refer to Environment specific data through the `}{`env`}{`\nkeyword.`}
\n
{`For example an export might refer to data from the Environment spec:`}
\n
{`# Format based on environment {{env.<...>}}`}{`\n`}{`$ tk `}{`export`}{` exportDir environments/dev/ \\\\`}{`\n`}{` --format `}{`'`}{`{{env.metadata.labels.cluster}}/{{env.spec.namespace}}//{{.kind}}-{{.metadata.name}}`}{`'`}
\n
{`Even more advanced use cases allow you to export multiple environments in a single execution:`}
{`When exporting a large amount of environments, jsonnet evaluation can become a bottleneck. To speed up the process, Tanka provides a few optional features.`}
\n
{`Partial export (in a GitOps context)`}
\n
{`Given multiple environments, one may want to only export the environments that were modified since the last export. This is enabled by passing both the `}{`--merge-strategy=replace-envs`}{` flags.`}
\n
{`When these flags are passed, Tanka will:`}
\n \n
{`Delete the manifests that were previously exported by the environments that are being exported. This is done by looking at the `}{`manifest.json`}{` file that is generated by Tanka when exporting. The related entries are also removed from the `}{`manifest.json`}{` file.`}
\n
{`Generate the manifests for the targeted environments into the output directory.`}
\n
{`Add in the new manifests entries into the `}{`manifest.json`}{` file and re-export it.`}
\n \n
{`Finding out which environments to export`}
\n
{`Tanka provides the `}{`tk tool importers`}{` command to figure out which `}{`main.jsonnet`}{` need to be re-exported based on what files were modified in a workspace.`}
\n
{`If, for example, the `}{`lib/my-lib/main.libsonnet`}{` file was modified, you could run the command like this to find which files to export:`}
\n
{`# Find out which envs to re-export`}{`\n`}{`$ tk tool importers lib/my-lib/main.libsonnet`}{`\n`}{`my-repo-path/jsonnet/environments/my-env/main.jsonnet`}{`\n`}{`\n`}{`# Re-export the envs`}{`\n`}{`$ tk export myoutputdir my-repo-path/jsonnet/environments/my-env/main.jsonnet --merge-strategy=replace-envs`}
\n
{`Note that deleted environments need special consideration when doing this.\nThe `}{`tk tool importers`}{` utility only works with existing files so deleting an environment will result in stale `}{`manifest.json`}{` entries and moving an environment will result in manifest conflicts.\nIn order to correctly handle deleted environments, they need to be passed to the export command:`}
{`Read `}{`this blog post`}{` for more information about memory ballasts.`}
\n
{`For large environments that load lots of data into memory on evaluation, a memory ballast can dramatically improve performance. This feature is exposed through the `}{`--mem-ballast-size-bytes`}{` flag on the export command.`}
\n
{`Anecdotally (Grafana Labs), environments that took around a minute to load were able to load in around 45 secs with a ballast of 5GB (`}{`--mem-ballast-size-bytes=5368709120`}{`). Decreasing the ballast size resulted in negative impact on performance, and increasing it more did not result in any noticeable impact.`}
\n
{`Caching`}
\n
{`Tanka can also cache the results of the export. This is useful if you often export the same files and want to avoid recomputing them. The cache key is calculated from the main file and all of its transitive imports, so any change to any file possibly used in an environment will invalidate the cache.`}
\n
{`This is configured by two flags:`}
\n
\n
{`--cache-path`}{`: The local filesystem path where the cache will be stored. The cache is a flat directory of json files (one per environment).`}
\n
{`--cache-envs`}{`: If exporting multiple environments, this flag can be used to specify, with regexes, which environments to cache. If not specified, all environments are cached.`}
\n
\n
{`Notes:`}
\n
\n
{`Using the cache might be slower than evaluating jsonnet directy. It is only recommended for environments that are very CPU intensive to evaluate.`}
\n
{`To use object storage, you can point the `}{`--cache-path`}{` to a FUSE mount, such as `}{`s3fs`}
\n
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-faq-md-5e30ff990ba5de27e68d.js b/pr-preview/pr-1029/component---docs-faq-md-5e30ff990ba5de27e68d.js
deleted file mode 100644
index 159e4ceb0..000000000
--- a/pr-preview/pr-1029/component---docs-faq-md-5e30ff990ba5de27e68d.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{RGCZ:function(e,t,n){"use strict";n.r(t),n.d(t,"_frontmatter",(function(){return l})),n.d(t,"default",(function(){return p}));var a=n("wx14"),o=n("Ff2n"),i=(n("q1tI"),n("7ljp")),r=n("hhGP");n("qKvR");const s=["components"],l={};void 0!==l&&l&&l===Object(l)&&Object.isExtensible(l)&&!Object.prototype.hasOwnProperty.call(l,"__filemeta")&&Object.defineProperty(l,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/faq.md"}});const b={_frontmatter:l},c=r.a;function p(e){let{components:t}=e,n=Object(o.a)(e,s);return Object(i.b)(c,Object(a.a)({},b,n,{components:t,mdxType:"MDXLayout"}),Object(i.b)("h1",{id:"frequently-asked-questions"},"Frequently asked questions"),Object(i.b)("h2",{id:"what-is-jsonnet"},"What is Jsonnet?"),Object(i.b)("p",null,"Jsonnet is a data templating language, originally created by Google."),Object(i.b)("p",null,"It is a superset of JSON, which adds common structures from full programming\nlanguages to data modeling. Because it being a superset of JSON and ultimately\nalways compiling to JSON, it is guaranteed that the output will be valid JSON\n(or YAML)."),Object(i.b)("p",null,"By allowing ",Object(i.b)("em",{parentName:"p"},"functions")," and ",Object(i.b)("em",{parentName:"p"},"imports"),", rich abstraction is possible, even across\nproject boundaries."),Object(i.b)("p",null,"For more, refer to the official documentation: ",Object(i.b)("a",{parentName:"p",href:"https://jsonnet.org/"},"https://jsonnet.org/")),Object(i.b)("h2",{id:"how-is-this-different-from-ksonnet"},"How is this different from ksonnet?"),Object(i.b)("p",null,"Tanka aims to be a fully compatible, drop-in replacement for the main workflow\nof ",Object(i.b)("inlineCode",{parentName:"p"},"ksonnet")," (",Object(i.b)("inlineCode",{parentName:"p"},"show"),", ",Object(i.b)("inlineCode",{parentName:"p"},"diff"),", ",Object(i.b)("inlineCode",{parentName:"p"},"apply"),")."),Object(i.b)("p",null,"In general, both tools are very similar when it comes to how they handle Jsonnet\nand apply to a Kubernetes cluster."),Object(i.b)("p",null,"However, ",Object(i.b)("inlineCode",{parentName:"p"},"ksonnet")," included a rich code generator for establishing a CLI based\nworkflow for editing Kubernetes objects. It also used to manage dependencies\nitself and had a lot of concepts for different levels of abstractions. When\ndesigning Tanka, we felt these add more complexity for the user than they\nprovide additional value. To keep Tanka as minimal as possible, these are ",Object(i.b)("strong",{parentName:"p"},"not\navailable")," and are not likely to be ever added."),Object(i.b)("h2",{id:"what-about-kubecfg-"},"What about kubecfg ?"),Object(i.b)("p",null,"Tanka development has started at the time when kubecfg was a part of\nalready-deprecated ",Object(i.b)("inlineCode",{parentName:"p"},"ksonnet")," project. Although these projects are similar, Tanka\naims to provide continuity for ",Object(i.b)("inlineCode",{parentName:"p"},"ksonnet")," users, whereas ",Object(i.b)("inlineCode",{parentName:"p"},"kubecfg")," is (according\nto the project's ",Object(i.b)("a",{parentName:"p",href:"https://github.com/vmware-archive/kubecfg/blob/main/README.md"},"README.md"),")\nreally just a thin Kubernetes-specific wrapper around jsonnet evaluation."),Object(i.b)("h2",{id:"why-not-helm"},"Why not Helm?"),Object(i.b)("p",null,"Helm relies heavily on ",Object(i.b)("em",{parentName:"p"},"string templating")," ",Object(i.b)("inlineCode",{parentName:"p"},".yaml")," files. We feel this is the\nwrong way to approach the absence of abstractions inside of ",Object(i.b)("inlineCode",{parentName:"p"},"yaml"),", because the\ntemplating part of the application has no idea of the structure and syntax of\nyaml."),Object(i.b)("p",null,"This makes debugging very hard. Furthermore, ",Object(i.b)("inlineCode",{parentName:"p"},"helm")," is not able to provide an\nadequate solution for edge cases. If I wanted to set some parameters that are\nnot already implemented by the Chart, I have no choice but to modify the Chart\nfirst."),Object(i.b)("p",null,"Jsonnet on the other hand got you covered by supporting mixing (patching,\ndeep-merging) objects on top of the libraries output if required."))}void 0!==p&&p&&p===Object(p)&&Object.isExtensible(p)&&!Object.prototype.hasOwnProperty.call(p,"__filemeta")&&Object.defineProperty(p,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/faq.md"}}),p.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-faq-md-5e30ff990ba5de27e68d.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-faq-md-5e30ff990ba5de27e68d.js.map b/pr-preview/pr-1029/component---docs-faq-md-5e30ff990ba5de27e68d.js.map
deleted file mode 100644
index a143ac748..000000000
--- a/pr-preview/pr-1029/component---docs-faq-md-5e30ff990ba5de27e68d.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/faq.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"wRAMaA,EAAe,QAAG,IAAAA,UAAAC,OAAAD,IAAAC,OAAAC,aAAAF,KAAAC,OAAAE,UAAAC,eAAAC,KAAAL,EAAA,eAAAC,OAAAK,eAAAN,EAAA,cAAAO,cAAA,EAAAC,MAAA,CAAAC,KAAA,eAAAC,SAAA,iBAC/B,MAAMC,EAAc,CAClBX,gBAEIY,EAAYC,IACH,SAASC,EAAUC,GAG/B,IAHgC,WACjCC,GAEDD,EADIE,EAAKC,YAAAH,EAAAI,GAER,OAAOC,YAACR,EAASS,YAAA,GAAKV,EAAiBM,EAAK,CAAED,WAAYA,EAAYM,QAAQ,cAG5EF,YAAA,MACE,GAAM,8BAA4B,8BAEpCA,YAAA,MACE,GAAM,mBAAiB,oBAEzBA,YAAA,iFACAA,YAAA,oQAIAA,YAAA,wBAAmBA,YAAA,MAAIG,WAAW,KAAG,aAAmB,QAASH,YAAA,MAAIG,WAAW,KAAG,WAAiB,oEAEpGH,YAAA,2DAAsDA,YAAA,KAAGG,WAAW,IAChE,KAAQ,wBAAsB,yBAElCH,YAAA,MACE,GAAM,sCAAoC,uCAE5CA,YAAA,+FACCA,YAAA,cAAYG,WAAW,KAAG,WAAyB,KAAMH,YAAA,cAAYG,WAAW,KAAG,QAAsB,KAAMH,YAAA,cAAYG,WAAW,KAAG,QAAsB,KAAMH,YAAA,cAAYG,WAAW,KAAG,SAAuB,MACvNH,YAAA,iIAEAA,YAAA,qBAAgBA,YAAA,cAAYG,WAAW,KAAG,WAAyB,iXAIKH,YAAA,UAAQG,WAAW,KAAG,kBAC9E,yCAChBH,YAAA,MACE,GAAM,uBAAqB,wBAE7BA,YAAA,qGACiBA,YAAA,cAAYG,WAAW,KAAG,WAAyB,wFACvCH,YAAA,cAAYG,WAAW,KAAG,WAAyB,mBAAoBH,YAAA,cAAYG,WAAW,KAAG,WAAyB,oCACxIH,YAAA,KAAGG,WAAW,IACzB,KAAQ,iEAA+D,aACrD,gFAEtBH,YAAA,MACE,GAAM,gBAAc,iBAEtBA,YAAA,mCAA8BA,YAAA,MAAIG,WAAW,KAAG,qBAA2B,IAAKH,YAAA,cAAYG,WAAW,KAAG,SAAuB,4FACvEH,YAAA,cAAYG,WAAW,KAAG,QAAsB,uGAG1GH,YAAA,yDAAoDA,YAAA,cAAYG,WAAW,KAAG,QAAsB,qMAIpGH,YAAA,+JAIH,IAAAN,UAAAb,OAAAa,IAAAb,OAAAC,aAAAY,KAAAb,OAAAE,UAAAC,eAAAC,KAAAS,EAAA,eAAAb,OAAAK,eAAAQ,EAAA,cAAAP,cAAA,EAAAC,MAAA,CAAAC,KAAA,aAAAC,SAAA,iBAEDI,EAAWU,gBAAiB","file":"component---docs-faq-md-5e30ff990ba5de27e68d.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Frequently asked questions`}
\n
{`What is Jsonnet?`}
\n
{`Jsonnet is a data templating language, originally created by Google.`}
\n
{`It is a superset of JSON, which adds common structures from full programming\nlanguages to data modeling. Because it being a superset of JSON and ultimately\nalways compiling to JSON, it is guaranteed that the output will be valid JSON\n(or YAML).`}
\n
{`By allowing `}{`functions`}{` and `}{`imports`}{`, rich abstraction is possible, even across\nproject boundaries.`}
{`Tanka aims to be a fully compatible, drop-in replacement for the main workflow\nof `}{`ksonnet`}{` (`}{`show`}{`, `}{`diff`}{`, `}{`apply`}{`).`}
\n
{`In general, both tools are very similar when it comes to how they handle Jsonnet\nand apply to a Kubernetes cluster.`}
\n
{`However, `}{`ksonnet`}{` included a rich code generator for establishing a CLI based\nworkflow for editing Kubernetes objects. It also used to manage dependencies\nitself and had a lot of concepts for different levels of abstractions. When\ndesigning Tanka, we felt these add more complexity for the user than they\nprovide additional value. To keep Tanka as minimal as possible, these are `}{`not\navailable`}{` and are not likely to be ever added.`}
\n
{`What about kubecfg ?`}
\n
{`Tanka development has started at the time when kubecfg was a part of\nalready-deprecated `}{`ksonnet`}{` project. Although these projects are similar, Tanka\naims to provide continuity for `}{`ksonnet`}{` users, whereas `}{`kubecfg`}{` is (according\nto the project's `}{`README.md`}{`)\nreally just a thin Kubernetes-specific wrapper around jsonnet evaluation.`}
\n
{`Why not Helm?`}
\n
{`Helm relies heavily on `}{`string templating`}{` `}{`.yaml`}{` files. We feel this is the\nwrong way to approach the absence of abstractions inside of `}{`yaml`}{`, because the\ntemplating part of the application has no idea of the structure and syntax of\nyaml.`}
\n
{`This makes debugging very hard. Furthermore, `}{`helm`}{` is not able to provide an\nadequate solution for edge cases. If I wanted to set some parameters that are\nnot already implemented by the Chart, I have no choice but to modify the Chart\nfirst.`}
\n
{`Jsonnet on the other hand got you covered by supporting mixing (patching,\ndeep-merging) objects on top of the libraries output if required.`}
\n\n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-formatting-md-0886509974e2523e2e68.js b/pr-preview/pr-1029/component---docs-formatting-md-0886509974e2523e2e68.js
deleted file mode 100644
index a78b145d5..000000000
--- a/pr-preview/pr-1029/component---docs-formatting-md-0886509974e2523e2e68.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{zzAL:function(e,t,a){"use strict";a.r(t),a.d(t,"_frontmatter",(function(){return l})),a.d(t,"default",(function(){return p}));var n=a("wx14"),m=a("Ff2n"),r=(a("q1tI"),a("7ljp")),s=a("hhGP");a("qKvR");const c=["components"],l={};void 0!==l&&l&&l===Object(l)&&Object.isExtensible(l)&&!Object.prototype.hasOwnProperty.call(l,"__filemeta")&&Object.defineProperty(l,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/formatting.md"}});const o={_frontmatter:l},i=s.a;function p(e){let{components:t}=e,a=Object(m.a)(e,c);return Object(r.b)(i,Object(n.a)({},o,a,{components:t,mdxType:"MDXLayout"}),Object(r.b)("h1",{id:"file-formatting"},"File Formatting"),Object(r.b)("p",null,"Tanka supports formatting for all ",Object(r.b)("inlineCode",{parentName:"p"},"jsonnet")," and ",Object(r.b)("inlineCode",{parentName:"p"},"libsonnet")," files using the ",Object(r.b)("inlineCode",{parentName:"p"},"tk fmt")," command."),Object(r.b)("p",null,"By default, the command excludes all ",Object(r.b)("inlineCode",{parentName:"p"},"vendor")," directories."),Object(r.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(r.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(r.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(r.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Run for current and child directories. Run this in the root of the project to format all your files.")),"\n",Object(r.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(r.b)("span",{parentName:"span",className:"mtk1"},"tk fmt "),Object(r.b)("span",{parentName:"span",className:"mtk9"},".")),"\n",Object(r.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(r.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(r.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(r.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Format a single file (myFile.jsonnet)")),"\n",Object(r.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(r.b)("span",{parentName:"span",className:"mtk1"},"tk fmt myFile.jsonnet")),"\n",Object(r.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(r.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(r.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(r.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Use the `-t` tag to test (Dry run).")),"\n",Object(r.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(r.b)("span",{parentName:"span",className:"mtk1"},"tk fmt -t myFile.jsonnet")),"\n",Object(r.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(r.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(r.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(r.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Format using verbose mode.")),"\n",Object(r.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(r.b)("span",{parentName:"span",className:"mtk1"},"tk fmt -v "),Object(r.b)("span",{parentName:"span",className:"mtk9"},".")))),Object(r.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==p&&p&&p===Object(p)&&Object.isExtensible(p)&&!Object.prototype.hasOwnProperty.call(p,"__filemeta")&&Object.defineProperty(p,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/formatting.md"}}),p.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-formatting-md-0886509974e2523e2e68.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-formatting-md-0886509974e2523e2e68.js.map b/pr-preview/pr-1029/component---docs-formatting-md-0886509974e2523e2e68.js.map
deleted file mode 100644
index 9e7e7d940..000000000
--- a/pr-preview/pr-1029/component---docs-formatting-md-0886509974e2523e2e68.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/formatting.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"yRAMaA,EAAe,QAAG,IAAAA,UAAAC,OAAAD,IAAAC,OAAAC,aAAAF,KAAAC,OAAAE,UAAAC,eAAAC,KAAAL,EAAA,eAAAC,OAAAK,eAAAN,EAAA,cAAAO,cAAA,EAAAC,MAAA,CAAAC,KAAA,eAAAC,SAAA,wBAC/B,MAAMC,EAAc,CAClBX,gBAEIY,EAAYC,IACH,SAASC,EAAUC,GAG/B,IAHgC,WACjCC,GAEDD,EADIE,EAAKC,YAAAH,EAAAI,GAER,OAAOC,YAACR,EAASS,YAAA,GAAKV,EAAiBM,EAAK,CAAED,WAAYA,EAAYM,QAAQ,cAG5EF,YAAA,MACE,GAAM,mBAAiB,mBAEzBA,YAAA,8CAAyCA,YAAA,cAAYG,WAAW,KAAG,WAAyB,QAASH,YAAA,cAAYG,WAAW,KAAG,aAA2B,oBAAqBH,YAAA,cAAYG,WAAW,KAAG,UAAwB,aACjOH,YAAA,iDAA4CA,YAAA,cAAYG,WAAW,KAAG,UAAwB,iBAC9FH,YAAA,OACE,UAAa,yCACb,gBAAiB,QAChBA,YAAA,QAAMG,WAAW,MAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,aAAW,2GACiG,KACnIH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,WACAH,YAAA,QAAMG,WAAW,OACpC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,UACE,KACzBH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,aAAW,4CACkC,KACpEH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,0BACqB,KAClDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,UACE,KACzBH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,aAAW,0CACkC,KACpEH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,6BACwB,KACrDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,UACE,KACzBH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,aAAW,iCACuB,KACzDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,QAAM,QAG3BH,YAAA,SACE,UAAa,2BAAyB,glCA6B3C,IAAAN,UAAAb,OAAAa,IAAAb,OAAAC,aAAAY,KAAAb,OAAAE,UAAAC,eAAAC,KAAAS,EAAA,eAAAb,OAAAK,eAAAQ,EAAA,cAAAP,cAAA,EAAAC,MAAA,CAAAC,KAAA,aAAAC,SAAA,wBAEDI,EAAWU,gBAAiB","file":"component---docs-formatting-md-0886509974e2523e2e68.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`File Formatting`}
\n
{`Tanka supports formatting for all `}{`jsonnet`}{` and `}{`libsonnet`}{` files using the `}{`tk fmt`}{` command.`}
\n
{`By default, the command excludes all `}{`vendor`}{` directories.`}
\n
{`# Run for current and child directories. Run this in the root of the project to format all your files.`}{`\n`}{`tk fmt `}{`.`}{`\n`}{`\n`}{`# Format a single file (myFile.jsonnet)`}{`\n`}{`tk fmt myFile.jsonnet`}{`\n`}{`\n`}{`# Use the \\`-t\\` tag to test (Dry run).`}{`\n`}{`tk fmt -t myFile.jsonnet`}{`\n`}{`\n`}{`# Format using verbose mode.`}{`\n`}{`tk fmt -v `}{`.`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-garbage-collection-md-9e3ddba81e297bbaee58.js b/pr-preview/pr-1029/component---docs-garbage-collection-md-9e3ddba81e297bbaee58.js
deleted file mode 100644
index 7b9a0a9af..000000000
--- a/pr-preview/pr-1029/component---docs-garbage-collection-md-9e3ddba81e297bbaee58.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{GAVx:function(e,t,a){"use strict";a.r(t),a.d(t,"_frontmatter",(function(){return m})),a.d(t,"default",(function(){return b}));var n=a("wx14"),r=a("Ff2n"),o=(a("q1tI"),a("7ljp")),l=a("hhGP");a("qKvR");const c=["components"],m={};void 0!==m&&m&&m===Object(m)&&Object.isExtensible(m)&&!Object.prototype.hasOwnProperty.call(m,"__filemeta")&&Object.defineProperty(m,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/garbage-collection.md"}});const i={_frontmatter:m},s=l.a;function b(e){let{components:t}=e,a=Object(r.a)(e,c);return Object(o.b)(s,Object(n.a)({},i,a,{components:t,mdxType:"MDXLayout"}),Object(o.b)("h1",{id:"garbage-collection"},"Garbage collection"),Object(o.b)("p",null,"Tanka can automatically delete resources from your cluster once you remove them\nfrom Jsonnet."),Object(o.b)("blockquote",null,Object(o.b)("p",{parentName:"blockquote"},Object(o.b)("strong",{parentName:"p"},"Note:")," This feature is ",Object(o.b)("strong",{parentName:"p"},"experimental"),". Please report problems at ",Object(o.b)("a",{parentName:"p",href:"https://github.com/grafana/tanka/issues"},"https://github.com/grafana/tanka/issues"),".")),Object(o.b)("p",null,"To accomplish this, it appends the ",Object(o.b)("inlineCode",{parentName:"p"},"tanka.dev/environment: ")," label to each created\nresource. This is used to identify those which are missing from the local state in the\nfuture."),Object(o.b)("blockquote",null,Object(o.b)("p",{parentName:"blockquote"},Object(o.b)("strong",{parentName:"p"},"Note:")," The label value changed from the ",Object(o.b)("inlineCode",{parentName:"p"},"")," to a ",Object(o.b)("inlineCode",{parentName:"p"},"")," in v0.15.0.")),Object(o.b)("p",null,"Because the label causes a ",Object(o.b)("inlineCode",{parentName:"p"},"diff")," for every single object in your cluster and\nnot everybody wants this, it needs to be explicitly enabled. To do so, add the\nfollowing field to your ",Object(o.b)("inlineCode",{parentName:"p"},"spec.json"),":"),Object(o.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"diff"},Object(o.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"},' "spec": {')),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(o.b)("span",{parentName:"span",className:"mtk6"},' "injectLabels": true,')),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(o.b)("p",null,"Once added, run a ",Object(o.b)("inlineCode",{parentName:"p"},"tk apply"),", make sure the label is actually added and confirm\nby typing ",Object(o.b)("inlineCode",{parentName:"p"},"yes"),"."),Object(o.b)("p",null,"From now on, you can use ",Object(o.b)("inlineCode",{parentName:"p"},"tk prune")," to remove old resources from your cluster."),Object(o.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==b&&b&&b===Object(b)&&Object.isExtensible(b)&&!Object.prototype.hasOwnProperty.call(b,"__filemeta")&&Object.defineProperty(b,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/garbage-collection.md"}}),b.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-garbage-collection-md-9e3ddba81e297bbaee58.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-garbage-collection-md-9e3ddba81e297bbaee58.js.map b/pr-preview/pr-1029/component---docs-garbage-collection-md-9e3ddba81e297bbaee58.js.map
deleted file mode 100644
index dc3bd06a3..000000000
--- a/pr-preview/pr-1029/component---docs-garbage-collection-md-9e3ddba81e297bbaee58.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/garbage-collection.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"yRAMaA,EAAe,QAAG,IAAAA,UAAAC,OAAAD,IAAAC,OAAAC,aAAAF,KAAAC,OAAAE,UAAAC,eAAAC,KAAAL,EAAA,eAAAC,OAAAK,eAAAN,EAAA,cAAAO,cAAA,EAAAC,MAAA,CAAAC,KAAA,eAAAC,SAAA,gCAC/B,MAAMC,EAAc,CAClBX,gBAEIY,EAAYC,IACH,SAASC,EAAUC,GAG/B,IAHgC,WACjCC,GAEDD,EADIE,EAAKC,YAAAH,EAAAI,GAER,OAAOC,YAACR,EAASS,YAAA,GAAKV,EAAiBM,EAAK,CAAED,WAAYA,EAAYM,QAAQ,cAG5EF,YAAA,MACE,GAAM,sBAAoB,sBAE5BA,YAAA,2GAEAA,YAAA,kBACEA,YAAA,KAAGG,WAAW,cAAaH,YAAA,UAAQG,WAAW,KAAG,SAAmB,oBAAqBH,YAAA,UAAQG,WAAW,KAAG,gBAA0B,+BAAgCH,YAAA,KAAGG,WAAW,IACnL,KAAQ,2CAAyC,2CACD,MAEtDH,YAAA,+CAA0CA,YAAA,cAAYG,WAAW,KAAG,iCAA+C,2HAGnHH,YAAA,kBACEA,YAAA,KAAGG,WAAW,cAAaH,YAAA,UAAQG,WAAW,KAAG,SAAmB,qCAAsCH,YAAA,cAAYG,WAAW,KAAG,UAAwB,SAAUH,YAAA,cAAYG,WAAW,KAAG,UAAwB,iBAE1NH,YAAA,uCAAkCA,YAAA,cAAYG,WAAW,KAAG,QAAsB,yJAE5DH,YAAA,cAAYG,WAAW,KAAG,aAA2B,KAC3EH,YAAA,OACE,UAAa,yCACb,gBAAiB,QAChBA,YAAA,QAAMG,WAAW,MAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACW,KACxCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,8BACyB,KACtDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACG,KAChCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QAE3BH,YAAA,8BAAyBA,YAAA,cAAYG,WAAW,KAAG,YAA0B,kEACrEH,YAAA,cAAYG,WAAW,KAAG,OAAqB,KACvDH,YAAA,qCAAgCA,YAAA,cAAYG,WAAW,KAAG,YAA0B,+CAEpFH,YAAA,SACE,UAAa,2BAAyB,glCA6B3C,IAAAN,UAAAb,OAAAa,IAAAb,OAAAC,aAAAY,KAAAb,OAAAE,UAAAC,eAAAC,KAAAS,EAAA,eAAAb,OAAAK,eAAAQ,EAAA,cAAAP,cAAA,EAAAC,MAAA,CAAAC,KAAA,aAAAC,SAAA,gCAEDI,EAAWU,gBAAiB","file":"component---docs-garbage-collection-md-9e3ddba81e297bbaee58.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Garbage collection`}
\n
{`Tanka can automatically delete resources from your cluster once you remove them\nfrom Jsonnet.`}
{`To accomplish this, it appends the `}{`tanka.dev/environment: `}{` label to each created\nresource. This is used to identify those which are missing from the local state in the\nfuture.`}
\n
\n
{`Note:`}{` The label value changed from the `}{``}{` to a `}{``}{` in v0.15.0.`}
\n
\n
{`Because the label causes a `}{`diff`}{` for every single object in your cluster and\nnot everybody wants this, it needs to be explicitly enabled. To do so, add the\nfollowing field to your `}{`spec.json`}{`:`}
{`Once added, run a `}{`tk apply`}{`, make sure the label is actually added and confirm\nby typing `}{`yes`}{`.`}
\n
{`From now on, you can use `}{`tk prune`}{` to remove old resources from your cluster.`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-helm-mdx-4136d6f0aed36816861f.js b/pr-preview/pr-1029/component---docs-helm-mdx-4136d6f0aed36816861f.js
deleted file mode 100644
index 477b70b51..000000000
--- a/pr-preview/pr-1029/component---docs-helm-mdx-4136d6f0aed36816861f.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{YJCz:function(e,a,t){"use strict";t.r(a),t.d(a,"_frontmatter",(function(){return l})),t.d(a,"default",(function(){return i}));var s=t("wx14"),n=t("Ff2n"),m=(t("q1tI"),t("7ljp")),c=t("hhGP");t("qKvR");const p=["components"],l={};void 0!==l&&l&&l===Object(l)&&Object.isExtensible(l)&&!Object.prototype.hasOwnProperty.call(l,"__filemeta")&&Object.defineProperty(l,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/helm.mdx"}});const b={_frontmatter:l},r=c.a;function i(e){let{components:a}=e,t=Object(n.a)(e,p);return Object(m.b)(r,Object(s.a)({},b,t,{components:a,mdxType:"MDXLayout"}),Object(m.b)("h1",{id:"helm-support"},"Helm Support"),Object(m.b)("p",null,"The ",Object(m.b)("a",{parentName:"p",href:"https://helm.sh"},"Helm")," project is the biggest ecosystem of high quality,\nwell maintained application definitions for Kubernetes."),Object(m.b)("p",null,"Even though Grafana Tanka uses the ",Object(m.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/jsonnet/overview"},"Jsonnet language")," for\nresource definition, you can still consume Helm resources, as described below."),Object(m.b)("h2",{id:"consuming-helm-charts-from-jsonnet"},"Consuming Helm Charts from Jsonnet"),Object(m.b)("p",null,"Helm support is provided using the\n",Object(m.b)("a",{parentName:"p",href:"https://github.com/grafana/jsonnet-libs/tree/master/tanka-util"},Object(m.b)("inlineCode",{parentName:"a"},"github.com/grafana/jsonnet-libs/tanka-util")),"\nlibrary. Install it with:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"jb install github.com/grafana/jsonnet-libs/tanka-util")))),Object(m.b)("p",null,"The following example shows how to extract the individual resources of the\n",Object(m.b)("a",{parentName:"p",href:"https://artifacthub.io/packages/helm/grafana/grafana"},Object(m.b)("inlineCode",{parentName:"a"},"grafana"))," Helm Chart:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," tanka "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"github.com/grafana/jsonnet-libs/tanka-util/main.libsonnet"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},";")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," helm "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," tanka.helm."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk9"},"std.thisFile"),Object(m.b)("span",{parentName:"span",className:"mtk1"},");")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," helm."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"template"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"grafana"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},", "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"./charts/grafana"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},", {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," namespace: "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"monitoring"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," values: {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," persistence: { enabled: "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"true"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," })")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"The Chart itself is required to be ",Object(m.b)("a",{parentName:"p",href:"#vendoring-helm-charts"},"vendored at a relative\npath"),", in this case ",Object(m.b)("inlineCode",{parentName:"p"},"./charts/grafana"),"."),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"Important:")," You MUST include the ",Object(m.b)("inlineCode",{parentName:"p"},".new(std.thisFile)")," part in the import.\nThis is what tells Tanka where you actually call ",Object(m.b)("inlineCode",{parentName:"p"},"helm.template()")," from, so it\ncan find your vendored Charts.")),Object(m.b)("br",null),Object(m.b)("p",null,"Once invoked, the ",Object(m.b)("inlineCode",{parentName:"p"},"$.grafana")," key holds the individual resources of Helm Chart as\na regular Jsonnet object that looks roughly like so:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"cluster_role_binding_grafana_clusterrolebinding:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {"),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"},")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"cluster_role_grafana_clusterrole:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {"),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"},")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"config_map_grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {"),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"},")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"config_map_grafana_test:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {"),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"},")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"deployment_grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {"),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"},")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// ...")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"Above can be ",Object(m.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/tutorial/environments#patching"},"manipulated")," in the same way as any other Jsonnet data."),Object(m.b)("p",null,"Under the hood, this feature invokes the\n",Object(m.b)("a",{parentName:"p",href:"https://helm.sh/docs/helm/helm_template/"},Object(m.b)("inlineCode",{parentName:"a"},"helm template"))," CLI command.\nThe following options control how the command is invoked:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"...")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," helm."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"template"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"grafana"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},", "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"./charts/grafana"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},", {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," namespace: "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"monitoring"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," values: {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," persistence: { enabled: "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"true"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Equivalent to: --api-versions v1 --api-versions apps/v1")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," apiVersions: ["),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'v1'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},", "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'apps/v1'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"]")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Equivalent to: --kube-version v1.20.0")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," kubeVersion: "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'v1.20.0'")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Equivalent to: --no-hooks")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," noHooks: "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"true"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"Tanka will install Custom Resource Definitions (CRDs) automatically, if the\nHelm Chart requires them and ships them in ",Object(m.b)("inlineCode",{parentName:"p"},"crds/"),". This is equivalent to ",Object(m.b)("inlineCode",{parentName:"p"},"helm\ntemplate --include-crds"),". This can be disabled using ",Object(m.b)("inlineCode",{parentName:"p"},"includeCrds: false"),":"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," helm."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"template"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"grafana"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},", "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"./charts/grafana"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},", {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," includeCrds: "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"false")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," })")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("h2",{id:"vendoring-helm-charts"},"Vendoring Helm Charts"),Object(m.b)("p",null,"Tanka, like Jsonnet, is hermetic. It ",Object(m.b)("strong",{parentName:"p"},"always yields the same\nresources")," when the project is\nstrictly self-contained."),Object(m.b)("p",null,"Helm however keeps Charts and repository configuration somewhere around\n",Object(m.b)("inlineCode",{parentName:"p"},"~/.config/helm"),", which violates above requirement."),Object(m.b)("p",null,"To comply with this requirement, Tanka expects Helm Charts to be found ",Object(m.b)("strong",{parentName:"p"},"inside the\nbounds of a project"),". This means, you MUST put your Charts ",Object(m.b)("strong",{parentName:"p"},"somewhere next to\nthe file that calls ",Object(m.b)("inlineCode",{parentName:"strong"},"helm.template()")),", so that it can be referred to using a\nrelative path."),Object(m.b)("h3",{id:"vendor-location"},"Vendor Location"),Object(m.b)("p",null,"Where to actually put them inside the project is up to you, but keep in mind you\nneed to refer to them using relative paths."),Object(m.b)("p",null,"We recommend always writing libraries that wrap the actual Helm Chart, so the\nconsumer does not need to be aware of it. Whether you put these into your local ",Object(m.b)("inlineCode",{parentName:"p"},"lib/")," directory or\npublish and vendor them into the ",Object(m.b)("inlineCode",{parentName:"p"},"vendor/")," directory is up to you."),Object(m.b)("p",null,"A library usually looks like this:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":""},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"}," /jsonnetfile.json"),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"}," /main.libsonnet"))),Object(m.b)("p",null,"When adopting Helm inside it, we recommend vendoring at the top level, as such:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"diff"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," /jsonnetfile.json")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," /main.libsonnet")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," /charts")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," /charts/")))),Object(m.b)("p",null,"This way, you can refer to the charts as ",Object(m.b)("inlineCode",{parentName:"p"},"./charts/")," from inside\n",Object(m.b)("inlineCode",{parentName:"p"},"main.libsonnet"),". By keeping the chart as close to the consumer as possible, the\nlibrary is kept portable."),Object(m.b)("h3",{id:"charttool"},"Charttool"),Object(m.b)("p",null,"Helm does not make vendoring incredibly easy by itself. ",Object(m.b)("inlineCode",{parentName:"p"},"helm pull")," provides the\nrequired plumbing, but it does not record its actions in a reproducible manner."),Object(m.b)("p",null,"Therefore, Tanka ships a special utility at ",Object(m.b)("inlineCode",{parentName:"p"},"tk tool charts"),", which automates\n",Object(m.b)("inlineCode",{parentName:"p"},"helm pull"),":"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Create a chartfile.yaml in the current directory, e.g. in lib/myLibrary")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ tk tool charts init")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Install the MySQL chart at version 1.6.7 from the stable repository")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ tk tool charts add stable/mysql@1.6.7")))),Object(m.b)("p",null,Object(m.b)("strong",{parentName:"p"},"Adding charts:")," To add a chart, use the following:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ tk tool charts add "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"repo"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"/"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"@"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"version"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">")))),Object(m.b)("p",null,"This will also call ",Object(m.b)("inlineCode",{parentName:"p"},"tk tool charts vendor"),", so that the ",Object(m.b)("inlineCode",{parentName:"p"},"charts/")," directory is updated."),Object(m.b)("br",null),Object(m.b)("p",null,Object(m.b)("strong",{parentName:"p"},"Adding Repositories:"),"\nBy default, the ",Object(m.b)("inlineCode",{parentName:"p"},"stable")," repository is automatically set up for you. If you wish\nto add another repository, you can use the ",Object(m.b)("inlineCode",{parentName:"p"},"add-repo")," command:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Add the official Grafana repository")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ tk tool charts add-repo grafana https://grafana.github.io/helm-charts")))),Object(m.b)("p",null,"Another way is to modify ",Object(m.b)("inlineCode",{parentName:"p"},"chartfile.yaml")," directly:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"diff"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"version: 1")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"repositories:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," - name: stable")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," url: https://charts.helm.sh/stable")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," - name: grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," url: https://grafana.github.io/helm-charts")))),Object(m.b)("p",null,Object(m.b)("strong",{parentName:"p"},"Installing multiple versions of the same chart:"),"\nIf you wish to install multiple versions of the same chart, you can write them to a specific directory.",Object(m.b)("br",{parentName:"p"}),"\n","You can do so with a ",Object(m.b)("inlineCode",{parentName:"p"},":")," suffix in the ",Object(m.b)("inlineCode",{parentName:"p"},"add")," command, or by modifying the chartfile manually."),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"tk tool charts add stable/mysql@1.6.7:1.6.7")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"tk tool charts add stable/mysql@1.6.8:1.6.8")))),Object(m.b)("p",null,"The resulting chartfile will look like this:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"yaml"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"version"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"1")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"directory"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"charts")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"repositories"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"stable")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"url"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"https://charts.helm.sh/stable")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"requires"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"chart"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"stable/mysql")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"directory"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"1.6.7")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"version"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"1.6.7")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"chart"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"stable/mysql")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"directory"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"1.6.8")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"version"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"1.6.8")))),Object(m.b)("p",null,Object(m.b)("strong",{parentName:"p"},"Install charts from chartfile:")," To install charts from an existing chartfile, use the following:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ tk tool charts vendor")))),Object(m.b)("p",null,"Optionally, you can also pass the ",Object(m.b)("inlineCode",{parentName:"p"},"--prune")," flag to remove vendored charts that are no longer in the chartfile."),Object(m.b)("h4",{id:"oci-registry-support"},"OCI Registry Support"),Object(m.b)("p",null,"Tanka supports pulling charts from OCI registries. To use one, the chart name must be split into two parts: the registry and the chart name. "),Object(m.b)("p",null,"As example, if you wanted to pull the ",Object(m.b)("inlineCode",{parentName:"p"},"oci://public.ecr.aws/karpenter/karpenter:v0.27.3")," image, your chartfile would look like this:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"yaml"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"version"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"1")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"directory"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"charts")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"repositories"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"karpenter")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"url"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"oci://public.ecr.aws/karpenter")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"requires"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"chart"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"karpenter/karpenter")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"directory"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"v0.27.3")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"version"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"v0.27.3")))),Object(m.b)("p",null,Object(m.b)("em",{parentName:"p"},"Registry login is not supported yet.")),Object(m.b)("h2",{id:"troubleshooting"},"Troubleshooting"),Object(m.b)("h3",{id:"helm-executable-missing"},"Helm executable missing"),Object(m.b)("p",null,"Helm support in Tanka requires the ",Object(m.b)("inlineCode",{parentName:"p"},"helm")," binary installed on your system and\navailable on the ",Object(m.b)("inlineCode",{parentName:"p"},"$PATH"),". If Helm is not installed, you will see this error message:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":""},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},'evaluating jsonnet: RUNTIME ERROR: Expanding Helm Chart: exec: "helm": executable file not found in $PATH'))),Object(m.b)("p",null,"To solve this, you need to ",Object(m.b)("a",{parentName:"p",href:"https://helm.sh/docs/intro/install/"},"install Helm"),".\nIf you cannot install it system-wide, you can point Tanka at your executable\nusing ",Object(m.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/env-vars#tanka_helm_path"},Object(m.b)("inlineCode",{parentName:"a"},"TANKA_HELM_PATH"))),Object(m.b)("h3",{id:"optscalledfrom-unset"},"opts.calledFrom unset"),Object(m.b)("p",null,"This occurs, when Tanka was not told where it ",Object(m.b)("inlineCode",{parentName:"p"},"helm.template()")," was invoked\nfrom. This most likely means you didn't call ",Object(m.b)("inlineCode",{parentName:"p"},"new(std.thisFile)")," when importing ",Object(m.b)("inlineCode",{parentName:"p"},"tanka-util"),":"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," tanka "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"github.com/grafana/jsonnet-libs/tanka-util/main.libsonnet"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},";")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," helm "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," tanka.helm."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk9"},"std.thisFile"),Object(m.b)("span",{parentName:"span",className:"mtk1"},");")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ↑ This is important")))),Object(m.b)("h3",{id:"failed-to-find-chart"},"Failed to find Chart"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":""},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},"helmTemplate: Failed to find a Chart at 'stable/grafana': No such file or directory."),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},"helmTemplate: Failed to find a Chart at '/home/user/stuff/tanka/environments/default/grafana': No such file or directory."))),Object(m.b)("p",null,"Tanka failed to locate your Helm chart on the filesystem. It looked at the\nrelative path you provided in ",Object(m.b)("inlineCode",{parentName:"p"},"helm.template()"),", starting from the directory of\nthe file you called ",Object(m.b)("inlineCode",{parentName:"p"},"helm.template()")," from."),Object(m.b)("p",null,"Please check there is actually a valid Helm chart at this place. Referring to\ncharts as ",Object(m.b)("inlineCode",{parentName:"p"},"/")," is disallowed by design."),Object(m.b)("h3",{id:"two-resources-share-the-same-name"},"Two resources share the same name"),Object(m.b)("p",null,"To make customization easier, ",Object(m.b)("inlineCode",{parentName:"p"},"helm.template()")," returns the resources not as the\nlist it receives from Helm, but instead converts this into an object."),Object(m.b)("p",null,"For the indexing key it uses ",Object(m.b)("inlineCode",{parentName:"p"},"kind_name")," by default. In some rare cases, this\nmight not be enough to distinguish between two resources, namely when the same\nresource exists in two namespaces."),Object(m.b)("p",null,"To handle this, pass a custom name format, e.g. to also include the namespace:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk10"},"custom:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," helm."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"template"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'foo'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},", "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'./charts/foo'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},", {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," nameFormat: "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'\'{{ print .namespace "_" .kind "_" .metadata.name | snakecase }}\'')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"})")))),Object(m.b)("p",null,"The literal default format used is ",Object(m.b)("inlineCode",{parentName:"p"},'{{ print .kind "_" .metadata.name | snakecase }}')),Object(m.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==i&&i&&i===Object(i)&&Object.isExtensible(i)&&!Object.prototype.hasOwnProperty.call(i,"__filemeta")&&Object.defineProperty(i,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/helm.mdx"}}),i.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-helm-mdx-4136d6f0aed36816861f.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-helm-mdx-4136d6f0aed36816861f.js.map b/pr-preview/pr-1029/component---docs-helm-mdx-4136d6f0aed36816861f.js.map
deleted file mode 100644
index 735ed6c5b..000000000
--- a/pr-preview/pr-1029/component---docs-helm-mdx-4136d6f0aed36816861f.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/helm.mdx"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"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","file":"component---docs-helm-mdx-4136d6f0aed36816861f.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Helm Support`}
\n
{`The `}{`Helm`}{` project is the biggest ecosystem of high quality,\nwell maintained application definitions for Kubernetes.`}
\n
{`Even though Grafana Tanka uses the `}{`Jsonnet language`}{` for\nresource definition, you can still consume Helm resources, as described below.`}
{`Important:`}{` You MUST include the `}{`.new(std.thisFile)`}{` part in the import.\nThis is what tells Tanka where you actually call `}{`helm.template()`}{` from, so it\ncan find your vendored Charts.`}
\n
\n \n
{`Once invoked, the `}{`$.grafana`}{` key holds the individual resources of Helm Chart as\na regular Jsonnet object that looks roughly like so:`}
{`Tanka will install Custom Resource Definitions (CRDs) automatically, if the\nHelm Chart requires them and ships them in `}{`crds/`}{`. This is equivalent to `}{`helm\ntemplate --include-crds`}{`. This can be disabled using `}{`includeCrds: false`}{`:`}
{`Tanka, like Jsonnet, is hermetic. It `}{`always yields the same\nresources`}{` when the project is\nstrictly self-contained.`}
\n
{`Helm however keeps Charts and repository configuration somewhere around\n`}{`~/.config/helm`}{`, which violates above requirement.`}
\n
{`To comply with this requirement, Tanka expects Helm Charts to be found `}{`inside the\nbounds of a project`}{`. This means, you MUST put your Charts `}{`somewhere next to\nthe file that calls `}{`helm.template()`}{`, so that it can be referred to using a\nrelative path.`}
\n
{`Vendor Location`}
\n
{`Where to actually put them inside the project is up to you, but keep in mind you\nneed to refer to them using relative paths.`}
\n
{`We recommend always writing libraries that wrap the actual Helm Chart, so the\nconsumer does not need to be aware of it. Whether you put these into your local `}{`lib/`}{` directory or\npublish and vendor them into the `}{`vendor/`}{` directory is up to you.`}
\n
{`A library usually looks like this:`}
\n
{` /jsonnetfile.json`}{`\n`}{` /main.libsonnet`}
\n
{`When adopting Helm inside it, we recommend vendoring at the top level, as such:`}
{`This way, you can refer to the charts as `}{`./charts/`}{` from inside\n`}{`main.libsonnet`}{`. By keeping the chart as close to the consumer as possible, the\nlibrary is kept portable.`}
\n
{`Charttool`}
\n
{`Helm does not make vendoring incredibly easy by itself. `}{`helm pull`}{` provides the\nrequired plumbing, but it does not record its actions in a reproducible manner.`}
\n
{`Therefore, Tanka ships a special utility at `}{`tk tool charts`}{`, which automates\n`}{`helm pull`}{`:`}
\n
{`# Create a chartfile.yaml in the current directory, e.g. in lib/myLibrary`}{`\n`}{`$ tk tool charts init`}{`\n`}{`\n`}{`$ `}{`# Install the MySQL chart at version 1.6.7 from the stable repository`}{`\n`}{`$ tk tool charts add stable/mysql@1.6.7`}
\n
{`Adding charts:`}{` To add a chart, use the following:`}
{`This will also call `}{`tk tool charts vendor`}{`, so that the `}{`charts/`}{` directory is updated.`}
\n \n
{`Adding Repositories:`}{`\nBy default, the `}{`stable`}{` repository is automatically set up for you. If you wish\nto add another repository, you can use the `}{`add-repo`}{` command:`}
\n
{`# Add the official Grafana repository`}{`\n`}{`$ tk tool charts add-repo grafana https://grafana.github.io/helm-charts`}
\n
{`Another way is to modify `}{`chartfile.yaml`}{` directly:`}
{`Installing multiple versions of the same chart:`}{`\nIf you wish to install multiple versions of the same chart, you can write them to a specific directory.`} {`\n`}{`You can do so with a `}{`:`}{` suffix in the `}{`add`}{` command, or by modifying the chartfile manually.`}
{`Helm support in Tanka requires the `}{`helm`}{` binary installed on your system and\navailable on the `}{`$PATH`}{`. If Helm is not installed, you will see this error message:`}
\n
{`evaluating jsonnet: RUNTIME ERROR: Expanding Helm Chart: exec: \"helm\": executable file not found in $PATH`}
\n
{`To solve this, you need to `}{`install Helm`}{`.\nIf you cannot install it system-wide, you can point Tanka at your executable\nusing `}{`TANKA_HELM_PATH`}
\n
{`opts.calledFrom unset`}
\n
{`This occurs, when Tanka was not told where it `}{`helm.template()`}{` was invoked\nfrom. This most likely means you didn't call `}{`new(std.thisFile)`}{` when importing `}{`tanka-util`}{`:`}
\n
{`local`}{` tanka `}{`=`}{` `}{`import`}{` `}{`\"github.com/grafana/jsonnet-libs/tanka-util/main.libsonnet\"`}{`;`}{`\n`}{`local`}{` helm `}{`=`}{` tanka.helm.`}{`new`}{`(`}{`std.thisFile`}{`);`}{`\n`}{` ↑ This is important`}
\n
{`Failed to find Chart`}
\n
{`helmTemplate: Failed to find a Chart at 'stable/grafana': No such file or directory.`}{`\n`}{`helmTemplate: Failed to find a Chart at '/home/user/stuff/tanka/environments/default/grafana': No such file or directory.`}
\n
{`Tanka failed to locate your Helm chart on the filesystem. It looked at the\nrelative path you provided in `}{`helm.template()`}{`, starting from the directory of\nthe file you called `}{`helm.template()`}{` from.`}
\n
{`Please check there is actually a valid Helm chart at this place. Referring to\ncharts as `}{`/`}{` is disallowed by design.`}
\n
{`Two resources share the same name`}
\n
{`To make customization easier, `}{`helm.template()`}{` returns the resources not as the\nlist it receives from Helm, but instead converts this into an object.`}
\n
{`For the indexing key it uses `}{`kind_name`}{` by default. In some rare cases, this\nmight not be enough to distinguish between two resources, namely when the same\nresource exists in two namespaces.`}
\n
{`To handle this, pass a custom name format, e.g. to also include the namespace:`}
{`The literal default format used is `}{`{{ print .kind \"_\" .metadata.name | snakecase }}`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-inline-environments-mdx-438dd359ab9fafbc9e4f.js b/pr-preview/pr-1029/component---docs-inline-environments-mdx-438dd359ab9fafbc9e4f.js
deleted file mode 100644
index 063307f06..000000000
--- a/pr-preview/pr-1029/component---docs-inline-environments-mdx-438dd359ab9fafbc9e4f.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{d0WO:function(e,a,n){"use strict";n.r(a),n.d(a,"_frontmatter",(function(){return b})),n.d(a,"default",(function(){return r}));var s=n("wx14"),t=n("Ff2n"),m=(n("q1tI"),n("7ljp")),p=n("hhGP");n("qKvR");const c=["components"],b={};void 0!==b&&b&&b===Object(b)&&Object.isExtensible(b)&&!Object.prototype.hasOwnProperty.call(b,"__filemeta")&&Object.defineProperty(b,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/inline-environments.mdx"}});const l={_frontmatter:b},N=p.a;function r(e){let{components:a}=e,n=Object(t.a)(e,c);return Object(m.b)(N,Object(s.a)({},l,n,{components:a,mdxType:"MDXLayout"}),Object(m.b)("h1",{id:"inline-environments"},"Inline environments"),Object(m.b)("p",null,"Inline environments is the practice of defining the environment's config inline\nfor evaluation at runtime as opposed to configuring it statically in\n",Object(m.b)("inlineCode",{parentName:"p"},"spec.json"),"."),Object(m.b)("p",null,"The general take away is:"),Object(m.b)("ul",null,Object(m.b)("li",{parentName:"ul"},Object(m.b)("inlineCode",{parentName:"li"},"spec.json")," will no longer be used"),Object(m.b)("li",{parentName:"ul"},Object(m.b)("inlineCode",{parentName:"li"},"main.jsonnet")," is expected to render a ",Object(m.b)("inlineCode",{parentName:"li"},"tanka.dev/Environment")," object"),Object(m.b)("li",{parentName:"ul"},"this object is expected to hold Kubernetes objects at ",Object(m.b)("inlineCode",{parentName:"li"},".data"))),Object(m.b)("h2",{id:"converting-to-an-inline-environment"},"Converting to an inline environment"),Object(m.b)("p",null,"Converting a traditional ",Object(m.b)("inlineCode",{parentName:"p"},"spec.json")," environment into an inline environment is quite\nstraight forward. Based on the example from ",Object(m.b)("a",{parentName:"p",href:"tutorial/jsonnet"},"Using Jsonnet"),":"),Object(m.b)("p",null,"The directory structure:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"sh"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"├── environments")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ └── default "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# default environment")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ ├── main.jsonnet "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# main file")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ └── spec.json "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# environment's config")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"├── jsonnetfile.json")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"├── lib "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# libraries")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"└── vendor "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# external libraries")))),Object(m.b)("p",null,"The original files look like this:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// main.jsonnet")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"some_deployment:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {"),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"some_service:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {"),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"json"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// spec.json")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"tanka.dev/v1alpha1"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Environment"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"default"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"},")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"spec"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"apiServer"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"https://127.0.0.1:6443"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"namespace"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"monitoring"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")))),Object(m.b)("p",null,"Converting is as simple as bringing in the ",Object(m.b)("inlineCode",{parentName:"p"},"spec.json")," into ",Object(m.b)("inlineCode",{parentName:"p"},"main.jsonnet")," and\nmoving the original ",Object(m.b)("inlineCode",{parentName:"p"},"main.jsonnet")," scope into the ",Object(m.b)("inlineCode",{parentName:"p"},"data:")," element."),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// main.jsonnet")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiVersion:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'tanka.dev/v1alpha1'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'Environment'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'default'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"spec:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiServer:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'https://127.0.0.1:6443'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"namespace:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'monitoring'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"data:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," { "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// original main.jsonnet data")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"some_deployment:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {"),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"some_service:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {"),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("h2",{id:"use-case-variable-apiserver"},"Use case: variable apiServer"),Object(m.b)("p",null,"Even though the ",Object(m.b)("inlineCode",{parentName:"p"},"apiServer")," directive is originally meant to prevent that the\nmanifests don't get accidentally applied to the wrong Kubernetes cluster, there\nis a valid use case for making the ",Object(m.b)("inlineCode",{parentName:"p"},"apiServer")," variable: Local test clusters."),Object(m.b)("p",null,"Instead of modifying ",Object(m.b)("inlineCode",{parentName:"p"},"spec.json")," each time, with inline environments it is\npossible to leverage powerful jsonnet concepts, for example with top level\narguments:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// environments/minikube-test-setup/main.jsonnet")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk9"},"function"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(apiServer) {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiVersion:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'tanka.dev/v1alpha1'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'Environment'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'minikube-test-setup'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"spec:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiServer:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," apiServer,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"namespace:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'monitoring'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"data:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," { "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"Applying this to a local Kubernetes cluster can be done like this:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ tk apply --tla-str apiServer=https://127.0.0.1:4758 environments/minikube-test-setup")))),Object(m.b)("p",null,"Similarly this can be used to configure any part of the Environment object, like\n",Object(m.b)("inlineCode",{parentName:"p"},"namespace:"),", ",Object(m.b)("inlineCode",{parentName:"p"},"metadata.labels"),", ..."),Object(m.b)("h2",{id:"use-case-consistent-inline-environments"},"Use case: consistent inline environments"),Object(m.b)("p",null,"It is possible to define multiple inline environments in a single jsonnet. This\nenables an operator to generate consistent Tanka environments for multiple\nKubernetes clusters."),Object(m.b)("p",null,"We can define a Tanka environment once and then repeat that for a set of\nclusters as shown in this example:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// environments/monitoring-stack/main.jsonnet")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk9"},"environment"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(cluster)"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"::"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiVersion:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'tanka.dev/v1alpha1'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'Environment'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'environment/%s'"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"%"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," cluster.name,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"spec:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiServer:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," cluster.apiServer,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"namespace:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'monitoring'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"data:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," { "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk7"},"clusters::"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," [")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," { "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'us-central1'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},", "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiServer:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'https://127.0.0.1:6433'"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," { "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'europe-west2'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},", "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiServer:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'https://127.0.0.2:6433'"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"envs:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," [cluster.name]"),Object(m.b)("span",{parentName:"span",className:"mtk12"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"environment"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(cluster)")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5 mtki"},"for"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," cluster "),Object(m.b)("span",{parentName:"span",className:"mtk5 mtki"},"in"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},".clusters")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"In the workflow you now have to use ",Object(m.b)("inlineCode",{parentName:"p"},"--name")," to select the environment you want\nto deploy:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ tk apply --name environment/us-central1 environments/monitoring-stack/main.jsonnet")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ tk diff --name environment/europe-west2 environments/monitoring-stack/main.jsonnet")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Partial matches also work (if they match a single environment)")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ tk apply --name us-central1 environments/monitoring-stack/main.jsonnet")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ tk diff --name west2 environments/monitoring-stack/main.jsonnet")))),Object(m.b)("p",null,"For export, it is possible to use the same ",Object(m.b)("inlineCode",{parentName:"p"},"--name")," selector or you can do a\nrecursive export while using the ",Object(m.b)("inlineCode",{parentName:"p"},"--format")," option:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ tk "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"export"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," outputDir/ environments/monitoring-stack/main.jsonnet --recursive \\")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," --format "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(m.b)("span",{parentName:"span",className:"mtk6"},"{{env.metadata.name}}/{{.metadata.namespace}}/{{.kind}}-{{.metadata.name}}"),Object(m.b)("span",{parentName:"span",className:"mtk5"},"'")))),Object(m.b)("h2",{id:"caveats"},"Caveats"),Object(m.b)("h3",{id:"import-tk"},Object(m.b)("inlineCode",{parentName:"h3"},'import "tk"')),Object(m.b)("p",null,"Inline environments cannot use ",Object(m.b)("a",{parentName:"p",href:"config#jsonnet-access"},Object(m.b)("inlineCode",{parentName:"a"},'import "tk"'))," anymore as\nthis information was populated before jsonnet evaluation by the existence of\n",Object(m.b)("inlineCode",{parentName:"p"},"spec.json"),"."),Object(m.b)("h3",{id:"tk-env"},Object(m.b)("inlineCode",{parentName:"h3"},"tk env")),Object(m.b)("p",null,"The different ",Object(m.b)("inlineCode",{parentName:"p"},"tk env")," subcommands are heavily based on the ",Object(m.b)("inlineCode",{parentName:"p"},"spec.json"),"\napproach. ",Object(m.b)("inlineCode",{parentName:"p"},"tk env list")," will continue to work as expected, ",Object(m.b)("inlineCode",{parentName:"p"},"tk env\n(add|remove|set)")," will only work for ",Object(m.b)("inlineCode",{parentName:"p"},"spec.json")," based environments."),Object(m.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!Object.prototype.hasOwnProperty.call(r,"__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/inline-environments.mdx"}}),r.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-inline-environments-mdx-438dd359ab9fafbc9e4f.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-inline-environments-mdx-438dd359ab9fafbc9e4f.js.map b/pr-preview/pr-1029/component---docs-inline-environments-mdx-438dd359ab9fafbc9e4f.js.map
deleted file mode 100644
index a005b0940..000000000
--- a/pr-preview/pr-1029/component---docs-inline-environments-mdx-438dd359ab9fafbc9e4f.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/inline-environments.mdx"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"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","file":"component---docs-inline-environments-mdx-438dd359ab9fafbc9e4f.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Inline environments`}
\n
{`Inline environments is the practice of defining the environment's config inline\nfor evaluation at runtime as opposed to configuring it statically in\n`}{`spec.json`}{`.`}
\n
{`The general take away is:`}
\n
\n
{`spec.json`}{` will no longer be used`}
\n
{`main.jsonnet`}{` is expected to render a `}{`tanka.dev/Environment`}{` object`}
\n
{`this object is expected to hold Kubernetes objects at `}{`.data`}
\n
\n
{`Converting to an inline environment`}
\n
{`Converting a traditional `}{`spec.json`}{` environment into an inline environment is quite\nstraight forward. Based on the example from `}{`Using Jsonnet`}{`:`}
{`Converting is as simple as bringing in the `}{`spec.json`}{` into `}{`main.jsonnet`}{` and\nmoving the original `}{`main.jsonnet`}{` scope into the `}{`data:`}{` element.`}
{`Even though the `}{`apiServer`}{` directive is originally meant to prevent that the\nmanifests don't get accidentally applied to the wrong Kubernetes cluster, there\nis a valid use case for making the `}{`apiServer`}{` variable: Local test clusters.`}
\n
{`Instead of modifying `}{`spec.json`}{` each time, with inline environments it is\npossible to leverage powerful jsonnet concepts, for example with top level\narguments:`}
{`Similarly this can be used to configure any part of the Environment object, like\n`}{`namespace:`}{`, `}{`metadata.labels`}{`, ...`}
\n
{`Use case: consistent inline environments`}
\n
{`It is possible to define multiple inline environments in a single jsonnet. This\nenables an operator to generate consistent Tanka environments for multiple\nKubernetes clusters.`}
\n
{`We can define a Tanka environment once and then repeat that for a set of\nclusters as shown in this example:`}
{`Inline environments cannot use `}{`import \"tk\"`}{` anymore as\nthis information was populated before jsonnet evaluation by the existence of\n`}{`spec.json`}{`.`}
\n
{`tk env`}
\n
{`The different `}{`tk env`}{` subcommands are heavily based on the `}{`spec.json`}{`\napproach. `}{`tk env list`}{` will continue to work as expected, `}{`tk env\n(add|remove|set)`}{` will only work for `}{`spec.json`}{` based environments.`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-installation-mdx-9fd740edb80601169d14.js b/pr-preview/pr-1029/component---docs-installation-mdx-9fd740edb80601169d14.js
deleted file mode 100644
index cefd6d8f9..000000000
--- a/pr-preview/pr-1029/component---docs-installation-mdx-9fd740edb80601169d14.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{"5gTo":function(e,t,n){"use strict";n.r(t),n.d(t,"_frontmatter",(function(){return c})),n.d(t,"default",(function(){return d}));var a=n("wx14"),l=n("Ff2n"),o=(n("q1tI"),n("7ljp")),b=n("hhGP"),r=n("XHv3");n("qKvR");const i=["components"],c={};void 0!==c&&c&&c===Object(c)&&Object.isExtensible(c)&&!Object.prototype.hasOwnProperty.call(c,"__filemeta")&&Object.defineProperty(c,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/installation.mdx"}});const s={_frontmatter:c},m=b.a;function d(e){let{components:t}=e,n=Object(l.a)(e,i);return Object(o.b)(m,Object(a.a)({},s,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("h1",{id:"installation"},"Installation"),Object(o.b)("p",null,"Tanka is distributed as a single binary called ",Object(o.b)("inlineCode",{parentName:"p"},"tk"),". It already includes the Jsonnet compiler, but requires some tools to be available:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",{parentName:"li",href:"https://kubernetes.io/docs/tasks/tools/"},Object(o.b)("inlineCode",{parentName:"a"},"kubectl")),": Tanka\nuses ",Object(o.b)("inlineCode",{parentName:"li"},"kubectl")," to communicate to your cluster. This means ",Object(o.b)("inlineCode",{parentName:"li"},"kubectl")," must be\navailable somewhere on your ",Object(o.b)("inlineCode",{parentName:"li"},"$PATH"),". If you ever have worked with Kubernetes\nbefore, this should be the case anyways."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"diff"),": To compute differences, standard UNIX ",Object(o.b)("inlineCode",{parentName:"li"},"diff(1)")," is required."),Object(o.b)("li",{parentName:"ul"},"(recommended) ",Object(o.b)("inlineCode",{parentName:"li"},"jb"),": ",Object(o.b)("a",{parentName:"li",href:"#jsonnet-bundler"},"#Jsonnet Bundler"),", the Jsonnet package\nmanager"),Object(o.b)("li",{parentName:"ul"},"(recommended) ",Object(o.b)("inlineCode",{parentName:"li"},"helm"),": ",Object(o.b)("a",{parentName:"li",href:"https://helm.sh"},"Helm"),", required for ",Object(o.b)("a",{parentName:"li",href:"/pr-preview/pr-1029/helm"},"Helm\nsupport"))),Object(o.b)("br",null),Object(o.b)("h2",{id:"tanka"},"Tanka"),Object(o.b)(r.b,{elems:r.c,def:"macOS",mdxType:"PlatformInstall"}),Object(o.b)("h2",{id:"jsonnet-bundler"},"Jsonnet Bundler"),Object(o.b)("p",null,"The ",Object(o.b)("a",{parentName:"p",href:"https://github.com/jsonnet-bundler/jsonnet-bundler"},"Jsonnet Bundler")," project creates a package manager for Jsonnet\nto share and reuse code across the internet, similar to ",Object(o.b)("inlineCode",{parentName:"p"},"npm")," or ",Object(o.b)("inlineCode",{parentName:"p"},"go mod"),"."),Object(o.b)("p",null,"Tanka uses this tool by default, so it's recommended to install it as well:"),Object(o.b)(r.b,{elems:r.a,def:"macOS",mdxType:"PlatformInstall"}))}void 0!==d&&d&&d===Object(d)&&Object.isExtensible(d)&&!Object.prototype.hasOwnProperty.call(d,"__filemeta")&&Object.defineProperty(d,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/installation.mdx"}}),d.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-installation-mdx-9fd740edb80601169d14.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-installation-mdx-9fd740edb80601169d14.js.map b/pr-preview/pr-1029/component---docs-installation-mdx-9fd740edb80601169d14.js.map
deleted file mode 100644
index 4ced6a942..000000000
--- a/pr-preview/pr-1029/component---docs-installation-mdx-9fd740edb80601169d14.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/installation.mdx"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","PlatformInstall","elems","Tanka","def","Jb","isMDXComponent"],"mappings":"uSAOaA,EAAe,QAAG,IAAAA,UAAAC,OAAAD,IAAAC,OAAAC,aAAAF,KAAAC,OAAAE,UAAAC,eAAAC,KAAAL,EAAA,eAAAC,OAAAK,eAAAN,EAAA,cAAAO,cAAA,EAAAC,MAAA,CAAAC,KAAA,eAAAC,SAAA,2BAC/B,MAAMC,EAAc,CAClBX,gBAEIY,EAAYC,IACH,SAASC,EAAUC,GAG/B,IAHgC,WACjCC,GAEDD,EADIE,EAAKC,YAAAH,EAAAI,GAER,OAAOC,YAACR,EAASS,YAAA,GAAKV,EAAiBM,EAAK,CAAED,WAAYA,EAAYM,QAAQ,cAI5EF,YAAA,MACE,GAAM,gBAAc,gBAEtBA,YAAA,2DAAsDA,YAAA,cAAYG,WAAW,KAAG,MAAoB,wFACpGH,YAAA,UACEA,YAAA,MAAIG,WAAW,MAAKH,YAAA,KAAGG,WAAW,KAC9B,KAAQ,2CACPH,YAAA,cAAYG,WAAW,KAAG,YAA6B,iBAC3DH,YAAA,cAAYG,WAAW,MAAI,WAAyB,+CAAgDH,YAAA,cAAYG,WAAW,MAAI,WAAyB,yCACjIH,YAAA,cAAYG,WAAW,MAAI,SAAuB,uFAE1EH,YAAA,MAAIG,WAAW,MAAKH,YAAA,cAAYG,WAAW,MAAI,QAAsB,2CAA4CH,YAAA,cAAYG,WAAW,MAAI,WAAyB,iBACrKH,YAAA,MAAIG,WAAW,MAAI,iBAAmBH,YAAA,cAAYG,WAAW,MAAI,MAAoB,KAAMH,YAAA,KAAGG,WAAW,KACrG,KAAQ,oBAAkB,oBACD,kCAE7BH,YAAA,MAAIG,WAAW,MAAI,iBAAmBH,YAAA,cAAYG,WAAW,MAAI,QAAsB,KAAMH,YAAA,KAAGG,WAAW,KACvG,KAAQ,mBAAiB,QACZ,kBAAmBH,YAAA,KAAGG,WAAW,KAC9C,KAAQ,4BAA0B,mBAIxCH,YAAA,WACAA,YAAA,MACE,GAAM,SAAO,SAEfA,YAACI,IAAe,CAACC,MAAOC,IAAOC,IAAI,QAAQL,QAAQ,oBACnDF,YAAA,MACE,GAAM,mBAAiB,mBAEzBA,YAAA,gBAAWA,YAAA,KAAGG,WAAW,IACrB,KAAQ,sDAAoD,mBACpC,2GAC0BH,YAAA,cAAYG,WAAW,KAAG,OAAqB,OAAQH,YAAA,cAAYG,WAAW,KAAG,UAAwB,KAC/JH,YAAA,wFACAA,YAACI,IAAe,CAACC,MAAOG,IAAID,IAAI,QAAQL,QAAQ,0BAGnD,IAAAR,UAAAb,OAAAa,IAAAb,OAAAC,aAAAY,KAAAb,OAAAE,UAAAC,eAAAC,KAAAS,EAAA,eAAAb,OAAAK,eAAAQ,EAAA,cAAAP,cAAA,EAAAC,MAAA,CAAAC,KAAA,aAAAC,SAAA,2BAEDI,EAAWe,gBAAiB","file":"component---docs-installation-mdx-9fd740edb80601169d14.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nimport { PlatformInstall, Tanka, Jb } from \"../src/components/install\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n\n
{`Installation`}
\n
{`Tanka is distributed as a single binary called `}{`tk`}{`. It already includes the Jsonnet compiler, but requires some tools to be available:`}
\n
\n
{`kubectl`}{`: Tanka\nuses `}{`kubectl`}{` to communicate to your cluster. This means `}{`kubectl`}{` must be\navailable somewhere on your `}{`$PATH`}{`. If you ever have worked with Kubernetes\nbefore, this should be the case anyways.`}
\n
{`diff`}{`: To compute differences, standard UNIX `}{`diff(1)`}{` is required.`}
\n
{`(recommended) `}{`jb`}{`: `}{`#Jsonnet Bundler`}{`, the Jsonnet package\nmanager`}
{`The `}{`Jsonnet Bundler`}{` project creates a package manager for Jsonnet\nto share and reuse code across the internet, similar to `}{`npm`}{` or `}{`go mod`}{`.`}
\n
{`Tanka uses this tool by default, so it's recommended to install it as well:`}
\n \n\n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-introduction-mdx-53424fcd5b068bb753bd.js b/pr-preview/pr-1029/component---docs-introduction-mdx-53424fcd5b068bb753bd.js
deleted file mode 100644
index cdee74f76..000000000
--- a/pr-preview/pr-1029/component---docs-introduction-mdx-53424fcd5b068bb753bd.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{iQkD:function(e,t,n){"use strict";n.r(t),n.d(t,"_frontmatter",(function(){return p})),n.d(t,"default",(function(){return b}));var o=n("wx14"),a=n("Ff2n"),i=(n("q1tI"),n("7ljp")),r=n("hhGP"),c=n("oteF"),s=n("EN1A");n("qKvR");const l=["components"],p={};void 0!==p&&p&&p===Object(p)&&Object.isExtensible(p)&&!Object.prototype.hasOwnProperty.call(p,"__filemeta")&&Object.defineProperty(p,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/introduction.mdx"}});const u={_frontmatter:p},d=r.a;function b(e){let{components:t}=e,n=Object(a.a)(e,l);return Object(i.b)(d,Object(o.a)({},u,n,{components:t,mdxType:"MDXLayout"}),Object(i.b)(s.a,{mdxType:"Catcher"}),Object(i.b)("h2",{id:"highlights"},"Highlights"),Object(i.b)(c.a,{elems:{Clean:"The Jsonnet language expresses your Kubernetes apps more clearly than YAML ever did",Reusable:"Build application libraries, import them anywhere and even share them on GitHub!",Concise:"Using the Kubernetes library, you will never see boilerplate again!",Confidence:"Stop guessing and use powerful diff to know the exact changes in advance","Production ready":"Tanka deploys Grafana Cloud and many more production setups","Open Source":"Just like the popular Grafana and Loki projects, Tanka is fully open-source"},mdxType:"Highlights"}))}void 0!==b&&b&&b===Object(b)&&Object.isExtensible(b)&&!Object.prototype.hasOwnProperty.call(b,"__filemeta")&&Object.defineProperty(b,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/introduction.mdx"}}),b.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-introduction-mdx-53424fcd5b068bb753bd.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-introduction-mdx-53424fcd5b068bb753bd.js.map b/pr-preview/pr-1029/component---docs-introduction-mdx-53424fcd5b068bb753bd.js.map
deleted file mode 100644
index d338695b8..000000000
--- a/pr-preview/pr-1029/component---docs-introduction-mdx-53424fcd5b068bb753bd.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/introduction.mdx"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","Catcher","Highlights","elems","Clean","Reusable","Concise","Confidence","isMDXComponent"],"mappings":"iTAQaA,EAAe,QAAG,IAAAA,UAAAC,OAAAD,IAAAC,OAAAC,aAAAF,KAAAC,OAAAE,UAAAC,eAAAC,KAAAL,EAAA,eAAAC,OAAAK,eAAAN,EAAA,cAAAO,cAAA,EAAAC,MAAA,CAAAC,KAAA,eAAAC,SAAA,2BAC/B,MAAMC,EAAc,CAClBX,gBAEIY,EAAYC,IACH,SAASC,EAAUC,GAG/B,IAHgC,WACjCC,GAEDD,EADIE,EAAKC,YAAAH,EAAAI,GAER,OAAOC,YAACR,EAASS,YAAA,GAAKV,EAAiBM,EAAK,CAAED,WAAYA,EAAYM,QAAQ,cAI5EF,YAACG,IAAO,CAACD,QAAQ,YACjBF,YAAA,MACE,GAAM,cAAY,cAEpBA,YAACI,IAAU,CAACC,MAAO,CACjBC,MAAO,sFACPC,SAAU,mFACVC,QAAS,sEACTC,WAAY,2EACZ,mBAAoB,8DACpB,cAAe,+EACdP,QAAQ,qBAGd,IAAAR,UAAAb,OAAAa,IAAAb,OAAAC,aAAAY,KAAAb,OAAAE,UAAAC,eAAAC,KAAAS,EAAA,eAAAb,OAAAK,eAAAQ,EAAA,cAAAP,cAAA,EAAAC,MAAA,CAAAC,KAAA,aAAAC,SAAA,2BAEDI,EAAWgB,gBAAiB","file":"component---docs-introduction-mdx-53424fcd5b068bb753bd.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nimport { Highlights } from \"./home\";\nimport { Catcher } from \"../src/components/home\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n\n \n
{`Highlights`}
\n \n\n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-jsonnet-injecting-values-md-a2e9fadf417770db1b80.js b/pr-preview/pr-1029/component---docs-jsonnet-injecting-values-md-a2e9fadf417770db1b80.js
deleted file mode 100644
index e34ca7ab9..000000000
--- a/pr-preview/pr-1029/component---docs-jsonnet-injecting-values-md-a2e9fadf417770db1b80.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{"3fvT":function(e,a,t){"use strict";t.r(a),t.d(a,"_frontmatter",(function(){return r})),t.d(a,"default",(function(){return o}));var n=t("wx14"),s=t("Ff2n"),c=(t("q1tI"),t("7ljp")),m=t("hhGP");t("qKvR");const l=["components"],r={};void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!Object.prototype.hasOwnProperty.call(r,"__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/jsonnet/injecting-values.md"}});const p={_frontmatter:r},b=m.a;function o(e){let{components:a}=e,t=Object(s.a)(e,l);return Object(c.b)(b,Object(n.a)({},p,t,{components:a,mdxType:"MDXLayout"}),Object(c.b)("h1",{id:"injecting-values"},"Injecting Values"),Object(c.b)("p",null,"Sometimes it might be required to pass externally acquired data into Jsonnet."),Object(c.b)("p",null,"There are three ways of doing so:"),Object(c.b)("ol",null,Object(c.b)("li",{parentName:"ol"},Object(c.b)("a",{parentName:"li",href:"#json-files"},"JSON files")),Object(c.b)("li",{parentName:"ol"},Object(c.b)("a",{parentName:"li",href:"#external-variables"},"External variables")),Object(c.b)("li",{parentName:"ol"},Object(c.b)("a",{parentName:"li",href:"#top-level-arguments"},"Top level arguments"))),Object(c.b)("p",null,"Also check out the ",Object(c.b)("a",{parentName:"p",href:"https://jsonnet.org/ref/language.html#passing-data-to-jsonnet"},"official Jsonnet docs on this\ntopic"),"."),Object(c.b)("h2",{id:"json-files"},"JSON files"),Object(c.b)("p",null,"Jsonnet is a superset of JSON, it treats any JSON as valid Jsonnet. Because many\nsystems can be told to output their data in JSON format, this provides a pretty\ngood interface between those."),Object(c.b)("p",null,"For example, your build tooling like ",Object(c.b)("inlineCode",{parentName:"p"},"make")," could acquire secrets from systems such as\n",Object(c.b)("a",{parentName:"p",href:"https://www.vaultproject.io/"},"Vault"),", etc. and write that into ",Object(c.b)("inlineCode",{parentName:"p"},"secrets.json"),"."),Object(c.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(c.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(c.b)("span",{parentName:"span",className:"mtk1"}," secrets "),Object(c.b)("span",{parentName:"span",className:"mtk12"},"="),Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk6"},'"secrets.json"'),Object(c.b)("span",{parentName:"span",className:"mtk1"},";")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk10"},"foo:"),Object(c.b)("span",{parentName:"span",className:"mtk1"}," secrets.myPassword,")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(c.b)("blockquote",null,Object(c.b)("p",{parentName:"blockquote"},Object(c.b)("strong",{parentName:"p"},"Note"),": Using ",Object(c.b)("inlineCode",{parentName:"p"},"import")," with JSON treats it as Jsonnet, so make sure to not\nuse it with untrusted code.",Object(c.b)("br",{parentName:"p"}),"\n","A safer, but more verbose, alternative is ",Object(c.b)("inlineCode",{parentName:"p"},"std.parseJson(importstr 'path_to_json.json')"))),Object(c.b)("h2",{id:"external-variables"},"External variables"),Object(c.b)("p",null,"Another way of passing values from the outside are external variables, which are specified like so:"),Object(c.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(c.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},"# strings")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"$ tk show "),Object(c.b)("span",{parentName:"span",className:"mtk9"},"."),Object(c.b)("span",{parentName:"span",className:"mtk1"}," --ext-str hello=world")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},"# any Jsonnet snippet")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"$ tk show "),Object(c.b)("span",{parentName:"span",className:"mtk9"},"."),Object(c.b)("span",{parentName:"span",className:"mtk1"}," --ext-code foo=4 --ext-code bar="),Object(c.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(c.b)("span",{parentName:"span",className:"mtk6"},"[ 1, 3 ]"),Object(c.b)("span",{parentName:"span",className:"mtk5"},"'")))),Object(c.b)("p",null,"They can be accessed using ",Object(c.b)("inlineCode",{parentName:"p"},"std.extVar")," and the name given to them on the command line:"),Object(c.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(c.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk10"},"foo:"),Object(c.b)("span",{parentName:"span",className:"mtk1"}," std."),Object(c.b)("span",{parentName:"span",className:"mtk9"},"extVar"),Object(c.b)("span",{parentName:"span",className:"mtk1"},"("),Object(c.b)("span",{parentName:"span",className:"mtk6"},"'foo'"),Object(c.b)("span",{parentName:"span",className:"mtk1"},"), "),Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},"// 4, integer")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk10"},"bar:"),Object(c.b)("span",{parentName:"span",className:"mtk1"}," std."),Object(c.b)("span",{parentName:"span",className:"mtk9"},"extVar"),Object(c.b)("span",{parentName:"span",className:"mtk1"},"("),Object(c.b)("span",{parentName:"span",className:"mtk6"},"'bar'"),Object(c.b)("span",{parentName:"span",className:"mtk1"},"), "),Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},"// [ 1, 3 ], array")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(c.b)("blockquote",null,Object(c.b)("p",{parentName:"blockquote"},Object(c.b)("strong",{parentName:"p"},"Warning"),": External variables are directly accessible in all parts of the\nconfiguration, which can make it difficult to track where they are used and\nwhat effect they have on the final result.\nTry to use ",Object(c.b)("a",{parentName:"p",href:"#top-level-arguments"},"Top Level Arguments")," instead.")),Object(c.b)("h2",{id:"top-level-arguments"},"Top Level Arguments"),Object(c.b)("p",null,"Usually with Tanka, your ",Object(c.b)("inlineCode",{parentName:"p"},"main.jsonnet")," holds an object at the top level (most\nouter type in the generated JSON):"),Object(c.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(c.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},"// main.jsonnet")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* your resources */")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(c.b)("p",null,"Another type of Jsonnet that naturally accepts parameters is the ",Object(c.b)("inlineCode",{parentName:"p"},"function"),".\nWhen the Jsonnet compiler finds a function at the top level, it invokes it and\nallows passing parameter values from the command line:"),Object(c.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(c.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Actual output (object) returned by function, which is taking parameters and default values")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk9"},"function"),Object(c.b)("span",{parentName:"span",className:"mtk1"},"(who, msg="),Object(c.b)("span",{parentName:"span",className:"mtk6"},'"Hello %s!"'),Object(c.b)("span",{parentName:"span",className:"mtk1"},") {")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk10"},"hello:"),Object(c.b)("span",{parentName:"span",className:"mtk1"}," msg "),Object(c.b)("span",{parentName:"span",className:"mtk12"},"%"),Object(c.b)("span",{parentName:"span",className:"mtk1"}," who")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(c.b)("p",null,"Here, ",Object(c.b)("inlineCode",{parentName:"p"},"who")," needs a value while ",Object(c.b)("inlineCode",{parentName:"p"},"msg")," has a default. This can be invoked like so:"),Object(c.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(c.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"$ tk show "),Object(c.b)("span",{parentName:"span",className:"mtk9"},"."),Object(c.b)("span",{parentName:"span",className:"mtk1"}," --tla-str who=John")))),Object(c.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==o&&o&&o===Object(o)&&Object.isExtensible(o)&&!Object.prototype.hasOwnProperty.call(o,"__filemeta")&&Object.defineProperty(o,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/jsonnet/injecting-values.md"}}),o.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-jsonnet-injecting-values-md-a2e9fadf417770db1b80.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-jsonnet-injecting-values-md-a2e9fadf417770db1b80.js.map b/pr-preview/pr-1029/component---docs-jsonnet-injecting-values-md-a2e9fadf417770db1b80.js.map
deleted file mode 100644
index 2bc37c0dc..000000000
--- a/pr-preview/pr-1029/component---docs-jsonnet-injecting-values-md-a2e9fadf417770db1b80.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/jsonnet/injecting-values.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"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","file":"component---docs-jsonnet-injecting-values-md-a2e9fadf417770db1b80.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Injecting Values`}
\n
{`Sometimes it might be required to pass externally acquired data into Jsonnet.`}
{`Jsonnet is a superset of JSON, it treats any JSON as valid Jsonnet. Because many\nsystems can be told to output their data in JSON format, this provides a pretty\ngood interface between those.`}
\n
{`For example, your build tooling like `}{`make`}{` could acquire secrets from systems such as\n`}{`Vault`}{`, etc. and write that into `}{`secrets.json`}{`.`}
{`Note`}{`: Using `}{`import`}{` with JSON treats it as Jsonnet, so make sure to not\nuse it with untrusted code.`} {`\n`}{`A safer, but more verbose, alternative is `}{`std.parseJson(importstr 'path_to_json.json')`}
\n
\n
{`External variables`}
\n
{`Another way of passing values from the outside are external variables, which are specified like so:`}
\n
{`# strings`}{`\n`}{`$ tk show `}{`.`}{` --ext-str hello=world`}{`\n`}{`\n`}{`# any Jsonnet snippet`}{`\n`}{`$ tk show `}{`.`}{` --ext-code foo=4 --ext-code bar=`}{`'`}{`[ 1, 3 ]`}{`'`}
\n
{`They can be accessed using `}{`std.extVar`}{` and the name given to them on the command line:`}
{`Warning`}{`: External variables are directly accessible in all parts of the\nconfiguration, which can make it difficult to track where they are used and\nwhat effect they have on the final result.\nTry to use `}{`Top Level Arguments`}{` instead.`}
\n
\n
{`Top Level Arguments`}
\n
{`Usually with Tanka, your `}{`main.jsonnet`}{` holds an object at the top level (most\nouter type in the generated JSON):`}
\n
{`// main.jsonnet`}{`\n`}{`{`}{`\n`}{` `}{`/* your resources */`}{`\n`}{`}`}
\n
{`Another type of Jsonnet that naturally accepts parameters is the `}{`function`}{`.\nWhen the Jsonnet compiler finds a function at the top level, it invokes it and\nallows passing parameter values from the command line:`}
\n
{`// Actual output (object) returned by function, which is taking parameters and default values`}{`\n`}{`function`}{`(who, msg=`}{`\"Hello %s!\"`}{`) {`}{`\n`}{` `}{`hello:`}{` msg `}{`%`}{` who`}{`\n`}{`}`}
\n
{`Here, `}{`who`}{` needs a value while `}{`msg`}{` has a default. This can be invoked like so:`}
\n
{`$ tk show `}{`.`}{` --tla-str who=John`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-jsonnet-main-md-041efed1c891707fb3eb.js b/pr-preview/pr-1029/component---docs-jsonnet-main-md-041efed1c891707fb3eb.js
deleted file mode 100644
index 9f6c86b44..000000000
--- a/pr-preview/pr-1029/component---docs-jsonnet-main-md-041efed1c891707fb3eb.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{hUCp:function(a,e,s){"use strict";s.r(e),s.d(e,"_frontmatter",(function(){return b})),s.d(e,"default",(function(){return r}));var t=s("wx14"),n=s("Ff2n"),m=(s("q1tI"),s("7ljp")),p=s("hhGP");s("qKvR");const c=["components"],b={};void 0!==b&&b&&b===Object(b)&&Object.isExtensible(b)&&!Object.prototype.hasOwnProperty.call(b,"__filemeta")&&Object.defineProperty(b,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/jsonnet/main.md"}});const N={_frontmatter:b},l=p.a;function r(a){let{components:e}=a,s=Object(n.a)(a,c);return Object(m.b)(l,Object(t.a)({},N,s,{components:e,mdxType:"MDXLayout"}),Object(m.b)("h1",{id:"mainjsonnet"},"main.jsonnet"),Object(m.b)("p",null,"The most important file is called ",Object(m.b)("inlineCode",{parentName:"p"},"main.jsonnet"),", because this is where Tanka\ninvokes the Jsonnet compiler. Every single line of Jsonnet, including\nimports, functions and whatnot is then evaluated until a single, very big JSON\nobject is left.",Object(m.b)("br",{parentName:"p"}),"\n","This object is returned to Tanka and includes all of your Kubernetes manifests\nsomewhere in it, most probably deeply nested."),Object(m.b)("p",null,"But as ",Object(m.b)("inlineCode",{parentName:"p"},"kubectl")," expects a yaml stream, and not a nested tree, Tanka needs to\nextract your objects first. To do this, it traverses the tree until it finds\nsomething that looks like a Kubernetes manifest. An object is considered valid\nwhen it has both, ",Object(m.b)("inlineCode",{parentName:"p"},"kind")," and ",Object(m.b)("inlineCode",{parentName:"p"},"apiVersion")," set."),Object(m.b)("p",null,"To ensure Tanka can find your manifests, the output of your Jsonnet needs to\nhave one of the following structures:"),Object(m.b)("h2",{id:"deeply-nested-object-recommended"},"Deeply nested object (Recommended)"),Object(m.b)("p",null,"Most commonly used is a single big object that includes all manifests as\nleaf-nodes."),Object(m.b)("p",null,"How deeply encapsulated the actual object is does not matter, Tanka will\ntraverse down until it finds something that is valid."),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"json"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"prometheus"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"service"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Service nested one level")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk4"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"v1"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk4"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Service"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk4"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"promSvc"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"},")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"deployment"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk4"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"apps/v1"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},","),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// apiVersion ..")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk4"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Deployment"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},","),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// .. and kind are required to identify an object.")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk4"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prom"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"},")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"web"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"nginx"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk4"},"deployment"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Deployment nested two levels")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"apps/v1"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Deployment"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk16"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"nginx"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")))),Object(m.b)("p",null,"Using this technique has the big benefit that it is self-documenting, as the\nnesting of keys can be used to logically group related manifests, for example by\napplication."),Object(m.b)("p",null,"An encapsulation level of zero is also possible, which means nothing else than\nregular object like it could be obtained from ",Object(m.b)("inlineCode",{parentName:"p"},"kubectl show -o json"),":"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"json"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"v1"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Service"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"foo"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")))),Object(m.b)("h2",{id:"array"},"Array"),Object(m.b)("p",null,"Using an array of objects is also fine:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"json"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"[")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"v1"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Service"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"promSvc"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"},")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"apps/v1"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Deployment"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prom"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"]")))),Object(m.b)("h3",{id:"list-type"},"List type"),Object(m.b)("p",null,"Users of ",Object(m.b)("inlineCode",{parentName:"p"},"kubectl")," might have had contact with a type called ",Object(m.b)("inlineCode",{parentName:"p"},"List"),". It is not\npart of the official Kubernetes API but rather a pseudo-type introduced by\n",Object(m.b)("inlineCode",{parentName:"p"},"kubectl")," for dealing with multiple objects at once. Thus, Tanka does not\nsupport it out of the box."),Object(m.b)("p",null,"To take full advantage of Tankas features, you can manually flatten it:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," list "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiVersion:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"v1"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"List"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"items:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," [")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiVersion:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"v1"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"Service"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ]")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"};")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# expose the `items` array on the top level:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"list.items")))),Object(m.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!Object.prototype.hasOwnProperty.call(r,"__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/jsonnet/main.md"}}),r.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-jsonnet-main-md-041efed1c891707fb3eb.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-jsonnet-main-md-041efed1c891707fb3eb.js.map b/pr-preview/pr-1029/component---docs-jsonnet-main-md-041efed1c891707fb3eb.js.map
deleted file mode 100644
index 9680ded85..000000000
--- a/pr-preview/pr-1029/component---docs-jsonnet-main-md-041efed1c891707fb3eb.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/jsonnet/main.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"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","file":"component---docs-jsonnet-main-md-041efed1c891707fb3eb.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`main.jsonnet`}
\n
{`The most important file is called `}{`main.jsonnet`}{`, because this is where Tanka\ninvokes the Jsonnet compiler. Every single line of Jsonnet, including\nimports, functions and whatnot is then evaluated until a single, very big JSON\nobject is left.`} {`\n`}{`This object is returned to Tanka and includes all of your Kubernetes manifests\nsomewhere in it, most probably deeply nested.`}
\n
{`But as `}{`kubectl`}{` expects a yaml stream, and not a nested tree, Tanka needs to\nextract your objects first. To do this, it traverses the tree until it finds\nsomething that looks like a Kubernetes manifest. An object is considered valid\nwhen it has both, `}{`kind`}{` and `}{`apiVersion`}{` set.`}
\n
{`To ensure Tanka can find your manifests, the output of your Jsonnet needs to\nhave one of the following structures:`}
\n
{`Deeply nested object (Recommended)`}
\n
{`Most commonly used is a single big object that includes all manifests as\nleaf-nodes.`}
\n
{`How deeply encapsulated the actual object is does not matter, Tanka will\ntraverse down until it finds something that is valid.`}
\n
{`{`}{`\n`}{` `}{`\"`}{`prometheus`}{`\"`}{`:`}{` `}{`{`}{`\n`}{` `}{`\"`}{`service`}{`\"`}{`:`}{` `}{`{`}{`\n`}{` `}{`// Service nested one level`}{`\n`}{` `}{`\"`}{`apiVersion`}{`\"`}{`:`}{` `}{`\"`}{`v1`}{`\"`}{`,`}{`\n`}{` `}{`\"`}{`kind`}{`\"`}{`:`}{` `}{`\"`}{`Service`}{`\"`}{`,`}{`\n`}{` `}{`\"`}{`metadata`}{`\"`}{`:`}{` `}{`{`}{`\n`}{` `}{`\"`}{`name`}{`\"`}{`:`}{` `}{`\"`}{`promSvc`}{`\"`}{`\n`}{` `}{`}`}{`\n`}{` `}{`},`}{`\n`}{` `}{`\"`}{`deployment`}{`\"`}{`:`}{` `}{`{`}{`\n`}{` `}{`\"`}{`apiVersion`}{`\"`}{`:`}{` `}{`\"`}{`apps/v1`}{`\"`}{`,`}{` `}{`// apiVersion ..`}{`\n`}{` `}{`\"`}{`kind`}{`\"`}{`:`}{` `}{`\"`}{`Deployment`}{`\"`}{`,`}{` `}{`// .. and kind are required to identify an object.`}{`\n`}{` `}{`\"`}{`metadata`}{`\"`}{`:`}{` `}{`{`}{`\n`}{` `}{`\"`}{`name`}{`\"`}{`:`}{` `}{`\"`}{`prom`}{`\"`}{`\n`}{` `}{`}`}{`\n`}{` `}{`}`}{`\n`}{` `}{`},`}{`\n`}{` `}{`\"`}{`web`}{`\"`}{`:`}{` `}{`{`}{`\n`}{` `}{`\"`}{`nginx`}{`\"`}{`:`}{` `}{`{`}{`\n`}{` `}{`\"`}{`deployment`}{`\"`}{`:`}{` `}{`{`}{`\n`}{` `}{`// Deployment nested two levels`}{`\n`}{` `}{`\"`}{`apiVersion`}{`\"`}{`:`}{` `}{`\"`}{`apps/v1`}{`\"`}{`,`}{`\n`}{` `}{`\"`}{`kind`}{`\"`}{`:`}{` `}{`\"`}{`Deployment`}{`\"`}{`,`}{`\n`}{` `}{`\"`}{`metadata`}{`\"`}{`:`}{` `}{`{`}{`\n`}{` `}{`\"`}{`name`}{`\"`}{`:`}{` `}{`\"`}{`nginx`}{`\"`}{`\n`}{` `}{`}`}{`\n`}{` `}{`}`}{`\n`}{` `}{`}`}{`\n`}{` `}{`}`}{`\n`}{`}`}
\n
{`Using this technique has the big benefit that it is self-documenting, as the\nnesting of keys can be used to logically group related manifests, for example by\napplication.`}
\n
{`An encapsulation level of zero is also possible, which means nothing else than\nregular object like it could be obtained from `}{`kubectl show -o json`}{`:`}
{`Users of `}{`kubectl`}{` might have had contact with a type called `}{`List`}{`. It is not\npart of the official Kubernetes API but rather a pseudo-type introduced by\n`}{`kubectl`}{` for dealing with multiple objects at once. Thus, Tanka does not\nsupport it out of the box.`}
\n
{`To take full advantage of Tankas features, you can manually flatten it:`}
\n
{`local`}{` list `}{`=`}{` {`}{`\n`}{` `}{`apiVersion:`}{` `}{`\"v1\"`}{`,`}{`\n`}{` `}{`kind:`}{` `}{`\"List\"`}{`,`}{`\n`}{` `}{`items:`}{` [`}{`\n`}{` {`}{`\n`}{` `}{`apiVersion:`}{` `}{`\"v1\"`}{`,`}{`\n`}{` `}{`kind:`}{` `}{`\"Service\"`}{`,`}{`\n`}{` `}{`/* ... */`}{`\n`}{` }`}{`\n`}{` `}{`/* ... */`}{`\n`}{` ]`}{`\n`}{`};`}{`\n`}{`\n`}{`# expose the \\`items\\` array on the top level:`}{`\n`}{`list.items`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-jsonnet-native-functions-md-2b62620b62d073a3473b.js b/pr-preview/pr-1029/component---docs-jsonnet-native-functions-md-2b62620b62d073a3473b.js
deleted file mode 100644
index ee6bf3f6e..000000000
--- a/pr-preview/pr-1029/component---docs-jsonnet-native-functions-md-2b62620b62d073a3473b.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{"3rzr":function(a,e,s){"use strict";s.r(e),s.d(e,"_frontmatter",(function(){return b})),s.d(e,"default",(function(){return r}));var t=s("wx14"),n=s("Ff2n"),m=(s("q1tI"),s("7ljp")),p=s("hhGP");s("qKvR");const c=["components"],b={};void 0!==b&&b&&b===Object(b)&&Object.isExtensible(b)&&!Object.prototype.hasOwnProperty.call(b,"__filemeta")&&Object.defineProperty(b,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/jsonnet/native-functions.md"}});const N={_frontmatter:b},l=p.a;function r(a){let{components:e}=a,s=Object(n.a)(a,c);return Object(m.b)(l,Object(t.a)({},N,s,{components:e,mdxType:"MDXLayout"}),Object(m.b)("h1",{id:"native-functions"},"Native Functions"),Object(m.b)("p",null,"Tanka extends Jsonnet using ",Object(m.b)("em",{parentName:"p"},"native functions"),", offering additional functionality not yet available in the standard library."),Object(m.b)("p",null,"To use them in your code, you need to access them using ",Object(m.b)("inlineCode",{parentName:"p"},"std.native")," from the standard library:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"someField:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," std."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"native"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"''"),Object(m.b)("span",{parentName:"span",className:"mtk1"},")("),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"arguments"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,Object(m.b)("inlineCode",{parentName:"p"},"std.native")," takes the native function's name as a ",Object(m.b)("inlineCode",{parentName:"p"},"string")," argument and returns a ",Object(m.b)("inlineCode",{parentName:"p"},"function"),", which is called using the second set of parentheses."),Object(m.b)("h2",{id:"sha256"},"sha256"),Object(m.b)("h3",{id:"signature"},"Signature"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"ts"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk9"},"sha256"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"str"),Object(m.b)("span",{parentName:"span",className:"mtk1"},") "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string")))),Object(m.b)("p",null,Object(m.b)("inlineCode",{parentName:"p"},"sha256")," computes the SHA256 sum of the given string."),Object(m.b)("h3",{id:"examples"},"Examples"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"sum:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," std."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"native"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'sha256'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},")("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'Hello, World!'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"Evaluating with Tanka results in the JSON:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"json"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"sum"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")))),Object(m.b)("h2",{id:"parsejson"},"parseJson"),Object(m.b)("h3",{id:"signature-1"},"Signature"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"ts"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk9"},"parseJson"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"json"),Object(m.b)("span",{parentName:"span",className:"mtk1"},") "),Object(m.b)("span",{parentName:"span",className:"mtk7"},"Object")))),Object(m.b)("p",null,Object(m.b)("inlineCode",{parentName:"p"},"parseJson")," parses a json string and returns the respective Jsonnet type (",Object(m.b)("inlineCode",{parentName:"p"},"Object"),", ",Object(m.b)("inlineCode",{parentName:"p"},"Array"),", etc)."),Object(m.b)("h3",{id:"examples-1"},"Examples"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"array:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," std."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"native"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'parseJson'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},")("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'[0, 1, 2]'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"object:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," std."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"native"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'parseJson'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},")("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'\'{ "foo": "bar" }\''),Object(m.b)("span",{parentName:"span",className:"mtk1"},"),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"Evaluating with Tanka results in the JSON:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"json"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"array"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"["),Object(m.b)("span",{parentName:"span",className:"mtk4"},"0"),Object(m.b)("span",{parentName:"span",className:"mtk5"},","),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"1"),Object(m.b)("span",{parentName:"span",className:"mtk5"},","),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"2"),Object(m.b)("span",{parentName:"span",className:"mtk5"},"],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"object"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"foo"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"bar"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")))),Object(m.b)("h2",{id:"parseyaml"},"parseYaml"),Object(m.b)("h3",{id:"signature-2"},"Signature"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"ts"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk9"},"parseYaml"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"yaml"),Object(m.b)("span",{parentName:"span",className:"mtk1"},") []"),Object(m.b)("span",{parentName:"span",className:"mtk7"},"Object")))),Object(m.b)("p",null,Object(m.b)("inlineCode",{parentName:"p"},"parseYaml")," wraps ",Object(m.b)("inlineCode",{parentName:"p"},"yaml.Unmarshal")," to convert a string of yaml document(s) into\na set of dicts. If ",Object(m.b)("inlineCode",{parentName:"p"},"yaml")," only contains a single document, a single value array\nwill be returned."),Object(m.b)("h3",{id:"examples-2"},"Examples"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"yaml:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," std."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"native"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'parseYaml'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},")("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"|||")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk6"}," ---")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk6"}," foo: bar")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk6"}," ---")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk6"}," bar: baz")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk6"}," |||"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"Evaluating with Tanka results in the JSON:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"json"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"yaml"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"[")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"foo"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"bar"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"},")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"bar"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"baz"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"]")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")))),Object(m.b)("h2",{id:"manifestjsonfromjson"},"manifestJsonFromJson"),Object(m.b)("h3",{id:"signature-3"},"Signature"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"ts"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk9"},"manifestJsonFromJson"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"json"),Object(m.b)("span",{parentName:"span",className:"mtk5"},","),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"int"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"indent"),Object(m.b)("span",{parentName:"span",className:"mtk1"},") "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string")))),Object(m.b)("p",null,Object(m.b)("inlineCode",{parentName:"p"},"manifestJsonFromJson")," reserializes JSON and allows to change the indentation."),Object(m.b)("h3",{id:"examples-3"},"Examples"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"indentWithEightSpaces:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," std."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"native"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'manifestJsonFromJson'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},")("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'\'{ "foo": { "bar": "baz" } }\''),Object(m.b)("span",{parentName:"span",className:"mtk1"},", "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"8"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"Evaluating with Tanka results in the JSON:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"json"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"indentWithEightSpaces"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"{"),Object(m.b)("span",{parentName:"span",className:"mtk5"},"\\n"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'\\"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"foo"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'\\"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},": {"),Object(m.b)("span",{parentName:"span",className:"mtk5"},"\\n"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'\\"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"bar"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'\\"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},": "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'\\"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"baz"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'\\"\\n'),Object(m.b)("span",{parentName:"span",className:"mtk6"}," }"),Object(m.b)("span",{parentName:"span",className:"mtk5"},"\\n"),Object(m.b)("span",{parentName:"span",className:"mtk6"},"}"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'\\n"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")))),Object(m.b)("h2",{id:"manifestyamlfromjson"},"manifestYamlFromJson"),Object(m.b)("h3",{id:"signature-4"},"Signature"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"ts"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk9"},"manifestYamlFromJson"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"json"),Object(m.b)("span",{parentName:"span",className:"mtk1"},") "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string")))),Object(m.b)("p",null,Object(m.b)("inlineCode",{parentName:"p"},"manifestYamlFromJson")," serializes a JSON string as a YAML document."),Object(m.b)("h3",{id:"examples-4"},"Examples"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"yaml:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," std."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"native"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'manifestYamlFromJson'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},")("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'\'{ "foo": { "bar": "baz" } }\''),Object(m.b)("span",{parentName:"span",className:"mtk1"},"),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"Evaluating with Tanka results in the JSON:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"json"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"yaml"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"foo:"),Object(m.b)("span",{parentName:"span",className:"mtk5"},"\\n"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," bar: baz"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'\\n"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")))),Object(m.b)("h2",{id:"escapestringregex"},"escapeStringRegex"),Object(m.b)("h3",{id:"signature-5"},"Signature"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"ts"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk9"},"escapeStringRegex"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"s"),Object(m.b)("span",{parentName:"span",className:"mtk1"},") "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string")))),Object(m.b)("p",null,Object(m.b)("inlineCode",{parentName:"p"},"escapeStringRegex")," escapes all regular expression metacharacters and returns a\nregular expression that matches the literal text."),Object(m.b)("h3",{id:"examples-5"},"Examples"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"escaped:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," std."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"native"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'escapeStringRegex'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},")("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'\"([0-9]+\"'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"Evaluating with Tanka results in the JSON:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"json"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"escaped"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"\\"\\\\'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"("),Object(m.b)("span",{parentName:"span",className:"mtk5"},"\\\\"),Object(m.b)("span",{parentName:"span",className:"mtk6"},"[0-9"),Object(m.b)("span",{parentName:"span",className:"mtk5"},"\\\\"),Object(m.b)("span",{parentName:"span",className:"mtk6"},"]"),Object(m.b)("span",{parentName:"span",className:"mtk5"},"\\\\"),Object(m.b)("span",{parentName:"span",className:"mtk6"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'\\""')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")))),Object(m.b)("h2",{id:"regexmatch"},"regexMatch"),Object(m.b)("h3",{id:"signature-6"},"Signature"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"ts"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk9"},"regexMatch"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"regex"),Object(m.b)("span",{parentName:"span",className:"mtk5"},","),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"s"),Object(m.b)("span",{parentName:"span",className:"mtk1"},") "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"boolean")))),Object(m.b)("p",null,Object(m.b)("inlineCode",{parentName:"p"},"regexMatch")," returns whether the given string is matched by the given\n",Object(m.b)("a",{parentName:"p",href:"https://github.com/google/re2/wiki/Syntax"},"RE2")," regular expression."),Object(m.b)("h3",{id:"examples-6"},"Examples"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"matched:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," std."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"native"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'regexMatch'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},")("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'.'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},", "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'a'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"Evaluating with Tanka results in the JSON:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"json"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"matched"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"true")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")))),Object(m.b)("h2",{id:"regexsubst"},"regexSubst"),Object(m.b)("h3",{id:"signature-7"},"Signature"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"ts"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk9"},"regexSubst"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"regex"),Object(m.b)("span",{parentName:"span",className:"mtk5"},","),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"src"),Object(m.b)("span",{parentName:"span",className:"mtk5"},","),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"repl"),Object(m.b)("span",{parentName:"span",className:"mtk1"},") "),Object(m.b)("span",{parentName:"span",className:"mtk8"},"string")))),Object(m.b)("p",null,Object(m.b)("inlineCode",{parentName:"p"},"regexSubst")," replaces all matches of the re2 regular expression with the\nreplacement string."),Object(m.b)("h3",{id:"examples-7"},"Examples"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"substituted:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," std."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"native"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'regexSubst'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},")("),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'p[^m]*'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},", "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'pm'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},", "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'poe'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"Evaluating with Tanka results in the JSON:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"json"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"substituted"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"poem"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")))),Object(m.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!Object.prototype.hasOwnProperty.call(r,"__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/jsonnet/native-functions.md"}}),r.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-jsonnet-native-functions-md-2b62620b62d073a3473b.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-jsonnet-native-functions-md-2b62620b62d073a3473b.js.map b/pr-preview/pr-1029/component---docs-jsonnet-native-functions-md-2b62620b62d073a3473b.js.map
deleted file mode 100644
index 6115edfe5..000000000
--- a/pr-preview/pr-1029/component---docs-jsonnet-native-functions-md-2b62620b62d073a3473b.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/jsonnet/native-functions.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"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","file":"component---docs-jsonnet-native-functions-md-2b62620b62d073a3473b.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Native Functions`}
\n
{`Tanka extends Jsonnet using `}{`native functions`}{`, offering additional functionality not yet available in the standard library.`}
\n
{`To use them in your code, you need to access them using `}{`std.native`}{` from the standard library:`}
{`std.native`}{` takes the native function's name as a `}{`string`}{` argument and returns a `}{`function`}{`, which is called using the second set of parentheses.`}
{`parseYaml`}{` wraps `}{`yaml.Unmarshal`}{` to convert a string of yaml document(s) into\na set of dicts. If `}{`yaml`}{` only contains a single document, a single value array\nwill be returned.`}
\n
{`Examples`}
\n
{`{`}{`\n`}{` `}{`yaml:`}{` std.`}{`native`}{`(`}{`'parseYaml'`}{`)(`}{`|||`}{`\n`}{` ---`}{`\n`}{` foo: bar`}{`\n`}{` ---`}{`\n`}{` bar: baz`}{`\n`}{` |||`}{`),`}{`\n`}{`}`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-jsonnet-overview-md-950fc05876158d586146.js b/pr-preview/pr-1029/component---docs-jsonnet-overview-md-950fc05876158d586146.js
deleted file mode 100644
index 3d4d54277..000000000
--- a/pr-preview/pr-1029/component---docs-jsonnet-overview-md-950fc05876158d586146.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{"5bP6":function(a,e,s){"use strict";s.r(e),s.d(e,"_frontmatter",(function(){return b})),s.d(e,"default",(function(){return N}));var t=s("wx14"),n=s("Ff2n"),m=(s("q1tI"),s("7ljp")),p=s("hhGP");s("qKvR");const c=["components"],b={};void 0!==b&&b&&b===Object(b)&&Object.isExtensible(b)&&!Object.prototype.hasOwnProperty.call(b,"__filemeta")&&Object.defineProperty(b,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/jsonnet/overview.md"}});const l={_frontmatter:b},r=p.a;function N(a){let{components:e}=a,s=Object(n.a)(a,c);return Object(m.b)(r,Object(t.a)({},l,s,{components:e,mdxType:"MDXLayout"}),Object(m.b)("h1",{id:"language-overview"},"Language overview"),Object(m.b)("p",null,Object(m.b)("a",{parentName:"p",href:"https://jsonnet.org"},"Jsonnet")," is the data templating language Tanka uses for\nexpressing what shall be deployed to your Kubernetes cluster. Understanding\nJsonnet is crucial to using Tanka effectively."),Object(m.b)("p",null,"This page covers the Jsonnet language itself. For more information on how to\nuse Jsonnet with Kubernetes, see ",Object(m.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/tutorial/jsonnet"},"the tutorial"),". There's\nalso ",Object(m.b)("a",{parentName:"p",href:"https://jsonnet.org/learning/tutorial.html"},"the official Jsonnet tutorial"),"\nthat provides a more detailed review of language features."),Object(m.b)("h2",{id:"syntax"},"Syntax"),Object(m.b)("p",null,"Being a superset of JSON, the syntax is very similar:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Line comment")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* Block comment */")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// a local variable (not exported)")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," greeting "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"hello world!"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},";")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// the exported/returned object")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"foo:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"bar"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},", "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// string")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"bar:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"5"),Object(m.b)("span",{parentName:"span",className:"mtk1"},", "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// int")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"baz:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"false"),Object(m.b)("span",{parentName:"span",className:"mtk1"},", "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// bool")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"list:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," ["),Object(m.b)("span",{parentName:"span",className:"mtk4"},"1"),Object(m.b)("span",{parentName:"span",className:"mtk1"},","),Object(m.b)("span",{parentName:"span",className:"mtk4"},"2"),Object(m.b)("span",{parentName:"span",className:"mtk1"},","),Object(m.b)("span",{parentName:"span",className:"mtk4"},"3"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"], "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// array")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// object")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"dict:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"nested:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," greeting, "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// using the local")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk7"},"hidden::"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"incognito!"'),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// an unexported field")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("h2",{id:"abstraction"},"Abstraction"),Object(m.b)("p",null,"Jsonnet has rich abstraction features, which makes it interesting for\nconfiguring Kubernetes, as it allows to keep configurations concise, yet\nreadable."),Object(m.b)("ul",null,Object(m.b)("li",{parentName:"ul"},Object(m.b)("a",{parentName:"li",href:"#imports"},"Imports")),Object(m.b)("li",{parentName:"ul"},Object(m.b)("a",{parentName:"li",href:"#merging"},"Merging")),Object(m.b)("li",{parentName:"ul"},Object(m.b)("a",{parentName:"li",href:"#functions"},"Functions"))),Object(m.b)("h3",{id:"imports"},"Imports"),Object(m.b)("p",null,"Just as other languages, Jsonnet allows code to be imported from other files:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," secret "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"./secret.libsonnet"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},";")))),Object(m.b)("p",null,"The exported object (the only non-local one) of ",Object(m.b)("inlineCode",{parentName:"p"},"secret.libsonnet")," is now\navailable as a ",Object(m.b)("inlineCode",{parentName:"p"},"local")," variable called ",Object(m.b)("inlineCode",{parentName:"p"},"secret"),"."),Object(m.b)("p",null,"When using Tanka, it is also possible to directly import ",Object(m.b)("inlineCode",{parentName:"p"},".json")," and ",Object(m.b)("inlineCode",{parentName:"p"},".yaml"),"\nfiles, as if they were a ",Object(m.b)("inlineCode",{parentName:"p"},".libsonnet"),"."),Object(m.b)("p",null,"Make sure to also take a look at the libraries documentation to learn how to use ",Object(m.b)("inlineCode",{parentName:"p"},"import")," and re-use code.\nThe documentation on ",Object(m.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/libraries/import-paths"},"Tanka import paths")," and ",Object(m.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/libraries/install-publish"},"vendoring")," are useful to understand how imports work in Tanka's context."),Object(m.b)("h3",{id:"merging"},"Merging"),Object(m.b)("p",null,"Deep merging allows you to change parts of an object without touching all of it.\nConsider the following example:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," secret "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," Secret,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"mySecret"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line vscode-highlight-line-highlighted"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"namespace:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"default"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},", "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// need to change that")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"data:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"foo:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," std."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"base64"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"foo"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},")")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"};")))),Object(m.b)("p",null,"To change the namespace only, we can use the special merge key ",Object(m.b)("inlineCode",{parentName:"p"},"+:")," like so:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// define the patch:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," patch "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata+:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"namespace:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"myApp"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"The difference between ",Object(m.b)("inlineCode",{parentName:"p"},":")," and ",Object(m.b)("inlineCode",{parentName:"p"},"+:")," is that the former replaces the original\ndata at that key, while the latter applies the new object as a patch on top,\nmeaning that values will be updated if possible but all other stay like they\nare.",Object(m.b)("br",{parentName:"p"}),"\n","To merge those two, just add (",Object(m.b)("inlineCode",{parentName:"p"},"+"),") the patch to the original:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"secret "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," patch")))),Object(m.b)("p",null,"The output of this is the following JSON object:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"json"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Secret"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"mySecret"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"namespace"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"myApp"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"},")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},"data"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk7"},"foo"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Zm9vCg=="),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")))),Object(m.b)("h3",{id:"functions"},"Functions"),Object(m.b)("p",null,"Jsonnet supports functions, similar to how Python does. They can be defined in\ntwo different ways:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk9"},"add"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(x,y) "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," x "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," y;")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," mul "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," ("),Object(m.b)("span",{parentName:"span",className:"mtk9"},"function"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(x, y) x "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"*"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," y);")))),Object(m.b)("p",null,"Objects can have methods:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk9"},"greet"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(who)"),Object(m.b)("span",{parentName:"span",className:"mtk12"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"hello "'),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," who,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"Default values, keyword-args and more examples can be found at\n",Object(m.b)("a",{parentName:"p",href:"https://jsonnet.org/learning/tutorial.html#functions"},"jsonnet.org"),"."),Object(m.b)("h2",{id:"standard-library"},"Standard library"),Object(m.b)("p",null,"The Jsonnet standard library includes many helper methods ranging from object\nand array mutation, over string utils to computation helpers."),Object(m.b)("p",null,"Documentation is available at\n",Object(m.b)("a",{parentName:"p",href:"https://jsonnet.org/ref/stdlib.html"},"jsonnet.org"),"."),Object(m.b)("h2",{id:"conditionals"},"Conditionals"),Object(m.b)("p",null,"Jsonnet supports a conditionals in a fashion similar to a ternary operator:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," tag "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5 mtki"},"if"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," prod "),Object(m.b)("span",{parentName:"span",className:"mtk5 mtki"},"then"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"v1.0"'),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5 mtki"},"else"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"latest"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},";")))),Object(m.b)("p",null,"More on ",Object(m.b)("a",{parentName:"p",href:"https://jsonnet.org/learning/tutorial.html#conditionals"},"jsonnet.org"),"."),Object(m.b)("h2",{id:"references"},"References"),Object(m.b)("p",null,"Jsonnet has multiple options to refer to parts of an object:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{ "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// this is $")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"junk:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"foo"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"nested:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," { "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// this is self")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"app:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"Tanka"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"msg:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"self"),Object(m.b)("span",{parentName:"span",className:"mtk1"},".app "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'" rocks!"'),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},'// "Tanka rocks!"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"children:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," { "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// this is also self")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"baz:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"bar"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"junk:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},".junk "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"self"),Object(m.b)("span",{parentName:"span",className:"mtk1"},".baz, "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},'// "foobar"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"For more information take a look at\n",Object(m.b)("a",{parentName:"p",href:"https://jsonnet.org/learning/tutorial.html#references"},"jsonnet.org")),Object(m.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==N&&N&&N===Object(N)&&Object.isExtensible(N)&&!Object.prototype.hasOwnProperty.call(N,"__filemeta")&&Object.defineProperty(N,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/jsonnet/overview.md"}}),N.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-jsonnet-overview-md-950fc05876158d586146.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-jsonnet-overview-md-950fc05876158d586146.js.map b/pr-preview/pr-1029/component---docs-jsonnet-overview-md-950fc05876158d586146.js.map
deleted file mode 100644
index 1a8eaa676..000000000
--- a/pr-preview/pr-1029/component---docs-jsonnet-overview-md-950fc05876158d586146.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/jsonnet/overview.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"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","file":"component---docs-jsonnet-overview-md-950fc05876158d586146.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Language overview`}
\n
{`Jsonnet`}{` is the data templating language Tanka uses for\nexpressing what shall be deployed to your Kubernetes cluster. Understanding\nJsonnet is crucial to using Tanka effectively.`}
\n
{`This page covers the Jsonnet language itself. For more information on how to\nuse Jsonnet with Kubernetes, see `}{`the tutorial`}{`. There's\nalso `}{`the official Jsonnet tutorial`}{`\nthat provides a more detailed review of language features.`}
\n
{`Syntax`}
\n
{`Being a superset of JSON, the syntax is very similar:`}
\n
{`// Line comment`}{`\n`}{`/* Block comment */`}{`\n`}{`\n`}{`// a local variable (not exported)`}{`\n`}{`local`}{` greeting `}{`=`}{` `}{`\"hello world!\"`}{`;`}{`\n`}{`\n`}{`// the exported/returned object`}{`\n`}{`{`}{`\n`}{` `}{`foo:`}{` `}{`\"bar\"`}{`, `}{`// string`}{`\n`}{` `}{`bar:`}{` `}{`5`}{`, `}{`// int`}{`\n`}{` `}{`baz:`}{` `}{`false`}{`, `}{`// bool`}{`\n`}{` `}{`list:`}{` [`}{`1`}{`,`}{`2`}{`,`}{`3`}{`], `}{`// array`}{`\n`}{` `}{`// object`}{`\n`}{` `}{`dict:`}{` {`}{`\n`}{` `}{`nested:`}{` greeting, `}{`// using the local`}{`\n`}{` },`}{`\n`}{` `}{`hidden::`}{` `}{`\"incognito!\"`}{` `}{`// an unexported field`}{`\n`}{`}`}
\n
{`Abstraction`}
\n
{`Jsonnet has rich abstraction features, which makes it interesting for\nconfiguring Kubernetes, as it allows to keep configurations concise, yet\nreadable.`}
{`The exported object (the only non-local one) of `}{`secret.libsonnet`}{` is now\navailable as a `}{`local`}{` variable called `}{`secret`}{`.`}
\n
{`When using Tanka, it is also possible to directly import `}{`.json`}{` and `}{`.yaml`}{`\nfiles, as if they were a `}{`.libsonnet`}{`.`}
\n
{`Make sure to also take a look at the libraries documentation to learn how to use `}{`import`}{` and re-use code.\nThe documentation on `}{`Tanka import paths`}{` and `}{`vendoring`}{` are useful to understand how imports work in Tanka's context.`}
\n
{`Merging`}
\n
{`Deep merging allows you to change parts of an object without touching all of it.\nConsider the following example:`}
{`The difference between `}{`:`}{` and `}{`+:`}{` is that the former replaces the original\ndata at that key, while the latter applies the new object as a patch on top,\nmeaning that values will be updated if possible but all other stay like they\nare.`} {`\n`}{`To merge those two, just add (`}{`+`}{`) the patch to the original:`}
\n
{`secret `}{`+`}{` patch`}
\n
{`The output of this is the following JSON object:`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-known-issues-md-2b1c7bae83f2275bce8c.js b/pr-preview/pr-1029/component---docs-known-issues-md-2b1c7bae83f2275bce8c.js
deleted file mode 100644
index 96d9a0795..000000000
--- a/pr-preview/pr-1029/component---docs-known-issues-md-2b1c7bae83f2275bce8c.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{"+sT5":function(e,t,n){"use strict";n.r(t),n.d(t,"_frontmatter",(function(){return l})),n.d(t,"default",(function(){return b}));var a=n("wx14"),r=n("Ff2n"),o=(n("q1tI"),n("7ljp")),i=n("hhGP");n("qKvR");const s=["components"],l={};void 0!==l&&l&&l===Object(l)&&Object.isExtensible(l)&&!Object.prototype.hasOwnProperty.call(l,"__filemeta")&&Object.defineProperty(l,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/known-issues.md"}});const m={_frontmatter:l},c=i.a;function b(e){let{components:t}=e,n=Object(r.a)(e,s);return Object(o.b)(c,Object(a.a)({},m,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("h1",{id:"known-issues"},"Known Issues"),Object(o.b)("p",null,"Below is a list of common errors and how to address them."),Object(o.b)("h3",{id:"evaluating-jsonnet-runtime-error-undefined-external-variable-__ksonnetcomponents"},"Evaluating jsonnet: RUNTIME ERROR: Undefined external variable: ","_","_","ksonnet/components"),Object(o.b)("p",null,"When migrating from ",Object(o.b)("inlineCode",{parentName:"p"},"ksonnet"),", this error might occur, because Tanka does not\nprovide the global ",Object(o.b)("inlineCode",{parentName:"p"},"__ksonnet")," variable, nor does it strictly have the concept\nof components.\nYou will need to use the plain Jsonnet ",Object(o.b)("inlineCode",{parentName:"p"},"import")," feature instead. Note that this\nrequires your code to be inside of one of the\n",Object(o.b)("a",{parentName:"p",href:"directory-structure/#import-paths"},"import paths"),"."),Object(o.b)("h3",{id:"evaluating-jsonnet-runtime-error-couldnt-open-import-klibsonnet-no-match-locally-or-in-the-jsonnet-library-paths"},'Evaluating jsonnet: RUNTIME ERROR: couldn\'t open import "k.libsonnet": no match locally or in the Jsonnet library paths'),Object(o.b)("p",null,"This error can occur when the ",Object(o.b)("inlineCode",{parentName:"p"},"k8s-libsonnet")," kubernetes libraries are missing in the\nimport paths. While ",Object(o.b)("inlineCode",{parentName:"p"},"k8s-libsonnet")," used to magically include them, Tanka follows a\nmore explicit approach and requires you to install them using ",Object(o.b)("inlineCode",{parentName:"p"},"jb"),":"),Object(o.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(o.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"},"$ jb install github.com/jsonnet-libs/k8s-libsonnet/1.21@main")),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"},"$ "),Object(o.b)("span",{parentName:"span",className:"mtk9"},"echo"),Object(o.b)("span",{parentName:"span",className:"mtk1"}," "),Object(o.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(o.b)("span",{parentName:"span",className:"mtk6"},"import 'github.com/jsonnet-libs/k8s-libsonnet/1.21/main.libsonnet'"),Object(o.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(o.b)("span",{parentName:"span",className:"mtk1"}," "),Object(o.b)("span",{parentName:"span",className:"mtk12"},">"),Object(o.b)("span",{parentName:"span",className:"mtk1"}," lib/k.libsonnet")))),Object(o.b)("p",null,"This does 2 things:"),Object(o.b)("p",null,"1) It installs the ",Object(o.b)("inlineCode",{parentName:"p"},"k8s-libsonnet")," library (in ",Object(o.b)("inlineCode",{parentName:"p"},"vendor/github.com/jsonnet-libs/k8s-libsonnet/1.21/"),").\nYou can replace the ",Object(o.b)("inlineCode",{parentName:"p"},"1.21")," matching the Kubernetes version you want to run against."),Object(o.b)("p",null,"2) It makes an alias for libraries importing ",Object(o.b)("inlineCode",{parentName:"p"},"k.libsonnet")," directly. See\n",Object(o.b)("a",{parentName:"p",href:"https://tanka.dev/tutorial/k-lib#aliasing"},"https://tanka.dev/tutorial/k-lib#aliasing")," for the alias rationale."),Object(o.b)("h3",{id:"unexpected-diff-if-the-same-port-number-is-used-for-udp-and-tcp"},"Unexpected diff if the same port number is used for UDP and TCP"),Object(o.b)("p",null,"A\n",Object(o.b)("a",{parentName:"p",href:"https://github.com/kubernetes/kubernetes/issues/39188"},"long-standing bug in ",Object(o.b)("inlineCode",{parentName:"a"},"kubectl")),"\nresults in an incorrect diff output if the same port number is used multiple\ntimes in differently named ports, which commonly happens if a port is specified\nusing both protocols, ",Object(o.b)("inlineCode",{parentName:"p"},"tcp")," and ",Object(o.b)("inlineCode",{parentName:"p"},"udp"),". Nevertheless, ",Object(o.b)("inlineCode",{parentName:"p"},"tk apply")," will still work\ncorrectly."),Object(o.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==b&&b&&b===Object(b)&&Object.isExtensible(b)&&!Object.prototype.hasOwnProperty.call(b,"__filemeta")&&Object.defineProperty(b,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/known-issues.md"}}),b.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-known-issues-md-2b1c7bae83f2275bce8c.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-known-issues-md-2b1c7bae83f2275bce8c.js.map b/pr-preview/pr-1029/component---docs-known-issues-md-2b1c7bae83f2275bce8c.js.map
deleted file mode 100644
index 6b9dc609b..000000000
--- a/pr-preview/pr-1029/component---docs-known-issues-md-2b1c7bae83f2275bce8c.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/known-issues.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"2RAMaA,EAAe,QAAG,IAAAA,UAAAC,OAAAD,IAAAC,OAAAC,aAAAF,KAAAC,OAAAE,UAAAC,eAAAC,KAAAL,EAAA,eAAAC,OAAAK,eAAAN,EAAA,cAAAO,cAAA,EAAAC,MAAA,CAAAC,KAAA,eAAAC,SAAA,0BAC/B,MAAMC,EAAc,CAClBX,gBAEIY,EAAYC,IACH,SAASC,EAAUC,GAG/B,IAHgC,WACjCC,GAEDD,EADIE,EAAKC,YAAAH,EAAAI,GAER,OAAOC,YAACR,EAASS,YAAA,GAAKV,EAAiBM,EAAK,CAAED,WAAYA,EAAYM,QAAQ,cAG5EF,YAAA,MACE,GAAM,gBAAc,gBAEtBA,YAAA,sEACAA,YAAA,MACE,GAAM,oFAAkF,iGAE1FA,YAAA,gCAA2BA,YAAA,cAAYG,WAAW,KAAG,WAAyB,wEAC7DH,YAAA,cAAYG,WAAW,KAAG,aAA2B,4GAEjCH,YAAA,cAAYG,WAAW,KAAG,UAAwB,oFAEzFH,YAAA,KAAGG,WAAW,IACR,KAAQ,qCAAmC,gBACtB,KACzBH,YAAA,MACE,GAAM,oHAAkH,4HAE1HA,YAAA,0CAAqCA,YAAA,cAAYG,WAAW,KAAG,iBAA+B,iEAC5EH,YAAA,cAAYG,WAAW,KAAG,iBAA+B,mHACfH,YAAA,cAAYG,WAAW,KAAG,MAAoB,KAC1GH,YAAA,OACE,UAAa,yCACb,gBAAiB,QAChBA,YAAA,QAAMG,WAAW,MAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,iEAC4D,KACzFH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,sEAC2DH,YAAA,QAAMG,WAAW,OAC/F,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,SAAO,KACPH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,uBAE3BH,YAAA,gCACAA,YAAA,+BAA0BA,YAAA,cAAYG,WAAW,KAAG,iBAA+B,gBAAiBH,YAAA,cAAYG,WAAW,KAAG,sDAAoE,2BAChLH,YAAA,cAAYG,WAAW,KAAG,QAAsB,6DAClEH,YAAA,yDAAoDA,YAAA,cAAYG,WAAW,KAAG,eAA6B,mBAC7GH,YAAA,KAAGG,WAAW,IACR,KAAQ,6CAA2C,6CACD,6BACtDH,YAAA,MACE,GAAM,mEAAiE,mEAEzEA,YAAA,eACFA,YAAA,KAAGG,WAAW,IACR,KAAQ,yDAAuD,wBACrCH,YAAA,cAAYG,WAAW,KAAG,YAA6B,0LAGjEH,YAAA,cAAYG,WAAW,KAAG,OAAqB,QAASH,YAAA,cAAYG,WAAW,KAAG,OAAqB,mBAAoBH,YAAA,cAAYG,WAAW,KAAG,YAA0B,gCAGnMH,YAAA,SACE,UAAa,2BAAyB,glCA6B3C,IAAAN,UAAAb,OAAAa,IAAAb,OAAAC,aAAAY,KAAAb,OAAAE,UAAAC,eAAAC,KAAAS,EAAA,eAAAb,OAAAK,eAAAQ,EAAA,cAAAP,cAAA,EAAAC,MAAA,CAAAC,KAAA,aAAAC,SAAA,0BAEDI,EAAWU,gBAAiB","file":"component---docs-known-issues-md-2b1c7bae83f2275bce8c.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Known Issues`}
\n
{`Below is a list of common errors and how to address them.`}
{`When migrating from `}{`ksonnet`}{`, this error might occur, because Tanka does not\nprovide the global `}{`__ksonnet`}{` variable, nor does it strictly have the concept\nof components.\nYou will need to use the plain Jsonnet `}{`import`}{` feature instead. Note that this\nrequires your code to be inside of one of the\n`}{`import paths`}{`.`}
\n
{`Evaluating jsonnet: RUNTIME ERROR: couldn't open import \"k.libsonnet\": no match locally or in the Jsonnet library paths`}
\n
{`This error can occur when the `}{`k8s-libsonnet`}{` kubernetes libraries are missing in the\nimport paths. While `}{`k8s-libsonnet`}{` used to magically include them, Tanka follows a\nmore explicit approach and requires you to install them using `}{`jb`}{`:`}
{`1) It installs the `}{`k8s-libsonnet`}{` library (in `}{`vendor/github.com/jsonnet-libs/k8s-libsonnet/1.21/`}{`).\nYou can replace the `}{`1.21`}{` matching the Kubernetes version you want to run against.`}
{`Unexpected diff if the same port number is used for UDP and TCP`}
\n
{`A\n`}{`long-standing bug in `}{`kubectl`}{`\nresults in an incorrect diff output if the same port number is used multiple\ntimes in differently named ports, which commonly happens if a port is specified\nusing both protocols, `}{`tcp`}{` and `}{`udp`}{`. Nevertheless, `}{`tk apply`}{` will still work\ncorrectly.`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-kustomize-mdx-d5cc41c7a5346a94a8bf.js b/pr-preview/pr-1029/component---docs-kustomize-mdx-d5cc41c7a5346a94a8bf.js
deleted file mode 100644
index 3bf52a9b4..000000000
--- a/pr-preview/pr-1029/component---docs-kustomize-mdx-d5cc41c7a5346a94a8bf.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{uQoz:function(e,a,t){"use strict";t.r(a),t.d(a,"_frontmatter",(function(){return i})),t.d(a,"default",(function(){return r}));var s=t("wx14"),n=t("Ff2n"),m=(t("q1tI"),t("7ljp")),c=t("hhGP");t("qKvR");const p=["components"],i={};void 0!==i&&i&&i===Object(i)&&Object.isExtensible(i)&&!Object.prototype.hasOwnProperty.call(i,"__filemeta")&&Object.defineProperty(i,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/kustomize.mdx"}});const l={_frontmatter:i},o=c.a;function r(e){let{components:a}=e,t=Object(n.a)(e,p);return Object(m.b)(o,Object(s.a)({},l,t,{components:a,mdxType:"MDXLayout"}),Object(m.b)("h1",{id:"kustomize-support"},"Kustomize Support"),Object(m.b)("p",null,Object(m.b)("a",{parentName:"p",href:"https://kustomize.io"},"Kustomize")," provides a solution for customizing Kubernetes\nmanifests in YAML."),Object(m.b)("p",null,"Even though Grafana Tanka uses the ",Object(m.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/jsonnet/overview"},"Jsonnet language")," for\nresource definition, you can still consume kustomizations, as described below."),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"Warning:")," Keep in mind this feature is considered EXPERIMENTAL")),Object(m.b)("h2",{id:"consuming-a-kustomization-from-jsonnet"},"Consuming a Kustomization from Jsonnet"),Object(m.b)("p",null,"Kustomize support is provided using the\n",Object(m.b)("a",{parentName:"p",href:"https://github.com/grafana/jsonnet-libs/tree/master/tanka-util"},Object(m.b)("inlineCode",{parentName:"a"},"github.com/grafana/jsonnet-libs/tanka-util")),"\nlibrary. Install it with:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"jb install github.com/grafana/jsonnet-libs/tanka-util")))),Object(m.b)("p",null,"The following example shows how to extract the individual resources of the\n",Object(m.b)("a",{parentName:"p",href:"https://github.com/fluxcd/flux2/tree/main/manifests/bases/source-controller"},Object(m.b)("inlineCode",{parentName:"a"},"flux2/source-controller")),"\nkustomization:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," tanka "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'github.com/grafana/jsonnet-libs/tanka-util/main.libsonnet'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},";")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," kustomize "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," tanka.kustomize."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk9"},"std.thisFile"),Object(m.b)("span",{parentName:"span",className:"mtk1"},");")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"source_controller:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," kustomize."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"build"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(path="),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'flux2'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},")")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"Kustomize takes a kustomization manifest as input. Go on an create this file\n",Object(m.b)("inlineCode",{parentName:"p"},"flux2/kustomization.yaml")," relative to above jsonnet:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"yaml"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"kustomize.config.k8s.io/v1beta1")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Kustomization")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"resources"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"https://github.com/fluxcd/flux2/archive/v0.4.3.zip//flux2-0.4.3/manifests/bases/source-controller")))),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"Important:")," You MUST include the ",Object(m.b)("inlineCode",{parentName:"p"},".new(std.thisFile)")," part in the import.\nThis is what tells Tanka where you actually call ",Object(m.b)("inlineCode",{parentName:"p"},"kustomize.build()")," from, so\nit can find your kustomization manifest.")),Object(m.b)("br",null),Object(m.b)("p",null,"Once invoked, the ",Object(m.b)("inlineCode",{parentName:"p"},"$.source_controller")," key holds the individual resources of\nthe kustomization as a regular Jsonnet object that looks roughly like so:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'custom_resource_definition_buckets.source.toolkit.fluxcd.io'"),Object(m.b)("span",{parentName:"span",className:"mtk12"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {"),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'custom_resource_definition_gitrepositories.source.toolkit.fluxcd.io'"),Object(m.b)("span",{parentName:"span",className:"mtk12"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {"),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'custom_resource_definition_helmcharts.source.toolkit.fluxcd.io'"),Object(m.b)("span",{parentName:"span",className:"mtk12"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {"),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'custom_resource_definition_helmrepositories.source.toolkit.fluxcd.io'"),Object(m.b)("span",{parentName:"span",className:"mtk12"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {"),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"deployment_source_controller:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {"),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"service_source_controller:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {"),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"Above can be ",Object(m.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/tutorial/environments#patching"},"manipulated")," in the same way as\nany other Jsonnet data."),Object(m.b)("h2",{id:"working-with-kustomize"},"Working with Kustomize"),Object(m.b)("p",null,"Tanka, like Jsonnet, is hermetic. It ",Object(m.b)("strong",{parentName:"p"},"always yields the same resources")," when\nthe project is strictly self-contained."),Object(m.b)("p",null,"Kustomize however has the ability to pull\n",Object(m.b)("a",{parentName:"p",href:"https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/resource/"},"resources"),"\nfrom different sources at runtime, which violates above requirement. This is\nalso apparent in the example above."),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"Important:")," Due to the nature of Kustomize, it is not feasible to ensure\nhermetic and reproducible kustomize builds from within Tanka. Beware of that\nwhen using Kustomize.")),Object(m.b)("h2",{id:"troubleshooting"},"Troubleshooting"),Object(m.b)("h3",{id:"kustomize-executable-missing"},"Kustomize executable missing"),Object(m.b)("p",null,"Kustomize support in Tanka requires the ",Object(m.b)("inlineCode",{parentName:"p"},"kustomize")," binary installed on your\nsystem and available on the ",Object(m.b)("inlineCode",{parentName:"p"},"$PATH"),". If Kustomize is not installed, you will see\nthis error message:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":""},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},'evaluating jsonnet: RUNTIME ERROR: Expanding Kustomize: exec: "kustomize": executable file not found in $PATH'))),Object(m.b)("p",null,"To solve this, you need to\n",Object(m.b)("a",{parentName:"p",href:"https://kubectl.docs.kubernetes.io/installation/kustomize/"},"install Kustomize"),".\nIf you cannot install it system-wide, you can point Tanka at your executable\nusing ",Object(m.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/env-vars#tanka_kustomize_path"},Object(m.b)("inlineCode",{parentName:"a"},"TANKA_KUSTOMIZE_PATH"))),Object(m.b)("h3",{id:"optscalledfrom-unset"},"opts.calledFrom unset"),Object(m.b)("p",null,"This occurs, when Tanka was not told where it ",Object(m.b)("inlineCode",{parentName:"p"},"kustomize.build()")," was invoked\nfrom. This most likely means you didn't call ",Object(m.b)("inlineCode",{parentName:"p"},"new(std.thisFile)")," when importing ",Object(m.b)("inlineCode",{parentName:"p"},"tanka-util"),":"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," tanka "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"github.com/grafana/jsonnet-libs/tanka-util/main.libsonnet"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},";")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," kustomize "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," tanka.kustomize."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk9"},"std.thisFile"),Object(m.b)("span",{parentName:"span",className:"mtk1"},");")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ↑ This is important")))),Object(m.b)("h3",{id:"failed-to-find-kustomization"},"Failed to find kustomization"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":""},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},"Error: unable to find one of 'kustomization.yaml', 'kustomization.yml' or 'Kustomization' in directory '/home/user/stuff/tanka/environments/default/flux2'"))),Object(m.b)("p",null,"Tanka failed to locate your kustomization on the filesystem. It looked at the\nrelative path you provided in ",Object(m.b)("inlineCode",{parentName:"p"},"kustomize.build()"),", starting from the directory\nof the file you called ",Object(m.b)("inlineCode",{parentName:"p"},"kustomize.build()")," from."),Object(m.b)("p",null,"Please check there is actually a valid kustomization at this place."),Object(m.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!Object.prototype.hasOwnProperty.call(r,"__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/kustomize.mdx"}}),r.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-kustomize-mdx-d5cc41c7a5346a94a8bf.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-kustomize-mdx-d5cc41c7a5346a94a8bf.js.map b/pr-preview/pr-1029/component---docs-kustomize-mdx-d5cc41c7a5346a94a8bf.js.map
deleted file mode 100644
index 3c2617af7..000000000
--- a/pr-preview/pr-1029/component---docs-kustomize-mdx-d5cc41c7a5346a94a8bf.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/kustomize.mdx"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"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","file":"component---docs-kustomize-mdx-d5cc41c7a5346a94a8bf.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Kustomize Support`}
\n
{`Kustomize`}{` provides a solution for customizing Kubernetes\nmanifests in YAML.`}
\n
{`Even though Grafana Tanka uses the `}{`Jsonnet language`}{` for\nresource definition, you can still consume kustomizations, as described below.`}
\n
\n
{`Warning:`}{` Keep in mind this feature is considered EXPERIMENTAL`}
{`Important:`}{` You MUST include the `}{`.new(std.thisFile)`}{` part in the import.\nThis is what tells Tanka where you actually call `}{`kustomize.build()`}{` from, so\nit can find your kustomization manifest.`}
\n
\n \n
{`Once invoked, the `}{`$.source_controller`}{` key holds the individual resources of\nthe kustomization as a regular Jsonnet object that looks roughly like so:`}
{`Above can be `}{`manipulated`}{` in the same way as\nany other Jsonnet data.`}
\n
{`Working with Kustomize`}
\n
{`Tanka, like Jsonnet, is hermetic. It `}{`always yields the same resources`}{` when\nthe project is strictly self-contained.`}
\n
{`Kustomize however has the ability to pull\n`}{`resources`}{`\nfrom different sources at runtime, which violates above requirement. This is\nalso apparent in the example above.`}
\n
\n
{`Important:`}{` Due to the nature of Kustomize, it is not feasible to ensure\nhermetic and reproducible kustomize builds from within Tanka. Beware of that\nwhen using Kustomize.`}
\n
\n
{`Troubleshooting`}
\n
{`Kustomize executable missing`}
\n
{`Kustomize support in Tanka requires the `}{`kustomize`}{` binary installed on your\nsystem and available on the `}{`$PATH`}{`. If Kustomize is not installed, you will see\nthis error message:`}
\n
{`evaluating jsonnet: RUNTIME ERROR: Expanding Kustomize: exec: \"kustomize\": executable file not found in $PATH`}
{`This occurs, when Tanka was not told where it `}{`kustomize.build()`}{` was invoked\nfrom. This most likely means you didn't call `}{`new(std.thisFile)`}{` when importing `}{`tanka-util`}{`:`}
\n
{`local`}{` tanka `}{`=`}{` `}{`import`}{` `}{`\"github.com/grafana/jsonnet-libs/tanka-util/main.libsonnet\"`}{`;`}{`\n`}{`local`}{` kustomize `}{`=`}{` tanka.kustomize.`}{`new`}{`(`}{`std.thisFile`}{`);`}{`\n`}{` ↑ This is important`}
\n
{`Failed to find kustomization`}
\n
{`Error: unable to find one of 'kustomization.yaml', 'kustomization.yml' or 'Kustomization' in directory '/home/user/stuff/tanka/environments/default/flux2'`}
\n
{`Tanka failed to locate your kustomization on the filesystem. It looked at the\nrelative path you provided in `}{`kustomize.build()`}{`, starting from the directory\nof the file you called `}{`kustomize.build()`}{` from.`}
\n
{`Please check there is actually a valid kustomization at this place.`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-libraries-import-paths-md-dae2edfdde230d15f0ed.js b/pr-preview/pr-1029/component---docs-libraries-import-paths-md-dae2edfdde230d15f0ed.js
deleted file mode 100644
index a657bd902..000000000
--- a/pr-preview/pr-1029/component---docs-libraries-import-paths-md-dae2edfdde230d15f0ed.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{OlZl:function(e,t,n){"use strict";n.r(t),n.d(t,"_frontmatter",(function(){return o})),n.d(t,"default",(function(){return m}));var a=n("wx14"),r=n("Ff2n"),b=(n("q1tI"),n("7ljp")),i=n("hhGP");n("qKvR");const l=["components"],o={};void 0!==o&&o&&o===Object(o)&&Object.isExtensible(o)&&!Object.prototype.hasOwnProperty.call(o,"__filemeta")&&Object.defineProperty(o,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/libraries/import-paths.md"}});const c={_frontmatter:o},p=i.a;function m(e){let{components:t}=e,n=Object(r.a)(e,l);return Object(b.b)(p,Object(a.a)({},c,n,{components:t,mdxType:"MDXLayout"}),Object(b.b)("h1",{id:"import-paths"},"Import paths"),Object(b.b)("p",null,"When using ",Object(b.b)("inlineCode",{parentName:"p"},"import")," or ",Object(b.b)("inlineCode",{parentName:"p"},"importstr"),", Tanka considers the following directories to\nfind a suitable file for that specific import:"),Object(b.b)("table",null,Object(b.b)("thead",{parentName:"table"},Object(b.b)("tr",{parentName:"thead"},Object(b.b)("th",{parentName:"tr",align:null},"Rank"),Object(b.b)("th",{parentName:"tr",align:null},"Path"),Object(b.b)("th",{parentName:"tr",align:null},"Purpose"))),Object(b.b)("tbody",{parentName:"table"},Object(b.b)("tr",{parentName:"tbody"},Object(b.b)("td",{parentName:"tr",align:null},"4"),Object(b.b)("td",{parentName:"tr",align:null},Object(b.b)("inlineCode",{parentName:"td"},"")),Object(b.b)("td",{parentName:"tr",align:null},"The directory of your environment, e.g. ",Object(b.b)("inlineCode",{parentName:"td"},"/environments/default"),".",Object(b.b)("br",null)," Put things that belong to this very environment here.")),Object(b.b)("tr",{parentName:"tbody"},Object(b.b)("td",{parentName:"tr",align:null},"3"),Object(b.b)("td",{parentName:"tr",align:null},Object(b.b)("inlineCode",{parentName:"td"},"/lib")),Object(b.b)("td",{parentName:"tr",align:null},"Project-global libraries, that are used in multiple environments, but are specific to this project.")),Object(b.b)("tr",{parentName:"tbody"},Object(b.b)("td",{parentName:"tr",align:null},"2"),Object(b.b)("td",{parentName:"tr",align:null},Object(b.b)("inlineCode",{parentName:"td"},"/vendor")),Object(b.b)("td",{parentName:"tr",align:null},"Per-environment vendor, can be used for ",Object(b.b)("a",{parentName:"td",href:"/pr-preview/pr-1029/libraries/overriding#per-environment"},Object(b.b)("inlineCode",{parentName:"a"},"vendor")," overriding"))),Object(b.b)("tr",{parentName:"tbody"},Object(b.b)("td",{parentName:"tr",align:null},"1"),Object(b.b)("td",{parentName:"tr",align:null},Object(b.b)("inlineCode",{parentName:"td"},"/vendor")),Object(b.b)("td",{parentName:"tr",align:null},"Global vendor, holds external libraries installed using ",Object(b.b)("inlineCode",{parentName:"td"},"jb"),".")))),Object(b.b)("blockquote",null,Object(b.b)("p",{parentName:"blockquote"},Object(b.b)("strong",{parentName:"p"},"Note"),":"),Object(b.b)("ul",{parentName:"blockquote"},Object(b.b)("li",{parentName:"ul"},"If a file occurs in multiple paths, the one with the highest rank will be chosen."),Object(b.b)("li",{parentName:"ul"},Object(b.b)("inlineCode",{parentName:"li"},"/")," in above table means ",Object(b.b)("inlineCode",{parentName:"li"},""),", which is your project root."))))}void 0!==m&&m&&m===Object(m)&&Object.isExtensible(m)&&!Object.prototype.hasOwnProperty.call(m,"__filemeta")&&Object.defineProperty(m,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/libraries/import-paths.md"}}),m.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-libraries-import-paths-md-dae2edfdde230d15f0ed.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-libraries-import-paths-md-dae2edfdde230d15f0ed.js.map b/pr-preview/pr-1029/component---docs-libraries-import-paths-md-dae2edfdde230d15f0ed.js.map
deleted file mode 100644
index 30200a3dc..000000000
--- a/pr-preview/pr-1029/component---docs-libraries-import-paths-md-dae2edfdde230d15f0ed.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/libraries/import-paths.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"yRAMaA,EAAe,QAAG,IAAAA,UAAAC,OAAAD,IAAAC,OAAAC,aAAAF,KAAAC,OAAAE,UAAAC,eAAAC,KAAAL,EAAA,eAAAC,OAAAK,eAAAN,EAAA,cAAAO,cAAA,EAAAC,MAAA,CAAAC,KAAA,eAAAC,SAAA,oCAC/B,MAAMC,EAAc,CAClBX,gBAEIY,EAAYC,IACH,SAASC,EAAUC,GAG/B,IAHgC,WACjCC,GAEDD,EADIE,EAAKC,YAAAH,EAAAI,GAER,OAAOC,YAACR,EAASS,YAAA,GAAKV,EAAiBM,EAAK,CAAED,WAAYA,EAAYM,QAAQ,cAG5EF,YAAA,MACE,GAAM,gBAAc,gBAEtBA,YAAA,uBAAkBA,YAAA,cAAYG,WAAW,KAAG,UAAwB,OAAQH,YAAA,cAAYG,WAAW,KAAG,aAA2B,kGAEjIH,YAAA,aACEA,YAAA,SAAOG,WAAW,SAChBH,YAAA,MAAIG,WAAW,SACbH,YAAA,MAAIG,WAAW,KACb,MAAS,MAAI,QAEfH,YAAA,MAAIG,WAAW,KACb,MAAS,MAAI,QAEfH,YAAA,MAAIG,WAAW,KACb,MAAS,MAAI,aAInBH,YAAA,SAAOG,WAAW,SAChBH,YAAA,MAAIG,WAAW,SACbH,YAAA,MAAIG,WAAW,KACb,MAAS,MAAI,KAEfH,YAAA,MAAIG,WAAW,KACb,MAAS,MACRH,YAAA,cAAYG,WAAW,MAAI,cAC9BH,YAAA,MAAIG,WAAW,KACb,MAAS,MAAI,2CACgCH,YAAA,cAAYG,WAAW,MAAI,yBAAuC,IAAKH,YAAA,WAAM,2DAE9HA,YAAA,MAAIG,WAAW,SACbH,YAAA,MAAIG,WAAW,KACb,MAAS,MAAI,KAEfH,YAAA,MAAIG,WAAW,KACb,MAAS,MACRH,YAAA,cAAYG,WAAW,MAAI,SAC9BH,YAAA,MAAIG,WAAW,KACb,MAAS,MAAI,wGAGjBH,YAAA,MAAIG,WAAW,SACbH,YAAA,MAAIG,WAAW,KACb,MAAS,MAAI,KAEfH,YAAA,MAAIG,WAAW,KACb,MAAS,MACRH,YAAA,cAAYG,WAAW,MAAI,qBAC9BH,YAAA,MAAIG,WAAW,KACb,MAAS,MAAI,2CACgCH,YAAA,KAAGG,WAAW,KACzD,KAAQ,4DACPH,YAAA,cAAYG,WAAW,KAAG,UAAwB,iBAEzDH,YAAA,MAAIG,WAAW,SACbH,YAAA,MAAIG,WAAW,KACb,MAAS,MAAI,KAEfH,YAAA,MAAIG,WAAW,KACb,MAAS,MACRH,YAAA,cAAYG,WAAW,MAAI,YAC9BH,YAAA,MAAIG,WAAW,KACb,MAAS,MAAI,2DACgDH,YAAA,cAAYG,WAAW,MAAI,MAAoB,QAIpHH,YAAA,kBACEA,YAAA,KAAGG,WAAW,cAAaH,YAAA,UAAQG,WAAW,KAAG,QAAkB,KACnEH,YAAA,MAAIG,WAAW,cACbH,YAAA,MAAIG,WAAW,MAAI,qFACnBH,YAAA,MAAIG,WAAW,MAAKH,YAAA,cAAYG,WAAW,MAAI,KAAmB,yBAA0BH,YAAA,cAAYG,WAAW,MAAI,aAA2B,yCAKzJ,IAAAT,UAAAb,OAAAa,IAAAb,OAAAC,aAAAY,KAAAb,OAAAE,UAAAC,eAAAC,KAAAS,EAAA,eAAAb,OAAAK,eAAAQ,EAAA,cAAAP,cAAA,EAAAC,MAAA,CAAAC,KAAA,aAAAC,SAAA,oCAEDI,EAAWU,gBAAiB","file":"component---docs-libraries-import-paths-md-dae2edfdde230d15f0ed.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Import paths`}
\n
{`When using `}{`import`}{` or `}{`importstr`}{`, Tanka considers the following directories to\nfind a suitable file for that specific import:`}
\n
\n \n
\n
{`Rank`}
\n
{`Path`}
\n
{`Purpose`}
\n
\n \n \n
\n
{`4`}
\n
{``}
\n
{`The directory of your environment, e.g. `}{`/environments/default`}{`.`} {` Put things that belong to this very environment here.`}
\n
\n
\n
{`3`}
\n
{`/lib`}
\n
{`Project-global libraries, that are used in multiple environments, but are specific to this project.`}
{`Global vendor, holds external libraries installed using `}{`jb`}{`.`}
\n
\n \n
\n
\n
{`Note`}{`:`}
\n
\n
{`If a file occurs in multiple paths, the one with the highest rank will be chosen.`}
\n
{`/`}{` in above table means `}{``}{`, which is your project root.`}
\n
\n
\n\n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-libraries-install-publish-md-1cb5bebde0944f8f75bb.js b/pr-preview/pr-1029/component---docs-libraries-install-publish-md-1cb5bebde0944f8f75bb.js
deleted file mode 100644
index d8a273e01..000000000
--- a/pr-preview/pr-1029/component---docs-libraries-install-publish-md-1cb5bebde0944f8f75bb.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{pI5B:function(a,e,t){"use strict";t.r(e),t.d(e,"_frontmatter",(function(){return r})),t.d(e,"default",(function(){return i}));var s=t("wx14"),n=t("Ff2n"),m=(t("q1tI"),t("7ljp")),p=t("hhGP");t("qKvR");const c=["components"],r={};void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!Object.prototype.hasOwnProperty.call(r,"__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/libraries/install-publish.md"}});const b={_frontmatter:r},l=p.a;function i(a){let{components:e}=a,t=Object(n.a)(a,c);return Object(m.b)(l,Object(s.a)({},b,t,{components:e,mdxType:"MDXLayout"}),Object(m.b)("h1",{id:"installing-and-publishing"},"Installing and publishing"),Object(m.b)("p",null,"The tool for dealing with libraries is\n",Object(m.b)("a",{parentName:"p",href:"https://github.com/jsonnet-bundler/jsonnet-bundler"},Object(m.b)("inlineCode",{parentName:"a"},"jsonnet-bundler")),". It can\ninstall packages from any git source using ",Object(m.b)("inlineCode",{parentName:"p"},"ssh")," and GitHub over ",Object(m.b)("inlineCode",{parentName:"p"},"https"),"."),Object(m.b)("h2",{id:"install-a-library"},"Install a library"),Object(m.b)("p",null,"To install a library from GitHub, use one of the following:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ jb install github.com/"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"user"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"/"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"repo"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ jb install github.com/"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"user"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"/"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"repo"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"/"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"subdir"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ jb install github.com/"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"user"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"/"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"repo"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"/"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"subdir"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"@"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"version"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">")))),Object(m.b)("p",null,"Otherwise, use the ssh syntax:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ jb install git+ssh://git@mycode.server:"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"path-to-repo"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">"),Object(m.b)("span",{parentName:"span",className:"mtk1"},".git")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ jb install git+ssh://git@mycode.server:"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"path-to-repo"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">"),Object(m.b)("span",{parentName:"span",className:"mtk1"},".git/"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"subdir"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ jb install git+ssh://git@mycode.server:"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"path-to-repo"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">"),Object(m.b)("span",{parentName:"span",className:"mtk1"},".git/"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"subdir"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"@"),Object(m.b)("span",{parentName:"span",className:"mtk12"},"<"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"version"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">")))),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"Note"),": ",Object(m.b)("inlineCode",{parentName:"p"},"version")," may be any git ref, such as commits, tags or branches")),Object(m.b)("h2",{id:"publish-to-github"},"Publish to Git(Hub)"),Object(m.b)("p",null,"Publishing is as easy as committing and pushing to a git remote.\n",Object(m.b)("a",{parentName:"p",href:"https://github.com"},"GitHub")," is recommended, as it is most common and supports\nfaster installing using http archives."),Object(m.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==i&&i&&i===Object(i)&&Object.isExtensible(i)&&!Object.prototype.hasOwnProperty.call(i,"__filemeta")&&Object.defineProperty(i,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/libraries/install-publish.md"}}),i.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-libraries-install-publish-md-1cb5bebde0944f8f75bb.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-libraries-install-publish-md-1cb5bebde0944f8f75bb.js.map b/pr-preview/pr-1029/component---docs-libraries-install-publish-md-1cb5bebde0944f8f75bb.js.map
deleted file mode 100644
index 79180ac0a..000000000
--- a/pr-preview/pr-1029/component---docs-libraries-install-publish-md-1cb5bebde0944f8f75bb.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/libraries/install-publish.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"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","file":"component---docs-libraries-install-publish-md-1cb5bebde0944f8f75bb.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Installing and publishing`}
\n
{`The tool for dealing with libraries is\n`}{`jsonnet-bundler`}{`. It can\ninstall packages from any git source using `}{`ssh`}{` and GitHub over `}{`https`}{`.`}
\n
{`Install a library`}
\n
{`To install a library from GitHub, use one of the following:`}
{`Note`}{`: `}{`version`}{` may be any git ref, such as commits, tags or branches`}
\n
\n
{`Publish to Git(Hub)`}
\n
{`Publishing is as easy as committing and pushing to a git remote.\n`}{`GitHub`}{` is recommended, as it is most common and supports\nfaster installing using http archives.`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-libraries-overriding-md-d4979f48cc2ef9fa7574.js b/pr-preview/pr-1029/component---docs-libraries-overriding-md-d4979f48cc2ef9fa7574.js
deleted file mode 100644
index 5dd9c10d5..000000000
--- a/pr-preview/pr-1029/component---docs-libraries-overriding-md-d4979f48cc2ef9fa7574.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{"7Pa4":function(e,t,a){"use strict";a.r(t),a.d(t,"_frontmatter",(function(){return s})),a.d(t,"default",(function(){return b}));var n=a("wx14"),r=a("Ff2n"),o=(a("q1tI"),a("7ljp")),i=a("hhGP");a("qKvR");const l=["components"],s={};void 0!==s&&s&&s===Object(s)&&Object.isExtensible(s)&&!Object.prototype.hasOwnProperty.call(s,"__filemeta")&&Object.defineProperty(s,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/libraries/overriding.md"}});const c={_frontmatter:s},m=i.a;function b(e){let{components:t}=e,a=Object(r.a)(e,l);return Object(o.b)(m,Object(n.a)({},c,a,{components:t,mdxType:"MDXLayout"}),Object(o.b)("h1",{id:"overriding-vendor"},"Overriding vendor"),Object(o.b)("p",null,"The ",Object(o.b)("inlineCode",{parentName:"p"},"vendor")," directory is immutable in its nature. You can't and should never\nmodify any files inside of it, ",Object(o.b)("inlineCode",{parentName:"p"},"jb")," will revert those changes on the next run anyway."),Object(o.b)("p",null,"Nevertheless, it can sometimes become required to add changes there, e.g. if an\nupstream library contains a bug that needs to be fixed immediately, without\nwaiting for the upstream maintainer to review it."),Object(o.b)("h2",{id:"shadowing"},"Shadowing"),Object(o.b)("p",null,"Because ",Object(o.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/libraries/import-paths"},"import paths")," are ranked in Tanka, you can use\na technique called shadowing: By putting a file with the exact same name in a\nhigher ranked path, Tanka will prefer that file instead of the original in\n",Object(o.b)("inlineCode",{parentName:"p"},"vendor"),", which has the lowest possible rank of 1."),Object(o.b)("p",null,"For example, if ",Object(o.b)("inlineCode",{parentName:"p"},"/vendor/foo/bar.libsonnet")," contained an error, you could create\n",Object(o.b)("inlineCode",{parentName:"p"},"/lib/foo/bar.libsonnet")," and fix it there."),Object(o.b)("blockquote",null,Object(o.b)("p",{parentName:"blockquote"},Object(o.b)("strong",{parentName:"p"},"Tip:")," Instead of copying the file to the new location and making the edits,\nuse an absolute import and ",Object(o.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/tutorial/environments#patching"},"patching"),":"),Object(o.b)("pre",{parentName:"blockquote",className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(o.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk3 mtki"},"// in /lib/foo/bar.libsonnet:")),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"},"("),Object(o.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(o.b)("span",{parentName:"span",className:"mtk1"}," "),Object(o.b)("span",{parentName:"span",className:"mtk6"},'"../../vendor/foo/bar.libsonnet"'),Object(o.b)("span",{parentName:"span",className:"mtk1"},") "),Object(o.b)("span",{parentName:"span",className:"mtk12"},"+"),Object(o.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"}," "),Object(o.b)("span",{parentName:"span",className:"mtk10"},"foo+:"),Object(o.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"}," "),Object(o.b)("span",{parentName:"span",className:"mtk10"},"bar:"),Object(o.b)("span",{parentName:"span",className:"mtk1"}," "),Object(o.b)("span",{parentName:"span",className:"mtk6"},'"fixed"')),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"},"}"))))),Object(o.b)("blockquote",null,Object(o.b)("p",{parentName:"blockquote"},Object(o.b)("strong",{parentName:"p"},"Important:")," If the file you override is not the one you directly import,\nbut instead imported by another file first, the override will only occur if\nthe placement of the file is alongside your ",Object(o.b)("inlineCode",{parentName:"p"},"main.libsonnet"),". This is due to\nthe logic behind the Jsonnet importer. Example: We import\n",Object(o.b)("inlineCode",{parentName:"p"},"abc/main.libsonnet")," located in ",Object(o.b)("inlineCode",{parentName:"p"},"vendor/abc"),". Because Jsonnet first looks if\nfiles are locally present before considering the ",Object(o.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/libraries/import-paths"},"import\npaths"),", you need to make sure your override is\nactually picked up. In our example, you'd need to copy the ",Object(o.b)("inlineCode",{parentName:"p"},"main.libsonnet"),"\ninto ",Object(o.b)("inlineCode",{parentName:"p"},"lib/abc")," as well.")),Object(o.b)("h2",{id:"per-environment"},"Per environment"),Object(o.b)("p",null,"Another common case is overriding the entire ",Object(o.b)("inlineCode",{parentName:"p"},"vendor")," bundle per environment."),Object(o.b)("p",null,"This is handy, when you for example want to test a change of an upstream\nlibrary which is used in many environments (including ",Object(o.b)("inlineCode",{parentName:"p"},"prod"),") in a single one,\nwithout affecting all the others."),Object(o.b)("p",null,"For this, Tanka lets you have a separate ",Object(o.b)("inlineCode",{parentName:"p"},"vendor"),", ",Object(o.b)("inlineCode",{parentName:"p"},"jsonnetfile.json")," and\n",Object(o.b)("inlineCode",{parentName:"p"},"jsonnetfile.lock.json")," per environment. To do so:"),Object(o.b)("h4",{id:"create-tkrcyaml"},"Create ",Object(o.b)("inlineCode",{parentName:"h4"},"tkrc.yaml")),Object(o.b)("p",null,"Tanka normally uses the ",Object(o.b)("inlineCode",{parentName:"p"},"jsonnetfile.json")," from your project to find its root.\nAs we are going to create another one of that down the tree in the next step, we\nneed another marker for ",Object(o.b)("inlineCode",{parentName:"p"},""),"."),Object(o.b)("p",null,"For that, create an empty file called ",Object(o.b)("inlineCode",{parentName:"p"},"tkrc.yaml")," in your project's root,\nalongside the original ",Object(o.b)("inlineCode",{parentName:"p"},"jsonnetfile.json"),"."),Object(o.b)("blockquote",null,Object(o.b)("p",{parentName:"blockquote"},Object(o.b)("strong",{parentName:"p"},"Info"),": While the name suggests that ",Object(o.b)("inlineCode",{parentName:"p"},"tkrc.yaml")," could be used for setting\nparameters, this is not the case yet.",Object(o.b)("br",{parentName:"p"}),"\n","It might however be repurposed later, in case we need such functionality")),Object(o.b)("h4",{id:"add-a-vendor-to-your-environment"},"Add a ",Object(o.b)("inlineCode",{parentName:"h4"},"vendor")," to your environment"),Object(o.b)("p",null,"In your environments folder (e.g. ",Object(o.b)("inlineCode",{parentName:"p"},"/environments/default"),"):"),Object(o.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(o.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk3 mtki"},"# init jsonnet bundler (creates jsonnetfile.json)")),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"},"$ jb init")),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk3 mtki"},"# install the updated dependency")),"\n",Object(o.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(o.b)("span",{parentName:"span",className:"mtk1"},"$ jb install github.com/foo/bar@v2")))),Object(o.b)("blockquote",null,Object(o.b)("p",{parentName:"blockquote"},Object(o.b)("strong",{parentName:"p"},"Tip"),": You don't need to install everything into the new ",Object(o.b)("inlineCode",{parentName:"p"},"vendor/"),", as\npackages not present there can still be imported from the global ",Object(o.b)("inlineCode",{parentName:"p"},"/vendor"),".")),Object(o.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==b&&b&&b===Object(b)&&Object.isExtensible(b)&&!Object.prototype.hasOwnProperty.call(b,"__filemeta")&&Object.defineProperty(b,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/libraries/overriding.md"}}),b.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-libraries-overriding-md-d4979f48cc2ef9fa7574.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-libraries-overriding-md-d4979f48cc2ef9fa7574.js.map b/pr-preview/pr-1029/component---docs-libraries-overriding-md-d4979f48cc2ef9fa7574.js.map
deleted file mode 100644
index 1bd46291c..000000000
--- a/pr-preview/pr-1029/component---docs-libraries-overriding-md-d4979f48cc2ef9fa7574.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/libraries/overriding.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"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","file":"component---docs-libraries-overriding-md-d4979f48cc2ef9fa7574.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Overriding vendor`}
\n
{`The `}{`vendor`}{` directory is immutable in its nature. You can't and should never\nmodify any files inside of it, `}{`jb`}{` will revert those changes on the next run anyway.`}
\n
{`Nevertheless, it can sometimes become required to add changes there, e.g. if an\nupstream library contains a bug that needs to be fixed immediately, without\nwaiting for the upstream maintainer to review it.`}
\n
{`Shadowing`}
\n
{`Because `}{`import paths`}{` are ranked in Tanka, you can use\na technique called shadowing: By putting a file with the exact same name in a\nhigher ranked path, Tanka will prefer that file instead of the original in\n`}{`vendor`}{`, which has the lowest possible rank of 1.`}
\n
{`For example, if `}{`/vendor/foo/bar.libsonnet`}{` contained an error, you could create\n`}{`/lib/foo/bar.libsonnet`}{` and fix it there.`}
\n
\n
{`Tip:`}{` Instead of copying the file to the new location and making the edits,\nuse an absolute import and `}{`patching`}{`:`}
{`Important:`}{` If the file you override is not the one you directly import,\nbut instead imported by another file first, the override will only occur if\nthe placement of the file is alongside your `}{`main.libsonnet`}{`. This is due to\nthe logic behind the Jsonnet importer. Example: We import\n`}{`abc/main.libsonnet`}{` located in `}{`vendor/abc`}{`. Because Jsonnet first looks if\nfiles are locally present before considering the `}{`import\npaths`}{`, you need to make sure your override is\nactually picked up. In our example, you'd need to copy the `}{`main.libsonnet`}{`\ninto `}{`lib/abc`}{` as well.`}
\n
\n
{`Per environment`}
\n
{`Another common case is overriding the entire `}{`vendor`}{` bundle per environment.`}
\n
{`This is handy, when you for example want to test a change of an upstream\nlibrary which is used in many environments (including `}{`prod`}{`) in a single one,\nwithout affecting all the others.`}
\n
{`For this, Tanka lets you have a separate `}{`vendor`}{`, `}{`jsonnetfile.json`}{` and\n`}{`jsonnetfile.lock.json`}{` per environment. To do so:`}
\n
{`Create `}{`tkrc.yaml`}
\n
{`Tanka normally uses the `}{`jsonnetfile.json`}{` from your project to find its root.\nAs we are going to create another one of that down the tree in the next step, we\nneed another marker for `}{``}{`.`}
\n
{`For that, create an empty file called `}{`tkrc.yaml`}{` in your project's root,\nalongside the original `}{`jsonnetfile.json`}{`.`}
\n
\n
{`Info`}{`: While the name suggests that `}{`tkrc.yaml`}{` could be used for setting\nparameters, this is not the case yet.`} {`\n`}{`It might however be repurposed later, in case we need such functionality`}
\n
\n
{`Add a `}{`vendor`}{` to your environment`}
\n
{`In your environments folder (e.g. `}{`/environments/default`}{`):`}
{`Tip`}{`: You don't need to install everything into the new `}{`vendor/`}{`, as\npackages not present there can still be imported from the global `}{`/vendor`}{`.`}
\n
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-namespaces-md-eb97277738bc0df4b534.js b/pr-preview/pr-1029/component---docs-namespaces-md-eb97277738bc0df4b534.js
deleted file mode 100644
index 63368055d..000000000
--- a/pr-preview/pr-1029/component---docs-namespaces-md-eb97277738bc0df4b534.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{"+UK2":function(e,a,t){"use strict";t.r(a),t.d(a,"_frontmatter",(function(){return l})),t.d(a,"default",(function(){return i}));var n=t("wx14"),r=t("Ff2n"),s=(t("q1tI"),t("7ljp")),m=t("hhGP");t("qKvR");const c=["components"],l={};void 0!==l&&l&&l===Object(l)&&Object.isExtensible(l)&&!Object.prototype.hasOwnProperty.call(l,"__filemeta")&&Object.defineProperty(l,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/namespaces.md"}});const o={_frontmatter:l},p=m.a;function i(e){let{components:a}=e,t=Object(r.a)(e,c);return Object(s.b)(p,Object(n.a)({},o,t,{components:a,mdxType:"MDXLayout"}),Object(s.b)("h1",{id:"namespaces"},"Namespaces"),Object(s.b)("p",null,"When using Tanka, namespaces are handled slightly different compared to\n",Object(s.b)("inlineCode",{parentName:"p"},"kubectl"),", because environments offer more granular control than contexts used\nby ",Object(s.b)("inlineCode",{parentName:"p"},"kubectl"),"."),Object(s.b)("h2",{id:"default-namespaces"},"Default namespaces"),Object(s.b)("p",null,"In the ",Object(s.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/config/#file-format"},Object(s.b)("inlineCode",{parentName:"a"},"spec.json"))," of each environment, you can set the\n",Object(s.b)("inlineCode",{parentName:"p"},"spec.namespace")," field, which is the default namespace. The default namespace is\nset for every resource that ",Object(s.b)("strong",{parentName:"p"},"does not")," have a namespace ",Object(s.b)("strong",{parentName:"p"},"set from Jsonnet"),"."),Object(s.b)("table",null,Object(s.b)("thead",{parentName:"table"},Object(s.b)("tr",{parentName:"thead"},Object(s.b)("th",{parentName:"tr",align:null}),Object(s.b)("th",{parentName:"tr",align:null},"Scenario"),Object(s.b)("th",{parentName:"tr",align:null},"Action"))),Object(s.b)("tbody",{parentName:"table"},Object(s.b)("tr",{parentName:"tbody"},Object(s.b)("td",{parentName:"tr",align:null},"1."),Object(s.b)("td",{parentName:"tr",align:null},"Your resource ",Object(s.b)("strong",{parentName:"td"},"lacks namespace")," information (",Object(s.b)("inlineCode",{parentName:"td"},"metadata.namespace"),") unset or ",Object(s.b)("inlineCode",{parentName:"td"},'""')),Object(s.b)("td",{parentName:"tr",align:null},"Tanka sets ",Object(s.b)("inlineCode",{parentName:"td"},"metadata.namespace")," to the value of ",Object(s.b)("inlineCode",{parentName:"td"},"spec.namespace")," in ",Object(s.b)("inlineCode",{parentName:"td"},"spec.json"))),Object(s.b)("tr",{parentName:"tbody"},Object(s.b)("td",{parentName:"tr",align:null},"2."),Object(s.b)("td",{parentName:"tr",align:null},"Your resource ",Object(s.b)("strong",{parentName:"td"},"already has")," namespace information"),Object(s.b)("td",{parentName:"tr",align:null},"Tanka does nothing, accepting the explicit namespace")))),Object(s.b)("p",null,"While we recommend keeping environments limited to a single namespace, there are\nlegit cases where it's handy to have them span multiple namespaces, for example:"),Object(s.b)("ul",null,Object(s.b)("li",{parentName:"ul"},"Some other piece of software (Operators, etc) require resources to be in a specific namespace"),Object(s.b)("li",{parentName:"ul"},'A rarely changing "base" environment holding resources deployed for many clusters in the same way'),Object(s.b)("li",{parentName:"ul"},"etc.")),Object(s.b)("h2",{id:"cluster-wide-resources"},"Cluster-wide resources"),Object(s.b)("p",null,"Some resources in Kubernetes are cluster-wide, meaning they don't belong to a single namespace at all."),Object(s.b)("p",null,"Tanka will make an attempt to not add namespaces to ",Object(s.b)("em",{parentName:"p"},"known")," cluster-wide types.\nIt does this with a short list of types in ",Object(s.b)("a",{parentName:"p",href:"https://github.com/grafana/tanka/blob/main/pkg/process/namespace.go"},"the source code"),"."),Object(s.b)("p",null,"Tanka cannot feasibly maintain this list for all known custom resource types. In those cases, resources will have namespaces added to their manifests,\nand kubectl should happily apply them as non-namespaced resources."),Object(s.b)("p",null,"If this presents a problem for your workflow, you can ",Object(s.b)("strong",{parentName:"p"},"override this")," behavior\nper-resource, by setting the ",Object(s.b)("inlineCode",{parentName:"p"},"tanka.dev/namespaced")," annotation to ",Object(s.b)("inlineCode",{parentName:"p"},'"false"'),"\n(must be of ",Object(s.b)("inlineCode",{parentName:"p"},"string")," type):"),Object(s.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(s.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(s.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(s.b)("span",{parentName:"span",className:"mtk10"},"thing:"),Object(s.b)("span",{parentName:"span",className:"mtk1"}," clusterRole."),Object(s.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(s.b)("span",{parentName:"span",className:"mtk1"},"("),Object(s.b)("span",{parentName:"span",className:"mtk6"},'"myClusterRole"'),Object(s.b)("span",{parentName:"span",className:"mtk1"},")")),"\n",Object(s.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(s.b)("span",{parentName:"span",className:"mtk1"}," "),Object(s.b)("span",{parentName:"span",className:"mtk12"},"+"),Object(s.b)("span",{parentName:"span",className:"mtk1"}," clusterRole.mixin.metadata."),Object(s.b)("span",{parentName:"span",className:"mtk9"},"withAnnotationsMixin"),Object(s.b)("span",{parentName:"span",className:"mtk1"},"({ "),Object(s.b)("span",{parentName:"span",className:"mtk6"},'"tanka.dev/namespaced"'),Object(s.b)("span",{parentName:"span",className:"mtk1"},": "),Object(s.b)("span",{parentName:"span",className:"mtk6"},'"false"'),Object(s.b)("span",{parentName:"span",className:"mtk1"}," })")))),Object(s.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==i&&i&&i===Object(i)&&Object.isExtensible(i)&&!Object.prototype.hasOwnProperty.call(i,"__filemeta")&&Object.defineProperty(i,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/namespaces.md"}}),i.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-namespaces-md-eb97277738bc0df4b534.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-namespaces-md-eb97277738bc0df4b534.js.map b/pr-preview/pr-1029/component---docs-namespaces-md-eb97277738bc0df4b534.js.map
deleted file mode 100644
index 196b29220..000000000
--- a/pr-preview/pr-1029/component---docs-namespaces-md-eb97277738bc0df4b534.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/namespaces.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"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","file":"component---docs-namespaces-md-eb97277738bc0df4b534.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Namespaces`}
\n
{`When using Tanka, namespaces are handled slightly different compared to\n`}{`kubectl`}{`, because environments offer more granular control than contexts used\nby `}{`kubectl`}{`.`}
\n
{`Default namespaces`}
\n
{`In the `}{`spec.json`}{` of each environment, you can set the\n`}{`spec.namespace`}{` field, which is the default namespace. The default namespace is\nset for every resource that `}{`does not`}{` have a namespace `}{`set from Jsonnet`}{`.`}
\n
\n \n
\n
\n
{`Scenario`}
\n
{`Action`}
\n
\n \n \n
\n
{`1.`}
\n
{`Your resource `}{`lacks namespace`}{` information (`}{`metadata.namespace`}{`) unset or `}{`\"\"`}
\n
{`Tanka sets `}{`metadata.namespace`}{` to the value of `}{`spec.namespace`}{` in `}{`spec.json`}
{`Tanka does nothing, accepting the explicit namespace`}
\n
\n \n
\n
{`While we recommend keeping environments limited to a single namespace, there are\nlegit cases where it's handy to have them span multiple namespaces, for example:`}
\n
\n
{`Some other piece of software (Operators, etc) require resources to be in a specific namespace`}
\n
{`A rarely changing \"base\" environment holding resources deployed for many clusters in the same way`}
\n
{`etc.`}
\n
\n
{`Cluster-wide resources`}
\n
{`Some resources in Kubernetes are cluster-wide, meaning they don't belong to a single namespace at all.`}
\n
{`Tanka will make an attempt to not add namespaces to `}{`known`}{` cluster-wide types.\nIt does this with a short list of types in `}{`the source code`}{`.`}
\n
{`Tanka cannot feasibly maintain this list for all known custom resource types. In those cases, resources will have namespaces added to their manifests,\nand kubectl should happily apply them as non-namespaced resources.`}
\n
{`If this presents a problem for your workflow, you can `}{`override this`}{` behavior\nper-resource, by setting the `}{`tanka.dev/namespaced`}{` annotation to `}{`\"false\"`}{`\n(must be of `}{`string`}{` type):`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-server-side-apply-md-218774290e157fad3f47.js b/pr-preview/pr-1029/component---docs-server-side-apply-md-218774290e157fad3f47.js
deleted file mode 100644
index 92d339b9b..000000000
--- a/pr-preview/pr-1029/component---docs-server-side-apply-md-218774290e157fad3f47.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{"BC+V":function(e,t,a){"use strict";a.r(t),a.d(t,"_frontmatter",(function(){return s})),a.d(t,"default",(function(){return p}));var n=a("wx14"),r=a("Ff2n"),i=(a("q1tI"),a("7ljp")),l=a("hhGP");a("qKvR");const o=["components"],s={};void 0!==s&&s&&s===Object(s)&&Object.isExtensible(s)&&!Object.prototype.hasOwnProperty.call(s,"__filemeta")&&Object.defineProperty(s,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/server-side-apply.md"}});const c={_frontmatter:s},m=l.a;function p(e){let{components:t}=e,a=Object(r.a)(e,o);return Object(i.b)(m,Object(n.a)({},c,a,{components:t,mdxType:"MDXLayout"}),Object(i.b)("h1",{id:"server-side-apply"},"Server-Side Apply"),Object(i.b)("p",null,"Tanka supports\n",Object(i.b)("a",{parentName:"p",href:"https://kubernetes.io/docs/reference/using-api/server-side-apply/"},"server-side apply"),",\nwhich requires at least Kubernetes 1.16+, and was promoted to stable status in 1.22."),Object(i.b)("p",null,"To enable server-side diff in tanka, add the following field to ",Object(i.b)("inlineCode",{parentName:"p"},"spec.json"),":"),Object(i.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"diff"},Object(i.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},' "spec": {')),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(i.b)("span",{parentName:"span",className:"mtk6"},' "applyStrategy": "server",')),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(i.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(i.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(i.b)("p",null,"This also has the effect of changing the default ",Object(i.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/diff-strategy"},"diff strategy"),"\nto ",Object(i.b)("inlineCode",{parentName:"p"},"server"),", but this can be overridden via command line flags or ",Object(i.b)("inlineCode",{parentName:"p"},"spec.json"),"."),Object(i.b)("p",null,"While server-side apply doesn't have any effect on the resources being applied\nand is intended to be a general in-place upgrade to client-side apply, there are\ndifferences in how fields are managed that can make converting existing cluster\nresources a non-trival change."),Object(i.b)("p",null,"Identifying and fixing these changes are beyond the scope of this guide, but\nmany can be found before an apply by using the ",Object(i.b)("inlineCode",{parentName:"p"},"validate")," or ",Object(i.b)("inlineCode",{parentName:"p"},"server"),"\n",Object(i.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/diff-strategy"},"diff strategy"),"."),Object(i.b)("h2",{id:"field-conflicts"},"Field conflicts"),Object(i.b)("p",null,"As part of the changes, you may encounter error messages which\nrecommend the use of the ",Object(i.b)("inlineCode",{parentName:"p"},"--force-conflicts")," flag. Using ",Object(i.b)("inlineCode",{parentName:"p"},"tk apply --force"),"\nin server-side mode will enable that flag for kubectl instead of\n",Object(i.b)("inlineCode",{parentName:"p"},"kubectl --force"),", which no longer has any effect in server-side mode."),Object(i.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==p&&p&&p===Object(p)&&Object.isExtensible(p)&&!Object.prototype.hasOwnProperty.call(p,"__filemeta")&&Object.defineProperty(p,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/server-side-apply.md"}}),p.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-server-side-apply-md-218774290e157fad3f47.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-server-side-apply-md-218774290e157fad3f47.js.map b/pr-preview/pr-1029/component---docs-server-side-apply-md-218774290e157fad3f47.js.map
deleted file mode 100644
index e18dcce6a..000000000
--- a/pr-preview/pr-1029/component---docs-server-side-apply-md-218774290e157fad3f47.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/server-side-apply.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"2RAMaA,EAAe,QAAG,IAAAA,UAAAC,OAAAD,IAAAC,OAAAC,aAAAF,KAAAC,OAAAE,UAAAC,eAAAC,KAAAL,EAAA,eAAAC,OAAAK,eAAAN,EAAA,cAAAO,cAAA,EAAAC,MAAA,CAAAC,KAAA,eAAAC,SAAA,+BAC/B,MAAMC,EAAc,CAClBX,gBAEIY,EAAYC,IACH,SAASC,EAAUC,GAG/B,IAHgC,WACjCC,GAEDD,EADIE,EAAKC,YAAAH,EAAAI,GAER,OAAOC,YAACR,EAASS,YAAA,GAAKV,EAAiBM,EAAK,CAAED,WAAYA,EAAYM,QAAQ,cAG5EF,YAAA,MACE,GAAM,qBAAmB,qBAE3BA,YAAA,4BACFA,YAAA,KAAGG,WAAW,IACR,KAAQ,qEAAmE,qBACjD,2FAE9BH,YAAA,4EAAuEA,YAAA,cAAYG,WAAW,KAAG,aAA2B,KAC5HH,YAAA,OACE,UAAa,yCACb,gBAAiB,QAChBA,YAAA,QAAMG,WAAW,MAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACW,KACxCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,mCAC8B,KAC3DH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACG,KAChCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QAE3BH,YAAA,6DAAwDA,YAAA,KAAGG,WAAW,IAClE,KAAQ,qCAAmC,iBACrB,QACzBH,YAAA,cAAYG,WAAW,KAAG,UAAwB,0DAA2DH,YAAA,cAAYG,WAAW,KAAG,aAA2B,KACnKH,YAAA,8RAIAA,YAAA,yIAC6CA,YAAA,cAAYG,WAAW,KAAG,YAA0B,OAAQH,YAAA,cAAYG,WAAW,KAAG,UAAwB,KAC7JH,YAAA,KAAGG,WAAW,IACR,KAAQ,qCAAmC,iBACrB,KAC1BH,YAAA,MACE,GAAM,mBAAiB,mBAEzBA,YAAA,qGACuBA,YAAA,cAAYG,WAAW,KAAG,qBAAmC,gBAAiBH,YAAA,cAAYG,WAAW,KAAG,oBAAkC,uEAEnKH,YAAA,cAAYG,WAAW,KAAG,mBAAiC,yDAEzDH,YAAA,SACE,UAAa,2BAAyB,glCA6B3C,IAAAN,UAAAb,OAAAa,IAAAb,OAAAC,aAAAY,KAAAb,OAAAE,UAAAC,eAAAC,KAAAS,EAAA,eAAAb,OAAAK,eAAAQ,EAAA,cAAAP,cAAA,EAAAC,MAAA,CAAAC,KAAA,aAAAC,SAAA,+BAEDI,EAAWU,gBAAiB","file":"component---docs-server-side-apply-md-218774290e157fad3f47.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Server-Side Apply`}
\n
{`Tanka supports\n`}{`server-side apply`}{`,\nwhich requires at least Kubernetes 1.16+, and was promoted to stable status in 1.22.`}
\n
{`To enable server-side diff in tanka, add the following field to `}{`spec.json`}{`:`}
{`This also has the effect of changing the default `}{`diff strategy`}{`\nto `}{`server`}{`, but this can be overridden via command line flags or `}{`spec.json`}{`.`}
\n
{`While server-side apply doesn't have any effect on the resources being applied\nand is intended to be a general in-place upgrade to client-side apply, there are\ndifferences in how fields are managed that can make converting existing cluster\nresources a non-trival change.`}
\n
{`Identifying and fixing these changes are beyond the scope of this guide, but\nmany can be found before an apply by using the `}{`validate`}{` or `}{`server`}{`\n`}{`diff strategy`}{`.`}
\n
{`Field conflicts`}
\n
{`As part of the changes, you may encounter error messages which\nrecommend the use of the `}{`--force-conflicts`}{` flag. Using `}{`tk apply --force`}{`\nin server-side mode will enable that flag for kubectl instead of\n`}{`kubectl --force`}{`, which no longer has any effect in server-side mode.`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-targets-md-123f8be890eda328d792.js b/pr-preview/pr-1029/component---docs-targets-md-123f8be890eda328d792.js
deleted file mode 100644
index 9035b58d9..000000000
--- a/pr-preview/pr-1029/component---docs-targets-md-123f8be890eda328d792.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{txtL:function(e,a,t){"use strict";t.r(a),t.d(a,"_frontmatter",(function(){return p})),t.d(a,"default",(function(){return o}));var n=t("wx14"),s=t("Ff2n"),c=(t("q1tI"),t("7ljp")),m=t("hhGP");t("qKvR");const l=["components"],p={};void 0!==p&&p&&p===Object(p)&&Object.isExtensible(p)&&!Object.prototype.hasOwnProperty.call(p,"__filemeta")&&Object.defineProperty(p,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/targets.md"}});const r={_frontmatter:p},i=m.a;function o(e){let{components:a}=e,t=Object(s.a)(e,l);return Object(c.b)(i,Object(n.a)({},r,t,{components:a,mdxType:"MDXLayout"}),Object(c.b)("h1",{id:"output-filtering"},"Output Filtering"),Object(c.b)("p",null,"When a project becomes bigger over time and includes a lot of Kubernetes\nobjects, it may become required to operate on only a subset of them (e.g. apply\nonly a part of an application)."),Object(c.b)("p",null,"Tanka helps you with this, by allowing you to limit the used objects on the\ncommand line using the ",Object(c.b)("inlineCode",{parentName:"p"},"--target")," flag. Say you are deploying an ",Object(c.b)("inlineCode",{parentName:"p"},"nginx"),"\ninstance with a special ",Object(c.b)("inlineCode",{parentName:"p"},"nginx.conf")," and want to apply the ",Object(c.b)("inlineCode",{parentName:"p"},"ConfigMap")," first:"),Object(c.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(c.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},"# show the ConfigMap")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"$ tk show -t configmap/nginx "),Object(c.b)("span",{parentName:"span",className:"mtk9"},".")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},"# all good? apply!")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"$ tk apply -t configmap/nginx "),Object(c.b)("span",{parentName:"span",className:"mtk9"},".")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},"# and apply everything else:")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"$ tk apply "),Object(c.b)("span",{parentName:"span",className:"mtk9"},".")))),Object(c.b)("p",null,"The syntax of the ",Object(c.b)("inlineCode",{parentName:"p"},"--target")," / ",Object(c.b)("inlineCode",{parentName:"p"},"-t")," flag is ",Object(c.b)("inlineCode",{parentName:"p"},"--target=/"),". If\nmultiple objects match this pattern, all of them are used."),Object(c.b)("p",null,"The ",Object(c.b)("inlineCode",{parentName:"p"},"--target")," / ",Object(c.b)("inlineCode",{parentName:"p"},"-t")," flag can be specified multiple times, to work with\nmultiple objects."),Object(c.b)("h2",{id:"regular-expressions"},"Regular Expressions"),Object(c.b)("p",null,"The argument passed to the ",Object(c.b)("inlineCode",{parentName:"p"},"--target")," flag is interpreted as a\n",Object(c.b)("a",{parentName:"p",href:"https://github.com/google/re2/wiki/Syntax"},"RE2")," regular expression."),Object(c.b)("p",null,"This allows you to use all sorts of wildcards and other advanced matching\nfunctionality to select Kubernetes objects:"),Object(c.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(c.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},"# show all deployments")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"$ tk show "),Object(c.b)("span",{parentName:"span",className:"mtk9"},"."),Object(c.b)("span",{parentName:"span",className:"mtk1"}," -t "),Object(c.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(c.b)("span",{parentName:"span",className:"mtk6"},"deployment/.*"),Object(c.b)("span",{parentName:"span",className:"mtk5"},"'")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},'# show all objects named "loki"')),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"$ tk show "),Object(c.b)("span",{parentName:"span",className:"mtk9"},"."),Object(c.b)("span",{parentName:"span",className:"mtk1"}," -t "),Object(c.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(c.b)("span",{parentName:"span",className:"mtk6"},".*/loki"),Object(c.b)("span",{parentName:"span",className:"mtk5"},"'")))),Object(c.b)("h3",{id:"gotchas"},"Gotchas"),Object(c.b)("p",null,"When using regular expressions, there are some things to watch out for:"),Object(c.b)("h4",{id:"line-anchors"},"Line Anchors"),Object(c.b)("p",null,"Tanka automatically surrounds your regular expression with line anchors:"),Object(c.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"text"},Object(c.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},"^$"))),Object(c.b)("p",null,"For example, ",Object(c.b)("inlineCode",{parentName:"p"},"--target 'deployment/.*'")," becomes ",Object(c.b)("inlineCode",{parentName:"p"},"^deployment/.*$"),"."),Object(c.b)("h4",{id:"quoting"},"Quoting"),Object(c.b)("p",null,"Regular expressions may consist of characters that have special meanings in\nshell. Always make sure to properly quote your regular expression using ",Object(c.b)("strong",{parentName:"p"},"single\nquotes"),"."),Object(c.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"zsh"},Object(c.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},"# shell attempts to match the wildcard itself:")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"zsh-5.4.2$ tk show "),Object(c.b)("span",{parentName:"span",className:"mtk9"},"."),Object(c.b)("span",{parentName:"span",className:"mtk1"}," -t deployment/."),Object(c.b)("span",{parentName:"span",className:"mtk12"},"*")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"zsh: no matches found: deployment/."),Object(c.b)("span",{parentName:"span",className:"mtk12"},"*")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},"# properly quoted:")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"zsh-5.4.2$ tk show "),Object(c.b)("span",{parentName:"span",className:"mtk9"},"."),Object(c.b)("span",{parentName:"span",className:"mtk1"}," -t "),Object(c.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(c.b)("span",{parentName:"span",className:"mtk6"},"deployment/.*"),Object(c.b)("span",{parentName:"span",className:"mtk5"},"'")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"---")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"apiVersion: apps/v1")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"kind: Deployment")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},"# ...")))),Object(c.b)("h2",{id:"excluding"},"Excluding"),Object(c.b)("p",null,"Sometimes it may be desirably to exclude a single object, instead of including all others."),Object(c.b)("p",null,"To do so, prepend the regular expression with an exclamation mark (",Object(c.b)("inlineCode",{parentName:"p"},"!"),"), like so:"),Object(c.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(c.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk3 mtki"},"# filter out all Deployments")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"$ tk show "),Object(c.b)("span",{parentName:"span",className:"mtk9"},"."),Object(c.b)("span",{parentName:"span",className:"mtk1"}," -t "),Object(c.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(c.b)("span",{parentName:"span",className:"mtk6"},"!deployment/.*"),Object(c.b)("span",{parentName:"span",className:"mtk5"},"'")))),Object(c.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==o&&o&&o===Object(o)&&Object.isExtensible(o)&&!Object.prototype.hasOwnProperty.call(o,"__filemeta")&&Object.defineProperty(o,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/targets.md"}}),o.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-targets-md-123f8be890eda328d792.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-targets-md-123f8be890eda328d792.js.map b/pr-preview/pr-1029/component---docs-targets-md-123f8be890eda328d792.js.map
deleted file mode 100644
index 1da77213f..000000000
--- a/pr-preview/pr-1029/component---docs-targets-md-123f8be890eda328d792.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/targets.md"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","isMDXComponent"],"mappings":"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","file":"component---docs-targets-md-123f8be890eda328d792.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Output Filtering`}
\n
{`When a project becomes bigger over time and includes a lot of Kubernetes\nobjects, it may become required to operate on only a subset of them (e.g. apply\nonly a part of an application).`}
\n
{`Tanka helps you with this, by allowing you to limit the used objects on the\ncommand line using the `}{`--target`}{` flag. Say you are deploying an `}{`nginx`}{`\ninstance with a special `}{`nginx.conf`}{` and want to apply the `}{`ConfigMap`}{` first:`}
\n
{`# show the ConfigMap`}{`\n`}{`$ tk show -t configmap/nginx `}{`.`}{`\n`}{`\n`}{`# all good? apply!`}{`\n`}{`$ tk apply -t configmap/nginx `}{`.`}{`\n`}{`\n`}{`# and apply everything else:`}{`\n`}{`$ tk apply `}{`.`}
\n
{`The syntax of the `}{`--target`}{` / `}{`-t`}{` flag is `}{`--target=/`}{`. If\nmultiple objects match this pattern, all of them are used.`}
\n
{`The `}{`--target`}{` / `}{`-t`}{` flag can be specified multiple times, to work with\nmultiple objects.`}
\n
{`Regular Expressions`}
\n
{`The argument passed to the `}{`--target`}{` flag is interpreted as a\n`}{`RE2`}{` regular expression.`}
\n
{`This allows you to use all sorts of wildcards and other advanced matching\nfunctionality to select Kubernetes objects:`}
\n
{`# show all deployments`}{`\n`}{`$ tk show `}{`.`}{` -t `}{`'`}{`deployment/.*`}{`'`}{`\n`}{`\n`}{`# show all objects named \"loki\"`}{`\n`}{`$ tk show `}{`.`}{` -t `}{`'`}{`.*/loki`}{`'`}
\n
{`Gotchas`}
\n
{`When using regular expressions, there are some things to watch out for:`}
\n
{`Line Anchors`}
\n
{`Tanka automatically surrounds your regular expression with line anchors:`}
\n
{`^$`}
\n
{`For example, `}{`--target 'deployment/.*'`}{` becomes `}{`^deployment/.*$`}{`.`}
\n
{`Quoting`}
\n
{`Regular expressions may consist of characters that have special meanings in\nshell. Always make sure to properly quote your regular expression using `}{`single\nquotes`}{`.`}
\n
{`# shell attempts to match the wildcard itself:`}{`\n`}{`zsh-5.4.2$ tk show `}{`.`}{` -t deployment/.`}{`*`}{`\n`}{`zsh: no matches found: deployment/.`}{`*`}{`\n`}{`\n`}{`# properly quoted:`}{`\n`}{`zsh-5.4.2$ tk show `}{`.`}{` -t `}{`'`}{`deployment/.*`}{`'`}{`\n`}{`---`}{`\n`}{`apiVersion: apps/v1`}{`\n`}{`kind: Deployment`}{`\n`}{`# ...`}
\n
{`Excluding`}
\n
{`Sometimes it may be desirably to exclude a single object, instead of including all others.`}
\n
{`To do so, prepend the regular expression with an exclamation mark (`}{`!`}{`), like so:`}
\n
{`# filter out all Deployments`}{`\n`}{`$ tk show `}{`.`}{` -t `}{`'`}{`!deployment/.*`}{`'`}
\n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-tutorial-abstraction-mdx-b97edf44038784f040f4.js b/pr-preview/pr-1029/component---docs-tutorial-abstraction-mdx-b97edf44038784f040f4.js
deleted file mode 100644
index e1498cd60..000000000
--- a/pr-preview/pr-1029/component---docs-tutorial-abstraction-mdx-b97edf44038784f040f4.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{pcXi:function(a,e,s){"use strict";s.r(e),s.d(e,"_frontmatter",(function(){return N})),s.d(e,"default",(function(){return i}));var n=s("wx14"),t=s("Ff2n"),m=(s("q1tI"),s("7ljp")),p=s("hhGP"),c=s("Z+0r");s("qKvR");const b=["components"],N={};void 0!==N&&N&&N===Object(N)&&Object.isExtensible(N)&&!Object.prototype.hasOwnProperty.call(N,"__filemeta")&&Object.defineProperty(N,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/tutorial/abstraction.mdx"}});const l={_frontmatter:N},r=p.a;function i(a){let{components:e}=a,s=Object(t.a)(a,b);return Object(m.b)(r,Object(n.a)({},l,s,{components:e,mdxType:"MDXLayout"}),Object(m.b)("h1",{id:"abstraction"},"Abstraction"),Object(m.b)("p",null,"While we won't need to touch the resource definitions directly that frequently\nanymore now that we have the ",Object(m.b)("inlineCode",{parentName:"p"},"_config")," object for our tunables, the\n",Object(m.b)("inlineCode",{parentName:"p"},"main.jsonnet")," file is still very long and hard to read. Especially because of\nall the brackets, it's even worse than yaml at the moment."),Object(m.b)("h2",{id:"splitting-it-up"},"Splitting it up"),Object(m.b)("p",null,"Let's start cleaning this up by separating logical pieces into distinct files:"),Object(m.b)("ul",null,Object(m.b)("li",{parentName:"ul"},Object(m.b)("inlineCode",{parentName:"li"},"main.jsonnet"),": Still our main file, containing the ",Object(m.b)("inlineCode",{parentName:"li"},"_config")," object and importing the other files"),Object(m.b)("li",{parentName:"ul"},Object(m.b)("inlineCode",{parentName:"li"},"grafana.jsonnet"),": ",Object(m.b)("inlineCode",{parentName:"li"},"Deployment")," and ",Object(m.b)("inlineCode",{parentName:"li"},"Service")," for the Grafana instance"),Object(m.b)("li",{parentName:"ul"},Object(m.b)("inlineCode",{parentName:"li"},"prometheus.jsonnet"),": ",Object(m.b)("inlineCode",{parentName:"li"},"Deployment")," and ",Object(m.b)("inlineCode",{parentName:"li"},"Service")," for the Prometheus server")),Object(m.b)("h5",{id:"environmentsdefaultgrafanajsonnet"},"/environments/default/grafana.jsonnet"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// DO NOT use the root level here.")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Include the grafana subkey, otherwise $ won't work.")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"deployment:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiVersion:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'apps/v1'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'Deployment'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"._config.grafana.name,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"spec:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"selector:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"matchLabels:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"._config.grafana.name,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"template:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"labels:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"._config.grafana.name,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"spec:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"containers:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," [")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"image:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana/grafana'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"._config.grafana.name,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"ports:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," [{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"containerPort:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"._config.grafana.port,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'ui'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"service:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiVersion:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'v1'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'Service'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"labels:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"._config.grafana.name,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"._config.grafana.name,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"spec:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"ports:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," [{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'%s-ui'"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"%"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"._config.grafana.name,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"port:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"._config.grafana.port,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"targetPort:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"._config.grafana.port,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"selector:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"._config.grafana.name,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"type:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'NodePort'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"The file should contain just the same that was located under the ",Object(m.b)("inlineCode",{parentName:"p"},"grafana")," key\non the root object before. Do the same for ",Object(m.b)("inlineCode",{parentName:"p"},"/environments/default/prometheus.jsonnet")," as well."),Object(m.b)("h5",{id:"environmentsdefaultmainjsonnet"},"/environments/default/main.jsonnet"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Think of `import` as copy-pasting the contents")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// of ./grafana.jsonnet here")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"grafana.jsonnet"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},") "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"prometheus.jsonnet"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},") "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk7"},"_config::"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"port:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"3000"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"grafana"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"prometheus:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"port:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"9090"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"prometheus"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"Clarification"),":",Object(m.b)("br",{parentName:"p"}),"\n","It might seem odd at first sight, that this code works, because\n",Object(m.b)("inlineCode",{parentName:"p"},"grafana.jsonnet")," still refers to the root object using ",Object(m.b)("inlineCode",{parentName:"p"},"$"),", even\nthough it is outside of the file's scope.",Object(m.b)("br",{parentName:"p"}),"\n","However, Jsonnet is lazy-evaluated which means that the contents of\n",Object(m.b)("inlineCode",{parentName:"p"},"grafana.jsonnet")," are ",Object(m.b)("strong",{parentName:"p"},'first "copied"')," into ",Object(m.b)("inlineCode",{parentName:"p"},"main.jsonnet")," (the root\nobject) and ",Object(m.b)("strong",{parentName:"p"},"then evaluated"),". This means the above code actually consists of\nall three objects joined to one big object, which is then converted to JSON.")),Object(m.b)("h2",{id:"helper-utilities"},"Helper utilities"),Object(m.b)("p",null,"While ",Object(m.b)("inlineCode",{parentName:"p"},"main.jsonnet")," is now short and very readable, the other two files are not\nreally an improvement over regular yaml, mostly because they are still full of\nboilerplate."),Object(m.b)("p",null,"Let's use functions to create some useful helpers to reduce the amount of\nrepetition. For that, we create a new file called ",Object(m.b)("inlineCode",{parentName:"p"},"kubernetes.libsonnet"),", which\nwill hold our Kubernetes utilities."),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"Note"),": The extension for Jsonnet libraries is ",Object(m.b)("inlineCode",{parentName:"p"},".libsonnet"),". While you do\nnot have to use it, it distinguishes helper code from actual configuration.")),Object(m.b)("h3",{id:"a-deployment-constructor"},"A Deployment constructor"),Object(m.b)("p",null,"Creating a ",Object(m.b)("inlineCode",{parentName:"p"},"Deployment")," requires some mandatory information and a lot of\nboilerplate. A function that creates one could look like this:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// hidden k namespace for this library")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk7"},"k::"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"deployment:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(name, containers)"),Object(m.b)("span",{parentName:"span",className:"mtk12"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiVersion:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"apps/v1"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"Deployment"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," name,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"spec:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"selector:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," { "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"matchLabels:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," name,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }},")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"template:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," { "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"labels:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," name,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }},")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"spec:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," { "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"containers:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," containers }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"Invoking this function will substitute all the variables with the respective\npassed function parameters and return the assembled object."),Object(m.b)("p",null,"To use it, just add it to the root object in ",Object(m.b)("inlineCode",{parentName:"p"},"main.jsonnet"),":"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ("),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"kubernetes.libsonnet"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},") "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// this line adds it")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ("),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"grafana.jsonnet"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},") "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ("),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"prometheus.jsonnet"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},") "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," { "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")))),Object(m.b)("p",null,"Let's simplify our ",Object(m.b)("inlineCode",{parentName:"p"},"grafana.jsonnet")," a bit:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"deployment:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},".k.deployment."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"grafana"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},", [{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," image: "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana/grafana'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," name: "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ports: [{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," containerPort: "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"3000"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," name: "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'ui'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }]),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"service:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiVersion:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'v1'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'Service'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"labels:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"spec:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"ports:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," [{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana-ui'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"port:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"3000"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"targetPort:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"3000"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"selector:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"type:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'NodePort'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"This drastically simplified the creation of the ",Object(m.b)("inlineCode",{parentName:"p"},"Deployment"),", because we do not\nneed to remember how exactly a ",Object(m.b)("inlineCode",{parentName:"p"},"Deployment")," is structured anymore. Just call use\nour helper and you are good to go."),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"Task"),": Now try adding a constructor for a ",Object(m.b)("inlineCode",{parentName:"p"},"Service")," to\n",Object(m.b)("inlineCode",{parentName:"p"},"kubernetes.libsonnet")," and use both helpers to recreate the other objects as\nwell.")),Object(m.b)(c.a,{prev:"/tutorial/parameters",next:"/tutorial/k-lib",mdxType:"TutorialButtons"}),Object(m.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==i&&i&&i===Object(i)&&Object.isExtensible(i)&&!Object.prototype.hasOwnProperty.call(i,"__filemeta")&&Object.defineProperty(i,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/tutorial/abstraction.mdx"}}),i.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-tutorial-abstraction-mdx-b97edf44038784f040f4.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-tutorial-abstraction-mdx-b97edf44038784f040f4.js.map b/pr-preview/pr-1029/component---docs-tutorial-abstraction-mdx-b97edf44038784f040f4.js.map
deleted file mode 100644
index 2cf5acde2..000000000
--- a/pr-preview/pr-1029/component---docs-tutorial-abstraction-mdx-b97edf44038784f040f4.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/tutorial/abstraction.mdx"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","TutorialButtons","prev","next","isMDXComponent"],"mappings":"qSAOaA,EAAe,QAAG,IAAAA,UAAAC,OAAAD,IAAAC,OAAAC,aAAAF,KAAAC,OAAAE,UAAAC,eAAAC,KAAAL,EAAA,eAAAC,OAAAK,eAAAN,EAAA,cAAAO,cAAA,EAAAC,MAAA,CAAAC,KAAA,eAAAC,SAAA,mCAC/B,MAAMC,EAAc,CAClBX,gBAEIY,EAAYC,IACH,SAASC,EAAUC,GAG/B,IAHgC,WACjCC,GAEDD,EADIE,EAAKC,YAAAH,EAAAI,GAER,OAAOC,YAACR,EAASS,YAAA,GAAKV,EAAiBM,EAAK,CAAED,WAAYA,EAAYM,QAAQ,cAG5EF,YAAA,MACE,GAAM,eAAa,eAErBA,YAAA,yHAC2BA,YAAA,cAAYG,WAAW,KAAG,WAAyB,kCAChFH,YAAA,cAAYG,WAAW,KAAG,gBAA8B,gIAEtDH,YAAA,MACE,GAAM,mBAAiB,mBAEzBA,YAAA,2FACAA,YAAA,UACEA,YAAA,MAAIG,WAAW,MAAKH,YAAA,cAAYG,WAAW,MAAI,gBAA8B,yCAA0CH,YAAA,cAAYG,WAAW,MAAI,WAAyB,yCAC3KH,YAAA,MAAIG,WAAW,MAAKH,YAAA,cAAYG,WAAW,MAAI,mBAAiC,KAAMH,YAAA,cAAYG,WAAW,MAAI,cAA4B,QAASH,YAAA,cAAYG,WAAW,MAAI,WAAyB,6BAC1MH,YAAA,MAAIG,WAAW,MAAKH,YAAA,cAAYG,WAAW,MAAI,sBAAoC,KAAMH,YAAA,cAAYG,WAAW,MAAI,cAA4B,QAASH,YAAA,cAAYG,WAAW,MAAI,WAAyB,+BAE/MH,YAAA,MACE,GAAM,qCAAmC,yCAE3CA,YAAA,OACE,UAAa,yCACb,gBAAiB,WAChBA,YAAA,QAAMG,WAAW,MAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,aAAW,uCAC6B,KAC/DH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,aAAW,2DACiD,KACnFH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,eACGH,YAAA,QAAMG,WAAW,OACxC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,eACGH,YAAA,QAAMG,WAAW,OACxC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,aACEH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,aACCH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,2BACsB,KACnDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,aACQ,KACrCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,aACCH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,SAAO,gBACIH,YAAA,QAAMG,WAAW,OACzC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,2BACsB,KACnDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,iBACY,KACzCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,aACCH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,SAAO,aACCH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,SAAO,WACDH,YAAA,QAAMG,WAAW,OACpC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,kBACOH,YAAA,QAAMG,WAAW,OAC3C,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,2BACsB,KACnDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,mBACc,KAC3CH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,iBACY,KACzCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,SAAO,eACGH,YAAA,QAAMG,WAAW,OACxC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,oBACe,KAC5CH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,oBACSH,YAAA,QAAMG,WAAW,OAC7C,UAAa,SAAO,UACFH,YAAA,QAAMG,WAAW,OACnC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,qBACUH,YAAA,QAAMG,WAAW,OAC9C,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,oBACSH,YAAA,QAAMG,WAAW,OAC7C,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,2BACsB,KACnDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,oBACSH,YAAA,QAAMG,WAAW,OAC7C,UAAa,SAAO,UACFH,YAAA,QAAMG,WAAW,OACnC,UAAa,QAAM,QACG,KAChCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,wBACaH,YAAA,QAAMG,WAAW,OACjD,UAAa,SAAO,kBACMH,YAAA,QAAMG,WAAW,OAC3C,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,2BACsB,KACnDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,wBACaH,YAAA,QAAMG,WAAW,OACjD,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,wBACmB,KAChDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,qBACgB,KAC7CH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,mBACc,KAC3CH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,iBACY,KACzCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,aACQ,KACrCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,WACM,KACnCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,eACGH,YAAA,QAAMG,WAAW,OACxC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,aACEH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,aACCH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,WACDH,YAAA,QAAMG,WAAW,OACpC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,2BACsB,KACnDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,2BACsB,KACnDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,aACQ,KACrCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,UACFH,YAAA,QAAMG,WAAW,OACnC,UAAa,QAAM,QACG,KAChCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,WACAH,YAAA,QAAMG,WAAW,OACpC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,SAAO,KACPH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,2BACsB,KACnDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,2BACsB,KACnDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,SAAO,eACGH,YAAA,QAAMG,WAAW,OACxC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,2BACsB,KACnDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACW,KACxCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,aACCH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,2BACsB,KACnDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,aACQ,KACrCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,WACM,KACnCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACG,KAChCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QAE3BH,YAAA,6EAAwEA,YAAA,cAAYG,WAAW,KAAG,WAAyB,oDAClFH,YAAA,cAAYG,WAAW,KAAG,4CAA0D,aAC7HH,YAAA,MACE,GAAM,kCAAgC,sCAExCA,YAAA,OACE,UAAa,yCACb,gBAAiB,WAChBA,YAAA,QAAMG,WAAW,MAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,aAAW,sDAC8C,KAChFH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,aAAW,iCACuB,KACzDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,qBACUH,YAAA,QAAMG,WAAW,OAC9C,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,MACA,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,wBACaH,YAAA,QAAMG,WAAW,OACjD,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,MACA,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,QAAM,aACEH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,aACEH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,WACM,KACnCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,eACGH,YAAA,QAAMG,WAAW,OACxC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,iBACY,KACzCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACK,KAClCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACG,KAChCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QAE3BH,YAAA,kBACEA,YAAA,KAAGG,WAAW,cAAaH,YAAA,UAAQG,WAAW,KAAG,iBAA2B,IAAKH,YAAA,MAAIG,WAAW,MAAS,yEAE7GH,YAAA,cAAYG,WAAW,KAAG,mBAAiC,0CAA2CH,YAAA,cAAYG,WAAW,KAAG,KAAmB,oDAC1GH,YAAA,MAAIG,WAAW,MAAS,6EAEjEH,YAAA,cAAYG,WAAW,KAAG,mBAAiC,QAASH,YAAA,UAAQG,WAAW,KAAG,kBAA4B,SAAUH,YAAA,cAAYG,WAAW,KAAG,gBAA8B,2BAC5KH,YAAA,UAAQG,WAAW,KAAG,kBAA4B,mIAG5DH,YAAA,MACE,GAAM,oBAAkB,oBAE1BA,YAAA,kBAAaA,YAAA,cAAYG,WAAW,KAAG,gBAA8B,8JAGrEH,YAAA,yIACgDA,YAAA,cAAYG,WAAW,KAAG,wBAAsC,gDAEhHH,YAAA,kBACEA,YAAA,KAAGG,WAAW,cAAaH,YAAA,UAAQG,WAAW,KAAG,QAAkB,4CAA6CH,YAAA,cAAYG,WAAW,KAAG,cAA4B,gGAGxKH,YAAA,MACE,GAAM,4BAA0B,4BAElCA,YAAA,uBAAkBA,YAAA,cAAYG,WAAW,KAAG,cAA4B,qHAExEH,YAAA,OACE,UAAa,yCACb,gBAAiB,WAChBA,YAAA,QAAMG,WAAW,MAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,aAAW,2CACiC,KACnEH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,QAAM,OACJH,YAAA,QAAMG,WAAW,OAChC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,eACGH,YAAA,QAAMG,WAAW,OACxC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,QAAM,OACJH,YAAA,QAAMG,WAAW,OAChC,UAAa,QAAM,sBACWH,YAAA,QAAMG,WAAW,OAC/C,UAAa,SAAO,KACPH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,eACGH,YAAA,QAAMG,WAAW,OACxC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,aACEH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,aACCH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,WACM,KACnCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,SAAO,aACCH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,OACJH,YAAA,QAAMG,WAAW,OAChC,UAAa,SAAO,gBACIH,YAAA,QAAMG,WAAW,OACzC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,WACM,KACnCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,kBACa,KAC1CH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,SAAO,aACCH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,SAAO,aACCH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,OACJH,YAAA,QAAMG,WAAW,OAChC,UAAa,SAAO,WACDH,YAAA,QAAMG,WAAW,OACpC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,kBACOH,YAAA,QAAMG,WAAW,OAC3C,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,WACM,KACnCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,oBACe,KAC5CH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,OACJH,YAAA,QAAMG,WAAW,OAChC,UAAa,SAAO,eACGH,YAAA,QAAMG,WAAW,OACxC,UAAa,QAAM,kBACa,KAC1CH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACW,KACxCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACS,KACtCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACO,KACpCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACK,KAClCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACG,KAChCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QAE3BH,YAAA,sJAEAA,YAAA,yDAAoDA,YAAA,cAAYG,WAAW,KAAG,gBAA8B,KAC5GH,YAAA,OACE,UAAa,yCACb,gBAAiB,WAChBA,YAAA,QAAMG,WAAW,MAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,OACJH,YAAA,QAAMG,WAAW,OAChC,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,0BACeH,YAAA,QAAMG,WAAW,OACnD,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,KACPH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,aAAW,yBACe,KACjDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,OACJH,YAAA,QAAMG,WAAW,OAChC,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,qBACUH,YAAA,QAAMG,WAAW,OAC9C,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,MACA,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,OACJH,YAAA,QAAMG,WAAW,OAChC,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,wBACaH,YAAA,QAAMG,WAAW,OACjD,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,MACA,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,aAAW,aACHH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,SAE3BH,YAAA,+BAA0BA,YAAA,cAAYG,WAAW,KAAG,mBAAiC,WACrFH,YAAA,OACE,UAAa,yCACb,gBAAiB,WAChBA,YAAA,QAAMG,WAAW,MAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,eACGH,YAAA,QAAMG,WAAW,OACxC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,kBACOH,YAAA,QAAMG,WAAW,OAC3C,UAAa,QAAM,OACJH,YAAA,QAAMG,WAAW,OAChC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,aACEH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,SACI,KACjCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,iBACMH,YAAA,QAAMG,WAAW,OAC1C,UAAa,QAAM,qBACUH,YAAA,QAAMG,WAAW,OAC9C,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,QAAM,aACEH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,oBACe,KAC5CH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,6BACkBH,YAAA,QAAMG,WAAW,OACtD,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,oBACSH,YAAA,QAAMG,WAAW,OAC7C,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACS,KACtCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,aACQ,KACrCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,eACGH,YAAA,QAAMG,WAAW,OACxC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,aACEH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,aACCH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,WACDH,YAAA,QAAMG,WAAW,OACpC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,aACEH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,aACEH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,aACQ,KACrCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,UACFH,YAAA,QAAMG,WAAW,OACnC,UAAa,QAAM,QACG,KAChCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,SAAO,eACGH,YAAA,QAAMG,WAAW,OACxC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACW,KACxCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,aACCH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,aACEH,YAAA,QAAMG,WAAW,OACtC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,aACQ,KACrCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,WACM,KACnCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACG,KAChCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QAE3BH,YAAA,4DAAuDA,YAAA,cAAYG,WAAW,KAAG,cAA4B,uDAChFH,YAAA,cAAYG,WAAW,KAAG,cAA4B,6EAEnFH,YAAA,kBACEA,YAAA,KAAGG,WAAW,cAAaH,YAAA,UAAQG,WAAW,KAAG,QAAkB,wCAAyCH,YAAA,cAAYG,WAAW,KAAG,WAAyB,QACnKH,YAAA,cAAYG,WAAW,KAAG,wBAAsC,kEAI9DH,YAACI,IAAe,CAACC,KAAK,uBAAuBC,KAAK,kBAAkBJ,QAAQ,oBAE5EF,YAAA,SACE,UAAa,2BAAyB,glCA6B3C,IAAAN,UAAAb,OAAAa,IAAAb,OAAAC,aAAAY,KAAAb,OAAAE,UAAAC,eAAAC,KAAAS,EAAA,eAAAb,OAAAK,eAAAQ,EAAA,cAAAP,cAAA,EAAAC,MAAA,CAAAC,KAAA,aAAAC,SAAA,mCAEDI,EAAWa,gBAAiB","file":"component---docs-tutorial-abstraction-mdx-b97edf44038784f040f4.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nimport TutorialButtons from \"./TutorialButtons\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Abstraction`}
\n
{`While we won't need to touch the resource definitions directly that frequently\nanymore now that we have the `}{`_config`}{` object for our tunables, the\n`}{`main.jsonnet`}{` file is still very long and hard to read. Especially because of\nall the brackets, it's even worse than yaml at the moment.`}
\n
{`Splitting it up`}
\n
{`Let's start cleaning this up by separating logical pieces into distinct files:`}
\n
\n
{`main.jsonnet`}{`: Still our main file, containing the `}{`_config`}{` object and importing the other files`}
\n
{`grafana.jsonnet`}{`: `}{`Deployment`}{` and `}{`Service`}{` for the Grafana instance`}
\n
{`prometheus.jsonnet`}{`: `}{`Deployment`}{` and `}{`Service`}{` for the Prometheus server`}
{`The file should contain just the same that was located under the `}{`grafana`}{` key\non the root object before. Do the same for `}{`/environments/default/prometheus.jsonnet`}{` as well.`}
\n
{`/environments/default/main.jsonnet`}
\n
{`// Think of \\`import\\` as copy-pasting the contents`}{`\n`}{`// of ./grafana.jsonnet here`}{`\n`}{`(`}{`import`}{` `}{`\"grafana.jsonnet\"`}{`) `}{`+`}{`\n`}{`(`}{`import`}{` `}{`\"prometheus.jsonnet\"`}{`) `}{`+`}{`\n`}{`{`}{`\n`}{` `}{`_config::`}{` {`}{`\n`}{` `}{`grafana:`}{` {`}{`\n`}{` `}{`port:`}{` `}{`3000`}{`,`}{`\n`}{` `}{`name:`}{` `}{`\"grafana\"`}{`,`}{`\n`}{` },`}{`\n`}{` `}{`prometheus:`}{` {`}{`\n`}{` `}{`port:`}{` `}{`9090`}{`,`}{`\n`}{` `}{`name:`}{` `}{`\"prometheus\"`}{`\n`}{` }`}{`\n`}{` }`}{`\n`}{`}`}
\n
\n
{`Clarification`}{`:`} {`\n`}{`It might seem odd at first sight, that this code works, because\n`}{`grafana.jsonnet`}{` still refers to the root object using `}{`$`}{`, even\nthough it is outside of the file's scope.`} {`\n`}{`However, Jsonnet is lazy-evaluated which means that the contents of\n`}{`grafana.jsonnet`}{` are `}{`first \"copied\"`}{` into `}{`main.jsonnet`}{` (the root\nobject) and `}{`then evaluated`}{`. This means the above code actually consists of\nall three objects joined to one big object, which is then converted to JSON.`}
\n
\n
{`Helper utilities`}
\n
{`While `}{`main.jsonnet`}{` is now short and very readable, the other two files are not\nreally an improvement over regular yaml, mostly because they are still full of\nboilerplate.`}
\n
{`Let's use functions to create some useful helpers to reduce the amount of\nrepetition. For that, we create a new file called `}{`kubernetes.libsonnet`}{`, which\nwill hold our Kubernetes utilities.`}
\n
\n
{`Note`}{`: The extension for Jsonnet libraries is `}{`.libsonnet`}{`. While you do\nnot have to use it, it distinguishes helper code from actual configuration.`}
\n
\n
{`A Deployment constructor`}
\n
{`Creating a `}{`Deployment`}{` requires some mandatory information and a lot of\nboilerplate. A function that creates one could look like this:`}
{`This drastically simplified the creation of the `}{`Deployment`}{`, because we do not\nneed to remember how exactly a `}{`Deployment`}{` is structured anymore. Just call use\nour helper and you are good to go.`}
\n
\n
{`Task`}{`: Now try adding a constructor for a `}{`Service`}{` to\n`}{`kubernetes.libsonnet`}{` and use both helpers to recreate the other objects as\nwell.`}
\n
\n\n \n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-tutorial-environments-mdx-b932dda633298bd4750f.js b/pr-preview/pr-1029/component---docs-tutorial-environments-mdx-b932dda633298bd4750f.js
deleted file mode 100644
index 01b1cffae..000000000
--- a/pr-preview/pr-1029/component---docs-tutorial-environments-mdx-b932dda633298bd4750f.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{RnbX:function(a,e,s){"use strict";s.r(e),s.d(e,"_frontmatter",(function(){return l})),s.d(e,"default",(function(){return i}));var n=s("wx14"),t=s("Ff2n"),m=(s("q1tI"),s("7ljp")),p=s("hhGP"),c=s("Z+0r");s("qKvR");const b=["components"],l={};void 0!==l&&l&&l===Object(l)&&Object.isExtensible(l)&&!Object.prototype.hasOwnProperty.call(l,"__filemeta")&&Object.defineProperty(l,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/tutorial/environments.mdx"}});const N={_frontmatter:l},r=p.a;function i(a){let{components:e}=a,s=Object(t.a)(a,b);return Object(m.b)(r,Object(n.a)({},N,s,{components:e,mdxType:"MDXLayout"}),Object(m.b)("h1",{id:"environments"},"Environments"),Object(m.b)("p",null,"At this point, our configuration is already flexible and concise, but not\nreally reusable. Let's take a look at Tanka's third buzzword as well: ",Object(m.b)("strong",{parentName:"p"},"Environments"),"."),Object(m.b)("p",null,"These days, the same piece of software is usually deployed many times inside a\nsingle organization. This could be ",Object(m.b)("inlineCode",{parentName:"p"},"dev"),", ",Object(m.b)("inlineCode",{parentName:"p"},"testing")," and ",Object(m.b)("inlineCode",{parentName:"p"},"prod")," environments, but\nalso regions (",Object(m.b)("inlineCode",{parentName:"p"},"europe"),", ",Object(m.b)("inlineCode",{parentName:"p"},"us"),", ",Object(m.b)("inlineCode",{parentName:"p"},"asia"),") or individual customers (",Object(m.b)("inlineCode",{parentName:"p"},"foo-corp"),",\n",Object(m.b)("inlineCode",{parentName:"p"},"bar-gmbh"),", ",Object(m.b)("inlineCode",{parentName:"p"},"baz-inc"),")."),Object(m.b)("p",null,"Most of the application however is exactly the same across those environments ...\nusually only configuration, scaling or small details are different after all.\nYAML (and thus ",Object(m.b)("inlineCode",{parentName:"p"},"kubectl"),") provides us only one solution here: Duplicating the\ndirectory, changing the details, maintaining both. But what if you have 32\nenvironments? Correct! Then you have to maintain 32 directories of YAML. And we can all\nimagine the nightmare of these files drifting apart from each other."),Object(m.b)("p",null,"But again, ",Object(m.b)("strong",{parentName:"p"},"Jsonnet can be the solution"),": By extracting the actual objects\ninto a library, you can import them in as many environments as you need!"),Object(m.b)("h2",{id:"creating-a-library"},"Creating a library"),Object(m.b)("p",null,"A library is nothing special, just a folder of ",Object(m.b)("inlineCode",{parentName:"p"},".libsonnet")," files somewhere in the import paths:"),Object(m.b)("table",null,Object(m.b)("thead",{parentName:"table"},Object(m.b)("tr",{parentName:"thead"},Object(m.b)("th",{parentName:"tr",align:null},"Path"),Object(m.b)("th",{parentName:"tr",align:null},"Description"))),Object(m.b)("tbody",{parentName:"table"},Object(m.b)("tr",{parentName:"tbody"},Object(m.b)("td",{parentName:"tr",align:null},Object(m.b)("inlineCode",{parentName:"td"},"/lib")),Object(m.b)("td",{parentName:"tr",align:null},"Custom, user-created libraries only for this project.")),Object(m.b)("tr",{parentName:"tbody"},Object(m.b)("td",{parentName:"tr",align:null},Object(m.b)("inlineCode",{parentName:"td"},"/vendor")),Object(m.b)("td",{parentName:"tr",align:null},"External libraries installed using Jsonnet-bundler")))),Object(m.b)("p",null,"So for our purpose ",Object(m.b)("inlineCode",{parentName:"p"},"/lib")," fits best, as we are only creating it for our current\nproject. Let's set one up:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"/$ mkdir lib/prom-grafana "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# a folder for our prom-grafana library")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"/$ "),Object(m.b)("span",{parentName:"span",className:"mtk9"},"cd"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," lib/prom-grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"/lib/prom-grafana$ touch prom-grafana.libsonnet "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# library file that will be imported")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"/lib/prom-grafana$ touch config.libsonnet "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# _config and images")))),Object(m.b)("h5",{id:"configlibsonnet"},"config.libsonnet"),Object(m.b)("p",null,"For documentation purposes it is handy to have a separate file for parameters and used images:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// +:: is important (we don't want to override the")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// _config object, just add to it)")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk7"},"_config+::"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// define a namespace for this library")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"promgrafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"port:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"3000"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"grafana"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"prometheus:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"port:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"9090"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"prometheus"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// again, make sure to use +::")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk7"},"_images+::"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"promgrafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"grafana/grafana"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"prometheus:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"prom/prometheus"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("h5",{id:"prom-grafanalibsonnet"},"prom-grafana.libsonnet"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"ksonnet-util/kausal.libsonnet"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},";")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"./config.libsonnet"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},") "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," deployment "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.apps.v1.deployment,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," container "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.core.v1.container,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," port "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.core.v1.containerPort,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," service "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.core.v1.service,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// alias our params, too long to type every time")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," c "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"$"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"._config.promgrafana,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"promgrafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"prometheus:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"deployment:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," deployment."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," name=c.prometheus.name, replicas="),Object(m.b)("span",{parentName:"span",className:"mtk4"},"1"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," containers=[")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," container."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(c.prometheus.name, $._images.promgrafana.prometheus)")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," + container."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"withPorts"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"([port."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"api"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},", c.prometheus.port)]),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"service:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.util."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"serviceFor"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(self.deployment),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"deployment:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," deployment."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," name=c.grafana.name, replicas="),Object(m.b)("span",{parentName:"span",className:"mtk4"},"1"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," containers=[")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," container."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(c.grafana.name, $._images.promgrafana.grafana)")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," + container."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"withPorts"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"([port."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"ui"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},", c.grafana.port)]),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"service:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," ")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.util."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"serviceFor"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(self.deployment)")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," service.mixin.spec."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"withType"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"NodePort"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},"),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("h2",{id:"dev-and-prod"},"Dev and Prod"),Object(m.b)("p",null,"So far we have only used the ",Object(m.b)("inlineCode",{parentName:"p"},"environments/default")," environment. Let's create some real ones:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"/$ tk env add environments/prom-grafana/dev --namespace=prom-grafana-dev "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# one for dev ...")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"/$ tk env add environments/prom-grafana/prod --namespace=prom-grafana-prod "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# and one for prod")))),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"Note"),": Remember to set up the cluster's IP in the respective ",Object(m.b)("inlineCode",{parentName:"p"},"spec.json"),"!")),Object(m.b)("p",null,"All that's left now is importing the library and configuring it. For ",Object(m.b)("inlineCode",{parentName:"p"},"dev"),", the defaults defined in ",Object(m.b)("inlineCode",{parentName:"p"},"/lib/prom-grafana/config.libsonnet")," should be sufficient, so we do not override anything:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// environments/prom-grafana/dev")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"prom-grafana/prom-grafana.libsonnet"')))),Object(m.b)("p",null,"For ",Object(m.b)("inlineCode",{parentName:"p"},"prod")," however, it is a bad idea to rely on ",Object(m.b)("inlineCode",{parentName:"p"},"latest")," for the images .. let's\nadd some proper tags:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// environments/prom-grafana/prod")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"prom-grafana/prom-grafana.libsonnet"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},") "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// again, we only want to patch, not replace, thus +::")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk7"},"_images+::"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// we update this one entirely, so we can replace this one (:)")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"promgrafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"prometheus:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"prom/prometheus:v2.14"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"grafana/grafana:6.5.2"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("h2",{id:"patching"},"Patching"),Object(m.b)("p",null,"The above works well for libraries we control ourselves, but what when another\nteam wrote the library, it was installed using ",Object(m.b)("inlineCode",{parentName:"p"},"jb")," from GitHub or you can't\nchange it easily?"),Object(m.b)("p",null,"Here comes the already familiar ",Object(m.b)("inlineCode",{parentName:"p"},"+:")," (or ",Object(m.b)("inlineCode",{parentName:"p"},"+::"),") syntax into play. It allows to\n",Object(m.b)("strong",{parentName:"p"},"partially")," override values of an object. Let's say we wanted to add some labels to the Prometheus ",Object(m.b)("inlineCode",{parentName:"p"},"Deployment"),", but our ",Object(m.b)("inlineCode",{parentName:"p"},"_config")," params don't allow us to. We can still do this in our ",Object(m.b)("inlineCode",{parentName:"p"},"main.jsonnet"),":"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"prom-grafana/prom-grafana.libsonnet"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},") "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"promgrafana+:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"prometheus+:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"deployment+:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata+:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"labels+:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"foo:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"bar"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"By using the ",Object(m.b)("inlineCode",{parentName:"p"},"+:")," operator all the time and only ",Object(m.b)("inlineCode",{parentName:"p"},'foo: "bar"'),' uses "',Object(m.b)("inlineCode",{parentName:"p"},":"),'", we only\noverride the value of ',Object(m.b)("inlineCode",{parentName:"p"},'"foo"'),", while leaving the rest of the object like it was."),Object(m.b)("p",null,"Let's check it worked:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"yaml"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk6"},"$ tk show environments/prom-grafana/patched -t deployment/prometheus")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"apps/v1")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Deployment")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"labels"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"foo"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"bar"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# <- There it is!")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prometheus")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"namespace"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"default")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"spec"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"minReadySeconds"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"10")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"replicas"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"1")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"revisionHistoryLimit"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"10")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"selector"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"matchLabels"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prometheus")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"template"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"labels"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prometheus")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"spec"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"containers"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"image"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prom/prometheus")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"imagePullPolicy"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"IfNotPresent")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prometheus")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"ports"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"containerPort"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"9090")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"api")))),Object(m.b)(c.a,{prev:"/tutorial/k-lib",mdxType:"TutorialButtons"}),Object(m.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==i&&i&&i===Object(i)&&Object.isExtensible(i)&&!Object.prototype.hasOwnProperty.call(i,"__filemeta")&&Object.defineProperty(i,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/tutorial/environments.mdx"}}),i.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-tutorial-environments-mdx-b932dda633298bd4750f.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-tutorial-environments-mdx-b932dda633298bd4750f.js.map b/pr-preview/pr-1029/component---docs-tutorial-environments-mdx-b932dda633298bd4750f.js.map
deleted file mode 100644
index 2c7cab416..000000000
--- a/pr-preview/pr-1029/component---docs-tutorial-environments-mdx-b932dda633298bd4750f.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/tutorial/environments.mdx"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","TutorialButtons","prev","isMDXComponent"],"mappings":"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","file":"component---docs-tutorial-environments-mdx-b932dda633298bd4750f.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nimport TutorialButtons from \"./TutorialButtons\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Environments`}
\n
{`At this point, our configuration is already flexible and concise, but not\nreally reusable. Let's take a look at Tanka's third buzzword as well: `}{`Environments`}{`.`}
\n
{`These days, the same piece of software is usually deployed many times inside a\nsingle organization. This could be `}{`dev`}{`, `}{`testing`}{` and `}{`prod`}{` environments, but\nalso regions (`}{`europe`}{`, `}{`us`}{`, `}{`asia`}{`) or individual customers (`}{`foo-corp`}{`,\n`}{`bar-gmbh`}{`, `}{`baz-inc`}{`).`}
\n
{`Most of the application however is exactly the same across those environments ...\nusually only configuration, scaling or small details are different after all.\nYAML (and thus `}{`kubectl`}{`) provides us only one solution here: Duplicating the\ndirectory, changing the details, maintaining both. But what if you have 32\nenvironments? Correct! Then you have to maintain 32 directories of YAML. And we can all\nimagine the nightmare of these files drifting apart from each other.`}
\n
{`But again, `}{`Jsonnet can be the solution`}{`: By extracting the actual objects\ninto a library, you can import them in as many environments as you need!`}
\n
{`Creating a library`}
\n
{`A library is nothing special, just a folder of `}{`.libsonnet`}{` files somewhere in the import paths:`}
\n
\n \n
\n
{`Path`}
\n
{`Description`}
\n
\n \n \n
\n
{`/lib`}
\n
{`Custom, user-created libraries only for this project.`}
\n
\n
\n
{`/vendor`}
\n
{`External libraries installed using Jsonnet-bundler`}
\n
\n \n
\n
{`So for our purpose `}{`/lib`}{` fits best, as we are only creating it for our current\nproject. Let's set one up:`}
\n
{`/$ mkdir lib/prom-grafana `}{`# a folder for our prom-grafana library`}{`\n`}{`/$ `}{`cd`}{` lib/prom-grafana`}{`\n`}{`\n`}{`/lib/prom-grafana$ touch prom-grafana.libsonnet `}{`# library file that will be imported`}{`\n`}{`/lib/prom-grafana$ touch config.libsonnet `}{`# _config and images`}
\n
{`config.libsonnet`}
\n
{`For documentation purposes it is handy to have a separate file for parameters and used images:`}
\n
{`{`}{`\n`}{` `}{`// +:: is important (we don't want to override the`}{`\n`}{` `}{`// _config object, just add to it)`}{`\n`}{` `}{`_config+::`}{` {`}{`\n`}{` `}{`// define a namespace for this library`}{`\n`}{` `}{`promgrafana:`}{` {`}{`\n`}{` `}{`grafana:`}{` {`}{`\n`}{` `}{`port:`}{` `}{`3000`}{`,`}{`\n`}{` `}{`name:`}{` `}{`\"grafana\"`}{`,`}{`\n`}{` },`}{`\n`}{` `}{`prometheus:`}{` {`}{`\n`}{` `}{`port:`}{` `}{`9090`}{`,`}{`\n`}{` `}{`name:`}{` `}{`\"prometheus\"`}{`\n`}{` }`}{`\n`}{` }`}{`\n`}{` },`}{`\n`}{`\n`}{` `}{`// again, make sure to use +::`}{`\n`}{` `}{`_images+::`}{` {`}{`\n`}{` `}{`promgrafana:`}{` {`}{`\n`}{` `}{`grafana:`}{` `}{`\"grafana/grafana\"`}{`,`}{`\n`}{` `}{`prometheus:`}{` `}{`\"prom/prometheus\"`}{`,`}{`\n`}{` }`}{`\n`}{` }`}{`\n`}{`}`}
\n
{`prom-grafana.libsonnet`}
\n
{`local`}{` k `}{`=`}{` `}{`import`}{` `}{`\"ksonnet-util/kausal.libsonnet\"`}{`;`}{`\n`}{`\n`}{`(`}{`import`}{` `}{`\"./config.libsonnet\"`}{`) `}{`+`}{`\n`}{`{`}{`\n`}{` `}{`local`}{` deployment `}{`=`}{` k.apps.v1.deployment,`}{`\n`}{` `}{`local`}{` container `}{`=`}{` k.core.v1.container,`}{`\n`}{` `}{`local`}{` port `}{`=`}{` k.core.v1.containerPort,`}{`\n`}{` `}{`local`}{` service `}{`=`}{` k.core.v1.service,`}{`\n`}{`\n`}{` `}{`// alias our params, too long to type every time`}{`\n`}{` `}{`local`}{` c `}{`=`}{` `}{`$`}{`._config.promgrafana,`}{`\n`}{`\n`}{` `}{`promgrafana:`}{` {`}{`\n`}{` `}{`prometheus:`}{` {`}{`\n`}{` `}{`deployment:`}{` deployment.`}{`new`}{`(`}{`\n`}{` name=c.prometheus.name, replicas=`}{`1`}{`,`}{`\n`}{` containers=[`}{`\n`}{` container.`}{`new`}{`(c.prometheus.name, $._images.promgrafana.prometheus)`}{`\n`}{` + container.`}{`withPorts`}{`([port.`}{`new`}{`(`}{`\"api\"`}{`, c.prometheus.port)]),`}{`\n`}{` ],`}{`\n`}{` ),`}{`\n`}{` `}{`service:`}{` k.util.`}{`serviceFor`}{`(self.deployment),`}{`\n`}{` },`}{`\n`}{`\n`}{` `}{`grafana:`}{` {`}{`\n`}{` `}{`deployment:`}{` deployment.`}{`new`}{`(`}{`\n`}{` name=c.grafana.name, replicas=`}{`1`}{`,`}{`\n`}{` containers=[`}{`\n`}{` container.`}{`new`}{`(c.grafana.name, $._images.promgrafana.grafana)`}{`\n`}{` + container.`}{`withPorts`}{`([port.`}{`new`}{`(`}{`\"ui\"`}{`, c.grafana.port)]),`}{`\n`}{` ],`}{`\n`}{` ),`}{`\n`}{` `}{`service:`}{` `}{`\n`}{` k.util.`}{`serviceFor`}{`(self.deployment)`}{`\n`}{` `}{`+`}{` service.mixin.spec.`}{`withType`}{`(`}{`\"NodePort\"`}{`),`}{`\n`}{` },`}{`\n`}{` }`}{`\n`}{`}`}
\n
{`Dev and Prod`}
\n
{`So far we have only used the `}{`environments/default`}{` environment. Let's create some real ones:`}
\n
{`/$ tk env add environments/prom-grafana/dev --namespace=prom-grafana-dev `}{`# one for dev ...`}{`\n`}{`/$ tk env add environments/prom-grafana/prod --namespace=prom-grafana-prod `}{`# and one for prod`}
\n
\n
{`Note`}{`: Remember to set up the cluster's IP in the respective `}{`spec.json`}{`!`}
\n
\n
{`All that's left now is importing the library and configuring it. For `}{`dev`}{`, the defaults defined in `}{`/lib/prom-grafana/config.libsonnet`}{` should be sufficient, so we do not override anything:`}
{`For `}{`prod`}{` however, it is a bad idea to rely on `}{`latest`}{` for the images .. let's\nadd some proper tags:`}
\n
{`// environments/prom-grafana/prod`}{`\n`}{`(`}{`import`}{` `}{`\"prom-grafana/prom-grafana.libsonnet\"`}{`) `}{`+`}{`\n`}{`{`}{`\n`}{` `}{`// again, we only want to patch, not replace, thus +::`}{`\n`}{` `}{`_images+::`}{` {`}{`\n`}{` `}{`// we update this one entirely, so we can replace this one (:)`}{`\n`}{` `}{`promgrafana:`}{` {`}{`\n`}{` `}{`prometheus:`}{` `}{`\"prom/prometheus:v2.14\"`}{`,`}{`\n`}{` `}{`grafana:`}{` `}{`\"grafana/grafana:6.5.2\"`}{`\n`}{` }`}{`\n`}{` }`}{`\n`}{`}`}
\n
{`Patching`}
\n
{`The above works well for libraries we control ourselves, but what when another\nteam wrote the library, it was installed using `}{`jb`}{` from GitHub or you can't\nchange it easily?`}
\n
{`Here comes the already familiar `}{`+:`}{` (or `}{`+::`}{`) syntax into play. It allows to\n`}{`partially`}{` override values of an object. Let's say we wanted to add some labels to the Prometheus `}{`Deployment`}{`, but our `}{`_config`}{` params don't allow us to. We can still do this in our `}{`main.jsonnet`}{`:`}
{`By using the `}{`+:`}{` operator all the time and only `}{`foo: \"bar\"`}{` uses \"`}{`:`}{`\", we only\noverride the value of `}{`\"foo\"`}{`, while leaving the rest of the object like it was.`}
\n\n \n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-tutorial-jsonnet-mdx-50019ef4c18c10d96e98.js b/pr-preview/pr-1029/component---docs-tutorial-jsonnet-mdx-50019ef4c18c10d96e98.js
deleted file mode 100644
index bbf7ac1b9..000000000
--- a/pr-preview/pr-1029/component---docs-tutorial-jsonnet-mdx-50019ef4c18c10d96e98.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{H1MS:function(a,e,s){"use strict";s.r(e),s.d(e,"_frontmatter",(function(){return l})),s.d(e,"default",(function(){return i}));var n=s("wx14"),t=s("Ff2n"),m=(s("q1tI"),s("7ljp")),p=s("hhGP"),c=s("Z+0r");s("qKvR");const b=["components"],l={};void 0!==l&&l&&l===Object(l)&&Object.isExtensible(l)&&!Object.prototype.hasOwnProperty.call(l,"__filemeta")&&Object.defineProperty(l,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/tutorial/jsonnet.mdx"}});const N={_frontmatter:l},r=p.a;function i(a){let{components:e}=a,s=Object(t.a)(a,b);return Object(m.b)(r,Object(n.a)({},N,s,{components:e,mdxType:"MDXLayout"}),Object(m.b)("h1",{id:"using-jsonnet"},"Using Jsonnet"),Object(m.b)("p",null,"The most powerful piece of Tanka is the ",Object(m.b)("a",{parentName:"p",href:"https://jsonnet.org"},"Jsonnet data templating\nlanguage"),". Jsonnet is a superset of JSON, adding variables,\nfunctions, patching (deep merging), arithmetic, conditionals and many more to\nit."),Object(m.b)("p",null,"It has a lot in common with more ",Object(m.b)("em",{parentName:"p"},"real")," programming languages such as JavaScript\nthan with markup languages, still it is tailored specifically to representing\ndata and configuration. As opposed to JSON (and YAML) it is a language meant for\nhumans, not for computers."),Object(m.b)("h2",{id:"creating-a-new-project"},"Creating a new project"),Object(m.b)("p",null,"To get started with Tanka and Jsonnet, let's initiate a new project, in which we will install both Prometheus and Grafana into our Kubernetes cluster:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ mkdir prom-grafana "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"&&"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk9"},"cd"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," prom-grafana "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# create a new folder for the project and change to it")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ tk init "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# initiate a new project")))),Object(m.b)("p",null,"This gives us the following directory structure:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"sh"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"├── environments")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ └── default "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# default environment")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ ├── main.jsonnet "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# main file (important!)")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ └── spec.json "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# environment's config")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"├── jsonnetfile.json")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"├── lib "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# libraries")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"└── vendor "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# external libraries")))),Object(m.b)("p",null,"For the moment, we only really care about the ",Object(m.b)("inlineCode",{parentName:"p"},"environments/default")," folder. The\npurpose of the other directories will be explained later in this guide (mostly\nrelated to libraries)."),Object(m.b)("h2",{id:"environments"},"Environments"),Object(m.b)("p",null,"When using Tanka, you apply ",Object(m.b)("strong",{parentName:"p"},"configuration")," for an ",Object(m.b)("strong",{parentName:"p"},"Environment")," to a\nKubernetes ",Object(m.b)("strong",{parentName:"p"},"cluster"),". An Environment is some logical group of pieces that form\nan application stack."),Object(m.b)("p",null,Object(m.b)("a",{parentName:"p",href:"https://grafana.com"},"Grafana Labs")," for example runs ",Object(m.b)("a",{parentName:"p",href:"https://grafana.com/oss/loki/"},"Loki"),",\n",Object(m.b)("a",{parentName:"p",href:"https://cortexmetrics.io"},"Cortex")," and of course\n",Object(m.b)("a",{parentName:"p",href:"https://grafana.com/grafana/"},"Grafana")," for our ",Object(m.b)("a",{parentName:"p",href:"https://grafana.com/products/cloud/"},"Grafana\nCloud")," hosted offering. For each of these, we have a\nseparate environment. Furthermore, we like to see changes to our code in\nseparate ",Object(m.b)("inlineCode",{parentName:"p"},"dev")," setups to make sure they are all good for production usage – so\nwe have ",Object(m.b)("inlineCode",{parentName:"p"},"dev")," and ",Object(m.b)("inlineCode",{parentName:"p"},"prod")," environments for each app as well, as ",Object(m.b)("inlineCode",{parentName:"p"},"prod"),"\nenvironments usually require other configuration (secrets, scale, etc) than\n",Object(m.b)("inlineCode",{parentName:"p"},"dev"),". This roughly leaves us with the following:"),Object(m.b)("table",null,Object(m.b)("thead",{parentName:"table"},Object(m.b)("tr",{parentName:"thead"},Object(m.b)("th",{parentName:"tr",align:null}),Object(m.b)("th",{parentName:"tr",align:null},"Loki"),Object(m.b)("th",{parentName:"tr",align:null},"Cortex"),Object(m.b)("th",{parentName:"tr",align:null},"Grafana"))),Object(m.b)("tbody",{parentName:"table"},Object(m.b)("tr",{parentName:"tbody"},Object(m.b)("td",{parentName:"tr",align:null},Object(m.b)("inlineCode",{parentName:"td"},"prod")),Object(m.b)("td",{parentName:"tr",align:null},"Name: ",Object(m.b)("inlineCode",{parentName:"td"},"/environments/loki/prod")," ",Object(m.b)("br",null)," Namespace: ",Object(m.b)("inlineCode",{parentName:"td"},"loki-prod")),Object(m.b)("td",{parentName:"tr",align:null},"Name: ",Object(m.b)("inlineCode",{parentName:"td"},"/environments/cortex/prod")," ",Object(m.b)("br",null)," Namespace: ",Object(m.b)("inlineCode",{parentName:"td"},"cortex-prod")),Object(m.b)("td",{parentName:"tr",align:null},"Name: ",Object(m.b)("inlineCode",{parentName:"td"},"/environments/grafana/prod")," ",Object(m.b)("br",null)," Namespace: ",Object(m.b)("inlineCode",{parentName:"td"},"grafana-prod"))),Object(m.b)("tr",{parentName:"tbody"},Object(m.b)("td",{parentName:"tr",align:null},Object(m.b)("inlineCode",{parentName:"td"},"dev")),Object(m.b)("td",{parentName:"tr",align:null},"Name: ",Object(m.b)("inlineCode",{parentName:"td"},"/environments/loki/dev")," ",Object(m.b)("br",null)," Namespace: ",Object(m.b)("inlineCode",{parentName:"td"},"loki-dev")),Object(m.b)("td",{parentName:"tr",align:null},"Name: ",Object(m.b)("inlineCode",{parentName:"td"},"/environments/cortex/dev")," ",Object(m.b)("br",null)," Namespace: ",Object(m.b)("inlineCode",{parentName:"td"},"cortex-dev")),Object(m.b)("td",{parentName:"tr",align:null},"Name: ",Object(m.b)("inlineCode",{parentName:"td"},"/environments/grafana/dev")," ",Object(m.b)("br",null)," Namespace: ",Object(m.b)("inlineCode",{parentName:"td"},"grafana-dev"))))),Object(m.b)("p",null,"There is no limit in Environment complexity, create as many as you need to model\nyour own requirements. Grafana Labs for example also has all of these multiplied per\nhigh-availability region."),Object(m.b)("p",null,"To get started, a single environment is enough. Lets use the automatically\ncreated ",Object(m.b)("inlineCode",{parentName:"p"},"environnments/default")," for that."),Object(m.b)("h2",{id:"defining-resources"},"Defining Resources"),Object(m.b)("p",null,"While ",Object(m.b)("inlineCode",{parentName:"p"},"kubectl")," loads all ",Object(m.b)("inlineCode",{parentName:"p"},".yaml")," files in a certain folder, Tanka has a single\nfile that serves as the canonical source for all contents of an environment,\ncalled ",Object(m.b)("inlineCode",{parentName:"p"},"main.jsonnet"),". This is just like Go has the ",Object(m.b)("inlineCode",{parentName:"p"},"main.go")," or C++ the\n",Object(m.b)("inlineCode",{parentName:"p"},"main.cpp"),"."),Object(m.b)("p",null,"Similar to JSON, each ",Object(m.b)("inlineCode",{parentName:"p"},".jsonnet")," file holds a single object. The one returned by\n",Object(m.b)("inlineCode",{parentName:"p"},"main.jsonnet")," will hold all of your Kubernetes resources:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// main.jsonnet")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"some_deployment"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," { "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"some_service"'),Object(m.b)("span",{parentName:"span",className:"mtk12"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," { "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"/* ... */"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"They may be deeply nested, Tanka extracts everything that looks like a\nKubernetes resource automatically."),Object(m.b)("p",null,"So let's rewrite the ",Object(m.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/tutorial/refresher#writing-the-yaml"},"previous ",Object(m.b)("inlineCode",{parentName:"a"},".yaml"))," to\nvery basic ",Object(m.b)("inlineCode",{parentName:"p"},".jsonnet"),":"),Object(m.b)("h5",{id:"environmentsdefaultmainjsonnet"},"environments/default/main.jsonnet:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"deployment:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiVersion:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'apps/v1'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'Deployment'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"spec:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"selector:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"matchLabels:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"template:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"labels:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"spec:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"containers:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," [")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"image:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana/grafana'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"ports:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," [{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"containerPort:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"3000"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'ui'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"service:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiVersion:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'v1'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'Service'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"labels:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"spec:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"ports:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," [{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana-ui'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"port:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"3000"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"targetPort:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"3000"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"selector:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'grafana'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"type:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'NodePort'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// Prometheus")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"prometheus:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"deployment:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiVersion:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'apps/v1'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'Deployment'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'prometheus'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"spec:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"minReadySeconds:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"10"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"replicas:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"1"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"revisionHistoryLimit:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"10"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"selector:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"matchLabels:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'prometheus'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"template:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"labels:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'prometheus'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"spec:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"containers:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," [")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"image:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'prom/prometheus'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"imagePullPolicy:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'IfNotPresent'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'prometheus'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"ports:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," [")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"containerPort:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"9090"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'api'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"service:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiVersion:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'v1'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'Service'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"labels:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'prometheus'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'prometheus'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"spec:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"ports:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," [")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'prometheus-api'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"port:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"9090"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"targetPort:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"9090"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"selector:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"'prometheus'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"At the moment, this is even more verbose because we have effectively converted\nYAML to JSON, which requires more characters by design."),Object(m.b)("p",null,"But Jsonnet opens up enough possibilities to improve this a lot, which will be\ncovered in the next sections."),Object(m.b)("h2",{id:"taking-a-look-at-the-generated-resources"},"Taking a look at the generated resources"),Object(m.b)("p",null,"So far so good, but can we make sure Tanka correctly finds our resources? We\ncan! By running ",Object(m.b)("inlineCode",{parentName:"p"},"tk show")," you can see the good old yaml, just as ",Object(m.b)("inlineCode",{parentName:"p"},"kubectl"),"\nreceives it:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"yaml"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# run from the project root:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk6"},"/prom-grafana$ tk show environments/default")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"apps/v1")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Deployment")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"spec"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"selector"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# ...")))),Object(m.b)("p",null,"Spend some time here and try to identify resources from the output in the\n",Object(m.b)("inlineCode",{parentName:"p"},".jsonnet")," source."),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"Bonus:")," There is also ",Object(m.b)("inlineCode",{parentName:"p"},"tk eval"),", which displays the raw JSON object\n",Object(m.b)("inlineCode",{parentName:"p"},"main.jsonnet")," evaluates to. Tanka won't extract resources or mutate the structure\nhere, so you can verify how your Jsonnet works.")),Object(m.b)("h2",{id:"connecting-to-the-cluster"},"Connecting to the cluster"),Object(m.b)("p",null,"The YAML looks as expected? Let's apply it to the cluster. To do so, Tanka needs\nsome additional configuration."),Object(m.b)("p",null,"While ",Object(m.b)("inlineCode",{parentName:"p"},"kubectl")," uses a ",Object(m.b)("inlineCode",{parentName:"p"},"$KUBECONFIG")," environment variable and a file in the home\ndirectory to store the currently selected cluster, Tanka takes a more explicit\napproach:"),Object(m.b)("p",null,"Each environment has a file called ",Object(m.b)("inlineCode",{parentName:"p"},"spec.json"),", which includes the information\nto select a cluster:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"js"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},": "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"tanka.dev/v1alpha1"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},": "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Environment"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},": "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"default"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"},")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"spec"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},": "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"apiServer"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"https://127.0.0.1:6443"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},","),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// cluster to use")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"namespace"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk6"},"monitoring"),Object(m.b)("span",{parentName:"span",className:"mtk5"},'"'),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// default namespace for all created resources")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"}")))),Object(m.b)("p",null,"You still have to setup a cluster in ",Object(m.b)("inlineCode",{parentName:"p"},"$KUBECONFIG")," that matches this IP – Tanka\nwill automatically find and use it. This also means that all of your ",Object(m.b)("inlineCode",{parentName:"p"},"kubectl"),"\nclusters just work."),Object(m.b)("p",null,"This allows us to make sure that you will never accidentally apply to the wrong\ncluster."),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"Note"),": Tanka won't create the namespace for you -- you need to include it in\nJsonnet by adding it to ",Object(m.b)("inlineCode",{parentName:"p"},"environments/default/main.jsonnet"),":"),Object(m.b)("pre",{parentName:"blockquote",className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"my_namespace:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"apiVersion:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"v1"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"kind:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"Namespace"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"metadata:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"monitoring"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",{parentName:"blockquote"},"Alternatively, you can create the namespace manually:"),Object(m.b)("pre",{parentName:"blockquote",className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ kubectl create ns monitoring")))),Object(m.b)("p",{parentName:"blockquote"},"This, however, will create an object that is not tracked by Tanka\nand thus needs to be taken care of via other means.")),Object(m.b)("h2",{id:"verifying-the-changes"},"Verifying the changes"),Object(m.b)("p",null,"Before applying to the cluster, Tanka gives you a chance to check that your\nchanges actually behave as expected: ",Object(m.b)("inlineCode",{parentName:"p"},"tk diff")," works just like ",Object(m.b)("inlineCode",{parentName:"p"},"git diff")," – you\nsee what will be changed."),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"diff"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"/prom-grafana$ tk diff environments/default")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"---"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," /tmp/LIVE-610130621/apps.v1.Deployment.monitoring.grafana 2019-12-17 20:14:45.213363586 +0100")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+++"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," /tmp/MERGED-517481208/apps.v1.Deployment.monitoring.grafana 2019-12-17 20:14:45.213363586 +0100")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"@@"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," -0,0 +1,45 "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"@@")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"},"apiVersion: apps/v1")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"},"kind: Deployment")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"},"metadata:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," name: grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," namespace: monitoring")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," # ...")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"},"spec:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," selector:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," matchLabels:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," name: grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," strategy:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," rollingUpdate:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," maxSurge: 25%")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," maxUnavailable: 25%")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," type: RollingUpdate")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," template:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," metadata:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," creationTimestamp: null")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," labels:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," name: grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," spec:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," containers:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," - image: grafana/grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," imagePullPolicy: IfNotPresent")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"}," # ...")))),Object(m.b)("p",null,"As you can see, it shows everything as to-be created .. just as we'd expect,\nsince we are using a blank namespace."),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"Note"),": Diff may fail before the first apply when the namespace does not yet\nexist. This is a limitation of ",Object(m.b)("inlineCode",{parentName:"p"},"kubectl")," which is used for computing the\ndifferences.")),Object(m.b)("h2",{id:"applying-to-the-cluster"},"Applying to the cluster"),Object(m.b)("p",null,"Once it's all looking good, ",Object(m.b)("inlineCode",{parentName:"p"},"tk apply")," serves the exact same purpose as ",Object(m.b)("inlineCode",{parentName:"p"},"kubectl apply"),":"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"/prom-grafana$ tk apply environments/default")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"Applying to namespace "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(m.b)("span",{parentName:"span",className:"mtk6"},"monitoring"),Object(m.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," of cluster "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(m.b)("span",{parentName:"span",className:"mtk6"},"default"),Object(m.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," at "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(m.b)("span",{parentName:"span",className:"mtk6"},"https://127.0.0.1:6443"),Object(m.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," using context "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(m.b)("span",{parentName:"span",className:"mtk6"},"default"),Object(m.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(m.b)("span",{parentName:"span",className:"mtk1"},".")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"Please "),Object(m.b)("span",{parentName:"span",className:"mtk9"},"type"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(m.b)("span",{parentName:"span",className:"mtk6"},"yes"),Object(m.b)("span",{parentName:"span",className:"mtk5"},"'"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," to confirm: yes")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"deployment.apps/grafana created")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"deployment.apps/prometheus created")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"service/grafana created")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"service/prometheus created")))),Object(m.b)("p",null,"It shows you the diff first and the chosen cluster once more and requires\ninteractive approval (type ",Object(m.b)("inlineCode",{parentName:"p"},"yes"),")."),Object(m.b)("p",null,"After that, ",Object(m.b)("inlineCode",{parentName:"p"},"kubectl")," is used to apply to the cluster. By ",Object(m.b)("strong",{parentName:"p"},"piping to\n",Object(m.b)("inlineCode",{parentName:"strong"},"kubectl"))," Tanka makes sure it ",Object(m.b)("strong",{parentName:"p"},"behaves exactly")," as you would expect it. No\nedge-cases of differing Kubernetes client implementations should ever occur."),Object(m.b)("h2",{id:"checking-it-worked"},"Checking it worked"),Object(m.b)("p",null,"Again, let's connect to Grafana:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ kubectl port-forward --namespace=monitoring deployments/grafana 8080:3000")))),Object(m.b)("p",null,"And go to http://localhost:8080 for Grafana's UI."),Object(m.b)(c.a,{prev:"/tutorial/refresher",next:"/tutorial/parameters",mdxType:"TutorialButtons"}),Object(m.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==i&&i&&i===Object(i)&&Object.isExtensible(i)&&!Object.prototype.hasOwnProperty.call(i,"__filemeta")&&Object.defineProperty(i,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/tutorial/jsonnet.mdx"}}),i.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-tutorial-jsonnet-mdx-50019ef4c18c10d96e98.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-tutorial-jsonnet-mdx-50019ef4c18c10d96e98.js.map b/pr-preview/pr-1029/component---docs-tutorial-jsonnet-mdx-50019ef4c18c10d96e98.js.map
deleted file mode 100644
index 64901e997..000000000
--- a/pr-preview/pr-1029/component---docs-tutorial-jsonnet-mdx-50019ef4c18c10d96e98.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/tutorial/jsonnet.mdx"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","TutorialButtons","prev","next","isMDXComponent"],"mappings":"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","file":"component---docs-tutorial-jsonnet-mdx-50019ef4c18c10d96e98.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nimport TutorialButtons from \"./TutorialButtons\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Using Jsonnet`}
\n
{`The most powerful piece of Tanka is the `}{`Jsonnet data templating\nlanguage`}{`. Jsonnet is a superset of JSON, adding variables,\nfunctions, patching (deep merging), arithmetic, conditionals and many more to\nit.`}
\n
{`It has a lot in common with more `}{`real`}{` programming languages such as JavaScript\nthan with markup languages, still it is tailored specifically to representing\ndata and configuration. As opposed to JSON (and YAML) it is a language meant for\nhumans, not for computers.`}
\n
{`Creating a new project`}
\n
{`To get started with Tanka and Jsonnet, let's initiate a new project, in which we will install both Prometheus and Grafana into our Kubernetes cluster:`}
\n
{`$ mkdir prom-grafana `}{`&&`}{` `}{`cd`}{` prom-grafana `}{`# create a new folder for the project and change to it`}{`\n`}{`$ tk init `}{`# initiate a new project`}
\n
{`This gives us the following directory structure:`}
{`For the moment, we only really care about the `}{`environments/default`}{` folder. The\npurpose of the other directories will be explained later in this guide (mostly\nrelated to libraries).`}
\n
{`Environments`}
\n
{`When using Tanka, you apply `}{`configuration`}{` for an `}{`Environment`}{` to a\nKubernetes `}{`cluster`}{`. An Environment is some logical group of pieces that form\nan application stack.`}
\n
{`Grafana Labs`}{` for example runs `}{`Loki`}{`,\n`}{`Cortex`}{` and of course\n`}{`Grafana`}{` for our `}{`Grafana\nCloud`}{` hosted offering. For each of these, we have a\nseparate environment. Furthermore, we like to see changes to our code in\nseparate `}{`dev`}{` setups to make sure they are all good for production usage – so\nwe have `}{`dev`}{` and `}{`prod`}{` environments for each app as well, as `}{`prod`}{`\nenvironments usually require other configuration (secrets, scale, etc) than\n`}{`dev`}{`. This roughly leaves us with the following:`}
{`There is no limit in Environment complexity, create as many as you need to model\nyour own requirements. Grafana Labs for example also has all of these multiplied per\nhigh-availability region.`}
\n
{`To get started, a single environment is enough. Lets use the automatically\ncreated `}{`environnments/default`}{` for that.`}
\n
{`Defining Resources`}
\n
{`While `}{`kubectl`}{` loads all `}{`.yaml`}{` files in a certain folder, Tanka has a single\nfile that serves as the canonical source for all contents of an environment,\ncalled `}{`main.jsonnet`}{`. This is just like Go has the `}{`main.go`}{` or C++ the\n`}{`main.cpp`}{`.`}
\n
{`Similar to JSON, each `}{`.jsonnet`}{` file holds a single object. The one returned by\n`}{`main.jsonnet`}{` will hold all of your Kubernetes resources:`}
{`At the moment, this is even more verbose because we have effectively converted\nYAML to JSON, which requires more characters by design.`}
\n
{`But Jsonnet opens up enough possibilities to improve this a lot, which will be\ncovered in the next sections.`}
\n
{`Taking a look at the generated resources`}
\n
{`So far so good, but can we make sure Tanka correctly finds our resources? We\ncan! By running `}{`tk show`}{` you can see the good old yaml, just as `}{`kubectl`}{`\nreceives it:`}
\n
{`# run from the project root:`}{`\n`}{`/prom-grafana$ tk show environments/default`}{`\n`}{`apiVersion`}{`:`}{` `}{`apps/v1`}{`\n`}{`kind`}{`:`}{` `}{`Deployment`}{`\n`}{`metadata`}{`:`}{`\n`}{` `}{`name`}{`:`}{` `}{`grafana`}{`\n`}{`spec`}{`:`}{`\n`}{` `}{`selector`}{`:`}{`\n`}{`# ...`}
\n
{`Spend some time here and try to identify resources from the output in the\n`}{`.jsonnet`}{` source.`}
\n
\n
{`Bonus:`}{` There is also `}{`tk eval`}{`, which displays the raw JSON object\n`}{`main.jsonnet`}{` evaluates to. Tanka won't extract resources or mutate the structure\nhere, so you can verify how your Jsonnet works.`}
\n
\n
{`Connecting to the cluster`}
\n
{`The YAML looks as expected? Let's apply it to the cluster. To do so, Tanka needs\nsome additional configuration.`}
\n
{`While `}{`kubectl`}{` uses a `}{`$KUBECONFIG`}{` environment variable and a file in the home\ndirectory to store the currently selected cluster, Tanka takes a more explicit\napproach:`}
\n
{`Each environment has a file called `}{`spec.json`}{`, which includes the information\nto select a cluster:`}
\n
{`{`}{`\n`}{` `}{`\"`}{`apiVersion`}{`\"`}{`: `}{`\"`}{`tanka.dev/v1alpha1`}{`\"`}{`,`}{`\n`}{` `}{`\"`}{`kind`}{`\"`}{`: `}{`\"`}{`Environment`}{`\"`}{`,`}{`\n`}{` `}{`\"`}{`metadata`}{`\"`}{`: `}{`{`}{`\n`}{` `}{`\"`}{`name`}{`\"`}{`:`}{` `}{`\"`}{`default`}{`\"`}{`\n`}{` `}{`},`}{`\n`}{` `}{`\"`}{`spec`}{`\"`}{`: `}{`{`}{`\n`}{` `}{`\"`}{`apiServer`}{`\"`}{`:`}{` `}{`\"`}{`https://127.0.0.1:6443`}{`\"`}{`,`}{` `}{`// cluster to use`}{`\n`}{` `}{`\"`}{`namespace`}{`\"`}{`:`}{` `}{`\"`}{`monitoring`}{`\"`}{` `}{`// default namespace for all created resources`}{`\n`}{` `}{`}`}{`\n`}{`}`}
\n
{`You still have to setup a cluster in `}{`$KUBECONFIG`}{` that matches this IP – Tanka\nwill automatically find and use it. This also means that all of your `}{`kubectl`}{`\nclusters just work.`}
\n
{`This allows us to make sure that you will never accidentally apply to the wrong\ncluster.`}
\n
\n
{`Note`}{`: Tanka won't create the namespace for you -- you need to include it in\nJsonnet by adding it to `}{`environments/default/main.jsonnet`}{`:`}
{`Alternatively, you can create the namespace manually:`}
\n
{`$ kubectl create ns monitoring`}
\n
{`This, however, will create an object that is not tracked by Tanka\nand thus needs to be taken care of via other means.`}
\n
\n
{`Verifying the changes`}
\n
{`Before applying to the cluster, Tanka gives you a chance to check that your\nchanges actually behave as expected: `}{`tk diff`}{` works just like `}{`git diff`}{` – you\nsee what will be changed.`}
{`As you can see, it shows everything as to-be created .. just as we'd expect,\nsince we are using a blank namespace.`}
\n
\n
{`Note`}{`: Diff may fail before the first apply when the namespace does not yet\nexist. This is a limitation of `}{`kubectl`}{` which is used for computing the\ndifferences.`}
\n
\n
{`Applying to the cluster`}
\n
{`Once it's all looking good, `}{`tk apply`}{` serves the exact same purpose as `}{`kubectl apply`}{`:`}
\n
{`/prom-grafana$ tk apply environments/default`}{`\n`}{`Applying to namespace `}{`'`}{`monitoring`}{`'`}{` of cluster `}{`'`}{`default`}{`'`}{` at `}{`'`}{`https://127.0.0.1:6443`}{`'`}{` using context `}{`'`}{`default`}{`'`}{`.`}{`\n`}{`Please `}{`type`}{` `}{`'`}{`yes`}{`'`}{` to confirm: yes`}{`\n`}{`deployment.apps/grafana created`}{`\n`}{`deployment.apps/prometheus created`}{`\n`}{`service/grafana created`}{`\n`}{`service/prometheus created`}
\n
{`It shows you the diff first and the chosen cluster once more and requires\ninteractive approval (type `}{`yes`}{`).`}
\n
{`After that, `}{`kubectl`}{` is used to apply to the cluster. By `}{`piping to\n`}{`kubectl`}{` Tanka makes sure it `}{`behaves exactly`}{` as you would expect it. No\nedge-cases of differing Kubernetes client implementations should ever occur.`}
{`And go to http://localhost:8080 for Grafana's UI.`}
\n\n \n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-tutorial-k-lib-mdx-62e6c0e23bef80a067c2.js b/pr-preview/pr-1029/component---docs-tutorial-k-lib-mdx-62e6c0e23bef80a067c2.js
deleted file mode 100644
index f338764b8..000000000
--- a/pr-preview/pr-1029/component---docs-tutorial-k-lib-mdx-62e6c0e23bef80a067c2.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{"3kBX":function(e,a,n){"use strict";n.r(a),n.d(a,"_frontmatter",(function(){return l})),n.d(a,"default",(function(){return N}));var t=n("wx14"),s=n("Ff2n"),m=(n("q1tI"),n("7ljp")),p=n("hhGP"),c=n("Z+0r");n("qKvR");const b=["components"],l={};void 0!==l&&l&&l===Object(l)&&Object.isExtensible(l)&&!Object.prototype.hasOwnProperty.call(l,"__filemeta")&&Object.defineProperty(l,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/tutorial/k-lib.mdx"}});const r={_frontmatter:l},i=p.a;function N(e){let{components:a}=e,n=Object(s.a)(e,b);return Object(m.b)(i,Object(t.a)({},r,n,{components:a,mdxType:"MDXLayout"}),Object(m.b)("h1",{id:"kubernetes-library"},"Kubernetes library"),Object(m.b)("p",null,"The last section has shown that using a library for creating Kubernetes objects\ncan drastically simplify the code you need to write. However, there is a huge\namount of different kinds of objects and the Kubernetes API is evolving (and\nthus changing) quite rapidly."),Object(m.b)("p",null,"Writing and maintaining such a library could be a full-time job on it's own.\nLuckily, it is possible to generate such a library from the Kubernetes OpenAPI\nspecification! Even better, it has already been done for you."),Object(m.b)("h2",{id:"k8s-libsonnet"},"k8s-libsonnet"),Object(m.b)("p",null,"The library is called ",Object(m.b)("inlineCode",{parentName:"p"},"k8s-libsonnet")," (replacing the discontinued ",Object(m.b)("inlineCode",{parentName:"p"},"ksonnet-lib"),"),\ncurrently available at ",Object(m.b)("a",{parentName:"p",href:"https://github.com/jsonnet-libs/k8s-libsonnet"},"https://github.com/jsonnet-libs/k8s-libsonnet"),"."),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"Note"),": The ",Object(m.b)("inlineCode",{parentName:"p"},"ksonnet")," project has been abandoned, the library is not maintained\nanymore. However, the community backed by Grafana Labs has picked up on this with\nthe ",Object(m.b)("inlineCode",{parentName:"p"},"k8s-libsonnet")," library.")),Object(m.b)("p",null,"As ",Object(m.b)("inlineCode",{parentName:"p"},"k8s-libsonnet")," has broken compatibility in a few places with ",Object(m.b)("inlineCode",{parentName:"p"},"ksonnet-lib")," (for good\nreason), we have instrumented the widely used ",Object(m.b)("inlineCode",{parentName:"p"},"ksonnet-util")," library with a\ncompatibility layer to improve the developer and user experience:\n",Object(m.b)("a",{parentName:"p",href:"https://github.com/grafana/jsonnet-libs/tree/master/ksonnet-util"},"https://github.com/grafana/jsonnet-libs/tree/master/ksonnet-util")),Object(m.b)("p",null,"If you do not have any strong reasons against it, just adopt the wrapper as\nwell, it will ease your work. Many of the original ",Object(m.b)("inlineCode",{parentName:"p"},"ksonnet-util")," enhancements\nhave already made their way into ",Object(m.b)("inlineCode",{parentName:"p"},"k8s-libsonnet"),"."),Object(m.b)("p",null,"The docs for ",Object(m.b)("inlineCode",{parentName:"p"},"k8s-libsonnet")," library can be found here:\n",Object(m.b)("a",{parentName:"p",href:"https://jsonnet-libs.github.io/k8s-libsonnet/"},"https://jsonnet-libs.github.io/k8s-libsonnet/")),Object(m.b)("h2",{id:"installation"},"Installation"),Object(m.b)("p",null,"Like every other external library, ",Object(m.b)("inlineCode",{parentName:"p"},"k8s-libsonnet")," can be installed using\n",Object(m.b)("inlineCode",{parentName:"p"},"jsonnet-bundler"),".\nHowever, Tanka already ",Object(m.b)("strong",{parentName:"p"},"did this for you")," during ",Object(m.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/tutorial/jsonnet#creating-a-new-project"},"project\ncreation (",Object(m.b)("inlineCode",{parentName:"a"},"tk init"),")"),":"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ tk init")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," └─ jb install github.com/jsonnet-libs/k8s-libsonnet/1.21@main github.com/grafana/jsonnet-libs/ksonnet-util")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})))),Object(m.b)("p",null,"This created the following structure in ",Object(m.b)("inlineCode",{parentName:"p"},"/vendor"),":"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"vendor")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"├── github.com")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ ├── grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ │ └── jsonnet-libs")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ │ └── ksonnet-util")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ │ ├── ...")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ │ └── kausal.libsonnet "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Grafana's wrapper")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ └── jsonnet-libs")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ └── k8s-libsonnet")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ └── 1.21")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ ├── ...")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"│ └── main.libsonnet "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# k8s-libsonnet entrypoint")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"├── 1.21 -"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," github.com/jsonnet-libs/k8s-libsonnet/1.21")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"└── ksonnet-util -"),Object(m.b)("span",{parentName:"span",className:"mtk12"},">"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," github.com/grafana/jsonnet-libs/ksonnet-util")))),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"Info"),": The ",Object(m.b)("inlineCode",{parentName:"p"},"vendor/")," is the location for external libraries, while ",Object(m.b)("inlineCode",{parentName:"p"},"lib/"),"\ncan be used for your own ones. Check ",Object(m.b)("a",{parentName:"p",href:"/pr-preview/pr-1029/libraries/import-paths"},"import paths"),"\nfor more information.")),Object(m.b)("h4",{id:"aliasing"},"Aliasing"),Object(m.b)("p",null,"Because of how ",Object(m.b)("inlineCode",{parentName:"p"},"jb")," works, the library can be imported as\n",Object(m.b)("inlineCode",{parentName:"p"},"github.com/jsonnet-libs/k8s-libsonnet/1.21/main.libsonnet"),". Most external\nlibraries (including our wrapper) expect it as a simple ",Object(m.b)("inlineCode",{parentName:"p"},"k.libsonnet")," (without\nthe package prefix)."),Object(m.b)("p",null,"To support both, Tanka automatically created an alias file for you:\n",Object(m.b)("inlineCode",{parentName:"p"},"/lib/k.libsonnet")," that just imports the actual library, exposing it under this\nalternative name as well."),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"More information"),":\nThis works, because ",Object(m.b)("inlineCode",{parentName:"p"},"import")," behaves like copy-pasting. So the contents of\n",Object(m.b)("inlineCode",{parentName:"p"},"k8s-libsonnet/1.21"),' are "copied" into our new file, making them behave exactly the\nsame.')),Object(m.b)("h2",{id:"using-it"},"Using it"),Object(m.b)("p",null,"First we need to import it in ",Object(m.b)("inlineCode",{parentName:"p"},"main.jsonnet"),":"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"diff"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(m.b)("span",{parentName:"span",className:"mtk10"},' local k = import "kubernetes.libsonnet";')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk6"},' local k = import "github.com/grafana/jsonnet-libs/ksonnet-util/kausal.libsonnet";')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},' local grafana = import "grafana.jsonnet";')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},' local prometheus = import "prometheus.jsonnet";')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," { /* ... */ }")))),Object(m.b)("blockquote",null,Object(m.b)("p",{parentName:"blockquote"},Object(m.b)("strong",{parentName:"p"},"Note"),": ",Object(m.b)("inlineCode",{parentName:"p"},"ksonnet-util")," imports literal ",Object(m.b)("inlineCode",{parentName:"p"},"k.libsonnet"),", so ",Object(m.b)("a",{parentName:"p",href:"#aliasing"},"aliasing")," is\na must here. This works, because ",Object(m.b)("inlineCode",{parentName:"p"},"/lib")," and ",Object(m.b)("inlineCode",{parentName:"p"},"/vendor")," are automatically searched\nfor libraries, and ",Object(m.b)("inlineCode",{parentName:"p"},"k.libsonnet")," can be found in ",Object(m.b)("inlineCode",{parentName:"p"},"/lib")," due to aforementioned\naliasing.")),Object(m.b)("p",null,"Now that we have installed the correct version, let's use it in\n",Object(m.b)("inlineCode",{parentName:"p"},"/environments/default/grafana.jsonnet")," instead of our own helper:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"github.com/grafana/jsonnet-libs/ksonnet-util/kausal.libsonnet"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},";")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// use locals to extract the parts we need")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," deploy "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.apps.v1.deployment,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," container "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.core.v1.container,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," port "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.core.v1.containerPort,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," service "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.core.v1.service,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// defining the objects:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// deployment constructor: name, replicas, containers")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"deployment:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," deploy."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(name=$._config.grafana.name, replicas="),Object(m.b)("span",{parentName:"span",className:"mtk4"},"1"),Object(m.b)("span",{parentName:"span",className:"mtk1"},", containers=[")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// container constructor")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," container."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"($._config.grafana.name, "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"grafana/grafana"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},")")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," + container."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"withPorts"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"( "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// add ports to the container")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," [port."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"ui"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},", $._config.grafana.port)] "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// port constructor")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ]),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// instead of using a service constructor, our wrapper provides")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"// a handy helper to automatically generate a service for a Deployment")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"service:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.util.serv.util."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"serviceFor"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(self.deployment)")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," service.mixin.spec."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"withType"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"NodePort"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},"),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("h2",{id:"full-example"},"Full example"),Object(m.b)("p",null,"Now that creating the individual objects does not take more than 5 lines, we can\nmerge it all back into a single file (",Object(m.b)("inlineCode",{parentName:"p"},"main.jsonnet"),") and take a look at the\nwhole picture:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"import"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"github.com/grafana/jsonnet-libs/ksonnet-util/kausal.libsonnet"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},";")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk7"},"_config::"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"port:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"3000"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"grafana"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"prometheus:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"port:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"9090"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"prometheus"')),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," deployment "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.apps.v1.deployment,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," container "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.core.v1.container,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," port "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.core.v1.containerPort,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"local"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," service "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"="),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.core.v1.service,")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"})),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"prometheus:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"deployment:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," deployment."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," name=$._config.prometheus.name, replicas="),Object(m.b)("span",{parentName:"span",className:"mtk4"},"1"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," containers=[")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," container."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"($._config.prometheus.name, "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"prom/prometheus"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},")")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," + container."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"withPorts"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"([port."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"api"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},", $._config.prometheus.port)]),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"service:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.util."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"serviceFor"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(self.deployment),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"grafana:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"deployment:"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," deployment."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," name=$._config.grafana.name, replicas="),Object(m.b)("span",{parentName:"span",className:"mtk4"},"1"),Object(m.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," containers=[")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," container."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"($._config.grafana.name, "),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"grafana/grafana"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},")")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," + container."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"withPorts"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"([port."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"new"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"ui"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},", $._config.grafana.port)]),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ],")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," ),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk10"},"service:")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," k.util."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"serviceFor"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"(self.deployment)")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk12"},"+"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," service.mixin.spec."),Object(m.b)("span",{parentName:"span",className:"mtk9"},"withType"),Object(m.b)("span",{parentName:"span",className:"mtk1"},"("),Object(m.b)("span",{parentName:"span",className:"mtk6"},'"NodePort"'),Object(m.b)("span",{parentName:"span",className:"mtk1"},"),")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(m.b)("p",null,"That's a pretty big improvement, considering how verbose and error-prone it was\nbefore!"),Object(m.b)(c.a,{prev:"/tutorial/abstraction",next:"/tutorial/environments",mdxType:"TutorialButtons"}),Object(m.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==N&&N&&N===Object(N)&&Object.isExtensible(N)&&!Object.prototype.hasOwnProperty.call(N,"__filemeta")&&Object.defineProperty(N,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/tutorial/k-lib.mdx"}}),N.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-tutorial-k-lib-mdx-62e6c0e23bef80a067c2.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-tutorial-k-lib-mdx-62e6c0e23bef80a067c2.js.map b/pr-preview/pr-1029/component---docs-tutorial-k-lib-mdx-62e6c0e23bef80a067c2.js.map
deleted file mode 100644
index fd07cedbb..000000000
--- a/pr-preview/pr-1029/component---docs-tutorial-k-lib-mdx-62e6c0e23bef80a067c2.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/tutorial/k-lib.mdx"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","TutorialButtons","prev","next","isMDXComponent"],"mappings":"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","file":"component---docs-tutorial-k-lib-mdx-62e6c0e23bef80a067c2.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nimport TutorialButtons from \"./TutorialButtons\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Kubernetes library`}
\n
{`The last section has shown that using a library for creating Kubernetes objects\ncan drastically simplify the code you need to write. However, there is a huge\namount of different kinds of objects and the Kubernetes API is evolving (and\nthus changing) quite rapidly.`}
\n
{`Writing and maintaining such a library could be a full-time job on it's own.\nLuckily, it is possible to generate such a library from the Kubernetes OpenAPI\nspecification! Even better, it has already been done for you.`}
{`Note`}{`: The `}{`ksonnet`}{` project has been abandoned, the library is not maintained\nanymore. However, the community backed by Grafana Labs has picked up on this with\nthe `}{`k8s-libsonnet`}{` library.`}
\n
\n
{`As `}{`k8s-libsonnet`}{` has broken compatibility in a few places with `}{`ksonnet-lib`}{` (for good\nreason), we have instrumented the widely used `}{`ksonnet-util`}{` library with a\ncompatibility layer to improve the developer and user experience:\n`}{`https://github.com/grafana/jsonnet-libs/tree/master/ksonnet-util`}
\n
{`If you do not have any strong reasons against it, just adopt the wrapper as\nwell, it will ease your work. Many of the original `}{`ksonnet-util`}{` enhancements\nhave already made their way into `}{`k8s-libsonnet`}{`.`}
{`Like every other external library, `}{`k8s-libsonnet`}{` can be installed using\n`}{`jsonnet-bundler`}{`.\nHowever, Tanka already `}{`did this for you`}{` during `}{`project\ncreation (`}{`tk init`}{`)`}{`:`}
{`Info`}{`: The `}{`vendor/`}{` is the location for external libraries, while `}{`lib/`}{`\ncan be used for your own ones. Check `}{`import paths`}{`\nfor more information.`}
\n
\n
{`Aliasing`}
\n
{`Because of how `}{`jb`}{` works, the library can be imported as\n`}{`github.com/jsonnet-libs/k8s-libsonnet/1.21/main.libsonnet`}{`. Most external\nlibraries (including our wrapper) expect it as a simple `}{`k.libsonnet`}{` (without\nthe package prefix).`}
\n
{`To support both, Tanka automatically created an alias file for you:\n`}{`/lib/k.libsonnet`}{` that just imports the actual library, exposing it under this\nalternative name as well.`}
\n
\n
{`More information`}{`:\nThis works, because `}{`import`}{` behaves like copy-pasting. So the contents of\n`}{`k8s-libsonnet/1.21`}{` are \"copied\" into our new file, making them behave exactly the\nsame.`}
\n
\n
{`Using it`}
\n
{`First we need to import it in `}{`main.jsonnet`}{`:`}
\n
{`-`}{` local k = import \"kubernetes.libsonnet\";`}{`\n`}{`+`}{` local k = import \"github.com/grafana/jsonnet-libs/ksonnet-util/kausal.libsonnet\";`}{`\n`}{` local grafana = import \"grafana.jsonnet\";`}{`\n`}{` local prometheus = import \"prometheus.jsonnet\";`}{`\n`}{` { /* ... */ }`}
\n
\n
{`Note`}{`: `}{`ksonnet-util`}{` imports literal `}{`k.libsonnet`}{`, so `}{`aliasing`}{` is\na must here. This works, because `}{`/lib`}{` and `}{`/vendor`}{` are automatically searched\nfor libraries, and `}{`k.libsonnet`}{` can be found in `}{`/lib`}{` due to aforementioned\naliasing.`}
\n
\n
{`Now that we have installed the correct version, let's use it in\n`}{`/environments/default/grafana.jsonnet`}{` instead of our own helper:`}
\n
{`local`}{` k `}{`=`}{` `}{`import`}{` `}{`\"github.com/grafana/jsonnet-libs/ksonnet-util/kausal.libsonnet\"`}{`;`}{`\n`}{`\n`}{`{`}{`\n`}{` `}{`// use locals to extract the parts we need`}{`\n`}{` `}{`local`}{` deploy `}{`=`}{` k.apps.v1.deployment,`}{`\n`}{` `}{`local`}{` container `}{`=`}{` k.core.v1.container,`}{`\n`}{` `}{`local`}{` port `}{`=`}{` k.core.v1.containerPort,`}{`\n`}{` `}{`local`}{` service `}{`=`}{` k.core.v1.service,`}{`\n`}{` `}{`// defining the objects:`}{`\n`}{` `}{`grafana:`}{` {`}{`\n`}{` `}{`// deployment constructor: name, replicas, containers`}{`\n`}{` `}{`deployment:`}{` deploy.`}{`new`}{`(name=$._config.grafana.name, replicas=`}{`1`}{`, containers=[`}{`\n`}{` `}{`// container constructor`}{`\n`}{` container.`}{`new`}{`($._config.grafana.name, `}{`\"grafana/grafana\"`}{`)`}{`\n`}{` + container.`}{`withPorts`}{`( `}{`// add ports to the container`}{`\n`}{` [port.`}{`new`}{`(`}{`\"ui\"`}{`, $._config.grafana.port)] `}{`// port constructor`}{`\n`}{` ),`}{`\n`}{` ]),`}{`\n`}{`\n`}{` `}{`// instead of using a service constructor, our wrapper provides`}{`\n`}{` `}{`// a handy helper to automatically generate a service for a Deployment`}{`\n`}{` `}{`service:`}{` k.util.serv.util.`}{`serviceFor`}{`(self.deployment)`}{`\n`}{` `}{`+`}{` service.mixin.spec.`}{`withType`}{`(`}{`\"NodePort\"`}{`),`}{`\n`}{` }`}{`\n`}{`}`}
\n
{`Full example`}
\n
{`Now that creating the individual objects does not take more than 5 lines, we can\nmerge it all back into a single file (`}{`main.jsonnet`}{`) and take a look at the\nwhole picture:`}
{`That's a pretty big improvement, considering how verbose and error-prone it was\nbefore!`}
\n\n \n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-tutorial-overview-mdx-4eb2aa73aecb90e088d6.js b/pr-preview/pr-1029/component---docs-tutorial-overview-mdx-4eb2aa73aecb90e088d6.js
deleted file mode 100644
index 3321b58dd..000000000
--- a/pr-preview/pr-1029/component---docs-tutorial-overview-mdx-4eb2aa73aecb90e088d6.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{hwtK:function(e,t,a){"use strict";a.r(t),a.d(t,"_frontmatter",(function(){return p})),a.d(t,"default",(function(){return m}));var n=a("wx14"),r=a("Ff2n"),o=(a("q1tI"),a("7ljp")),i=a("hhGP"),l=a("Z+0r");a("qKvR");const b=["components"],p={};void 0!==p&&p&&p===Object(p)&&Object.isExtensible(p)&&!Object.prototype.hasOwnProperty.call(p,"__filemeta")&&Object.defineProperty(p,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/tutorial/overview.mdx"}});const c={_frontmatter:p},s=i.a;function m(e){let{components:t}=e,a=Object(r.a)(e,b);return Object(o.b)(s,Object(n.a)({},c,a,{components:t,mdxType:"MDXLayout"}),Object(o.b)("h1",{id:"tutorial"},"Tutorial"),Object(o.b)("h2",{id:"learning-how-to-use-tanka"},"Learning how to use Tanka"),Object(o.b)("p",null,"Welcome to the Tanka tutorial!\nThe following sections will explain how to deploy an example stack,\n(",Object(o.b)("a",{parentName:"p",href:"https://hub.docker.com/r/grafana/grafana"},"Grafana")," and\n",Object(o.b)("a",{parentName:"p",href:"https://hub.docker.com/r/prom/prometheus"},"Prometheus"),"), to Kubernetes. We will also deal with parameters, differences between ",Object(o.b)("inlineCode",{parentName:"p"},"dev")," and ",Object(o.b)("inlineCode",{parentName:"p"},"prod")," and how to stop worrying and love libraries."),Object(o.b)("p",null,"To do so, we have the following steps:"),Object(o.b)("ol",null,Object(o.b)("li",{parentName:"ol"},Object(o.b)("a",{parentName:"li",href:"/pr-preview/pr-1029/tutorial/refresher"},"Deploying ",Object(o.b)("strong",{parentName:"a"},"without")," Tanka first"),": Using good old ",Object(o.b)("inlineCode",{parentName:"li"},"kubectl")," to understand what Tanka will do for us."),Object(o.b)("li",{parentName:"ol"},Object(o.b)("a",{parentName:"li",href:"/pr-preview/pr-1029/tutorial/jsonnet"},"Using Jsonnet"),": Doing the same thing once again, but this time with Tanka and Jsonnet."),Object(o.b)("li",{parentName:"ol"},Object(o.b)("a",{parentName:"li",href:"/pr-preview/pr-1029/tutorial/parameters"},"Parameterizing"),": Using Variables to avoid data duplication."),Object(o.b)("li",{parentName:"ol"},Object(o.b)("a",{parentName:"li",href:"/pr-preview/pr-1029/tutorial/abstraction"},"Abstraction"),": Splitting components into individual parts."),Object(o.b)("li",{parentName:"ol"},Object(o.b)("a",{parentName:"li",href:"/pr-preview/pr-1029/tutorial/environments"},"Environments"),": Dealing with differences between ",Object(o.b)("inlineCode",{parentName:"li"},"dev")," and ",Object(o.b)("inlineCode",{parentName:"li"},"prod"),"."),Object(o.b)("li",{parentName:"ol"},Object(o.b)("a",{parentName:"li",href:"/pr-preview/pr-1029/tutorial/k-lib"},Object(o.b)("inlineCode",{parentName:"a"},"k.libsonnet")),": Avoid having to remember API resources.")),Object(o.b)("p",null,"Completing this gives a solid knowledge of Tanka's fundamentals. Let's get started!"),Object(o.b)("h2",{id:"resources"},"Resources"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"The final outcome of this tutorial can be seen here:\n",Object(o.b)("a",{parentName:"li",href:"https://github.com/grafana/tanka/tree/main/examples/prom-grafana"},"https://github.com/grafana/tanka/examples/prom-grafana"))),Object(o.b)(l.a,{next:"/tutorial/refresher",mdxType:"TutorialButtons"}))}void 0!==m&&m&&m===Object(m)&&Object.isExtensible(m)&&!Object.prototype.hasOwnProperty.call(m,"__filemeta")&&Object.defineProperty(m,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/tutorial/overview.mdx"}}),m.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-tutorial-overview-mdx-4eb2aa73aecb90e088d6.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-tutorial-overview-mdx-4eb2aa73aecb90e088d6.js.map b/pr-preview/pr-1029/component---docs-tutorial-overview-mdx-4eb2aa73aecb90e088d6.js.map
deleted file mode 100644
index 4f1cc95b7..000000000
--- a/pr-preview/pr-1029/component---docs-tutorial-overview-mdx-4eb2aa73aecb90e088d6.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/tutorial/overview.mdx"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","TutorialButtons","next","isMDXComponent"],"mappings":"qSAOaA,EAAe,QAAG,IAAAA,UAAAC,OAAAD,IAAAC,OAAAC,aAAAF,KAAAC,OAAAE,UAAAC,eAAAC,KAAAL,EAAA,eAAAC,OAAAK,eAAAN,EAAA,cAAAO,cAAA,EAAAC,MAAA,CAAAC,KAAA,eAAAC,SAAA,gCAC/B,MAAMC,EAAc,CAClBX,gBAEIY,EAAYC,IACH,SAASC,EAAUC,GAG/B,IAHgC,WACjCC,GAEDD,EADIE,EAAKC,YAAAH,EAAAI,GAER,OAAOC,YAACR,EAASS,YAAA,GAAKV,EAAiBM,EAAK,CAAED,WAAYA,EAAYM,QAAQ,cAG5EF,YAAA,MACE,GAAM,YAAU,YAElBA,YAAA,MACE,GAAM,6BAA2B,6BAEnCA,YAAA,kHAEDA,YAAA,KAAGG,WAAW,IACT,KAAQ,4CAA0C,WAClC,SACtBH,YAAA,KAAGG,WAAW,IACR,KAAQ,4CAA0C,cAC/B,4EAA6EH,YAAA,cAAYG,WAAW,KAAG,OAAqB,QAASH,YAAA,cAAYG,WAAW,KAAG,QAAsB,iDAC5MH,YAAA,mDACAA,YAAA,UACEA,YAAA,MAAIG,WAAW,MAAKH,YAAA,KAAGG,WAAW,KAC9B,KAAQ,0CAAwC,aACjCH,YAAA,UAAQG,WAAW,KAAG,WAAqB,gBAAoB,oBAAqBH,YAAA,cAAYG,WAAW,MAAI,WAAyB,6CAC3JH,YAAA,MAAIG,WAAW,MAAKH,YAAA,KAAGG,WAAW,KAC9B,KAAQ,wCAAsC,iBACxB,4EAC1BH,YAAA,MAAIG,WAAW,MAAKH,YAAA,KAAGG,WAAW,KAC9B,KAAQ,2CAAyC,kBAC1B,gDAC3BH,YAAA,MAAIG,WAAW,MAAKH,YAAA,KAAGG,WAAW,KAC9B,KAAQ,4CAA0C,eAC9B,iDACxBH,YAAA,MAAIG,WAAW,MAAKH,YAAA,KAAGG,WAAW,KAC9B,KAAQ,6CAA2C,gBAC9B,sCAAuCH,YAAA,cAAYG,WAAW,MAAI,OAAqB,QAASH,YAAA,cAAYG,WAAW,MAAI,QAAsB,KAC1KH,YAAA,MAAIG,WAAW,MAAKH,YAAA,KAAGG,WAAW,KAC9B,KAAQ,sCACPH,YAAA,cAAYG,WAAW,KAAG,gBAAiC,8CAElEH,YAAA,gGACAA,YAAA,MACE,GAAM,aAAW,aAEnBA,YAAA,UACEA,YAAA,MAAIG,WAAW,MAAI,yDACvBH,YAAA,KAAGG,WAAW,KACN,KAAQ,oEAAkE,4DAIhFH,YAACI,IAAe,CAACC,KAAK,sBAAsBH,QAAQ,0BAGvD,IAAAR,UAAAb,OAAAa,IAAAb,OAAAC,aAAAY,KAAAb,OAAAE,UAAAC,eAAAC,KAAAS,EAAA,eAAAb,OAAAK,eAAAQ,EAAA,cAAAP,cAAA,EAAAC,MAAA,CAAAC,KAAA,aAAAC,SAAA,gCAEDI,EAAWY,gBAAiB","file":"component---docs-tutorial-overview-mdx-4eb2aa73aecb90e088d6.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nimport TutorialButtons from \"./TutorialButtons\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Tutorial`}
\n
{`Learning how to use Tanka`}
\n
{`Welcome to the Tanka tutorial!\nThe following sections will explain how to deploy an example stack,\n(`}{`Grafana`}{` and\n`}{`Prometheus`}{`), to Kubernetes. We will also deal with parameters, differences between `}{`dev`}{` and `}{`prod`}{` and how to stop worrying and love libraries.`}
\n\n \n\n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-tutorial-parameterizing-mdx-cb9c8ff66607e77042cd.js b/pr-preview/pr-1029/component---docs-tutorial-parameterizing-mdx-cb9c8ff66607e77042cd.js
deleted file mode 100644
index 8a700d597..000000000
--- a/pr-preview/pr-1029/component---docs-tutorial-parameterizing-mdx-cb9c8ff66607e77042cd.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{qTU8:function(e,a,t){"use strict";t.r(a),t.d(a,"_frontmatter",(function(){return r})),t.d(a,"default",(function(){return o}));var n=t("wx14"),s=t("Ff2n"),c=(t("q1tI"),t("7ljp")),m=t("hhGP"),p=t("Z+0r");t("qKvR");const l=["components"],r={};void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!Object.prototype.hasOwnProperty.call(r,"__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/tutorial/parameterizing.mdx"}});const b={_frontmatter:r},i=m.a;function o(e){let{components:a}=e,t=Object(s.a)(e,l);return Object(c.b)(i,Object(n.a)({},b,t,{components:a,mdxType:"MDXLayout"}),Object(c.b)("h1",{id:"parameterizing"},"Parameterizing"),Object(c.b)("p",null,"Deploying using Tanka worked well, but it did not really improve the situation\nin terms of maintainability and readability."),Object(c.b)("p",null,"To do so, the following sections will explore some ways Jsonnet provides us with."),Object(c.b)("h2",{id:"config-object"},"Config object"),Object(c.b)("p",null,"The most straightforward thing to do is creating a hidden object that holds all\nactual values in a single place to be consumed by the actual resources."),Object(c.b)("p",null,"Luckily, Jsonnet has the ",Object(c.b)("inlineCode",{parentName:"p"},'key:: "value"')," stanza for private fields. Such are\nonly available during compiling and will be removed from the actual output."),Object(c.b)("p",null,"Such an object could look like this:"),Object(c.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"jsonnet"},Object(c.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"{")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk7"},"_config::"),Object(c.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk10"},"grafana:"),Object(c.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk10"},"port:"),Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk4"},"3000"),Object(c.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk6"},'"grafana"'),Object(c.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk10"},"prometheus:"),Object(c.b)("span",{parentName:"span",className:"mtk1"}," {")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk10"},"port:"),Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk4"},"9090"),Object(c.b)("span",{parentName:"span",className:"mtk1"},",")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk10"},"name:"),Object(c.b)("span",{parentName:"span",className:"mtk1"}," "),Object(c.b)("span",{parentName:"span",className:"mtk6"},'"prometheus"')),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," }")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(c.b)("p",null,"We can then replace hardcoded values with a reference to this object:"),Object(c.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"diff"},Object(c.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"{ // <- This is $")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," _config:: { /* .. */ },")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," grafana: {")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," service: {")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," apiVersion: 'v1',")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," kind: 'Service',")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," metadata: {")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," labels: {")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(c.b)("span",{parentName:"span",className:"mtk10"}," name: 'grafana',")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(c.b)("span",{parentName:"span",className:"mtk6"}," name: $._config.grafana.name, // $ refers to the outermost object")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(c.b)("span",{parentName:"span",className:"mtk10"}," name: 'grafana',")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(c.b)("span",{parentName:"span",className:"mtk6"}," name: $._config.grafana.name,")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," spec: {")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," ports: [{")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(c.b)("span",{parentName:"span",className:"mtk10"}," name: 'grafana-ui',")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(c.b)("span",{parentName:"span",className:"mtk6"}," name: '%s-ui' % $._config.grafana.name, // printf-style formatting")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(c.b)("span",{parentName:"span",className:"mtk10"}," port: 3000,")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(c.b)("span",{parentName:"span",className:"mtk6"}," port: $._config.grafana.port,")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(c.b)("span",{parentName:"span",className:"mtk10"}," targetPort: 3000,")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(c.b)("span",{parentName:"span",className:"mtk6"}," targetPort: $._config.grafana.port,")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," }],")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," selector: {")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(c.b)("span",{parentName:"span",className:"mtk10"}," name: 'grafana',")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk5"},"+"),Object(c.b)("span",{parentName:"span",className:"mtk6"}," name: $._config.grafana.name,")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," type: 'NodePort',")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"}," },")),"\n",Object(c.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(c.b)("span",{parentName:"span",className:"mtk1"},"}")))),Object(c.b)("p",null,"Here we see that we can easily refer to other parts of the configuration using\nthe outer-most object ",Object(c.b)("inlineCode",{parentName:"p"},"$")," (the root level). Every value is just a regular\nvariable that you can refer to using the same familiar syntax from other C-like\nlanguages."),Object(c.b)("p",null,"Now we do not only have a single place to change tunables, but also won't suffer\nfrom mismatching labels and selectors anymore, as they are defined in a single\nplace and all changed at once."),Object(c.b)(p.a,{prev:"/tutorial/jsonnet",next:"/tutorial/abstraction",mdxType:"TutorialButtons"}),Object(c.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==o&&o&&o===Object(o)&&Object.isExtensible(o)&&!Object.prototype.hasOwnProperty.call(o,"__filemeta")&&Object.defineProperty(o,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/tutorial/parameterizing.mdx"}}),o.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-tutorial-parameterizing-mdx-cb9c8ff66607e77042cd.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-tutorial-parameterizing-mdx-cb9c8ff66607e77042cd.js.map b/pr-preview/pr-1029/component---docs-tutorial-parameterizing-mdx-cb9c8ff66607e77042cd.js.map
deleted file mode 100644
index 8c67f3f1f..000000000
--- a/pr-preview/pr-1029/component---docs-tutorial-parameterizing-mdx-cb9c8ff66607e77042cd.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/tutorial/parameterizing.mdx"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","TutorialButtons","prev","next","isMDXComponent"],"mappings":"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","file":"component---docs-tutorial-parameterizing-mdx-cb9c8ff66607e77042cd.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nimport TutorialButtons from \"./TutorialButtons\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Parameterizing`}
\n
{`Deploying using Tanka worked well, but it did not really improve the situation\nin terms of maintainability and readability.`}
\n
{`To do so, the following sections will explore some ways Jsonnet provides us with.`}
\n
{`Config object`}
\n
{`The most straightforward thing to do is creating a hidden object that holds all\nactual values in a single place to be consumed by the actual resources.`}
\n
{`Luckily, Jsonnet has the `}{`key:: \"value\"`}{` stanza for private fields. Such are\nonly available during compiling and will be removed from the actual output.`}
{`Here we see that we can easily refer to other parts of the configuration using\nthe outer-most object `}{`$`}{` (the root level). Every value is just a regular\nvariable that you can refer to using the same familiar syntax from other C-like\nlanguages.`}
\n
{`Now we do not only have a single place to change tunables, but also won't suffer\nfrom mismatching labels and selectors anymore, as they are defined in a single\nplace and all changed at once.`}
\n\n \n\n \n ;\n}\n;\nMDXContent.isMDXComponent = true;\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-tutorial-refresher-mdx-81bba2a6cc6987e2c96b.js b/pr-preview/pr-1029/component---docs-tutorial-refresher-mdx-81bba2a6cc6987e2c96b.js
deleted file mode 100644
index 3671459a0..000000000
--- a/pr-preview/pr-1029/component---docs-tutorial-refresher-mdx-81bba2a6cc6987e2c96b.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{Xb6S:function(a,e,s){"use strict";s.r(e),s.d(e,"_frontmatter",(function(){return l})),s.d(e,"default",(function(){return i}));var t=s("wx14"),n=s("Ff2n"),m=(s("q1tI"),s("7ljp")),p=s("hhGP"),c=s("Z+0r");s("qKvR");const b=["components"],l={};void 0!==l&&l&&l===Object(l)&&Object.isExtensible(l)&&!Object.prototype.hasOwnProperty.call(l,"__filemeta")&&Object.defineProperty(l,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"docs/tutorial/refresher.mdx"}});const N={_frontmatter:l},r=p.a;function i(a){let{components:e}=a,s=Object(n.a)(a,b);return Object(m.b)(r,Object(t.a)({},N,s,{components:e,mdxType:"MDXLayout"}),Object(m.b)("h1",{id:"refresher-on-deploying"},"Refresher on deploying"),Object(m.b)("h2",{id:"deploying-to-kubernetes-using-kubectl"},"Deploying to Kubernetes using kubectl"),Object(m.b)("p",null,"To understand how Tanka works, it is important to know what steps are required\nfor the task of deploying Grafana and Prometheus to Kubernetes:"),Object(m.b)("ol",null,Object(m.b)("li",{parentName:"ol"},"Prometheus",Object(m.b)("ul",{parentName:"li"},Object(m.b)("li",{parentName:"ul"},"A ",Object(m.b)("inlineCode",{parentName:"li"},"Deployment")," must be created, to run the ",Object(m.b)("inlineCode",{parentName:"li"},"prom/prometheus")," image"),Object(m.b)("li",{parentName:"ul"},"Also a ",Object(m.b)("inlineCode",{parentName:"li"},"Service")," is needed for Grafana to be able to connect port ",Object(m.b)("inlineCode",{parentName:"li"},"9090")," of\nPrometheus."))),Object(m.b)("li",{parentName:"ol"},"Grafana",Object(m.b)("ul",{parentName:"li"},Object(m.b)("li",{parentName:"ul"},"Another ",Object(m.b)("inlineCode",{parentName:"li"},"Deployment")," is required for the Grafana server."),Object(m.b)("li",{parentName:"ul"},"To connect to the web interface, we will be using a ",Object(m.b)("inlineCode",{parentName:"li"},"Service")," of type\n",Object(m.b)("inlineCode",{parentName:"li"},"NodePort"),".")))),Object(m.b)("p",null,"Before taking a look how Tanka can help doing so, let's recall how to do it with\nplain ",Object(m.b)("inlineCode",{parentName:"p"},"kubectl"),"."),Object(m.b)("h2",{id:"writing-the-yaml"},"Writing the yaml"),Object(m.b)("p",null,Object(m.b)("inlineCode",{parentName:"p"},"kubectl")," expects the resources it should create in ",Object(m.b)("inlineCode",{parentName:"p"},".yaml")," format. For Grafana\n..."),Object(m.b)("h5",{id:"grafanayaml"},"grafana.yaml:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"yaml"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Grafana server Deployment")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"apps/v1")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Deployment")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"spec"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"selector"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"matchLabels"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"template"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"labels"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"spec"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"containers"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"image"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"grafana/grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"ports"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"containerPort"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"3000")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"ui")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"---")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Grafana UI Service NodePort")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"v1")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Service")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"labels"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"spec"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"ports"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"grafana-ui")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"port"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"3000")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"targetPort"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"3000")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"selector"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"grafana")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"type"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"NodePort")))),Object(m.b)("p",null,"... and for Prometheus:"),Object(m.b)("h5",{id:"prometheusyaml"},"prometheus.yaml"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"yaml"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Prometheus server Deployment")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"apps/v1")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Deployment")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prometheus")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"spec"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"selector"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"matchLabels"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prometheus")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"template"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"labels"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prometheus")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"spec"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"containers"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"image"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prom/prometheus")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prometheus")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"ports"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"containerPort"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"9090")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"api")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"---")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Prometheus API Service")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"apiVersion"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"v1")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"kind"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"Service")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"metadata"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"labels"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prometheus")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prometheus")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk11"},"spec"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"ports"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk5"},"-"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prometheus-api")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"port"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"9090")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"targetPort"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk4"},"9090")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"selector"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk11"},"name"),Object(m.b)("span",{parentName:"span",className:"mtk5"},":"),Object(m.b)("span",{parentName:"span",className:"mtk1"}," "),Object(m.b)("span",{parentName:"span",className:"mtk6"},"prometheus")))),Object(m.b)("p",null,"That's pretty verbose, right?"),Object(m.b)("p",null,"Even worse, there are labels and matchers (e.g. ",Object(m.b)("inlineCode",{parentName:"p"},"prometheus"),") that need to be\nexactly the same scattered across the file. It's a nightmare to debug and\nfurthermore harms readability a lot."),Object(m.b)("h2",{id:"deploying-to-the-cluster"},"Deploying to the cluster"),Object(m.b)("p",null,"To actually apply those resources, copy them into ",Object(m.b)("inlineCode",{parentName:"p"},".yaml")," files and use:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ kubectl apply -f prometheus.yaml -f grafana.yaml")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"deployment.apps/grafana created")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"deployment.apps/prometheus created")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"service/grafana created")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"service/prometheus created")))),Object(m.b)("h2",{id:"checking-it-worked"},"Checking it worked"),Object(m.b)("p",null,"So far so good, but can we tell it actually did what we wanted? Let's test that\nGrafana can connect to Prometheus!"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk3 mtki"},"# Temporarily forward Grafana to localhost")),"\n",Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"kubectl port-forward deployments/grafana 8080:3000")))),Object(m.b)("p",null,"Now go to http://localhost:8080 in your browser and login using ",Object(m.b)("inlineCode",{parentName:"p"},"admin:admin"),".\nThen navigate to ",Object(m.b)("inlineCode",{parentName:"p"},"Connections > Data sources > Add new data source"),", choose\n",Object(m.b)("inlineCode",{parentName:"p"},"Prometheus")," as type and enter ",Object(m.b)("inlineCode",{parentName:"p"},"http://prometheus:9090")," as URL. Hit\n",Object(m.b)("inlineCode",{parentName:"p"},"Save & Test")," which should yield a big green bar telling you everything is good."),Object(m.b)("p",null,"Cool! This worked out well for this small example, but the ",Object(m.b)("inlineCode",{parentName:"p"},".yaml")," files are\nhard to read and maintain. Especially when you need to deploy this exact same\nthing in ",Object(m.b)("inlineCode",{parentName:"p"},"dev")," and ",Object(m.b)("inlineCode",{parentName:"p"},"prod")," your choices are very limited."),Object(m.b)("p",null,"Let's explore how Tanka can help us here in the next section!"),Object(m.b)("h2",{id:"cleaning-up"},"Cleaning up"),Object(m.b)("p",null,"Let's remove everything we created to start fresh with Jsonnet in the next section:"),Object(m.b)("pre",{className:"material-theme-darker vscode-highlight","data-language":"bash"},Object(m.b)("code",{parentName:"pre",className:"vscode-highlight-code"},Object(m.b)("span",{parentName:"code",className:"vscode-highlight-line"},Object(m.b)("span",{parentName:"span",className:"mtk1"},"$ kubectl delete -f prometheus.yaml -f grafana.yaml")))),Object(m.b)(c.a,{prev:"/tutorial/overview",next:"/tutorial/jsonnet",mdxType:"TutorialButtons"}),Object(m.b)("style",{className:"vscode-highlight-styles"},"\n \n .material-theme-darker {\nbackground-color: #212121;\ncolor: #EEFFFF;\n}\n\n.material-theme-darker .mtk1 { color: #FFFFFF; }\n.material-theme-darker .mtk2 { color: #212121; }\n.material-theme-darker .mtk3 { color: #545454; }\n.material-theme-darker .mtk4 { color: #F78C6C; }\n.material-theme-darker .mtk5 { color: #89DDFF; }\n.material-theme-darker .mtk6 { color: #C3E88D; }\n.material-theme-darker .mtk7 { color: #FFCB6B; }\n.material-theme-darker .mtk8 { color: #EEFFFF; }\n.material-theme-darker .mtk9 { color: #82AAFF; }\n.material-theme-darker .mtk10 { color: #FF5370; }\n.material-theme-darker .mtk11 { color: #F07178; }\n.material-theme-darker .mtk12 { color: #C792EA; }\n.material-theme-darker .mtk13 { color: #EEFFFF90; }\n.material-theme-darker .mtk14 { color: #65737E; }\n.material-theme-darker .mtk15 { color: #B2CCD6; }\n.material-theme-darker .mtk16 { color: #C17E70; }\n.material-theme-darker .mtki { font-style: italic; }\n.material-theme-darker .mtkb { font-weight: bold; }\n.material-theme-darker .mtku { text-decoration: underline; text-underline-position: under; }\n"))}void 0!==i&&i&&i===Object(i)&&Object.isExtensible(i)&&!Object.prototype.hasOwnProperty.call(i,"__filemeta")&&Object.defineProperty(i,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"docs/tutorial/refresher.mdx"}}),i.isMDXComponent=!0}}]);
-//# sourceMappingURL=component---docs-tutorial-refresher-mdx-81bba2a6cc6987e2c96b.js.map
\ No newline at end of file
diff --git a/pr-preview/pr-1029/component---docs-tutorial-refresher-mdx-81bba2a6cc6987e2c96b.js.map b/pr-preview/pr-1029/component---docs-tutorial-refresher-mdx-81bba2a6cc6987e2c96b.js.map
deleted file mode 100644
index edc59ef96..000000000
--- a/pr-preview/pr-1029/component---docs-tutorial-refresher-mdx-81bba2a6cc6987e2c96b.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./docs/tutorial/refresher.mdx"],"names":["_frontmatter","Object","isExtensible","prototype","hasOwnProperty","call","defineProperty","configurable","value","name","filename","layoutProps","MDXLayout","DefaultLayout","MDXContent","_ref","components","props","_objectWithoutProperties","_excluded","mdx","_extends","mdxType","parentName","TutorialButtons","prev","next","isMDXComponent"],"mappings":"qSAOaA,EAAe,QAAG,IAAAA,UAAAC,OAAAD,IAAAC,OAAAC,aAAAF,KAAAC,OAAAE,UAAAC,eAAAC,KAAAL,EAAA,eAAAC,OAAAK,eAAAN,EAAA,cAAAO,cAAA,EAAAC,MAAA,CAAAC,KAAA,eAAAC,SAAA,iCAC/B,MAAMC,EAAc,CAClBX,gBAEIY,EAAYC,IACH,SAASC,EAAUC,GAG/B,IAHgC,WACjCC,GAEDD,EADIE,EAAKC,YAAAH,EAAAI,GAER,OAAOC,YAACR,EAASS,YAAA,GAAKV,EAAiBM,EAAK,CAAED,WAAYA,EAAYM,QAAQ,cAG5EF,YAAA,MACE,GAAM,0BAAwB,0BAEhCA,YAAA,MACE,GAAM,yCAAuC,yCAE/CA,YAAA,4JAEAA,YAAA,UACEA,YAAA,MAAIG,WAAW,MAAI,aACjBH,YAAA,MAAIG,WAAW,MACbH,YAAA,MAAIG,WAAW,MAAI,KAAOH,YAAA,cAAYG,WAAW,MAAI,cAA4B,gCAAiCH,YAAA,cAAYG,WAAW,MAAI,mBAAiC,UAC9KH,YAAA,MAAIG,WAAW,MAAI,UAAYH,YAAA,cAAYG,WAAW,MAAI,WAAyB,qDAAsDH,YAAA,cAAYG,WAAW,MAAI,QAAsB,sBAI9LH,YAAA,MAAIG,WAAW,MAAI,UACjBH,YAAA,MAAIG,WAAW,MACbH,YAAA,MAAIG,WAAW,MAAI,WAAaH,YAAA,cAAYG,WAAW,MAAI,cAA4B,wCACvFH,YAAA,MAAIG,WAAW,MAAI,uDAAyDH,YAAA,cAAYG,WAAW,MAAI,WAAyB,aACxIH,YAAA,cAAYG,WAAW,MAAI,YAA0B,QAInDH,YAAA,oGACIA,YAAA,cAAYG,WAAW,KAAG,WAAyB,KACvDH,YAAA,MACE,GAAM,oBAAkB,oBAE1BA,YAAA,SAAGA,YAAA,cAAYG,WAAW,KAAG,WAAyB,8CAA+CH,YAAA,cAAYG,WAAW,KAAG,SAAuB,6BAEtJH,YAAA,MACE,GAAM,eAAa,iBAErBA,YAAA,OACE,UAAa,yCACb,gBAAiB,QAChBA,YAAA,QAAMG,WAAW,MAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,aAAW,gCACsB,KACxDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,cACEH,YAAA,QAAMG,WAAW,OACvC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,YACO,KACpCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,YACO,KACpCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,eACGH,YAAA,QAAMG,WAAW,OACxC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,YACO,KACpCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,UACFH,YAAA,QAAMG,WAAW,OACnC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,YACO,KACpCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,cACEH,YAAA,QAAMG,WAAW,OACvC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,oBACe,KAC5CH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,YACO,KACpCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,SAAO,iBACKH,YAAA,QAAMG,WAAW,OAC1C,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,SACI,KACjCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,kBACOH,YAAA,QAAMG,WAAW,OAC3C,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACG,KAChCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,aAAW,kCACwB,KAC1DH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,cACEH,YAAA,QAAMG,WAAW,OACvC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,YACO,KACpCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,UACFH,YAAA,QAAMG,WAAW,OACnC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,YACO,KACpCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,YACO,KACpCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,SACI,KACjCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,cACEH,YAAA,QAAMG,WAAW,OACvC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,SACI,KACjCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,YACO,KACpCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,eAE3BH,YAAA,oCACAA,YAAA,MACE,GAAM,kBAAgB,mBAExBA,YAAA,OACE,UAAa,yCACb,gBAAiB,QAChBA,YAAA,QAAMG,WAAW,MAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,aAAW,mCACyB,KAC3DH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,cACEH,YAAA,QAAMG,WAAW,OACvC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,YACO,KACpCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,eACGH,YAAA,QAAMG,WAAW,OACxC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,UACFH,YAAA,QAAMG,WAAW,OACnC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,cACEH,YAAA,QAAMG,WAAW,OACvC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,YACCH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,oBACe,KAC5CH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,cACGH,YAAA,QAAMG,WAAW,OACvC,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,gBACKH,YAAA,QAAMG,WAAW,OACzC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,SAAO,iBACKH,YAAA,QAAMG,WAAW,OAC1C,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,SACI,KACjCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,kBACOH,YAAA,QAAMG,WAAW,OAC3C,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,QACG,KAChCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACG,KAChCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,aAAW,6BACmB,KACrDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,cACEH,YAAA,QAAMG,WAAW,OACvC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,OACE,KAC/BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,YACO,KACpCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,UACFH,YAAA,QAAMG,WAAW,OACnC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,eACU,KACvCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,SACHH,YAAA,QAAMG,WAAW,OAClC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,mBACc,KAC3CH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,SACI,KACjCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,UACDH,YAAA,QAAMG,WAAW,OACnC,UAAa,SAAO,cACEH,YAAA,QAAMG,WAAW,OACvC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,SACI,KACjCH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,MACLH,YAAA,QAAMG,WAAW,OAC/B,UAAa,SAAO,YACAH,YAAA,QAAMG,WAAW,OACrC,UAAa,QAAM,MACC,KAC9BH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,QACHH,YAAA,QAAMG,WAAW,OACjC,UAAa,SAAO,QACJH,YAAA,QAAMG,WAAW,OACjC,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,KACNH,YAAA,QAAMG,WAAW,OAC9B,UAAa,QAAM,iBAE3BH,YAAA,0CACAA,YAAA,4DAAuDA,YAAA,cAAYG,WAAW,KAAG,cAA4B,sIAG7GH,YAAA,MACE,GAAM,4BAA0B,4BAElCA,YAAA,8DAAyDA,YAAA,cAAYG,WAAW,KAAG,SAAuB,mBAC1GH,YAAA,OACE,UAAa,yCACb,gBAAiB,QAChBA,YAAA,QAAMG,WAAW,MAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,uDACkD,KAC/EH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,oCAC+B,KAC5DH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,uCACkC,KAC/DH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,4BACuB,KACpDH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,iCAE3BH,YAAA,MACE,GAAM,sBAAoB,sBAE5BA,YAAA,gIAEAA,YAAA,OACE,UAAa,yCACb,gBAAiB,QAChBA,YAAA,QAAMG,WAAW,MAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,aAAW,+CACqC,KACvEH,YAAA,QAAMG,WAAW,OACT,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,yDAE3BH,YAAA,4EAAuEA,YAAA,cAAYG,WAAW,KAAG,eAA6B,uBAC/GH,YAAA,cAAYG,WAAW,KAAG,oDAAkE,aAC7GH,YAAA,cAAYG,WAAW,KAAG,cAA4B,sBAAuBH,YAAA,cAAYG,WAAW,KAAG,0BAAwC,iBAC/IH,YAAA,cAAYG,WAAW,KAAG,eAA6B,uEACrDH,YAAA,uEAAkEA,YAAA,cAAYG,WAAW,KAAG,SAAuB,uGAE5GH,YAAA,cAAYG,WAAW,KAAG,OAAqB,QAASH,YAAA,cAAYG,WAAW,KAAG,QAAsB,mCAC/GH,YAAA,0EACAA,YAAA,MACE,GAAM,eAAa,eAErBA,YAAA,gGACAA,YAAA,OACE,UAAa,yCACb,gBAAiB,QAChBA,YAAA,QAAMG,WAAW,MAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,yBACZH,YAAA,QAAMG,WAAW,OAChB,UAAa,QAAM,0DAG3BH,YAACI,IAAe,CAACC,KAAK,qBAAqBC,KAAK,oBAAoBJ,QAAQ,oBAE5EF,YAAA,SACE,UAAa,2BAAyB,glCA6B3C,IAAAN,UAAAb,OAAAa,IAAAb,OAAAC,aAAAY,KAAAb,OAAAE,UAAAC,eAAAC,KAAAS,EAAA,eAAAb,OAAAK,eAAAQ,EAAA,cAAAP,cAAA,EAAAC,MAAA,CAAAC,KAAA,aAAAC,SAAA,iCAEDI,EAAWa,gBAAiB","file":"component---docs-tutorial-refresher-mdx-81bba2a6cc6987e2c96b.js","sourcesContent":["import * as React from 'react'\n /* @jsx mdx */\nimport { mdx } from '@mdx-js/react';\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport DefaultLayout from \"/home/runner/work/tanka/tanka/docs/node_modules/gatsby-theme-docz/src/base/Layout.js\";\nimport TutorialButtons from \"./TutorialButtons\";\nexport const _frontmatter = {};\nconst layoutProps = {\n _frontmatter\n};\nconst MDXLayout = DefaultLayout;\nexport default function MDXContent({\n components,\n ...props\n}) {\n return \n\n\n
{`Refresher on deploying`}
\n
{`Deploying to Kubernetes using kubectl`}
\n
{`To understand how Tanka works, it is important to know what steps are required\nfor the task of deploying Grafana and Prometheus to Kubernetes:`}
\n \n
{`Prometheus`}\n
\n
{`A `}{`Deployment`}{` must be created, to run the `}{`prom/prometheus`}{` image`}
\n
{`Also a `}{`Service`}{` is needed for Grafana to be able to connect port `}{`9090`}{` of\nPrometheus.`}
\n
\n
\n
{`Grafana`}\n
\n
{`Another `}{`Deployment`}{` is required for the Grafana server.`}
\n
{`To connect to the web interface, we will be using a `}{`Service`}{` of type\n`}{`NodePort`}{`.`}
\n
\n
\n \n
{`Before taking a look how Tanka can help doing so, let's recall how to do it with\nplain `}{`kubectl`}{`.`}
\n
{`Writing the yaml`}
\n
{`kubectl`}{` expects the resources it should create in `}{`.yaml`}{` format. For Grafana\n...`}
{`Even worse, there are labels and matchers (e.g. `}{`prometheus`}{`) that need to be\nexactly the same scattered across the file. It's a nightmare to debug and\nfurthermore harms readability a lot.`}
\n
{`Deploying to the cluster`}
\n
{`To actually apply those resources, copy them into `}{`.yaml`}{` files and use:`}
{`So far so good, but can we tell it actually did what we wanted? Let's test that\nGrafana can connect to Prometheus!`}
\n
{`# Temporarily forward Grafana to localhost`}{`\n`}{`kubectl port-forward deployments/grafana 8080:3000`}
\n
{`Now go to http://localhost:8080 in your browser and login using `}{`admin:admin`}{`.\nThen navigate to `}{`Connections > Data sources > Add new data source`}{`, choose\n`}{`Prometheus`}{` as type and enter `}{`http://prometheus:9090`}{` as URL. Hit\n`}{`Save & Test`}{` which should yield a big green bar telling you everything is good.`}
\n
{`Cool! This worked out well for this small example, but the `}{`.yaml`}{` files are\nhard to read and maintain. Especially when you need to deploy this exact same\nthing in `}{`dev`}{` and `}{`prod`}{` your choices are very limited.`}
\n
{`Let's explore how Tanka can help us here in the next section!`}
\n
{`Cleaning up`}
\n
{`Let's remove everything we created to start fresh with Jsonnet in the next section:`}
{
-// Config format revision. Currently only "v1alpha1"
-"apiVersion":"v1alpha1",
-// Always "Environment". Reserved for future use
-"kind":"Environment",
-
-// Descriptive fields
-"metadata":{
-// Name of the Environment. Automatically set to the relative
-// path from the project root
-"name":"<string>",
-
-// Arbitrary key:value string pairs. Not parsed by Tanka
-"labels":{"<string>":"<string>"}
-},
-
-// Properties influencing Tanka's behavior
-"spec":{
-// The Kubernetes cluster to use.
-// Must be the full URL, e.g. https://cluster.fqdn:6443
-
Tanka supports two different ways of computing differences between the local
-configuration and the live cluster state: Either nativekubectl diff -f -
+
Tanka supports two different ways of computing differences between the local
+configuration and the live cluster state: Either nativekubectl diff -f -
is used, which gives the best possible results, but is only possible for
clusters with
-server-side diff
-support (Kubernetes 1.13+).
When this is not available, Tanka falls back to subset mode.
You can specify the diff-strategy to use on the command line as well:
# native
-tk diff --diff-strategy=native .
-
-# validate: Like native but with a server-side validation
-tk diff --diff-strategy=validate .
-
-# server-side
-tk diff --diff-strategy=server .
-
-# subset
-tk diff --diff-strategy=subset .
The native diff mode is recommended, because it uses kubectl diff underneath,
+server-side diff
+support (Kubernetes 1.13+).
+
When this is not available, Tanka falls back to subset mode.
+
You can specify the diff-strategy to use on the command line as well:
+
+
Native
+
The native diff mode is recommended, because it uses kubectl diff underneath,
which sends the objects to the Kubernetes API server and computes the
-differences over there.
This has the huge benefit that all possible changes by webhooks and other
-internal components of Kubernetes can be encountered as well.
However, this is a fairly new feature and only available on Kubernetes 1.13 or
+differences over there.
+
This has the huge benefit that all possible changes by webhooks and other
+internal components of Kubernetes can be encountered as well.
+
However, this is a fairly new feature and only available on Kubernetes 1.13 or
later. Only the API server (master nodes) needs to have that
-version, worker nodes do not matter.
There is a
-known issue
-with kubectl diff, which affects ports configured to use both TCP and UDP.
There are two additional modes which extend native: validate and server.
-While all kubectl diff commands are sent to the API server, these two
+version, worker nodes do not matter.
+
There is a
+known issue
+with kubectl diff, which affects ports configured to use both TCP and UDP.
+
Server-side diffs
+
There are two additional modes which extend native: validate and server.
+While all kubectl diff commands are sent to the API server, these two
methods take advantage of an additional server-side diff mode (which uses the
-kubectl diff --server-side flag, complementing the
-server-side apply mode).
Since a plain server diff often produces cruft, and wouldn't be representative
-of a client-side apply, the validate method allows the server-side diff to
-check that all models are valid server-side, but still displays the native
-diff output to the user.
If native diffing is not supported by your cluster, Tanka provides subset diff
-as a fallback method.
Subset diff only compares fields present in the local configuration and
+kubectl diff --server-side flag, complementing the
+server-side apply mode).
+
Since a plain server diff often produces cruft, and wouldn’t be representative
+of a client-side apply, the validate method allows the server-side diff to
+check that all models are valid server-side, but still displays the native
+diff output to the user.
+
Subset
+
If native diffing is not supported by your cluster, Tanka provides subset diff
+as a fallback method.
+
Subset diff only compares fields present in the local configuration and
ignores all other fields. When you remove a field locally, you will see no
-differences.
This is required, because Kubernetes adds dynamic fields to the state during
+differences.
+
This is required, because Kubernetes adds dynamic fields to the state during
runtime, which we cannot know of on the client side. To produce a somewhat
-usable output, we can effectively only compare what we already know about.
If this is a problem for you, consider switching to native mode.
You can use external diff utilities by setting the environment variable
-KUBECTL_EXTERNAL_DIFF. If you want to use a GUI or interactive diff utility
-you must also set KUBECTL_INTERACTIVE_DIFF=1 to prevent Tanka from capturing
-stdout.
\ No newline at end of file
+usable output, we can effectively only compare what we already know about.
+
If this is a problem for you, consider switching to native mode.
+
External diff utilities
+
You can use external diff utilities by setting the environment variable
+KUBECTL_EXTERNAL_DIFF. If you want to use a GUI or interactive diff utility
+you must also set KUBECTL_INTERACTIVE_DIFF=1 to prevent Tanka from capturing
+stdout.
\ No newline at end of file
diff --git a/pr-preview/pr-1029/directory-structure/index.html b/pr-preview/pr-1029/directory-structure/index.html
index 31b7cdd61..2b7aff074 100644
--- a/pr-preview/pr-1029/directory-structure/index.html
+++ b/pr-preview/pr-1029/directory-structure/index.html
@@ -1,65 +1,115 @@
-Directory structure | Tanka
Like other programming languages, Jsonnet needs an entrypoint into the
+evaluation, something to begin with. main.jsonnet is exactly this: The very
first file being evaluated, importing or directly specifying everything required
-for this specific environment.
When talking about directories, Tanka uses the following terms:
Term
Description
Identifier file
rootDir
The root of your project
jsonnetfile.json or tkrc.yaml
baseDir
The directory of the current environment
main.jsonnet
Regardless what subdirectory of the project you are in, Tanka will always be
+for this specific environment.
+
Root and Base
+
When talking about directories, Tanka uses the following terms:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Term
Description
Identifier file
rootDir
The root of your project
jsonnetfile.json or tkrc.yaml
baseDir
The directory of the current environment
main.jsonnet
+
Regardless what subdirectory of the project you are in, Tanka will always be
able to identify both directories, by searching for the identifier files in the
parent directories.
-Tanka needs these for correctly setting up the import paths.
This is similar to how git always works, by looking for the .git directory.
jb records all external packages installed in a file called
-jsonnetfile.json. This file is the source of truth about what should be
-included in vendor/. However, it should only include what is really directly
-required, all recursive dependencies will be handled just fine.
jsonnetfile.lock.json is generated on every run of jsonnet-bundler, including
-a list of packages that must be included in vendor/, along with the exact
-version and a sha256 hash of the package contents.
Both files should be checked into source control: The jsonnetfile.json
-specifies what you need and the jsonnetfile.lock.json is important to make
-sure that subsequent jb install invocations always do the exact same thing.
Tip: The vendor/ directory can be safely added to .gitignore to keep your
-repository size down, as long as jsonnetfile.lock.json is checked in.
\ No newline at end of file
+Tanka needs these for correctly setting up the import paths.
+
This is similar to how git always works, by looking for the .git directory.
+
Libraries
+
Tanka relies heavily on code-reuse, so libraries are a natural thing. Roughly
+spoken, they can be imported from two paths:
jb records all external packages installed in a file called
+jsonnetfile.json. This file is the source of truth about what should be
+included in vendor/. However, it should only include what is really directly
+required, all recursive dependencies will be handled just fine.
+
jsonnetfile.lock.json is generated on every run of jsonnet-bundler, including
+a list of packages that must be included in vendor/, along with the exact
+version and a sha256 hash of the package contents.
+
Both files should be checked into source control: The jsonnetfile.json
+specifies what you need and the jsonnetfile.lock.json is important to make
+sure that subsequent jb install invocations always do the exact same thing.
+
\ No newline at end of file
diff --git a/pr-preview/pr-1029/env-vars/index.html b/pr-preview/pr-1029/env-vars/index.html
index 813fb5c9b..edf5ec4d5 100644
--- a/pr-preview/pr-1029/env-vars/index.html
+++ b/pr-preview/pr-1029/env-vars/index.html
@@ -1,7 +1,56 @@
-Environment variables | Tanka
Description: Pager to use when displaying output. Set to an empty string to disable paging.
-Default: less --RAW-CONTROL-CHARS --quit-if-one-screen --no-init
\ No newline at end of file
+ Environment variables | Grafana Tanka
+
+ Skip to content
Description: Path to the jb tool executable
+Default: $PATH/jb
+
TANKA_KUBECTL_PATH
+
Description: Path to the kubectl tool executable
+Default: $PATH/kubectl
+
TANKA_KUBECTL_TRACE
+
Description: Print all calls to kubectl
+Default: false
+
TANKA_HELM_PATH
+
Description: Path to the helm executable
+Default: $PATH/helm
+
TANKA_KUSTOMIZE_PATH
+
Description: Path to the kustomize executable
+Default: $PATH/kustomize
+
PAGER
+
Description: Pager to use when displaying output. Set to an empty string to disable paging.
+Default: less --RAW-CONTROL-CHARS --quit-if-one-screen --no-init
\ No newline at end of file
diff --git a/pr-preview/pr-1029/exporting/index.html b/pr-preview/pr-1029/exporting/index.html
index 323428d69..a39d9520d 100644
--- a/pr-preview/pr-1029/exporting/index.html
+++ b/pr-preview/pr-1029/exporting/index.html
@@ -1,56 +1,112 @@
-Exporting as YAML | Tanka
This would include the label named app, the name and kind of the resource:
+
+
You can optionally use the template function lower for lower-casing fields, e.g. in the above example
+
+
would yield
+
+
etc.
+
You can also use a different file extension by providing --extension='yml', for example.
+
Multiple environments
+
Tanka can also export multiple inline environments, as showcased in Use case: consistent inline
environments. This follows the same
-principles as describe before with the addition that you can also refer to Environment specific data through the env
-keyword.
For example an export might refer to data from the Environment spec:
# Format based on environment {{env.<...>}}
-$ tk export exportDir environments/dev/ \
- --format '{{env.metadata.labels.cluster}}/{{env.spec.namespace}}//{{.kind}}-{{.metadata.name}}'
Even more advanced use cases allow you to export multiple environments in a single execution:
When exporting a large amount of environments, jsonnet evaluation can become a bottleneck. To speed up the process, Tanka provides a few optional features.
Given multiple environments, one may want to only export the environments that were modified since the last export. This is enabled by passing both the --merge-strategy=replace-envs flags.
When these flags are passed, Tanka will:
Delete the manifests that were previously exported by the environments that are being exported. This is done by looking at the manifest.json file that is generated by Tanka when exporting. The related entries are also removed from the manifest.json file.
Generate the manifests for the targeted environments into the output directory.
Add in the new manifests entries into the manifest.json file and re-export it.
Tanka provides the tk tool importers command to figure out which main.jsonnet need to be re-exported based on what files were modified in a workspace.
If, for example, the lib/my-lib/main.libsonnet file was modified, you could run the command like this to find which files to export:
# Find out which envs to re-export
-$ tk tool importers lib/my-lib/main.libsonnet
-my-repo-path/jsonnet/environments/my-env/main.jsonnet
-
-# Re-export the envs
-$ tk export myoutputdir my-repo-path/jsonnet/environments/my-env/main.jsonnet --merge-strategy=replace-envs
Note that deleted environments need special consideration when doing this.
-The tk tool importers utility only works with existing files so deleting an environment will result in stale manifest.json entries and moving an environment will result in manifest conflicts.
-In order to correctly handle deleted environments, they need to be passed to the export command:
Read this blog post for more information about memory ballasts.
For large environments that load lots of data into memory on evaluation, a memory ballast can dramatically improve performance. This feature is exposed through the --mem-ballast-size-bytes flag on the export command.
Anecdotally (Grafana Labs), environments that took around a minute to load were able to load in around 45 secs with a ballast of 5GB (--mem-ballast-size-bytes=5368709120). Decreasing the ballast size resulted in negative impact on performance, and increasing it more did not result in any noticeable impact.
Tanka can also cache the results of the export. This is useful if you often export the same files and want to avoid recomputing them. The cache key is calculated from the main file and all of its transitive imports, so any change to any file possibly used in an environment will invalidate the cache.
This is configured by two flags:
--cache-path: The local filesystem path where the cache will be stored. The cache is a flat directory of json files (one per environment).
--cache-envs: If exporting multiple environments, this flag can be used to specify, with regexes, which environments to cache. If not specified, all environments are cached.
Notes:
Using the cache might be slower than evaluating jsonnet directy. It is only recommended for environments that are very CPU intensive to evaluate.
To use object storage, you can point the --cache-path to a FUSE mount, such as s3fs
\ No newline at end of file
+principles as describe before with the addition that you can also refer to Environment specific data through the env
+keyword.
+
For example an export might refer to data from the Environment spec:
+
+
Even more advanced use cases allow you to export multiple environments in a single execution:
+
+
Performance features
+
When exporting a large amount of environments, jsonnet evaluation can become a bottleneck. To speed up the process, Tanka provides a few optional features.
+
Partial export (in a GitOps context)
+
Given multiple environments, one may want to only export the environments that were modified since the last export. This is enabled by passing both the --merge-strategy=replace-envs flags.
+
When these flags are passed, Tanka will:
+
+
Delete the manifests that were previously exported by the environments that are being exported. This is done by looking at the manifest.json file that is generated by Tanka when exporting. The related entries are also removed from the manifest.json file.
+
Generate the manifests for the targeted environments into the output directory.
+
Add in the new manifests entries into the manifest.json file and re-export it.
+
+
Finding out which environments to export
+
Tanka provides the tk tool importers command to figure out which main.jsonnet need to be re-exported based on what files were modified in a workspace.
+
If, for example, the lib/my-lib/main.libsonnet file was modified, you could run the command like this to find which files to export:
+
+
Note that deleted environments need special consideration when doing this.
+The tk tool importers utility only works with existing files so deleting an environment will result in stale manifest.json entries and moving an environment will result in manifest conflicts.
+In order to correctly handle deleted environments, they need to be passed to the export command:
+
+
Using a memory ballast
+
Read this blog post for more information about memory ballasts.
+
For large environments that load lots of data into memory on evaluation, a memory ballast can dramatically improve performance. This feature is exposed through the --mem-ballast-size-bytes flag on the export command.
+
Anecdotally (Grafana Labs), environments that took around a minute to load were able to load in around 45 secs with a ballast of 5GB (--mem-ballast-size-bytes=5368709120). Decreasing the ballast size resulted in negative impact on performance, and increasing it more did not result in any noticeable impact.
+
Caching
+
Tanka can also cache the results of the export. This is useful if you often export the same files and want to avoid recomputing them. The cache key is calculated from the main file and all of its transitive imports, so any change to any file possibly used in an environment will invalidate the cache.
+
This is configured by two flags:
+
+
--cache-path: The local filesystem path where the cache will be stored. The cache is a flat directory of json files (one per environment).
+
--cache-envs: If exporting multiple environments, this flag can be used to specify, with regexes, which environments to cache. If not specified, all environments are cached.
+
+
Notes:
+
+
Using the cache might be slower than evaluating jsonnet directy. It is only recommended for environments that are very CPU intensive to evaluate.
+
To use object storage, you can point the --cache-path to a FUSE mount, such as s3fs
Helm support in Tanka requires the helm binary installed on your system and
-available on the $PATH. If Helm is not installed, you will see this error message:
evaluating jsonnet: RUNTIME ERROR: Expanding Helm Chart: exec: "helm": executable file not found in $PATH
To solve this, you need to install Helm.
+strictly self-contained.
+
Helm however keeps Charts and repository configuration somewhere around
+~/.config/helm, which violates above requirement.
+
To comply with this requirement, Tanka expects Helm Charts to be found inside the
+bounds of a project. This means, you MUST put your Charts somewhere next to
+the file that calls helm.template(), so that it can be referred to using a
+relative path.
+
Vendor Location
+
Where to actually put them inside the project is up to you, but keep in mind you
+need to refer to them using relative paths.
+
We recommend always writing libraries that wrap the actual Helm Chart, so the
+consumer does not need to be aware of it. Whether you put these into your local lib/ directory or
+publish and vendor them into the vendor/ directory is up to you.