JSON Viewer

Comparison with | dump

Input using dump

{{ { a: "a", b: undefined } | dump }}

Output

{"a":"a"}

Same input using jsonViewer

{{ { a: "a", b: undefined } | jsonViewer | safe }}

Output


String with title

Input

{{ "value" | jsonViewer({ title: "string"}) | safe }}

Output


Number with title

Input

{{ 123 | jsonViewer({ title: "number"}) | safe }}

Output


Array with title

Input

{{ ["string 1", "string 2", 3, 4 , {a:"a"} ] | jsonViewer({title: "array"}) | safe }}

Output


Object

Input

{% set object = {
    a: 1,
    nested: { big: "data", nested: { foo: "bar" } },
    b: { nested: { x: 1 } },
    secret: '12345',
    hidden: 'should hide',
    visible: 'ok'
} %}
       
{{ object | jsonViewer({ title: "object" }) | safe }}
    

Output


Object with automatic template key removal

Input

{% set object = {
    a: 1,
    template: { big: "data", nested: { foo: "bar" } },
    b: { template: { x: 1 } },
    secret: '12345',
    hidden: 'should hide',
    visible: 'ok'
} %}
       
{{ object | jsonViewer({ title: "Object with automatic template key removal" }) | safe }}
    

Output


Object showing template key

Input

{% set object = {
    a: 1,
    template: { big: "data", nested: { foo: "bar" } },
    b: { template: { x: 1 } },
    secret: '12345',
    hidden: 'should hide',
    visible: 'ok'
} %}
       
{{ object | jsonViewer({ 
    title: "Object showing template key",
    showTemplate: true
}) | safe }}
    

Output


Object with Key Replacement

Input

{% set object = {
    a: 1,
    template: { big: "data", nested: { foo: "bar" } },
    b: { template: { x: 1 } },
    secret: '12345',
    hidden: 'should hide',
    visible: 'ok'
} %}
       
{{ object | jsonViewer({ 
    title: "object",  
    removeKeys: [ 
        { keyName: 'template', replaceString: 'Customised Template message' },
        { keyName: 'secret', replaceString: '***hidden***' },
        'hidden'
    ] 
}) | safe }}
    

Output


Complex Object with all options

Input

{{ collections.all[0] | jsonViewer({ title: "collections.all[0]", showTypes: false, defaultExpanded: false, pathsOnHover: false, showControls: true, removeKeys: [{ keyName: 'template', replaceString: 'Removed for performance reasons' }] }) | safe }}

Output


Complex Object using consolePlus (for comparison)

Input

{% console collections.all[0] %}

Output

