diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..3f408987 --- /dev/null +++ b/404.html @@ -0,0 +1,457 @@ + + + + + + + + + + + + + + + + + + is-a.dev Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ +

404 - Not found

+ +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 00000000..1cf13b9f Binary files /dev/null and b/assets/images/favicon.png differ diff --git a/assets/javascripts/bundle.51d95adb.min.js b/assets/javascripts/bundle.51d95adb.min.js new file mode 100644 index 00000000..b20ec683 --- /dev/null +++ b/assets/javascripts/bundle.51d95adb.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var Hi=Object.create;var xr=Object.defineProperty;var Pi=Object.getOwnPropertyDescriptor;var $i=Object.getOwnPropertyNames,kt=Object.getOwnPropertySymbols,Ii=Object.getPrototypeOf,Er=Object.prototype.hasOwnProperty,an=Object.prototype.propertyIsEnumerable;var on=(e,t,r)=>t in e?xr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,P=(e,t)=>{for(var r in t||(t={}))Er.call(t,r)&&on(e,r,t[r]);if(kt)for(var r of kt(t))an.call(t,r)&&on(e,r,t[r]);return e};var sn=(e,t)=>{var r={};for(var n in e)Er.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&kt)for(var n of kt(e))t.indexOf(n)<0&&an.call(e,n)&&(r[n]=e[n]);return r};var Ht=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Fi=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of $i(t))!Er.call(e,o)&&o!==r&&xr(e,o,{get:()=>t[o],enumerable:!(n=Pi(t,o))||n.enumerable});return e};var yt=(e,t,r)=>(r=e!=null?Hi(Ii(e)):{},Fi(t||!e||!e.__esModule?xr(r,"default",{value:e,enumerable:!0}):r,e));var fn=Ht((wr,cn)=>{(function(e,t){typeof wr=="object"&&typeof cn!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(wr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,a={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function s(T){return!!(T&&T!==document&&T.nodeName!=="HTML"&&T.nodeName!=="BODY"&&"classList"in T&&"contains"in T.classList)}function f(T){var Ke=T.type,We=T.tagName;return!!(We==="INPUT"&&a[Ke]&&!T.readOnly||We==="TEXTAREA"&&!T.readOnly||T.isContentEditable)}function c(T){T.classList.contains("focus-visible")||(T.classList.add("focus-visible"),T.setAttribute("data-focus-visible-added",""))}function u(T){T.hasAttribute("data-focus-visible-added")&&(T.classList.remove("focus-visible"),T.removeAttribute("data-focus-visible-added"))}function p(T){T.metaKey||T.altKey||T.ctrlKey||(s(r.activeElement)&&c(r.activeElement),n=!0)}function m(T){n=!1}function d(T){s(T.target)&&(n||f(T.target))&&c(T.target)}function h(T){s(T.target)&&(T.target.classList.contains("focus-visible")||T.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(T.target))}function v(T){document.visibilityState==="hidden"&&(o&&(n=!0),B())}function B(){document.addEventListener("mousemove",z),document.addEventListener("mousedown",z),document.addEventListener("mouseup",z),document.addEventListener("pointermove",z),document.addEventListener("pointerdown",z),document.addEventListener("pointerup",z),document.addEventListener("touchmove",z),document.addEventListener("touchstart",z),document.addEventListener("touchend",z)}function re(){document.removeEventListener("mousemove",z),document.removeEventListener("mousedown",z),document.removeEventListener("mouseup",z),document.removeEventListener("pointermove",z),document.removeEventListener("pointerdown",z),document.removeEventListener("pointerup",z),document.removeEventListener("touchmove",z),document.removeEventListener("touchstart",z),document.removeEventListener("touchend",z)}function z(T){T.target.nodeName&&T.target.nodeName.toLowerCase()==="html"||(n=!1,re())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",m,!0),document.addEventListener("pointerdown",m,!0),document.addEventListener("touchstart",m,!0),document.addEventListener("visibilitychange",v,!0),B(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var un=Ht(Sr=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(c){return!1}},r=t(),n=function(c){var u={next:function(){var p=c.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(c){return encodeURIComponent(c).replace(/%20/g,"+")},i=function(c){return decodeURIComponent(String(c).replace(/\+/g," "))},a=function(){var c=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var m=typeof p;if(m!=="undefined")if(m==="string")p!==""&&this._fromString(p);else if(p instanceof c){var d=this;p.forEach(function(re,z){d.append(z,re)})}else if(p!==null&&m==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),c._entries&&(c._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Sr);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(f,c){typeof f!="string"&&(f=String(f)),c&&typeof c!="string"&&(c=String(c));var u=document,p;if(c&&(e.location===void 0||c!==e.location.href)){c=c.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=c,u.head.appendChild(p);try{if(p.href.indexOf(c)!==0)throw new Error(p.href)}catch(T){throw new Error("URL unable to set base "+c+" due to "+T)}}var m=u.createElement("a");m.href=f,p&&(u.body.appendChild(m),m.href=m.href);var d=u.createElement("input");if(d.type="url",d.value=f,m.protocol===":"||!/:/.test(m.href)||!d.checkValidity()&&!c)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:m});var h=new e.URLSearchParams(this.search),v=!0,B=!0,re=this;["append","delete","set"].forEach(function(T){var Ke=h[T];h[T]=function(){Ke.apply(h,arguments),v&&(B=!1,re.search=h.toString(),B=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var z=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==z&&(z=this.search,B&&(v=!1,this.searchParams._fromString(this.search),v=!0))}})},a=i.prototype,s=function(f){Object.defineProperty(a,f,{get:function(){return this._anchorElement[f]},set:function(c){this._anchorElement[f]=c},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(f){s(f)}),Object.defineProperty(a,"search",{get:function(){return this._anchorElement.search},set:function(f){this._anchorElement.search=f,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(a,{toString:{get:function(){var f=this;return function(){return f.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(f){this._anchorElement.href=f,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(f){this._anchorElement.pathname=f},enumerable:!0},origin:{get:function(){var f={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],c=this._anchorElement.port!=f&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(c?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(f){},enumerable:!0},username:{get:function(){return""},set:function(f){},enumerable:!0}}),i.createObjectURL=function(f){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(f){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Sr)});var Qr=Ht((Lt,Kr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof Lt=="object"&&typeof Kr=="object"?Kr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Lt=="object"?Lt.ClipboardJS=r():t.ClipboardJS=r()})(Lt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return ki}});var a=i(279),s=i.n(a),f=i(370),c=i.n(f),u=i(817),p=i.n(u);function m(j){try{return document.execCommand(j)}catch(O){return!1}}var d=function(O){var w=p()(O);return m("cut"),w},h=d;function v(j){var O=document.documentElement.getAttribute("dir")==="rtl",w=document.createElement("textarea");w.style.fontSize="12pt",w.style.border="0",w.style.padding="0",w.style.margin="0",w.style.position="absolute",w.style[O?"right":"left"]="-9999px";var k=window.pageYOffset||document.documentElement.scrollTop;return w.style.top="".concat(k,"px"),w.setAttribute("readonly",""),w.value=j,w}var B=function(O,w){var k=v(O);w.container.appendChild(k);var F=p()(k);return m("copy"),k.remove(),F},re=function(O){var w=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},k="";return typeof O=="string"?k=B(O,w):O instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(O==null?void 0:O.type)?k=B(O.value,w):(k=p()(O),m("copy")),k},z=re;function T(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?T=function(w){return typeof w}:T=function(w){return w&&typeof Symbol=="function"&&w.constructor===Symbol&&w!==Symbol.prototype?"symbol":typeof w},T(j)}var Ke=function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},w=O.action,k=w===void 0?"copy":w,F=O.container,q=O.target,Le=O.text;if(k!=="copy"&&k!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&T(q)==="object"&&q.nodeType===1){if(k==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(k==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Le)return z(Le,{container:F});if(q)return k==="cut"?h(q):z(q,{container:F})},We=Ke;function Ie(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Ie=function(w){return typeof w}:Ie=function(w){return w&&typeof Symbol=="function"&&w.constructor===Symbol&&w!==Symbol.prototype?"symbol":typeof w},Ie(j)}function Ti(j,O){if(!(j instanceof O))throw new TypeError("Cannot call a class as a function")}function nn(j,O){for(var w=0;w0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof F.action=="function"?F.action:this.defaultAction,this.target=typeof F.target=="function"?F.target:this.defaultTarget,this.text=typeof F.text=="function"?F.text:this.defaultText,this.container=Ie(F.container)==="object"?F.container:document.body}},{key:"listenClick",value:function(F){var q=this;this.listener=c()(F,"click",function(Le){return q.onClick(Le)})}},{key:"onClick",value:function(F){var q=F.delegateTarget||F.currentTarget,Le=this.action(q)||"copy",Rt=We({action:Le,container:this.container,target:this.target(q),text:this.text(q)});this.emit(Rt?"success":"error",{action:Le,text:Rt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(F){return yr("action",F)}},{key:"defaultTarget",value:function(F){var q=yr("target",F);if(q)return document.querySelector(q)}},{key:"defaultText",value:function(F){return yr("text",F)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(F){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return z(F,q)}},{key:"cut",value:function(F){return h(F)}},{key:"isSupported",value:function(){var F=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof F=="string"?[F]:F,Le=!!document.queryCommandSupported;return q.forEach(function(Rt){Le=Le&&!!document.queryCommandSupported(Rt)}),Le}}]),w}(s()),ki=Ri},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function a(s,f){for(;s&&s.nodeType!==o;){if(typeof s.matches=="function"&&s.matches(f))return s;s=s.parentNode}}n.exports=a},438:function(n,o,i){var a=i(828);function s(u,p,m,d,h){var v=c.apply(this,arguments);return u.addEventListener(m,v,h),{destroy:function(){u.removeEventListener(m,v,h)}}}function f(u,p,m,d,h){return typeof u.addEventListener=="function"?s.apply(null,arguments):typeof m=="function"?s.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return s(v,p,m,d,h)}))}function c(u,p,m,d){return function(h){h.delegateTarget=a(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=f},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var a=Object.prototype.toString.call(i);return i!==void 0&&(a==="[object NodeList]"||a==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var a=Object.prototype.toString.call(i);return a==="[object Function]"}},370:function(n,o,i){var a=i(879),s=i(438);function f(m,d,h){if(!m&&!d&&!h)throw new Error("Missing required arguments");if(!a.string(d))throw new TypeError("Second argument must be a String");if(!a.fn(h))throw new TypeError("Third argument must be a Function");if(a.node(m))return c(m,d,h);if(a.nodeList(m))return u(m,d,h);if(a.string(m))return p(m,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(m,d,h){return m.addEventListener(d,h),{destroy:function(){m.removeEventListener(d,h)}}}function u(m,d,h){return Array.prototype.forEach.call(m,function(v){v.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(m,function(v){v.removeEventListener(d,h)})}}}function p(m,d,h){return s(document.body,m,d,h)}n.exports=f},817:function(n){function o(i){var a;if(i.nodeName==="SELECT")i.focus(),a=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var s=i.hasAttribute("readonly");s||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),s||i.removeAttribute("readonly"),a=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var f=window.getSelection(),c=document.createRange();c.selectNodeContents(i),f.removeAllRanges(),f.addRange(c),a=f.toString()}return a}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,a,s){var f=this.e||(this.e={});return(f[i]||(f[i]=[])).push({fn:a,ctx:s}),this},once:function(i,a,s){var f=this;function c(){f.off(i,c),a.apply(s,arguments)}return c._=a,this.on(i,c,s)},emit:function(i){var a=[].slice.call(arguments,1),s=((this.e||(this.e={}))[i]||[]).slice(),f=0,c=s.length;for(f;f{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var is=/["'&<>]/;Jo.exports=as;function as(e){var t=""+e,r=is.exec(t);if(!r)return t;var n,o="",i=0,a=0;for(i=r.index;i0&&i[i.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],a;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i}function D(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n1||s(m,d)})})}function s(m,d){try{f(n[m](d))}catch(h){p(i[0][3],h)}}function f(m){m.value instanceof Xe?Promise.resolve(m.value.v).then(c,u):p(i[0][2],m)}function c(m){s("next",m)}function u(m){s("throw",m)}function p(m,d){m(d),i.shift(),i.length&&s(i[0][0],i[0][1])}}function mn(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof xe=="function"?xe(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(a){return new Promise(function(s,f){a=e[i](a),o(s,f,a.done,a.value)})}}function o(i,a,s,f){Promise.resolve(f).then(function(c){i({value:c,done:s})},a)}}function A(e){return typeof e=="function"}function at(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var $t=at(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(n,o){return o+1+") "+n.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function De(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Fe=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var s=xe(a),f=s.next();!f.done;f=s.next()){var c=f.value;c.remove(this)}}catch(v){t={error:v}}finally{try{f&&!f.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}else a.remove(this);var u=this.initialTeardown;if(A(u))try{u()}catch(v){i=v instanceof $t?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var m=xe(p),d=m.next();!d.done;d=m.next()){var h=d.value;try{dn(h)}catch(v){i=i!=null?i:[],v instanceof $t?i=D(D([],W(i)),W(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{d&&!d.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}}if(i)throw new $t(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)dn(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&De(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&De(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Or=Fe.EMPTY;function It(e){return e instanceof Fe||e&&"closed"in e&&A(e.remove)&&A(e.add)&&A(e.unsubscribe)}function dn(e){A(e)?e():e.unsubscribe()}var Ae={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var st={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,a=o.isStopped,s=o.observers;return i||a?Or:(this.currentObservers=null,s.push(r),new Fe(function(){n.currentObservers=null,De(s,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,a=n.isStopped;o?r.error(i):a&&r.complete()},t.prototype.asObservable=function(){var r=new U;return r.source=this,r},t.create=function(r,n){return new wn(r,n)},t}(U);var wn=function(e){ne(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Or},t}(E);var Et={now:function(){return(Et.delegate||Date).now()},delegate:void 0};var wt=function(e){ne(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Et);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,a=n._infiniteTimeWindow,s=n._timestampProvider,f=n._windowTime;o||(i.push(r),!a&&i.push(s.now()+f)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,a=o._buffer,s=a.slice(),f=0;f0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ut.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var a=r.actions;n!=null&&((i=a[a.length-1])===null||i===void 0?void 0:i.id)!==n&&(ut.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Ut);var On=function(e){ne(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Wt);var we=new On(Tn);var R=new U(function(e){return e.complete()});function Dt(e){return e&&A(e.schedule)}function kr(e){return e[e.length-1]}function Qe(e){return A(kr(e))?e.pop():void 0}function Se(e){return Dt(kr(e))?e.pop():void 0}function Vt(e,t){return typeof kr(e)=="number"?e.pop():t}var pt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function zt(e){return A(e==null?void 0:e.then)}function Nt(e){return A(e[ft])}function qt(e){return Symbol.asyncIterator&&A(e==null?void 0:e[Symbol.asyncIterator])}function Kt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Ki(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Qt=Ki();function Yt(e){return A(e==null?void 0:e[Qt])}function Gt(e){return ln(this,arguments,function(){var r,n,o,i;return Pt(this,function(a){switch(a.label){case 0:r=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,Xe(r.read())];case 3:return n=a.sent(),o=n.value,i=n.done,i?[4,Xe(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,Xe(o)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Bt(e){return A(e==null?void 0:e.getReader)}function $(e){if(e instanceof U)return e;if(e!=null){if(Nt(e))return Qi(e);if(pt(e))return Yi(e);if(zt(e))return Gi(e);if(qt(e))return _n(e);if(Yt(e))return Bi(e);if(Bt(e))return Ji(e)}throw Kt(e)}function Qi(e){return new U(function(t){var r=e[ft]();if(A(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Yi(e){return new U(function(t){for(var r=0;r=2;return function(n){return n.pipe(e?_(function(o,i){return e(o,i,n)}):me,Oe(1),r?He(t):zn(function(){return new Xt}))}}function Nn(){for(var e=[],t=0;t=2,!0))}function fe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new E}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,a=i===void 0?!0:i,s=e.resetOnRefCountZero,f=s===void 0?!0:s;return function(c){var u,p,m,d=0,h=!1,v=!1,B=function(){p==null||p.unsubscribe(),p=void 0},re=function(){B(),u=m=void 0,h=v=!1},z=function(){var T=u;re(),T==null||T.unsubscribe()};return g(function(T,Ke){d++,!v&&!h&&B();var We=m=m!=null?m:r();Ke.add(function(){d--,d===0&&!v&&!h&&(p=jr(z,f))}),We.subscribe(Ke),!u&&d>0&&(u=new et({next:function(Ie){return We.next(Ie)},error:function(Ie){v=!0,B(),p=jr(re,o,Ie),We.error(Ie)},complete:function(){h=!0,B(),p=jr(re,a),We.complete()}}),$(T).subscribe(u))})(c)}}function jr(e,t){for(var r=[],n=2;ne.next(document)),e}function K(e,t=document){return Array.from(t.querySelectorAll(e))}function V(e,t=document){let r=se(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function se(e,t=document){return t.querySelector(e)||void 0}function _e(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function tr(e){return L(b(document.body,"focusin"),b(document.body,"focusout")).pipe(ke(1),l(()=>{let t=_e();return typeof t!="undefined"?e.contains(t):!1}),N(e===_e()),Y())}function Be(e){return{x:e.offsetLeft,y:e.offsetTop}}function Yn(e){return L(b(window,"load"),b(window,"resize")).pipe(Ce(0,we),l(()=>Be(e)),N(Be(e)))}function rr(e){return{x:e.scrollLeft,y:e.scrollTop}}function dt(e){return L(b(e,"scroll"),b(window,"resize")).pipe(Ce(0,we),l(()=>rr(e)),N(rr(e)))}var Bn=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!zr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),xa?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!zr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=ya.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Jn=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Zn=typeof WeakMap!="undefined"?new WeakMap:new Bn,eo=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=Ea.getInstance(),n=new Ra(t,r,this);Zn.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){eo.prototype[e]=function(){var t;return(t=Zn.get(this))[e].apply(t,arguments)}});var ka=function(){return typeof nr.ResizeObserver!="undefined"?nr.ResizeObserver:eo}(),to=ka;var ro=new E,Ha=I(()=>H(new to(e=>{for(let t of e)ro.next(t)}))).pipe(x(e=>L(Te,H(e)).pipe(C(()=>e.disconnect()))),J(1));function de(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ge(e){return Ha.pipe(S(t=>t.observe(e)),x(t=>ro.pipe(_(({target:r})=>r===e),C(()=>t.unobserve(e)),l(()=>de(e)))),N(de(e)))}function bt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function ar(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var no=new E,Pa=I(()=>H(new IntersectionObserver(e=>{for(let t of e)no.next(t)},{threshold:0}))).pipe(x(e=>L(Te,H(e)).pipe(C(()=>e.disconnect()))),J(1));function sr(e){return Pa.pipe(S(t=>t.observe(e)),x(t=>no.pipe(_(({target:r})=>r===e),C(()=>t.unobserve(e)),l(({isIntersecting:r})=>r))))}function oo(e,t=16){return dt(e).pipe(l(({y:r})=>{let n=de(e),o=bt(e);return r>=o.height-n.height-t}),Y())}var cr={drawer:V("[data-md-toggle=drawer]"),search:V("[data-md-toggle=search]")};function io(e){return cr[e].checked}function qe(e,t){cr[e].checked!==t&&cr[e].click()}function je(e){let t=cr[e];return b(t,"change").pipe(l(()=>t.checked),N(t.checked))}function $a(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ia(){return L(b(window,"compositionstart").pipe(l(()=>!0)),b(window,"compositionend").pipe(l(()=>!1))).pipe(N(!1))}function ao(){let e=b(window,"keydown").pipe(_(t=>!(t.metaKey||t.ctrlKey)),l(t=>({mode:io("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),_(({mode:t,type:r})=>{if(t==="global"){let n=_e();if(typeof n!="undefined")return!$a(n,r)}return!0}),fe());return Ia().pipe(x(t=>t?R:e))}function Me(){return new URL(location.href)}function ot(e){location.href=e.href}function so(){return new E}function co(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)co(e,r)}function M(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)co(n,o);return n}function fr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function fo(){return location.hash.substring(1)}function uo(e){let t=M("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Fa(){return b(window,"hashchange").pipe(l(fo),N(fo()),_(e=>e.length>0),J(1))}function po(){return Fa().pipe(l(e=>se(`[id="${e}"]`)),_(e=>typeof e!="undefined"))}function Nr(e){let t=matchMedia(e);return Zt(r=>t.addListener(()=>r(t.matches))).pipe(N(t.matches))}function lo(){let e=matchMedia("print");return L(b(window,"beforeprint").pipe(l(()=>!0)),b(window,"afterprint").pipe(l(()=>!1))).pipe(N(e.matches))}function qr(e,t){return e.pipe(x(r=>r?t():R))}function ur(e,t={credentials:"same-origin"}){return ve(fetch(`${e}`,t)).pipe(ce(()=>R),x(r=>r.status!==200?Tt(()=>new Error(r.statusText)):H(r)))}function Ue(e,t){return ur(e,t).pipe(x(r=>r.json()),J(1))}function mo(e,t){let r=new DOMParser;return ur(e,t).pipe(x(n=>n.text()),l(n=>r.parseFromString(n,"text/xml")),J(1))}function pr(e){let t=M("script",{src:e});return I(()=>(document.head.appendChild(t),L(b(t,"load"),b(t,"error").pipe(x(()=>Tt(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(l(()=>{}),C(()=>document.head.removeChild(t)),Oe(1))))}function ho(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function bo(){return L(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(l(ho),N(ho()))}function vo(){return{width:innerWidth,height:innerHeight}}function go(){return b(window,"resize",{passive:!0}).pipe(l(vo),N(vo()))}function yo(){return Q([bo(),go()]).pipe(l(([e,t])=>({offset:e,size:t})),J(1))}function lr(e,{viewport$:t,header$:r}){let n=t.pipe(X("size")),o=Q([n,r]).pipe(l(()=>Be(e)));return Q([r,t,o]).pipe(l(([{height:i},{offset:a,size:s},{x:f,y:c}])=>({offset:{x:a.x-f,y:a.y-c+i},size:s})))}(()=>{function e(n,o){parent.postMessage(n,o||"*")}function t(...n){return n.reduce((o,i)=>o.then(()=>new Promise(a=>{let s=document.createElement("script");s.src=i,s.onload=a,document.body.appendChild(s)})),Promise.resolve())}var r=class{constructor(n){this.url=n,this.onerror=null,this.onmessage=null,this.onmessageerror=null,this.m=a=>{a.source===this.w&&(a.stopImmediatePropagation(),this.dispatchEvent(new MessageEvent("message",{data:a.data})),this.onmessage&&this.onmessage(a))},this.e=(a,s,f,c,u)=>{if(s===this.url.toString()){let p=new ErrorEvent("error",{message:a,filename:s,lineno:f,colno:c,error:u});this.dispatchEvent(p),this.onerror&&this.onerror(p)}};let o=new EventTarget;this.addEventListener=o.addEventListener.bind(o),this.removeEventListener=o.removeEventListener.bind(o),this.dispatchEvent=o.dispatchEvent.bind(o);let i=document.createElement("iframe");i.width=i.height=i.frameBorder="0",document.body.appendChild(this.iframe=i),this.w.document.open(),this.w.document.write(` + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Setting up Cloudflare pages with your is-a.dev subdomain

+

Creating a pages.dev site

+

Follow their guide on how to set it up.

+

Point your pages.dev site to your is-a.dev subdomain

+

Follow their guide on how to do it. +Only follow the "Add a custom domain" section and then follow the rest of the steps here.

+

Creating the domain file

+

Create a JSON file inside domains directory (domains/<subdomain>.json) with the following content:

+
{
+    "owner": {
+        "username": "github-username",
+        "email": "email@gmail.com"
+    },
+    "record": {
+        "CNAME": "sitename.pages.dev"
+    }
+} 
+
+

Configuring

+
    +
  • After your pull request has been merged with the main repository you should be able to visit your new is-a.dev domain and it should show you your pages.dev site +if it doesn't then you have configured your domain wrong.
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/dashboard/index.html b/dashboard/index.html new file mode 100644 index 00000000..ad535e2e --- /dev/null +++ b/dashboard/index.html @@ -0,0 +1,552 @@ + + + + + + + + + + + + + + + + + + + + Dashboard - is-a.dev Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Register your is-a.dev subdomain using the is-a-dev Dashboard

+

Login to the dashboard

+

First login to the dashboard using your GitHub account.

+

Registering your subdomain

+

On the left hand side, click on the button that says Register with a keyboard icon.

+

Then follow the steps to register your subdomain.

+

It will fork the is-a-dev/register repository, assuming you haven't done that already and it will create a pull request for you.

+

Finally, you'll have to wait for a maintainer to merge it, which should not take too long.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/delete_domain/index.html b/delete_domain/index.html new file mode 100644 index 00000000..b13730b4 --- /dev/null +++ b/delete_domain/index.html @@ -0,0 +1,557 @@ + + + + + + + + + + + + + + + + + + + + + + Delete Your Domain - is-a.dev Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

How to delete your is-a.dev domain

+

Open your fork of the is-a-dev/register repository

+
    +
  1. Open your fork, or if you deleted it, fork the repository once again.
  2. +
  3. Find your domain file in the domains/ folder (e.g. /domains/myname.json)
  4. +
  5. Press the 3 dots and press the Delete file button.
  6. +
+

+
    +
  1. Press Commit changes.
  2. +
+

+
    +
  1. In the popup that appears, press Commit changes once again.
  2. +
+

+
    +
  1. Click the Contribute button, then press Open pull request.
  2. +
+

+
    +
  1. Press Create pull request again.
  2. +
+

+

And you're done! After you pull request has been merged, the domain will be deleted.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/discord_verification/index.html b/discord_verification/index.html new file mode 100644 index 00000000..44b5f36a --- /dev/null +++ b/discord_verification/index.html @@ -0,0 +1,587 @@ + + + + + + + + + + + + + + + + + + + + + + Discord Domain Verification - is-a.dev Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Setting up Discord domain connection with your is-a.dev domain

+

Get your verification string

+
    +
  1. Open your Discord app and press Settings.
  2. +
+

+
    +
  1. Open the Connections section.
  2. +
+

+
    +
  1. Press the View more button.
  2. +
+

+
    +
  1. Click on the domain button (the globe icon).
  2. +
+

+
    +
  1. In the field that appears type your is-a.dev domain name (e.g. myname.is-a.dev).
  2. +
+

+
    +
  1. Copy the verification string.
  2. +
+

+

Create the domain file

+

Create a JSON file inside the domains/ directory called domains/_discord.yourname.json with the following content:

+
{
+    "owner": {
+        "username": "github-username",
+        "email": "email@address"
+    },
+    "record": {
+        "TXT": "discord-verification-string"
+    }
+} 
+
+

Configuration

+

After your pull request has been merged, repeat the steps to get the verification string and press the Verify button. +If it shows any error such as Unable to verify your domain, try waiting a few minutes (sometimes up to 24 hours) as the DNS change might not have reflected on the DNS server.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/domain_structure/index.html b/domain_structure/index.html new file mode 100644 index 00000000..0390d72b --- /dev/null +++ b/domain_structure/index.html @@ -0,0 +1,769 @@ + + + + + + + + + + + + + + + + + + + + + + Domain Structure - is-a.dev Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Domains JSON file

+

To register a subdomain, you need to create a new JSON file in the domains directory through a pull request. For example, to register example.is-a.dev, you would create a file named example.json in the domains directory. The full path would be domains/example.json.

+

Filename

+

Note: You can include . (dots) in your filename to register a sub-subdomain (e.g., blog.example.is-a.dev). However, each segment of your subdomain must meet the following criteria:

+

The filename:

+
    +
  • Must be alphanumeric, in lowercase, with dashes as separators.
  • +
  • Must be at least 2 characters.
  • +
  • Must have a .json file extension.
  • +
+

Examples of Invalid Filenames

+
    +
  • a.json (filename is less than 2 characters)
  • +
  • A.json (filename contains uppercase letters)
  • +
  • a..json (filename contains consecutive dots)
  • +
  • .a.json (filename starts with a dot)
  • +
  • a .json (filename contains a space)
  • +
  • a$.json (filename contains a non-alphanumeric character)
  • +
  • a.json.json (filename contains more than one .json extension)
  • +
+

Examples of Valid Filenames

+

All the filenames below meet all the criteria. The reason in parentheses is just an example of one of the criteria they meet.

+
    +
  • ab.json (at least 2 characters long)
  • +
  • example.json (alphanumeric and in lowercase)
  • +
  • blog.example.json (includes dots to register a sub-subdomain)
  • +
  • my-blog.json (uses dashes as separators, which is recommended)
  • +
+

Structure

+

owner (required)

+

You need to specify some information about yourself here. This is so that you can be contacted if required. +In the owner object, the fields username and email are required. You can add more information in this object if you want. +

{
+  "owner": {
+    "username": "<github-username>",
+    "email": "<email@address>"
+  }
+}
+

+

description

+

Describe your domain name and your usage. This is purely for documentation purpose and is optional.

+

repo

+

This is a link to your website repository or your github account. This is purely for documentation purpose and is optional.

+

record (required)

+

This section is where you specify the DNS records. The supported types are:

+
    +
  • CNAME
  • +
  • A
  • +
  • AAAA
  • +
  • URL
  • +
  • MX
  • +
  • TXT
  • +
+

Below are some examples for the given record types:

+
    +
  • CNAME record: This must be a hostname (something.tld). It cannot be used in conjunction with any other record types. This is typically used to map your domain to a specific server. +
    {
    +  "record": {
    +    "CNAME": "<github-username>.github.io"
    +  }
    +}
    +
  • +
  • A record: This must be a list of IPv4 addresses. These addresses point your domain to a specific server. +
    {
    +  "record": {
    +    "A": [
    +      "192.0.2.1",
    +      "198.51.100.1",
    +      "203.0.113.1"
    +    ]
    +  }
    +}
    +
  • +
  • AAAA record: This must be a list of IPv6 addresses. Like the A record, these addresses point your domain to a specific server. +
    {
    +  "record": {
    +    "AAAA": [
    +      "2001:0db8:85a3:0000:0000:8a2e:0370:7334",
    +      "2001:0db8:85a3:0000:0000:8a2e:0370:7335",
    +      "2001:0db8:85a3:0000:0000:8a2e:0370:7336"
    +    ]
    +  }
    +}
    +
  • +
  • URL record: This redirects your domain to another URL. +
    {
    +  "record": {
    +    "URL": "https://my-other-website.com"
    +  }
    +}
    +
  • +
  • MX record: This must be a list of hostnames. These hostnames specify the mail servers that handle emails for your domain. +
    {
    +  "record": {
    +    "MX": [
    +      "mx1.improvmx.com",
    +      "mx2.improvmx.com"
    +    ]
    +  }
    +}
    +
  • +
  • TXT record: This can be either a single string or a list of strings. TXT records are often used for various purposes, such as verifying domain ownership and ensuring email security. +
    {
    +  "record": {
    +    "TXT": "Hello World!"
    +  }
    +}
    +
    +
    {
    +  "record": {
    +    "TXT": ["Hello", "World!"]
    +  }
    +}
    +
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/edit_domain/index.html b/edit_domain/index.html new file mode 100644 index 00000000..63a6e617 --- /dev/null +++ b/edit_domain/index.html @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + Edit Your Domain - is-a.dev Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

How to edit your is-a.dev domain

+

Open your fork of the is-a-dev/register repository

+
    +
  1. Open your fork, or if you deleted it, fork the repository once again.
  2. +
  3. Find your domain file in the domains/ folder (e.g. /domains/myname.json)
  4. +
  5. Press the Edit this file button (a pencil icon).
  6. +
+

+
    +
  1. Apply your changes in the text field and then press the Commit changes button.
  2. +
+

+
    +
  1. In the pop-up that appears, press the button Commit changes.
  2. +
+

+
    +
  1. Press on the register text to go back to the homepage of the repository.
  2. +
+

+
    +
  1. Press the Contribute button and then press on the Open pull request button.
  2. +
+

+
    +
  1. Press the Create pull request button.
  2. +
+

+
    +
  1. Complete the pull request template in the description field, add a title to the pull request, then press Create pull request.
  2. +
+

+

And you're done! After you pull request has been merged, the domain should be updated with-in 24 hours.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/github_pages/index.html b/github_pages/index.html new file mode 100644 index 00000000..b367e239 --- /dev/null +++ b/github_pages/index.html @@ -0,0 +1,604 @@ + + + + + + + + + + + + + + + + + + + + + + GitHub Pages - is-a.dev Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+ +
+ + + +
+
+ + + + + +

Setting up GitHub pages with is-a.dev subdomain

+

Creating a GitHub pages repository

+

You can create a GitHub pages website by creating a repository with the name <github-username>.github.io. For more information about GitHub pages, please read through their guide.

+

Creating the domain file

+

Create a JSON file inside domains directory (domains/<subdomain>.json) with the following content +

{
+    "description": "Describe the use of this subdomain",
+    "repo": "https://github.com/<github-username>/<github-username>.github.io",
+    "owner": {
+        "username": "<github-username>",
+        "email": "email@address",
+        "twitter": "<twitter-username>"
+    },
+    "record": {
+        "CNAME": "<username>.github.io"
+    }
+} 
+

+

Configuring

+
    +
  • After the pull request is merged, you will see a 404 error on <your-subdomain>.is-a.dev. To fix this, go to your GitHub pages repository's Settings > GitHub pages > Custom domain and add <your-subdomain>.is-a.dev in the given field. Only do this after your pull request is merged.
  • +
  • Check the Enforce HTTPS checkbox below the custom domain input.
  • +
+

Using is-a.dev for all GitHub Pages sites in your account

+

It is possible to have a unique subdomain on your is-a.dev domain for each repository which has Pages enabled.

+

In order to utilise this, you must ensure the following conditions are met: +1) The website which hosts the "root" (<subdomain>.is-a.dev) must be named <username>.github.io +2) That repo must have <subdomain>.is-a.dev as the custom domain within the Pages settings. +3) Every other repo must not have a custom domain set in the Pages settings. +4) Links to these hosted repos must end with / (e.g https://<subdomain>.is-a.dev/<project>/)

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/github_pages_verification/index.html b/github_pages_verification/index.html new file mode 100644 index 00000000..47c7ff56 --- /dev/null +++ b/github_pages_verification/index.html @@ -0,0 +1,583 @@ + + + + + + + + + + + + + + + + + + + + + + GitHub Pages Domain Verification - is-a.dev Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Verify your is-a.dev Domain with GitHub Pages

+

Get your verification string

+
    +
  1. Open GitHub, press on your profile icon on the top right, and press Settings.
  2. +
+

+
    +
  1. Press Pages.
  2. +
+

+
    +
  1. Press Add a domain.
  2. +
+

+
    +
  1. In the field that appears, type your is-a.dev domain name (e.g., myname.is-a.dev) and press Add domain.
  2. +
+

+
    +
  1. Copy the hostname and the verification string.
  2. +
+

+

Create the domain file

+

Create a JSON file inside the domains/ directory called domains/hostname.json using the hostname you copied in step 5 with the following content:

+
{
+    "owner": {
+        "username": "github-username",
+        "email": "email@address"
+    },
+    "record": {
+        "TXT": "github-verification-string"
+    }
+}
+
+

Configuration

+

After your pull request has been merged, repeat the steps to get the verification string and press the Verify button. +If it shows any error such as Unable to verify your domain, try waiting a few minutes (sometimes up to 24 hours) as the DNS change might not have reflected on the DNS server.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/hashnode/index.html b/hashnode/index.html new file mode 100644 index 00000000..7a66ebff --- /dev/null +++ b/hashnode/index.html @@ -0,0 +1,514 @@ + + + + + + + + + + + + + + + + + + + + + + Hashnode Blog - is-a.dev Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Hashnode Blog

+

When you create your hashnode blog, hashnode provides a free hashnode.dev subdomain for you. However, you can set up your own is-a.dev subdomain.

+

In this guide, you will learn how to accomplish this.

+
+
    +
  1. +

    Log in to your Hashnode account.

    +
  2. +
  3. +

    Click on your avatar at the bottom-left corner of the page on desktop or top-right corner on mobile.

    +
  4. +
+

Hashnode's Feed

+
    +
  1. Click on the Blog Dashboard option from the popup modal to access your blog's dashboard.
  2. +
+

Hashnode's Feed

+
    +
  1. Navigate to the Domain tab and enter your domain without the www or https:// prefix in the text field provided. Then click on the Update button to proceed.
  2. +
+

Hashnode's Blog Domain Tab

+
    +
  1. Go to your fork of the is-a-dev/register repository, edit your subdomain's JSON file, make sure you remove any old records, then add this: +
    "CNAME": "hashnode.network"
    +
  2. +
+

Once done, your hashnode blog is setup to use your subdomain, all you have to do is wait sometime for the DNS to propogate. These changes could take from 1 hour to around 48 hours, so please be patient, It'll most likely be ready within a hour. +Enjoy your hashnode Blog, With Your Sweet .is-a.dev Subdomain! If your need more help: please read this support article on hashnode support: https://support.hashnode.com/docs/mapping-domain/, this should help you more, if you need more help related to Hashnode, then please visit the Hashnode Support Center. Remeber, is-a.dev has no links with hashnode, so please do not create issues on our github, saying that your hashnode blog is having issues, we simply will not respond to them.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/img/banner.png b/img/banner.png new file mode 100644 index 00000000..bfa9b813 Binary files /dev/null and b/img/banner.png differ diff --git a/img/delete_domain_step_1.png b/img/delete_domain_step_1.png new file mode 100644 index 00000000..2815a79e Binary files /dev/null and b/img/delete_domain_step_1.png differ diff --git a/img/delete_domain_step_2.png b/img/delete_domain_step_2.png new file mode 100644 index 00000000..d951cd2f Binary files /dev/null and b/img/delete_domain_step_2.png differ diff --git a/img/delete_domain_step_3.png b/img/delete_domain_step_3.png new file mode 100644 index 00000000..d7d84049 Binary files /dev/null and b/img/delete_domain_step_3.png differ diff --git a/img/delete_domain_step_4.png b/img/delete_domain_step_4.png new file mode 100644 index 00000000..6140b269 Binary files /dev/null and b/img/delete_domain_step_4.png differ diff --git a/img/delete_domain_step_5.png b/img/delete_domain_step_5.png new file mode 100644 index 00000000..b40cf420 Binary files /dev/null and b/img/delete_domain_step_5.png differ diff --git a/img/discord_step_1.png b/img/discord_step_1.png new file mode 100644 index 00000000..29e8ca89 Binary files /dev/null and b/img/discord_step_1.png differ diff --git a/img/discord_step_2.png b/img/discord_step_2.png new file mode 100644 index 00000000..13b5affd Binary files /dev/null and b/img/discord_step_2.png differ diff --git a/img/discord_step_3.png b/img/discord_step_3.png new file mode 100644 index 00000000..95ff15ec Binary files /dev/null and b/img/discord_step_3.png differ diff --git a/img/discord_step_4.png b/img/discord_step_4.png new file mode 100644 index 00000000..ef1e437f Binary files /dev/null and b/img/discord_step_4.png differ diff --git a/img/discord_step_5.png b/img/discord_step_5.png new file mode 100644 index 00000000..1af09f72 Binary files /dev/null and b/img/discord_step_5.png differ diff --git a/img/discord_step_6.png b/img/discord_step_6.png new file mode 100644 index 00000000..227eb120 Binary files /dev/null and b/img/discord_step_6.png differ diff --git a/img/edit_domain_step_1.png b/img/edit_domain_step_1.png new file mode 100644 index 00000000..d2258b95 Binary files /dev/null and b/img/edit_domain_step_1.png differ diff --git a/img/edit_domain_step_2.png b/img/edit_domain_step_2.png new file mode 100644 index 00000000..4dc8f615 Binary files /dev/null and b/img/edit_domain_step_2.png differ diff --git a/img/edit_domain_step_3.png b/img/edit_domain_step_3.png new file mode 100644 index 00000000..e6541ff3 Binary files /dev/null and b/img/edit_domain_step_3.png differ diff --git a/img/edit_domain_step_4.png b/img/edit_domain_step_4.png new file mode 100644 index 00000000..32d87b05 Binary files /dev/null and b/img/edit_domain_step_4.png differ diff --git a/img/edit_domain_step_5.png b/img/edit_domain_step_5.png new file mode 100644 index 00000000..66f71017 Binary files /dev/null and b/img/edit_domain_step_5.png differ diff --git a/img/edit_domain_step_6.png b/img/edit_domain_step_6.png new file mode 100644 index 00000000..26681d05 Binary files /dev/null and b/img/edit_domain_step_6.png differ diff --git a/img/edit_domain_step_7.png b/img/edit_domain_step_7.png new file mode 100644 index 00000000..a75a0873 Binary files /dev/null and b/img/edit_domain_step_7.png differ diff --git a/img/favicon.ico b/img/favicon.ico new file mode 100644 index 00000000..d4eddfab Binary files /dev/null and b/img/favicon.ico differ diff --git a/img/github_pages_verification_step_1.png b/img/github_pages_verification_step_1.png new file mode 100644 index 00000000..9f7ff980 Binary files /dev/null and b/img/github_pages_verification_step_1.png differ diff --git a/img/github_pages_verification_step_2.png b/img/github_pages_verification_step_2.png new file mode 100644 index 00000000..6d28dc8e Binary files /dev/null and b/img/github_pages_verification_step_2.png differ diff --git a/img/github_pages_verification_step_3.png b/img/github_pages_verification_step_3.png new file mode 100644 index 00000000..883495b5 Binary files /dev/null and b/img/github_pages_verification_step_3.png differ diff --git a/img/github_pages_verification_step_4.png b/img/github_pages_verification_step_4.png new file mode 100644 index 00000000..16d2100d Binary files /dev/null and b/img/github_pages_verification_step_4.png differ diff --git a/img/github_pages_verification_step_5.png b/img/github_pages_verification_step_5.png new file mode 100644 index 00000000..87bc45e8 Binary files /dev/null and b/img/github_pages_verification_step_5.png differ diff --git a/index.html b/index.html new file mode 100644 index 00000000..13576cce --- /dev/null +++ b/index.html @@ -0,0 +1,562 @@ + + + + + + + + + + + + + + + + + + + + is-a.dev Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

How to Register

+

You can read more about the domains JSON file structure here.

+

Guides

+ +

Vercel and Netlify

+

You will encounter an SSL certificate issue when using Vercel and Netlify. Neither service will work with our domains. It is recommended to use GitHub Pages, Railway or Cloudflare Pages instead.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/other/index.html b/other/index.html new file mode 100644 index 00000000..a4094987 --- /dev/null +++ b/other/index.html @@ -0,0 +1,552 @@ + + + + + + + + + + + + + + + + + + + + + + Other Services - is-a.dev Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Setting up other services with is-a.dev

+

Setting up records

+

Read the domain file structure and setup the records accordingly.

+

Configuring your server

+

After the pull request is merged, configure your server (apache, nginx, etc.) to work with <subdomain>.is-a.dev. If you are unsure how to configure your server, you can create an issue for support.

+

You should also, include <subdomain>.is-a.dev in your ssl certificate to get rid of certificate errors.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/railway/index.html b/railway/index.html new file mode 100644 index 00000000..5b588d2f --- /dev/null +++ b/railway/index.html @@ -0,0 +1,551 @@ + + + + + + + + + + + + + + + + + + + + + + Railway - is-a.dev Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Setting up is-a.dev with Railway

+

Getting the CNAME Record

+
    +
  1. Navigate to the dashboard
  2. +
  3. Navigate to the project.
  4. +
  5. Navigate to the service.
  6. +
  7. Switch to the Settings tab.
  8. +
  9. Click on + Custom Domain button.
  10. +
  11. Enter the is-a.dev subdomain you want to use.
  12. +
  13. Copy the Value field.
  14. +
  15. Go to the register site.
  16. +
  17. Choose CNAME record type from the dropdown menu.
  18. +
  19. Choose your desired subdomain.
  20. +
  21. Enter the value from clipboard in the Record Value field.
  22. +
  23. Click on the Submit Query button.
  24. +
  25. Wait for your pull request to be merged and the DNS records to update.
  26. +
+

If the PR has been merged, the DNS records will be updated in a few minutes. +If the PR has been merged but the DNS records haven't updated and you have waited 48 hours, open a GitHub issue or a help thread in the is-a.dev discord server.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/replit/index.html b/replit/index.html new file mode 100644 index 00000000..f9f0f197 --- /dev/null +++ b/replit/index.html @@ -0,0 +1,599 @@ + + + + + + + + + + + + + + + + + + + + + + Replit - is-a.dev Docs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + +

Setting up Replit with your is-a.dev subdomain

+

Creating a project

+

Follow their guide on how to set it up.

+

Point your Replit to your is-a.dev subdomain

+

Follow their guide on how to do it.

+

Only follow the "Connecting your domain to your repl" section and then follow the rest of the steps here.

+

Creating the domain file

+

Create a JSON file inside domains directory (domains/<subdomain>.json) with the following content:

+

Please do not add any TXT records even if Replit tells you to do so.

+
{
+    "owner": {
+        "username": "<github-username>",
+        "email": "email@address",
+        "twitter": "<twitter-username>"
+    },
+    "record": {
+        "CNAME": "<siteid>.id.repl.co"
+    }
+} 
+
+

Configuring

+
    +
  • After your pull request has been merged with the main repository you should be able to visit your new is-a.dev domain and it should show you your replit site +if it doesn't then you have configured your domain wrong.
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 00000000..f357b918 --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"How to Register","text":"

You can read more about the domains JSON file structure here.

"},{"location":"#guides","title":"Guides","text":"
  • GitHub Pages
  • Hashnode Blogs
  • Cloudflare Pages
  • Discord Domain Verification
  • GitHub Pages Domain Verification
  • Delete Your Domain
  • Edit Your Domain
  • Replit
  • Railway
  • Other Services
  • Dashboard
"},{"location":"#vercel-and-netlify","title":"Vercel and Netlify","text":"

You will encounter an SSL certificate issue when using Vercel and Netlify. Neither service will work with our domains. It is recommended to use GitHub Pages, Railway or Cloudflare Pages instead.

"},{"location":"cloudflare_pages/","title":"Setting up Cloudflare pages with your is-a.dev subdomain","text":""},{"location":"cloudflare_pages/#creating-a-pagesdev-site","title":"Creating a pages.dev site","text":"

Follow their guide on how to set it up.

"},{"location":"cloudflare_pages/#point-your-pagesdev-site-to-your-is-adev-subdomain","title":"Point your pages.dev site to your is-a.dev subdomain","text":"

Follow their guide on how to do it. Only follow the \"Add a custom domain\" section and then follow the rest of the steps here.

"},{"location":"cloudflare_pages/#creating-the-domain-file","title":"Creating the domain file","text":"

Create a JSON file inside domains directory (domains/<subdomain>.json) with the following content:

{\n\"owner\": {\n\"username\": \"github-username\",\n\"email\": \"email@gmail.com\"\n},\n\"record\": {\n\"CNAME\": \"sitename.pages.dev\"\n}\n} 
"},{"location":"cloudflare_pages/#configuring","title":"Configuring","text":"
  • After your pull request has been merged with the main repository you should be able to visit your new is-a.dev domain and it should show you your pages.dev site if it doesn't then you have configured your domain wrong.
"},{"location":"dashboard/","title":"Register your is-a.dev subdomain using the is-a-dev Dashboard","text":""},{"location":"dashboard/#login-to-the-dashboard","title":"Login to the dashboard","text":"

First login to the dashboard using your GitHub account.

"},{"location":"dashboard/#registering-your-subdomain","title":"Registering your subdomain","text":"

On the left hand side, click on the button that says Register with a keyboard icon.

Then follow the steps to register your subdomain.

It will fork the is-a-dev/register repository, assuming you haven't done that already and it will create a pull request for you.

Finally, you'll have to wait for a maintainer to merge it, which should not take too long.

"},{"location":"delete_domain/","title":"How to delete your is-a.dev domain","text":""},{"location":"delete_domain/#open-your-fork-of-the-is-a-devregister-repository","title":"Open your fork of the is-a-dev/register repository","text":"
  1. Open your fork, or if you deleted it, fork the repository once again.
  2. Find your domain file in the domains/ folder (e.g. /domains/myname.json)
  3. Press the 3 dots and press the Delete file button.
  1. Press Commit changes.
  1. In the popup that appears, press Commit changes once again.
  1. Click the Contribute button, then press Open pull request.
  1. Press Create pull request again.

And you're done! After you pull request has been merged, the domain will be deleted.

"},{"location":"discord_verification/","title":"Setting up Discord domain connection with your is-a.dev domain","text":""},{"location":"discord_verification/#get-your-verification-string","title":"Get your verification string","text":"
  1. Open your Discord app and press Settings.
  1. Open the Connections section.
  1. Press the View more button.
  1. Click on the domain button (the globe icon).
  1. In the field that appears type your is-a.dev domain name (e.g. myname.is-a.dev).
  1. Copy the verification string.
"},{"location":"discord_verification/#create-the-domain-file","title":"Create the domain file","text":"

Create a JSON file inside the domains/ directory called domains/_discord.yourname.json with the following content:

{\n\"owner\": {\n\"username\": \"github-username\",\n\"email\": \"email@address\"\n},\n\"record\": {\n\"TXT\": \"discord-verification-string\"\n}\n} 
"},{"location":"discord_verification/#configuration","title":"Configuration","text":"

After your pull request has been merged, repeat the steps to get the verification string and press the Verify button. If it shows any error such as Unable to verify your domain, try waiting a few minutes (sometimes up to 24 hours) as the DNS change might not have reflected on the DNS server.

"},{"location":"domain_structure/","title":"Domains JSON file","text":"

To register a subdomain, you need to create a new JSON file in the domains directory through a pull request. For example, to register example.is-a.dev, you would create a file named example.json in the domains directory. The full path would be domains/example.json.

"},{"location":"domain_structure/#filename","title":"Filename","text":"

Note: You can include . (dots) in your filename to register a sub-subdomain (e.g., blog.example.is-a.dev). However, each segment of your subdomain must meet the following criteria:

The filename:

  • Must be alphanumeric, in lowercase, with dashes as separators.
  • Must be at least 2 characters.
  • Must have a .json file extension.
"},{"location":"domain_structure/#examples-of-invalid-filenames","title":"Examples of Invalid Filenames","text":"
  • a.json (filename is less than 2 characters)
  • A.json (filename contains uppercase letters)
  • a..json (filename contains consecutive dots)
  • .a.json (filename starts with a dot)
  • a .json (filename contains a space)
  • a$.json (filename contains a non-alphanumeric character)
  • a.json.json (filename contains more than one .json extension)
"},{"location":"domain_structure/#examples-of-valid-filenames","title":"Examples of Valid Filenames","text":"

All the filenames below meet all the criteria. The reason in parentheses is just an example of one of the criteria they meet.

  • ab.json (at least 2 characters long)
  • example.json (alphanumeric and in lowercase)
  • blog.example.json (includes dots to register a sub-subdomain)
  • my-blog.json (uses dashes as separators, which is recommended)
"},{"location":"domain_structure/#structure","title":"Structure","text":""},{"location":"domain_structure/#owner-required","title":"owner (required)","text":"

You need to specify some information about yourself here. This is so that you can be contacted if required. In the owner object, the fields username and email are required. You can add more information in this object if you want.

{\n\"owner\": {\n\"username\": \"<github-username>\",\n\"email\": \"<email@address>\"\n}\n}\n

"},{"location":"domain_structure/#description","title":"description","text":"

Describe your domain name and your usage. This is purely for documentation purpose and is optional.

"},{"location":"domain_structure/#repo","title":"repo","text":"

This is a link to your website repository or your github account. This is purely for documentation purpose and is optional.

"},{"location":"domain_structure/#record-required","title":"record (required)","text":"

This section is where you specify the DNS records. The supported types are:

  • CNAME
  • A
  • AAAA
  • URL
  • MX
  • TXT

Below are some examples for the given record types:

  • CNAME record: This must be a hostname (something.tld). It cannot be used in conjunction with any other record types. This is typically used to map your domain to a specific server.
    {\n\"record\": {\n\"CNAME\": \"<github-username>.github.io\"\n}\n}\n
  • A record: This must be a list of IPv4 addresses. These addresses point your domain to a specific server.
    {\n\"record\": {\n\"A\": [\n\"192.0.2.1\",\n\"198.51.100.1\",\n\"203.0.113.1\"\n]\n}\n}\n
  • AAAA record: This must be a list of IPv6 addresses. Like the A record, these addresses point your domain to a specific server.
    {\n\"record\": {\n\"AAAA\": [\n\"2001:0db8:85a3:0000:0000:8a2e:0370:7334\",\n\"2001:0db8:85a3:0000:0000:8a2e:0370:7335\",\n\"2001:0db8:85a3:0000:0000:8a2e:0370:7336\"\n]\n}\n}\n
  • URL record: This redirects your domain to another URL.
    {\n\"record\": {\n\"URL\": \"https://my-other-website.com\"\n}\n}\n
  • MX record: This must be a list of hostnames. These hostnames specify the mail servers that handle emails for your domain.
    {\n\"record\": {\n\"MX\": [\n\"mx1.improvmx.com\",\n\"mx2.improvmx.com\"\n]\n}\n}\n
  • TXT record: This can be either a single string or a list of strings. TXT records are often used for various purposes, such as verifying domain ownership and ensuring email security.
    {\n\"record\": {\n\"TXT\": \"Hello World!\"\n}\n}\n
    {\n\"record\": {\n\"TXT\": [\"Hello\", \"World!\"]\n}\n}\n
"},{"location":"edit_domain/","title":"How to edit your is-a.dev domain","text":""},{"location":"edit_domain/#open-your-fork-of-the-is-a-devregister-repository","title":"Open your fork of the is-a-dev/register repository","text":"
  1. Open your fork, or if you deleted it, fork the repository once again.
  2. Find your domain file in the domains/ folder (e.g. /domains/myname.json)
  3. Press the Edit this file button (a pencil icon).
  1. Apply your changes in the text field and then press the Commit changes button.
  1. In the pop-up that appears, press the button Commit changes.
  1. Press on the register text to go back to the homepage of the repository.
  1. Press the Contribute button and then press on the Open pull request button.
  1. Press the Create pull request button.
  1. Complete the pull request template in the description field, add a title to the pull request, then press Create pull request.

And you're done! After you pull request has been merged, the domain should be updated with-in 24 hours.

"},{"location":"github_pages/","title":"Setting up GitHub pages with is-a.dev subdomain","text":""},{"location":"github_pages/#creating-a-github-pages-repository","title":"Creating a GitHub pages repository","text":"

You can create a GitHub pages website by creating a repository with the name <github-username>.github.io. For more information about GitHub pages, please read through their guide.

"},{"location":"github_pages/#creating-the-domain-file","title":"Creating the domain file","text":"

Create a JSON file inside domains directory (domains/<subdomain>.json) with the following content

{\n\"description\": \"Describe the use of this subdomain\",\n\"repo\": \"https://github.com/<github-username>/<github-username>.github.io\",\n\"owner\": {\n\"username\": \"<github-username>\",\n\"email\": \"email@address\",\n\"twitter\": \"<twitter-username>\"\n},\n\"record\": {\n\"CNAME\": \"<username>.github.io\"\n}\n} 

"},{"location":"github_pages/#configuring","title":"Configuring","text":"
  • After the pull request is merged, you will see a 404 error on <your-subdomain>.is-a.dev. To fix this, go to your GitHub pages repository's Settings > GitHub pages > Custom domain and add <your-subdomain>.is-a.dev in the given field. Only do this after your pull request is merged.
  • Check the Enforce HTTPS checkbox below the custom domain input.
"},{"location":"github_pages/#using-is-adev-for-all-github-pages-sites-in-your-account","title":"Using is-a.dev for all GitHub Pages sites in your account","text":"

It is possible to have a unique subdomain on your is-a.dev domain for each repository which has Pages enabled.

In order to utilise this, you must ensure the following conditions are met: 1) The website which hosts the \"root\" (<subdomain>.is-a.dev) must be named <username>.github.io 2) That repo must have <subdomain>.is-a.dev as the custom domain within the Pages settings. 3) Every other repo must not have a custom domain set in the Pages settings. 4) Links to these hosted repos must end with / (e.g https://<subdomain>.is-a.dev/<project>/)

"},{"location":"github_pages_verification/","title":"Verify your is-a.dev Domain with GitHub Pages","text":""},{"location":"github_pages_verification/#get-your-verification-string","title":"Get your verification string","text":"
  1. Open GitHub, press on your profile icon on the top right, and press Settings.
  1. Press Pages.
  1. Press Add a domain.
  1. In the field that appears, type your is-a.dev domain name (e.g., myname.is-a.dev) and press Add domain.
  1. Copy the hostname and the verification string.
"},{"location":"github_pages_verification/#create-the-domain-file","title":"Create the domain file","text":"

Create a JSON file inside the domains/ directory called domains/hostname.json using the hostname you copied in step 5 with the following content:

{\n\"owner\": {\n\"username\": \"github-username\",\n\"email\": \"email@address\"\n},\n\"record\": {\n\"TXT\": \"github-verification-string\"\n}\n}\n
"},{"location":"github_pages_verification/#configuration","title":"Configuration","text":"

After your pull request has been merged, repeat the steps to get the verification string and press the Verify button. If it shows any error such as Unable to verify your domain, try waiting a few minutes (sometimes up to 24 hours) as the DNS change might not have reflected on the DNS server.

"},{"location":"hashnode/","title":"Hashnode Blog","text":"

When you create your hashnode blog, hashnode provides a free hashnode.dev subdomain for you. However, you can set up your own is-a.dev subdomain.

In this guide, you will learn how to accomplish this.

  1. Log in to your Hashnode account.

  2. Click on your avatar at the bottom-left corner of the page on desktop or top-right corner on mobile.

  1. Click on the Blog Dashboard option from the popup modal to access your blog's dashboard.

  1. Navigate to the Domain tab and enter your domain without the www or https:// prefix in the text field provided. Then click on the Update button to proceed.

  1. Go to your fork of the is-a-dev/register repository, edit your subdomain's JSON file, make sure you remove any old records, then add this:
    \"CNAME\": \"hashnode.network\"\n

Once done, your hashnode blog is setup to use your subdomain, all you have to do is wait sometime for the DNS to propogate. These changes could take from 1 hour to around 48 hours, so please be patient, It'll most likely be ready within a hour. Enjoy your hashnode Blog, With Your Sweet .is-a.dev Subdomain! If your need more help: please read this support article on hashnode support: https://support.hashnode.com/docs/mapping-domain/, this should help you more, if you need more help related to Hashnode, then please visit the Hashnode Support Center. Remeber, is-a.dev has no links with hashnode, so please do not create issues on our github, saying that your hashnode blog is having issues, we simply will not respond to them.

"},{"location":"other/","title":"Setting up other services with is-a.dev","text":""},{"location":"other/#setting-up-records","title":"Setting up records","text":"

Read the domain file structure and setup the records accordingly.

"},{"location":"other/#configuring-your-server","title":"Configuring your server","text":"

After the pull request is merged, configure your server (apache, nginx, etc.) to work with <subdomain>.is-a.dev. If you are unsure how to configure your server, you can create an issue for support.

You should also, include <subdomain>.is-a.dev in your ssl certificate to get rid of certificate errors.

"},{"location":"railway/","title":"Setting up is-a.dev with Railway","text":""},{"location":"railway/#getting-the-cname-record","title":"Getting the CNAME Record","text":"
  1. Navigate to the dashboard
  2. Navigate to the project.
  3. Navigate to the service.
  4. Switch to the Settings tab.
  5. Click on + Custom Domain button.
  6. Enter the is-a.dev subdomain you want to use.
  7. Copy the Value field.
  8. Go to the register site.
  9. Choose CNAME record type from the dropdown menu.
  10. Choose your desired subdomain.
  11. Enter the value from clipboard in the Record Value field.
  12. Click on the Submit Query button.
  13. Wait for your pull request to be merged and the DNS records to update.

If the PR has been merged, the DNS records will be updated in a few minutes. If the PR has been merged but the DNS records haven't updated and you have waited 48 hours, open a GitHub issue or a help thread in the is-a.dev discord server.

"},{"location":"replit/","title":"Setting up Replit with your is-a.dev subdomain","text":""},{"location":"replit/#creating-a-project","title":"Creating a project","text":"

Follow their guide on how to set it up.

"},{"location":"replit/#point-your-replit-to-your-is-adev-subdomain","title":"Point your Replit to your is-a.dev subdomain","text":"

Follow their guide on how to do it.

Only follow the \"Connecting your domain to your repl\" section and then follow the rest of the steps here.

"},{"location":"replit/#creating-the-domain-file","title":"Creating the domain file","text":"

Create a JSON file inside domains directory (domains/<subdomain>.json) with the following content:

Please do not add any TXT records even if Replit tells you to do so.

{\n\"owner\": {\n\"username\": \"<github-username>\",\n\"email\": \"email@address\",\n\"twitter\": \"<twitter-username>\"\n},\n\"record\": {\n\"CNAME\": \"<siteid>.id.repl.co\"\n}\n} 
"},{"location":"replit/#configuring","title":"Configuring","text":"
  • After your pull request has been merged with the main repository you should be able to visit your new is-a.dev domain and it should show you your replit site if it doesn't then you have configured your domain wrong.
"}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..5cbcd52e --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,68 @@ + + + + None + 2024-04-20 + daily + + + None + 2024-04-20 + daily + + + None + 2024-04-20 + daily + + + None + 2024-04-20 + daily + + + None + 2024-04-20 + daily + + + None + 2024-04-20 + daily + + + None + 2024-04-20 + daily + + + None + 2024-04-20 + daily + + + None + 2024-04-20 + daily + + + None + 2024-04-20 + daily + + + None + 2024-04-20 + daily + + + None + 2024-04-20 + daily + + + None + 2024-04-20 + daily + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 00000000..414ab80f Binary files /dev/null and b/sitemap.xml.gz differ