From 75becace37c472cc689ca1d308472c5a874d253d Mon Sep 17 00:00:00 2001 From: Mike Bierlee Date: Sun, 9 Oct 2022 01:10:05 +0300 Subject: [PATCH] Add autogenerated documentation --- .gitignore | 1 - docs/css/style.min.css | 3 + docs/file_hashes.json | 1 + docs/fonts/fontello.woff | Bin 0 -> 2776 bytes docs/fonts/raleway-regular.woff | Bin 0 -> 31660 bytes docs/index.html | 104 +++++++++ docs/js/script.min.js | 13 ++ docs/mirage.html | 75 ++++++ docs/mirage/config.html | 219 ++++++++++++++++++ docs/mirage/config/ArrayNode.html | 89 +++++++ .../config/ConfigCreationException.html | 86 +++++++ docs/mirage/config/ConfigDictionary.get.html | 202 ++++++++++++++++ .../config/ConfigDictionary.getConfig.html | 102 ++++++++ docs/mirage/config/ConfigDictionary.html | 143 ++++++++++++ docs/mirage/config/ConfigDictionary.set.html | 98 ++++++++ docs/mirage/config/ConfigFactory.html | 113 +++++++++ .../mirage/config/ConfigFactory.loadFile.html | 99 ++++++++ .../config/ConfigFactory.parseConfig.html | 99 ++++++++ docs/mirage/config/ConfigNode.html | 86 +++++++ .../config/ConfigPathNotFoundException.html | 86 +++++++ docs/mirage/config/ConfigReadException.html | 86 +++++++ docs/mirage/config/ObjectNode.html | 89 +++++++ docs/mirage/config/PathParseException.html | 86 +++++++ .../config/SubstituteConfigVariables.html | 85 +++++++ .../SubstituteEnvironmentVariables.html | 85 +++++++ docs/mirage/config/ValueNode.html | 86 +++++++ docs/mirage/java.html | 122 ++++++++++ docs/mirage/java/JavaPropertiesFactory.html | 114 +++++++++ .../JavaPropertiesFactory.parseConfig.html | 99 ++++++++ docs/mirage/java/loadJavaProperties.html | 99 ++++++++ docs/mirage/java/parseJavaProperties.html | 99 ++++++++ docs/mirage/json.html | 131 +++++++++++ docs/mirage/json/JsonConfigFactory.html | 134 +++++++++++ .../json/JsonConfigFactory.parseConfig.html | 99 ++++++++ .../json/JsonConfigFactory.parseJson.html | 142 ++++++++++++ docs/mirage/json/loadJsonConfig.html | 99 ++++++++ docs/mirage/json/parseJsonConfig.html | 138 +++++++++++ docs/sitemap.xml | 40 ++++ docs/symbols.js | 33 +++ source/mirage/java.d | 2 +- source/mirage/json.d | 6 +- 41 files changed, 3488 insertions(+), 5 deletions(-) create mode 100644 docs/css/style.min.css create mode 100644 docs/file_hashes.json create mode 100644 docs/fonts/fontello.woff create mode 100644 docs/fonts/raleway-regular.woff create mode 100644 docs/index.html create mode 100644 docs/js/script.min.js create mode 100644 docs/mirage.html create mode 100644 docs/mirage/config.html create mode 100644 docs/mirage/config/ArrayNode.html create mode 100644 docs/mirage/config/ConfigCreationException.html create mode 100644 docs/mirage/config/ConfigDictionary.get.html create mode 100644 docs/mirage/config/ConfigDictionary.getConfig.html create mode 100644 docs/mirage/config/ConfigDictionary.html create mode 100644 docs/mirage/config/ConfigDictionary.set.html create mode 100644 docs/mirage/config/ConfigFactory.html create mode 100644 docs/mirage/config/ConfigFactory.loadFile.html create mode 100644 docs/mirage/config/ConfigFactory.parseConfig.html create mode 100644 docs/mirage/config/ConfigNode.html create mode 100644 docs/mirage/config/ConfigPathNotFoundException.html create mode 100644 docs/mirage/config/ConfigReadException.html create mode 100644 docs/mirage/config/ObjectNode.html create mode 100644 docs/mirage/config/PathParseException.html create mode 100644 docs/mirage/config/SubstituteConfigVariables.html create mode 100644 docs/mirage/config/SubstituteEnvironmentVariables.html create mode 100644 docs/mirage/config/ValueNode.html create mode 100644 docs/mirage/java.html create mode 100644 docs/mirage/java/JavaPropertiesFactory.html create mode 100644 docs/mirage/java/JavaPropertiesFactory.parseConfig.html create mode 100644 docs/mirage/java/loadJavaProperties.html create mode 100644 docs/mirage/java/parseJavaProperties.html create mode 100644 docs/mirage/json.html create mode 100644 docs/mirage/json/JsonConfigFactory.html create mode 100644 docs/mirage/json/JsonConfigFactory.parseConfig.html create mode 100644 docs/mirage/json/JsonConfigFactory.parseJson.html create mode 100644 docs/mirage/json/loadJsonConfig.html create mode 100644 docs/mirage/json/parseJsonConfig.html create mode 100644 docs/sitemap.xml create mode 100644 docs/symbols.js diff --git a/.gitignore b/.gitignore index dd14b6e..546ee5b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ .dub docs.json __dummy.html -docs/ /mirage-config mirage-config.so mirage-config.dylib diff --git a/docs/css/style.min.css b/docs/css/style.min.css new file mode 100644 index 0000000..46d57c3 --- /dev/null +++ b/docs/css/style.min.css @@ -0,0 +1,3 @@ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.container{position:relative;width:100%;max-width:960px;margin:0 auto;padding:0 20px;box-sizing:border-box}.column,.columns{width:100%;float:left;box-sizing:border-box}@media(min-width:400px){.container{width:85%;padding:0}}@media(min-width:550px){.container{width:80%}.column,.columns{margin-left:4%}.column:first-child,.columns:first-child{margin-left:0}.one.column,.one.columns{width:4.66666666667%}.two.columns{width:13.3333333333%}.three.columns{width:22%}.four.columns{width:30.6666666667%}.five.columns{width:39.3333333333%}.six.columns{width:48%}.seven.columns{width:56.6666666667%}.eight.columns{width:65.3333333333%}.nine.columns{width:74.0%}.ten.columns{width:82.6666666667%}.eleven.columns{width:91.3333333333%}.twelve.columns{width:100%;margin-left:0}.one-third.column{width:30.6666666667%}.two-thirds.column{width:65.3333333333%}.one-half.column{width:48%}.offset-by-one.column,.offset-by-one.columns{margin-left:8.66666666667%}.offset-by-two.column,.offset-by-two.columns{margin-left:17.3333333333%}.offset-by-three.column,.offset-by-three.columns{margin-left:26%}.offset-by-four.column,.offset-by-four.columns{margin-left:34.6666666667%}.offset-by-five.column,.offset-by-five.columns{margin-left:43.3333333333%}.offset-by-six.column,.offset-by-six.columns{margin-left:52%}.offset-by-seven.column,.offset-by-seven.columns{margin-left:60.6666666667%}.offset-by-eight.column,.offset-by-eight.columns{margin-left:69.3333333333%}.offset-by-nine.column,.offset-by-nine.columns{margin-left:78.0%}.offset-by-ten.column,.offset-by-ten.columns{margin-left:86.6666666667%}.offset-by-eleven.column,.offset-by-eleven.columns{margin-left:95.3333333333%}.offset-by-one-third.column,.offset-by-one-third.columns{margin-left:34.6666666667%}.offset-by-two-thirds.column,.offset-by-two-thirds.columns{margin-left:69.3333333333%}.offset-by-one-half.column,.offset-by-one-half.columns{margin-left:52%}}html{font-size:62.5%}body{font-size:1.5em;line-height:1.6;font-weight:400;font-family:"Raleway","HelveticaNeue","Helvetica Neue",Helvetica,Arial,sans-serif;color:#222}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:2rem;font-weight:300}h1{font-size:4.0rem;line-height:1.2;letter-spacing:-.1rem}h2{font-size:3.6rem;line-height:1.25;letter-spacing:-.1rem}h3{font-size:3.0rem;line-height:1.3;letter-spacing:-.1rem}h4{font-size:2.4rem;line-height:1.35;letter-spacing:-.08rem}h5{font-size:1.8rem;line-height:1.5;letter-spacing:-.05rem}h6{font-size:1.5rem;line-height:1.6;letter-spacing:0}@media(min-width:550px){h1{font-size:5.0rem}h2{font-size:4.2rem}h3{font-size:3.6rem}h4{font-size:3.0rem}h5{font-size:2.4rem}h6{font-size:1.5rem}}p{margin-top:0}a{color:#1eaedb}a:hover{color:#0fa0ce}.button,button,input[type="submit"],input[type="reset"],input[type="button"]{display:inline-block;height:38px;padding:0 30px;color:#555;text-align:center;font-size:11px;font-weight:600;line-height:38px;letter-spacing:.1rem;text-transform:uppercase;text-decoration:none;white-space:nowrap;background-color:transparent;border-radius:4px;border:1px solid #bbb;cursor:pointer;box-sizing:border-box}.button:hover,button:hover,input[type="submit"]:hover,input[type="reset"]:hover,input[type="button"]:hover,.button:focus,button:focus,input[type="submit"]:focus,input[type="reset"]:focus,input[type="button"]:focus{color:#333;border-color:#888;outline:0}.button.button-primary,button.button-primary,input[type="submit"].button-primary,input[type="reset"].button-primary,input[type="button"].button-primary{color:#FFF;background-color:#33c3f0;border-color:#33c3f0} +.button.button-primary:hover,button.button-primary:hover,input[type="submit"].button-primary:hover,input[type="reset"].button-primary:hover,input[type="button"].button-primary:hover,.button.button-primary:focus,button.button-primary:focus,input[type="submit"].button-primary:focus,input[type="reset"].button-primary:focus,input[type="button"].button-primary:focus{color:#FFF;background-color:#1eaedb;border-color:#1eaedb}input[type="email"],input[type="number"],input[type="search"],input[type="text"],input[type="tel"],input[type="url"],input[type="password"],textarea,select{height:38px;padding:6px 10px;background-color:#fff;border:1px solid #d1d1d1;border-radius:4px;box-shadow:none;box-sizing:border-box}input[type="email"],input[type="number"],input[type="search"],input[type="text"],input[type="tel"],input[type="url"],input[type="password"],textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none}textarea{min-height:65px;padding-top:6px;padding-bottom:6px}input[type="email"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="text"]:focus,input[type="tel"]:focus,input[type="url"]:focus,input[type="password"]:focus,textarea:focus,select:focus{border:1px solid #33c3f0;outline:0}label,legend{display:block;margin-bottom:.5rem;font-weight:600}fieldset{padding:0;border-width:0}input[type="checkbox"],input[type="radio"]{display:inline}label>.label-body{display:inline-block;margin-left:.5rem;font-weight:normal}ul{list-style:circle inside}ol{list-style:decimal inside}ol,ul{padding-left:0;margin-top:0}ul ul,ul ol,ol ol,ol ul{margin:1.5rem 0 1.5rem 3rem;font-size:90%}li{margin-bottom:1rem}code{padding:.2rem .5rem;margin:0 .2rem;font-size:90%;white-space:nowrap;background:#f1f1f1;border:1px solid #e1e1e1;border-radius:4px}pre>code{display:block;padding:1rem 1.5rem;white-space:pre;overflow-x:auto}th,td{padding:12px 15px;text-align:left;border-bottom:1px solid #e1e1e1}th:first-child,td:first-child{padding-left:0}th:last-child,td:last-child{padding-right:0}button,.button{margin-bottom:1rem}input,textarea,select,fieldset{margin-bottom:1.5rem}pre,blockquote,dl,figure,table,p,ul,ol,form{margin-bottom:2.5rem}.u-full-width{width:100%;box-sizing:border-box}.u-max-full-width{max-width:100%;box-sizing:border-box}.u-pull-right{float:right}.u-pull-left{float:left}hr{margin-top:3rem;margin-bottom:3.5rem;border-width:0;border-top:1px solid #e1e1e1}.container:after,.row:after,.u-cf{content:"";display:table;clear:both}.pln{color:#4d4d4c}@media screen{.spc{color:#606}.str{color:#718c00}.kwd{color:#8959a8}.com{color:#8e908c}.typ{color:#4271ae}.lit{color:#f5871f}.pun{color:#4d4d4c}.opn{color:#4d4d4c}.clo{color:#4d4d4c}.tag{color:#c82829}.atn{color:#f5871f}.atv{color:#3e999f}.dec{color:#f5871f}.var{color:#c82829}.fun{color:#4271ae}}@media print,projection{.spc{color:#606}.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}ol.linenums{margin-top:0;margin-bottom:0}@font-face{font-family:'Raleway';font-style:normal;font-weight:normal;src:local('Raleway'),url(../fonts/raleway-regular.woff) format('woff')}@font-face{font-family:'fontello';font-style:normal;font-weight:normal;src:url(../fonts/fontello.woff) format('woff')}a{text-decoration:none}ul.tree-view li{list-style-type:none}#main-nav{background:#343131}body{position:absolute;display:flex}#main-nav,#main-contents{padding:2em 1em 0 1em;box-sizing:border-box;display:flex;flex-direction:column;justify-content:space-between}@media(max-width:750px){body{min-width:100%;flex-direction:column}}@media(min-width:750px){body{min-height:100%}#main-nav{min-width:15em}}p#main-nav-footer{margin-bottom:0;text-align:right}section{margin-top:1em}div#symbolSearchPane{position:relative;max-width:13em}input#symbolSearch,ul#symbolSearchResults{box-sizing:border-box;width:100%}input#symbolSearch.with_results{border-radius:0;border-top-left-radius:4px;border-top-right-radius:4px}ul#symbolSearchResults{font-size:.85em;background-color:white;border:1px solid #aaa;border-bottom-left-radius:4px;border-bottom-right-radius:4px;box-sizing:border-box;position:absolute;top:38px;left:0;z-index:2}ul#symbolSearchResults>li{list-style-type:none;padding-left:10px;margin-bottom:0}ul.searchResults.symbolList>li{list-style-type:none}ul.searchResults.symbolList>li>h5{margin-bottom:0}div#license-info,p#main-nav-footer{font-variant:small-caps;font-size:.75em}div#license-info>p{display:inline}div#license-info>p:not(:first-child)::before{content:" | "}nav#main-nav ul.tree-view a,nav#main-nav ul.tree-view li,p#main-nav-footer a,p#main-nav-footer{color:#b3b3b3}ul.tree-view div.package:before{font-family:"fontello";speak:none;margin-right:.3em}ul.tree-view li.collapsed>div.package:before{content:'\e800'}ul.tree-view li:not(.collapsed)>div.package:before{content:'\e801'} +ul.tree-view div.selected>a{color:white!important}div.prototype>code{display:block;padding:1rem 1.5rem}#main-contents{width:100%}.prototype{max-width:fit-content} diff --git a/docs/file_hashes.json b/docs/file_hashes.json new file mode 100644 index 0000000..556b6ae --- /dev/null +++ b/docs/file_hashes.json @@ -0,0 +1 @@ +{"mirage\\java\\loadJavaProperties.html":"3CFB11333EED6108332D9CD224713225","mirage\\java\\JavaPropertiesFactory.parseConfig.html":"7D499617F49F848BD7C4C2DFED47317A","mirage\\config\\SubstituteEnvironmentVariables.html":"363CDE300F2C363095DEAACD1794591E","mirage\\config\\SubstituteConfigVariables.html":"DC1AA3901EFBFA70804043EED478F84B","mirage\\config\\ConfigCreationException.html":"8A3502A9D94F6B1B50B184460655BF82","mirage\\json.html":"0C5EEB2E81199B95457E2F6929F1D7D7","mirage\\config\\ConfigPathNotFoundException.html":"9EDE0DF8D61260E8E3C7ACD4A9A40BC6","mirage\\json\\loadJsonConfig.html":"F52125B328BCC409E485B85D4F858B68","mirage\\json\\parseJsonConfig.html":"677D3E59D2991BB2B394C1E4460CEB82","mirage\\java.html":"8034CDC674527F61443A662554C9F89A","mirage\\config\\PathParseException.html":"43C5D15980EA97E0B9667751B08096F2","mirage\\java\\JavaPropertiesFactory.html":"7E16C638D80689922EC8567ED470C0FA","mirage\\config\\ConfigFactory.parseConfig.html":"D8CF3B738A4BDEE8CC82ED0BBAFE3337","mirage\\config\\ConfigFactory.loadFile.html":"14032712C1F7B5F6E02832AF0D3CD17F","mirage\\config\\ConfigNode.html":"4B55A2D7047031068C722360E5D094E7","mirage\\config\\ArrayNode.html":"E3B94306051791B22AB1BF50087F97FA","mirage\\config\\ObjectNode.html":"7B0AD2303C0B6F7B4F15FC3583F32318","mirage\\json\\JsonConfigFactory.html":"B5135F783DC880D1B209347CF99AF37F","mirage\\config\\ConfigDictionary.set.html":"F24F485FA9502315F265FE1306D4DDAB","mirage\\config\\ConfigFactory.html":"11858B67D8FA24642C70462F51D599E4","sitemap.xml":"373867A581E2C882A8180864112DDF02","index.html":"8D84495B941A7CE322883F7DF09C4D77","mirage\\config\\ConfigDictionary.get.html":"DE33737B0DB3460F513D2A81442382BB","symbols.js":"B5572FB75F19E2D3AA53D193EAAF71FD","mirage\\java\\parseJavaProperties.html":"B51432D0C5B2E1E11DC82CE108275712","mirage\\json\\JsonConfigFactory.parseJson.html":"05749B35FD8D0D99BDB794F20A19A202","mirage\\config\\ConfigDictionary.html":"F7F2D064BE54A54F0211BA840D3E6E1F","mirage\\config\\ConfigReadException.html":"DEC45E3788EC5824C38EB60AA51F42C2","mirage\\config\\ConfigDictionary.getConfig.html":"A49B86FAFC8DF95CAD8DE34D5BF91588","mirage.html":"6086E13195053C9A596A09E992F414FF","mirage\\config.html":"C91969C8EE9AAE237E7B6E7380D4EED7","mirage\\json\\JsonConfigFactory.parseConfig.html":"80D0185E3FC7C6EF33E17583F2C918B5","mirage\\config\\ValueNode.html":"66538106380060D5C0810FF79FB192C4"} \ No newline at end of file diff --git a/docs/fonts/fontello.woff b/docs/fonts/fontello.woff new file mode 100644 index 0000000000000000000000000000000000000000..98ffb3b1aa900eff50594589dde5c197dfc341a9 GIT binary patch literal 2776 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 K8@5p$tlq>0svUTKfdOV^xLY^gpI5X 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 M000422?)>t00?0;!~g&Q literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..f0e17b0 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,104 @@ + + + + + + API documentation + + + + +
+
+
+
+

API documentation

+ + + + + + + + + + + + + + + + + + + + + +
ModuleDescription
+ mirage.config + + Base utilities for working with configurations. + +
+ mirage.java + + Utilities for loading Java properties files. + +
+ mirage.json + + Utilities for loading JSON configurations. + +
+ mirage + + +
+
+
+
+
+
+ + \ No newline at end of file diff --git a/docs/js/script.min.js b/docs/js/script.min.js new file mode 100644 index 0000000..e9ebac6 --- /dev/null +++ b/docs/js/script.min.js @@ -0,0 +1,13 @@ +var searchCounter,lastSearchString +function setupDdox(){for(var e=document.querySelectorAll(".tree-view .package"),t=0;tr.length?1:a.lengthi.length?1:lt&&((p=document.createElement("li")).innerHTML="…"+(n.length-100)+" additional results",y("symbolSearchResults").appendChild(p)),n.length&&(y("symbolSearchResults").style.display="initial",y("symbolSearch").classList.add("with_results"))}function f(e){for(var t=e.length-1;0<=t;t--)for(o in m)if(e[t].length>=m[o].length&&e[t].substr(0,m[o].length)==m[o])return e.length-1-t +return e.length}}searchCounter=0,lastSearchString="" diff --git a/docs/mirage.html b/docs/mirage.html new file mode 100644 index 0000000..1da4d43 --- /dev/null +++ b/docs/mirage.html @@ -0,0 +1,75 @@ + + + + + + Module mirage + + + + +
+ +
+
+

Module mirage

+
+
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config.html b/docs/mirage/config.html new file mode 100644 index 0000000..1c6aadc --- /dev/null +++ b/docs/mirage/config.html @@ -0,0 +1,219 @@ + + + + + + Module mirage.config + + + + +
+ +
+
+

Module mirage.config

Base utilities for working with configurations. +

+ +
+
+

Interfaces

+ + + + + + + + + +
NameDescription
+ + ConfigNode + + The configuration tree is made up of specific types of ConfigNodes. + Used as generic type for ConfigFactory and ConfigDictionary. +
+
+
+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ + ArrayNode + + A configuration item that is an array. +
+ + ConfigCreationException + + Used by ConfigFactory instances when loading or parsing configuration fails. +
+ + ConfigDictionary + + A ConfigDictionary contains the configuration tree and facilities to get values from that tree. +
+ + ConfigFactory + + The base class used by configuration factories for specific file types. +
+ + ConfigPathNotFoundException + + Used by ConfigDictionary when the supplied path does not exist. +
+ + ConfigReadException + + Used by the ConfigDictionary when something goes wrong when reading configuration. +
+ + ObjectNode + + A configuration item that is an object. +
+ + PathParseException + + Used by ConfigDictionary when there is something wrong with the path when calling ConfigDictionary.get() +
+ + ValueNode + + A configuration item that is any sort of primitive value (strings, numbers or null). +
+
+
+

Aliases

+ + + + + + + + + + + + + + + +
NameTypeDescription
+ + SubstituteConfigVariables + + + std.typecons.Flag!("SubstituteConfigVariables") + Used in a ConfigDictionary to enable to disable config path substitution. +
+ + SubstituteEnvironmentVariables + + + std.typecons.Flag!("SubstituteEnvironmentVariables") + Used in a ConfigDictionary to enable to disable environment variable substitution. +
+
+
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/ArrayNode.html b/docs/mirage/config/ArrayNode.html new file mode 100644 index 0000000..3aa3b48 --- /dev/null +++ b/docs/mirage/config/ArrayNode.html @@ -0,0 +1,89 @@ + + + + + + Class ArrayNode + + + + +
+ +
+
+

Class ArrayNode

A configuration item that is an array. +

+
+ +
+ class ArrayNode +
  : ConfigNode + ; +
+
+
+

Contains other ConfigNodes as children. +

+
+ + +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/ConfigCreationException.html b/docs/mirage/config/ConfigCreationException.html new file mode 100644 index 0000000..2ce1879 --- /dev/null +++ b/docs/mirage/config/ConfigCreationException.html @@ -0,0 +1,86 @@ + + + + + + Class ConfigCreationException + + + + +
+ +
+
+

Class ConfigCreationException

Used by ConfigFactory instances when loading or parsing configuration fails. +

+
+ +
+ class ConfigCreationException +
  : object.Exception + ; +
+
+
+ + +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/ConfigDictionary.get.html b/docs/mirage/config/ConfigDictionary.get.html new file mode 100644 index 0000000..a3ca704 --- /dev/null +++ b/docs/mirage/config/ConfigDictionary.get.html @@ -0,0 +1,202 @@ + + + + + + ConfigDictionary.get - multiple declarations + + + + +
+ +
+
+

ConfigDictionary.get - multiple declarations

+

Function ConfigDictionary.get

Get values from the configuration using config path notation. +

+
+ +
+ string get + ( +
+   string configPath, +
+   string defaultValue = null +
+ ); +
+
+
+
+ +

Parameters

+ + + +
NameDescription
configPath Path to the wanted config value. The path is separated by dots, e.g. "server.public.hostname". + Values from arrays can be selected by brackets, for example: "server[3].hostname.ports[0]". + When the config is just a value, for example just a string, it can be fetched by just specifying "." as path. + Although the path should be universally the same over all types of config files, some might not lend to this structure, + and have a more specific way of retrieving data from the config. See the examples and specific config factories for + more details.
defaultValue (Optional) Value to return when the given configPath is invalid. When not supplied a ConfigPathNotFoundException exception is thrown.
+
+

Throws

+

ConfigReadException when something goes wrong reading the config. + ConfigPathNotFoundException when the given path does not exist in the config. +

+
+

Returns

+

The value at the path in the configuration. To convert it use get!T(). +

+
+

Function ConfigDictionary.get

Get values from the configuration and attempts to convert them to the specified type. +

+
+ +
+ ConvertToType get(ConvertToType) + ( +
+   string configPath +
+ ); +
+
+
+
+ +

Parameters

+ + +
NameDescription
configPath Path to the wanted config value. See get().
+
+

Throws

+

ConfigReadException when something goes wrong reading the config. + ConfigPathNotFoundException when the given path does not exist in the config. +

+
+

Returns

+

The value at the path in the configuration. +

+
+

See Also

+

get +

+
+

Function ConfigDictionary.get

Get values from the configuration and attempts to convert them to the specified type. +

+
+ +
+ ConvertToType get(ConvertToType) + ( +
+   string configPath, +
+   ConvertToType defaultValue +
+ ); +
+
+
+
+ +

Parameters

+ + + +
NameDescription
configPath Path to the wanted config value. See get().
defaultValue (Optional) Value to return when the given configPath is invalid. When not supplied a ConfigPathNotFoundException exception is thrown.
+
+

Throws

+

ConfigReadException when something goes wrong reading the config. + ConfigPathNotFoundException when the given path does not exist in the config. +

+
+

Returns

+

The value at the path in the configuration. +

+
+

See Also

+

get +

+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/ConfigDictionary.getConfig.html b/docs/mirage/config/ConfigDictionary.getConfig.html new file mode 100644 index 0000000..0a9a47d --- /dev/null +++ b/docs/mirage/config/ConfigDictionary.getConfig.html @@ -0,0 +1,102 @@ + + + + + + Function ConfigDictionary.getConfig + + + + +
+ +
+
+

Function ConfigDictionary.getConfig

Fetch a sub-section of the config as another config. +

+
+ +
+ ConfigDictionary getConfig + ( +
+   string configPath +
+ ); +
+
+
+

Commonly used for example to fetch further configuration from arrays, e.g.: getConfig("http.servers[3]") + which then returns the rest of the config at that path. +

+
+ +

Parameters

+ + +
NameDescription
configPath Path to the wanted config. See get().
+
+

Returns

+

A sub-section of the configuration. +

+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/ConfigDictionary.html b/docs/mirage/config/ConfigDictionary.html new file mode 100644 index 0000000..15151d5 --- /dev/null +++ b/docs/mirage/config/ConfigDictionary.html @@ -0,0 +1,143 @@ + + + + + + Class ConfigDictionary + + + + +
+ +
+
+

Class ConfigDictionary

A ConfigDictionary contains the configuration tree and facilities to get values from that tree. +

+
+ +
+ class ConfigDictionary + ; +
+
+
+ +

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ + get + + (configPath, defaultValue) + Get values from the configuration using config path notation. +
+ + get + + (configPath) + Get values from the configuration and attempts to convert them to the specified type. +
+ + get + + (configPath, defaultValue) + Get values from the configuration and attempts to convert them to the specified type. +
+ + getConfig + + (configPath) + Fetch a sub-section of the config as another config. +
+ + set + + (configPath, value) + Assign a value at the given path. +
+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/ConfigDictionary.set.html b/docs/mirage/config/ConfigDictionary.set.html new file mode 100644 index 0000000..6e48c11 --- /dev/null +++ b/docs/mirage/config/ConfigDictionary.set.html @@ -0,0 +1,98 @@ + + + + + + Function ConfigDictionary.set + + + + +
+ +
+
+

Function ConfigDictionary.set

Assign a value at the given path. +

+
+ +
+ void set + ( +
+   string configPath, +
+   string value +
+ ); +
+
+
+
+ +

Parameters

+ + + +
NameDescription
configPath Path where to assign the value to. If the path does not exist, it will be created.
value Value to set at path.
+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/ConfigFactory.html b/docs/mirage/config/ConfigFactory.html new file mode 100644 index 0000000..86cc8dd --- /dev/null +++ b/docs/mirage/config/ConfigFactory.html @@ -0,0 +1,113 @@ + + + + + + Class ConfigFactory + + + + +
+ +
+
+

Class ConfigFactory

The base class used by configuration factories for specific file types. +

+
+ +
+ class ConfigFactory + ; +
+
+
+ +

Methods

+ + + + + + + + + + + + + +
NameDescription
+ + loadFile + + (path) + Loads a configuration from the specified path from disk. +
+ + parseConfig + + (contents) + Parse configuration from the given string. +
+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/ConfigFactory.loadFile.html b/docs/mirage/config/ConfigFactory.loadFile.html new file mode 100644 index 0000000..3919540 --- /dev/null +++ b/docs/mirage/config/ConfigFactory.loadFile.html @@ -0,0 +1,99 @@ + + + + + + Function ConfigFactory.loadFile + + + + +
+ +
+
+

Function ConfigFactory.loadFile

Loads a configuration from the specified path from disk. +

+
+ +
+ ConfigDictionary loadFile + ( +
+   string path +
+ ); +
+
+
+
+ +

Parameters

+ + +
NameDescription
path Path to file. OS dependent, but UNIX paths are generally working.
+
+

Returns

+

The parsed configuration. +

+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/ConfigFactory.parseConfig.html b/docs/mirage/config/ConfigFactory.parseConfig.html new file mode 100644 index 0000000..919c1c4 --- /dev/null +++ b/docs/mirage/config/ConfigFactory.parseConfig.html @@ -0,0 +1,99 @@ + + + + + + Function ConfigFactory.parseConfig + + + + +
+ +
+
+

Function ConfigFactory.parseConfig

Parse configuration from the given string. +

+
+ +
+ ConfigDictionary parseConfig + ( +
+   string contents +
+ ); +
+
+
+
+ +

Parameters

+ + +
NameDescription
contents Text contents of the config to be parsed.
+
+

Returns

+

The parsed configuration. +

+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/ConfigNode.html b/docs/mirage/config/ConfigNode.html new file mode 100644 index 0000000..c5a7045 --- /dev/null +++ b/docs/mirage/config/ConfigNode.html @@ -0,0 +1,86 @@ + + + + + + Interface ConfigNode + + + + +
+ +
+
+

Interface ConfigNode

The configuration tree is made up of specific types of ConfigNodes. + Used as generic type for ConfigFactory and ConfigDictionary. +

+
+ +
+ interface ConfigNode + ; +
+
+
+ + +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/ConfigPathNotFoundException.html b/docs/mirage/config/ConfigPathNotFoundException.html new file mode 100644 index 0000000..802a24b --- /dev/null +++ b/docs/mirage/config/ConfigPathNotFoundException.html @@ -0,0 +1,86 @@ + + + + + + Class ConfigPathNotFoundException + + + + +
+ +
+
+

Class ConfigPathNotFoundException

Used by ConfigDictionary when the supplied path does not exist. +

+
+ +
+ class ConfigPathNotFoundException +
  : object.Exception + ; +
+
+
+ + +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/ConfigReadException.html b/docs/mirage/config/ConfigReadException.html new file mode 100644 index 0000000..eb69800 --- /dev/null +++ b/docs/mirage/config/ConfigReadException.html @@ -0,0 +1,86 @@ + + + + + + Class ConfigReadException + + + + +
+ +
+
+

Class ConfigReadException

Used by the ConfigDictionary when something goes wrong when reading configuration. +

+
+ +
+ class ConfigReadException +
  : object.Exception + ; +
+
+
+ + +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/ObjectNode.html b/docs/mirage/config/ObjectNode.html new file mode 100644 index 0000000..7edc527 --- /dev/null +++ b/docs/mirage/config/ObjectNode.html @@ -0,0 +1,89 @@ + + + + + + Class ObjectNode + + + + +
+ +
+
+

Class ObjectNode

A configuration item that is an object. +

+
+ +
+ class ObjectNode +
  : ConfigNode + ; +
+
+
+

ObjectNodes contain a node dictionary that points to other ConfigNodes. +

+
+ + +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/PathParseException.html b/docs/mirage/config/PathParseException.html new file mode 100644 index 0000000..2914d90 --- /dev/null +++ b/docs/mirage/config/PathParseException.html @@ -0,0 +1,86 @@ + + + + + + Class PathParseException + + + + +
+ +
+
+

Class PathParseException

Used by ConfigDictionary when there is something wrong with the path when calling ConfigDictionary.get() +

+
+ +
+ class PathParseException +
  : object.Exception + ; +
+
+
+ + +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/SubstituteConfigVariables.html b/docs/mirage/config/SubstituteConfigVariables.html new file mode 100644 index 0000000..23a143e --- /dev/null +++ b/docs/mirage/config/SubstituteConfigVariables.html @@ -0,0 +1,85 @@ + + + + + + Alias SubstituteConfigVariables + + + + +
+ +
+
+

Alias SubstituteConfigVariables

Used in a ConfigDictionary to enable to disable config path substitution. +

+
+ +
+ alias SubstituteConfigVariables + = std.typecons.Flag!("SubstituteConfigVariables"); +
+
+
+ + +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/SubstituteEnvironmentVariables.html b/docs/mirage/config/SubstituteEnvironmentVariables.html new file mode 100644 index 0000000..0ea1165 --- /dev/null +++ b/docs/mirage/config/SubstituteEnvironmentVariables.html @@ -0,0 +1,85 @@ + + + + + + Alias SubstituteEnvironmentVariables + + + + +
+ +
+
+

Alias SubstituteEnvironmentVariables

Used in a ConfigDictionary to enable to disable environment variable substitution. +

+
+ +
+ alias SubstituteEnvironmentVariables + = std.typecons.Flag!("SubstituteEnvironmentVariables"); +
+
+
+ + +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/config/ValueNode.html b/docs/mirage/config/ValueNode.html new file mode 100644 index 0000000..51bfdc8 --- /dev/null +++ b/docs/mirage/config/ValueNode.html @@ -0,0 +1,86 @@ + + + + + + Class ValueNode + + + + +
+ +
+
+

Class ValueNode

A configuration item that is any sort of primitive value (strings, numbers or null). +

+
+ +
+ class ValueNode +
  : ConfigNode + ; +
+
+
+ + +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/java.html b/docs/mirage/java.html new file mode 100644 index 0000000..f942dd1 --- /dev/null +++ b/docs/mirage/java.html @@ -0,0 +1,122 @@ + + + + + + Module mirage.java + + + + +
+ +
+
+

Module mirage.java

Utilities for loading Java properties files. +

+ +
+
+

Functions

+ + + + + + + + + + + + + +
NameDescription
+ + loadJavaProperties(filePath) + + Load a Java properties file from disk. +
+ + parseJavaProperties(properties) + + Parse Java properties from the given Java properties string. +
+
+
+

Classes

+ + + + + + + + + +
NameDescription
+ + JavaPropertiesFactory + + Creates configuration files from Java properties. +
+
+
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/java/JavaPropertiesFactory.html b/docs/mirage/java/JavaPropertiesFactory.html new file mode 100644 index 0000000..ad4562a --- /dev/null +++ b/docs/mirage/java/JavaPropertiesFactory.html @@ -0,0 +1,114 @@ + + + + + + Class JavaPropertiesFactory + + + + +
+ +
+
+

Class JavaPropertiesFactory

Creates configuration files from Java properties. +

+
+ +
+ class JavaPropertiesFactory +
  : ConfigFactory + ; +
+
+
+ +

Methods

+ + + + + + + + + + + + + +
NameDescription
+ + parseConfig + + (contents) + Parse configuration from the given Java properties string. +
+ + loadFile + + (path) + Loads a configuration from the specified path from disk. +
+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/java/JavaPropertiesFactory.parseConfig.html b/docs/mirage/java/JavaPropertiesFactory.parseConfig.html new file mode 100644 index 0000000..dbfc10b --- /dev/null +++ b/docs/mirage/java/JavaPropertiesFactory.parseConfig.html @@ -0,0 +1,99 @@ + + + + + + Function JavaPropertiesFactory.parseConfig + + + + +
+ +
+
+

Function JavaPropertiesFactory.parseConfig

Parse configuration from the given Java properties string. +

+
+ +
+ override ConfigDictionary parseConfig + ( +
+   string contents +
+ ); +
+
+
+
+ +

Parameters

+ + +
NameDescription
contents Text contents of the config to be parsed.
+
+

Returns

+

The parsed configuration. +

+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/java/loadJavaProperties.html b/docs/mirage/java/loadJavaProperties.html new file mode 100644 index 0000000..4d0a593 --- /dev/null +++ b/docs/mirage/java/loadJavaProperties.html @@ -0,0 +1,99 @@ + + + + + + Function loadJavaProperties + + + + +
+ +
+
+

Function loadJavaProperties

Load a Java properties file from disk. +

+
+ +
+ ConfigDictionary loadJavaProperties + ( +
+   const(string) filePath +
+ ); +
+
+
+
+ +

Parameters

+ + +
NameDescription
filePath Path to the Java properties file.
+
+

Returns

+

The loaded configuration. +

+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/java/parseJavaProperties.html b/docs/mirage/java/parseJavaProperties.html new file mode 100644 index 0000000..ccd39e1 --- /dev/null +++ b/docs/mirage/java/parseJavaProperties.html @@ -0,0 +1,99 @@ + + + + + + Function parseJavaProperties + + + + +
+ +
+
+

Function parseJavaProperties

Parse Java properties from the given Java properties string. +

+
+ +
+ ConfigDictionary parseJavaProperties + ( +
+   const(string) properties +
+ ); +
+
+
+
+ +

Parameters

+ + +
NameDescription
properties Text contents of the config to be parsed.
+
+

Returns

+

The parsed configuration. +

+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/json.html b/docs/mirage/json.html new file mode 100644 index 0000000..d39de5c --- /dev/null +++ b/docs/mirage/json.html @@ -0,0 +1,131 @@ + + + + + + Module mirage.json + + + + +
+ +
+
+

Module mirage.json

Utilities for loading JSON configurations. +

+ +
+
+

Functions

+ + + + + + + + + + + + + + + + + +
NameDescription
+ + loadJsonConfig(filePath) + + Load a JSON configuration file from disk. +
+ + parseJsonConfig(json) + + Parse JSON config from the given JSON string. +
+ + parseJsonConfig(json) + + Parse JSON config from the given JSONValue. +
+
+
+

Classes

+ + + + + + + + + +
NameDescription
+ + JsonConfigFactory + + Creates configuration dictionaries from JSONs. +
+
+
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/json/JsonConfigFactory.html b/docs/mirage/json/JsonConfigFactory.html new file mode 100644 index 0000000..5817081 --- /dev/null +++ b/docs/mirage/json/JsonConfigFactory.html @@ -0,0 +1,134 @@ + + + + + + Class JsonConfigFactory + + + + +
+ +
+
+

Class JsonConfigFactory

Creates configuration dictionaries from JSONs. +

+
+ +
+ class JsonConfigFactory +
  : ConfigFactory + ; +
+
+
+ +

Methods

+ + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ + parseConfig + + (contents) + Parse configuration from the given JSON string. +
+ + parseJson + + (json) + Parse configuration from a JSONValue tree. +
+ + parseJson + + (json) + Alias for parseConfig +
+ + loadFile + + (path) + Loads a configuration from the specified path from disk. +
+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/json/JsonConfigFactory.parseConfig.html b/docs/mirage/json/JsonConfigFactory.parseConfig.html new file mode 100644 index 0000000..34d66e8 --- /dev/null +++ b/docs/mirage/json/JsonConfigFactory.parseConfig.html @@ -0,0 +1,99 @@ + + + + + + Function JsonConfigFactory.parseConfig + + + + +
+ +
+
+

Function JsonConfigFactory.parseConfig

Parse configuration from the given JSON string. +

+
+ +
+ override ConfigDictionary parseConfig + ( +
+   string contents +
+ ); +
+
+
+
+ +

Parameters

+ + +
NameDescription
contents Text contents of the config to be parsed.
+
+

Returns

+

The parsed configuration. +

+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/json/JsonConfigFactory.parseJson.html b/docs/mirage/json/JsonConfigFactory.parseJson.html new file mode 100644 index 0000000..b1f09ec --- /dev/null +++ b/docs/mirage/json/JsonConfigFactory.parseJson.html @@ -0,0 +1,142 @@ + + + + + + JsonConfigFactory.parseJson - multiple declarations + + + + +
+ +
+
+

JsonConfigFactory.parseJson - multiple declarations

+

Function JsonConfigFactory.parseJson

Parse configuration from a JSONValue tree. +

+
+ +
+ ConfigDictionary parseJson + ( +
+   std.json.JSONValue json +
+ ); +
+
+
+
+ +

Parameters

+ + +
NameDescription
json JSONValue config to be parsed.
+
+

Returns

+

The parsed configuration. +

+
+

Function JsonConfigFactory.parseJson

Alias for parseConfig +

+
+ +
+ ConfigDictionary parseJson + ( +
+   string json +
+ ); +
+
+
+
+ +

Parameters

+ + +
NameDescription
json Text contents of the config to be parsed.
+
+

Returns

+

The parsed configuration. +

+
+

See Also

+

parseConfig +

+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/json/loadJsonConfig.html b/docs/mirage/json/loadJsonConfig.html new file mode 100644 index 0000000..0eaccec --- /dev/null +++ b/docs/mirage/json/loadJsonConfig.html @@ -0,0 +1,99 @@ + + + + + + Function loadJsonConfig + + + + +
+ +
+
+

Function loadJsonConfig

Load a JSON configuration file from disk. +

+
+ +
+ ConfigDictionary loadJsonConfig + ( +
+   const(string) filePath +
+ ); +
+
+
+
+ +

Parameters

+ + +
NameDescription
filePath Path to the JSON configuration file.
+
+

Returns

+

The loaded configuration. +

+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/mirage/json/parseJsonConfig.html b/docs/mirage/json/parseJsonConfig.html new file mode 100644 index 0000000..36bc909 --- /dev/null +++ b/docs/mirage/json/parseJsonConfig.html @@ -0,0 +1,138 @@ + + + + + + parseJsonConfig - multiple declarations + + + + +
+ +
+
+

parseJsonConfig - multiple declarations

+

Function parseJsonConfig

Parse JSON config from the given JSON string. +

+
+ +
+ ConfigDictionary parseJsonConfig + ( +
+   const(string) json +
+ ); +
+
+
+
+ +

Parameters

+ + +
NameDescription
json Text contents of the config to be parsed.
+
+

Returns

+

The parsed configuration. +

+
+

Function parseJsonConfig

Parse JSON config from the given JSONValue. +

+
+ +
+ ConfigDictionary parseJsonConfig + ( +
+   const(std.json.JSONValue) json +
+ ); +
+
+
+
+ +

Parameters

+ + +
NameDescription
json JSONValue config to be parsed.
+
+

Returns

+

The parsed configuration. +

+
+ +
+
+
+

Mike Bierlee, m.bierlee@lostmoment.com +

+ +

2022 Mike Bierlee +

+ +

This software is licensed under the terms of the MIT license. + The full terms of the license can be found in the LICENSE file. +

+ +
+
+
+ + \ No newline at end of file diff --git a/docs/sitemap.xml b/docs/sitemap.xml new file mode 100644 index 0000000..2e21407 --- /dev/null +++ b/docs/sitemap.xml @@ -0,0 +1,40 @@ + + +http://127.0.0.1/index.html +http://127.0.0.1/mirage/config.html +http://127.0.0.1/mirage/config/ArrayNode.html +http://127.0.0.1/mirage/config/ConfigCreationException.html +http://127.0.0.1/mirage/config/ConfigDictionary.html +http://127.0.0.1/mirage/config/ConfigDictionary.get.html +http://127.0.0.1/mirage/config/ConfigDictionary.get.html +http://127.0.0.1/mirage/config/ConfigDictionary.get.html +http://127.0.0.1/mirage/config/ConfigDictionary.getConfig.html +http://127.0.0.1/mirage/config/ConfigDictionary.set.html +http://127.0.0.1/mirage/config/ConfigFactory.html +http://127.0.0.1/mirage/config/ConfigFactory.loadFile.html +http://127.0.0.1/mirage/config/ConfigFactory.parseConfig.html +http://127.0.0.1/mirage/config/ConfigNode.html +http://127.0.0.1/mirage/config/ConfigPathNotFoundException.html +http://127.0.0.1/mirage/config/ConfigReadException.html +http://127.0.0.1/mirage/config/ObjectNode.html +http://127.0.0.1/mirage/config/PathParseException.html +http://127.0.0.1/mirage/config/SubstituteConfigVariables.html +http://127.0.0.1/mirage/config/SubstituteEnvironmentVariables.html +http://127.0.0.1/mirage/config/ValueNode.html +http://127.0.0.1/mirage/java.html +http://127.0.0.1/mirage/java/JavaPropertiesFactory.html +http://127.0.0.1/mirage/java/JavaPropertiesFactory.parseConfig.html +http://127.0.0.1/mirage/config/ConfigFactory.loadFile.html +http://127.0.0.1/mirage/java/loadJavaProperties.html +http://127.0.0.1/mirage/java/parseJavaProperties.html +http://127.0.0.1/mirage/json.html +http://127.0.0.1/mirage/json/JsonConfigFactory.html +http://127.0.0.1/mirage/json/JsonConfigFactory.parseConfig.html +http://127.0.0.1/mirage/json/JsonConfigFactory.parseJson.html +http://127.0.0.1/mirage/json/JsonConfigFactory.parseJson.html +http://127.0.0.1/mirage/config/ConfigFactory.loadFile.html +http://127.0.0.1/mirage/json/loadJsonConfig.html +http://127.0.0.1/mirage/json/parseJsonConfig.html +http://127.0.0.1/mirage/json/parseJsonConfig.html +http://127.0.0.1/mirage.html + diff --git a/docs/symbols.js b/docs/symbols.js new file mode 100644 index 0000000..df2d904 --- /dev/null +++ b/docs/symbols.js @@ -0,0 +1,33 @@ +// symbol index generated by DDOX - do not edit +var symbols = [ +{name: 'mirage.config', kind: "module", path: './mirage/config.html', attributes: []}, +{name: 'mirage.config.ArrayNode', kind: "classdeclaration", path: './mirage/config/ArrayNode.html', attributes: []}, +{name: 'mirage.config.ConfigCreationException', kind: "classdeclaration", path: './mirage/config/ConfigCreationException.html', attributes: []}, +{name: 'mirage.config.ConfigDictionary', kind: "classdeclaration", path: './mirage/config/ConfigDictionary.html', attributes: []}, +{name: 'mirage.config.ConfigDictionary.get', kind: "functiondeclaration", path: './mirage/config/ConfigDictionary.get.html', attributes: []}, +{name: 'mirage.config.ConfigDictionary.getConfig', kind: "functiondeclaration", path: './mirage/config/ConfigDictionary.getConfig.html', attributes: []}, +{name: 'mirage.config.ConfigDictionary.set', kind: "functiondeclaration", path: './mirage/config/ConfigDictionary.set.html', attributes: []}, +{name: 'mirage.config.ConfigFactory', kind: "classdeclaration", path: './mirage/config/ConfigFactory.html', attributes: []}, +{name: 'mirage.config.ConfigFactory.loadFile', kind: "functiondeclaration", path: './mirage/config/ConfigFactory.loadFile.html', attributes: []}, +{name: 'mirage.config.ConfigFactory.parseConfig', kind: "functiondeclaration", path: './mirage/config/ConfigFactory.parseConfig.html', attributes: []}, +{name: 'mirage.config.ConfigNode', kind: "interfacedeclaration", path: './mirage/config/ConfigNode.html', attributes: []}, +{name: 'mirage.config.ConfigPathNotFoundException', kind: "classdeclaration", path: './mirage/config/ConfigPathNotFoundException.html', attributes: []}, +{name: 'mirage.config.ConfigReadException', kind: "classdeclaration", path: './mirage/config/ConfigReadException.html', attributes: []}, +{name: 'mirage.config.ObjectNode', kind: "classdeclaration", path: './mirage/config/ObjectNode.html', attributes: []}, +{name: 'mirage.config.PathParseException', kind: "classdeclaration", path: './mirage/config/PathParseException.html', attributes: []}, +{name: 'mirage.config.SubstituteConfigVariables', kind: "aliasdeclaration", path: './mirage/config/SubstituteConfigVariables.html', attributes: []}, +{name: 'mirage.config.SubstituteEnvironmentVariables', kind: "aliasdeclaration", path: './mirage/config/SubstituteEnvironmentVariables.html', attributes: []}, +{name: 'mirage.config.ValueNode', kind: "classdeclaration", path: './mirage/config/ValueNode.html', attributes: []}, +{name: 'mirage.java', kind: "module", path: './mirage/java.html', attributes: []}, +{name: 'mirage.java.JavaPropertiesFactory', kind: "classdeclaration", path: './mirage/java/JavaPropertiesFactory.html', attributes: []}, +{name: 'mirage.java.JavaPropertiesFactory.parseConfig', kind: "functiondeclaration", path: './mirage/java/JavaPropertiesFactory.parseConfig.html', attributes: ["override"]}, +{name: 'mirage.java.loadJavaProperties', kind: "functiondeclaration", path: './mirage/java/loadJavaProperties.html', attributes: []}, +{name: 'mirage.java.parseJavaProperties', kind: "functiondeclaration", path: './mirage/java/parseJavaProperties.html', attributes: []}, +{name: 'mirage.json', kind: "module", path: './mirage/json.html', attributes: []}, +{name: 'mirage.json.JsonConfigFactory', kind: "classdeclaration", path: './mirage/json/JsonConfigFactory.html', attributes: []}, +{name: 'mirage.json.JsonConfigFactory.parseConfig', kind: "functiondeclaration", path: './mirage/json/JsonConfigFactory.parseConfig.html', attributes: ["override"]}, +{name: 'mirage.json.JsonConfigFactory.parseJson', kind: "functiondeclaration", path: './mirage/json/JsonConfigFactory.parseJson.html', attributes: []}, +{name: 'mirage.json.loadJsonConfig', kind: "functiondeclaration", path: './mirage/json/loadJsonConfig.html', attributes: []}, +{name: 'mirage.json.parseJsonConfig', kind: "functiondeclaration", path: './mirage/json/parseJsonConfig.html', attributes: []}, +{name: 'mirage', kind: "module", path: './mirage.html', attributes: []}, +]; diff --git a/source/mirage/java.d b/source/mirage/java.d index 9b66b0a..a9f4711 100644 --- a/source/mirage/java.d +++ b/source/mirage/java.d @@ -59,7 +59,7 @@ class JavaPropertiesFactory : ConfigFactory { * Parse Java properties from the given Java properties string. * Params: - * json = Text contents of the config to be parsed. + * properties = Text contents of the config to be parsed. * Returns: The parsed configuration. */ ConfigDictionary parseJavaProperties(const string properties) { diff --git a/source/mirage/json.d b/source/mirage/json.d index 33b5644..e870179 100644 --- a/source/mirage/json.d +++ b/source/mirage/json.d @@ -36,7 +36,7 @@ class JsonConfigFactory : ConfigFactory { * Parse configuration from a JSONValue tree. * * Params: - * contents = JSONValue config to be parsed. + * json = JSONValue config to be parsed. * Returns: The parsed configuration. */ ConfigDictionary parseJson(JSONValue json) { @@ -47,7 +47,7 @@ class JsonConfigFactory : ConfigFactory { * Alias for parseConfig * * Params: - * contents = Text contents of the config to be parsed. + * json = Text contents of the config to be parsed. * Returns: The parsed configuration. * See_Also: parseConfig */ @@ -111,7 +111,7 @@ ConfigDictionary parseJsonConfig(const string json) { * Parse JSON config from the given JSONValue. * * Params: - * contents = JSONValue config to be parsed. + * json = JSONValue config to be parsed. * Returns: The parsed configuration. */ ConfigDictionary parseJsonConfig(const JSONValue json) {