{{ { a: "a", b: undefined } | dump }}
{{ { a: "a", b: undefined } | jsonViewer | safe }}
{{ "value" | jsonViewer({ title: "string"}) | safe }}
{{ 123 | jsonViewer({ title: "number"}) | safe }}
{{ ["string 1", "string 2", 3, 4 , {a:"a"} ] | jsonViewer({title: "array"}) | safe }}
{% 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 }}
{% 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 }}
{% 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 }}
{% 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 }}
{{ 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 }}
{% console collections.all[0] %}
<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]
}