<ref *1> {
  template: Template {
    inputPath: './src/index.njk',
    parsed: {
      root: '',
      dir: './src',
      base: 'index.njk',
      ext: '.njk',
      name: 'index'
    },
    extraOutputSubdirectory: '',
    templateData: TemplateData {
      templateConfig: TemplateConfig {
        overrides: {},
        projectConfigPaths: [
          '.eleventy.js',
          'eleventy.config.js',
          'eleventy.config.mjs',
          'eleventy.config.cjs'
        ],
        customRootConfig: null,
        hasConfigMerged: true,
        isEsm: true,
        logger: ConsoleLogger {
          outputStream: Readable {
            _events: {
              close: undefined,
              error: undefined,
              data: undefined,
              end: undefined,
              readable: undefined
            },
            _readableState: ReadableState {
              highWaterMark: 65536,
              buffer: [],
              bufferIndex: 0,
              length: 0,
              pipes: [],
              awaitDrainWriters: null,
              [Symbol(kState)]: 1052940
            },
            _read: [Function: read],
            _maxListeners: undefined,
            [Symbol(shapeMode)]: true,
            [Symbol(kCapture)]: false
          }
        },
        directories: ProjectDirectories {
          inputFile: undefined,
          inputGlob: undefined
        },
        rootConfig: {
          templateFormats: [
            'liquid',
            'md',
            'njk',
            'html',
            '11ty.js'
          ],
          pathPrefix: '/',
          markdownTemplateEngine: 'liquid',
          htmlTemplateEngine: 'liquid',
          dataFileSuffixes: [ '.11tydata', '' ],
          dataFileDirBaseNameOverride: false,
          keys: {
            package: 'pkg',
            layout: 'layout',
            permalink: 'permalink',
            permalinkRoot: 'permalinkBypassOutputDir',
            engineOverride: 'templateEngineOverride',
            computed: 'eleventyComputed',
            dataSchema: 'eleventyDataSchema'
          },
          dir: {
            input: '.',
            includes: '_includes',
            data: '_data',
            output: '_site'
          },
          nunjucksFilters: {}
        },
        config: {
          templateFormats: [
            'liquid',
            'md',
            'njk',
            'html',
            '11ty.js'
          ],
          pathPrefix: '/',
          markdownTemplateEngine: 'liquid',
          htmlTemplateEngine: 'njk',
          dataFileSuffixes: [ '.11tydata', '' ],
          dataFileDirBaseNameOverride: false,
          keys: {
            package: 'pkg',
            layout: 'layout',
            permalink: 'permalink',
            permalinkRoot: 'permalinkBypassOutputDir',
            engineOverride: 'templateEngineOverride',
            computed: 'eleventyComputed',
            dataSchema: 'eleventyDataSchema'
          },
          dir: {
            input: 'src',
            includes: '_includes',
            data: '_data',
            output: 'dist'
          },
          nunjucksFilters: {
            inputPathToUrl: [Function: fn],
            slug: [Function: fn],
            slugify: [Function: fn],
            url: [Function: fn],
            log: [Function: fn],
            getCollectionItemIndex: [Function: fn],
            getCollectionItem: [Function: fn],
            getPreviousCollectionItem: [Function: fn],
            getNextCollectionItem: [Function: fn]
          },
          directories: {
            input: [Getter],
            inputFile: [Getter],
            inputGlob: [Getter],
            data: [Getter],
            includes: [Getter],
            layouts: [Getter],
            output: [Getter]
          },
          transforms: {
            '@11ty/eleventy-bundle': [Function: fn],
            '@11ty/eleventy/html-transformer': [Function: fn],
            '@11ty/eleventy-bundle/delayed': [Function: fn]
          },
          linters: {},
          preprocessors: {},
          globalData: {},
          layoutAliases: {},
          layoutResolution: true,
          passthroughCopiesHtmlRelative: Set(0) {},
          passthroughCopies: {},
          liquidOptions: {},
          liquidTags: {},
          liquidFilters: {
            inputPathToUrl: [Function: fn],
            slug: [Function: fn],
            slugify: [Function: fn],
            url: [Function: fn],
            log: [Function: fn],
            getCollectionItemIndex: [Function: fn],
            getCollectionItem: [Function: fn],
            getPreviousCollectionItem: [Function: fn],
            getNextCollectionItem: [Function: fn],
            renderTransforms: [Function: fn],
            jsonViewer: [Function: fn]
          },
          liquidShortcodes: {
            getBundle: [Function: fn],
            getBundleFileUrl: [Function: fn],
            console: [Function: fn]
          },
          liquidPairedShortcodes: {},
          liquidParameterParsing: 'legacy',
          nunjucksEnvironmentOptions: {
            dev: true,
            autoescape: true,
            throwOnUndefined: false,
            trimBlocks: false,
            lstripBlocks: false
          },
          nunjucksPrecompiledTemplates: {},
          nunjucksAsyncFilters: {
            renderTransforms: [Function: fn],
            jsonViewer: [Function: fn]
          },
          nunjucksTags: {},
          nunjucksGlobals: {},
          nunjucksAsyncShortcodes: {},
          nunjucksShortcodes: {
            getBundle: [Function: fn],
            getBundleFileUrl: [Function: fn],
            console: [Function: fn]
          },
          nunjucksAsyncPairedShortcodes: {},
          nunjucksPairedShortcodes: {},
          javascriptFunctions: {
            getBundle: [Function: fn],
            getBundleFileUrl: [Function: fn],
            inputPathToUrl: [Function: fn],
            slug: [Function: fn],
            slugify: [Function: fn],
            url: [Function: fn],
            log: [Function: fn],
            getCollectionItemIndex: [Function: fn],
            getCollectionItem: [Function: fn],
            getPreviousCollectionItem: [Function: fn],
            getNextCollectionItem: [Function: fn],
            renderTransforms: [Function: fn],
            jsonViewer: [Function: fn],
            console: [Function: fn]
          },
          javascriptShortcodes: {
            getBundle: [Function: fn],
            getBundleFileUrl: [Function: fn],
            console: [Function: fn]
          },
          javascriptPairedShortcodes: {},
          javascriptFilters: {
            inputPathToUrl: [Function: fn],
            slug: [Function: fn],
            slugify: [Function: fn],
            url: [Function: fn],
            log: [Function: fn],
            getCollectionItemIndex: [Function: fn],
            getCollectionItem: [Function: fn],
            getPreviousCollectionItem: [Function: fn],
            getNextCollectionItem: [Function: fn],
            renderTransforms: [Function: fn],
            jsonViewer: [Function: fn]
          },
          markdownHighlighter: null,
          libraryOverrides: {},
          dynamicPermalinks: true,
          useGitIgnore: true,
          ignores: Set(2) {
            '**/node_modules/**',
            '.git/**'
          },
          watchIgnores: Set(2) {
            '**/node_modules/**',
            '.git/**'
          },
          dataDeepMerge: true,
          watchJavaScriptDependencies: true,
          additionalWatchTargets: [],
          watchTargetsConfigReset: Set(0) {},
          serverOptions: {},
          chokidarConfig: {},
          watchThrottleWaitTime: 0,
          frontMatterParsingOptions: {
            engines: {
              yaml: [Function: bound load$1],
              javascript: [Function: default],
              jsLegacy: {
                parse: [Function: parse],
                stringify: [Function: stringify]
              },
              node: [Function: node]
            },
            filePath: './src/posts/neural-networks.md'
          },
          dataExtensions: Map(0) {},
          extensionMap: Set(0) {},
          quietMode: false,
          events: AsyncEventEmitter {
            _events: [Object: null prototype] {
              'eleventy.layouts': [Function: bound onceWrapper] {
                listener: [AsyncFunction (anonymous)]
              },
              'eleventy.before': [
                [AsyncFunction (anonymous)],
                [AsyncFunction (anonymous)]
              ],
              'eleventy.contentMap': [Function (anonymous)],
              'eleventy#copy': [Function (anonymous)],
              'eleventy#beforerender': [Function (anonymous)],
              'eleventy#render': [Function (anonymous)],
              'eleventy#templateModified': [Function (anonymous)]
            },
            _eventsCount: 7,
            _maxListeners: 25,
            [Symbol(shapeMode)]: false,
            [Symbol(kCapture)]: false
          },
          benchmarkManager: BenchmarkManager {
            benchmarkGroups: {
              Configuration: BenchmarkGroup {
                benchmarks: {
                  '"getBundle" Universal Shortcode': [Benchmark],
                  '"getBundle" Liquid Shortcode': [Benchmark],
                  '"getBundle" JavaScript Shortcode': [Benchmark],
                  '"getBundle" JavaScript Function': [Benchmark],
                  '"getBundle" Nunjucks Shortcode': [Benchmark],
                  '"getBundleFileUrl" Universal Shortcode': [Benchmark],
                  '"getBundleFileUrl" Liquid Shortcode': [Benchmark],
                  '"getBundleFileUrl" JavaScript Shortcode': [Benchmark],
                  '"getBundleFileUrl" JavaScript Function': [Benchmark],
                  '"getBundleFileUrl" Nunjucks Shortcode': [Benchmark],
                  '"@11ty/eleventy-bundle" Transform': [Benchmark],
                  '"inputPathToUrl" Universal Filter': [Benchmark],
                  '"inputPathToUrl" Liquid Filter': [Benchmark],
                  '"inputPathToUrl" JavaScript Filter': [Benchmark],
                  '"inputPathToUrl" JavaScript Function': [Benchmark],
                  '"inputPathToUrl" Nunjucks Filter': [Benchmark],
                  '"slug" Universal Filter': [Benchmark],
                  '"slug" Liquid Filter': [Benchmark],
                  '"slug" JavaScript Filter': [Benchmark],
                  '"slug" JavaScript Function': [Benchmark],
                  '"slug" Nunjucks Filter': [Benchmark],
                  '"slugify" Universal Filter': [Benchmark],
                  '"slugify" Liquid Filter': [Benchmark],
                  '"slugify" JavaScript Filter': [Benchmark],
                  '"slugify" JavaScript Function': [Benchmark],
                  '"slugify" Nunjucks Filter': [Benchmark],
                  '"url" Universal Filter': [Benchmark],
                  '"url" Liquid Filter': [Benchmark],
                  '"url" JavaScript Filter': [Benchmark],
                  '"url" JavaScript Function': [Benchmark],
                  '"url" Nunjucks Filter': [Benchmark],
                  '"log" Universal Filter': [Benchmark],
                  '"log" Liquid Filter': [Benchmark],
                  '"log" JavaScript Filter': [Benchmark],
                  '"log" JavaScript Function': [Benchmark],
                  '"log" Nunjucks Filter': [Benchmark],
                  '"getCollectionItemIndex" Universal Filter': [Benchmark],
                  '"getCollectionItemIndex" Liquid Filter': [Benchmark],
                  '"getCollectionItemIndex" JavaScript Filter': [Benchmark],
                  '"getCollectionItemIndex" JavaScript Function': [Benchmark],
                  '"getCollectionItemIndex" Nunjucks Filter': [Benchmark],
                  '"getCollectionItem" Universal Filter': [Benchmark],
                  '"getCollectionItem" Liquid Filter': [Benchmark],
                  '"getCollectionItem" JavaScript Filter': [Benchmark],
                  '"getCollectionItem" JavaScript Function': [Benchmark],
                  '"getCollectionItem" Nunjucks Filter': [Benchmark],
                  '"getPreviousCollectionItem" Universal Filter': [Benchmark],
                  '"getPreviousCollectionItem" Liquid Filter': [Benchmark],
                  '"getPreviousCollectionItem" JavaScript Filter': [Benchmark],
                  '"getPreviousCollectionItem" JavaScript Function': [Benchmark],
                  '"getPreviousCollectionItem" Nunjucks Filter': [Benchmark],
                  '"getNextCollectionItem" Universal Filter': [Benchmark],
                  '"getNextCollectionItem" Liquid Filter': [Benchmark],
                  '"getNextCollectionItem" JavaScript Filter': [Benchmark],
                  '"getNextCollectionItem" JavaScript Function': [Benchmark],
                  '"getNextCollectionItem" Nunjucks Filter': [Benchmark],
                  '"renderTransforms" Universal Filter': [Benchmark],
                  '"renderTransforms" Liquid Filter': [Benchmark],
                  '"renderTransforms" JavaScript Filter': [Benchmark],
                  '"renderTransforms" JavaScript Function': [Benchmark],
                  '"renderTransforms" Nunjucks Filter': [Benchmark],
                  '"@11ty/eleventy/html-transformer" Transform': [Benchmark],
                  '"jsonViewer" Universal Filter': [Benchmark],
                  '"jsonViewer" Liquid Filter': [Benchmark],
                  '"jsonViewer" JavaScript Filter': [Benchmark],
                  '"jsonViewer" JavaScript Function': [Benchmark],
                  '"jsonViewer" Nunjucks Filter': [Benchmark],
                  '"@11ty/eleventy-bundle/delayed" Transform': [Benchmark],
                  '"console" Universal Shortcode': [Benchmark],
                  '"console" Liquid Shortcode': [Benchmark],
                  '"console" JavaScript Shortcode': [Benchmark],
                  '"console" JavaScript Function': [Benchmark],
                  '"console" Nunjucks Shortcode': [Benchmark]
                },
                isVerbose: true,
                logger: ConsoleLogger {
                  outputStream: [Readable]
                },
                minimumThresholdMs: 50,
                minimumThresholdPercent: 8
              },
              Aggregate: BenchmarkGroup {
                benchmarks: {
                  'Configuration addPlugin': [Benchmark],
                  'Processing plugins in config': [Benchmark],
                  'Searching the file system (templates)': [Benchmark],
                  'Searching the file system (data)': [Benchmark],
                  'Template Read': [Benchmark],
                  '(count) getOutputLocations': [Benchmark],
                  'Template Compile Content': [Benchmark],
                  '> Compile Content > ./src/index.njk': [Benchmark],
                  Render: [Benchmark],
                  '> Render Content > ./src/index.njk': [Benchmark]
                },
                isVerbose: false,
                logger: ConsoleLogger {
                  outputStream: [Readable]
                },
                minimumThresholdMs: 50,
                minimumThresholdPercent: 8
              },
              Data: BenchmarkGroup {
                benchmarks: {},
                isVerbose: true,
                logger: ConsoleLogger {
                  outputStream: [Readable]
                },
                minimumThresholdMs: 50,
                minimumThresholdPercent: 8
              }
            },
            isVerbose: true,
            start: 256.488008
          },
          plugins: [
            {
              plugin: [Function (anonymous)],
              options: {},
              pluginNamespace: ''
            },
            {
              plugin: [Function: HtmlRelativeCopyPlugin],
              options: {},
              pluginNamespace: ''
            },
            {
              plugin: [Function: logToConsole],
              options: { logToTerminal: false },
              pluginNamespace: ''
            }
          ],
          useTemplateCache: true,
          precompiledCollections: {},
          dataFilterSelectors: Set(0) {},
          libraryAmendments: {},
          serverPassthroughCopyBehavior: 'copy',
          urlTransforms: [],
          virtualTemplates: {},
          freezeReservedData: true,
          customDateParsing: Set(0) {},
          errorReporting: {},
          templateHandling: {},
          uses: GlobalDependencyMap { isEsm: true }
        },
        verbose: true
      },
      config: {
        templateFormats: [
          'liquid',
          'md',
          'njk',
          'html',
          '11ty.js'
        ],
        pathPrefix: '/',
        markdownTemplateEngine: 'liquid',
        htmlTemplateEngine: 'njk',
        dataFileSuffixes: [ '.11tydata', '' ],
        dataFileDirBaseNameOverride: false,
        keys: {
          package: 'pkg',
          layout: 'layout',
          permalink: 'permalink',
          permalinkRoot: 'permalinkBypassOutputDir',
          engineOverride: 'templateEngineOverride',
          computed: 'eleventyComputed',
          dataSchema: 'eleventyDataSchema'
        },
        dir: {
          input: 'src',
          includes: '_includes',
          data: '_data',
          output: 'dist'
        },
        nunjucksFilters: {
          inputPathToUrl: [Function: fn],
          slug: [Function: fn],
          slugify: [Function: fn],
          url: [Function: fn],
          log: [Function: fn],
          getCollectionItemIndex: [Function: fn],
          getCollectionItem: [Function: fn],
          getPreviousCollectionItem: [Function: fn],
          getNextCollectionItem: [Function: fn]
        },
        directories: {
          input: [Getter],
          inputFile: [Getter],
          inputGlob: [Getter],
          data: [Getter],
          includes: [Getter],
          layouts: [Getter],
          output: [Getter]
        },
        transforms: {
          '@11ty/eleventy-bundle': [Function: fn],
          '@11ty/eleventy/html-transformer': [Function: fn],
          '@11ty/eleventy-bundle/delayed': [Function: fn]
        },
        linters: {},
        preprocessors: {},
        globalData: {},
        layoutAliases: {},
        layoutResolution: true,
        passthroughCopiesHtmlRelative: Set(0) {},
        passthroughCopies: {},
        liquidOptions: {},
        liquidTags: {},
        liquidFilters: {
          inputPathToUrl: [Function: fn],
          slug: [Function: fn],
          slugify: [Function: fn],
          url: [Function: fn],
          log: [Function: fn],
          getCollectionItemIndex: [Function: fn],
          getCollectionItem: [Function: fn],
          getPreviousCollectionItem: [Function: fn],
          getNextCollectionItem: [Function: fn],
          renderTransforms: [Function: fn],
          jsonViewer: [Function: fn]
        },
        liquidShortcodes: {
          getBundle: [Function: fn],
          getBundleFileUrl: [Function: fn],
          console: [Function: fn]
        },
        liquidPairedShortcodes: {},
        liquidParameterParsing: 'legacy',
        nunjucksEnvironmentOptions: {
          dev: true,
          autoescape: true,
          throwOnUndefined: false,
          trimBlocks: false,
          lstripBlocks: false
        },
        nunjucksPrecompiledTemplates: {},
        nunjucksAsyncFilters: {
          renderTransforms: [Function: fn],
          jsonViewer: [Function: fn]
        },
        nunjucksTags: {},
        nunjucksGlobals: {},
        nunjucksAsyncShortcodes: {},
        nunjucksShortcodes: {
          getBundle: [Function: fn],
          getBundleFileUrl: [Function: fn],
          console: [Function: fn]
        },
        nunjucksAsyncPairedShortcodes: {},
        nunjucksPairedShortcodes: {},
        javascriptFunctions: {
          getBundle: [Function: fn],
          getBundleFileUrl: [Function: fn],
          inputPathToUrl: [Function: fn],
          slug: [Function: fn],
          slugify: [Function: fn],
          url: [Function: fn],
          log: [Function: fn],
          getCollectionItemIndex: [Function: fn],
          getCollectionItem: [Function: fn],
          getPreviousCollectionItem: [Function: fn],
          getNextCollectionItem: [Function: fn],
          renderTransforms: [Function: fn],
          jsonViewer: [Function: fn],
          console: [Function: fn]
        },
        javascriptShortcodes: {
          getBundle: [Function: fn],
          getBundleFileUrl: [Function: fn],
          console: [Function: fn]
        },
        javascriptPairedShortcodes: {},
        javascriptFilters: {
          inputPathToUrl: [Function: fn],
          slug: [Function: fn],
          slugify: [Function: fn],
          url: [Function: fn],
          log: [Function: fn],
          getCollectionItemIndex: [Function: fn],
          getCollectionItem: [Function: fn],
          getPreviousCollectionItem: [Function: fn],
          getNextCollectionItem: [Function: fn],
          renderTransforms: [Function: fn],
          jsonViewer: [Function: fn]
        },
        markdownHighlighter: null,
        libraryOverrides: {},
        dynamicPermalinks: true,
        useGitIgnore: true,
        ignores: Set(2) { '**/node_modules/**', '.git/**' },
        watchIgnores: Set(2) { '**/node_modules/**', '.git/**' },
        dataDeepMerge: true,
        watchJavaScriptDependencies: true,
        additionalWatchTargets: [],
        watchTargetsConfigReset: Set(0) {},
        serverOptions: {},
        chokidarConfig: {},
        watchThrottleWaitTime: 0,
        frontMatterParsingOptions: {
          engines: {
            yaml: [Function: bound load$1],
            javascript: [Function: default],
            jsLegacy: {
              parse: [Function: parse],
              stringify: [Function: stringify]
            },
            node: [Function: node]
          },
          filePath: './src/posts/neural-networks.md'
        },
        dataExtensions: Map(0) {},
        extensionMap: Set(0) {},
        quietMode: false,
        events: AsyncEventEmitter {
          _events: [Object: null prototype] {
            'eleventy.layouts': [Function: bound onceWrapper] {
              listener: [AsyncFunction (anonymous)]
            },
            'eleventy.before': [
              [AsyncFunction (anonymous)],
              [AsyncFunction (anonymous)]
            ],
            'eleventy.contentMap': [Function (anonymous)],
            'eleventy#copy': [Function (anonymous)],
            'eleventy#beforerender': [Function (anonymous)],
            'eleventy#render': [Function (anonymous)],
            'eleventy#templateModified': [Function (anonymous)]
          },
          _eventsCount: 7,
          _maxListeners: 25,
          [Symbol(shapeMode)]: false,
          [Symbol(kCapture)]: false
        },
        benchmarkManager: BenchmarkManager {
          benchmarkGroups: {
            Configuration: BenchmarkGroup {
              benchmarks: {
                '"getBundle" Universal Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundle" Liquid Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundle" JavaScript Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundle" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundle" Nunjucks Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundleFileUrl" Universal Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundleFileUrl" Liquid Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundleFileUrl" JavaScript Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundleFileUrl" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundleFileUrl" Nunjucks Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"@11ty/eleventy-bundle" Transform': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"inputPathToUrl" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"inputPathToUrl" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"inputPathToUrl" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"inputPathToUrl" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"inputPathToUrl" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slug" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slug" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slug" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slug" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slug" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slugify" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slugify" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slugify" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slugify" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slugify" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"url" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"url" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"url" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"url" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"url" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"log" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"log" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"log" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"log" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"log" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItemIndex" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItemIndex" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItemIndex" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItemIndex" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItemIndex" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItem" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItem" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItem" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItem" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItem" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getPreviousCollectionItem" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getPreviousCollectionItem" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getPreviousCollectionItem" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getPreviousCollectionItem" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getPreviousCollectionItem" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getNextCollectionItem" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getNextCollectionItem" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getNextCollectionItem" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getNextCollectionItem" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getNextCollectionItem" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"renderTransforms" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"renderTransforms" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"renderTransforms" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"renderTransforms" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"renderTransforms" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"@11ty/eleventy/html-transformer" Transform': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"jsonViewer" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"jsonViewer" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"jsonViewer" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"jsonViewer" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"jsonViewer" Nunjucks Filter': Benchmark {
                  timeSpent: 1.7184220000000323,
                  timesCalled: 9,
                  beforeTimers: []
                },
                '"@11ty/eleventy-bundle/delayed" Transform': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"console" Universal Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"console" Liquid Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"console" JavaScript Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"console" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"console" Nunjucks Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 1,
                  beforeTimers: [Array]
                }
              },
              isVerbose: true,
              logger: ConsoleLogger {
                outputStream: Readable {
                  _events: [Object],
                  _readableState: [ReadableState],
                  _read: [Function: read],
                  _maxListeners: undefined,
                  [Symbol(shapeMode)]: true,
                  [Symbol(kCapture)]: false
                }
              },
              minimumThresholdMs: 50,
              minimumThresholdPercent: 8
            },
            Aggregate: BenchmarkGroup {
              benchmarks: {
                'Configuration addPlugin': Benchmark {
                  timeSpent: 2.423401999999953,
                  timesCalled: 5,
                  beforeTimers: []
                },
                'Processing plugins in config': Benchmark {
                  timeSpent: 0.26264500000002045,
                  timesCalled: 1,
                  beforeTimers: []
                },
                'Searching the file system (templates)': Benchmark {
                  timeSpent: 5.5963840000000005,
                  timesCalled: 1,
                  beforeTimers: []
                },
                'Searching the file system (data)': Benchmark {
                  timeSpent: 0.47100799999998344,
                  timesCalled: 1,
                  beforeTimers: []
                },
                'Template Read': Benchmark {
                  timeSpent: 0.38637099999994007,
                  timesCalled: 6,
                  beforeTimers: []
                },
                '(count) getOutputLocations': Benchmark {
                  timeSpent: 0,
                  timesCalled: 6,
                  beforeTimers: []
                },
                'Template Compile Content': Benchmark {
                  timeSpent: 0.11093199999999115,
                  timesCalled: 1,
                  beforeTimers: []
                },
                '> Compile Content > ./src/index.njk': Benchmark {
                  timeSpent: 0.10961099999997259,
                  timesCalled: 1,
                  beforeTimers: []
                },
                Render: Benchmark {
                  timeSpent: 0,
                  timesCalled: 1,
                  beforeTimers: [Array]
                },
                '> Render Content > ./src/index.njk': Benchmark {
                  timeSpent: 0,
                  timesCalled: 1,
                  beforeTimers: [Array]
                }
              },
              isVerbose: false,
              logger: ConsoleLogger {
                outputStream: Readable {
                  _events: [Object],
                  _readableState: [ReadableState],
                  _read: [Function: read],
                  _maxListeners: undefined,
                  [Symbol(shapeMode)]: true,
                  [Symbol(kCapture)]: false
                }
              },
              minimumThresholdMs: 50,
              minimumThresholdPercent: 8
            },
            Data: BenchmarkGroup {
              benchmarks: {},
              isVerbose: true,
              logger: ConsoleLogger {
                outputStream: Readable {
                  _events: [Object],
                  _readableState: [ReadableState],
                  _read: [Function: read],
                  _maxListeners: undefined,
                  [Symbol(shapeMode)]: true,
                  [Symbol(kCapture)]: false
                }
              },
              minimumThresholdMs: 50,
              minimumThresholdPercent: 8
            }
          },
          isVerbose: true,
          start: 256.488008
        },
        plugins: [
          {
            plugin: [Function (anonymous)],
            options: {},
            pluginNamespace: ''
          },
          {
            plugin: [Function: HtmlRelativeCopyPlugin],
            options: {},
            pluginNamespace: ''
          },
          {
            plugin: [Function: logToConsole],
            options: { logToTerminal: false },
            pluginNamespace: ''
          }
        ],
        useTemplateCache: true,
        precompiledCollections: {},
        dataFilterSelectors: Set(0) {},
        libraryAmendments: {},
        serverPassthroughCopyBehavior: 'copy',
        urlTransforms: [],
        virtualTemplates: {},
        freezeReservedData: true,
        customDateParsing: Set(0) {},
        errorReporting: {},
        templateHandling: {},
        uses: GlobalDependencyMap { isEsm: true }
      },
      benchmarks: {
        data: BenchmarkGroup {
          benchmarks: {},
          isVerbose: true,
          logger: ConsoleLogger {
            outputStream: Readable {
              _events: {
                close: undefined,
                error: undefined,
                data: undefined,
                end: undefined,
                readable: undefined
              },
              _readableState: ReadableState {
                highWaterMark: 65536,
                buffer: [],
                bufferIndex: 0,
                length: 0,
                pipes: [],
                awaitDrainWriters: null,
                [Symbol(kState)]: 1052940
              },
              _read: [Function: read],
              _maxListeners: undefined,
              [Symbol(shapeMode)]: true,
              [Symbol(kCapture)]: false
            }
          },
          minimumThresholdMs: 50,
          minimumThresholdPercent: 8
        },
        aggregate: BenchmarkGroup {
          benchmarks: {
            'Configuration addPlugin': Benchmark {
              timeSpent: 2.423401999999953,
              timesCalled: 5,
              beforeTimers: []
            },
            'Processing plugins in config': Benchmark {
              timeSpent: 0.26264500000002045,
              timesCalled: 1,
              beforeTimers: []
            },
            'Searching the file system (templates)': Benchmark {
              timeSpent: 5.5963840000000005,
              timesCalled: 1,
              beforeTimers: []
            },
            'Searching the file system (data)': Benchmark {
              timeSpent: 0.47100799999998344,
              timesCalled: 1,
              beforeTimers: []
            },
            'Template Read': Benchmark {
              timeSpent: 0.38637099999994007,
              timesCalled: 6,
              beforeTimers: []
            },
            '(count) getOutputLocations': Benchmark {
              timeSpent: 0,
              timesCalled: 6,
              beforeTimers: []
            },
            'Template Compile Content': Benchmark {
              timeSpent: 0.11093199999999115,
              timesCalled: 1,
              beforeTimers: []
            },
            '> Compile Content > ./src/index.njk': Benchmark {
              timeSpent: 0.10961099999997259,
              timesCalled: 1,
              beforeTimers: []
            },
            Render: Benchmark {
              timeSpent: 0,
              timesCalled: 1,
              beforeTimers: [ 347.785523 ]
            },
            '> Render Content > ./src/index.njk': Benchmark {
              timeSpent: 0,
              timesCalled: 1,
              beforeTimers: [ 347.785945 ]
            }
          },
          isVerbose: false,
          logger: ConsoleLogger {
            outputStream: Readable {
              _events: {
                close: undefined,
                error: undefined,
                data: undefined,
                end: undefined,
                readable: undefined
              },
              _readableState: ReadableState {
                highWaterMark: 65536,
                buffer: [],
                bufferIndex: 0,
                length: 0,
                pipes: [],
                awaitDrainWriters: null,
                [Symbol(kState)]: 1052940
              },
              _read: [Function: read],
              _maxListeners: undefined,
              [Symbol(shapeMode)]: true,
              [Symbol(kCapture)]: false
            }
          },
          minimumThresholdMs: 50,
          minimumThresholdPercent: 8
        }
      },
      rawImports: {
        pkg: {
          name: 'stringify-and-view',
          version: '0.0.1',
          main: 'app/index.js',
          license: 'MIT',
          author: 'dazza',
          type: 'module',
          scripts: {
            dev: 'rimraf dist build && eleventy --serve --quiet',
            build: 'eleventy ',
            test: 'vitest run',
            'test:watch': 'vitest'
          },
          dependencies: {
            'eleventy-plugin-console-plus': '^0.1.1'
          },
          devDependencies: {
            '@11ty/eleventy': '^3.1.1',
            jsdom: '^26.1.0',
            rimraf: '^6.0.1',
            vitest: '^3.2.1'
          }
        }
      },
      globalData: Promise {
        {
          eleventy: {
            version: '3.1.1',
            generator: 'Eleventy v3.1.1',
            env: {
              source: 'cli',
              runMode: 'build',
              config: '/opt/build/repo/eleventy.config.js',
              root: '/opt/build/repo'
            },
            directories: {
              input: './src/',
              inputFile: undefined,
              inputGlob: undefined,
              data: './src/_data/',
              includes: './src/_includes/',
              layouts: undefined,
              output: './dist/'
            }
          },
          pkg: {
            name: 'stringify-and-view',
            version: '0.0.1',
            main: 'app/index.js',
            license: 'MIT',
            author: 'dazza',
            type: 'module',
            scripts: {
              dev: 'rimraf dist build && eleventy --serve --quiet',
              build: 'eleventy ',
              test: 'vitest run',
              'test:watch': 'vitest'
            },
            dependencies: {
              'eleventy-plugin-console-plus': '^0.1.1'
            },
            devDependencies: {
              '@11ty/eleventy': '^3.1.1',
              jsdom: '^26.1.0',
              rimraf: '^6.0.1',
              vitest: '^3.2.1'
            }
          }
        }
      },
      templateDirectoryData: {
        './src/index.njk': {},
        './src/posts/ai-ethics.md': {},
        './src/posts/computer-vision.md': {},
        './src/posts/machine-learning-basics.md': {},
        './src/posts/natural-language-processing.md': {},
        './src/posts/neural-networks.md': {}
      },
      isEsm: true,
      initialGlobalData: TemplateDataInitialGlobalData {
        templateConfig: TemplateConfig {
          overrides: {},
          projectConfigPaths: [
            '.eleventy.js',
            'eleventy.config.js',
            'eleventy.config.mjs',
            'eleventy.config.cjs'
          ],
          customRootConfig: null,
          hasConfigMerged: true,
          isEsm: true,
          logger: ConsoleLogger {
            outputStream: Readable {
              _events: {
                close: undefined,
                error: undefined,
                data: undefined,
                end: undefined,
                readable: undefined
              },
              _readableState: ReadableState {
                highWaterMark: 65536,
                buffer: [],
                bufferIndex: 0,
                length: 0,
                pipes: [],
                awaitDrainWriters: null,
                [Symbol(kState)]: 1052940
              },
              _read: [Function: read],
              _maxListeners: undefined,
              [Symbol(shapeMode)]: true,
              [Symbol(kCapture)]: false
            }
          },
          directories: ProjectDirectories {
            inputFile: undefined,
            inputGlob: undefined
          },
          rootConfig: {
            templateFormats: [
              'liquid',
              'md',
              'njk',
              'html',
              '11ty.js'
            ],
            pathPrefix: '/',
            markdownTemplateEngine: 'liquid',
            htmlTemplateEngine: 'liquid',
            dataFileSuffixes: [ '.11tydata', '' ],
            dataFileDirBaseNameOverride: false,
            keys: {
              package: 'pkg',
              layout: 'layout',
              permalink: 'permalink',
              permalinkRoot: 'permalinkBypassOutputDir',
              engineOverride: 'templateEngineOverride',
              computed: 'eleventyComputed',
              dataSchema: 'eleventyDataSchema'
            },
            dir: {
              input: '.',
              includes: '_includes',
              data: '_data',
              output: '_site'
            },
            nunjucksFilters: {}
          },
          config: {
            templateFormats: [
              'liquid',
              'md',
              'njk',
              'html',
              '11ty.js'
            ],
            pathPrefix: '/',
            markdownTemplateEngine: 'liquid',
            htmlTemplateEngine: 'njk',
            dataFileSuffixes: [ '.11tydata', '' ],
            dataFileDirBaseNameOverride: false,
            keys: {
              package: 'pkg',
              layout: 'layout',
              permalink: 'permalink',
              permalinkRoot: 'permalinkBypassOutputDir',
              engineOverride: 'templateEngineOverride',
              computed: 'eleventyComputed',
              dataSchema: 'eleventyDataSchema'
            },
            dir: {
              input: 'src',
              includes: '_includes',
              data: '_data',
              output: 'dist'
            },
            nunjucksFilters: {
              inputPathToUrl: [Function: fn],
              slug: [Function: fn],
              slugify: [Function: fn],
              url: [Function: fn],
              log: [Function: fn],
              getCollectionItemIndex: [Function: fn],
              getCollectionItem: [Function: fn],
              getPreviousCollectionItem: [Function: fn],
              getNextCollectionItem: [Function: fn]
            },
            directories: {
              input: [Getter],
              inputFile: [Getter],
              inputGlob: [Getter],
              data: [Getter],
              includes: [Getter],
              layouts: [Getter],
              output: [Getter]
            },
            transforms: {
              '@11ty/eleventy-bundle': [Function: fn],
              '@11ty/eleventy/html-transformer': [Function: fn],
              '@11ty/eleventy-bundle/delayed': [Function: fn]
            },
            linters: {},
            preprocessors: {},
            globalData: {},
            layoutAliases: {},
            layoutResolution: true,
            passthroughCopiesHtmlRelative: Set(0) {},
            passthroughCopies: {},
            liquidOptions: {},
            liquidTags: {},
            liquidFilters: {
              inputPathToUrl: [Function: fn],
              slug: [Function: fn],
              slugify: [Function: fn],
              url: [Function: fn],
              log: [Function: fn],
              getCollectionItemIndex: [Function: fn],
              getCollectionItem: [Function: fn],
              getPreviousCollectionItem: [Function: fn],
              getNextCollectionItem: [Function: fn],
              renderTransforms: [Function: fn],
              jsonViewer: [Function: fn]
            },
            liquidShortcodes: {
              getBundle: [Function: fn],
              getBundleFileUrl: [Function: fn],
              console: [Function: fn]
            },
            liquidPairedShortcodes: {},
            liquidParameterParsing: 'legacy',
            nunjucksEnvironmentOptions: {
              dev: true,
              autoescape: true,
              throwOnUndefined: false,
              trimBlocks: false,
              lstripBlocks: false
            },
            nunjucksPrecompiledTemplates: {},
            nunjucksAsyncFilters: {
              renderTransforms: [Function: fn],
              jsonViewer: [Function: fn]
            },
            nunjucksTags: {},
            nunjucksGlobals: {},
            nunjucksAsyncShortcodes: {},
            nunjucksShortcodes: {
              getBundle: [Function: fn],
              getBundleFileUrl: [Function: fn],
              console: [Function: fn]
            },
            nunjucksAsyncPairedShortcodes: {},
            nunjucksPairedShortcodes: {},
            javascriptFunctions: {
              getBundle: [Function: fn],
              getBundleFileUrl: [Function: fn],
              inputPathToUrl: [Function: fn],
              slug: [Function: fn],
              slugify: [Function: fn],
              url: [Function: fn],
              log: [Function: fn],
              getCollectionItemIndex: [Function: fn],
              getCollectionItem: [Function: fn],
              getPreviousCollectionItem: [Function: fn],
              getNextCollectionItem: [Function: fn],
              renderTransforms: [Function: fn],
              jsonViewer: [Function: fn],
              console: [Function: fn]
            },
            javascriptShortcodes: {
              getBundle: [Function: fn],
              getBundleFileUrl: [Function: fn],
              console: [Function: fn]
            },
            javascriptPairedShortcodes: {},
            javascriptFilters: {
              inputPathToUrl: [Function: fn],
              slug: [Function: fn],
              slugify: [Function: fn],
              url: [Function: fn],
              log: [Function: fn],
              getCollectionItemIndex: [Function: fn],
              getCollectionItem: [Function: fn],
              getPreviousCollectionItem: [Function: fn],
              getNextCollectionItem: [Function: fn],
              renderTransforms: [Function: fn],
              jsonViewer: [Function: fn]
            },
            markdownHighlighter: null,
            libraryOverrides: {},
            dynamicPermalinks: true,
            useGitIgnore: true,
            ignores: Set(2) {
              '**/node_modules/**',
              '.git/**'
            },
            watchIgnores: Set(2) {
              '**/node_modules/**',
              '.git/**'
            },
            dataDeepMerge: true,
            watchJavaScriptDependencies: true,
            additionalWatchTargets: [],
            watchTargetsConfigReset: Set(0) {},
            serverOptions: {},
            chokidarConfig: {},
            watchThrottleWaitTime: 0,
            frontMatterParsingOptions: {
              engines: {
                yaml: [Function: bound load$1],
                javascript: [Function: default],
                jsLegacy: {
                  parse: [Function: parse],
                  stringify: [Function: stringify]
                },
                node: [Function: node]
              },
              filePath: './src/posts/neural-networks.md'
            },
            dataExtensions: Map(0) {},
            extensionMap: Set(0) {},
            quietMode: false,
            events: AsyncEventEmitter {
              _events: [Object: null prototype] {
                'eleventy.layouts': [Function: bound onceWrapper] {
                  listener: [AsyncFunction (anonymous)]
                },
                'eleventy.before': [
                  [AsyncFunction (anonymous)],
                  [AsyncFunction (anonymous)]
                ],
                'eleventy.contentMap': [Function (anonymous)],
                'eleventy#copy': [Function (anonymous)],
                'eleventy#beforerender': [Function (anonymous)],
                'eleventy#render': [Function (anonymous)],
                'eleventy#templateModified': [Function (anonymous)]
              },
              _eventsCount: 7,
              _maxListeners: 25,
              [Symbol(shapeMode)]: false,
              [Symbol(kCapture)]: false
            },
            benchmarkManager: BenchmarkManager {
              benchmarkGroups: {
                Configuration: BenchmarkGroup {
                  benchmarks: [Object],
                  isVerbose: true,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                },
                Aggregate: BenchmarkGroup {
                  benchmarks: [Object],
                  isVerbose: false,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                },
                Data: BenchmarkGroup {
                  benchmarks: {},
                  isVerbose: true,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                }
              },
              isVerbose: true,
              start: 256.488008
            },
            plugins: [
              {
                plugin: [Function (anonymous)],
                options: {},
                pluginNamespace: ''
              },
              {
                plugin: [Function: HtmlRelativeCopyPlugin],
                options: {},
                pluginNamespace: ''
              },
              {
                plugin: [Function: logToConsole],
                options: { logToTerminal: false },
                pluginNamespace: ''
              }
            ],
            useTemplateCache: true,
            precompiledCollections: {},
            dataFilterSelectors: Set(0) {},
            libraryAmendments: {},
            serverPassthroughCopyBehavior: 'copy',
            urlTransforms: [],
            virtualTemplates: {},
            freezeReservedData: true,
            customDateParsing: Set(0) {},
            errorReporting: {},
            templateHandling: {},
            uses: GlobalDependencyMap { isEsm: true }
          },
          verbose: true
        },
        config: {
          templateFormats: [
            'liquid',
            'md',
            'njk',
            'html',
            '11ty.js'
          ],
          pathPrefix: '/',
          markdownTemplateEngine: 'liquid',
          htmlTemplateEngine: 'njk',
          dataFileSuffixes: [ '.11tydata', '' ],
          dataFileDirBaseNameOverride: false,
          keys: {
            package: 'pkg',
            layout: 'layout',
            permalink: 'permalink',
            permalinkRoot: 'permalinkBypassOutputDir',
            engineOverride: 'templateEngineOverride',
            computed: 'eleventyComputed',
            dataSchema: 'eleventyDataSchema'
          },
          dir: {
            input: 'src',
            includes: '_includes',
            data: '_data',
            output: 'dist'
          },
          nunjucksFilters: {
            inputPathToUrl: [Function: fn],
            slug: [Function: fn],
            slugify: [Function: fn],
            url: [Function: fn],
            log: [Function: fn],
            getCollectionItemIndex: [Function: fn],
            getCollectionItem: [Function: fn],
            getPreviousCollectionItem: [Function: fn],
            getNextCollectionItem: [Function: fn]
          },
          directories: {
            input: [Getter],
            inputFile: [Getter],
            inputGlob: [Getter],
            data: [Getter],
            includes: [Getter],
            layouts: [Getter],
            output: [Getter]
          },
          transforms: {
            '@11ty/eleventy-bundle': [Function: fn],
            '@11ty/eleventy/html-transformer': [Function: fn],
            '@11ty/eleventy-bundle/delayed': [Function: fn]
          },
          linters: {},
          preprocessors: {},
          globalData: {},
          layoutAliases: {},
          layoutResolution: true,
          passthroughCopiesHtmlRelative: Set(0) {},
          passthroughCopies: {},
          liquidOptions: {},
          liquidTags: {},
          liquidFilters: {
            inputPathToUrl: [Function: fn],
            slug: [Function: fn],
            slugify: [Function: fn],
            url: [Function: fn],
            log: [Function: fn],
            getCollectionItemIndex: [Function: fn],
            getCollectionItem: [Function: fn],
            getPreviousCollectionItem: [Function: fn],
            getNextCollectionItem: [Function: fn],
            renderTransforms: [Function: fn],
            jsonViewer: [Function: fn]
          },
          liquidShortcodes: {
            getBundle: [Function: fn],
            getBundleFileUrl: [Function: fn],
            console: [Function: fn]
          },
          liquidPairedShortcodes: {},
          liquidParameterParsing: 'legacy',
          nunjucksEnvironmentOptions: {
            dev: true,
            autoescape: true,
            throwOnUndefined: false,
            trimBlocks: false,
            lstripBlocks: false
          },
          nunjucksPrecompiledTemplates: {},
          nunjucksAsyncFilters: {
            renderTransforms: [Function: fn],
            jsonViewer: [Function: fn]
          },
          nunjucksTags: {},
          nunjucksGlobals: {},
          nunjucksAsyncShortcodes: {},
          nunjucksShortcodes: {
            getBundle: [Function: fn],
            getBundleFileUrl: [Function: fn],
            console: [Function: fn]
          },
          nunjucksAsyncPairedShortcodes: {},
          nunjucksPairedShortcodes: {},
          javascriptFunctions: {
            getBundle: [Function: fn],
            getBundleFileUrl: [Function: fn],
            inputPathToUrl: [Function: fn],
            slug: [Function: fn],
            slugify: [Function: fn],
            url: [Function: fn],
            log: [Function: fn],
            getCollectionItemIndex: [Function: fn],
            getCollectionItem: [Function: fn],
            getPreviousCollectionItem: [Function: fn],
            getNextCollectionItem: [Function: fn],
            renderTransforms: [Function: fn],
            jsonViewer: [Function: fn],
            console: [Function: fn]
          },
          javascriptShortcodes: {
            getBundle: [Function: fn],
            getBundleFileUrl: [Function: fn],
            console: [Function: fn]
          },
          javascriptPairedShortcodes: {},
          javascriptFilters: {
            inputPathToUrl: [Function: fn],
            slug: [Function: fn],
            slugify: [Function: fn],
            url: [Function: fn],
            log: [Function: fn],
            getCollectionItemIndex: [Function: fn],
            getCollectionItem: [Function: fn],
            getPreviousCollectionItem: [Function: fn],
            getNextCollectionItem: [Function: fn],
            renderTransforms: [Function: fn],
            jsonViewer: [Function: fn]
          },
          markdownHighlighter: null,
          libraryOverrides: {},
          dynamicPermalinks: true,
          useGitIgnore: true,
          ignores: Set(2) {
            '**/node_modules/**',
            '.git/**'
          },
          watchIgnores: Set(2) {
            '**/node_modules/**',
            '.git/**'
          },
          dataDeepMerge: true,
          watchJavaScriptDependencies: true,
          additionalWatchTargets: [],
          watchTargetsConfigReset: Set(0) {},
          serverOptions: {},
          chokidarConfig: {},
          watchThrottleWaitTime: 0,
          frontMatterParsingOptions: {
            engines: {
              yaml: [Function: bound load$1],
              javascript: [Function: default],
              jsLegacy: {
                parse: [Function: parse],
                stringify: [Function: stringify]
              },
              node: [Function: node]
            },
            filePath: './src/posts/neural-networks.md'
          },
          dataExtensions: Map(0) {},
          extensionMap: Set(0) {},
          quietMode: false,
          events: AsyncEventEmitter {
            _events: [Object: null prototype] {
              'eleventy.layouts': [Function: bound onceWrapper] {
                listener: [AsyncFunction (anonymous)]
              },
              'eleventy.before': [
                [AsyncFunction (anonymous)],
                [AsyncFunction (anonymous)]
              ],
              'eleventy.contentMap': [Function (anonymous)],
              'eleventy#copy': [Function (anonymous)],
              'eleventy#beforerender': [Function (anonymous)],
              'eleventy#render': [Function (anonymous)],
              'eleventy#templateModified': [Function (anonymous)]
            },
            _eventsCount: 7,
            _maxListeners: 25,
            [Symbol(shapeMode)]: false,
            [Symbol(kCapture)]: false
          },
          benchmarkManager: BenchmarkManager {
            benchmarkGroups: {
              Configuration: BenchmarkGroup {
                benchmarks: {
                  '"getBundle" Universal Shortcode': [Benchmark],
                  '"getBundle" Liquid Shortcode': [Benchmark],
                  '"getBundle" JavaScript Shortcode': [Benchmark],
                  '"getBundle" JavaScript Function': [Benchmark],
                  '"getBundle" Nunjucks Shortcode': [Benchmark],
                  '"getBundleFileUrl" Universal Shortcode': [Benchmark],
                  '"getBundleFileUrl" Liquid Shortcode': [Benchmark],
                  '"getBundleFileUrl" JavaScript Shortcode': [Benchmark],
                  '"getBundleFileUrl" JavaScript Function': [Benchmark],
                  '"getBundleFileUrl" Nunjucks Shortcode': [Benchmark],
                  '"@11ty/eleventy-bundle" Transform': [Benchmark],
                  '"inputPathToUrl" Universal Filter': [Benchmark],
                  '"inputPathToUrl" Liquid Filter': [Benchmark],
                  '"inputPathToUrl" JavaScript Filter': [Benchmark],
                  '"inputPathToUrl" JavaScript Function': [Benchmark],
                  '"inputPathToUrl" Nunjucks Filter': [Benchmark],
                  '"slug" Universal Filter': [Benchmark],
                  '"slug" Liquid Filter': [Benchmark],
                  '"slug" JavaScript Filter': [Benchmark],
                  '"slug" JavaScript Function': [Benchmark],
                  '"slug" Nunjucks Filter': [Benchmark],
                  '"slugify" Universal Filter': [Benchmark],
                  '"slugify" Liquid Filter': [Benchmark],
                  '"slugify" JavaScript Filter': [Benchmark],
                  '"slugify" JavaScript Function': [Benchmark],
                  '"slugify" Nunjucks Filter': [Benchmark],
                  '"url" Universal Filter': [Benchmark],
                  '"url" Liquid Filter': [Benchmark],
                  '"url" JavaScript Filter': [Benchmark],
                  '"url" JavaScript Function': [Benchmark],
                  '"url" Nunjucks Filter': [Benchmark],
                  '"log" Universal Filter': [Benchmark],
                  '"log" Liquid Filter': [Benchmark],
                  '"log" JavaScript Filter': [Benchmark],
                  '"log" JavaScript Function': [Benchmark],
                  '"log" Nunjucks Filter': [Benchmark],
                  '"getCollectionItemIndex" Universal Filter': [Benchmark],
                  '"getCollectionItemIndex" Liquid Filter': [Benchmark],
                  '"getCollectionItemIndex" JavaScript Filter': [Benchmark],
                  '"getCollectionItemIndex" JavaScript Function': [Benchmark],
                  '"getCollectionItemIndex" Nunjucks Filter': [Benchmark],
                  '"getCollectionItem" Universal Filter': [Benchmark],
                  '"getCollectionItem" Liquid Filter': [Benchmark],
                  '"getCollectionItem" JavaScript Filter': [Benchmark],
                  '"getCollectionItem" JavaScript Function': [Benchmark],
                  '"getCollectionItem" Nunjucks Filter': [Benchmark],
                  '"getPreviousCollectionItem" Universal Filter': [Benchmark],
                  '"getPreviousCollectionItem" Liquid Filter': [Benchmark],
                  '"getPreviousCollectionItem" JavaScript Filter': [Benchmark],
                  '"getPreviousCollectionItem" JavaScript Function': [Benchmark],
                  '"getPreviousCollectionItem" Nunjucks Filter': [Benchmark],
                  '"getNextCollectionItem" Universal Filter': [Benchmark],
                  '"getNextCollectionItem" Liquid Filter': [Benchmark],
                  '"getNextCollectionItem" JavaScript Filter': [Benchmark],
                  '"getNextCollectionItem" JavaScript Function': [Benchmark],
                  '"getNextCollectionItem" Nunjucks Filter': [Benchmark],
                  '"renderTransforms" Universal Filter': [Benchmark],
                  '"renderTransforms" Liquid Filter': [Benchmark],
                  '"renderTransforms" JavaScript Filter': [Benchmark],
                  '"renderTransforms" JavaScript Function': [Benchmark],
                  '"renderTransforms" Nunjucks Filter': [Benchmark],
                  '"@11ty/eleventy/html-transformer" Transform': [Benchmark],
                  '"jsonViewer" Universal Filter': [Benchmark],
                  '"jsonViewer" Liquid Filter': [Benchmark],
                  '"jsonViewer" JavaScript Filter': [Benchmark],
                  '"jsonViewer" JavaScript Function': [Benchmark],
                  '"jsonViewer" Nunjucks Filter': [Benchmark],
                  '"@11ty/eleventy-bundle/delayed" Transform': [Benchmark],
                  '"console" Universal Shortcode': [Benchmark],
                  '"console" Liquid Shortcode': [Benchmark],
                  '"console" JavaScript Shortcode': [Benchmark],
                  '"console" JavaScript Function': [Benchmark],
                  '"console" Nunjucks Shortcode': [Benchmark]
                },
                isVerbose: true,
                logger: ConsoleLogger {
                  outputStream: [Readable]
                },
                minimumThresholdMs: 50,
                minimumThresholdPercent: 8
              },
              Aggregate: BenchmarkGroup {
                benchmarks: {
                  'Configuration addPlugin': [Benchmark],
                  'Processing plugins in config': [Benchmark],
                  'Searching the file system (templates)': [Benchmark],
                  'Searching the file system (data)': [Benchmark],
                  'Template Read': [Benchmark],
                  '(count) getOutputLocations': [Benchmark],
                  'Template Compile Content': [Benchmark],
                  '> Compile Content > ./src/index.njk': [Benchmark],
                  Render: [Benchmark],
                  '> Render Content > ./src/index.njk': [Benchmark]
                },
                isVerbose: false,
                logger: ConsoleLogger {
                  outputStream: [Readable]
                },
                minimumThresholdMs: 50,
                minimumThresholdPercent: 8
              },
              Data: BenchmarkGroup {
                benchmarks: {},
                isVerbose: true,
                logger: ConsoleLogger {
                  outputStream: [Readable]
                },
                minimumThresholdMs: 50,
                minimumThresholdPercent: 8
              }
            },
            isVerbose: true,
            start: 256.488008
          },
          plugins: [
            {
              plugin: [Function (anonymous)],
              options: {},
              pluginNamespace: ''
            },
            {
              plugin: [Function: HtmlRelativeCopyPlugin],
              options: {},
              pluginNamespace: ''
            },
            {
              plugin: [Function: logToConsole],
              options: { logToTerminal: false },
              pluginNamespace: ''
            }
          ],
          useTemplateCache: true,
          precompiledCollections: {},
          dataFilterSelectors: Set(0) {},
          libraryAmendments: {},
          serverPassthroughCopyBehavior: 'copy',
          urlTransforms: [],
          virtualTemplates: {},
          freezeReservedData: true,
          customDateParsing: Set(0) {},
          errorReporting: {},
          templateHandling: {},
          uses: GlobalDependencyMap { isEsm: true }
        }
      },
      _extensionMap: EleventyExtensionMap {
        templateConfig: TemplateConfig {
          overrides: {},
          projectConfigPaths: [
            '.eleventy.js',
            'eleventy.config.js',
            'eleventy.config.mjs',
            'eleventy.config.cjs'
          ],
          customRootConfig: null,
          hasConfigMerged: true,
          isEsm: true,
          logger: ConsoleLogger {
            outputStream: Readable {
              _events: {
                close: undefined,
                error: undefined,
                data: undefined,
                end: undefined,
                readable: undefined
              },
              _readableState: ReadableState {
                highWaterMark: 65536,
                buffer: [],
                bufferIndex: 0,
                length: 0,
                pipes: [],
                awaitDrainWriters: null,
                [Symbol(kState)]: 1052940
              },
              _read: [Function: read],
              _maxListeners: undefined,
              [Symbol(shapeMode)]: true,
              [Symbol(kCapture)]: false
            }
          },
          directories: ProjectDirectories {
            inputFile: undefined,
            inputGlob: undefined
          },
          rootConfig: {
            templateFormats: [
              'liquid',
              'md',
              'njk',
              'html',
              '11ty.js'
            ],
            pathPrefix: '/',
            markdownTemplateEngine: 'liquid',
            htmlTemplateEngine: 'liquid',
            dataFileSuffixes: [ '.11tydata', '' ],
            dataFileDirBaseNameOverride: false,
            keys: {
              package: 'pkg',
              layout: 'layout',
              permalink: 'permalink',
              permalinkRoot: 'permalinkBypassOutputDir',
              engineOverride: 'templateEngineOverride',
              computed: 'eleventyComputed',
              dataSchema: 'eleventyDataSchema'
            },
            dir: {
              input: '.',
              includes: '_includes',
              data: '_data',
              output: '_site'
            },
            nunjucksFilters: {}
          },
          config: {
            templateFormats: [
              'liquid',
              'md',
              'njk',
              'html',
              '11ty.js'
            ],
            pathPrefix: '/',
            markdownTemplateEngine: 'liquid',
            htmlTemplateEngine: 'njk',
            dataFileSuffixes: [ '.11tydata', '' ],
            dataFileDirBaseNameOverride: false,
            keys: {
              package: 'pkg',
              layout: 'layout',
              permalink: 'permalink',
              permalinkRoot: 'permalinkBypassOutputDir',
              engineOverride: 'templateEngineOverride',
              computed: 'eleventyComputed',
              dataSchema: 'eleventyDataSchema'
            },
            dir: {
              input: 'src',
              includes: '_includes',
              data: '_data',
              output: 'dist'
            },
            nunjucksFilters: {
              inputPathToUrl: [Function: fn],
              slug: [Function: fn],
              slugify: [Function: fn],
              url: [Function: fn],
              log: [Function: fn],
              getCollectionItemIndex: [Function: fn],
              getCollectionItem: [Function: fn],
              getPreviousCollectionItem: [Function: fn],
              getNextCollectionItem: [Function: fn]
            },
            directories: {
              input: [Getter],
              inputFile: [Getter],
              inputGlob: [Getter],
              data: [Getter],
              includes: [Getter],
              layouts: [Getter],
              output: [Getter]
            },
            transforms: {
              '@11ty/eleventy-bundle': [Function: fn],
              '@11ty/eleventy/html-transformer': [Function: fn],
              '@11ty/eleventy-bundle/delayed': [Function: fn]
            },
            linters: {},
            preprocessors: {},
            globalData: {},
            layoutAliases: {},
            layoutResolution: true,
            passthroughCopiesHtmlRelative: Set(0) {},
            passthroughCopies: {},
            liquidOptions: {},
            liquidTags: {},
            liquidFilters: {
              inputPathToUrl: [Function: fn],
              slug: [Function: fn],
              slugify: [Function: fn],
              url: [Function: fn],
              log: [Function: fn],
              getCollectionItemIndex: [Function: fn],
              getCollectionItem: [Function: fn],
              getPreviousCollectionItem: [Function: fn],
              getNextCollectionItem: [Function: fn],
              renderTransforms: [Function: fn],
              jsonViewer: [Function: fn]
            },
            liquidShortcodes: {
              getBundle: [Function: fn],
              getBundleFileUrl: [Function: fn],
              console: [Function: fn]
            },
            liquidPairedShortcodes: {},
            liquidParameterParsing: 'legacy',
            nunjucksEnvironmentOptions: {
              dev: true,
              autoescape: true,
              throwOnUndefined: false,
              trimBlocks: false,
              lstripBlocks: false
            },
            nunjucksPrecompiledTemplates: {},
            nunjucksAsyncFilters: {
              renderTransforms: [Function: fn],
              jsonViewer: [Function: fn]
            },
            nunjucksTags: {},
            nunjucksGlobals: {},
            nunjucksAsyncShortcodes: {},
            nunjucksShortcodes: {
              getBundle: [Function: fn],
              getBundleFileUrl: [Function: fn],
              console: [Function: fn]
            },
            nunjucksAsyncPairedShortcodes: {},
            nunjucksPairedShortcodes: {},
            javascriptFunctions: {
              getBundle: [Function: fn],
              getBundleFileUrl: [Function: fn],
              inputPathToUrl: [Function: fn],
              slug: [Function: fn],
              slugify: [Function: fn],
              url: [Function: fn],
              log: [Function: fn],
              getCollectionItemIndex: [Function: fn],
              getCollectionItem: [Function: fn],
              getPreviousCollectionItem: [Function: fn],
              getNextCollectionItem: [Function: fn],
              renderTransforms: [Function: fn],
              jsonViewer: [Function: fn],
              console: [Function: fn]
            },
            javascriptShortcodes: {
              getBundle: [Function: fn],
              getBundleFileUrl: [Function: fn],
              console: [Function: fn]
            },
            javascriptPairedShortcodes: {},
            javascriptFilters: {
              inputPathToUrl: [Function: fn],
              slug: [Function: fn],
              slugify: [Function: fn],
              url: [Function: fn],
              log: [Function: fn],
              getCollectionItemIndex: [Function: fn],
              getCollectionItem: [Function: fn],
              getPreviousCollectionItem: [Function: fn],
              getNextCollectionItem: [Function: fn],
              renderTransforms: [Function: fn],
              jsonViewer: [Function: fn]
            },
            markdownHighlighter: null,
            libraryOverrides: {},
            dynamicPermalinks: true,
            useGitIgnore: true,
            ignores: Set(2) {
              '**/node_modules/**',
              '.git/**'
            },
            watchIgnores: Set(2) {
              '**/node_modules/**',
              '.git/**'
            },
            dataDeepMerge: true,
            watchJavaScriptDependencies: true,
            additionalWatchTargets: [],
            watchTargetsConfigReset: Set(0) {},
            serverOptions: {},
            chokidarConfig: {},
            watchThrottleWaitTime: 0,
            frontMatterParsingOptions: {
              engines: {
                yaml: [Function: bound load$1],
                javascript: [Function: default],
                jsLegacy: {
                  parse: [Function: parse],
                  stringify: [Function: stringify]
                },
                node: [Function: node]
              },
              filePath: './src/posts/neural-networks.md'
            },
            dataExtensions: Map(0) {},
            extensionMap: Set(0) {},
            quietMode: false,
            events: AsyncEventEmitter {
              _events: [Object: null prototype] {
                'eleventy.layouts': [Function: bound onceWrapper] {
                  listener: [AsyncFunction (anonymous)]
                },
                'eleventy.before': [
                  [AsyncFunction (anonymous)],
                  [AsyncFunction (anonymous)]
                ],
                'eleventy.contentMap': [Function (anonymous)],
                'eleventy#copy': [Function (anonymous)],
                'eleventy#beforerender': [Function (anonymous)],
                'eleventy#render': [Function (anonymous)],
                'eleventy#templateModified': [Function (anonymous)]
              },
              _eventsCount: 7,
              _maxListeners: 25,
              [Symbol(shapeMode)]: false,
              [Symbol(kCapture)]: false
            },
            benchmarkManager: BenchmarkManager {
              benchmarkGroups: {
                Configuration: BenchmarkGroup {
                  benchmarks: [Object],
                  isVerbose: true,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                },
                Aggregate: BenchmarkGroup {
                  benchmarks: [Object],
                  isVerbose: false,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                },
                Data: BenchmarkGroup {
                  benchmarks: {},
                  isVerbose: true,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                }
              },
              isVerbose: true,
              start: 256.488008
            },
            plugins: [
              {
                plugin: [Function (anonymous)],
                options: {},
                pluginNamespace: ''
              },
              {
                plugin: [Function: HtmlRelativeCopyPlugin],
                options: {},
                pluginNamespace: ''
              },
              {
                plugin: [Function: logToConsole],
                options: { logToTerminal: false },
                pluginNamespace: ''
              }
            ],
            useTemplateCache: true,
            precompiledCollections: {},
            dataFilterSelectors: Set(0) {},
            libraryAmendments: {},
            serverPassthroughCopyBehavior: 'copy',
            urlTransforms: [],
            virtualTemplates: {},
            freezeReservedData: true,
            customDateParsing: Set(0) {},
            errorReporting: {},
            templateHandling: {},
            uses: GlobalDependencyMap { isEsm: true }
          },
          verbose: true
        },
        _spiderJsDepsCache: {},
        formatKeys: [
          'liquid',
          'md',
          'njk',
          'html',
          '11ty.js'
        ],
        unfilteredFormatKeys: [
          'liquid',
          'md',
          'njk',
          'html',
          '11ty.js'
        ],
        _extensionToKeyMap: {
          md: { key: 'md', extension: 'md' },
          html: { key: 'html', extension: 'html' },
          njk: { key: 'njk', extension: 'njk' },
          liquid: { key: 'liquid', extension: 'liquid' },
          '11ty.js': { key: '11ty.js', extension: '11ty.js' },
          '11ty.cjs': { key: '11ty.js', extension: '11ty.cjs' },
          '11ty.mjs': { key: '11ty.js', extension: '11ty.mjs' }
        },
        validTemplateLanguageKeys: [
          'liquid',
          'md',
          'njk',
          'html',
          '11ty.js'
        ],
        passthroughCopyKeys: []
      },
      _env: {
        source: 'cli',
        runMode: 'build',
        config: '/opt/build/repo/eleventy.config.js',
        root: '/opt/build/repo'
      },
      fileSystemSearch: FileSystemSearch {
        inputs: {
          'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': {
            input: [
              'src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}'
            ],
            options: {
              ignore: [
                'node_modules/**',
                '.env',
                'dist',
                'dist/**',
                'src/_includes/**',
                'src/_data/**',
                '**/node_modules/**',
                '.git/**'
              ]
            }
          },
          'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': {
            input: [ 'src/_data/**/*.{json,mjs,cjs,js}' ],
            options: {}
          }
        },
        outputs: {
          'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': Set(6) {
            './src/index.njk',
            './src/posts/ai-ethics.md',
            './src/posts/computer-vision.md',
            './src/posts/machine-learning-basics.md',
            './src/posts/natural-language-processing.md',
            './src/posts/neural-networks.md'
          },
          'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': Set(0) {}
        },
        promises: {
          'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': Promise {
            [
              './src/index.njk',
              './src/posts/ai-ethics.md',
              './src/posts/computer-vision.md',
              './src/posts/machine-learning-basics.md',
              './src/posts/natural-language-processing.md',
              './src/posts/neural-networks.md'
            ]
          },
          'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': Promise { [] }
        },
        count: 2
      },
      configApiGlobalData: Promise {
        {
          eleventy: {
            version: '3.1.1',
            generator: 'Eleventy v3.1.1',
            env: {
              source: 'cli',
              runMode: 'build',
              config: '/opt/build/repo/eleventy.config.js',
              root: '/opt/build/repo'
            },
            directories: {
              input: './src/',
              inputFile: undefined,
              inputGlob: undefined,
              data: './src/_data/',
              includes: './src/_includes/',
              layouts: undefined,
              output: './dist/'
            }
          }
        }
      },
      pathCache: []
    },
    fileSlug: TemplateFileSlug {
      inputPath: 'index.njk',
      cleanInputPath: 'index.njk',
      dirs: [],
      parsed: {
        root: '',
        dir: '',
        base: 'index.njk',
        ext: '.njk',
        name: 'index'
      },
      filenameNoExt: 'index'
    },
    fileSlugStr: '',
    filePathStem: '/index',
    linters: [],
    transforms: {
      '@11ty/eleventy-bundle': [Function: fn],
      '@11ty/eleventy/html-transformer': [Function: fn],
      '@11ty/eleventy-bundle/delayed': [Function: fn]
    },
    isVerbose: true,
    isDryRun: false,
    writeCount: 0,
    outputFormat: 'fs',
    behavior: TemplateBehavior {
      render: true,
      write: true,
      outputFormat: 'fs',
      config: {
        templateFormats: [
          'liquid',
          'md',
          'njk',
          'html',
          '11ty.js'
        ],
        pathPrefix: '/',
        markdownTemplateEngine: 'liquid',
        htmlTemplateEngine: 'njk',
        dataFileSuffixes: [ '.11tydata', '' ],
        dataFileDirBaseNameOverride: false,
        keys: {
          package: 'pkg',
          layout: 'layout',
          permalink: 'permalink',
          permalinkRoot: 'permalinkBypassOutputDir',
          engineOverride: 'templateEngineOverride',
          computed: 'eleventyComputed',
          dataSchema: 'eleventyDataSchema'
        },
        dir: {
          input: 'src',
          includes: '_includes',
          data: '_data',
          output: 'dist'
        },
        nunjucksFilters: {
          inputPathToUrl: [Function: fn],
          slug: [Function: fn],
          slugify: [Function: fn],
          url: [Function: fn],
          log: [Function: fn],
          getCollectionItemIndex: [Function: fn],
          getCollectionItem: [Function: fn],
          getPreviousCollectionItem: [Function: fn],
          getNextCollectionItem: [Function: fn]
        },
        directories: {
          input: [Getter],
          inputFile: [Getter],
          inputGlob: [Getter],
          data: [Getter],
          includes: [Getter],
          layouts: [Getter],
          output: [Getter]
        },
        transforms: {
          '@11ty/eleventy-bundle': [Function: fn],
          '@11ty/eleventy/html-transformer': [Function: fn],
          '@11ty/eleventy-bundle/delayed': [Function: fn]
        },
        linters: {},
        preprocessors: {},
        globalData: {},
        layoutAliases: {},
        layoutResolution: true,
        passthroughCopiesHtmlRelative: Set(0) {},
        passthroughCopies: {},
        liquidOptions: {},
        liquidTags: {},
        liquidFilters: {
          inputPathToUrl: [Function: fn],
          slug: [Function: fn],
          slugify: [Function: fn],
          url: [Function: fn],
          log: [Function: fn],
          getCollectionItemIndex: [Function: fn],
          getCollectionItem: [Function: fn],
          getPreviousCollectionItem: [Function: fn],
          getNextCollectionItem: [Function: fn],
          renderTransforms: [Function: fn],
          jsonViewer: [Function: fn]
        },
        liquidShortcodes: {
          getBundle: [Function: fn],
          getBundleFileUrl: [Function: fn],
          console: [Function: fn]
        },
        liquidPairedShortcodes: {},
        liquidParameterParsing: 'legacy',
        nunjucksEnvironmentOptions: {
          dev: true,
          autoescape: true,
          throwOnUndefined: false,
          trimBlocks: false,
          lstripBlocks: false
        },
        nunjucksPrecompiledTemplates: {},
        nunjucksAsyncFilters: {
          renderTransforms: [Function: fn],
          jsonViewer: [Function: fn]
        },
        nunjucksTags: {},
        nunjucksGlobals: {},
        nunjucksAsyncShortcodes: {},
        nunjucksShortcodes: {
          getBundle: [Function: fn],
          getBundleFileUrl: [Function: fn],
          console: [Function: fn]
        },
        nunjucksAsyncPairedShortcodes: {},
        nunjucksPairedShortcodes: {},
        javascriptFunctions: {
          getBundle: [Function: fn],
          getBundleFileUrl: [Function: fn],
          inputPathToUrl: [Function: fn],
          slug: [Function: fn],
          slugify: [Function: fn],
          url: [Function: fn],
          log: [Function: fn],
          getCollectionItemIndex: [Function: fn],
          getCollectionItem: [Function: fn],
          getPreviousCollectionItem: [Function: fn],
          getNextCollectionItem: [Function: fn],
          renderTransforms: [Function: fn],
          jsonViewer: [Function: fn],
          console: [Function: fn]
        },
        javascriptShortcodes: {
          getBundle: [Function: fn],
          getBundleFileUrl: [Function: fn],
          console: [Function: fn]
        },
        javascriptPairedShortcodes: {},
        javascriptFilters: {
          inputPathToUrl: [Function: fn],
          slug: [Function: fn],
          slugify: [Function: fn],
          url: [Function: fn],
          log: [Function: fn],
          getCollectionItemIndex: [Function: fn],
          getCollectionItem: [Function: fn],
          getPreviousCollectionItem: [Function: fn],
          getNextCollectionItem: [Function: fn],
          renderTransforms: [Function: fn],
          jsonViewer: [Function: fn]
        },
        markdownHighlighter: null,
        libraryOverrides: {},
        dynamicPermalinks: true,
        useGitIgnore: true,
        ignores: Set(2) { '**/node_modules/**', '.git/**' },
        watchIgnores: Set(2) { '**/node_modules/**', '.git/**' },
        dataDeepMerge: true,
        watchJavaScriptDependencies: true,
        additionalWatchTargets: [],
        watchTargetsConfigReset: Set(0) {},
        serverOptions: {},
        chokidarConfig: {},
        watchThrottleWaitTime: 0,
        frontMatterParsingOptions: {
          engines: {
            yaml: [Function: bound load$1],
            javascript: [Function: default],
            jsLegacy: {
              parse: [Function: parse],
              stringify: [Function: stringify]
            },
            node: [Function: node]
          },
          filePath: './src/posts/neural-networks.md'
        },
        dataExtensions: Map(0) {},
        extensionMap: Set(0) {},
        quietMode: false,
        events: AsyncEventEmitter {
          _events: [Object: null prototype] {
            'eleventy.layouts': [Function: bound onceWrapper] {
              listener: [AsyncFunction (anonymous)]
            },
            'eleventy.before': [
              [AsyncFunction (anonymous)],
              [AsyncFunction (anonymous)]
            ],
            'eleventy.contentMap': [Function (anonymous)],
            'eleventy#copy': [Function (anonymous)],
            'eleventy#beforerender': [Function (anonymous)],
            'eleventy#render': [Function (anonymous)],
            'eleventy#templateModified': [Function (anonymous)]
          },
          _eventsCount: 7,
          _maxListeners: 25,
          [Symbol(shapeMode)]: false,
          [Symbol(kCapture)]: false
        },
        benchmarkManager: BenchmarkManager {
          benchmarkGroups: {
            Configuration: BenchmarkGroup {
              benchmarks: {
                '"getBundle" Universal Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundle" Liquid Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundle" JavaScript Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundle" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundle" Nunjucks Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundleFileUrl" Universal Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundleFileUrl" Liquid Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundleFileUrl" JavaScript Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundleFileUrl" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getBundleFileUrl" Nunjucks Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"@11ty/eleventy-bundle" Transform': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"inputPathToUrl" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"inputPathToUrl" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"inputPathToUrl" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"inputPathToUrl" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"inputPathToUrl" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slug" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slug" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slug" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slug" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slug" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slugify" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slugify" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slugify" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slugify" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"slugify" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"url" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"url" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"url" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"url" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"url" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"log" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"log" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"log" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"log" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"log" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItemIndex" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItemIndex" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItemIndex" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItemIndex" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItemIndex" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItem" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItem" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItem" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItem" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getCollectionItem" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getPreviousCollectionItem" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getPreviousCollectionItem" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getPreviousCollectionItem" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getPreviousCollectionItem" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getPreviousCollectionItem" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getNextCollectionItem" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getNextCollectionItem" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getNextCollectionItem" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getNextCollectionItem" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"getNextCollectionItem" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"renderTransforms" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"renderTransforms" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"renderTransforms" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"renderTransforms" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"renderTransforms" Nunjucks Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"@11ty/eleventy/html-transformer" Transform': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"jsonViewer" Universal Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"jsonViewer" Liquid Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"jsonViewer" JavaScript Filter': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"jsonViewer" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"jsonViewer" Nunjucks Filter': Benchmark {
                  timeSpent: 1.7184220000000323,
                  timesCalled: 9,
                  beforeTimers: []
                },
                '"@11ty/eleventy-bundle/delayed" Transform': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"console" Universal Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"console" Liquid Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"console" JavaScript Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"console" JavaScript Function': Benchmark {
                  timeSpent: 0,
                  timesCalled: 0,
                  beforeTimers: []
                },
                '"console" Nunjucks Shortcode': Benchmark {
                  timeSpent: 0,
                  timesCalled: 1,
                  beforeTimers: [Array]
                }
              },
              isVerbose: true,
              logger: ConsoleLogger {
                outputStream: Readable {
                  _events: [Object],
                  _readableState: [ReadableState],
                  _read: [Function: read],
                  _maxListeners: undefined,
                  [Symbol(shapeMode)]: true,
                  [Symbol(kCapture)]: false
                }
              },
              minimumThresholdMs: 50,
              minimumThresholdPercent: 8
            },
            Aggregate: BenchmarkGroup {
              benchmarks: {
                'Configuration addPlugin': Benchmark {
                  timeSpent: 2.423401999999953,
                  timesCalled: 5,
                  beforeTimers: []
                },
                'Processing plugins in config': Benchmark {
                  timeSpent: 0.26264500000002045,
                  timesCalled: 1,
                  beforeTimers: []
                },
                'Searching the file system (templates)': Benchmark {
                  timeSpent: 5.5963840000000005,
                  timesCalled: 1,
                  beforeTimers: []
                },
                'Searching the file system (data)': Benchmark {
                  timeSpent: 0.47100799999998344,
                  timesCalled: 1,
                  beforeTimers: []
                },
                'Template Read': Benchmark {
                  timeSpent: 0.38637099999994007,
                  timesCalled: 6,
                  beforeTimers: []
                },
                '(count) getOutputLocations': Benchmark {
                  timeSpent: 0,
                  timesCalled: 6,
                  beforeTimers: []
                },
                'Template Compile Content': Benchmark {
                  timeSpent: 0.11093199999999115,
                  timesCalled: 1,
                  beforeTimers: []
                },
                '> Compile Content > ./src/index.njk': Benchmark {
                  timeSpent: 0.10961099999997259,
                  timesCalled: 1,
                  beforeTimers: []
                },
                Render: Benchmark {
                  timeSpent: 0,
                  timesCalled: 1,
                  beforeTimers: [Array]
                },
                '> Render Content > ./src/index.njk': Benchmark {
                  timeSpent: 0,
                  timesCalled: 1,
                  beforeTimers: [Array]
                }
              },
              isVerbose: false,
              logger: ConsoleLogger {
                outputStream: Readable {
                  _events: [Object],
                  _readableState: [ReadableState],
                  _read: [Function: read],
                  _maxListeners: undefined,
                  [Symbol(shapeMode)]: true,
                  [Symbol(kCapture)]: false
                }
              },
              minimumThresholdMs: 50,
              minimumThresholdPercent: 8
            },
            Data: BenchmarkGroup {
              benchmarks: {},
              isVerbose: true,
              logger: ConsoleLogger {
                outputStream: Readable {
                  _events: [Object],
                  _readableState: [ReadableState],
                  _read: [Function: read],
                  _maxListeners: undefined,
                  [Symbol(shapeMode)]: true,
                  [Symbol(kCapture)]: false
                }
              },
              minimumThresholdMs: 50,
              minimumThresholdPercent: 8
            }
          },
          isVerbose: true,
          start: 256.488008
        },
        plugins: [
          {
            plugin: [Function (anonymous)],
            options: {},
            pluginNamespace: ''
          },
          {
            plugin: [Function: HtmlRelativeCopyPlugin],
            options: {},
            pluginNamespace: ''
          },
          {
            plugin: [Function: logToConsole],
            options: { logToTerminal: false },
            pluginNamespace: ''
          }
        ],
        useTemplateCache: true,
        precompiledCollections: {},
        dataFilterSelectors: Set(0) {},
        libraryAmendments: {},
        serverPassthroughCopyBehavior: 'copy',
        urlTransforms: [],
        virtualTemplates: {},
        freezeReservedData: true,
        customDateParsing: Set(0) {},
        errorReporting: {},
        templateHandling: {},
        uses: GlobalDependencyMap { isEsm: true }
      },
      renderableOverride: undefined
    },
    renderCount: 1,
    _dataCache: Promise {
      {
        eleventy: {
          version: '3.1.1',
          generator: 'Eleventy v3.1.1',
          env: {
            source: 'cli',
            runMode: 'build',
            config: '/opt/build/repo/eleventy.config.js',
            root: '/opt/build/repo'
          },
          directories: {
            input: './src/',
            inputFile: undefined,
            inputGlob: undefined,
            data: './src/_data/',
            includes: './src/_includes/',
            layouts: undefined,
            output: './dist/'
          }
        },
        pkg: {
          name: 'stringify-and-view',
          version: '0.0.1',
          main: 'app/index.js',
          license: 'MIT',
          author: 'dazza',
          type: 'module',
          scripts: {
            dev: 'rimraf dist build && eleventy --serve --quiet',
            build: 'eleventy ',
            test: 'vitest run',
            'test:watch': 'vitest'
          },
          dependencies: {
            'eleventy-plugin-console-plus': '^0.1.1'
          },
          devDependencies: {
            '@11ty/eleventy': '^3.1.1',
            jsdom: '^26.1.0',
            rimraf: '^6.0.1',
            vitest: '^3.2.1'
          }
        },
        title: 'JSON Viewer',
        page: {
          inputPath: './src/index.njk',
          fileSlug: '',
          filePathStem: '/index',
          outputFileExtension: 'html',
          templateSyntax: 'njk',
          date: 2025-07-17T13:59:35.706Z,
          rawInput: '<!DOCTYPE html>\n' +
            '<html lang="en">\n' +
            '\n' +
            '<head>\n' +
            '    <meta charset="UTF-8">\n' +
            '    <meta name="viewport" content="width=device-width, initial-scale=1.0">\n' +
            '    <title>{{title}}</title>\n' +
            '    <link rel="stylesheet" href="https://unpkg.com/mvp.css">\n' +
            '    <style>\n' +
            '        body {\n' +
            '            margin: auto;\n' +
            '            padding: 20px;\n' +
            '        }\n' +
            '\n' +
            '        hr {\n' +
            '            margin-top: 1rem;\n' +
            '            margin-bottom: 1rem;\n' +
            '        }\n' +
            '\n' +
            '        pre {\n' +
            '            max-width: 100vw;\n' +
            '        }\n' +
            '\n' +
            '        pre, code {\n' +
            '  white-space: pre-wrap; /* Wraps text while preserving whitespace */\n' +
            '  overflow-x: auto; /* Adds horizontal scrollbar if needed */\n' +
            '  word-wrap: break-word; /* Ensures long words break to fit */\n' +
            '  max-width: 100%; /* Restricts block to container width */\n' +
            '  box-sizing: border-box; /* Includes padding/borders in width */\n' +
            '}\n' +
            '    </style>\n' +
            '</head>\n' +
            '\n' +
            '<body>\n' +
            '\n' +
            '    {% set object = {\n' +
            '        a: 1,\n' +
            '        template: { big: "data", nested: { foo: "bar" } },\n' +
            '        b: { template: { x: 1 } },\n' +
            "        secret: '12345',\n" +
            "        hidden: 'should hide',\n" +
            "        visible: 'ok'\n" +
            '    } %}\n' +
            '\n' +
            '\n' +
            '\n' +
            '\n' +
            '\n' +
            '       <h1>{{title}}</h1>\n' +
            '\n' +
            '    <h2>Comparison with | dump</h2>\n' +
            '    <h3>Input using dump</h3>\n' +
            '    <p><code>{% raw %} {{ { a: "a", b: undefined } | dump }}{% endraw %}</code></p>\n' +
            '    <h3>Output</h3>\n' +
            '    {{ { a: "a", b: undefined } | dump }}\n' +
            '    <h3>Same input using jsonViewer</h3>\n' +
            '    <p><code>{% raw %} {{ { a: "a", b: undefined } | jsonViewer | safe }}{% endraw %}</code></p>\n' +
            '    <h3>Output</h3>\n' +
            '    {{ { a: "a", b: undefined } | jsonViewer | safe }}\n' +
            '    <hr />\n' +
            '\n' +
            '    <h2>String with title</h2>\n' +
            '    <h3>Input</h3>\n' +
            '    <p><code>{% raw %} {{ "value" | jsonViewer({ title: "string"}) | safe }}{% endraw %}</code></p>\n' +
            '    <h3>Output</h3>\n' +
            '    {{ "value" | jsonViewer({ title: "string"}) | safe }}\n' +
            '    <hr />\n' +
            '\n' +
            '    <h2>Number with title</h2>\n' +
            '    <h3>Input</h3>\n' +
            '    <p><code>{% raw %} {{ 123 | jsonViewer({ title: "number"}) | safe }}{% endraw %}</code></p>\n' +
            '    <h3>Output</h3>\n' +
            '    {{ 123 | jsonViewer({ title: "number"}) | safe }}\n' +
            '    <hr />\n' +
            '\n' +
            '    <h2>Array with title</h2>\n' +
            '    <h3>Input</h3>\n' +
            '    <p><code>{% raw %} {{ ["string 1", "string 2", 3, 4 , {a:"a"} ] | jsonViewer({title: "array"}) | safe }}{% endraw %}</code></p>\n' +
            '    <h3>Output</h3>\n' +
            '    {{ ["string 1", "string 2", 3, 4 , {a:"a"} ] | jsonViewer({title: "array"}) | safe }}\n' +
            '    <hr />\n' +
            '\n' +
            '\n' +
            '    <h2>Object</h2>\n' +
            '    <h3>Input</h3>\n' +
            '    <code><pre>{% raw %}\n' +
            '{% set object = {\n' +
            '    a: 1,\n' +
            '    nested: { big: "data", nested: { foo: "bar" } },\n' +
            '    b: { nested: { x: 1 } },\n' +
            "    secret: '12345',\n" +
            "    hidden: 'should hide',\n" +
            "    visible: 'ok'\n" +
            '} %}\n' +
            '       \n' +
            '{{ object | jsonViewer({ title: "object" }) | safe }}\n' +
            '    {% endraw %}</pre></code>\n' +
            '    <h3>Output</h3>\n' +
            '    {% set object = {\n' +
            '    a: 1,\n' +
            '    nested: { big: "data", nested: { foo: "bar" } },\n' +
            '    b: { nested: { x: 1 } },\n' +
            "    secret: '12345',\n" +
            "    hidden: 'should hide',\n" +
            "    visible: 'ok'\n" +
            '} %}\n' +
            '       \n' +
            '{{ object | jsonViewer({ title: "object" }) | safe }}\n' +
            '    <hr />\n' +
            '\n' +
            '\n' +
            '        <h2>Object with automatic template key removal</h2>\n' +
            '    <h3>Input</h3>\n' +
            '    <code><pre>{% raw %}\n' +
            '{% set object = {\n' +
            '    a: 1,\n' +
            '    template: { big: "data", nested: { foo: "bar" } },\n' +
            '    b: { template: { x: 1 } },\n' +
            "    secret: '12345',\n" +
            "    hidden: 'should hide',\n" +
            "    visible: 'ok'\n" +
            '} %}\n' +
            '       \n' +
            '{{ object | jsonViewer({ title: "Object with automatic template key removal" }) | safe }}\n' +
            '    {% endraw %}</pre></code>\n' +
            '    <h3>Output</h3>\n' +
            '    {% set object = {\n' +
            '    a: 1,\n' +
            '    template: { big: "data", nested: { foo: "bar" } },\n' +
            '    b: { template: { x: 1 } },\n' +
            "    secret: '12345',\n" +
            "    hidden: 'should hide',\n" +
            "    visible: 'ok'\n" +
            '} %}\n' +
            '       \n' +
            '{{ object | jsonViewer({ title: "Object with automatic template key removal" }) | safe }}\n' +
            '    <hr />\n' +
            '\n' +
            '\n' +
            '    <h2>Object showing template key</h2>\n' +
            '    <h3>Input</h3>\n' +
            '    <code><pre>{% raw %}\n' +
            '{% set object = {\n' +
            '    a: 1,\n' +
            '    template: { big: "data", nested: { foo: "bar" } },\n' +
            '    b: { template: { x: 1 } },\n' +
            "    secret: '12345',\n" +
            "    hidden: 'should hide',\n" +
            "    visible: 'ok'\n" +
            '} %}\n' +
            '       \n' +
            '{{ object | jsonViewer({ \n' +
            '    title: "Object showing template key",\n' +
            '    showTemplate: true\n' +
            '}) | safe }}\n' +
            '    {% endraw %}</pre></code>\n' +
            '    <h3>Output</h3>\n' +
            '    {% set object = {\n' +
            '    a: 1,\n' +
            '    template: { big: "data", nested: { foo: "bar" } },\n' +
            '    b: { template: { x: 1 } },\n' +
            "    secret: '12345',\n" +
            "    hidden: 'should hide',\n" +
            "    visible: 'ok'\n" +
            '} %}\n' +
            '       \n' +
            '{{ object | jsonViewer({ title: "Object showing template key", showTemplate: true }) | safe }}\n' +
            '    <hr />\n' +
            '\n' +
            '\n' +
            '\n' +
            '    <h2>Object with Key Replacement</h2>\n' +
            '    <h3>Input</h3>\n' +
            '    <code><pre>{% raw %}\n' +
            '{% set object = {\n' +
            '    a: 1,\n' +
            '    template: { big: "data", nested: { foo: "bar" } },\n' +
            '    b: { template: { x: 1 } },\n' +
            "    secret: '12345',\n" +
            "    hidden: 'should hide',\n" +
            "    visible: 'ok'\n" +
            '} %}\n' +
            '       \n' +
            '{{ object | jsonViewer({ \n' +
            '    title: "object",  \n' +
            '    removeKeys: [ \n' +
            "        { keyName: 'template', replaceString: 'Customised Template message' },\n" +
            "        { keyName: 'secret', replaceString: '***hidden***' },\n" +
            "        'hidden'\n" +
            '    ] \n' +
            '}) | safe }}\n' +
            '    {% endraw %}</pre></code>\n' +
            '    <h3>Output</h3>\n' +
            '    {% set object = {\n' +
            '    a: 1,\n' +
            '    template: { big: "data", nested: { foo: "bar" } },\n' +
            '    b: { template: { x: 1 } },\n' +
            "    secret: '12345',\n" +
            "    hidden: 'should hide',\n" +
            "    visible: 'ok'\n" +
            '} %}\n' +
            '       \n' +
            '{{ object | jsonViewer({ \n' +
            '    title: "object",  \n' +
            '    removeKeys: [ \n' +
            "        'template',\n" +
            "        { keyName: 'secret', replaceString: '***hidden***' },\n" +
            "        'hidden'\n" +
            '    ] \n' +
            '}) | safe }}\n' +
            '    <hr />\n' +
            '\n' +
            '    <h2>Complex Object with all options</h2>\n' +
            '    <h3>Input</h3>\n' +
            '    <p><code>{% raw %}\n' +
            '{{ collections.all[0] | jsonViewer({\n' +
            '    title: "collections.all[0]",\n' +
            '    showTypes: false,\n' +
            '    defaultExpanded: false,\n' +
            '    pathsOnHover: false,\n' +
            '    showControls: true,\n' +
            '    removeKeys: [{\n' +
            "        keyName: 'template',\n" +
            "        replaceString: 'Removed for performance reasons'\n" +
            '      }]\n' +
            '}) | safe }}\n' +
            '{% endraw %}</code></p>\n' +
            '    <h3>Output</h3>\n' +
            '    {{ collections.all[0] | jsonViewer({\n' +
            '        title: "collections.all[0]",\n' +
            '        showTypes: false,\n' +
            '        defaultExpanded: false,\n' +
            '        pathsOnHover: false,\n' +
            '        showControls: true,\n' +
            '        removeKeys: [{\n' +
            "            keyName: 'template',\n" +
            "            replaceString: 'Removed for performance reasons'\n" +
            '          }]\n' +
            '\n' +
            '    }) | safe }}\n' +
            '    <hr />\n' +
            '\n' +
            '\n' +
            '\n' +
            '    <h2>Complex Object using consolePlus (for comparison)</h2>\n' +
            '    <h3>Input</h3>\n' +
            '    <p><code>{% raw %} {% console collections.all[0] %}{% endraw %}</code></p>\n' +
            '    <h3>Output</h3>\n' +
            '    {% console collections.all[0] %}\n' +
            '    <hr />\n' +
            '\n' +
            '\n' +
            '    <h2>Debugging remove keys</h2>\n' +
            '    {{ object | jsonViewer({ \n' +
            '        title: "object"\n' +
            '    }) | safe }}\n' +
            '\n' +
            '    {{ object | jsonViewer({ \n' +
            '        title: "object",  \n' +
            '        removeKeys: [ \n' +
            "            'template'\n" +
            '        ] \n' +
            '    }) | safe }}\n' +
            '\n' +
            '    {{ object | jsonViewer({ \n' +
            '        title: "object",  \n' +
            '        removeKeys: [ \n' +
            "           { 'template': 'Removed for performance reasons Yippie' }\n" +
            '        ] \n' +
            '    }) | safe }}\n' +
            '</body>\n' +
            '\n' +
            '</html>',
          url: '/',
          outputPath: './dist/index.html'
        },
        collections: <ref *2> {
          all: [
            [Circular *1],
            {
              template: Template {
                inputPath: './src/posts/ai-ethics.md',
                parsed: {
                  root: '',
                  dir: './src/posts',
                  base: 'ai-ethics.md',
                  ext: '.md',
                  name: 'ai-ethics'
                },
                extraOutputSubdirectory: '',
                templateData: TemplateData {
                  templateConfig: [TemplateConfig],
                  config: [Object],
                  benchmarks: [Object],
                  rawImports: [Object],
                  globalData: [Promise],
                  templateDirectoryData: [Object],
                  isEsm: true,
                  initialGlobalData: [TemplateDataInitialGlobalData],
                  _extensionMap: [EleventyExtensionMap],
                  _env: [Object],
                  fileSystemSearch: [FileSystemSearch],
                  configApiGlobalData: [Promise],
                  pathCache: []
                },
                fileSlug: TemplateFileSlug {
                  inputPath: 'posts/ai-ethics.md',
                  cleanInputPath: 'posts/ai-ethics.md',
                  dirs: [Array],
                  parsed: [Object],
                  filenameNoExt: 'ai-ethics'
                },
                fileSlugStr: 'ai-ethics',
                filePathStem: '/posts/ai-ethics',
                linters: [],
                transforms: {
                  '@11ty/eleventy-bundle': [Function: fn],
                  '@11ty/eleventy/html-transformer': [Function: fn],
                  '@11ty/eleventy-bundle/delayed': [Function: fn]
                },
                isVerbose: true,
                isDryRun: false,
                writeCount: 0,
                outputFormat: 'fs',
                behavior: TemplateBehavior {
                  render: true,
                  write: true,
                  outputFormat: 'fs',
                  config: [Object],
                  renderableOverride: undefined
                },
                renderCount: 0,
                _dataCache: Promise { [Object] },
                inputContent: Promise {
                  '---\n' +
                    'title: AI Ethics\n' +
                    '---\n' +
                    '\n' +
                    'AI ethics is a crucial field that addresses the moral implications and societal impact of artificial intelligence. It encompasses issues like bias in AI systems, privacy concerns, job displacement, and the development of responsible AI. As AI becomes more integrated into our daily lives, ethical considerations become increasingly important to ensure these technologies benefit humanity while minimizing potential harms. This field requires collaboration between technologists, ethicists, policymakers, and the public to create frameworks for responsible AI development and deployment. '
                },
                readingPromise: Promise { [Object] },
                _frontMatterDataCache: Promise { [Object] },
                _stats: Promise { [Stats] },
                _usePermalinkRoot: undefined
              },
              rawInput: '\n' +
                'AI ethics is a crucial field that addresses the moral implications and societal impact of artificial intelligence. It encompasses issues like bias in AI systems, privacy concerns, job displacement, and the development of responsible AI. As AI becomes more integrated into our daily lives, ethical considerations become increasingly important to ensure these technologies benefit humanity while minimizing potential harms. This field requires collaboration between technologists, ethicists, policymakers, and the public to create frameworks for responsible AI development and deployment. ',
              groupNumber: 0,
              data: {
                eleventy: {
                  version: '3.1.1',
                  generator: 'Eleventy v3.1.1',
                  env: [Object],
                  directories: [Object]
                },
                pkg: {
                  name: 'stringify-and-view',
                  version: '0.0.1',
                  main: 'app/index.js',
                  license: 'MIT',
                  author: 'dazza',
                  type: 'module',
                  scripts: [Object],
                  dependencies: [Object],
                  devDependencies: [Object]
                },
                title: 'AI Ethics',
                page: {
                  inputPath: './src/posts/ai-ethics.md',
                  fileSlug: 'ai-ethics',
                  filePathStem: '/posts/ai-ethics',
                  outputFileExtension: 'html',
                  templateSyntax: 'liquid,md',
                  date: 2025-07-17T13:59:35.706Z,
                  rawInput: '\n' +
                    'AI ethics is a crucial field that addresses the moral implications and societal impact of artificial intelligence. It encompasses issues like bias in AI systems, privacy concerns, job displacement, and the development of responsible AI. As AI becomes more integrated into our daily lives, ethical considerations become increasingly important to ensure these technologies benefit humanity while minimizing potential harms. This field requires collaboration between technologists, ethicists, policymakers, and the public to create frameworks for responsible AI development and deployment. ',
                  url: '/posts/ai-ethics/',
                  outputPath: './dist/posts/ai-ethics/index.html'
                },
                collections: [Circular *2]
              },
              page: {
                inputPath: './src/posts/ai-ethics.md',
                fileSlug: 'ai-ethics',
                filePathStem: '/posts/ai-ethics',
                outputFileExtension: 'html',
                templateSyntax: 'liquid,md',
                date: 2025-07-17T13:59:35.706Z,
                rawInput: '\n' +
                  'AI ethics is a crucial field that addresses the moral implications and societal impact of artificial intelligence. It encompasses issues like bias in AI systems, privacy concerns, job displacement, and the development of responsible AI. As AI becomes more integrated into our daily lives, ethical considerations become increasingly important to ensure these technologies benefit humanity while minimizing potential harms. This field requires collaboration between technologists, ethicists, policymakers, and the public to create frameworks for responsible AI development and deployment. ',
                url: '/posts/ai-ethics/',
                outputPath: './dist/posts/ai-ethics/index.html'
              },
              inputPath: './src/posts/ai-ethics.md',
              fileSlug: 'ai-ethics',
              filePathStem: '/posts/ai-ethics',
              date: 2025-07-17T13:59:35.706Z,
              outputPath: './dist/posts/ai-ethics/index.html',
              url: '/posts/ai-ethics/',
              templateContent: [Getter/Setter],
              content: [Getter/Setter]
            },
            {
              template: Template {
                inputPath: './src/posts/computer-vision.md',
                parsed: {
                  root: '',
                  dir: './src/posts',
                  base: 'computer-vision.md',
                  ext: '.md',
                  name: 'computer-vision'
                },
                extraOutputSubdirectory: '',
                templateData: TemplateData {
                  templateConfig: [TemplateConfig],
                  config: [Object],
                  benchmarks: [Object],
                  rawImports: [Object],
                  globalData: [Promise],
                  templateDirectoryData: [Object],
                  isEsm: true,
                  initialGlobalData: [TemplateDataInitialGlobalData],
                  _extensionMap: [EleventyExtensionMap],
                  _env: [Object],
                  fileSystemSearch: [FileSystemSearch],
                  configApiGlobalData: [Promise],
                  pathCache: []
                },
                fileSlug: TemplateFileSlug {
                  inputPath: 'posts/computer-vision.md',
                  cleanInputPath: 'posts/computer-vision.md',
                  dirs: [Array],
                  parsed: [Object],
                  filenameNoExt: 'computer-vision'
                },
                fileSlugStr: 'computer-vision',
                filePathStem: '/posts/computer-vision',
                linters: [],
                transforms: {
                  '@11ty/eleventy-bundle': [Function: fn],
                  '@11ty/eleventy/html-transformer': [Function: fn],
                  '@11ty/eleventy-bundle/delayed': [Function: fn]
                },
                isVerbose: true,
                isDryRun: false,
                writeCount: 0,
                outputFormat: 'fs',
                behavior: TemplateBehavior {
                  render: true,
                  write: true,
                  outputFormat: 'fs',
                  config: [Object],
                  renderableOverride: undefined
                },
                renderCount: 0,
                _dataCache: Promise { [Object] },
                inputContent: Promise {
                  '---\n' +
                    'title: Computer Vision\n' +
                    '---\n' +
                    '\n' +
                    'Computer vision is a field of AI that enables computers to interpret and understand visual information from the world. Using deep learning and image processing techniques, computer vision systems can identify objects, recognize faces, track movement, and even understand scenes in images and videos. This technology is crucial for applications like autonomous vehicles, medical image analysis, and augmented reality, transforming how machines interact with the visual world. '
                },
                readingPromise: Promise { [Object] },
                _frontMatterDataCache: Promise { [Object] },
                _stats: Promise { [Stats] },
                _usePermalinkRoot: undefined
              },
              rawInput: '\n' +
                'Computer vision is a field of AI that enables computers to interpret and understand visual information from the world. Using deep learning and image processing techniques, computer vision systems can identify objects, recognize faces, track movement, and even understand scenes in images and videos. This technology is crucial for applications like autonomous vehicles, medical image analysis, and augmented reality, transforming how machines interact with the visual world. ',
              groupNumber: 0,
              data: {
                eleventy: {
                  version: '3.1.1',
                  generator: 'Eleventy v3.1.1',
                  env: [Object],
                  directories: [Object]
                },
                pkg: {
                  name: 'stringify-and-view',
                  version: '0.0.1',
                  main: 'app/index.js',
                  license: 'MIT',
                  author: 'dazza',
                  type: 'module',
                  scripts: [Object],
                  dependencies: [Object],
                  devDependencies: [Object]
                },
                title: 'Computer Vision',
                page: {
                  inputPath: './src/posts/computer-vision.md',
                  fileSlug: 'computer-vision',
                  filePathStem: '/posts/computer-vision',
                  outputFileExtension: 'html',
                  templateSyntax: 'liquid,md',
                  date: 2025-07-17T13:59:35.706Z,
                  rawInput: '\n' +
                    'Computer vision is a field of AI that enables computers to interpret and understand visual information from the world. Using deep learning and image processing techniques, computer vision systems can identify objects, recognize faces, track movement, and even understand scenes in images and videos. This technology is crucial for applications like autonomous vehicles, medical image analysis, and augmented reality, transforming how machines interact with the visual world. ',
                  url: '/posts/computer-vision/',
                  outputPath: './dist/posts/computer-vision/index.html'
                },
                collections: [Circular *2]
              },
              page: {
                inputPath: './src/posts/computer-vision.md',
                fileSlug: 'computer-vision',
                filePathStem: '/posts/computer-vision',
                outputFileExtension: 'html',
                templateSyntax: 'liquid,md',
                date: 2025-07-17T13:59:35.706Z,
                rawInput: '\n' +
                  'Computer vision is a field of AI that enables computers to interpret and understand visual information from the world. Using deep learning and image processing techniques, computer vision systems can identify objects, recognize faces, track movement, and even understand scenes in images and videos. This technology is crucial for applications like autonomous vehicles, medical image analysis, and augmented reality, transforming how machines interact with the visual world. ',
                url: '/posts/computer-vision/',
                outputPath: './dist/posts/computer-vision/index.html'
              },
              inputPath: './src/posts/computer-vision.md',
              fileSlug: 'computer-vision',
              filePathStem: '/posts/computer-vision',
              date: 2025-07-17T13:59:35.706Z,
              outputPath: './dist/posts/computer-vision/index.html',
              url: '/posts/computer-vision/',
              templateContent: [Getter/Setter],
              content: [Getter/Setter]
            },
            {
              template: Template {
                inputPath: './src/posts/machine-learning-basics.md',
                parsed: {
                  root: '',
                  dir: './src/posts',
                  base: 'machine-learning-basics.md',
                  ext: '.md',
                  name: 'machine-learning-basics'
                },
                extraOutputSubdirectory: '',
                templateData: TemplateData {
                  templateConfig: [TemplateConfig],
                  config: [Object],
                  benchmarks: [Object],
                  rawImports: [Object],
                  globalData: [Promise],
                  templateDirectoryData: [Object],
                  isEsm: true,
                  initialGlobalData: [TemplateDataInitialGlobalData],
                  _extensionMap: [EleventyExtensionMap],
                  _env: [Object],
                  fileSystemSearch: [FileSystemSearch],
                  configApiGlobalData: [Promise],
                  pathCache: []
                },
                fileSlug: TemplateFileSlug {
                  inputPath: 'posts/machine-learning-basics.md',
                  cleanInputPath: 'posts/machine-learning-basics.md',
                  dirs: [Array],
                  parsed: [Object],
                  filenameNoExt: 'machine-learning-basics'
                },
                fileSlugStr: 'machine-learning-basics',
                filePathStem: '/posts/machine-learning-basics',
                linters: [],
                transforms: {
                  '@11ty/eleventy-bundle': [Function: fn],
                  '@11ty/eleventy/html-transformer': [Function: fn],
                  '@11ty/eleventy-bundle/delayed': [Function: fn]
                },
                isVerbose: true,
                isDryRun: false,
                writeCount: 0,
                outputFormat: 'fs',
                behavior: TemplateBehavior {
                  render: true,
                  write: true,
                  outputFormat: 'fs',
                  config: [Object],
                  renderableOverride: undefined
                },
                renderCount: 0,
                _dataCache: Promise { [Object] },
                inputContent: Promise {
                  '---\n' +
                    'title: Machine Learning Basics\n' +
                    '---\n' +
                    '\n' +
                    'Machine learning is a subset of artificial intelligence that focuses on developing systems that can learn from and make decisions based on data. At its core, it involves training algorithms to recognize patterns in data and make predictions or decisions without being explicitly programmed to perform the task. This technology powers everything from recommendation systems to autonomous vehicles, making it one of the most transformative technologies of our time. '
                },
                readingPromise: Promise { [Object] },
                _frontMatterDataCache: Promise { [Object] },
                _stats: Promise { [Stats] },
                _usePermalinkRoot: undefined
              },
              rawInput: '\n' +
                'Machine learning is a subset of artificial intelligence that focuses on developing systems that can learn from and make decisions based on data. At its core, it involves training algorithms to recognize patterns in data and make predictions or decisions without being explicitly programmed to perform the task. This technology powers everything from recommendation systems to autonomous vehicles, making it one of the most transformative technologies of our time. ',
              groupNumber: 0,
              data: {
                eleventy: {
                  version: '3.1.1',
                  generator: 'Eleventy v3.1.1',
                  env: [Object],
                  directories: [Object]
                },
                pkg: {
                  name: 'stringify-and-view',
                  version: '0.0.1',
                  main: 'app/index.js',
                  license: 'MIT',
                  author: 'dazza',
                  type: 'module',
                  scripts: [Object],
                  dependencies: [Object],
                  devDependencies: [Object]
                },
                title: 'Machine Learning Basics',
                page: {
                  inputPath: './src/posts/machine-learning-basics.md',
                  fileSlug: 'machine-learning-basics',
                  filePathStem: '/posts/machine-learning-basics',
                  outputFileExtension: 'html',
                  templateSyntax: 'liquid,md',
                  date: 2025-07-17T13:59:35.706Z,
                  rawInput: '\n' +
                    'Machine learning is a subset of artificial intelligence that focuses on developing systems that can learn from and make decisions based on data. At its core, it involves training algorithms to recognize patterns in data and make predictions or decisions without being explicitly programmed to perform the task. This technology powers everything from recommendation systems to autonomous vehicles, making it one of the most transformative technologies of our time. ',
                  url: '/posts/machine-learning-basics/',
                  outputPath: './dist/posts/machine-learning-basics/index.html'
                },
                collections: [Circular *2]
              },
              page: {
                inputPath: './src/posts/machine-learning-basics.md',
                fileSlug: 'machine-learning-basics',
                filePathStem: '/posts/machine-learning-basics',
                outputFileExtension: 'html',
                templateSyntax: 'liquid,md',
                date: 2025-07-17T13:59:35.706Z,
                rawInput: '\n' +
                  'Machine learning is a subset of artificial intelligence that focuses on developing systems that can learn from and make decisions based on data. At its core, it involves training algorithms to recognize patterns in data and make predictions or decisions without being explicitly programmed to perform the task. This technology powers everything from recommendation systems to autonomous vehicles, making it one of the most transformative technologies of our time. ',
                url: '/posts/machine-learning-basics/',
                outputPath: './dist/posts/machine-learning-basics/index.html'
              },
              inputPath: './src/posts/machine-learning-basics.md',
              fileSlug: 'machine-learning-basics',
              filePathStem: '/posts/machine-learning-basics',
              date: 2025-07-17T13:59:35.706Z,
              outputPath: './dist/posts/machine-learning-basics/index.html',
              url: '/posts/machine-learning-basics/',
              templateContent: [Getter/Setter],
              content: [Getter/Setter]
            },
            {
              template: Template {
                inputPath: './src/posts/natural-language-processing.md',
                parsed: {
                  root: '',
                  dir: './src/posts',
                  base: 'natural-language-processing.md',
                  ext: '.md',
                  name: 'natural-language-processing'
                },
                extraOutputSubdirectory: '',
                templateData: TemplateData {
                  templateConfig: [TemplateConfig],
                  config: [Object],
                  benchmarks: [Object],
                  rawImports: [Object],
                  globalData: [Promise],
                  templateDirectoryData: [Object],
                  isEsm: true,
                  initialGlobalData: [TemplateDataInitialGlobalData],
                  _extensionMap: [EleventyExtensionMap],
                  _env: [Object],
                  fileSystemSearch: [FileSystemSearch],
                  configApiGlobalData: [Promise],
                  pathCache: []
                },
                fileSlug: TemplateFileSlug {
                  inputPath: 'posts/natural-language-processing.md',
                  cleanInputPath: 'posts/natural-language-processing.md',
                  dirs: [Array],
                  parsed: [Object],
                  filenameNoExt: 'natural-language-processing'
                },
                fileSlugStr: 'natural-language-processing',
                filePathStem: '/posts/natural-language-processing',
                linters: [],
                transforms: {
                  '@11ty/eleventy-bundle': [Function: fn],
                  '@11ty/eleventy/html-transformer': [Function: fn],
                  '@11ty/eleventy-bundle/delayed': [Function: fn]
                },
                isVerbose: true,
                isDryRun: false,
                writeCount: 0,
                outputFormat: 'fs',
                behavior: TemplateBehavior {
                  render: true,
                  write: true,
                  outputFormat: 'fs',
                  config: [Object],
                  renderableOverride: undefined
                },
                renderCount: 0,
                _dataCache: Promise { [Object] },
                inputContent: Promise {
                  '---\n' +
                    'title: Natural Language Processing\n' +
                    '---\n' +
                    '\n' +
                    'Natural Language Processing (NLP) is a branch of AI that focuses on the interaction between computers and human language. It enables machines to read, understand, and derive meaning from human languages. Modern NLP systems can perform tasks like translation, sentiment analysis, and text generation with remarkable accuracy. The development of transformer models like GPT and BERT has revolutionized the field, making it possible to create more sophisticated and context-aware language applications. '
                },
                readingPromise: Promise { [Object] },
                _frontMatterDataCache: Promise { [Object] },
                _stats: Promise { [Stats] },
                _usePermalinkRoot: undefined
              },
              rawInput: '\n' +
                'Natural Language Processing (NLP) is a branch of AI that focuses on the interaction between computers and human language. It enables machines to read, understand, and derive meaning from human languages. Modern NLP systems can perform tasks like translation, sentiment analysis, and text generation with remarkable accuracy. The development of transformer models like GPT and BERT has revolutionized the field, making it possible to create more sophisticated and context-aware language applications. ',
              groupNumber: 0,
              data: {
                eleventy: {
                  version: '3.1.1',
                  generator: 'Eleventy v3.1.1',
                  env: [Object],
                  directories: [Object]
                },
                pkg: {
                  name: 'stringify-and-view',
                  version: '0.0.1',
                  main: 'app/index.js',
                  license: 'MIT',
                  author: 'dazza',
                  type: 'module',
                  scripts: [Object],
                  dependencies: [Object],
                  devDependencies: [Object]
                },
                title: 'Natural Language Processing',
                page: {
                  inputPath: './src/posts/natural-language-processing.md',
                  fileSlug: 'natural-language-processing',
                  filePathStem: '/posts/natural-language-processing',
                  outputFileExtension: 'html',
                  templateSyntax: 'liquid,md',
                  date: 2025-07-17T13:59:35.706Z,
                  rawInput: '\n' +
                    'Natural Language Processing (NLP) is a branch of AI that focuses on the interaction between computers and human language. It enables machines to read, understand, and derive meaning from human languages. Modern NLP systems can perform tasks like translation, sentiment analysis, and text generation with remarkable accuracy. The development of transformer models like GPT and BERT has revolutionized the field, making it possible to create more sophisticated and context-aware language applications. ',
                  url: '/posts/natural-language-processing/',
                  outputPath: './dist/posts/natural-language-processing/index.html'
                },
                collections: [Circular *2]
              },
              page: {
                inputPath: './src/posts/natural-language-processing.md',
                fileSlug: 'natural-language-processing',
                filePathStem: '/posts/natural-language-processing',
                outputFileExtension: 'html',
                templateSyntax: 'liquid,md',
                date: 2025-07-17T13:59:35.706Z,
                rawInput: '\n' +
                  'Natural Language Processing (NLP) is a branch of AI that focuses on the interaction between computers and human language. It enables machines to read, understand, and derive meaning from human languages. Modern NLP systems can perform tasks like translation, sentiment analysis, and text generation with remarkable accuracy. The development of transformer models like GPT and BERT has revolutionized the field, making it possible to create more sophisticated and context-aware language applications. ',
                url: '/posts/natural-language-processing/',
                outputPath: './dist/posts/natural-language-processing/index.html'
              },
              inputPath: './src/posts/natural-language-processing.md',
              fileSlug: 'natural-language-processing',
              filePathStem: '/posts/natural-language-processing',
              date: 2025-07-17T13:59:35.706Z,
              outputPath: './dist/posts/natural-language-processing/index.html',
              url: '/posts/natural-language-processing/',
              templateContent: [Getter/Setter],
              content: [Getter/Setter]
            },
            {
              template: Template {
                inputPath: './src/posts/neural-networks.md',
                parsed: {
                  root: '',
                  dir: './src/posts',
                  base: 'neural-networks.md',
                  ext: '.md',
                  name: 'neural-networks'
                },
                extraOutputSubdirectory: '',
                templateData: TemplateData {
                  templateConfig: [TemplateConfig],
                  config: [Object],
                  benchmarks: [Object],
                  rawImports: [Object],
                  globalData: [Promise],
                  templateDirectoryData: [Object],
                  isEsm: true,
                  initialGlobalData: [TemplateDataInitialGlobalData],
                  _extensionMap: [EleventyExtensionMap],
                  _env: [Object],
                  fileSystemSearch: [FileSystemSearch],
                  configApiGlobalData: [Promise],
                  pathCache: []
                },
                fileSlug: TemplateFileSlug {
                  inputPath: 'posts/neural-networks.md',
                  cleanInputPath: 'posts/neural-networks.md',
                  dirs: [Array],
                  parsed: [Object],
                  filenameNoExt: 'neural-networks'
                },
                fileSlugStr: 'neural-networks',
                filePathStem: '/posts/neural-networks',
                linters: [],
                transforms: {
                  '@11ty/eleventy-bundle': [Function: fn],
                  '@11ty/eleventy/html-transformer': [Function: fn],
                  '@11ty/eleventy-bundle/delayed': [Function: fn]
                },
                isVerbose: true,
                isDryRun: false,
                writeCount: 0,
                outputFormat: 'fs',
                behavior: TemplateBehavior {
                  render: true,
                  write: true,
                  outputFormat: 'fs',
                  config: [Object],
                  renderableOverride: undefined
                },
                renderCount: 0,
                _dataCache: Promise { [Object] },
                inputContent: Promise {
                  '---\n' +
                    'title: Neural Networks\n' +
                    '---\n' +
                    '\n' +
                    "Neural networks are computing systems inspired by the human brain's biological neural networks. They consist of layers of interconnected nodes (neurons) that process and transmit information. These networks excel at tasks like image recognition, natural language processing, and complex pattern recognition. The recent advances in deep learning have made neural networks more powerful than ever, enabling breakthroughs in AI applications across various industries. "
                },
                readingPromise: Promise { [Object] },
                _frontMatterDataCache: Promise { [Object] },
                _stats: Promise { [Stats] },
                _usePermalinkRoot: undefined
              },
              rawInput: '\n' +
                "Neural networks are computing systems inspired by the human brain's biological neural networks. They consist of layers of interconnected nodes (neurons) that process and transmit information. These networks excel at tasks like image recognition, natural language processing, and complex pattern recognition. The recent advances in deep learning have made neural networks more powerful than ever, enabling breakthroughs in AI applications across various industries. ",
              groupNumber: 0,
              data: {
                eleventy: {
                  version: '3.1.1',
                  generator: 'Eleventy v3.1.1',
                  env: [Object],
                  directories: [Object]
                },
                pkg: {
                  name: 'stringify-and-view',
                  version: '0.0.1',
                  main: 'app/index.js',
                  license: 'MIT',
                  author: 'dazza',
                  type: 'module',
                  scripts: [Object],
                  dependencies: [Object],
                  devDependencies: [Object]
                },
                title: 'Neural Networks',
                page: {
                  inputPath: './src/posts/neural-networks.md',
                  fileSlug: 'neural-networks',
                  filePathStem: '/posts/neural-networks',
                  outputFileExtension: 'html',
                  templateSyntax: 'liquid,md',
                  date: 2025-07-17T13:59:35.706Z,
                  rawInput: '\n' +
                    "Neural networks are computing systems inspired by the human brain's biological neural networks. They consist of layers of interconnected nodes (neurons) that process and transmit information. These networks excel at tasks like image recognition, natural language processing, and complex pattern recognition. The recent advances in deep learning have made neural networks more powerful than ever, enabling breakthroughs in AI applications across various industries. ",
                  url: '/posts/neural-networks/',
                  outputPath: './dist/posts/neural-networks/index.html'
                },
                collections: [Circular *2]
              },
              page: {
                inputPath: './src/posts/neural-networks.md',
                fileSlug: 'neural-networks',
                filePathStem: '/posts/neural-networks',
                outputFileExtension: 'html',
                templateSyntax: 'liquid,md',
                date: 2025-07-17T13:59:35.706Z,
                rawInput: '\n' +
                  "Neural networks are computing systems inspired by the human brain's biological neural networks. They consist of layers of interconnected nodes (neurons) that process and transmit information. These networks excel at tasks like image recognition, natural language processing, and complex pattern recognition. The recent advances in deep learning have made neural networks more powerful than ever, enabling breakthroughs in AI applications across various industries. ",
                url: '/posts/neural-networks/',
                outputPath: './dist/posts/neural-networks/index.html'
              },
              inputPath: './src/posts/neural-networks.md',
              fileSlug: 'neural-networks',
              filePathStem: '/posts/neural-networks',
              date: 2025-07-17T13:59:35.706Z,
              outputPath: './dist/posts/neural-networks/index.html',
              url: '/posts/neural-networks/',
              templateContent: [Getter/Setter],
              content: [Getter/Setter]
            }
          ]
        }
      }
    },
    inputContent: Promise {
      '---\n' +
        'title: "JSON Viewer"\n' +
        '---\n' +
        '<!DOCTYPE html>\n' +
        '<html lang="en">\n' +
        '\n' +
        '<head>\n' +
        '    <meta charset="UTF-8">\n' +
        '    <meta name="viewport" content="width=device-width, initial-scale=1.0">\n' +
        '    <title>{{title}}</title>\n' +
        '    <link rel="stylesheet" href="https://unpkg.com/mvp.css">\n' +
        '    <style>\n' +
        '        body {\n' +
        '            margin: auto;\n' +
        '            padding: 20px;\n' +
        '        }\n' +
        '\n' +
        '        hr {\n' +
        '            margin-top: 1rem;\n' +
        '            margin-bottom: 1rem;\n' +
        '        }\n' +
        '\n' +
        '        pre {\n' +
        '            max-width: 100vw;\n' +
        '        }\n' +
        '\n' +
        '        pre, code {\n' +
        '  white-space: pre-wrap; /* Wraps text while preserving whitespace */\n' +
        '  overflow-x: auto; /* Adds horizontal scrollbar if needed */\n' +
        '  word-wrap: break-word; /* Ensures long words break to fit */\n' +
        '  max-width: 100%; /* Restricts block to container width */\n' +
        '  box-sizing: border-box; /* Includes padding/borders in width */\n' +
        '}\n' +
        '    </style>\n' +
        '</head>\n' +
        '\n' +
        '<body>\n' +
        '\n' +
        '    {% set object = {\n' +
        '        a: 1,\n' +
        '        template: { big: "data", nested: { foo: "bar" } },\n' +
        '        b: { template: { x: 1 } },\n' +
        "        secret: '12345',\n" +
        "        hidden: 'should hide',\n" +
        "        visible: 'ok'\n" +
        '    } %}\n' +
        '\n' +
        '\n' +
        '\n' +
        '\n' +
        '\n' +
        '       <h1>{{title}}</h1>\n' +
        '\n' +
        '    <h2>Comparison with | dump</h2>\n' +
        '    <h3>Input using dump</h3>\n' +
        '    <p><code>{% raw %} {{ { a: "a", b: undefined } | dump }}{% endraw %}</code></p>\n' +
        '    <h3>Output</h3>\n' +
        '    {{ { a: "a", b: undefined } | dump }}\n' +
        '    <h3>Same input using jsonViewer</h3>\n' +
        '    <p><code>{% raw %} {{ { a: "a", b: undefined } | jsonViewer | safe }}{% endraw %}</code></p>\n' +
        '    <h3>Output</h3>\n' +
        '    {{ { a: "a", b: undefined } | jsonViewer | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '    <h2>String with title</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <p><code>{% raw %} {{ "value" | jsonViewer({ title: "string"}) | safe }}{% endraw %}</code></p>\n' +
        '    <h3>Output</h3>\n' +
        '    {{ "value" | jsonViewer({ title: "string"}) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '    <h2>Number with title</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <p><code>{% raw %} {{ 123 | jsonViewer({ title: "number"}) | safe }}{% endraw %}</code></p>\n' +
        '    <h3>Output</h3>\n' +
        '    {{ 123 | jsonViewer({ title: "number"}) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '    <h2>Array with title</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <p><code>{% raw %} {{ ["string 1", "string 2", 3, 4 , {a:"a"} ] | jsonViewer({title: "array"}) | safe }}{% endraw %}</code></p>\n' +
        '    <h3>Output</h3>\n' +
        '    {{ ["string 1", "string 2", 3, 4 , {a:"a"} ] | jsonViewer({title: "array"}) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '\n' +
        '    <h2>Object</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <code><pre>{% raw %}\n' +
        '{% set object = {\n' +
        '    a: 1,\n' +
        '    nested: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { nested: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ title: "object" }) | safe }}\n' +
        '    {% endraw %}</pre></code>\n' +
        '    <h3>Output</h3>\n' +
        '    {% set object = {\n' +
        '    a: 1,\n' +
        '    nested: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { nested: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ title: "object" }) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '\n' +
        '        <h2>Object with automatic template key removal</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <code><pre>{% raw %}\n' +
        '{% set object = {\n' +
        '    a: 1,\n' +
        '    template: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { template: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ title: "Object with automatic template key removal" }) | safe }}\n' +
        '    {% endraw %}</pre></code>\n' +
        '    <h3>Output</h3>\n' +
        '    {% set object = {\n' +
        '    a: 1,\n' +
        '    template: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { template: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ title: "Object with automatic template key removal" }) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '\n' +
        '    <h2>Object showing template key</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <code><pre>{% raw %}\n' +
        '{% set object = {\n' +
        '    a: 1,\n' +
        '    template: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { template: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ \n' +
        '    title: "Object showing template key",\n' +
        '    showTemplate: true\n' +
        '}) | safe }}\n' +
        '    {% endraw %}</pre></code>\n' +
        '    <h3>Output</h3>\n' +
        '    {% set object = {\n' +
        '    a: 1,\n' +
        '    template: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { template: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ title: "Object showing template key", showTemplate: true }) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '\n' +
        '\n' +
        '    <h2>Object with Key Replacement</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <code><pre>{% raw %}\n' +
        '{% set object = {\n' +
        '    a: 1,\n' +
        '    template: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { template: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ \n' +
        '    title: "object",  \n' +
        '    removeKeys: [ \n' +
        "        { keyName: 'template', replaceString: 'Customised Template message' },\n" +
        "        { keyName: 'secret', replaceString: '***hidden***' },\n" +
        "        'hidden'\n" +
        '    ] \n' +
        '}) | safe }}\n' +
        '    {% endraw %}</pre></code>\n' +
        '    <h3>Output</h3>\n' +
        '    {% set object = {\n' +
        '    a: 1,\n' +
        '    template: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { template: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ \n' +
        '    title: "object",  \n' +
        '    removeKeys: [ \n' +
        "        'template',\n" +
        "        { keyName: 'secret', replaceString: '***hidden***' },\n" +
        "        'hidden'\n" +
        '    ] \n' +
        '}) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '    <h2>Complex Object with all options</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <p><code>{% raw %}\n' +
        '{{ collections.all[0] | jsonViewer({\n' +
        '    title: "collections.all[0]",\n' +
        '    showTypes: false,\n' +
        '    defaultExpanded: false,\n' +
        '    pathsOnHover: false,\n' +
        '    showControls: true,\n' +
        '    removeKeys: [{\n' +
        "        keyName: 'template',\n" +
        "        replaceString: 'Removed for performance reasons'\n" +
        '      }]\n' +
        '}) | safe }}\n' +
        '{% endraw %}</code></p>\n' +
        '    <h3>Output</h3>\n' +
        '    {{ collections.all[0] | jsonViewer({\n' +
        '        title: "collections.all[0]",\n' +
        '        showTypes: false,\n' +
        '        defaultExpanded: false,\n' +
        '        pathsOnHover: false,\n' +
        '        showControls: true,\n' +
        '        removeKeys: [{\n' +
        "            keyName: 'template',\n" +
        "            replaceString: 'Removed for performance reasons'\n" +
        '          }]\n' +
        '\n' +
        '    }) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '\n' +
        '\n' +
        '    <h2>Complex Object using consolePlus (for comparison)</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <p><code>{% raw %} {% console collections.all[0] %}{% endraw %}</code></p>\n' +
        '    <h3>Output</h3>\n' +
        '    {% console collections.all[0] %}\n' +
        '    <hr />\n' +
        '\n' +
        '\n' +
        '    <h2>Debugging remove keys</h2>\n' +
        '    {{ object | jsonViewer({ \n' +
        '        title: "object"\n' +
        '    }) | safe }}\n' +
        '\n' +
        '    {{ object | jsonViewer({ \n' +
        '        title: "object",  \n' +
        '        removeKeys: [ \n' +
        "            'template'\n" +
        '        ] \n' +
        '    }) | safe }}\n' +
        '\n' +
        '    {{ object | jsonViewer({ \n' +
        '        title: "object",  \n' +
        '        removeKeys: [ \n' +
        "           { 'template': 'Removed for performance reasons Yippie' }\n" +
        '        ] \n' +
        '    }) | safe }}\n' +
        '</body>\n' +
        '\n' +
        '</html>'
    },
    readingPromise: Promise {
      {
        content: '<!DOCTYPE html>\n' +
          '<html lang="en">\n' +
          '\n' +
          '<head>\n' +
          '    <meta charset="UTF-8">\n' +
          '    <meta name="viewport" content="width=device-width, initial-scale=1.0">\n' +
          '    <title>{{title}}</title>\n' +
          '    <link rel="stylesheet" href="https://unpkg.com/mvp.css">\n' +
          '    <style>\n' +
          '        body {\n' +
          '            margin: auto;\n' +
          '            padding: 20px;\n' +
          '        }\n' +
          '\n' +
          '        hr {\n' +
          '            margin-top: 1rem;\n' +
          '            margin-bottom: 1rem;\n' +
          '        }\n' +
          '\n' +
          '        pre {\n' +
          '            max-width: 100vw;\n' +
          '        }\n' +
          '\n' +
          '        pre, code {\n' +
          '  white-space: pre-wrap; /* Wraps text while preserving whitespace */\n' +
          '  overflow-x: auto; /* Adds horizontal scrollbar if needed */\n' +
          '  word-wrap: break-word; /* Ensures long words break to fit */\n' +
          '  max-width: 100%; /* Restricts block to container width */\n' +
          '  box-sizing: border-box; /* Includes padding/borders in width */\n' +
          '}\n' +
          '    </style>\n' +
          '</head>\n' +
          '\n' +
          '<body>\n' +
          '\n' +
          '    {% set object = {\n' +
          '        a: 1,\n' +
          '        template: { big: "data", nested: { foo: "bar" } },\n' +
          '        b: { template: { x: 1 } },\n' +
          "        secret: '12345',\n" +
          "        hidden: 'should hide',\n" +
          "        visible: 'ok'\n" +
          '    } %}\n' +
          '\n' +
          '\n' +
          '\n' +
          '\n' +
          '\n' +
          '       <h1>{{title}}</h1>\n' +
          '\n' +
          '    <h2>Comparison with | dump</h2>\n' +
          '    <h3>Input using dump</h3>\n' +
          '    <p><code>{% raw %} {{ { a: "a", b: undefined } | dump }}{% endraw %}</code></p>\n' +
          '    <h3>Output</h3>\n' +
          '    {{ { a: "a", b: undefined } | dump }}\n' +
          '    <h3>Same input using jsonViewer</h3>\n' +
          '    <p><code>{% raw %} {{ { a: "a", b: undefined } | jsonViewer | safe }}{% endraw %}</code></p>\n' +
          '    <h3>Output</h3>\n' +
          '    {{ { a: "a", b: undefined } | jsonViewer | safe }}\n' +
          '    <hr />\n' +
          '\n' +
          '    <h2>String with title</h2>\n' +
          '    <h3>Input</h3>\n' +
          '    <p><code>{% raw %} {{ "value" | jsonViewer({ title: "string"}) | safe }}{% endraw %}</code></p>\n' +
          '    <h3>Output</h3>\n' +
          '    {{ "value" | jsonViewer({ title: "string"}) | safe }}\n' +
          '    <hr />\n' +
          '\n' +
          '    <h2>Number with title</h2>\n' +
          '    <h3>Input</h3>\n' +
          '    <p><code>{% raw %} {{ 123 | jsonViewer({ title: "number"}) | safe }}{% endraw %}</code></p>\n' +
          '    <h3>Output</h3>\n' +
          '    {{ 123 | jsonViewer({ title: "number"}) | safe }}\n' +
          '    <hr />\n' +
          '\n' +
          '    <h2>Array with title</h2>\n' +
          '    <h3>Input</h3>\n' +
          '    <p><code>{% raw %} {{ ["string 1", "string 2", 3, 4 , {a:"a"} ] | jsonViewer({title: "array"}) | safe }}{% endraw %}</code></p>\n' +
          '    <h3>Output</h3>\n' +
          '    {{ ["string 1", "string 2", 3, 4 , {a:"a"} ] | jsonViewer({title: "array"}) | safe }}\n' +
          '    <hr />\n' +
          '\n' +
          '\n' +
          '    <h2>Object</h2>\n' +
          '    <h3>Input</h3>\n' +
          '    <code><pre>{% raw %}\n' +
          '{% set object = {\n' +
          '    a: 1,\n' +
          '    nested: { big: "data", nested: { foo: "bar" } },\n' +
          '    b: { nested: { x: 1 } },\n' +
          "    secret: '12345',\n" +
          "    hidden: 'should hide',\n" +
          "    visible: 'ok'\n" +
          '} %}\n' +
          '       \n' +
          '{{ object | jsonViewer({ title: "object" }) | safe }}\n' +
          '    {% endraw %}</pre></code>\n' +
          '    <h3>Output</h3>\n' +
          '    {% set object = {\n' +
          '    a: 1,\n' +
          '    nested: { big: "data", nested: { foo: "bar" } },\n' +
          '    b: { nested: { x: 1 } },\n' +
          "    secret: '12345',\n" +
          "    hidden: 'should hide',\n" +
          "    visible: 'ok'\n" +
          '} %}\n' +
          '       \n' +
          '{{ object | jsonViewer({ title: "object" }) | safe }}\n' +
          '    <hr />\n' +
          '\n' +
          '\n' +
          '        <h2>Object with automatic template key removal</h2>\n' +
          '    <h3>Input</h3>\n' +
          '    <code><pre>{% raw %}\n' +
          '{% set object = {\n' +
          '    a: 1,\n' +
          '    template: { big: "data", nested: { foo: "bar" } },\n' +
          '    b: { template: { x: 1 } },\n' +
          "    secret: '12345',\n" +
          "    hidden: 'should hide',\n" +
          "    visible: 'ok'\n" +
          '} %}\n' +
          '       \n' +
          '{{ object | jsonViewer({ title: "Object with automatic template key removal" }) | safe }}\n' +
          '    {% endraw %}</pre></code>\n' +
          '    <h3>Output</h3>\n' +
          '    {% set object = {\n' +
          '    a: 1,\n' +
          '    template: { big: "data", nested: { foo: "bar" } },\n' +
          '    b: { template: { x: 1 } },\n' +
          "    secret: '12345',\n" +
          "    hidden: 'should hide',\n" +
          "    visible: 'ok'\n" +
          '} %}\n' +
          '       \n' +
          '{{ object | jsonViewer({ title: "Object with automatic template key removal" }) | safe }}\n' +
          '    <hr />\n' +
          '\n' +
          '\n' +
          '    <h2>Object showing template key</h2>\n' +
          '    <h3>Input</h3>\n' +
          '    <code><pre>{% raw %}\n' +
          '{% set object = {\n' +
          '    a: 1,\n' +
          '    template: { big: "data", nested: { foo: "bar" } },\n' +
          '    b: { template: { x: 1 } },\n' +
          "    secret: '12345',\n" +
          "    hidden: 'should hide',\n" +
          "    visible: 'ok'\n" +
          '} %}\n' +
          '       \n' +
          '{{ object | jsonViewer({ \n' +
          '    title: "Object showing template key",\n' +
          '    showTemplate: true\n' +
          '}) | safe }}\n' +
          '    {% endraw %}</pre></code>\n' +
          '    <h3>Output</h3>\n' +
          '    {% set object = {\n' +
          '    a: 1,\n' +
          '    template: { big: "data", nested: { foo: "bar" } },\n' +
          '    b: { template: { x: 1 } },\n' +
          "    secret: '12345',\n" +
          "    hidden: 'should hide',\n" +
          "    visible: 'ok'\n" +
          '} %}\n' +
          '       \n' +
          '{{ object | jsonViewer({ title: "Object showing template key", showTemplate: true }) | safe }}\n' +
          '    <hr />\n' +
          '\n' +
          '\n' +
          '\n' +
          '    <h2>Object with Key Replacement</h2>\n' +
          '    <h3>Input</h3>\n' +
          '    <code><pre>{% raw %}\n' +
          '{% set object = {\n' +
          '    a: 1,\n' +
          '    template: { big: "data", nested: { foo: "bar" } },\n' +
          '    b: { template: { x: 1 } },\n' +
          "    secret: '12345',\n" +
          "    hidden: 'should hide',\n" +
          "    visible: 'ok'\n" +
          '} %}\n' +
          '       \n' +
          '{{ object | jsonViewer({ \n' +
          '    title: "object",  \n' +
          '    removeKeys: [ \n' +
          "        { keyName: 'template', replaceString: 'Customised Template message' },\n" +
          "        { keyName: 'secret', replaceString: '***hidden***' },\n" +
          "        'hidden'\n" +
          '    ] \n' +
          '}) | safe }}\n' +
          '    {% endraw %}</pre></code>\n' +
          '    <h3>Output</h3>\n' +
          '    {% set object = {\n' +
          '    a: 1,\n' +
          '    template: { big: "data", nested: { foo: "bar" } },\n' +
          '    b: { template: { x: 1 } },\n' +
          "    secret: '12345',\n" +
          "    hidden: 'should hide',\n" +
          "    visible: 'ok'\n" +
          '} %}\n' +
          '       \n' +
          '{{ object | jsonViewer({ \n' +
          '    title: "object",  \n' +
          '    removeKeys: [ \n' +
          "        'template',\n" +
          "        { keyName: 'secret', replaceString: '***hidden***' },\n" +
          "        'hidden'\n" +
          '    ] \n' +
          '}) | safe }}\n' +
          '    <hr />\n' +
          '\n' +
          '    <h2>Complex Object with all options</h2>\n' +
          '    <h3>Input</h3>\n' +
          '    <p><code>{% raw %}\n' +
          '{{ collections.all[0] | jsonViewer({\n' +
          '    title: "collections.all[0]",\n' +
          '    showTypes: false,\n' +
          '    defaultExpanded: false,\n' +
          '    pathsOnHover: false,\n' +
          '    showControls: true,\n' +
          '    removeKeys: [{\n' +
          "        keyName: 'template',\n" +
          "        replaceString: 'Removed for performance reasons'\n" +
          '      }]\n' +
          '}) | safe }}\n' +
          '{% endraw %}</code></p>\n' +
          '    <h3>Output</h3>\n' +
          '    {{ collections.all[0] | jsonViewer({\n' +
          '        title: "collections.all[0]",\n' +
          '        showTypes: false,\n' +
          '        defaultExpanded: false,\n' +
          '        pathsOnHover: false,\n' +
          '        showControls: true,\n' +
          '        removeKeys: [{\n' +
          "            keyName: 'template',\n" +
          "            replaceString: 'Removed for performance reasons'\n" +
          '          }]\n' +
          '\n' +
          '    }) | safe }}\n' +
          '    <hr />\n' +
          '\n' +
          '\n' +
          '\n' +
          '    <h2>Complex Object using consolePlus (for comparison)</h2>\n' +
          '    <h3>Input</h3>\n' +
          '    <p><code>{% raw %} {% console collections.all[0] %}{% endraw %}</code></p>\n' +
          '    <h3>Output</h3>\n' +
          '    {% console collections.all[0] %}\n' +
          '    <hr />\n' +
          '\n' +
          '\n' +
          '    <h2>Debugging remove keys</h2>\n' +
          '    {{ object | jsonViewer({ \n' +
          '        title: "object"\n' +
          '    }) | safe }}\n' +
          '\n' +
          '    {{ object | jsonViewer({ \n' +
          '        title: "object",  \n' +
          '        removeKeys: [ \n' +
          "            'template'\n" +
          '        ] \n' +
          '    }) | safe }}\n' +
          '\n' +
          '    {{ object | jsonViewer({ \n' +
          '        title: "object",  \n' +
          '        removeKeys: [ \n' +
          "           { 'template': 'Removed for performance reasons Yippie' }\n" +
          '        ] \n' +
          '    }) | safe }}\n' +
          '</body>\n' +
          '\n' +
          '</html>',
        data: { title: 'JSON Viewer' },
        isEmpty: false,
        excerpt: ''
      }
    },
    _frontMatterDataCache: Promise {
      {
        data: { title: 'JSON Viewer' },
        excerpt: ''
      }
    },
    _stats: Promise {
      Stats {
        dev: 2097263,
        mode: 33188,
        nlink: 1,
        uid: 2500,
        gid: 0,
        rdev: 0,
        blksize: 4096,
        ino: 310789423,
        size: 6836,
        blocks: 16,
        atimeMs: 1752760783222.0996,
        mtimeMs: 1752760775706.1038,
        ctimeMs: 1752760775730.1038,
        birthtimeMs: 1752760775706.1038
      }
    },
    _usePermalinkRoot: undefined,
    _cacheRenderedPromise: Promise { <pending> }
  },
  rawInput: '<!DOCTYPE html>\n' +
    '<html lang="en">\n' +
    '\n' +
    '<head>\n' +
    '    <meta charset="UTF-8">\n' +
    '    <meta name="viewport" content="width=device-width, initial-scale=1.0">\n' +
    '    <title>{{title}}</title>\n' +
    '    <link rel="stylesheet" href="https://unpkg.com/mvp.css">\n' +
    '    <style>\n' +
    '        body {\n' +
    '            margin: auto;\n' +
    '            padding: 20px;\n' +
    '        }\n' +
    '\n' +
    '        hr {\n' +
    '            margin-top: 1rem;\n' +
    '            margin-bottom: 1rem;\n' +
    '        }\n' +
    '\n' +
    '        pre {\n' +
    '            max-width: 100vw;\n' +
    '        }\n' +
    '\n' +
    '        pre, code {\n' +
    '  white-space: pre-wrap; /* Wraps text while preserving whitespace */\n' +
    '  overflow-x: auto; /* Adds horizontal scrollbar if needed */\n' +
    '  word-wrap: break-word; /* Ensures long words break to fit */\n' +
    '  max-width: 100%; /* Restricts block to container width */\n' +
    '  box-sizing: border-box; /* Includes padding/borders in width */\n' +
    '}\n' +
    '    </style>\n' +
    '</head>\n' +
    '\n' +
    '<body>\n' +
    '\n' +
    '    {% set object = {\n' +
    '        a: 1,\n' +
    '        template: { big: "data", nested: { foo: "bar" } },\n' +
    '        b: { template: { x: 1 } },\n' +
    "        secret: '12345',\n" +
    "        hidden: 'should hide',\n" +
    "        visible: 'ok'\n" +
    '    } %}\n' +
    '\n' +
    '\n' +
    '\n' +
    '\n' +
    '\n' +
    '       <h1>{{title}}</h1>\n' +
    '\n' +
    '    <h2>Comparison with | dump</h2>\n' +
    '    <h3>Input using dump</h3>\n' +
    '    <p><code>{% raw %} {{ { a: "a", b: undefined } | dump }}{% endraw %}</code></p>\n' +
    '    <h3>Output</h3>\n' +
    '    {{ { a: "a", b: undefined } | dump }}\n' +
    '    <h3>Same input using jsonViewer</h3>\n' +
    '    <p><code>{% raw %} {{ { a: "a", b: undefined } | jsonViewer | safe }}{% endraw %}</code></p>\n' +
    '    <h3>Output</h3>\n' +
    '    {{ { a: "a", b: undefined } | jsonViewer | safe }}\n' +
    '    <hr />\n' +
    '\n' +
    '    <h2>String with title</h2>\n' +
    '    <h3>Input</h3>\n' +
    '    <p><code>{% raw %} {{ "value" | jsonViewer({ title: "string"}) | safe }}{% endraw %}</code></p>\n' +
    '    <h3>Output</h3>\n' +
    '    {{ "value" | jsonViewer({ title: "string"}) | safe }}\n' +
    '    <hr />\n' +
    '\n' +
    '    <h2>Number with title</h2>\n' +
    '    <h3>Input</h3>\n' +
    '    <p><code>{% raw %} {{ 123 | jsonViewer({ title: "number"}) | safe }}{% endraw %}</code></p>\n' +
    '    <h3>Output</h3>\n' +
    '    {{ 123 | jsonViewer({ title: "number"}) | safe }}\n' +
    '    <hr />\n' +
    '\n' +
    '    <h2>Array with title</h2>\n' +
    '    <h3>Input</h3>\n' +
    '    <p><code>{% raw %} {{ ["string 1", "string 2", 3, 4 , {a:"a"} ] | jsonViewer({title: "array"}) | safe }}{% endraw %}</code></p>\n' +
    '    <h3>Output</h3>\n' +
    '    {{ ["string 1", "string 2", 3, 4 , {a:"a"} ] | jsonViewer({title: "array"}) | safe }}\n' +
    '    <hr />\n' +
    '\n' +
    '\n' +
    '    <h2>Object</h2>\n' +
    '    <h3>Input</h3>\n' +
    '    <code><pre>{% raw %}\n' +
    '{% set object = {\n' +
    '    a: 1,\n' +
    '    nested: { big: "data", nested: { foo: "bar" } },\n' +
    '    b: { nested: { x: 1 } },\n' +
    "    secret: '12345',\n" +
    "    hidden: 'should hide',\n" +
    "    visible: 'ok'\n" +
    '} %}\n' +
    '       \n' +
    '{{ object | jsonViewer({ title: "object" }) | safe }}\n' +
    '    {% endraw %}</pre></code>\n' +
    '    <h3>Output</h3>\n' +
    '    {% set object = {\n' +
    '    a: 1,\n' +
    '    nested: { big: "data", nested: { foo: "bar" } },\n' +
    '    b: { nested: { x: 1 } },\n' +
    "    secret: '12345',\n" +
    "    hidden: 'should hide',\n" +
    "    visible: 'ok'\n" +
    '} %}\n' +
    '       \n' +
    '{{ object | jsonViewer({ title: "object" }) | safe }}\n' +
    '    <hr />\n' +
    '\n' +
    '\n' +
    '        <h2>Object with automatic template key removal</h2>\n' +
    '    <h3>Input</h3>\n' +
    '    <code><pre>{% raw %}\n' +
    '{% set object = {\n' +
    '    a: 1,\n' +
    '    template: { big: "data", nested: { foo: "bar" } },\n' +
    '    b: { template: { x: 1 } },\n' +
    "    secret: '12345',\n" +
    "    hidden: 'should hide',\n" +
    "    visible: 'ok'\n" +
    '} %}\n' +
    '       \n' +
    '{{ object | jsonViewer({ title: "Object with automatic template key removal" }) | safe }}\n' +
    '    {% endraw %}</pre></code>\n' +
    '    <h3>Output</h3>\n' +
    '    {% set object = {\n' +
    '    a: 1,\n' +
    '    template: { big: "data", nested: { foo: "bar" } },\n' +
    '    b: { template: { x: 1 } },\n' +
    "    secret: '12345',\n" +
    "    hidden: 'should hide',\n" +
    "    visible: 'ok'\n" +
    '} %}\n' +
    '       \n' +
    '{{ object | jsonViewer({ title: "Object with automatic template key removal" }) | safe }}\n' +
    '    <hr />\n' +
    '\n' +
    '\n' +
    '    <h2>Object showing template key</h2>\n' +
    '    <h3>Input</h3>\n' +
    '    <code><pre>{% raw %}\n' +
    '{% set object = {\n' +
    '    a: 1,\n' +
    '    template: { big: "data", nested: { foo: "bar" } },\n' +
    '    b: { template: { x: 1 } },\n' +
    "    secret: '12345',\n" +
    "    hidden: 'should hide',\n" +
    "    visible: 'ok'\n" +
    '} %}\n' +
    '       \n' +
    '{{ object | jsonViewer({ \n' +
    '    title: "Object showing template key",\n' +
    '    showTemplate: true\n' +
    '}) | safe }}\n' +
    '    {% endraw %}</pre></code>\n' +
    '    <h3>Output</h3>\n' +
    '    {% set object = {\n' +
    '    a: 1,\n' +
    '    template: { big: "data", nested: { foo: "bar" } },\n' +
    '    b: { template: { x: 1 } },\n' +
    "    secret: '12345',\n" +
    "    hidden: 'should hide',\n" +
    "    visible: 'ok'\n" +
    '} %}\n' +
    '       \n' +
    '{{ object | jsonViewer({ title: "Object showing template key", showTemplate: true }) | safe }}\n' +
    '    <hr />\n' +
    '\n' +
    '\n' +
    '\n' +
    '    <h2>Object with Key Replacement</h2>\n' +
    '    <h3>Input</h3>\n' +
    '    <code><pre>{% raw %}\n' +
    '{% set object = {\n' +
    '    a: 1,\n' +
    '    template: { big: "data", nested: { foo: "bar" } },\n' +
    '    b: { template: { x: 1 } },\n' +
    "    secret: '12345',\n" +
    "    hidden: 'should hide',\n" +
    "    visible: 'ok'\n" +
    '} %}\n' +
    '       \n' +
    '{{ object | jsonViewer({ \n' +
    '    title: "object",  \n' +
    '    removeKeys: [ \n' +
    "        { keyName: 'template', replaceString: 'Customised Template message' },\n" +
    "        { keyName: 'secret', replaceString: '***hidden***' },\n" +
    "        'hidden'\n" +
    '    ] \n' +
    '}) | safe }}\n' +
    '    {% endraw %}</pre></code>\n' +
    '    <h3>Output</h3>\n' +
    '    {% set object = {\n' +
    '    a: 1,\n' +
    '    template: { big: "data", nested: { foo: "bar" } },\n' +
    '    b: { template: { x: 1 } },\n' +
    "    secret: '12345',\n" +
    "    hidden: 'should hide',\n" +
    "    visible: 'ok'\n" +
    '} %}\n' +
    '       \n' +
    '{{ object | jsonViewer({ \n' +
    '    title: "object",  \n' +
    '    removeKeys: [ \n' +
    "        'template',\n" +
    "        { keyName: 'secret', replaceString: '***hidden***' },\n" +
    "        'hidden'\n" +
    '    ] \n' +
    '}) | safe }}\n' +
    '    <hr />\n' +
    '\n' +
    '    <h2>Complex Object with all options</h2>\n' +
    '    <h3>Input</h3>\n' +
    '    <p><code>{% raw %}\n' +
    '{{ collections.all[0] | jsonViewer({\n' +
    '    title: "collections.all[0]",\n' +
    '    showTypes: false,\n' +
    '    defaultExpanded: false,\n' +
    '    pathsOnHover: false,\n' +
    '    showControls: true,\n' +
    '    removeKeys: [{\n' +
    "        keyName: 'template',\n" +
    "        replaceString: 'Removed for performance reasons'\n" +
    '      }]\n' +
    '}) | safe }}\n' +
    '{% endraw %}</code></p>\n' +
    '    <h3>Output</h3>\n' +
    '    {{ collections.all[0] | jsonViewer({\n' +
    '        title: "collections.all[0]",\n' +
    '        showTypes: false,\n' +
    '        defaultExpanded: false,\n' +
    '        pathsOnHover: false,\n' +
    '        showControls: true,\n' +
    '        removeKeys: [{\n' +
    "            keyName: 'template',\n" +
    "            replaceString: 'Removed for performance reasons'\n" +
    '          }]\n' +
    '\n' +
    '    }) | safe }}\n' +
    '    <hr />\n' +
    '\n' +
    '\n' +
    '\n' +
    '    <h2>Complex Object using consolePlus (for comparison)</h2>\n' +
    '    <h3>Input</h3>\n' +
    '    <p><code>{% raw %} {% console collections.all[0] %}{% endraw %}</code></p>\n' +
    '    <h3>Output</h3>\n' +
    '    {% console collections.all[0] %}\n' +
    '    <hr />\n' +
    '\n' +
    '\n' +
    '    <h2>Debugging remove keys</h2>\n' +
    '    {{ object | jsonViewer({ \n' +
    '        title: "object"\n' +
    '    }) | safe }}\n' +
    '\n' +
    '    {{ object | jsonViewer({ \n' +
    '        title: "object",  \n' +
    '        removeKeys: [ \n' +
    "            'template'\n" +
    '        ] \n' +
    '    }) | safe }}\n' +
    '\n' +
    '    {{ object | jsonViewer({ \n' +
    '        title: "object",  \n' +
    '        removeKeys: [ \n' +
    "           { 'template': 'Removed for performance reasons Yippie' }\n" +
    '        ] \n' +
    '    }) | safe }}\n' +
    '</body>\n' +
    '\n' +
    '</html>',
  groupNumber: 0,
  data: {
    eleventy: {
      version: '3.1.1',
      generator: 'Eleventy v3.1.1',
      env: {
        source: 'cli',
        runMode: 'build',
        config: '/opt/build/repo/eleventy.config.js',
        root: '/opt/build/repo'
      },
      directories: {
        input: './src/',
        inputFile: undefined,
        inputGlob: undefined,
        data: './src/_data/',
        includes: './src/_includes/',
        layouts: undefined,
        output: './dist/'
      }
    },
    pkg: {
      name: 'stringify-and-view',
      version: '0.0.1',
      main: 'app/index.js',
      license: 'MIT',
      author: 'dazza',
      type: 'module',
      scripts: {
        dev: 'rimraf dist build && eleventy --serve --quiet',
        build: 'eleventy ',
        test: 'vitest run',
        'test:watch': 'vitest'
      },
      dependencies: { 'eleventy-plugin-console-plus': '^0.1.1' },
      devDependencies: {
        '@11ty/eleventy': '^3.1.1',
        jsdom: '^26.1.0',
        rimraf: '^6.0.1',
        vitest: '^3.2.1'
      }
    },
    title: 'JSON Viewer',
    page: {
      inputPath: './src/index.njk',
      fileSlug: '',
      filePathStem: '/index',
      outputFileExtension: 'html',
      templateSyntax: 'njk',
      date: 2025-07-17T13:59:35.706Z,
      rawInput: '<!DOCTYPE html>\n' +
        '<html lang="en">\n' +
        '\n' +
        '<head>\n' +
        '    <meta charset="UTF-8">\n' +
        '    <meta name="viewport" content="width=device-width, initial-scale=1.0">\n' +
        '    <title>{{title}}</title>\n' +
        '    <link rel="stylesheet" href="https://unpkg.com/mvp.css">\n' +
        '    <style>\n' +
        '        body {\n' +
        '            margin: auto;\n' +
        '            padding: 20px;\n' +
        '        }\n' +
        '\n' +
        '        hr {\n' +
        '            margin-top: 1rem;\n' +
        '            margin-bottom: 1rem;\n' +
        '        }\n' +
        '\n' +
        '        pre {\n' +
        '            max-width: 100vw;\n' +
        '        }\n' +
        '\n' +
        '        pre, code {\n' +
        '  white-space: pre-wrap; /* Wraps text while preserving whitespace */\n' +
        '  overflow-x: auto; /* Adds horizontal scrollbar if needed */\n' +
        '  word-wrap: break-word; /* Ensures long words break to fit */\n' +
        '  max-width: 100%; /* Restricts block to container width */\n' +
        '  box-sizing: border-box; /* Includes padding/borders in width */\n' +
        '}\n' +
        '    </style>\n' +
        '</head>\n' +
        '\n' +
        '<body>\n' +
        '\n' +
        '    {% set object = {\n' +
        '        a: 1,\n' +
        '        template: { big: "data", nested: { foo: "bar" } },\n' +
        '        b: { template: { x: 1 } },\n' +
        "        secret: '12345',\n" +
        "        hidden: 'should hide',\n" +
        "        visible: 'ok'\n" +
        '    } %}\n' +
        '\n' +
        '\n' +
        '\n' +
        '\n' +
        '\n' +
        '       <h1>{{title}}</h1>\n' +
        '\n' +
        '    <h2>Comparison with | dump</h2>\n' +
        '    <h3>Input using dump</h3>\n' +
        '    <p><code>{% raw %} {{ { a: "a", b: undefined } | dump }}{% endraw %}</code></p>\n' +
        '    <h3>Output</h3>\n' +
        '    {{ { a: "a", b: undefined } | dump }}\n' +
        '    <h3>Same input using jsonViewer</h3>\n' +
        '    <p><code>{% raw %} {{ { a: "a", b: undefined } | jsonViewer | safe }}{% endraw %}</code></p>\n' +
        '    <h3>Output</h3>\n' +
        '    {{ { a: "a", b: undefined } | jsonViewer | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '    <h2>String with title</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <p><code>{% raw %} {{ "value" | jsonViewer({ title: "string"}) | safe }}{% endraw %}</code></p>\n' +
        '    <h3>Output</h3>\n' +
        '    {{ "value" | jsonViewer({ title: "string"}) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '    <h2>Number with title</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <p><code>{% raw %} {{ 123 | jsonViewer({ title: "number"}) | safe }}{% endraw %}</code></p>\n' +
        '    <h3>Output</h3>\n' +
        '    {{ 123 | jsonViewer({ title: "number"}) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '    <h2>Array with title</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <p><code>{% raw %} {{ ["string 1", "string 2", 3, 4 , {a:"a"} ] | jsonViewer({title: "array"}) | safe }}{% endraw %}</code></p>\n' +
        '    <h3>Output</h3>\n' +
        '    {{ ["string 1", "string 2", 3, 4 , {a:"a"} ] | jsonViewer({title: "array"}) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '\n' +
        '    <h2>Object</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <code><pre>{% raw %}\n' +
        '{% set object = {\n' +
        '    a: 1,\n' +
        '    nested: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { nested: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ title: "object" }) | safe }}\n' +
        '    {% endraw %}</pre></code>\n' +
        '    <h3>Output</h3>\n' +
        '    {% set object = {\n' +
        '    a: 1,\n' +
        '    nested: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { nested: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ title: "object" }) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '\n' +
        '        <h2>Object with automatic template key removal</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <code><pre>{% raw %}\n' +
        '{% set object = {\n' +
        '    a: 1,\n' +
        '    template: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { template: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ title: "Object with automatic template key removal" }) | safe }}\n' +
        '    {% endraw %}</pre></code>\n' +
        '    <h3>Output</h3>\n' +
        '    {% set object = {\n' +
        '    a: 1,\n' +
        '    template: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { template: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ title: "Object with automatic template key removal" }) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '\n' +
        '    <h2>Object showing template key</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <code><pre>{% raw %}\n' +
        '{% set object = {\n' +
        '    a: 1,\n' +
        '    template: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { template: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ \n' +
        '    title: "Object showing template key",\n' +
        '    showTemplate: true\n' +
        '}) | safe }}\n' +
        '    {% endraw %}</pre></code>\n' +
        '    <h3>Output</h3>\n' +
        '    {% set object = {\n' +
        '    a: 1,\n' +
        '    template: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { template: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ title: "Object showing template key", showTemplate: true }) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '\n' +
        '\n' +
        '    <h2>Object with Key Replacement</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <code><pre>{% raw %}\n' +
        '{% set object = {\n' +
        '    a: 1,\n' +
        '    template: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { template: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ \n' +
        '    title: "object",  \n' +
        '    removeKeys: [ \n' +
        "        { keyName: 'template', replaceString: 'Customised Template message' },\n" +
        "        { keyName: 'secret', replaceString: '***hidden***' },\n" +
        "        'hidden'\n" +
        '    ] \n' +
        '}) | safe }}\n' +
        '    {% endraw %}</pre></code>\n' +
        '    <h3>Output</h3>\n' +
        '    {% set object = {\n' +
        '    a: 1,\n' +
        '    template: { big: "data", nested: { foo: "bar" } },\n' +
        '    b: { template: { x: 1 } },\n' +
        "    secret: '12345',\n" +
        "    hidden: 'should hide',\n" +
        "    visible: 'ok'\n" +
        '} %}\n' +
        '       \n' +
        '{{ object | jsonViewer({ \n' +
        '    title: "object",  \n' +
        '    removeKeys: [ \n' +
        "        'template',\n" +
        "        { keyName: 'secret', replaceString: '***hidden***' },\n" +
        "        'hidden'\n" +
        '    ] \n' +
        '}) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '    <h2>Complex Object with all options</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <p><code>{% raw %}\n' +
        '{{ collections.all[0] | jsonViewer({\n' +
        '    title: "collections.all[0]",\n' +
        '    showTypes: false,\n' +
        '    defaultExpanded: false,\n' +
        '    pathsOnHover: false,\n' +
        '    showControls: true,\n' +
        '    removeKeys: [{\n' +
        "        keyName: 'template',\n" +
        "        replaceString: 'Removed for performance reasons'\n" +
        '      }]\n' +
        '}) | safe }}\n' +
        '{% endraw %}</code></p>\n' +
        '    <h3>Output</h3>\n' +
        '    {{ collections.all[0] | jsonViewer({\n' +
        '        title: "collections.all[0]",\n' +
        '        showTypes: false,\n' +
        '        defaultExpanded: false,\n' +
        '        pathsOnHover: false,\n' +
        '        showControls: true,\n' +
        '        removeKeys: [{\n' +
        "            keyName: 'template',\n" +
        "            replaceString: 'Removed for performance reasons'\n" +
        '          }]\n' +
        '\n' +
        '    }) | safe }}\n' +
        '    <hr />\n' +
        '\n' +
        '\n' +
        '\n' +
        '    <h2>Complex Object using consolePlus (for comparison)</h2>\n' +
        '    <h3>Input</h3>\n' +
        '    <p><code>{% raw %} {% console collections.all[0] %}{% endraw %}</code></p>\n' +
        '    <h3>Output</h3>\n' +
        '    {% console collections.all[0] %}\n' +
        '    <hr />\n' +
        '\n' +
        '\n' +
        '    <h2>Debugging remove keys</h2>\n' +
        '    {{ object | jsonViewer({ \n' +
        '        title: "object"\n' +
        '    }) | safe }}\n' +
        '\n' +
        '    {{ object | jsonViewer({ \n' +
        '        title: "object",  \n' +
        '        removeKeys: [ \n' +
        "            'template'\n" +
        '        ] \n' +
        '    }) | safe }}\n' +
        '\n' +
        '    {{ object | jsonViewer({ \n' +
        '        title: "object",  \n' +
        '        removeKeys: [ \n' +
        "           { 'template': 'Removed for performance reasons Yippie' }\n" +
        '        ] \n' +
        '    }) | safe }}\n' +
        '</body>\n' +
        '\n' +
        '</html>',
      url: '/',
      outputPath: './dist/index.html'
    },
    collections: <ref *2> {
      all: [
        [Circular *1],
        {
          template: Template {
            inputPath: './src/posts/ai-ethics.md',
            parsed: {
              root: '',
              dir: './src/posts',
              base: 'ai-ethics.md',
              ext: '.md',
              name: 'ai-ethics'
            },
            extraOutputSubdirectory: '',
            templateData: TemplateData {
              templateConfig: TemplateConfig {
                overrides: {},
                projectConfigPaths: [
                  '.eleventy.js',
                  'eleventy.config.js',
                  'eleventy.config.mjs',
                  'eleventy.config.cjs'
                ],
                customRootConfig: null,
                hasConfigMerged: true,
                isEsm: true,
                logger: ConsoleLogger {
                  outputStream: [Readable]
                },
                directories: ProjectDirectories {
                  inputFile: undefined,
                  inputGlob: undefined
                },
                rootConfig: {
                  templateFormats: [Array],
                  pathPrefix: '/',
                  markdownTemplateEngine: 'liquid',
                  htmlTemplateEngine: 'liquid',
                  dataFileSuffixes: [Array],
                  dataFileDirBaseNameOverride: false,
                  keys: [Object],
                  dir: [Object],
                  nunjucksFilters: {}
                },
                config: {
                  templateFormats: [Array],
                  pathPrefix: '/',
                  markdownTemplateEngine: 'liquid',
                  htmlTemplateEngine: 'njk',
                  dataFileSuffixes: [Array],
                  dataFileDirBaseNameOverride: false,
                  keys: [Object],
                  dir: [Object],
                  nunjucksFilters: [Object],
                  directories: [Object],
                  transforms: [Object],
                  linters: {},
                  preprocessors: {},
                  globalData: {},
                  layoutAliases: {},
                  layoutResolution: true,
                  passthroughCopiesHtmlRelative: Set(0) {},
                  passthroughCopies: {},
                  liquidOptions: {},
                  liquidTags: {},
                  liquidFilters: [Object],
                  liquidShortcodes: [Object],
                  liquidPairedShortcodes: {},
                  liquidParameterParsing: 'legacy',
                  nunjucksEnvironmentOptions: [Object],
                  nunjucksPrecompiledTemplates: {},
                  nunjucksAsyncFilters: [Object],
                  nunjucksTags: {},
                  nunjucksGlobals: {},
                  nunjucksAsyncShortcodes: {},
                  nunjucksShortcodes: [Object],
                  nunjucksAsyncPairedShortcodes: {},
                  nunjucksPairedShortcodes: {},
                  javascriptFunctions: [Object],
                  javascriptShortcodes: [Object],
                  javascriptPairedShortcodes: {},
                  javascriptFilters: [Object],
                  markdownHighlighter: null,
                  libraryOverrides: {},
                  dynamicPermalinks: true,
                  useGitIgnore: true,
                  ignores: [Set],
                  watchIgnores: [Set],
                  dataDeepMerge: true,
                  watchJavaScriptDependencies: true,
                  additionalWatchTargets: [],
                  watchTargetsConfigReset: Set(0) {},
                  serverOptions: {},
                  chokidarConfig: {},
                  watchThrottleWaitTime: 0,
                  frontMatterParsingOptions: [Object],
                  dataExtensions: Map(0) {},
                  extensionMap: Set(0) {},
                  quietMode: false,
                  events: [AsyncEventEmitter],
                  benchmarkManager: [BenchmarkManager],
                  plugins: [Array],
                  useTemplateCache: true,
                  precompiledCollections: {},
                  dataFilterSelectors: Set(0) {},
                  libraryAmendments: {},
                  serverPassthroughCopyBehavior: 'copy',
                  urlTransforms: [],
                  virtualTemplates: {},
                  freezeReservedData: true,
                  customDateParsing: Set(0) {},
                  errorReporting: {},
                  templateHandling: {},
                  uses: [GlobalDependencyMap]
                },
                verbose: true
              },
              config: {
                templateFormats: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                pathPrefix: '/',
                markdownTemplateEngine: 'liquid',
                htmlTemplateEngine: 'njk',
                dataFileSuffixes: [ '.11tydata', '' ],
                dataFileDirBaseNameOverride: false,
                keys: {
                  package: 'pkg',
                  layout: 'layout',
                  permalink: 'permalink',
                  permalinkRoot: 'permalinkBypassOutputDir',
                  engineOverride: 'templateEngineOverride',
                  computed: 'eleventyComputed',
                  dataSchema: 'eleventyDataSchema'
                },
                dir: {
                  input: 'src',
                  includes: '_includes',
                  data: '_data',
                  output: 'dist'
                },
                nunjucksFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn]
                },
                directories: {
                  input: [Getter],
                  inputFile: [Getter],
                  inputGlob: [Getter],
                  data: [Getter],
                  includes: [Getter],
                  layouts: [Getter],
                  output: [Getter]
                },
                transforms: {
                  '@11ty/eleventy-bundle': [Function: fn],
                  '@11ty/eleventy/html-transformer': [Function: fn],
                  '@11ty/eleventy-bundle/delayed': [Function: fn]
                },
                linters: {},
                preprocessors: {},
                globalData: {},
                layoutAliases: {},
                layoutResolution: true,
                passthroughCopiesHtmlRelative: Set(0) {},
                passthroughCopies: {},
                liquidOptions: {},
                liquidTags: {},
                liquidFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                liquidShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                liquidPairedShortcodes: {},
                liquidParameterParsing: 'legacy',
                nunjucksEnvironmentOptions: {
                  dev: true,
                  autoescape: true,
                  throwOnUndefined: false,
                  trimBlocks: false,
                  lstripBlocks: false
                },
                nunjucksPrecompiledTemplates: {},
                nunjucksAsyncFilters: {
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                nunjucksTags: {},
                nunjucksGlobals: {},
                nunjucksAsyncShortcodes: {},
                nunjucksShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                nunjucksAsyncPairedShortcodes: {},
                nunjucksPairedShortcodes: {},
                javascriptFunctions: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn],
                  console: [Function: fn]
                },
                javascriptShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                javascriptPairedShortcodes: {},
                javascriptFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                markdownHighlighter: null,
                libraryOverrides: {},
                dynamicPermalinks: true,
                useGitIgnore: true,
                ignores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                watchIgnores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                dataDeepMerge: true,
                watchJavaScriptDependencies: true,
                additionalWatchTargets: [],
                watchTargetsConfigReset: Set(0) {},
                serverOptions: {},
                chokidarConfig: {},
                watchThrottleWaitTime: 0,
                frontMatterParsingOptions: {
                  engines: [Object],
                  filePath: './src/posts/neural-networks.md'
                },
                dataExtensions: Map(0) {},
                extensionMap: Set(0) {},
                quietMode: false,
                events: AsyncEventEmitter {
                  _events: [Object: null prototype],
                  _eventsCount: 7,
                  _maxListeners: 25,
                  [Symbol(shapeMode)]: false,
                  [Symbol(kCapture)]: false
                },
                benchmarkManager: BenchmarkManager {
                  benchmarkGroups: [Object],
                  isVerbose: true,
                  start: 256.488008
                },
                plugins: [ [Object], [Object], [Object] ],
                useTemplateCache: true,
                precompiledCollections: {},
                dataFilterSelectors: Set(0) {},
                libraryAmendments: {},
                serverPassthroughCopyBehavior: 'copy',
                urlTransforms: [],
                virtualTemplates: {},
                freezeReservedData: true,
                customDateParsing: Set(0) {},
                errorReporting: {},
                templateHandling: {},
                uses: GlobalDependencyMap { isEsm: true }
              },
              benchmarks: {
                data: BenchmarkGroup {
                  benchmarks: {},
                  isVerbose: true,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                },
                aggregate: BenchmarkGroup {
                  benchmarks: [Object],
                  isVerbose: false,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                }
              },
              rawImports: {
                pkg: {
                  name: 'stringify-and-view',
                  version: '0.0.1',
                  main: 'app/index.js',
                  license: 'MIT',
                  author: 'dazza',
                  type: 'module',
                  scripts: [Object],
                  dependencies: [Object],
                  devDependencies: [Object]
                }
              },
              globalData: Promise {
                {
                  eleventy: [Object],
                  pkg: [Object]
                }
              },
              templateDirectoryData: {
                './src/index.njk': {},
                './src/posts/ai-ethics.md': {},
                './src/posts/computer-vision.md': {},
                './src/posts/machine-learning-basics.md': {},
                './src/posts/natural-language-processing.md': {},
                './src/posts/neural-networks.md': {}
              },
              isEsm: true,
              initialGlobalData: TemplateDataInitialGlobalData {
                templateConfig: TemplateConfig {
                  overrides: {},
                  projectConfigPaths: [Array],
                  customRootConfig: null,
                  hasConfigMerged: true,
                  isEsm: true,
                  logger: [ConsoleLogger],
                  directories: [ProjectDirectories],
                  rootConfig: [Object],
                  config: [Object],
                  verbose: true
                },
                config: {
                  templateFormats: [Array],
                  pathPrefix: '/',
                  markdownTemplateEngine: 'liquid',
                  htmlTemplateEngine: 'njk',
                  dataFileSuffixes: [Array],
                  dataFileDirBaseNameOverride: false,
                  keys: [Object],
                  dir: [Object],
                  nunjucksFilters: [Object],
                  directories: [Object],
                  transforms: [Object],
                  linters: {},
                  preprocessors: {},
                  globalData: {},
                  layoutAliases: {},
                  layoutResolution: true,
                  passthroughCopiesHtmlRelative: Set(0) {},
                  passthroughCopies: {},
                  liquidOptions: {},
                  liquidTags: {},
                  liquidFilters: [Object],
                  liquidShortcodes: [Object],
                  liquidPairedShortcodes: {},
                  liquidParameterParsing: 'legacy',
                  nunjucksEnvironmentOptions: [Object],
                  nunjucksPrecompiledTemplates: {},
                  nunjucksAsyncFilters: [Object],
                  nunjucksTags: {},
                  nunjucksGlobals: {},
                  nunjucksAsyncShortcodes: {},
                  nunjucksShortcodes: [Object],
                  nunjucksAsyncPairedShortcodes: {},
                  nunjucksPairedShortcodes: {},
                  javascriptFunctions: [Object],
                  javascriptShortcodes: [Object],
                  javascriptPairedShortcodes: {},
                  javascriptFilters: [Object],
                  markdownHighlighter: null,
                  libraryOverrides: {},
                  dynamicPermalinks: true,
                  useGitIgnore: true,
                  ignores: [Set],
                  watchIgnores: [Set],
                  dataDeepMerge: true,
                  watchJavaScriptDependencies: true,
                  additionalWatchTargets: [],
                  watchTargetsConfigReset: Set(0) {},
                  serverOptions: {},
                  chokidarConfig: {},
                  watchThrottleWaitTime: 0,
                  frontMatterParsingOptions: [Object],
                  dataExtensions: Map(0) {},
                  extensionMap: Set(0) {},
                  quietMode: false,
                  events: [AsyncEventEmitter],
                  benchmarkManager: [BenchmarkManager],
                  plugins: [Array],
                  useTemplateCache: true,
                  precompiledCollections: {},
                  dataFilterSelectors: Set(0) {},
                  libraryAmendments: {},
                  serverPassthroughCopyBehavior: 'copy',
                  urlTransforms: [],
                  virtualTemplates: {},
                  freezeReservedData: true,
                  customDateParsing: Set(0) {},
                  errorReporting: {},
                  templateHandling: {},
                  uses: [GlobalDependencyMap]
                }
              },
              _extensionMap: EleventyExtensionMap {
                templateConfig: TemplateConfig {
                  overrides: {},
                  projectConfigPaths: [Array],
                  customRootConfig: null,
                  hasConfigMerged: true,
                  isEsm: true,
                  logger: [ConsoleLogger],
                  directories: [ProjectDirectories],
                  rootConfig: [Object],
                  config: [Object],
                  verbose: true
                },
                _spiderJsDepsCache: {},
                formatKeys: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                unfilteredFormatKeys: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                _extensionToKeyMap: {
                  md: [Object],
                  html: [Object],
                  njk: [Object],
                  liquid: [Object],
                  '11ty.js': [Object],
                  '11ty.cjs': [Object],
                  '11ty.mjs': [Object]
                },
                validTemplateLanguageKeys: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                passthroughCopyKeys: []
              },
              _env: {
                source: 'cli',
                runMode: 'build',
                config: '/opt/build/repo/eleventy.config.js',
                root: '/opt/build/repo'
              },
              fileSystemSearch: FileSystemSearch {
                inputs: {
                  'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': [Object],
                  'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': [Object]
                },
                outputs: {
                  'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': [Set],
                  'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': Set(0) {}
                },
                promises: {
                  'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': [Promise],
                  'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': [Promise]
                },
                count: 2
              },
              configApiGlobalData: Promise { { eleventy: [Object] } },
              pathCache: []
            },
            fileSlug: TemplateFileSlug {
              inputPath: 'posts/ai-ethics.md',
              cleanInputPath: 'posts/ai-ethics.md',
              dirs: [ 'posts' ],
              parsed: {
                root: '',
                dir: 'posts',
                base: 'ai-ethics.md',
                ext: '.md',
                name: 'ai-ethics'
              },
              filenameNoExt: 'ai-ethics'
            },
            fileSlugStr: 'ai-ethics',
            filePathStem: '/posts/ai-ethics',
            linters: [],
            transforms: {
              '@11ty/eleventy-bundle': [Function: fn],
              '@11ty/eleventy/html-transformer': [Function: fn],
              '@11ty/eleventy-bundle/delayed': [Function: fn]
            },
            isVerbose: true,
            isDryRun: false,
            writeCount: 0,
            outputFormat: 'fs',
            behavior: TemplateBehavior {
              render: true,
              write: true,
              outputFormat: 'fs',
              config: {
                templateFormats: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                pathPrefix: '/',
                markdownTemplateEngine: 'liquid',
                htmlTemplateEngine: 'njk',
                dataFileSuffixes: [ '.11tydata', '' ],
                dataFileDirBaseNameOverride: false,
                keys: {
                  package: 'pkg',
                  layout: 'layout',
                  permalink: 'permalink',
                  permalinkRoot: 'permalinkBypassOutputDir',
                  engineOverride: 'templateEngineOverride',
                  computed: 'eleventyComputed',
                  dataSchema: 'eleventyDataSchema'
                },
                dir: {
                  input: 'src',
                  includes: '_includes',
                  data: '_data',
                  output: 'dist'
                },
                nunjucksFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn]
                },
                directories: {
                  input: [Getter],
                  inputFile: [Getter],
                  inputGlob: [Getter],
                  data: [Getter],
                  includes: [Getter],
                  layouts: [Getter],
                  output: [Getter]
                },
                transforms: {
                  '@11ty/eleventy-bundle': [Function: fn],
                  '@11ty/eleventy/html-transformer': [Function: fn],
                  '@11ty/eleventy-bundle/delayed': [Function: fn]
                },
                linters: {},
                preprocessors: {},
                globalData: {},
                layoutAliases: {},
                layoutResolution: true,
                passthroughCopiesHtmlRelative: Set(0) {},
                passthroughCopies: {},
                liquidOptions: {},
                liquidTags: {},
                liquidFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                liquidShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                liquidPairedShortcodes: {},
                liquidParameterParsing: 'legacy',
                nunjucksEnvironmentOptions: {
                  dev: true,
                  autoescape: true,
                  throwOnUndefined: false,
                  trimBlocks: false,
                  lstripBlocks: false
                },
                nunjucksPrecompiledTemplates: {},
                nunjucksAsyncFilters: {
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                nunjucksTags: {},
                nunjucksGlobals: {},
                nunjucksAsyncShortcodes: {},
                nunjucksShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                nunjucksAsyncPairedShortcodes: {},
                nunjucksPairedShortcodes: {},
                javascriptFunctions: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn],
                  console: [Function: fn]
                },
                javascriptShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                javascriptPairedShortcodes: {},
                javascriptFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                markdownHighlighter: null,
                libraryOverrides: {},
                dynamicPermalinks: true,
                useGitIgnore: true,
                ignores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                watchIgnores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                dataDeepMerge: true,
                watchJavaScriptDependencies: true,
                additionalWatchTargets: [],
                watchTargetsConfigReset: Set(0) {},
                serverOptions: {},
                chokidarConfig: {},
                watchThrottleWaitTime: 0,
                frontMatterParsingOptions: {
                  engines: [Object],
                  filePath: './src/posts/neural-networks.md'
                },
                dataExtensions: Map(0) {},
                extensionMap: Set(0) {},
                quietMode: false,
                events: AsyncEventEmitter {
                  _events: [Object: null prototype],
                  _eventsCount: 7,
                  _maxListeners: 25,
                  [Symbol(shapeMode)]: false,
                  [Symbol(kCapture)]: false
                },
                benchmarkManager: BenchmarkManager {
                  benchmarkGroups: [Object],
                  isVerbose: true,
                  start: 256.488008
                },
                plugins: [ [Object], [Object], [Object] ],
                useTemplateCache: true,
                precompiledCollections: {},
                dataFilterSelectors: Set(0) {},
                libraryAmendments: {},
                serverPassthroughCopyBehavior: 'copy',
                urlTransforms: [],
                virtualTemplates: {},
                freezeReservedData: true,
                customDateParsing: Set(0) {},
                errorReporting: {},
                templateHandling: {},
                uses: GlobalDependencyMap { isEsm: true }
              },
              renderableOverride: undefined
            },
            renderCount: 0,
            _dataCache: Promise {
              {
                eleventy: {
                  version: '3.1.1',
                  generator: 'Eleventy v3.1.1',
                  env: [Object],
                  directories: [Object]
                },
                pkg: {
                  name: 'stringify-and-view',
                  version: '0.0.1',
                  main: 'app/index.js',
                  license: 'MIT',
                  author: 'dazza',
                  type: 'module',
                  scripts: [Object],
                  dependencies: [Object],
                  devDependencies: [Object]
                },
                title: 'AI Ethics',
                page: {
                  inputPath: './src/posts/ai-ethics.md',
                  fileSlug: 'ai-ethics',
                  filePathStem: '/posts/ai-ethics',
                  outputFileExtension: 'html',
                  templateSyntax: 'liquid,md',
                  date: 2025-07-17T13:59:35.706Z,
                  rawInput: '\n' +
                    'AI ethics is a crucial field that addresses the moral implications and societal impact of artificial intelligence. It encompasses issues like bias in AI systems, privacy concerns, job displacement, and the development of responsible AI. As AI becomes more integrated into our daily lives, ethical considerations become increasingly important to ensure these technologies benefit humanity while minimizing potential harms. This field requires collaboration between technologists, ethicists, policymakers, and the public to create frameworks for responsible AI development and deployment. ',
                  url: '/posts/ai-ethics/',
                  outputPath: './dist/posts/ai-ethics/index.html'
                },
                collections: [Circular *2]
              }
            },
            inputContent: Promise {
              '---\n' +
                'title: AI Ethics\n' +
                '---\n' +
                '\n' +
                'AI ethics is a crucial field that addresses the moral implications and societal impact of artificial intelligence. It encompasses issues like bias in AI systems, privacy concerns, job displacement, and the development of responsible AI. As AI becomes more integrated into our daily lives, ethical considerations become increasingly important to ensure these technologies benefit humanity while minimizing potential harms. This field requires collaboration between technologists, ethicists, policymakers, and the public to create frameworks for responsible AI development and deployment. '
            },
            readingPromise: Promise {
              {
                content: '\n' +
                  'AI ethics is a crucial field that addresses the moral implications and societal impact of artificial intelligence. It encompasses issues like bias in AI systems, privacy concerns, job displacement, and the development of responsible AI. As AI becomes more integrated into our daily lives, ethical considerations become increasingly important to ensure these technologies benefit humanity while minimizing potential harms. This field requires collaboration between technologists, ethicists, policymakers, and the public to create frameworks for responsible AI development and deployment. ',
                data: { title: 'AI Ethics' },
                isEmpty: false,
                excerpt: ''
              }
            },
            _frontMatterDataCache: Promise {
              {
                data: { title: 'AI Ethics' },
                excerpt: ''
              }
            },
            _stats: Promise {
              Stats {
                dev: 2097263,
                mode: 33188,
                nlink: 1,
                uid: 2500,
                gid: 0,
                rdev: 0,
                blksize: 4096,
                ino: 311504319,
                size: 613,
                blocks: 8,
                atimeMs: 1752760783246.0996,
                mtimeMs: 1752760775706.1038,
                ctimeMs: 1752760775730.1038,
                birthtimeMs: 1752760775706.1038
              }
            },
            _usePermalinkRoot: undefined
          },
          rawInput: '\n' +
            'AI ethics is a crucial field that addresses the moral implications and societal impact of artificial intelligence. It encompasses issues like bias in AI systems, privacy concerns, job displacement, and the development of responsible AI. As AI becomes more integrated into our daily lives, ethical considerations become increasingly important to ensure these technologies benefit humanity while minimizing potential harms. This field requires collaboration between technologists, ethicists, policymakers, and the public to create frameworks for responsible AI development and deployment. ',
          groupNumber: 0,
          data: {
            eleventy: {
              version: '3.1.1',
              generator: 'Eleventy v3.1.1',
              env: {
                source: 'cli',
                runMode: 'build',
                config: '/opt/build/repo/eleventy.config.js',
                root: '/opt/build/repo'
              },
              directories: {
                input: './src/',
                inputFile: undefined,
                inputGlob: undefined,
                data: './src/_data/',
                includes: './src/_includes/',
                layouts: undefined,
                output: './dist/'
              }
            },
            pkg: {
              name: 'stringify-and-view',
              version: '0.0.1',
              main: 'app/index.js',
              license: 'MIT',
              author: 'dazza',
              type: 'module',
              scripts: {
                dev: 'rimraf dist build && eleventy --serve --quiet',
                build: 'eleventy ',
                test: 'vitest run',
                'test:watch': 'vitest'
              },
              dependencies: {
                'eleventy-plugin-console-plus': '^0.1.1'
              },
              devDependencies: {
                '@11ty/eleventy': '^3.1.1',
                jsdom: '^26.1.0',
                rimraf: '^6.0.1',
                vitest: '^3.2.1'
              }
            },
            title: 'AI Ethics',
            page: {
              inputPath: './src/posts/ai-ethics.md',
              fileSlug: 'ai-ethics',
              filePathStem: '/posts/ai-ethics',
              outputFileExtension: 'html',
              templateSyntax: 'liquid,md',
              date: 2025-07-17T13:59:35.706Z,
              rawInput: '\n' +
                'AI ethics is a crucial field that addresses the moral implications and societal impact of artificial intelligence. It encompasses issues like bias in AI systems, privacy concerns, job displacement, and the development of responsible AI. As AI becomes more integrated into our daily lives, ethical considerations become increasingly important to ensure these technologies benefit humanity while minimizing potential harms. This field requires collaboration between technologists, ethicists, policymakers, and the public to create frameworks for responsible AI development and deployment. ',
              url: '/posts/ai-ethics/',
              outputPath: './dist/posts/ai-ethics/index.html'
            },
            collections: [Circular *2]
          },
          page: {
            inputPath: './src/posts/ai-ethics.md',
            fileSlug: 'ai-ethics',
            filePathStem: '/posts/ai-ethics',
            outputFileExtension: 'html',
            templateSyntax: 'liquid,md',
            date: 2025-07-17T13:59:35.706Z,
            rawInput: '\n' +
              'AI ethics is a crucial field that addresses the moral implications and societal impact of artificial intelligence. It encompasses issues like bias in AI systems, privacy concerns, job displacement, and the development of responsible AI. As AI becomes more integrated into our daily lives, ethical considerations become increasingly important to ensure these technologies benefit humanity while minimizing potential harms. This field requires collaboration between technologists, ethicists, policymakers, and the public to create frameworks for responsible AI development and deployment. ',
            url: '/posts/ai-ethics/',
            outputPath: './dist/posts/ai-ethics/index.html'
          },
          inputPath: './src/posts/ai-ethics.md',
          fileSlug: 'ai-ethics',
          filePathStem: '/posts/ai-ethics',
          date: 2025-07-17T13:59:35.706Z,
          outputPath: './dist/posts/ai-ethics/index.html',
          url: '/posts/ai-ethics/',
          templateContent: [Getter/Setter],
          content: [Getter/Setter]
        },
        {
          template: Template {
            inputPath: './src/posts/computer-vision.md',
            parsed: {
              root: '',
              dir: './src/posts',
              base: 'computer-vision.md',
              ext: '.md',
              name: 'computer-vision'
            },
            extraOutputSubdirectory: '',
            templateData: TemplateData {
              templateConfig: TemplateConfig {
                overrides: {},
                projectConfigPaths: [
                  '.eleventy.js',
                  'eleventy.config.js',
                  'eleventy.config.mjs',
                  'eleventy.config.cjs'
                ],
                customRootConfig: null,
                hasConfigMerged: true,
                isEsm: true,
                logger: ConsoleLogger {
                  outputStream: [Readable]
                },
                directories: ProjectDirectories {
                  inputFile: undefined,
                  inputGlob: undefined
                },
                rootConfig: {
                  templateFormats: [Array],
                  pathPrefix: '/',
                  markdownTemplateEngine: 'liquid',
                  htmlTemplateEngine: 'liquid',
                  dataFileSuffixes: [Array],
                  dataFileDirBaseNameOverride: false,
                  keys: [Object],
                  dir: [Object],
                  nunjucksFilters: {}
                },
                config: {
                  templateFormats: [Array],
                  pathPrefix: '/',
                  markdownTemplateEngine: 'liquid',
                  htmlTemplateEngine: 'njk',
                  dataFileSuffixes: [Array],
                  dataFileDirBaseNameOverride: false,
                  keys: [Object],
                  dir: [Object],
                  nunjucksFilters: [Object],
                  directories: [Object],
                  transforms: [Object],
                  linters: {},
                  preprocessors: {},
                  globalData: {},
                  layoutAliases: {},
                  layoutResolution: true,
                  passthroughCopiesHtmlRelative: Set(0) {},
                  passthroughCopies: {},
                  liquidOptions: {},
                  liquidTags: {},
                  liquidFilters: [Object],
                  liquidShortcodes: [Object],
                  liquidPairedShortcodes: {},
                  liquidParameterParsing: 'legacy',
                  nunjucksEnvironmentOptions: [Object],
                  nunjucksPrecompiledTemplates: {},
                  nunjucksAsyncFilters: [Object],
                  nunjucksTags: {},
                  nunjucksGlobals: {},
                  nunjucksAsyncShortcodes: {},
                  nunjucksShortcodes: [Object],
                  nunjucksAsyncPairedShortcodes: {},
                  nunjucksPairedShortcodes: {},
                  javascriptFunctions: [Object],
                  javascriptShortcodes: [Object],
                  javascriptPairedShortcodes: {},
                  javascriptFilters: [Object],
                  markdownHighlighter: null,
                  libraryOverrides: {},
                  dynamicPermalinks: true,
                  useGitIgnore: true,
                  ignores: [Set],
                  watchIgnores: [Set],
                  dataDeepMerge: true,
                  watchJavaScriptDependencies: true,
                  additionalWatchTargets: [],
                  watchTargetsConfigReset: Set(0) {},
                  serverOptions: {},
                  chokidarConfig: {},
                  watchThrottleWaitTime: 0,
                  frontMatterParsingOptions: [Object],
                  dataExtensions: Map(0) {},
                  extensionMap: Set(0) {},
                  quietMode: false,
                  events: [AsyncEventEmitter],
                  benchmarkManager: [BenchmarkManager],
                  plugins: [Array],
                  useTemplateCache: true,
                  precompiledCollections: {},
                  dataFilterSelectors: Set(0) {},
                  libraryAmendments: {},
                  serverPassthroughCopyBehavior: 'copy',
                  urlTransforms: [],
                  virtualTemplates: {},
                  freezeReservedData: true,
                  customDateParsing: Set(0) {},
                  errorReporting: {},
                  templateHandling: {},
                  uses: [GlobalDependencyMap]
                },
                verbose: true
              },
              config: {
                templateFormats: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                pathPrefix: '/',
                markdownTemplateEngine: 'liquid',
                htmlTemplateEngine: 'njk',
                dataFileSuffixes: [ '.11tydata', '' ],
                dataFileDirBaseNameOverride: false,
                keys: {
                  package: 'pkg',
                  layout: 'layout',
                  permalink: 'permalink',
                  permalinkRoot: 'permalinkBypassOutputDir',
                  engineOverride: 'templateEngineOverride',
                  computed: 'eleventyComputed',
                  dataSchema: 'eleventyDataSchema'
                },
                dir: {
                  input: 'src',
                  includes: '_includes',
                  data: '_data',
                  output: 'dist'
                },
                nunjucksFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn]
                },
                directories: {
                  input: [Getter],
                  inputFile: [Getter],
                  inputGlob: [Getter],
                  data: [Getter],
                  includes: [Getter],
                  layouts: [Getter],
                  output: [Getter]
                },
                transforms: {
                  '@11ty/eleventy-bundle': [Function: fn],
                  '@11ty/eleventy/html-transformer': [Function: fn],
                  '@11ty/eleventy-bundle/delayed': [Function: fn]
                },
                linters: {},
                preprocessors: {},
                globalData: {},
                layoutAliases: {},
                layoutResolution: true,
                passthroughCopiesHtmlRelative: Set(0) {},
                passthroughCopies: {},
                liquidOptions: {},
                liquidTags: {},
                liquidFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                liquidShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                liquidPairedShortcodes: {},
                liquidParameterParsing: 'legacy',
                nunjucksEnvironmentOptions: {
                  dev: true,
                  autoescape: true,
                  throwOnUndefined: false,
                  trimBlocks: false,
                  lstripBlocks: false
                },
                nunjucksPrecompiledTemplates: {},
                nunjucksAsyncFilters: {
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                nunjucksTags: {},
                nunjucksGlobals: {},
                nunjucksAsyncShortcodes: {},
                nunjucksShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                nunjucksAsyncPairedShortcodes: {},
                nunjucksPairedShortcodes: {},
                javascriptFunctions: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn],
                  console: [Function: fn]
                },
                javascriptShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                javascriptPairedShortcodes: {},
                javascriptFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                markdownHighlighter: null,
                libraryOverrides: {},
                dynamicPermalinks: true,
                useGitIgnore: true,
                ignores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                watchIgnores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                dataDeepMerge: true,
                watchJavaScriptDependencies: true,
                additionalWatchTargets: [],
                watchTargetsConfigReset: Set(0) {},
                serverOptions: {},
                chokidarConfig: {},
                watchThrottleWaitTime: 0,
                frontMatterParsingOptions: {
                  engines: [Object],
                  filePath: './src/posts/neural-networks.md'
                },
                dataExtensions: Map(0) {},
                extensionMap: Set(0) {},
                quietMode: false,
                events: AsyncEventEmitter {
                  _events: [Object: null prototype],
                  _eventsCount: 7,
                  _maxListeners: 25,
                  [Symbol(shapeMode)]: false,
                  [Symbol(kCapture)]: false
                },
                benchmarkManager: BenchmarkManager {
                  benchmarkGroups: [Object],
                  isVerbose: true,
                  start: 256.488008
                },
                plugins: [ [Object], [Object], [Object] ],
                useTemplateCache: true,
                precompiledCollections: {},
                dataFilterSelectors: Set(0) {},
                libraryAmendments: {},
                serverPassthroughCopyBehavior: 'copy',
                urlTransforms: [],
                virtualTemplates: {},
                freezeReservedData: true,
                customDateParsing: Set(0) {},
                errorReporting: {},
                templateHandling: {},
                uses: GlobalDependencyMap { isEsm: true }
              },
              benchmarks: {
                data: BenchmarkGroup {
                  benchmarks: {},
                  isVerbose: true,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                },
                aggregate: BenchmarkGroup {
                  benchmarks: [Object],
                  isVerbose: false,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                }
              },
              rawImports: {
                pkg: {
                  name: 'stringify-and-view',
                  version: '0.0.1',
                  main: 'app/index.js',
                  license: 'MIT',
                  author: 'dazza',
                  type: 'module',
                  scripts: [Object],
                  dependencies: [Object],
                  devDependencies: [Object]
                }
              },
              globalData: Promise {
                {
                  eleventy: [Object],
                  pkg: [Object]
                }
              },
              templateDirectoryData: {
                './src/index.njk': {},
                './src/posts/ai-ethics.md': {},
                './src/posts/computer-vision.md': {},
                './src/posts/machine-learning-basics.md': {},
                './src/posts/natural-language-processing.md': {},
                './src/posts/neural-networks.md': {}
              },
              isEsm: true,
              initialGlobalData: TemplateDataInitialGlobalData {
                templateConfig: TemplateConfig {
                  overrides: {},
                  projectConfigPaths: [Array],
                  customRootConfig: null,
                  hasConfigMerged: true,
                  isEsm: true,
                  logger: [ConsoleLogger],
                  directories: [ProjectDirectories],
                  rootConfig: [Object],
                  config: [Object],
                  verbose: true
                },
                config: {
                  templateFormats: [Array],
                  pathPrefix: '/',
                  markdownTemplateEngine: 'liquid',
                  htmlTemplateEngine: 'njk',
                  dataFileSuffixes: [Array],
                  dataFileDirBaseNameOverride: false,
                  keys: [Object],
                  dir: [Object],
                  nunjucksFilters: [Object],
                  directories: [Object],
                  transforms: [Object],
                  linters: {},
                  preprocessors: {},
                  globalData: {},
                  layoutAliases: {},
                  layoutResolution: true,
                  passthroughCopiesHtmlRelative: Set(0) {},
                  passthroughCopies: {},
                  liquidOptions: {},
                  liquidTags: {},
                  liquidFilters: [Object],
                  liquidShortcodes: [Object],
                  liquidPairedShortcodes: {},
                  liquidParameterParsing: 'legacy',
                  nunjucksEnvironmentOptions: [Object],
                  nunjucksPrecompiledTemplates: {},
                  nunjucksAsyncFilters: [Object],
                  nunjucksTags: {},
                  nunjucksGlobals: {},
                  nunjucksAsyncShortcodes: {},
                  nunjucksShortcodes: [Object],
                  nunjucksAsyncPairedShortcodes: {},
                  nunjucksPairedShortcodes: {},
                  javascriptFunctions: [Object],
                  javascriptShortcodes: [Object],
                  javascriptPairedShortcodes: {},
                  javascriptFilters: [Object],
                  markdownHighlighter: null,
                  libraryOverrides: {},
                  dynamicPermalinks: true,
                  useGitIgnore: true,
                  ignores: [Set],
                  watchIgnores: [Set],
                  dataDeepMerge: true,
                  watchJavaScriptDependencies: true,
                  additionalWatchTargets: [],
                  watchTargetsConfigReset: Set(0) {},
                  serverOptions: {},
                  chokidarConfig: {},
                  watchThrottleWaitTime: 0,
                  frontMatterParsingOptions: [Object],
                  dataExtensions: Map(0) {},
                  extensionMap: Set(0) {},
                  quietMode: false,
                  events: [AsyncEventEmitter],
                  benchmarkManager: [BenchmarkManager],
                  plugins: [Array],
                  useTemplateCache: true,
                  precompiledCollections: {},
                  dataFilterSelectors: Set(0) {},
                  libraryAmendments: {},
                  serverPassthroughCopyBehavior: 'copy',
                  urlTransforms: [],
                  virtualTemplates: {},
                  freezeReservedData: true,
                  customDateParsing: Set(0) {},
                  errorReporting: {},
                  templateHandling: {},
                  uses: [GlobalDependencyMap]
                }
              },
              _extensionMap: EleventyExtensionMap {
                templateConfig: TemplateConfig {
                  overrides: {},
                  projectConfigPaths: [Array],
                  customRootConfig: null,
                  hasConfigMerged: true,
                  isEsm: true,
                  logger: [ConsoleLogger],
                  directories: [ProjectDirectories],
                  rootConfig: [Object],
                  config: [Object],
                  verbose: true
                },
                _spiderJsDepsCache: {},
                formatKeys: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                unfilteredFormatKeys: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                _extensionToKeyMap: {
                  md: [Object],
                  html: [Object],
                  njk: [Object],
                  liquid: [Object],
                  '11ty.js': [Object],
                  '11ty.cjs': [Object],
                  '11ty.mjs': [Object]
                },
                validTemplateLanguageKeys: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                passthroughCopyKeys: []
              },
              _env: {
                source: 'cli',
                runMode: 'build',
                config: '/opt/build/repo/eleventy.config.js',
                root: '/opt/build/repo'
              },
              fileSystemSearch: FileSystemSearch {
                inputs: {
                  'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': [Object],
                  'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': [Object]
                },
                outputs: {
                  'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': [Set],
                  'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': Set(0) {}
                },
                promises: {
                  'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': [Promise],
                  'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': [Promise]
                },
                count: 2
              },
              configApiGlobalData: Promise { { eleventy: [Object] } },
              pathCache: []
            },
            fileSlug: TemplateFileSlug {
              inputPath: 'posts/computer-vision.md',
              cleanInputPath: 'posts/computer-vision.md',
              dirs: [ 'posts' ],
              parsed: {
                root: '',
                dir: 'posts',
                base: 'computer-vision.md',
                ext: '.md',
                name: 'computer-vision'
              },
              filenameNoExt: 'computer-vision'
            },
            fileSlugStr: 'computer-vision',
            filePathStem: '/posts/computer-vision',
            linters: [],
            transforms: {
              '@11ty/eleventy-bundle': [Function: fn],
              '@11ty/eleventy/html-transformer': [Function: fn],
              '@11ty/eleventy-bundle/delayed': [Function: fn]
            },
            isVerbose: true,
            isDryRun: false,
            writeCount: 0,
            outputFormat: 'fs',
            behavior: TemplateBehavior {
              render: true,
              write: true,
              outputFormat: 'fs',
              config: {
                templateFormats: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                pathPrefix: '/',
                markdownTemplateEngine: 'liquid',
                htmlTemplateEngine: 'njk',
                dataFileSuffixes: [ '.11tydata', '' ],
                dataFileDirBaseNameOverride: false,
                keys: {
                  package: 'pkg',
                  layout: 'layout',
                  permalink: 'permalink',
                  permalinkRoot: 'permalinkBypassOutputDir',
                  engineOverride: 'templateEngineOverride',
                  computed: 'eleventyComputed',
                  dataSchema: 'eleventyDataSchema'
                },
                dir: {
                  input: 'src',
                  includes: '_includes',
                  data: '_data',
                  output: 'dist'
                },
                nunjucksFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn]
                },
                directories: {
                  input: [Getter],
                  inputFile: [Getter],
                  inputGlob: [Getter],
                  data: [Getter],
                  includes: [Getter],
                  layouts: [Getter],
                  output: [Getter]
                },
                transforms: {
                  '@11ty/eleventy-bundle': [Function: fn],
                  '@11ty/eleventy/html-transformer': [Function: fn],
                  '@11ty/eleventy-bundle/delayed': [Function: fn]
                },
                linters: {},
                preprocessors: {},
                globalData: {},
                layoutAliases: {},
                layoutResolution: true,
                passthroughCopiesHtmlRelative: Set(0) {},
                passthroughCopies: {},
                liquidOptions: {},
                liquidTags: {},
                liquidFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                liquidShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                liquidPairedShortcodes: {},
                liquidParameterParsing: 'legacy',
                nunjucksEnvironmentOptions: {
                  dev: true,
                  autoescape: true,
                  throwOnUndefined: false,
                  trimBlocks: false,
                  lstripBlocks: false
                },
                nunjucksPrecompiledTemplates: {},
                nunjucksAsyncFilters: {
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                nunjucksTags: {},
                nunjucksGlobals: {},
                nunjucksAsyncShortcodes: {},
                nunjucksShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                nunjucksAsyncPairedShortcodes: {},
                nunjucksPairedShortcodes: {},
                javascriptFunctions: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn],
                  console: [Function: fn]
                },
                javascriptShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                javascriptPairedShortcodes: {},
                javascriptFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                markdownHighlighter: null,
                libraryOverrides: {},
                dynamicPermalinks: true,
                useGitIgnore: true,
                ignores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                watchIgnores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                dataDeepMerge: true,
                watchJavaScriptDependencies: true,
                additionalWatchTargets: [],
                watchTargetsConfigReset: Set(0) {},
                serverOptions: {},
                chokidarConfig: {},
                watchThrottleWaitTime: 0,
                frontMatterParsingOptions: {
                  engines: [Object],
                  filePath: './src/posts/neural-networks.md'
                },
                dataExtensions: Map(0) {},
                extensionMap: Set(0) {},
                quietMode: false,
                events: AsyncEventEmitter {
                  _events: [Object: null prototype],
                  _eventsCount: 7,
                  _maxListeners: 25,
                  [Symbol(shapeMode)]: false,
                  [Symbol(kCapture)]: false
                },
                benchmarkManager: BenchmarkManager {
                  benchmarkGroups: [Object],
                  isVerbose: true,
                  start: 256.488008
                },
                plugins: [ [Object], [Object], [Object] ],
                useTemplateCache: true,
                precompiledCollections: {},
                dataFilterSelectors: Set(0) {},
                libraryAmendments: {},
                serverPassthroughCopyBehavior: 'copy',
                urlTransforms: [],
                virtualTemplates: {},
                freezeReservedData: true,
                customDateParsing: Set(0) {},
                errorReporting: {},
                templateHandling: {},
                uses: GlobalDependencyMap { isEsm: true }
              },
              renderableOverride: undefined
            },
            renderCount: 0,
            _dataCache: Promise {
              {
                eleventy: {
                  version: '3.1.1',
                  generator: 'Eleventy v3.1.1',
                  env: [Object],
                  directories: [Object]
                },
                pkg: {
                  name: 'stringify-and-view',
                  version: '0.0.1',
                  main: 'app/index.js',
                  license: 'MIT',
                  author: 'dazza',
                  type: 'module',
                  scripts: [Object],
                  dependencies: [Object],
                  devDependencies: [Object]
                },
                title: 'Computer Vision',
                page: {
                  inputPath: './src/posts/computer-vision.md',
                  fileSlug: 'computer-vision',
                  filePathStem: '/posts/computer-vision',
                  outputFileExtension: 'html',
                  templateSyntax: 'liquid,md',
                  date: 2025-07-17T13:59:35.706Z,
                  rawInput: '\n' +
                    'Computer vision is a field of AI that enables computers to interpret and understand visual information from the world. Using deep learning and image processing techniques, computer vision systems can identify objects, recognize faces, track movement, and even understand scenes in images and videos. This technology is crucial for applications like autonomous vehicles, medical image analysis, and augmented reality, transforming how machines interact with the visual world. ',
                  url: '/posts/computer-vision/',
                  outputPath: './dist/posts/computer-vision/index.html'
                },
                collections: [Circular *2]
              }
            },
            inputContent: Promise {
              '---\n' +
                'title: Computer Vision\n' +
                '---\n' +
                '\n' +
                'Computer vision is a field of AI that enables computers to interpret and understand visual information from the world. Using deep learning and image processing techniques, computer vision systems can identify objects, recognize faces, track movement, and even understand scenes in images and videos. This technology is crucial for applications like autonomous vehicles, medical image analysis, and augmented reality, transforming how machines interact with the visual world. '
            },
            readingPromise: Promise {
              {
                content: '\n' +
                  'Computer vision is a field of AI that enables computers to interpret and understand visual information from the world. Using deep learning and image processing techniques, computer vision systems can identify objects, recognize faces, track movement, and even understand scenes in images and videos. This technology is crucial for applications like autonomous vehicles, medical image analysis, and augmented reality, transforming how machines interact with the visual world. ',
                data: { title: 'Computer Vision' },
                isEmpty: false,
                excerpt: ''
              }
            },
            _frontMatterDataCache: Promise {
              {
                data: { title: 'Computer Vision' },
                excerpt: ''
              }
            },
            _stats: Promise {
              Stats {
                dev: 2097263,
                mode: 33188,
                nlink: 1,
                uid: 2500,
                gid: 0,
                rdev: 0,
                blksize: 4096,
                ino: 311503425,
                size: 507,
                blocks: 8,
                atimeMs: 1752760783246.0996,
                mtimeMs: 1752760775706.1038,
                ctimeMs: 1752760775730.1038,
                birthtimeMs: 1752760775706.1038
              }
            },
            _usePermalinkRoot: undefined
          },
          rawInput: '\n' +
            'Computer vision is a field of AI that enables computers to interpret and understand visual information from the world. Using deep learning and image processing techniques, computer vision systems can identify objects, recognize faces, track movement, and even understand scenes in images and videos. This technology is crucial for applications like autonomous vehicles, medical image analysis, and augmented reality, transforming how machines interact with the visual world. ',
          groupNumber: 0,
          data: {
            eleventy: {
              version: '3.1.1',
              generator: 'Eleventy v3.1.1',
              env: {
                source: 'cli',
                runMode: 'build',
                config: '/opt/build/repo/eleventy.config.js',
                root: '/opt/build/repo'
              },
              directories: {
                input: './src/',
                inputFile: undefined,
                inputGlob: undefined,
                data: './src/_data/',
                includes: './src/_includes/',
                layouts: undefined,
                output: './dist/'
              }
            },
            pkg: {
              name: 'stringify-and-view',
              version: '0.0.1',
              main: 'app/index.js',
              license: 'MIT',
              author: 'dazza',
              type: 'module',
              scripts: {
                dev: 'rimraf dist build && eleventy --serve --quiet',
                build: 'eleventy ',
                test: 'vitest run',
                'test:watch': 'vitest'
              },
              dependencies: {
                'eleventy-plugin-console-plus': '^0.1.1'
              },
              devDependencies: {
                '@11ty/eleventy': '^3.1.1',
                jsdom: '^26.1.0',
                rimraf: '^6.0.1',
                vitest: '^3.2.1'
              }
            },
            title: 'Computer Vision',
            page: {
              inputPath: './src/posts/computer-vision.md',
              fileSlug: 'computer-vision',
              filePathStem: '/posts/computer-vision',
              outputFileExtension: 'html',
              templateSyntax: 'liquid,md',
              date: 2025-07-17T13:59:35.706Z,
              rawInput: '\n' +
                'Computer vision is a field of AI that enables computers to interpret and understand visual information from the world. Using deep learning and image processing techniques, computer vision systems can identify objects, recognize faces, track movement, and even understand scenes in images and videos. This technology is crucial for applications like autonomous vehicles, medical image analysis, and augmented reality, transforming how machines interact with the visual world. ',
              url: '/posts/computer-vision/',
              outputPath: './dist/posts/computer-vision/index.html'
            },
            collections: [Circular *2]
          },
          page: {
            inputPath: './src/posts/computer-vision.md',
            fileSlug: 'computer-vision',
            filePathStem: '/posts/computer-vision',
            outputFileExtension: 'html',
            templateSyntax: 'liquid,md',
            date: 2025-07-17T13:59:35.706Z,
            rawInput: '\n' +
              'Computer vision is a field of AI that enables computers to interpret and understand visual information from the world. Using deep learning and image processing techniques, computer vision systems can identify objects, recognize faces, track movement, and even understand scenes in images and videos. This technology is crucial for applications like autonomous vehicles, medical image analysis, and augmented reality, transforming how machines interact with the visual world. ',
            url: '/posts/computer-vision/',
            outputPath: './dist/posts/computer-vision/index.html'
          },
          inputPath: './src/posts/computer-vision.md',
          fileSlug: 'computer-vision',
          filePathStem: '/posts/computer-vision',
          date: 2025-07-17T13:59:35.706Z,
          outputPath: './dist/posts/computer-vision/index.html',
          url: '/posts/computer-vision/',
          templateContent: [Getter/Setter],
          content: [Getter/Setter]
        },
        {
          template: Template {
            inputPath: './src/posts/machine-learning-basics.md',
            parsed: {
              root: '',
              dir: './src/posts',
              base: 'machine-learning-basics.md',
              ext: '.md',
              name: 'machine-learning-basics'
            },
            extraOutputSubdirectory: '',
            templateData: TemplateData {
              templateConfig: TemplateConfig {
                overrides: {},
                projectConfigPaths: [
                  '.eleventy.js',
                  'eleventy.config.js',
                  'eleventy.config.mjs',
                  'eleventy.config.cjs'
                ],
                customRootConfig: null,
                hasConfigMerged: true,
                isEsm: true,
                logger: ConsoleLogger {
                  outputStream: [Readable]
                },
                directories: ProjectDirectories {
                  inputFile: undefined,
                  inputGlob: undefined
                },
                rootConfig: {
                  templateFormats: [Array],
                  pathPrefix: '/',
                  markdownTemplateEngine: 'liquid',
                  htmlTemplateEngine: 'liquid',
                  dataFileSuffixes: [Array],
                  dataFileDirBaseNameOverride: false,
                  keys: [Object],
                  dir: [Object],
                  nunjucksFilters: {}
                },
                config: {
                  templateFormats: [Array],
                  pathPrefix: '/',
                  markdownTemplateEngine: 'liquid',
                  htmlTemplateEngine: 'njk',
                  dataFileSuffixes: [Array],
                  dataFileDirBaseNameOverride: false,
                  keys: [Object],
                  dir: [Object],
                  nunjucksFilters: [Object],
                  directories: [Object],
                  transforms: [Object],
                  linters: {},
                  preprocessors: {},
                  globalData: {},
                  layoutAliases: {},
                  layoutResolution: true,
                  passthroughCopiesHtmlRelative: Set(0) {},
                  passthroughCopies: {},
                  liquidOptions: {},
                  liquidTags: {},
                  liquidFilters: [Object],
                  liquidShortcodes: [Object],
                  liquidPairedShortcodes: {},
                  liquidParameterParsing: 'legacy',
                  nunjucksEnvironmentOptions: [Object],
                  nunjucksPrecompiledTemplates: {},
                  nunjucksAsyncFilters: [Object],
                  nunjucksTags: {},
                  nunjucksGlobals: {},
                  nunjucksAsyncShortcodes: {},
                  nunjucksShortcodes: [Object],
                  nunjucksAsyncPairedShortcodes: {},
                  nunjucksPairedShortcodes: {},
                  javascriptFunctions: [Object],
                  javascriptShortcodes: [Object],
                  javascriptPairedShortcodes: {},
                  javascriptFilters: [Object],
                  markdownHighlighter: null,
                  libraryOverrides: {},
                  dynamicPermalinks: true,
                  useGitIgnore: true,
                  ignores: [Set],
                  watchIgnores: [Set],
                  dataDeepMerge: true,
                  watchJavaScriptDependencies: true,
                  additionalWatchTargets: [],
                  watchTargetsConfigReset: Set(0) {},
                  serverOptions: {},
                  chokidarConfig: {},
                  watchThrottleWaitTime: 0,
                  frontMatterParsingOptions: [Object],
                  dataExtensions: Map(0) {},
                  extensionMap: Set(0) {},
                  quietMode: false,
                  events: [AsyncEventEmitter],
                  benchmarkManager: [BenchmarkManager],
                  plugins: [Array],
                  useTemplateCache: true,
                  precompiledCollections: {},
                  dataFilterSelectors: Set(0) {},
                  libraryAmendments: {},
                  serverPassthroughCopyBehavior: 'copy',
                  urlTransforms: [],
                  virtualTemplates: {},
                  freezeReservedData: true,
                  customDateParsing: Set(0) {},
                  errorReporting: {},
                  templateHandling: {},
                  uses: [GlobalDependencyMap]
                },
                verbose: true
              },
              config: {
                templateFormats: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                pathPrefix: '/',
                markdownTemplateEngine: 'liquid',
                htmlTemplateEngine: 'njk',
                dataFileSuffixes: [ '.11tydata', '' ],
                dataFileDirBaseNameOverride: false,
                keys: {
                  package: 'pkg',
                  layout: 'layout',
                  permalink: 'permalink',
                  permalinkRoot: 'permalinkBypassOutputDir',
                  engineOverride: 'templateEngineOverride',
                  computed: 'eleventyComputed',
                  dataSchema: 'eleventyDataSchema'
                },
                dir: {
                  input: 'src',
                  includes: '_includes',
                  data: '_data',
                  output: 'dist'
                },
                nunjucksFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn]
                },
                directories: {
                  input: [Getter],
                  inputFile: [Getter],
                  inputGlob: [Getter],
                  data: [Getter],
                  includes: [Getter],
                  layouts: [Getter],
                  output: [Getter]
                },
                transforms: {
                  '@11ty/eleventy-bundle': [Function: fn],
                  '@11ty/eleventy/html-transformer': [Function: fn],
                  '@11ty/eleventy-bundle/delayed': [Function: fn]
                },
                linters: {},
                preprocessors: {},
                globalData: {},
                layoutAliases: {},
                layoutResolution: true,
                passthroughCopiesHtmlRelative: Set(0) {},
                passthroughCopies: {},
                liquidOptions: {},
                liquidTags: {},
                liquidFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                liquidShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                liquidPairedShortcodes: {},
                liquidParameterParsing: 'legacy',
                nunjucksEnvironmentOptions: {
                  dev: true,
                  autoescape: true,
                  throwOnUndefined: false,
                  trimBlocks: false,
                  lstripBlocks: false
                },
                nunjucksPrecompiledTemplates: {},
                nunjucksAsyncFilters: {
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                nunjucksTags: {},
                nunjucksGlobals: {},
                nunjucksAsyncShortcodes: {},
                nunjucksShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                nunjucksAsyncPairedShortcodes: {},
                nunjucksPairedShortcodes: {},
                javascriptFunctions: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn],
                  console: [Function: fn]
                },
                javascriptShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                javascriptPairedShortcodes: {},
                javascriptFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                markdownHighlighter: null,
                libraryOverrides: {},
                dynamicPermalinks: true,
                useGitIgnore: true,
                ignores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                watchIgnores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                dataDeepMerge: true,
                watchJavaScriptDependencies: true,
                additionalWatchTargets: [],
                watchTargetsConfigReset: Set(0) {},
                serverOptions: {},
                chokidarConfig: {},
                watchThrottleWaitTime: 0,
                frontMatterParsingOptions: {
                  engines: [Object],
                  filePath: './src/posts/neural-networks.md'
                },
                dataExtensions: Map(0) {},
                extensionMap: Set(0) {},
                quietMode: false,
                events: AsyncEventEmitter {
                  _events: [Object: null prototype],
                  _eventsCount: 7,
                  _maxListeners: 25,
                  [Symbol(shapeMode)]: false,
                  [Symbol(kCapture)]: false
                },
                benchmarkManager: BenchmarkManager {
                  benchmarkGroups: [Object],
                  isVerbose: true,
                  start: 256.488008
                },
                plugins: [ [Object], [Object], [Object] ],
                useTemplateCache: true,
                precompiledCollections: {},
                dataFilterSelectors: Set(0) {},
                libraryAmendments: {},
                serverPassthroughCopyBehavior: 'copy',
                urlTransforms: [],
                virtualTemplates: {},
                freezeReservedData: true,
                customDateParsing: Set(0) {},
                errorReporting: {},
                templateHandling: {},
                uses: GlobalDependencyMap { isEsm: true }
              },
              benchmarks: {
                data: BenchmarkGroup {
                  benchmarks: {},
                  isVerbose: true,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                },
                aggregate: BenchmarkGroup {
                  benchmarks: [Object],
                  isVerbose: false,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                }
              },
              rawImports: {
                pkg: {
                  name: 'stringify-and-view',
                  version: '0.0.1',
                  main: 'app/index.js',
                  license: 'MIT',
                  author: 'dazza',
                  type: 'module',
                  scripts: [Object],
                  dependencies: [Object],
                  devDependencies: [Object]
                }
              },
              globalData: Promise {
                {
                  eleventy: [Object],
                  pkg: [Object]
                }
              },
              templateDirectoryData: {
                './src/index.njk': {},
                './src/posts/ai-ethics.md': {},
                './src/posts/computer-vision.md': {},
                './src/posts/machine-learning-basics.md': {},
                './src/posts/natural-language-processing.md': {},
                './src/posts/neural-networks.md': {}
              },
              isEsm: true,
              initialGlobalData: TemplateDataInitialGlobalData {
                templateConfig: TemplateConfig {
                  overrides: {},
                  projectConfigPaths: [Array],
                  customRootConfig: null,
                  hasConfigMerged: true,
                  isEsm: true,
                  logger: [ConsoleLogger],
                  directories: [ProjectDirectories],
                  rootConfig: [Object],
                  config: [Object],
                  verbose: true
                },
                config: {
                  templateFormats: [Array],
                  pathPrefix: '/',
                  markdownTemplateEngine: 'liquid',
                  htmlTemplateEngine: 'njk',
                  dataFileSuffixes: [Array],
                  dataFileDirBaseNameOverride: false,
                  keys: [Object],
                  dir: [Object],
                  nunjucksFilters: [Object],
                  directories: [Object],
                  transforms: [Object],
                  linters: {},
                  preprocessors: {},
                  globalData: {},
                  layoutAliases: {},
                  layoutResolution: true,
                  passthroughCopiesHtmlRelative: Set(0) {},
                  passthroughCopies: {},
                  liquidOptions: {},
                  liquidTags: {},
                  liquidFilters: [Object],
                  liquidShortcodes: [Object],
                  liquidPairedShortcodes: {},
                  liquidParameterParsing: 'legacy',
                  nunjucksEnvironmentOptions: [Object],
                  nunjucksPrecompiledTemplates: {},
                  nunjucksAsyncFilters: [Object],
                  nunjucksTags: {},
                  nunjucksGlobals: {},
                  nunjucksAsyncShortcodes: {},
                  nunjucksShortcodes: [Object],
                  nunjucksAsyncPairedShortcodes: {},
                  nunjucksPairedShortcodes: {},
                  javascriptFunctions: [Object],
                  javascriptShortcodes: [Object],
                  javascriptPairedShortcodes: {},
                  javascriptFilters: [Object],
                  markdownHighlighter: null,
                  libraryOverrides: {},
                  dynamicPermalinks: true,
                  useGitIgnore: true,
                  ignores: [Set],
                  watchIgnores: [Set],
                  dataDeepMerge: true,
                  watchJavaScriptDependencies: true,
                  additionalWatchTargets: [],
                  watchTargetsConfigReset: Set(0) {},
                  serverOptions: {},
                  chokidarConfig: {},
                  watchThrottleWaitTime: 0,
                  frontMatterParsingOptions: [Object],
                  dataExtensions: Map(0) {},
                  extensionMap: Set(0) {},
                  quietMode: false,
                  events: [AsyncEventEmitter],
                  benchmarkManager: [BenchmarkManager],
                  plugins: [Array],
                  useTemplateCache: true,
                  precompiledCollections: {},
                  dataFilterSelectors: Set(0) {},
                  libraryAmendments: {},
                  serverPassthroughCopyBehavior: 'copy',
                  urlTransforms: [],
                  virtualTemplates: {},
                  freezeReservedData: true,
                  customDateParsing: Set(0) {},
                  errorReporting: {},
                  templateHandling: {},
                  uses: [GlobalDependencyMap]
                }
              },
              _extensionMap: EleventyExtensionMap {
                templateConfig: TemplateConfig {
                  overrides: {},
                  projectConfigPaths: [Array],
                  customRootConfig: null,
                  hasConfigMerged: true,
                  isEsm: true,
                  logger: [ConsoleLogger],
                  directories: [ProjectDirectories],
                  rootConfig: [Object],
                  config: [Object],
                  verbose: true
                },
                _spiderJsDepsCache: {},
                formatKeys: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                unfilteredFormatKeys: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                _extensionToKeyMap: {
                  md: [Object],
                  html: [Object],
                  njk: [Object],
                  liquid: [Object],
                  '11ty.js': [Object],
                  '11ty.cjs': [Object],
                  '11ty.mjs': [Object]
                },
                validTemplateLanguageKeys: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                passthroughCopyKeys: []
              },
              _env: {
                source: 'cli',
                runMode: 'build',
                config: '/opt/build/repo/eleventy.config.js',
                root: '/opt/build/repo'
              },
              fileSystemSearch: FileSystemSearch {
                inputs: {
                  'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': [Object],
                  'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': [Object]
                },
                outputs: {
                  'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': [Set],
                  'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': Set(0) {}
                },
                promises: {
                  'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': [Promise],
                  'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': [Promise]
                },
                count: 2
              },
              configApiGlobalData: Promise { { eleventy: [Object] } },
              pathCache: []
            },
            fileSlug: TemplateFileSlug {
              inputPath: 'posts/machine-learning-basics.md',
              cleanInputPath: 'posts/machine-learning-basics.md',
              dirs: [ 'posts' ],
              parsed: {
                root: '',
                dir: 'posts',
                base: 'machine-learning-basics.md',
                ext: '.md',
                name: 'machine-learning-basics'
              },
              filenameNoExt: 'machine-learning-basics'
            },
            fileSlugStr: 'machine-learning-basics',
            filePathStem: '/posts/machine-learning-basics',
            linters: [],
            transforms: {
              '@11ty/eleventy-bundle': [Function: fn],
              '@11ty/eleventy/html-transformer': [Function: fn],
              '@11ty/eleventy-bundle/delayed': [Function: fn]
            },
            isVerbose: true,
            isDryRun: false,
            writeCount: 0,
            outputFormat: 'fs',
            behavior: TemplateBehavior {
              render: true,
              write: true,
              outputFormat: 'fs',
              config: {
                templateFormats: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                pathPrefix: '/',
                markdownTemplateEngine: 'liquid',
                htmlTemplateEngine: 'njk',
                dataFileSuffixes: [ '.11tydata', '' ],
                dataFileDirBaseNameOverride: false,
                keys: {
                  package: 'pkg',
                  layout: 'layout',
                  permalink: 'permalink',
                  permalinkRoot: 'permalinkBypassOutputDir',
                  engineOverride: 'templateEngineOverride',
                  computed: 'eleventyComputed',
                  dataSchema: 'eleventyDataSchema'
                },
                dir: {
                  input: 'src',
                  includes: '_includes',
                  data: '_data',
                  output: 'dist'
                },
                nunjucksFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn]
                },
                directories: {
                  input: [Getter],
                  inputFile: [Getter],
                  inputGlob: [Getter],
                  data: [Getter],
                  includes: [Getter],
                  layouts: [Getter],
                  output: [Getter]
                },
                transforms: {
                  '@11ty/eleventy-bundle': [Function: fn],
                  '@11ty/eleventy/html-transformer': [Function: fn],
                  '@11ty/eleventy-bundle/delayed': [Function: fn]
                },
                linters: {},
                preprocessors: {},
                globalData: {},
                layoutAliases: {},
                layoutResolution: true,
                passthroughCopiesHtmlRelative: Set(0) {},
                passthroughCopies: {},
                liquidOptions: {},
                liquidTags: {},
                liquidFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                liquidShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                liquidPairedShortcodes: {},
                liquidParameterParsing: 'legacy',
                nunjucksEnvironmentOptions: {
                  dev: true,
                  autoescape: true,
                  throwOnUndefined: false,
                  trimBlocks: false,
                  lstripBlocks: false
                },
                nunjucksPrecompiledTemplates: {},
                nunjucksAsyncFilters: {
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                nunjucksTags: {},
                nunjucksGlobals: {},
                nunjucksAsyncShortcodes: {},
                nunjucksShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                nunjucksAsyncPairedShortcodes: {},
                nunjucksPairedShortcodes: {},
                javascriptFunctions: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn],
                  console: [Function: fn]
                },
                javascriptShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                javascriptPairedShortcodes: {},
                javascriptFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                markdownHighlighter: null,
                libraryOverrides: {},
                dynamicPermalinks: true,
                useGitIgnore: true,
                ignores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                watchIgnores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                dataDeepMerge: true,
                watchJavaScriptDependencies: true,
                additionalWatchTargets: [],
                watchTargetsConfigReset: Set(0) {},
                serverOptions: {},
                chokidarConfig: {},
                watchThrottleWaitTime: 0,
                frontMatterParsingOptions: {
                  engines: [Object],
                  filePath: './src/posts/neural-networks.md'
                },
                dataExtensions: Map(0) {},
                extensionMap: Set(0) {},
                quietMode: false,
                events: AsyncEventEmitter {
                  _events: [Object: null prototype],
                  _eventsCount: 7,
                  _maxListeners: 25,
                  [Symbol(shapeMode)]: false,
                  [Symbol(kCapture)]: false
                },
                benchmarkManager: BenchmarkManager {
                  benchmarkGroups: [Object],
                  isVerbose: true,
                  start: 256.488008
                },
                plugins: [ [Object], [Object], [Object] ],
                useTemplateCache: true,
                precompiledCollections: {},
                dataFilterSelectors: Set(0) {},
                libraryAmendments: {},
                serverPassthroughCopyBehavior: 'copy',
                urlTransforms: [],
                virtualTemplates: {},
                freezeReservedData: true,
                customDateParsing: Set(0) {},
                errorReporting: {},
                templateHandling: {},
                uses: GlobalDependencyMap { isEsm: true }
              },
              renderableOverride: undefined
            },
            renderCount: 0,
            _dataCache: Promise {
              {
                eleventy: {
                  version: '3.1.1',
                  generator: 'Eleventy v3.1.1',
                  env: [Object],
                  directories: [Object]
                },
                pkg: {
                  name: 'stringify-and-view',
                  version: '0.0.1',
                  main: 'app/index.js',
                  license: 'MIT',
                  author: 'dazza',
                  type: 'module',
                  scripts: [Object],
                  dependencies: [Object],
                  devDependencies: [Object]
                },
                title: 'Machine Learning Basics',
                page: {
                  inputPath: './src/posts/machine-learning-basics.md',
                  fileSlug: 'machine-learning-basics',
                  filePathStem: '/posts/machine-learning-basics',
                  outputFileExtension: 'html',
                  templateSyntax: 'liquid,md',
                  date: 2025-07-17T13:59:35.706Z,
                  rawInput: '\n' +
                    'Machine learning is a subset of artificial intelligence that focuses on developing systems that can learn from and make decisions based on data. At its core, it involves training algorithms to recognize patterns in data and make predictions or decisions without being explicitly programmed to perform the task. This technology powers everything from recommendation systems to autonomous vehicles, making it one of the most transformative technologies of our time. ',
                  url: '/posts/machine-learning-basics/',
                  outputPath: './dist/posts/machine-learning-basics/index.html'
                },
                collections: [Circular *2]
              }
            },
            inputContent: Promise {
              '---\n' +
                'title: Machine Learning Basics\n' +
                '---\n' +
                '\n' +
                'Machine learning is a subset of artificial intelligence that focuses on developing systems that can learn from and make decisions based on data. At its core, it involves training algorithms to recognize patterns in data and make predictions or decisions without being explicitly programmed to perform the task. This technology powers everything from recommendation systems to autonomous vehicles, making it one of the most transformative technologies of our time. '
            },
            readingPromise: Promise {
              {
                content: '\n' +
                  'Machine learning is a subset of artificial intelligence that focuses on developing systems that can learn from and make decisions based on data. At its core, it involves training algorithms to recognize patterns in data and make predictions or decisions without being explicitly programmed to perform the task. This technology powers everything from recommendation systems to autonomous vehicles, making it one of the most transformative technologies of our time. ',
                data: {
                  title: 'Machine Learning Basics'
                },
                isEmpty: false,
                excerpt: ''
              }
            },
            _frontMatterDataCache: Promise {
              {
                data: {
                  title: 'Machine Learning Basics'
                },
                excerpt: ''
              }
            },
            _stats: Promise {
              Stats {
                dev: 2097263,
                mode: 33188,
                nlink: 1,
                uid: 2500,
                gid: 0,
                rdev: 0,
                blksize: 4096,
                ino: 311503426,
                size: 504,
                blocks: 8,
                atimeMs: 1752760783246.0996,
                mtimeMs: 1752760775706.1038,
                ctimeMs: 1752760775730.1038,
                birthtimeMs: 1752760775706.1038
              }
            },
            _usePermalinkRoot: undefined
          },
          rawInput: '\n' +
            'Machine learning is a subset of artificial intelligence that focuses on developing systems that can learn from and make decisions based on data. At its core, it involves training algorithms to recognize patterns in data and make predictions or decisions without being explicitly programmed to perform the task. This technology powers everything from recommendation systems to autonomous vehicles, making it one of the most transformative technologies of our time. ',
          groupNumber: 0,
          data: {
            eleventy: {
              version: '3.1.1',
              generator: 'Eleventy v3.1.1',
              env: {
                source: 'cli',
                runMode: 'build',
                config: '/opt/build/repo/eleventy.config.js',
                root: '/opt/build/repo'
              },
              directories: {
                input: './src/',
                inputFile: undefined,
                inputGlob: undefined,
                data: './src/_data/',
                includes: './src/_includes/',
                layouts: undefined,
                output: './dist/'
              }
            },
            pkg: {
              name: 'stringify-and-view',
              version: '0.0.1',
              main: 'app/index.js',
              license: 'MIT',
              author: 'dazza',
              type: 'module',
              scripts: {
                dev: 'rimraf dist build && eleventy --serve --quiet',
                build: 'eleventy ',
                test: 'vitest run',
                'test:watch': 'vitest'
              },
              dependencies: {
                'eleventy-plugin-console-plus': '^0.1.1'
              },
              devDependencies: {
                '@11ty/eleventy': '^3.1.1',
                jsdom: '^26.1.0',
                rimraf: '^6.0.1',
                vitest: '^3.2.1'
              }
            },
            title: 'Machine Learning Basics',
            page: {
              inputPath: './src/posts/machine-learning-basics.md',
              fileSlug: 'machine-learning-basics',
              filePathStem: '/posts/machine-learning-basics',
              outputFileExtension: 'html',
              templateSyntax: 'liquid,md',
              date: 2025-07-17T13:59:35.706Z,
              rawInput: '\n' +
                'Machine learning is a subset of artificial intelligence that focuses on developing systems that can learn from and make decisions based on data. At its core, it involves training algorithms to recognize patterns in data and make predictions or decisions without being explicitly programmed to perform the task. This technology powers everything from recommendation systems to autonomous vehicles, making it one of the most transformative technologies of our time. ',
              url: '/posts/machine-learning-basics/',
              outputPath: './dist/posts/machine-learning-basics/index.html'
            },
            collections: [Circular *2]
          },
          page: {
            inputPath: './src/posts/machine-learning-basics.md',
            fileSlug: 'machine-learning-basics',
            filePathStem: '/posts/machine-learning-basics',
            outputFileExtension: 'html',
            templateSyntax: 'liquid,md',
            date: 2025-07-17T13:59:35.706Z,
            rawInput: '\n' +
              'Machine learning is a subset of artificial intelligence that focuses on developing systems that can learn from and make decisions based on data. At its core, it involves training algorithms to recognize patterns in data and make predictions or decisions without being explicitly programmed to perform the task. This technology powers everything from recommendation systems to autonomous vehicles, making it one of the most transformative technologies of our time. ',
            url: '/posts/machine-learning-basics/',
            outputPath: './dist/posts/machine-learning-basics/index.html'
          },
          inputPath: './src/posts/machine-learning-basics.md',
          fileSlug: 'machine-learning-basics',
          filePathStem: '/posts/machine-learning-basics',
          date: 2025-07-17T13:59:35.706Z,
          outputPath: './dist/posts/machine-learning-basics/index.html',
          url: '/posts/machine-learning-basics/',
          templateContent: [Getter/Setter],
          content: [Getter/Setter]
        },
        {
          template: Template {
            inputPath: './src/posts/natural-language-processing.md',
            parsed: {
              root: '',
              dir: './src/posts',
              base: 'natural-language-processing.md',
              ext: '.md',
              name: 'natural-language-processing'
            },
            extraOutputSubdirectory: '',
            templateData: TemplateData {
              templateConfig: TemplateConfig {
                overrides: {},
                projectConfigPaths: [
                  '.eleventy.js',
                  'eleventy.config.js',
                  'eleventy.config.mjs',
                  'eleventy.config.cjs'
                ],
                customRootConfig: null,
                hasConfigMerged: true,
                isEsm: true,
                logger: ConsoleLogger {
                  outputStream: [Readable]
                },
                directories: ProjectDirectories {
                  inputFile: undefined,
                  inputGlob: undefined
                },
                rootConfig: {
                  templateFormats: [Array],
                  pathPrefix: '/',
                  markdownTemplateEngine: 'liquid',
                  htmlTemplateEngine: 'liquid',
                  dataFileSuffixes: [Array],
                  dataFileDirBaseNameOverride: false,
                  keys: [Object],
                  dir: [Object],
                  nunjucksFilters: {}
                },
                config: {
                  templateFormats: [Array],
                  pathPrefix: '/',
                  markdownTemplateEngine: 'liquid',
                  htmlTemplateEngine: 'njk',
                  dataFileSuffixes: [Array],
                  dataFileDirBaseNameOverride: false,
                  keys: [Object],
                  dir: [Object],
                  nunjucksFilters: [Object],
                  directories: [Object],
                  transforms: [Object],
                  linters: {},
                  preprocessors: {},
                  globalData: {},
                  layoutAliases: {},
                  layoutResolution: true,
                  passthroughCopiesHtmlRelative: Set(0) {},
                  passthroughCopies: {},
                  liquidOptions: {},
                  liquidTags: {},
                  liquidFilters: [Object],
                  liquidShortcodes: [Object],
                  liquidPairedShortcodes: {},
                  liquidParameterParsing: 'legacy',
                  nunjucksEnvironmentOptions: [Object],
                  nunjucksPrecompiledTemplates: {},
                  nunjucksAsyncFilters: [Object],
                  nunjucksTags: {},
                  nunjucksGlobals: {},
                  nunjucksAsyncShortcodes: {},
                  nunjucksShortcodes: [Object],
                  nunjucksAsyncPairedShortcodes: {},
                  nunjucksPairedShortcodes: {},
                  javascriptFunctions: [Object],
                  javascriptShortcodes: [Object],
                  javascriptPairedShortcodes: {},
                  javascriptFilters: [Object],
                  markdownHighlighter: null,
                  libraryOverrides: {},
                  dynamicPermalinks: true,
                  useGitIgnore: true,
                  ignores: [Set],
                  watchIgnores: [Set],
                  dataDeepMerge: true,
                  watchJavaScriptDependencies: true,
                  additionalWatchTargets: [],
                  watchTargetsConfigReset: Set(0) {},
                  serverOptions: {},
                  chokidarConfig: {},
                  watchThrottleWaitTime: 0,
                  frontMatterParsingOptions: [Object],
                  dataExtensions: Map(0) {},
                  extensionMap: Set(0) {},
                  quietMode: false,
                  events: [AsyncEventEmitter],
                  benchmarkManager: [BenchmarkManager],
                  plugins: [Array],
                  useTemplateCache: true,
                  precompiledCollections: {},
                  dataFilterSelectors: Set(0) {},
                  libraryAmendments: {},
                  serverPassthroughCopyBehavior: 'copy',
                  urlTransforms: [],
                  virtualTemplates: {},
                  freezeReservedData: true,
                  customDateParsing: Set(0) {},
                  errorReporting: {},
                  templateHandling: {},
                  uses: [GlobalDependencyMap]
                },
                verbose: true
              },
              config: {
                templateFormats: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                pathPrefix: '/',
                markdownTemplateEngine: 'liquid',
                htmlTemplateEngine: 'njk',
                dataFileSuffixes: [ '.11tydata', '' ],
                dataFileDirBaseNameOverride: false,
                keys: {
                  package: 'pkg',
                  layout: 'layout',
                  permalink: 'permalink',
                  permalinkRoot: 'permalinkBypassOutputDir',
                  engineOverride: 'templateEngineOverride',
                  computed: 'eleventyComputed',
                  dataSchema: 'eleventyDataSchema'
                },
                dir: {
                  input: 'src',
                  includes: '_includes',
                  data: '_data',
                  output: 'dist'
                },
                nunjucksFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn]
                },
                directories: {
                  input: [Getter],
                  inputFile: [Getter],
                  inputGlob: [Getter],
                  data: [Getter],
                  includes: [Getter],
                  layouts: [Getter],
                  output: [Getter]
                },
                transforms: {
                  '@11ty/eleventy-bundle': [Function: fn],
                  '@11ty/eleventy/html-transformer': [Function: fn],
                  '@11ty/eleventy-bundle/delayed': [Function: fn]
                },
                linters: {},
                preprocessors: {},
                globalData: {},
                layoutAliases: {},
                layoutResolution: true,
                passthroughCopiesHtmlRelative: Set(0) {},
                passthroughCopies: {},
                liquidOptions: {},
                liquidTags: {},
                liquidFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                liquidShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                liquidPairedShortcodes: {},
                liquidParameterParsing: 'legacy',
                nunjucksEnvironmentOptions: {
                  dev: true,
                  autoescape: true,
                  throwOnUndefined: false,
                  trimBlocks: false,
                  lstripBlocks: false
                },
                nunjucksPrecompiledTemplates: {},
                nunjucksAsyncFilters: {
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                nunjucksTags: {},
                nunjucksGlobals: {},
                nunjucksAsyncShortcodes: {},
                nunjucksShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                nunjucksAsyncPairedShortcodes: {},
                nunjucksPairedShortcodes: {},
                javascriptFunctions: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn],
                  console: [Function: fn]
                },
                javascriptShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                javascriptPairedShortcodes: {},
                javascriptFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                markdownHighlighter: null,
                libraryOverrides: {},
                dynamicPermalinks: true,
                useGitIgnore: true,
                ignores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                watchIgnores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                dataDeepMerge: true,
                watchJavaScriptDependencies: true,
                additionalWatchTargets: [],
                watchTargetsConfigReset: Set(0) {},
                serverOptions: {},
                chokidarConfig: {},
                watchThrottleWaitTime: 0,
                frontMatterParsingOptions: {
                  engines: [Object],
                  filePath: './src/posts/neural-networks.md'
                },
                dataExtensions: Map(0) {},
                extensionMap: Set(0) {},
                quietMode: false,
                events: AsyncEventEmitter {
                  _events: [Object: null prototype],
                  _eventsCount: 7,
                  _maxListeners: 25,
                  [Symbol(shapeMode)]: false,
                  [Symbol(kCapture)]: false
                },
                benchmarkManager: BenchmarkManager {
                  benchmarkGroups: [Object],
                  isVerbose: true,
                  start: 256.488008
                },
                plugins: [ [Object], [Object], [Object] ],
                useTemplateCache: true,
                precompiledCollections: {},
                dataFilterSelectors: Set(0) {},
                libraryAmendments: {},
                serverPassthroughCopyBehavior: 'copy',
                urlTransforms: [],
                virtualTemplates: {},
                freezeReservedData: true,
                customDateParsing: Set(0) {},
                errorReporting: {},
                templateHandling: {},
                uses: GlobalDependencyMap { isEsm: true }
              },
              benchmarks: {
                data: BenchmarkGroup {
                  benchmarks: {},
                  isVerbose: true,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                },
                aggregate: BenchmarkGroup {
                  benchmarks: [Object],
                  isVerbose: false,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                }
              },
              rawImports: {
                pkg: {
                  name: 'stringify-and-view',
                  version: '0.0.1',
                  main: 'app/index.js',
                  license: 'MIT',
                  author: 'dazza',
                  type: 'module',
                  scripts: [Object],
                  dependencies: [Object],
                  devDependencies: [Object]
                }
              },
              globalData: Promise {
                {
                  eleventy: [Object],
                  pkg: [Object]
                }
              },
              templateDirectoryData: {
                './src/index.njk': {},
                './src/posts/ai-ethics.md': {},
                './src/posts/computer-vision.md': {},
                './src/posts/machine-learning-basics.md': {},
                './src/posts/natural-language-processing.md': {},
                './src/posts/neural-networks.md': {}
              },
              isEsm: true,
              initialGlobalData: TemplateDataInitialGlobalData {
                templateConfig: TemplateConfig {
                  overrides: {},
                  projectConfigPaths: [Array],
                  customRootConfig: null,
                  hasConfigMerged: true,
                  isEsm: true,
                  logger: [ConsoleLogger],
                  directories: [ProjectDirectories],
                  rootConfig: [Object],
                  config: [Object],
                  verbose: true
                },
                config: {
                  templateFormats: [Array],
                  pathPrefix: '/',
                  markdownTemplateEngine: 'liquid',
                  htmlTemplateEngine: 'njk',
                  dataFileSuffixes: [Array],
                  dataFileDirBaseNameOverride: false,
                  keys: [Object],
                  dir: [Object],
                  nunjucksFilters: [Object],
                  directories: [Object],
                  transforms: [Object],
                  linters: {},
                  preprocessors: {},
                  globalData: {},
                  layoutAliases: {},
                  layoutResolution: true,
                  passthroughCopiesHtmlRelative: Set(0) {},
                  passthroughCopies: {},
                  liquidOptions: {},
                  liquidTags: {},
                  liquidFilters: [Object],
                  liquidShortcodes: [Object],
                  liquidPairedShortcodes: {},
                  liquidParameterParsing: 'legacy',
                  nunjucksEnvironmentOptions: [Object],
                  nunjucksPrecompiledTemplates: {},
                  nunjucksAsyncFilters: [Object],
                  nunjucksTags: {},
                  nunjucksGlobals: {},
                  nunjucksAsyncShortcodes: {},
                  nunjucksShortcodes: [Object],
                  nunjucksAsyncPairedShortcodes: {},
                  nunjucksPairedShortcodes: {},
                  javascriptFunctions: [Object],
                  javascriptShortcodes: [Object],
                  javascriptPairedShortcodes: {},
                  javascriptFilters: [Object],
                  markdownHighlighter: null,
                  libraryOverrides: {},
                  dynamicPermalinks: true,
                  useGitIgnore: true,
                  ignores: [Set],
                  watchIgnores: [Set],
                  dataDeepMerge: true,
                  watchJavaScriptDependencies: true,
                  additionalWatchTargets: [],
                  watchTargetsConfigReset: Set(0) {},
                  serverOptions: {},
                  chokidarConfig: {},
                  watchThrottleWaitTime: 0,
                  frontMatterParsingOptions: [Object],
                  dataExtensions: Map(0) {},
                  extensionMap: Set(0) {},
                  quietMode: false,
                  events: [AsyncEventEmitter],
                  benchmarkManager: [BenchmarkManager],
                  plugins: [Array],
                  useTemplateCache: true,
                  precompiledCollections: {},
                  dataFilterSelectors: Set(0) {},
                  libraryAmendments: {},
                  serverPassthroughCopyBehavior: 'copy',
                  urlTransforms: [],
                  virtualTemplates: {},
                  freezeReservedData: true,
                  customDateParsing: Set(0) {},
                  errorReporting: {},
                  templateHandling: {},
                  uses: [GlobalDependencyMap]
                }
              },
              _extensionMap: EleventyExtensionMap {
                templateConfig: TemplateConfig {
                  overrides: {},
                  projectConfigPaths: [Array],
                  customRootConfig: null,
                  hasConfigMerged: true,
                  isEsm: true,
                  logger: [ConsoleLogger],
                  directories: [ProjectDirectories],
                  rootConfig: [Object],
                  config: [Object],
                  verbose: true
                },
                _spiderJsDepsCache: {},
                formatKeys: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                unfilteredFormatKeys: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                _extensionToKeyMap: {
                  md: [Object],
                  html: [Object],
                  njk: [Object],
                  liquid: [Object],
                  '11ty.js': [Object],
                  '11ty.cjs': [Object],
                  '11ty.mjs': [Object]
                },
                validTemplateLanguageKeys: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                passthroughCopyKeys: []
              },
              _env: {
                source: 'cli',
                runMode: 'build',
                config: '/opt/build/repo/eleventy.config.js',
                root: '/opt/build/repo'
              },
              fileSystemSearch: FileSystemSearch {
                inputs: {
                  'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': [Object],
                  'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': [Object]
                },
                outputs: {
                  'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': [Set],
                  'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': Set(0) {}
                },
                promises: {
                  'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': [Promise],
                  'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': [Promise]
                },
                count: 2
              },
              configApiGlobalData: Promise { { eleventy: [Object] } },
              pathCache: []
            },
            fileSlug: TemplateFileSlug {
              inputPath: 'posts/natural-language-processing.md',
              cleanInputPath: 'posts/natural-language-processing.md',
              dirs: [ 'posts' ],
              parsed: {
                root: '',
                dir: 'posts',
                base: 'natural-language-processing.md',
                ext: '.md',
                name: 'natural-language-processing'
              },
              filenameNoExt: 'natural-language-processing'
            },
            fileSlugStr: 'natural-language-processing',
            filePathStem: '/posts/natural-language-processing',
            linters: [],
            transforms: {
              '@11ty/eleventy-bundle': [Function: fn],
              '@11ty/eleventy/html-transformer': [Function: fn],
              '@11ty/eleventy-bundle/delayed': [Function: fn]
            },
            isVerbose: true,
            isDryRun: false,
            writeCount: 0,
            outputFormat: 'fs',
            behavior: TemplateBehavior {
              render: true,
              write: true,
              outputFormat: 'fs',
              config: {
                templateFormats: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                pathPrefix: '/',
                markdownTemplateEngine: 'liquid',
                htmlTemplateEngine: 'njk',
                dataFileSuffixes: [ '.11tydata', '' ],
                dataFileDirBaseNameOverride: false,
                keys: {
                  package: 'pkg',
                  layout: 'layout',
                  permalink: 'permalink',
                  permalinkRoot: 'permalinkBypassOutputDir',
                  engineOverride: 'templateEngineOverride',
                  computed: 'eleventyComputed',
                  dataSchema: 'eleventyDataSchema'
                },
                dir: {
                  input: 'src',
                  includes: '_includes',
                  data: '_data',
                  output: 'dist'
                },
                nunjucksFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn]
                },
                directories: {
                  input: [Getter],
                  inputFile: [Getter],
                  inputGlob: [Getter],
                  data: [Getter],
                  includes: [Getter],
                  layouts: [Getter],
                  output: [Getter]
                },
                transforms: {
                  '@11ty/eleventy-bundle': [Function: fn],
                  '@11ty/eleventy/html-transformer': [Function: fn],
                  '@11ty/eleventy-bundle/delayed': [Function: fn]
                },
                linters: {},
                preprocessors: {},
                globalData: {},
                layoutAliases: {},
                layoutResolution: true,
                passthroughCopiesHtmlRelative: Set(0) {},
                passthroughCopies: {},
                liquidOptions: {},
                liquidTags: {},
                liquidFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                liquidShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                liquidPairedShortcodes: {},
                liquidParameterParsing: 'legacy',
                nunjucksEnvironmentOptions: {
                  dev: true,
                  autoescape: true,
                  throwOnUndefined: false,
                  trimBlocks: false,
                  lstripBlocks: false
                },
                nunjucksPrecompiledTemplates: {},
                nunjucksAsyncFilters: {
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                nunjucksTags: {},
                nunjucksGlobals: {},
                nunjucksAsyncShortcodes: {},
                nunjucksShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                nunjucksAsyncPairedShortcodes: {},
                nunjucksPairedShortcodes: {},
                javascriptFunctions: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn],
                  console: [Function: fn]
                },
                javascriptShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                javascriptPairedShortcodes: {},
                javascriptFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                markdownHighlighter: null,
                libraryOverrides: {},
                dynamicPermalinks: true,
                useGitIgnore: true,
                ignores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                watchIgnores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                dataDeepMerge: true,
                watchJavaScriptDependencies: true,
                additionalWatchTargets: [],
                watchTargetsConfigReset: Set(0) {},
                serverOptions: {},
                chokidarConfig: {},
                watchThrottleWaitTime: 0,
                frontMatterParsingOptions: {
                  engines: [Object],
                  filePath: './src/posts/neural-networks.md'
                },
                dataExtensions: Map(0) {},
                extensionMap: Set(0) {},
                quietMode: false,
                events: AsyncEventEmitter {
                  _events: [Object: null prototype],
                  _eventsCount: 7,
                  _maxListeners: 25,
                  [Symbol(shapeMode)]: false,
                  [Symbol(kCapture)]: false
                },
                benchmarkManager: BenchmarkManager {
                  benchmarkGroups: [Object],
                  isVerbose: true,
                  start: 256.488008
                },
                plugins: [ [Object], [Object], [Object] ],
                useTemplateCache: true,
                precompiledCollections: {},
                dataFilterSelectors: Set(0) {},
                libraryAmendments: {},
                serverPassthroughCopyBehavior: 'copy',
                urlTransforms: [],
                virtualTemplates: {},
                freezeReservedData: true,
                customDateParsing: Set(0) {},
                errorReporting: {},
                templateHandling: {},
                uses: GlobalDependencyMap { isEsm: true }
              },
              renderableOverride: undefined
            },
            renderCount: 0,
            _dataCache: Promise {
              {
                eleventy: {
                  version: '3.1.1',
                  generator: 'Eleventy v3.1.1',
                  env: [Object],
                  directories: [Object]
                },
                pkg: {
                  name: 'stringify-and-view',
                  version: '0.0.1',
                  main: 'app/index.js',
                  license: 'MIT',
                  author: 'dazza',
                  type: 'module',
                  scripts: [Object],
                  dependencies: [Object],
                  devDependencies: [Object]
                },
                title: 'Natural Language Processing',
                page: {
                  inputPath: './src/posts/natural-language-processing.md',
                  fileSlug: 'natural-language-processing',
                  filePathStem: '/posts/natural-language-processing',
                  outputFileExtension: 'html',
                  templateSyntax: 'liquid,md',
                  date: 2025-07-17T13:59:35.706Z,
                  rawInput: '\n' +
                    'Natural Language Processing (NLP) is a branch of AI that focuses on the interaction between computers and human language. It enables machines to read, understand, and derive meaning from human languages. Modern NLP systems can perform tasks like translation, sentiment analysis, and text generation with remarkable accuracy. The development of transformer models like GPT and BERT has revolutionized the field, making it possible to create more sophisticated and context-aware language applications. ',
                  url: '/posts/natural-language-processing/',
                  outputPath: './dist/posts/natural-language-processing/index.html'
                },
                collections: [Circular *2]
              }
            },
            inputContent: Promise {
              '---\n' +
                'title: Natural Language Processing\n' +
                '---\n' +
                '\n' +
                'Natural Language Processing (NLP) is a branch of AI that focuses on the interaction between computers and human language. It enables machines to read, understand, and derive meaning from human languages. Modern NLP systems can perform tasks like translation, sentiment analysis, and text generation with remarkable accuracy. The development of transformer models like GPT and BERT has revolutionized the field, making it possible to create more sophisticated and context-aware language applications. '
            },
            readingPromise: Promise {
              {
                content: '\n' +
                  'Natural Language Processing (NLP) is a branch of AI that focuses on the interaction between computers and human language. It enables machines to read, understand, and derive meaning from human languages. Modern NLP systems can perform tasks like translation, sentiment analysis, and text generation with remarkable accuracy. The development of transformer models like GPT and BERT has revolutionized the field, making it possible to create more sophisticated and context-aware language applications. ',
                data: {
                  title: 'Natural Language Processing'
                },
                isEmpty: false,
                excerpt: ''
              }
            },
            _frontMatterDataCache: Promise {
              {
                data: {
                  title: 'Natural Language Processing'
                },
                excerpt: ''
              }
            },
            _stats: Promise {
              Stats {
                dev: 2097263,
                mode: 33188,
                nlink: 1,
                uid: 2500,
                gid: 0,
                rdev: 0,
                blksize: 4096,
                ino: 311503427,
                size: 544,
                blocks: 8,
                atimeMs: 1752760783246.0996,
                mtimeMs: 1752760775706.1038,
                ctimeMs: 1752760775730.1038,
                birthtimeMs: 1752760775706.1038
              }
            },
            _usePermalinkRoot: undefined
          },
          rawInput: '\n' +
            'Natural Language Processing (NLP) is a branch of AI that focuses on the interaction between computers and human language. It enables machines to read, understand, and derive meaning from human languages. Modern NLP systems can perform tasks like translation, sentiment analysis, and text generation with remarkable accuracy. The development of transformer models like GPT and BERT has revolutionized the field, making it possible to create more sophisticated and context-aware language applications. ',
          groupNumber: 0,
          data: {
            eleventy: {
              version: '3.1.1',
              generator: 'Eleventy v3.1.1',
              env: {
                source: 'cli',
                runMode: 'build',
                config: '/opt/build/repo/eleventy.config.js',
                root: '/opt/build/repo'
              },
              directories: {
                input: './src/',
                inputFile: undefined,
                inputGlob: undefined,
                data: './src/_data/',
                includes: './src/_includes/',
                layouts: undefined,
                output: './dist/'
              }
            },
            pkg: {
              name: 'stringify-and-view',
              version: '0.0.1',
              main: 'app/index.js',
              license: 'MIT',
              author: 'dazza',
              type: 'module',
              scripts: {
                dev: 'rimraf dist build && eleventy --serve --quiet',
                build: 'eleventy ',
                test: 'vitest run',
                'test:watch': 'vitest'
              },
              dependencies: {
                'eleventy-plugin-console-plus': '^0.1.1'
              },
              devDependencies: {
                '@11ty/eleventy': '^3.1.1',
                jsdom: '^26.1.0',
                rimraf: '^6.0.1',
                vitest: '^3.2.1'
              }
            },
            title: 'Natural Language Processing',
            page: {
              inputPath: './src/posts/natural-language-processing.md',
              fileSlug: 'natural-language-processing',
              filePathStem: '/posts/natural-language-processing',
              outputFileExtension: 'html',
              templateSyntax: 'liquid,md',
              date: 2025-07-17T13:59:35.706Z,
              rawInput: '\n' +
                'Natural Language Processing (NLP) is a branch of AI that focuses on the interaction between computers and human language. It enables machines to read, understand, and derive meaning from human languages. Modern NLP systems can perform tasks like translation, sentiment analysis, and text generation with remarkable accuracy. The development of transformer models like GPT and BERT has revolutionized the field, making it possible to create more sophisticated and context-aware language applications. ',
              url: '/posts/natural-language-processing/',
              outputPath: './dist/posts/natural-language-processing/index.html'
            },
            collections: [Circular *2]
          },
          page: {
            inputPath: './src/posts/natural-language-processing.md',
            fileSlug: 'natural-language-processing',
            filePathStem: '/posts/natural-language-processing',
            outputFileExtension: 'html',
            templateSyntax: 'liquid,md',
            date: 2025-07-17T13:59:35.706Z,
            rawInput: '\n' +
              'Natural Language Processing (NLP) is a branch of AI that focuses on the interaction between computers and human language. It enables machines to read, understand, and derive meaning from human languages. Modern NLP systems can perform tasks like translation, sentiment analysis, and text generation with remarkable accuracy. The development of transformer models like GPT and BERT has revolutionized the field, making it possible to create more sophisticated and context-aware language applications. ',
            url: '/posts/natural-language-processing/',
            outputPath: './dist/posts/natural-language-processing/index.html'
          },
          inputPath: './src/posts/natural-language-processing.md',
          fileSlug: 'natural-language-processing',
          filePathStem: '/posts/natural-language-processing',
          date: 2025-07-17T13:59:35.706Z,
          outputPath: './dist/posts/natural-language-processing/index.html',
          url: '/posts/natural-language-processing/',
          templateContent: [Getter/Setter],
          content: [Getter/Setter]
        },
        {
          template: Template {
            inputPath: './src/posts/neural-networks.md',
            parsed: {
              root: '',
              dir: './src/posts',
              base: 'neural-networks.md',
              ext: '.md',
              name: 'neural-networks'
            },
            extraOutputSubdirectory: '',
            templateData: TemplateData {
              templateConfig: TemplateConfig {
                overrides: {},
                projectConfigPaths: [
                  '.eleventy.js',
                  'eleventy.config.js',
                  'eleventy.config.mjs',
                  'eleventy.config.cjs'
                ],
                customRootConfig: null,
                hasConfigMerged: true,
                isEsm: true,
                logger: ConsoleLogger {
                  outputStream: [Readable]
                },
                directories: ProjectDirectories {
                  inputFile: undefined,
                  inputGlob: undefined
                },
                rootConfig: {
                  templateFormats: [Array],
                  pathPrefix: '/',
                  markdownTemplateEngine: 'liquid',
                  htmlTemplateEngine: 'liquid',
                  dataFileSuffixes: [Array],
                  dataFileDirBaseNameOverride: false,
                  keys: [Object],
                  dir: [Object],
                  nunjucksFilters: {}
                },
                config: {
                  templateFormats: [Array],
                  pathPrefix: '/',
                  markdownTemplateEngine: 'liquid',
                  htmlTemplateEngine: 'njk',
                  dataFileSuffixes: [Array],
                  dataFileDirBaseNameOverride: false,
                  keys: [Object],
                  dir: [Object],
                  nunjucksFilters: [Object],
                  directories: [Object],
                  transforms: [Object],
                  linters: {},
                  preprocessors: {},
                  globalData: {},
                  layoutAliases: {},
                  layoutResolution: true,
                  passthroughCopiesHtmlRelative: Set(0) {},
                  passthroughCopies: {},
                  liquidOptions: {},
                  liquidTags: {},
                  liquidFilters: [Object],
                  liquidShortcodes: [Object],
                  liquidPairedShortcodes: {},
                  liquidParameterParsing: 'legacy',
                  nunjucksEnvironmentOptions: [Object],
                  nunjucksPrecompiledTemplates: {},
                  nunjucksAsyncFilters: [Object],
                  nunjucksTags: {},
                  nunjucksGlobals: {},
                  nunjucksAsyncShortcodes: {},
                  nunjucksShortcodes: [Object],
                  nunjucksAsyncPairedShortcodes: {},
                  nunjucksPairedShortcodes: {},
                  javascriptFunctions: [Object],
                  javascriptShortcodes: [Object],
                  javascriptPairedShortcodes: {},
                  javascriptFilters: [Object],
                  markdownHighlighter: null,
                  libraryOverrides: {},
                  dynamicPermalinks: true,
                  useGitIgnore: true,
                  ignores: [Set],
                  watchIgnores: [Set],
                  dataDeepMerge: true,
                  watchJavaScriptDependencies: true,
                  additionalWatchTargets: [],
                  watchTargetsConfigReset: Set(0) {},
                  serverOptions: {},
                  chokidarConfig: {},
                  watchThrottleWaitTime: 0,
                  frontMatterParsingOptions: [Object],
                  dataExtensions: Map(0) {},
                  extensionMap: Set(0) {},
                  quietMode: false,
                  events: [AsyncEventEmitter],
                  benchmarkManager: [BenchmarkManager],
                  plugins: [Array],
                  useTemplateCache: true,
                  precompiledCollections: {},
                  dataFilterSelectors: Set(0) {},
                  libraryAmendments: {},
                  serverPassthroughCopyBehavior: 'copy',
                  urlTransforms: [],
                  virtualTemplates: {},
                  freezeReservedData: true,
                  customDateParsing: Set(0) {},
                  errorReporting: {},
                  templateHandling: {},
                  uses: [GlobalDependencyMap]
                },
                verbose: true
              },
              config: {
                templateFormats: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                pathPrefix: '/',
                markdownTemplateEngine: 'liquid',
                htmlTemplateEngine: 'njk',
                dataFileSuffixes: [ '.11tydata', '' ],
                dataFileDirBaseNameOverride: false,
                keys: {
                  package: 'pkg',
                  layout: 'layout',
                  permalink: 'permalink',
                  permalinkRoot: 'permalinkBypassOutputDir',
                  engineOverride: 'templateEngineOverride',
                  computed: 'eleventyComputed',
                  dataSchema: 'eleventyDataSchema'
                },
                dir: {
                  input: 'src',
                  includes: '_includes',
                  data: '_data',
                  output: 'dist'
                },
                nunjucksFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn]
                },
                directories: {
                  input: [Getter],
                  inputFile: [Getter],
                  inputGlob: [Getter],
                  data: [Getter],
                  includes: [Getter],
                  layouts: [Getter],
                  output: [Getter]
                },
                transforms: {
                  '@11ty/eleventy-bundle': [Function: fn],
                  '@11ty/eleventy/html-transformer': [Function: fn],
                  '@11ty/eleventy-bundle/delayed': [Function: fn]
                },
                linters: {},
                preprocessors: {},
                globalData: {},
                layoutAliases: {},
                layoutResolution: true,
                passthroughCopiesHtmlRelative: Set(0) {},
                passthroughCopies: {},
                liquidOptions: {},
                liquidTags: {},
                liquidFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                liquidShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                liquidPairedShortcodes: {},
                liquidParameterParsing: 'legacy',
                nunjucksEnvironmentOptions: {
                  dev: true,
                  autoescape: true,
                  throwOnUndefined: false,
                  trimBlocks: false,
                  lstripBlocks: false
                },
                nunjucksPrecompiledTemplates: {},
                nunjucksAsyncFilters: {
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                nunjucksTags: {},
                nunjucksGlobals: {},
                nunjucksAsyncShortcodes: {},
                nunjucksShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                nunjucksAsyncPairedShortcodes: {},
                nunjucksPairedShortcodes: {},
                javascriptFunctions: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn],
                  console: [Function: fn]
                },
                javascriptShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                javascriptPairedShortcodes: {},
                javascriptFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                markdownHighlighter: null,
                libraryOverrides: {},
                dynamicPermalinks: true,
                useGitIgnore: true,
                ignores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                watchIgnores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                dataDeepMerge: true,
                watchJavaScriptDependencies: true,
                additionalWatchTargets: [],
                watchTargetsConfigReset: Set(0) {},
                serverOptions: {},
                chokidarConfig: {},
                watchThrottleWaitTime: 0,
                frontMatterParsingOptions: {
                  engines: [Object],
                  filePath: './src/posts/neural-networks.md'
                },
                dataExtensions: Map(0) {},
                extensionMap: Set(0) {},
                quietMode: false,
                events: AsyncEventEmitter {
                  _events: [Object: null prototype],
                  _eventsCount: 7,
                  _maxListeners: 25,
                  [Symbol(shapeMode)]: false,
                  [Symbol(kCapture)]: false
                },
                benchmarkManager: BenchmarkManager {
                  benchmarkGroups: [Object],
                  isVerbose: true,
                  start: 256.488008
                },
                plugins: [ [Object], [Object], [Object] ],
                useTemplateCache: true,
                precompiledCollections: {},
                dataFilterSelectors: Set(0) {},
                libraryAmendments: {},
                serverPassthroughCopyBehavior: 'copy',
                urlTransforms: [],
                virtualTemplates: {},
                freezeReservedData: true,
                customDateParsing: Set(0) {},
                errorReporting: {},
                templateHandling: {},
                uses: GlobalDependencyMap { isEsm: true }
              },
              benchmarks: {
                data: BenchmarkGroup {
                  benchmarks: {},
                  isVerbose: true,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                },
                aggregate: BenchmarkGroup {
                  benchmarks: [Object],
                  isVerbose: false,
                  logger: [ConsoleLogger],
                  minimumThresholdMs: 50,
                  minimumThresholdPercent: 8
                }
              },
              rawImports: {
                pkg: {
                  name: 'stringify-and-view',
                  version: '0.0.1',
                  main: 'app/index.js',
                  license: 'MIT',
                  author: 'dazza',
                  type: 'module',
                  scripts: [Object],
                  dependencies: [Object],
                  devDependencies: [Object]
                }
              },
              globalData: Promise {
                {
                  eleventy: [Object],
                  pkg: [Object]
                }
              },
              templateDirectoryData: {
                './src/index.njk': {},
                './src/posts/ai-ethics.md': {},
                './src/posts/computer-vision.md': {},
                './src/posts/machine-learning-basics.md': {},
                './src/posts/natural-language-processing.md': {},
                './src/posts/neural-networks.md': {}
              },
              isEsm: true,
              initialGlobalData: TemplateDataInitialGlobalData {
                templateConfig: TemplateConfig {
                  overrides: {},
                  projectConfigPaths: [Array],
                  customRootConfig: null,
                  hasConfigMerged: true,
                  isEsm: true,
                  logger: [ConsoleLogger],
                  directories: [ProjectDirectories],
                  rootConfig: [Object],
                  config: [Object],
                  verbose: true
                },
                config: {
                  templateFormats: [Array],
                  pathPrefix: '/',
                  markdownTemplateEngine: 'liquid',
                  htmlTemplateEngine: 'njk',
                  dataFileSuffixes: [Array],
                  dataFileDirBaseNameOverride: false,
                  keys: [Object],
                  dir: [Object],
                  nunjucksFilters: [Object],
                  directories: [Object],
                  transforms: [Object],
                  linters: {},
                  preprocessors: {},
                  globalData: {},
                  layoutAliases: {},
                  layoutResolution: true,
                  passthroughCopiesHtmlRelative: Set(0) {},
                  passthroughCopies: {},
                  liquidOptions: {},
                  liquidTags: {},
                  liquidFilters: [Object],
                  liquidShortcodes: [Object],
                  liquidPairedShortcodes: {},
                  liquidParameterParsing: 'legacy',
                  nunjucksEnvironmentOptions: [Object],
                  nunjucksPrecompiledTemplates: {},
                  nunjucksAsyncFilters: [Object],
                  nunjucksTags: {},
                  nunjucksGlobals: {},
                  nunjucksAsyncShortcodes: {},
                  nunjucksShortcodes: [Object],
                  nunjucksAsyncPairedShortcodes: {},
                  nunjucksPairedShortcodes: {},
                  javascriptFunctions: [Object],
                  javascriptShortcodes: [Object],
                  javascriptPairedShortcodes: {},
                  javascriptFilters: [Object],
                  markdownHighlighter: null,
                  libraryOverrides: {},
                  dynamicPermalinks: true,
                  useGitIgnore: true,
                  ignores: [Set],
                  watchIgnores: [Set],
                  dataDeepMerge: true,
                  watchJavaScriptDependencies: true,
                  additionalWatchTargets: [],
                  watchTargetsConfigReset: Set(0) {},
                  serverOptions: {},
                  chokidarConfig: {},
                  watchThrottleWaitTime: 0,
                  frontMatterParsingOptions: [Object],
                  dataExtensions: Map(0) {},
                  extensionMap: Set(0) {},
                  quietMode: false,
                  events: [AsyncEventEmitter],
                  benchmarkManager: [BenchmarkManager],
                  plugins: [Array],
                  useTemplateCache: true,
                  precompiledCollections: {},
                  dataFilterSelectors: Set(0) {},
                  libraryAmendments: {},
                  serverPassthroughCopyBehavior: 'copy',
                  urlTransforms: [],
                  virtualTemplates: {},
                  freezeReservedData: true,
                  customDateParsing: Set(0) {},
                  errorReporting: {},
                  templateHandling: {},
                  uses: [GlobalDependencyMap]
                }
              },
              _extensionMap: EleventyExtensionMap {
                templateConfig: TemplateConfig {
                  overrides: {},
                  projectConfigPaths: [Array],
                  customRootConfig: null,
                  hasConfigMerged: true,
                  isEsm: true,
                  logger: [ConsoleLogger],
                  directories: [ProjectDirectories],
                  rootConfig: [Object],
                  config: [Object],
                  verbose: true
                },
                _spiderJsDepsCache: {},
                formatKeys: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                unfilteredFormatKeys: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                _extensionToKeyMap: {
                  md: [Object],
                  html: [Object],
                  njk: [Object],
                  liquid: [Object],
                  '11ty.js': [Object],
                  '11ty.cjs': [Object],
                  '11ty.mjs': [Object]
                },
                validTemplateLanguageKeys: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                passthroughCopyKeys: []
              },
              _env: {
                source: 'cli',
                runMode: 'build',
                config: '/opt/build/repo/eleventy.config.js',
                root: '/opt/build/repo'
              },
              fileSystemSearch: FileSystemSearch {
                inputs: {
                  'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': [Object],
                  'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': [Object]
                },
                outputs: {
                  'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': [Set],
                  'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': Set(0) {}
                },
                promises: {
                  'templates["src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}"]{"ignore":["node_modules/**",".env","dist","dist/**","src/_includes/**","src/_data/**","**/node_modules/**",".git/**"]}': [Promise],
                  'global-data["src/_data/**/*.{json,mjs,cjs,js}"]{}': [Promise]
                },
                count: 2
              },
              configApiGlobalData: Promise { { eleventy: [Object] } },
              pathCache: []
            },
            fileSlug: TemplateFileSlug {
              inputPath: 'posts/neural-networks.md',
              cleanInputPath: 'posts/neural-networks.md',
              dirs: [ 'posts' ],
              parsed: {
                root: '',
                dir: 'posts',
                base: 'neural-networks.md',
                ext: '.md',
                name: 'neural-networks'
              },
              filenameNoExt: 'neural-networks'
            },
            fileSlugStr: 'neural-networks',
            filePathStem: '/posts/neural-networks',
            linters: [],
            transforms: {
              '@11ty/eleventy-bundle': [Function: fn],
              '@11ty/eleventy/html-transformer': [Function: fn],
              '@11ty/eleventy-bundle/delayed': [Function: fn]
            },
            isVerbose: true,
            isDryRun: false,
            writeCount: 0,
            outputFormat: 'fs',
            behavior: TemplateBehavior {
              render: true,
              write: true,
              outputFormat: 'fs',
              config: {
                templateFormats: [
                  'liquid',
                  'md',
                  'njk',
                  'html',
                  '11ty.js'
                ],
                pathPrefix: '/',
                markdownTemplateEngine: 'liquid',
                htmlTemplateEngine: 'njk',
                dataFileSuffixes: [ '.11tydata', '' ],
                dataFileDirBaseNameOverride: false,
                keys: {
                  package: 'pkg',
                  layout: 'layout',
                  permalink: 'permalink',
                  permalinkRoot: 'permalinkBypassOutputDir',
                  engineOverride: 'templateEngineOverride',
                  computed: 'eleventyComputed',
                  dataSchema: 'eleventyDataSchema'
                },
                dir: {
                  input: 'src',
                  includes: '_includes',
                  data: '_data',
                  output: 'dist'
                },
                nunjucksFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn]
                },
                directories: {
                  input: [Getter],
                  inputFile: [Getter],
                  inputGlob: [Getter],
                  data: [Getter],
                  includes: [Getter],
                  layouts: [Getter],
                  output: [Getter]
                },
                transforms: {
                  '@11ty/eleventy-bundle': [Function: fn],
                  '@11ty/eleventy/html-transformer': [Function: fn],
                  '@11ty/eleventy-bundle/delayed': [Function: fn]
                },
                linters: {},
                preprocessors: {},
                globalData: {},
                layoutAliases: {},
                layoutResolution: true,
                passthroughCopiesHtmlRelative: Set(0) {},
                passthroughCopies: {},
                liquidOptions: {},
                liquidTags: {},
                liquidFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                liquidShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                liquidPairedShortcodes: {},
                liquidParameterParsing: 'legacy',
                nunjucksEnvironmentOptions: {
                  dev: true,
                  autoescape: true,
                  throwOnUndefined: false,
                  trimBlocks: false,
                  lstripBlocks: false
                },
                nunjucksPrecompiledTemplates: {},
                nunjucksAsyncFilters: {
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                nunjucksTags: {},
                nunjucksGlobals: {},
                nunjucksAsyncShortcodes: {},
                nunjucksShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                nunjucksAsyncPairedShortcodes: {},
                nunjucksPairedShortcodes: {},
                javascriptFunctions: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn],
                  console: [Function: fn]
                },
                javascriptShortcodes: {
                  getBundle: [Function: fn],
                  getBundleFileUrl: [Function: fn],
                  console: [Function: fn]
                },
                javascriptPairedShortcodes: {},
                javascriptFilters: {
                  inputPathToUrl: [Function: fn],
                  slug: [Function: fn],
                  slugify: [Function: fn],
                  url: [Function: fn],
                  log: [Function: fn],
                  getCollectionItemIndex: [Function: fn],
                  getCollectionItem: [Function: fn],
                  getPreviousCollectionItem: [Function: fn],
                  getNextCollectionItem: [Function: fn],
                  renderTransforms: [Function: fn],
                  jsonViewer: [Function: fn]
                },
                markdownHighlighter: null,
                libraryOverrides: {},
                dynamicPermalinks: true,
                useGitIgnore: true,
                ignores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                watchIgnores: Set(2) {
                  '**/node_modules/**',
                  '.git/**'
                },
                dataDeepMerge: true,
                watchJavaScriptDependencies: true,
                additionalWatchTargets: [],
                watchTargetsConfigReset: Set(0) {},
                serverOptions: {},
                chokidarConfig: {},
                watchThrottleWaitTime: 0,
                frontMatterParsingOptions: {
                  engines: [Object],
                  filePath: './src/posts/neural-networks.md'
                },
                dataExtensions: Map(0) {},
                extensionMap: Set(0) {},
                quietMode: false,
                events: AsyncEventEmitter {
                  _events: [Object: null prototype],
                  _eventsCount: 7,
                  _maxListeners: 25,
                  [Symbol(shapeMode)]: false,
                  [Symbol(kCapture)]: false
                },
                benchmarkManager: BenchmarkManager {
                  benchmarkGroups: [Object],
                  isVerbose: true,
                  start: 256.488008
                },
                plugins: [ [Object], [Object], [Object] ],
                useTemplateCache: true,
                precompiledCollections: {},
                dataFilterSelectors: Set(0) {},
                libraryAmendments: {},
                serverPassthroughCopyBehavior: 'copy',
                urlTransforms: [],
                virtualTemplates: {},
                freezeReservedData: true,
                customDateParsing: Set(0) {},
                errorReporting: {},
                templateHandling: {},
                uses: GlobalDependencyMap { isEsm: true }
              },
              renderableOverride: undefined
            },
            renderCount: 0,
            _dataCache: Promise {
              {
                eleventy: {
                  version: '3.1.1',
                  generator: 'Eleventy v3.1.1',
                  env: [Object],
                  directories: [Object]
                },
                pkg: {
                  name: 'stringify-and-view',
                  version: '0.0.1',
                  main: 'app/index.js',
                  license: 'MIT',
                  author: 'dazza',
                  type: 'module',
                  scripts: [Object],
                  dependencies: [Object],
                  devDependencies: [Object]
                },
                title: 'Neural Networks',
                page: {
                  inputPath: './src/posts/neural-networks.md',
                  fileSlug: 'neural-networks',
                  filePathStem: '/posts/neural-networks',
                  outputFileExtension: 'html',
                  templateSyntax: 'liquid,md',
                  date: 2025-07-17T13:59:35.706Z,
                  rawInput: '\n' +
                    "Neural networks are computing systems inspired by the human brain's biological neural networks. They consist of layers of interconnected nodes (neurons) that process and transmit information. These networks excel at tasks like image recognition, natural language processing, and complex pattern recognition. The recent advances in deep learning have made neural networks more powerful than ever, enabling breakthroughs in AI applications across various industries. ",
                  url: '/posts/neural-networks/',
                  outputPath: './dist/posts/neural-networks/index.html'
                },
                collections: [Circular *2]
              }
            },
            inputContent: Promise {
              '---\n' +
                'title: Neural Networks\n' +
                '---\n' +
                '\n' +
                "Neural networks are computing systems inspired by the human brain's biological neural networks. They consist of layers of interconnected nodes (neurons) that process and transmit information. These networks excel at tasks like image recognition, natural language processing, and complex pattern recognition. The recent advances in deep learning have made neural networks more powerful than ever, enabling breakthroughs in AI applications across various industries. "
            },
            readingPromise: Promise {
              {
                content: '\n' +
                  "Neural networks are computing systems inspired by the human brain's biological neural networks. They consist of layers of interconnected nodes (neurons) that process and transmit information. These networks excel at tasks like image recognition, natural language processing, and complex pattern recognition. The recent advances in deep learning have made neural networks more powerful than ever, enabling breakthroughs in AI applications across various industries. ",
                data: { title: 'Neural Networks' },
                isEmpty: false,
                excerpt: ''
              }
            },
            _frontMatterDataCache: Promise {
              {
                data: { title: 'Neural Networks' },
                excerpt: ''
              }
            },
            _stats: Promise {
              Stats {
                dev: 2097263,
                mode: 33188,
                nlink: 1,
                uid: 2500,
                gid: 0,
                rdev: 0,
                blksize: 4096,
                ino: 311503428,
                size: 497,
                blocks: 8,
                atimeMs: 1752760783246.0996,
                mtimeMs: 1752760775706.1038,
                ctimeMs: 1752760775730.1038,
                birthtimeMs: 1752760775706.1038
              }
            },
            _usePermalinkRoot: undefined
          },
          rawInput: '\n' +
            "Neural networks are computing systems inspired by the human brain's biological neural networks. They consist of layers of interconnected nodes (neurons) that process and transmit information. These networks excel at tasks like image recognition, natural language processing, and complex pattern recognition. The recent advances in deep learning have made neural networks more powerful than ever, enabling breakthroughs in AI applications across various industries. ",
          groupNumber: 0,
          data: {
            eleventy: {
              version: '3.1.1',
              generator: 'Eleventy v3.1.1',
              env: {
                source: 'cli',
                runMode: 'build',
                config: '/opt/build/repo/eleventy.config.js',
                root: '/opt/build/repo'
              },
              directories: {
                input: './src/',
                inputFile: undefined,
                inputGlob: undefined,
                data: './src/_data/',
                includes: './src/_includes/',
                layouts: undefined,
                output: './dist/'
              }
            },
            pkg: {
              name: 'stringify-and-view',
              version: '0.0.1',
              main: 'app/index.js',
              license: 'MIT',
              author: 'dazza',
              type: 'module',
              scripts: {
                dev: 'rimraf dist build && eleventy --serve --quiet',
                build: 'eleventy ',
                test: 'vitest run',
                'test:watch': 'vitest'
              },
              dependencies: {
                'eleventy-plugin-console-plus': '^0.1.1'
              },
              devDependencies: {
                '@11ty/eleventy': '^3.1.1',
                jsdom: '^26.1.0',
                rimraf: '^6.0.1',
                vitest: '^3.2.1'
              }
            },
            title: 'Neural Networks',
            page: {
              inputPath: './src/posts/neural-networks.md',
              fileSlug: 'neural-networks',
              filePathStem: '/posts/neural-networks',
              outputFileExtension: 'html',
              templateSyntax: 'liquid,md',
              date: 2025-07-17T13:59:35.706Z,
              rawInput: '\n' +
                "Neural networks are computing systems inspired by the human brain's biological neural networks. They consist of layers of interconnected nodes (neurons) that process and transmit information. These networks excel at tasks like image recognition, natural language processing, and complex pattern recognition. The recent advances in deep learning have made neural networks more powerful than ever, enabling breakthroughs in AI applications across various industries. ",
              url: '/posts/neural-networks/',
              outputPath: './dist/posts/neural-networks/index.html'
            },
            collections: [Circular *2]
          },
          page: {
            inputPath: './src/posts/neural-networks.md',
            fileSlug: 'neural-networks',
            filePathStem: '/posts/neural-networks',
            outputFileExtension: 'html',
            templateSyntax: 'liquid,md',
            date: 2025-07-17T13:59:35.706Z,
            rawInput: '\n' +
              "Neural networks are computing systems inspired by the human brain's biological neural networks. They consist of layers of interconnected nodes (neurons) that process and transmit information. These networks excel at tasks like image recognition, natural language processing, and complex pattern recognition. The recent advances in deep learning have made neural networks more powerful than ever, enabling breakthroughs in AI applications across various industries. ",
            url: '/posts/neural-networks/',
            outputPath: './dist/posts/neural-networks/index.html'
          },
          inputPath: './src/posts/neural-networks.md',
          fileSlug: 'neural-networks',
          filePathStem: '/posts/neural-networks',
          date: 2025-07-17T13:59:35.706Z,
          outputPath: './dist/posts/neural-networks/index.html',
          url: '/posts/neural-networks/',
          templateContent: [Getter/Setter],
          content: [Getter/Setter]
        }
      ]
    }
  },
  page: {
    inputPath: './src/index.njk',
    fileSlug: '',
    filePathStem: '/index',
    outputFileExtension: 'html',
    templateSyntax: 'njk',
    date: 2025-07-17T13:59:35.706Z,
    rawInput: '<!DOCTYPE html>\n' +
      '<html lang="en">\n' +
      '\n' +
      '<head>\n' +
      '    <meta charset="UTF-8">\n' +
      '    <meta name="viewport" content="width=device-width, initial-scale=1.0">\n' +
      '    <title>{{title}}</title>\n' +
      '    <link rel="stylesheet" href="https://unpkg.com/mvp.css">\n' +
      '    <style>\n' +
      '        body {\n' +
      '            margin: auto;\n' +
      '            padding: 20px;\n' +
      '        }\n' +
      '\n' +
      '        hr {\n' +
      '            margin-top: 1rem;\n' +
      '            margin-bottom: 1rem;\n' +
      '        }\n' +
      '\n' +
      '        pre {\n' +
      '            max-width: 100vw;\n' +
      '        }\n' +
      '\n' +
      '        pre, code {\n' +
      '  white-space: pre-wrap; /* Wraps text while preserving whitespace */\n' +
      '  overflow-x: auto; /* Adds horizontal scrollbar if needed */\n' +
      '  word-wrap: break-word; /* Ensures long words break to fit */\n' +
      '  max-width: 100%; /* Restricts block to container width */\n' +
      '  box-sizing: border-box; /* Includes padding/borders in width */\n' +
      '}\n' +
      '    </style>\n' +
      '</head>\n' +
      '\n' +
      '<body>\n' +
      '\n' +
      '    {% set object = {\n' +
      '        a: 1,\n' +
      '        template: { big: "data", nested: { foo: "bar" } },\n' +
      '        b: { template: { x: 1 } },\n' +
      "        secret: '12345',\n" +
      "        hidden: 'should hide',\n" +
      "        visible: 'ok'\n" +
      '    } %}\n' +
      '\n' +
      '\n' +
      '\n' +
      '\n' +
      '\n' +
      '       <h1>{{title}}</h1>\n' +
      '\n' +
      '    <h2>Comparison with | dump</h2>\n' +
      '    <h3>Input using dump</h3>\n' +
      '    <p><code>{% raw %} {{ { a: "a", b: undefined } | dump }}{% endraw %}</code></p>\n' +
      '    <h3>Output</h3>\n' +
      '    {{ { a: "a", b: undefined } | dump }}\n' +
      '    <h3>Same input using jsonViewer</h3>\n' +
      '    <p><code>{% raw %} {{ { a: "a", b: undefined } | jsonViewer | safe }}{% endraw %}</code></p>\n' +
      '    <h3>Output</h3>\n' +
      '    {{ { a: "a", b: undefined } | jsonViewer | safe }}\n' +
      '    <hr />\n' +
      '\n' +
      '    <h2>String with title</h2>\n' +
      '    <h3>Input</h3>\n' +
      '    <p><code>{% raw %} {{ "value" | jsonViewer({ title: "string"}) | safe }}{% endraw %}</code></p>\n' +
      '    <h3>Output</h3>\n' +
      '    {{ "value" | jsonViewer({ title: "string"}) | safe }}\n' +
      '    <hr />\n' +
      '\n' +
      '    <h2>Number with title</h2>\n' +
      '    <h3>Input</h3>\n' +
      '    <p><code>{% raw %} {{ 123 | jsonViewer({ title: "number"}) | safe }}{% endraw %}</code></p>\n' +
      '    <h3>Output</h3>\n' +
      '    {{ 123 | jsonViewer({ title: "number"}) | safe }}\n' +
      '    <hr />\n' +
      '\n' +
      '    <h2>Array with title</h2>\n' +
      '    <h3>Input</h3>\n' +
      '    <p><code>{% raw %} {{ ["string 1", "string 2", 3, 4 , {a:"a"} ] | jsonViewer({title: "array"}) | safe }}{% endraw %}</code></p>\n' +
      '    <h3>Output</h3>\n' +
      '    {{ ["string 1", "string 2", 3, 4 , {a:"a"} ] | jsonViewer({title: "array"}) | safe }}\n' +
      '    <hr />\n' +
      '\n' +
      '\n' +
      '    <h2>Object</h2>\n' +
      '    <h3>Input</h3>\n' +
      '    <code><pre>{% raw %}\n' +
      '{% set object = {\n' +
      '    a: 1,\n' +
      '    nested: { big: "data", nested: { foo: "bar" } },\n' +
      '    b: { nested: { x: 1 } },\n' +
      "    secret: '12345',\n" +
      "    hidden: 'should hide',\n" +
      "    visible: 'ok'\n" +
      '} %}\n' +
      '       \n' +
      '{{ object | jsonViewer({ title: "object" }) | safe }}\n' +
      '    {% endraw %}</pre></code>\n' +
      '    <h3>Output</h3>\n' +
      '    {% set object = {\n' +
      '    a: 1,\n' +
      '    nested: { big: "data", nested: { foo: "bar" } },\n' +
      '    b: { nested: { x: 1 } },\n' +
      "    secret: '12345',\n" +
      "    hidden: 'should hide',\n" +
      "    visible: 'ok'\n" +
      '} %}\n' +
      '       \n' +
      '{{ object | jsonViewer({ title: "object" }) | safe }}\n' +
      '    <hr />\n' +
      '\n' +
      '\n' +
      '        <h2>Object with automatic template key removal</h2>\n' +
      '    <h3>Input</h3>\n' +
      '    <code><pre>{% raw %}\n' +
      '{% set object = {\n' +
      '    a: 1,\n' +
      '    template: { big: "data", nested: { foo: "bar" } },\n' +
      '    b: { template: { x: 1 } },\n' +
      "    secret: '12345',\n" +
      "    hidden: 'should hide',\n" +
      "    visible: 'ok'\n" +
      '} %}\n' +
      '       \n' +
      '{{ object | jsonViewer({ title: "Object with automatic template key removal" }) | safe }}\n' +
      '    {% endraw %}</pre></code>\n' +
      '    <h3>Output</h3>\n' +
      '    {% set object = {\n' +
      '    a: 1,\n' +
      '    template: { big: "data", nested: { foo: "bar" } },\n' +
      '    b: { template: { x: 1 } },\n' +
      "    secret: '12345',\n" +
      "    hidden: 'should hide',\n" +
      "    visible: 'ok'\n" +
      '} %}\n' +
      '       \n' +
      '{{ object | jsonViewer({ title: "Object with automatic template key removal" }) | safe }}\n' +
      '    <hr />\n' +
      '\n' +
      '\n' +
      '    <h2>Object showing template key</h2>\n' +
      '    <h3>Input</h3>\n' +
      '    <code><pre>{% raw %}\n' +
      '{% set object = {\n' +
      '    a: 1,\n' +
      '    template: { big: "data", nested: { foo: "bar" } },\n' +
      '    b: { template: { x: 1 } },\n' +
      "    secret: '12345',\n" +
      "    hidden: 'should hide',\n" +
      "    visible: 'ok'\n" +
      '} %}\n' +
      '       \n' +
      '{{ object | jsonViewer({ \n' +
      '    title: "Object showing template key",\n' +
      '    showTemplate: true\n' +
      '}) | safe }}\n' +
      '    {% endraw %}</pre></code>\n' +
      '    <h3>Output</h3>\n' +
      '    {% set object = {\n' +
      '    a: 1,\n' +
      '    template: { big: "data", nested: { foo: "bar" } },\n' +
      '    b: { template: { x: 1 } },\n' +
      "    secret: '12345',\n" +
      "    hidden: 'should hide',\n" +
      "    visible: 'ok'\n" +
      '} %}\n' +
      '       \n' +
      '{{ object | jsonViewer({ title: "Object showing template key", showTemplate: true }) | safe }}\n' +
      '    <hr />\n' +
      '\n' +
      '\n' +
      '\n' +
      '    <h2>Object with Key Replacement</h2>\n' +
      '    <h3>Input</h3>\n' +
      '    <code><pre>{% raw %}\n' +
      '{% set object = {\n' +
      '    a: 1,\n' +
      '    template: { big: "data", nested: { foo: "bar" } },\n' +
      '    b: { template: { x: 1 } },\n' +
      "    secret: '12345',\n" +
      "    hidden: 'should hide',\n" +
      "    visible: 'ok'\n" +
      '} %}\n' +
      '       \n' +
      '{{ object | jsonViewer({ \n' +
      '    title: "object",  \n' +
      '    removeKeys: [ \n' +
      "        { keyName: 'template', replaceString: 'Customised Template message' },\n" +
      "        { keyName: 'secret', replaceString: '***hidden***' },\n" +
      "        'hidden'\n" +
      '    ] \n' +
      '}) | safe }}\n' +
      '    {% endraw %}</pre></code>\n' +
      '    <h3>Output</h3>\n' +
      '    {% set object = {\n' +
      '    a: 1,\n' +
      '    template: { big: "data", nested: { foo: "bar" } },\n' +
      '    b: { template: { x: 1 } },\n' +
      "    secret: '12345',\n" +
      "    hidden: 'should hide',\n" +
      "    visible: 'ok'\n" +
      '} %}\n' +
      '       \n' +
      '{{ object | jsonViewer({ \n' +
      '    title: "object",  \n' +
      '    removeKeys: [ \n' +
      "        'template',\n" +
      "        { keyName: 'secret', replaceString: '***hidden***' },\n" +
      "        'hidden'\n" +
      '    ] \n' +
      '}) | safe }}\n' +
      '    <hr />\n' +
      '\n' +
      '    <h2>Complex Object with all options</h2>\n' +
      '    <h3>Input</h3>\n' +
      '    <p><code>{% raw %}\n' +
      '{{ collections.all[0] | jsonViewer({\n' +
      '    title: "collections.all[0]",\n' +
      '    showTypes: false,\n' +
      '    defaultExpanded: false,\n' +
      '    pathsOnHover: false,\n' +
      '    showControls: true,\n' +
      '    removeKeys: [{\n' +
      "        keyName: 'template',\n" +
      "        replaceString: 'Removed for performance reasons'\n" +
      '      }]\n' +
      '}) | safe }}\n' +
      '{% endraw %}</code></p>\n' +
      '    <h3>Output</h3>\n' +
      '    {{ collections.all[0] | jsonViewer({\n' +
      '        title: "collections.all[0]",\n' +
      '        showTypes: false,\n' +
      '        defaultExpanded: false,\n' +
      '        pathsOnHover: false,\n' +
      '        showControls: true,\n' +
      '        removeKeys: [{\n' +
      "            keyName: 'template',\n" +
      "            replaceString: 'Removed for performance reasons'\n" +
      '          }]\n' +
      '\n' +
      '    }) | safe }}\n' +
      '    <hr />\n' +
      '\n' +
      '\n' +
      '\n' +
      '    <h2>Complex Object using consolePlus (for comparison)</h2>\n' +
      '    <h3>Input</h3>\n' +
      '    <p><code>{% raw %} {% console collections.all[0] %}{% endraw %}</code></p>\n' +
      '    <h3>Output</h3>\n' +
      '    {% console collections.all[0] %}\n' +
      '    <hr />\n' +
      '\n' +
      '\n' +
      '    <h2>Debugging remove keys</h2>\n' +
      '    {{ object | jsonViewer({ \n' +
      '        title: "object"\n' +
      '    }) | safe }}\n' +
      '\n' +
      '    {{ object | jsonViewer({ \n' +
      '        title: "object",  \n' +
      '        removeKeys: [ \n' +
      "            'template'\n" +
      '        ] \n' +
      '    }) | safe }}\n' +
      '\n' +
      '    {{ object | jsonViewer({ \n' +
      '        title: "object",  \n' +
      '        removeKeys: [ \n' +
      "           { 'template': 'Removed for performance reasons Yippie' }\n" +
      '        ] \n' +
      '    }) | safe }}\n' +
      '</body>\n' +
      '\n' +
      '</html>',
    url: '/',
    outputPath: './dist/index.html'
  },
  inputPath: './src/index.njk',
  fileSlug: '',
  filePathStem: '/index',
  date: 2025-07-17T13:59:35.706Z,
  outputPath: './dist/index.html',
  url: '/',
  templateContent: [Getter/Setter],
  content: [Getter/Setter]
}

Debugging remove keys