From b370e3ed3fb98b08764b2b79a08eb46ddff5754f Mon Sep 17 00:00:00 2001 From: Anar Kafkas <36949216+kafkas@users.noreply.github.com> Date: Tue, 26 Dec 2023 08:49:54 +0900 Subject: [PATCH] Delete docs dir (#63) --- docs/assets/highlight.css | 92 -- docs/assets/main.js | 59 - docs/assets/navigation.js | 1 - docs/assets/search.js | 1 - docs/assets/style.css | 1394 -------------------- docs/index.html | 452 ------- docs/v1/assets/highlight.css | 92 -- docs/v1/assets/main.js | 59 - docs/v1/assets/navigation.js | 1 - docs/v1/assets/search.js | 1 - docs/v1/assets/style.css | 1394 -------------------- docs/v1/classes/ImplementationError.html | 13 - docs/v1/classes/InvalidConfigError.html | 12 - docs/v1/functions/createBatchMigrator.html | 18 - docs/v1/functions/createMigrator.html | 13 - docs/v1/functions/createTraverser.html | 13 - docs/v1/index.html | 126 -- docs/v1/interfaces/BatchMigrator.html | 256 ---- docs/v1/interfaces/DefaultMigrator.html | 256 ---- docs/v1/interfaces/MigrationResult.html | 6 - docs/v1/interfaces/Migrator.html | 256 ---- docs/v1/interfaces/SetOptions.html | 15 - docs/v1/interfaces/TraversalConfig.html | 42 - docs/v1/interfaces/TraversalResult.html | 6 - docs/v1/interfaces/TraverseEachConfig.html | 6 - docs/v1/interfaces/Traverser.html | 55 - docs/v1/modules.html | 23 - docs/v1/types/BatchCallback.html | 2 - docs/v1/types/ExitEarlyPredicate.html | 3 - docs/v1/types/MigrationPredicate.html | 2 - docs/v1/types/SetDataGetter.html | 2 - docs/v1/types/Traversable.html | 3 - docs/v1/types/TraverseEachCallback.html | 3 - docs/v1/types/UpdateDataGetter.html | 2 - docs/v1/types/UpdateFieldValueGetter.html | 4 - docs/v2/assets/highlight.css | 92 -- docs/v2/assets/main.js | 59 - docs/v2/assets/navigation.js | 1 - docs/v2/assets/search.js | 1 - docs/v2/assets/style.css | 1394 -------------------- docs/v2/classes/ImplementationError.html | 13 - docs/v2/classes/InvalidConfigError.html | 12 - docs/v2/functions/createBatchMigrator.html | 18 - docs/v2/functions/createMigrator.html | 13 - docs/v2/functions/createTraverser.html | 13 - docs/v2/index.html | 146 -- docs/v2/interfaces/BatchMigrator.html | 256 ---- docs/v2/interfaces/DefaultMigrator.html | 256 ---- docs/v2/interfaces/MigrationResult.html | 6 - docs/v2/interfaces/Migrator.html | 256 ---- docs/v2/interfaces/TraversalConfig.html | 42 - docs/v2/interfaces/TraversalResult.html | 6 - docs/v2/interfaces/TraverseEachConfig.html | 6 - docs/v2/interfaces/Traverser.html | 55 - docs/v2/modules.html | 24 - docs/v2/types/BatchCallback.html | 2 - docs/v2/types/ExitEarlyPredicate.html | 3 - docs/v2/types/MigrationPredicate.html | 2 - docs/v2/types/SetDataGetter.html | 2 - docs/v2/types/SetOptions.html | 13 - docs/v2/types/SetPartialDataGetter.html | 2 - docs/v2/types/Traversable.html | 3 - docs/v2/types/TraverseEachCallback.html | 3 - docs/v2/types/UpdateDataGetter.html | 2 - docs/v2/types/UpdateFieldValueGetter.html | 4 - 65 files changed, 7388 deletions(-) delete mode 100644 docs/assets/highlight.css delete mode 100644 docs/assets/main.js delete mode 100644 docs/assets/navigation.js delete mode 100644 docs/assets/search.js delete mode 100644 docs/assets/style.css delete mode 100644 docs/index.html delete mode 100644 docs/v1/assets/highlight.css delete mode 100644 docs/v1/assets/main.js delete mode 100644 docs/v1/assets/navigation.js delete mode 100644 docs/v1/assets/search.js delete mode 100644 docs/v1/assets/style.css delete mode 100644 docs/v1/classes/ImplementationError.html delete mode 100644 docs/v1/classes/InvalidConfigError.html delete mode 100644 docs/v1/functions/createBatchMigrator.html delete mode 100644 docs/v1/functions/createMigrator.html delete mode 100644 docs/v1/functions/createTraverser.html delete mode 100644 docs/v1/index.html delete mode 100644 docs/v1/interfaces/BatchMigrator.html delete mode 100644 docs/v1/interfaces/DefaultMigrator.html delete mode 100644 docs/v1/interfaces/MigrationResult.html delete mode 100644 docs/v1/interfaces/Migrator.html delete mode 100644 docs/v1/interfaces/SetOptions.html delete mode 100644 docs/v1/interfaces/TraversalConfig.html delete mode 100644 docs/v1/interfaces/TraversalResult.html delete mode 100644 docs/v1/interfaces/TraverseEachConfig.html delete mode 100644 docs/v1/interfaces/Traverser.html delete mode 100644 docs/v1/modules.html delete mode 100644 docs/v1/types/BatchCallback.html delete mode 100644 docs/v1/types/ExitEarlyPredicate.html delete mode 100644 docs/v1/types/MigrationPredicate.html delete mode 100644 docs/v1/types/SetDataGetter.html delete mode 100644 docs/v1/types/Traversable.html delete mode 100644 docs/v1/types/TraverseEachCallback.html delete mode 100644 docs/v1/types/UpdateDataGetter.html delete mode 100644 docs/v1/types/UpdateFieldValueGetter.html delete mode 100644 docs/v2/assets/highlight.css delete mode 100644 docs/v2/assets/main.js delete mode 100644 docs/v2/assets/navigation.js delete mode 100644 docs/v2/assets/search.js delete mode 100644 docs/v2/assets/style.css delete mode 100644 docs/v2/classes/ImplementationError.html delete mode 100644 docs/v2/classes/InvalidConfigError.html delete mode 100644 docs/v2/functions/createBatchMigrator.html delete mode 100644 docs/v2/functions/createMigrator.html delete mode 100644 docs/v2/functions/createTraverser.html delete mode 100644 docs/v2/index.html delete mode 100644 docs/v2/interfaces/BatchMigrator.html delete mode 100644 docs/v2/interfaces/DefaultMigrator.html delete mode 100644 docs/v2/interfaces/MigrationResult.html delete mode 100644 docs/v2/interfaces/Migrator.html delete mode 100644 docs/v2/interfaces/TraversalConfig.html delete mode 100644 docs/v2/interfaces/TraversalResult.html delete mode 100644 docs/v2/interfaces/TraverseEachConfig.html delete mode 100644 docs/v2/interfaces/Traverser.html delete mode 100644 docs/v2/modules.html delete mode 100644 docs/v2/types/BatchCallback.html delete mode 100644 docs/v2/types/ExitEarlyPredicate.html delete mode 100644 docs/v2/types/MigrationPredicate.html delete mode 100644 docs/v2/types/SetDataGetter.html delete mode 100644 docs/v2/types/SetOptions.html delete mode 100644 docs/v2/types/SetPartialDataGetter.html delete mode 100644 docs/v2/types/Traversable.html delete mode 100644 docs/v2/types/TraverseEachCallback.html delete mode 100644 docs/v2/types/UpdateDataGetter.html delete mode 100644 docs/v2/types/UpdateFieldValueGetter.html diff --git a/docs/assets/highlight.css b/docs/assets/highlight.css deleted file mode 100644 index 3e67e3f..0000000 --- a/docs/assets/highlight.css +++ /dev/null @@ -1,92 +0,0 @@ -:root { - --light-hl-0: #795E26; - --dark-hl-0: #DCDCAA; - --light-hl-1: #000000; - --dark-hl-1: #D4D4D4; - --light-hl-2: #A31515; - --dark-hl-2: #CE9178; - --light-hl-3: #AF00DB; - --dark-hl-3: #C586C0; - --light-hl-4: #001080; - --dark-hl-4: #9CDCFE; - --light-hl-5: #0000FF; - --dark-hl-5: #569CD6; - --light-hl-6: #0070C1; - --dark-hl-6: #4FC1FF; - --light-hl-7: #267F99; - --dark-hl-7: #4EC9B0; - --light-hl-8: #098658; - --dark-hl-8: #B5CEA8; - --light-hl-9: #008000; - --dark-hl-9: #6A9955; - --light-code-background: #FFFFFF; - --dark-code-background: #1E1E1E; -} - -@media (prefers-color-scheme: light) { :root { - --hl-0: var(--light-hl-0); - --hl-1: var(--light-hl-1); - --hl-2: var(--light-hl-2); - --hl-3: var(--light-hl-3); - --hl-4: var(--light-hl-4); - --hl-5: var(--light-hl-5); - --hl-6: var(--light-hl-6); - --hl-7: var(--light-hl-7); - --hl-8: var(--light-hl-8); - --hl-9: var(--light-hl-9); - --code-background: var(--light-code-background); -} } - -@media (prefers-color-scheme: dark) { :root { - --hl-0: var(--dark-hl-0); - --hl-1: var(--dark-hl-1); - --hl-2: var(--dark-hl-2); - --hl-3: var(--dark-hl-3); - --hl-4: var(--dark-hl-4); - --hl-5: var(--dark-hl-5); - --hl-6: var(--dark-hl-6); - --hl-7: var(--dark-hl-7); - --hl-8: var(--dark-hl-8); - --hl-9: var(--dark-hl-9); - --code-background: var(--dark-code-background); -} } - -:root[data-theme='light'] { - --hl-0: var(--light-hl-0); - --hl-1: var(--light-hl-1); - --hl-2: var(--light-hl-2); - --hl-3: var(--light-hl-3); - --hl-4: var(--light-hl-4); - --hl-5: var(--light-hl-5); - --hl-6: var(--light-hl-6); - --hl-7: var(--light-hl-7); - --hl-8: var(--light-hl-8); - --hl-9: var(--light-hl-9); - --code-background: var(--light-code-background); -} - -:root[data-theme='dark'] { - --hl-0: var(--dark-hl-0); - --hl-1: var(--dark-hl-1); - --hl-2: var(--dark-hl-2); - --hl-3: var(--dark-hl-3); - --hl-4: var(--dark-hl-4); - --hl-5: var(--dark-hl-5); - --hl-6: var(--dark-hl-6); - --hl-7: var(--dark-hl-7); - --hl-8: var(--dark-hl-8); - --hl-9: var(--dark-hl-9); - --code-background: var(--dark-code-background); -} - -.hl-0 { color: var(--hl-0); } -.hl-1 { color: var(--hl-1); } -.hl-2 { color: var(--hl-2); } -.hl-3 { color: var(--hl-3); } -.hl-4 { color: var(--hl-4); } -.hl-5 { color: var(--hl-5); } -.hl-6 { color: var(--hl-6); } -.hl-7 { color: var(--hl-7); } -.hl-8 { color: var(--hl-8); } -.hl-9 { color: var(--hl-9); } -pre, code { background: var(--code-background); } diff --git a/docs/assets/main.js b/docs/assets/main.js deleted file mode 100644 index d0aa8d5..0000000 --- a/docs/assets/main.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; -"use strict";(()=>{var Pe=Object.create;var ne=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Ie(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Pe(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),v=s.str.charAt(1),f;v in s.node.edges?f=s.node.edges[v]:(f=new t.TokenSet,s.node.edges[v]=f),s.str.length==1&&(f.final=!0),i.push({node:f,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${ce(l.parent,i)}.${d}`);let v=document.createElement("li");v.classList.value=l.classes??"";let f=document.createElement("a");f.href=r.base+l.url,f.innerHTML=u+d,v.append(f),e.appendChild(v)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var Be={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>Be[e])}var C=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",pe="mousemove",B="mouseup",J={x:0,y:0},fe=!1,ee=!1,He=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(He=!0,F="touchstart",pe="touchmove",B="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(pe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ee=!1});document.addEventListener("click",t=>{fe&&(t.preventDefault(),t.stopImmediatePropagation(),fe=!1)});var X=class extends C{constructor(n){super(n);this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,r=>this.onPointerUp(r)),this.el.addEventListener("click",r=>r.preventDefault()),document.addEventListener(F,r=>this.onDocumentPointerDown(r)),document.addEventListener(B,r=>this.onDocumentPointerUp(r))}setActive(n){if(this.active==n)return;this.active=n,document.documentElement.classList.toggle("has-"+this.className,n),this.el.classList.toggle("active",n);let r=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(n){D||(this.setActive(!0),n.preventDefault())}onDocumentPointerDown(n){if(this.active){if(n.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(n){if(!D&&this.active&&n.target.closest(".col-sidebar")){let r=n.target.closest("a");if(r){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),r.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ve=document.head.appendChild(document.createElement("style"));ve.dataset.for="filters";var Y=class extends C{constructor(n){super(n);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ve.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.checked}setLocalStorage(n){Q.setItem(this.key,n.toString()),this.value=n,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(n=>{n.style.display="block";let r=Array.from(n.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);n.style.display=r?"none":"block"})}};var Z=class extends C{constructor(n){super(n);this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let r=Q.getItem(this.key);this.el.open=r?r==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let i=this.summary.querySelector("a");i&&i.addEventListener("click",()=>{location.assign(i.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.href===r.href&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); -/*! Bundled license information: - -lunr/lunr.js: - (** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - *) - (*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Set - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.tokenizer - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Vector - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.stemmer - * Copyright (C) 2020 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - *) - (*! - * lunr.stopWordFilter - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.trimmer - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.TokenSet - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Builder - * Copyright (C) 2020 Oliver Nightingale - *) -*/ diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js deleted file mode 100644 index f483302..0000000 --- a/docs/assets/navigation.js +++ /dev/null @@ -1 +0,0 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAE42UTW/CMAxA/8rUM4yBBtu4bVCmHaahje2COJjUpRGhVKlBoIn/vrDykaZJ27Ofnx3HyfTXI9yR1/cGAtIUU6/hsYiLQGLs9aeX6NsqEbjCmID4OvalXEtFJkCRCrIstWWBbiNaCUUueRx4/Xbn8dC4OuMtCB4M1nHIFy5lgSkaZzknoQyBOQ/yAsSid76QQHo9fslr5Yh8tU63p9UaYggbQaUygynTZYwa3CemKsWqM5hqnaOtOv1MJGxRpiCy4Vs9BlNLV3I8g6mhQx9YVN2ghtWR2od2iRYV+gpO9gnePAsO7tf0v2IDEGIObHmtRSrztH/noFHq7umh3e1oxfwdJx+k2I8lBpwBoakrElXOy5I5nUWiyvmFNASCVyTSp5vpcsEapo/kWDu1aE4Rq6ORfSpHPA2aPG0qH8oYhJe3j0ESB1HaboGp6vq82XNRGKYWqmnJttmxPjamyvudBOoO3Sc24/V8I44i+AGxwTKrSdnd+gMbbWJ2XgDb62ISldfx0Yfn5JYFy9fu3WtFM7raV1tl+WtMl+PDUbLZYfYHrWxJrboHAAA=" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js deleted file mode 100644 index ff4179d..0000000 --- a/docs/assets/search.js +++ /dev/null @@ -1 +0,0 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/docs/assets/style.css b/docs/assets/style.css deleted file mode 100644 index 07a385b..0000000 --- a/docs/assets/style.css +++ /dev/null @@ -1,1394 +0,0 @@ -:root { - /* Light */ - --light-color-background: #f2f4f8; - --light-color-background-secondary: #eff0f1; - --light-color-warning-text: #222; - --light-color-background-warning: #e6e600; - --light-color-icon-background: var(--light-color-background); - --light-color-accent: #c5c7c9; - --light-color-active-menu-item: var(--light-color-accent); - --light-color-text: #222; - --light-color-text-aside: #6e6e6e; - --light-color-link: #1f70c2; - - --light-color-ts-keyword: #056bd6; - --light-color-ts-project: #b111c9; - --light-color-ts-module: var(--light-color-ts-project); - --light-color-ts-namespace: var(--light-color-ts-project); - --light-color-ts-enum: #7e6f15; - --light-color-ts-enum-member: var(--light-color-ts-enum); - --light-color-ts-variable: #4760ec; - --light-color-ts-function: #572be7; - --light-color-ts-class: #1f70c2; - --light-color-ts-interface: #108024; - --light-color-ts-constructor: var(--light-color-ts-class); - --light-color-ts-property: var(--light-color-ts-variable); - --light-color-ts-method: var(--light-color-ts-function); - --light-color-ts-call-signature: var(--light-color-ts-method); - --light-color-ts-index-signature: var(--light-color-ts-property); - --light-color-ts-constructor-signature: var(--light-color-ts-constructor); - --light-color-ts-parameter: var(--light-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --light-color-ts-type-parameter: var(--light-color-ts-type-alias); - --light-color-ts-accessor: var(--light-color-ts-property); - --light-color-ts-get-signature: var(--light-color-ts-accessor); - --light-color-ts-set-signature: var(--light-color-ts-accessor); - --light-color-ts-type-alias: #d51270; - /* reference not included as links will be colored with the kind that it points to */ - - --light-external-icon: url("data:image/svg+xml;utf8,"); - --light-color-scheme: light; - - /* Dark */ - --dark-color-background: #2b2e33; - --dark-color-background-secondary: #1e2024; - --dark-color-background-warning: #bebe00; - --dark-color-warning-text: #222; - --dark-color-icon-background: var(--dark-color-background-secondary); - --dark-color-accent: #9096a2; - --dark-color-active-menu-item: #5d5d6a; - --dark-color-text: #f5f5f5; - --dark-color-text-aside: #dddddd; - --dark-color-link: #00aff4; - - --dark-color-ts-keyword: #3399ff; - --dark-color-ts-project: #e358ff; - --dark-color-ts-module: var(--dark-color-ts-project); - --dark-color-ts-namespace: var(--dark-color-ts-project); - --dark-color-ts-enum: #f4d93e; - --dark-color-ts-enum-member: var(--dark-color-ts-enum); - --dark-color-ts-variable: #798dff; - --dark-color-ts-function: #a280ff; - --dark-color-ts-class: #8ac4ff; - --dark-color-ts-interface: #6cff87; - --dark-color-ts-constructor: var(--dark-color-ts-class); - --dark-color-ts-property: var(--dark-color-ts-variable); - --dark-color-ts-method: var(--dark-color-ts-function); - --dark-color-ts-call-signature: var(--dark-color-ts-method); - --dark-color-ts-index-signature: var(--dark-color-ts-property); - --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); - --dark-color-ts-parameter: var(--dark-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --dark-color-ts-type-parameter: var(--dark-color-ts-type-alias); - --dark-color-ts-accessor: var(--dark-color-ts-property); - --dark-color-ts-get-signature: var(--dark-color-ts-accessor); - --dark-color-ts-set-signature: var(--dark-color-ts-accessor); - --dark-color-ts-type-alias: #ff6492; - /* reference not included as links will be colored with the kind that it points to */ - - --dark-external-icon: url("data:image/svg+xml;utf8,"); - --dark-color-scheme: dark; -} - -@media (prefers-color-scheme: light) { - :root { - --color-background: var(--light-color-background); - --color-background-secondary: var(--light-color-background-secondary); - --color-background-warning: var(--light-color-background-warning); - --color-warning-text: var(--light-color-warning-text); - --color-icon-background: var(--light-color-icon-background); - --color-accent: var(--light-color-accent); - --color-active-menu-item: var(--light-color-active-menu-item); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - - --color-ts-keyword: var(--light-color-ts-keyword); - --color-ts-module: var(--light-color-ts-module); - --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-enum-member: var(--light-color-ts-enum-member); - --color-ts-variable: var(--light-color-ts-variable); - --color-ts-function: var(--light-color-ts-function); - --color-ts-class: var(--light-color-ts-class); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-constructor: var(--light-color-ts-constructor); - --color-ts-property: var(--light-color-ts-property); - --color-ts-method: var(--light-color-ts-method); - --color-ts-call-signature: var(--light-color-ts-call-signature); - --color-ts-index-signature: var(--light-color-ts-index-signature); - --color-ts-constructor-signature: var( - --light-color-ts-constructor-signature - ); - --color-ts-parameter: var(--light-color-ts-parameter); - --color-ts-type-parameter: var(--light-color-ts-type-parameter); - --color-ts-accessor: var(--light-color-ts-accessor); - --color-ts-get-signature: var(--light-color-ts-get-signature); - --color-ts-set-signature: var(--light-color-ts-set-signature); - --color-ts-type-alias: var(--light-color-ts-type-alias); - - --external-icon: var(--light-external-icon); - --color-scheme: var(--light-color-scheme); - } -} - -@media (prefers-color-scheme: dark) { - :root { - --color-background: var(--dark-color-background); - --color-background-secondary: var(--dark-color-background-secondary); - --color-background-warning: var(--dark-color-background-warning); - --color-warning-text: var(--dark-color-warning-text); - --color-icon-background: var(--dark-color-icon-background); - --color-accent: var(--dark-color-accent); - --color-active-menu-item: var(--dark-color-active-menu-item); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - - --color-ts-keyword: var(--dark-color-ts-keyword); - --color-ts-module: var(--dark-color-ts-module); - --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-enum-member: var(--dark-color-ts-enum-member); - --color-ts-variable: var(--dark-color-ts-variable); - --color-ts-function: var(--dark-color-ts-function); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-constructor: var(--dark-color-ts-constructor); - --color-ts-property: var(--dark-color-ts-property); - --color-ts-method: var(--dark-color-ts-method); - --color-ts-call-signature: var(--dark-color-ts-call-signature); - --color-ts-index-signature: var(--dark-color-ts-index-signature); - --color-ts-constructor-signature: var( - --dark-color-ts-constructor-signature - ); - --color-ts-parameter: var(--dark-color-ts-parameter); - --color-ts-type-parameter: var(--dark-color-ts-type-parameter); - --color-ts-accessor: var(--dark-color-ts-accessor); - --color-ts-get-signature: var(--dark-color-ts-get-signature); - --color-ts-set-signature: var(--dark-color-ts-set-signature); - --color-ts-type-alias: var(--dark-color-ts-type-alias); - - --external-icon: var(--dark-external-icon); - --color-scheme: var(--dark-color-scheme); - } -} - -html { - color-scheme: var(--color-scheme); -} - -body { - margin: 0; -} - -:root[data-theme="light"] { - --color-background: var(--light-color-background); - --color-background-secondary: var(--light-color-background-secondary); - --color-background-warning: var(--light-color-background-warning); - --color-warning-text: var(--light-color-warning-text); - --color-icon-background: var(--light-color-icon-background); - --color-accent: var(--light-color-accent); - --color-active-menu-item: var(--light-color-active-menu-item); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - - --color-ts-keyword: var(--light-color-ts-keyword); - --color-ts-module: var(--light-color-ts-module); - --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-enum-member: var(--light-color-ts-enum-member); - --color-ts-variable: var(--light-color-ts-variable); - --color-ts-function: var(--light-color-ts-function); - --color-ts-class: var(--light-color-ts-class); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-constructor: var(--light-color-ts-constructor); - --color-ts-property: var(--light-color-ts-property); - --color-ts-method: var(--light-color-ts-method); - --color-ts-call-signature: var(--light-color-ts-call-signature); - --color-ts-index-signature: var(--light-color-ts-index-signature); - --color-ts-constructor-signature: var( - --light-color-ts-constructor-signature - ); - --color-ts-parameter: var(--light-color-ts-parameter); - --color-ts-type-parameter: var(--light-color-ts-type-parameter); - --color-ts-accessor: var(--light-color-ts-accessor); - --color-ts-get-signature: var(--light-color-ts-get-signature); - --color-ts-set-signature: var(--light-color-ts-set-signature); - --color-ts-type-alias: var(--light-color-ts-type-alias); - - --external-icon: var(--light-external-icon); - --color-scheme: var(--light-color-scheme); -} - -:root[data-theme="dark"] { - --color-background: var(--dark-color-background); - --color-background-secondary: var(--dark-color-background-secondary); - --color-background-warning: var(--dark-color-background-warning); - --color-warning-text: var(--dark-color-warning-text); - --color-icon-background: var(--dark-color-icon-background); - --color-accent: var(--dark-color-accent); - --color-active-menu-item: var(--dark-color-active-menu-item); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - - --color-ts-keyword: var(--dark-color-ts-keyword); - --color-ts-module: var(--dark-color-ts-module); - --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-enum-member: var(--dark-color-ts-enum-member); - --color-ts-variable: var(--dark-color-ts-variable); - --color-ts-function: var(--dark-color-ts-function); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-constructor: var(--dark-color-ts-constructor); - --color-ts-property: var(--dark-color-ts-property); - --color-ts-method: var(--dark-color-ts-method); - --color-ts-call-signature: var(--dark-color-ts-call-signature); - --color-ts-index-signature: var(--dark-color-ts-index-signature); - --color-ts-constructor-signature: var( - --dark-color-ts-constructor-signature - ); - --color-ts-parameter: var(--dark-color-ts-parameter); - --color-ts-type-parameter: var(--dark-color-ts-type-parameter); - --color-ts-accessor: var(--dark-color-ts-accessor); - --color-ts-get-signature: var(--dark-color-ts-get-signature); - --color-ts-set-signature: var(--dark-color-ts-set-signature); - --color-ts-type-alias: var(--dark-color-ts-type-alias); - - --external-icon: var(--dark-external-icon); - --color-scheme: var(--dark-color-scheme); -} - -.always-visible, -.always-visible .tsd-signatures { - display: inherit !important; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - line-height: 1.2; -} - -h1 > a, -h2 > a, -h3 > a, -h4 > a, -h5 > a, -h6 > a { - text-decoration: none; - color: var(--color-text); -} - -h1 { - font-size: 1.875rem; - margin: 0.67rem 0; -} - -h2 { - font-size: 1.5rem; - margin: 0.83rem 0; -} - -h3 { - font-size: 1.25rem; - margin: 1rem 0; -} - -h4 { - font-size: 1.05rem; - margin: 1.33rem 0; -} - -h5 { - font-size: 1rem; - margin: 1.5rem 0; -} - -h6 { - font-size: 0.875rem; - margin: 2.33rem 0; -} - -.uppercase { - text-transform: uppercase; -} - -dl, -menu, -ol, -ul { - margin: 1em 0; -} - -dd { - margin: 0 0 0 40px; -} - -.container { - max-width: 1700px; - padding: 0 2rem; -} - -/* Footer */ -.tsd-generator { - border-top: 1px solid var(--color-accent); - padding-top: 1rem; - padding-bottom: 1rem; - max-height: 3.5rem; -} - -.tsd-generator > p { - margin-top: 0; - margin-bottom: 0; - padding: 0 1rem; -} - -.container-main { - margin: 0 auto; - /* toolbar, footer, margin */ - min-height: calc(100vh - 41px - 56px - 4rem); -} - -@keyframes fade-in { - from { - opacity: 0; - } - to { - opacity: 1; - } -} -@keyframes fade-out { - from { - opacity: 1; - visibility: visible; - } - to { - opacity: 0; - } -} -@keyframes fade-in-delayed { - 0% { - opacity: 0; - } - 33% { - opacity: 0; - } - 100% { - opacity: 1; - } -} -@keyframes fade-out-delayed { - 0% { - opacity: 1; - visibility: visible; - } - 66% { - opacity: 0; - } - 100% { - opacity: 0; - } -} -@keyframes pop-in-from-right { - from { - transform: translate(100%, 0); - } - to { - transform: translate(0, 0); - } -} -@keyframes pop-out-to-right { - from { - transform: translate(0, 0); - visibility: visible; - } - to { - transform: translate(100%, 0); - } -} -body { - background: var(--color-background); - font-family: "Segoe UI", sans-serif; - font-size: 16px; - color: var(--color-text); -} - -a { - color: var(--color-link); - text-decoration: none; -} -a:hover { - text-decoration: underline; -} -a.external[target="_blank"] { - background-image: var(--external-icon); - background-position: top 3px right; - background-repeat: no-repeat; - padding-right: 13px; -} - -code, -pre { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - padding: 0.2em; - margin: 0; - font-size: 0.875rem; - border-radius: 0.8em; -} - -pre { - position: relative; - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; - padding: 10px; - border: 1px solid var(--color-accent); -} -pre code { - padding: 0; - font-size: 100%; -} -pre > button { - position: absolute; - top: 10px; - right: 10px; - opacity: 0; - transition: opacity 0.1s; - box-sizing: border-box; -} -pre:hover > button, -pre > button.visible { - opacity: 1; -} - -blockquote { - margin: 1em 0; - padding-left: 1em; - border-left: 4px solid gray; -} - -.tsd-typography { - line-height: 1.333em; -} -.tsd-typography ul { - list-style: square; - padding: 0 0 0 20px; - margin: 0; -} -.tsd-typography .tsd-index-panel h3, -.tsd-index-panel .tsd-typography h3, -.tsd-typography h4, -.tsd-typography h5, -.tsd-typography h6 { - font-size: 1em; -} -.tsd-typography h5, -.tsd-typography h6 { - font-weight: normal; -} -.tsd-typography p, -.tsd-typography ul, -.tsd-typography ol { - margin: 1em 0; -} -.tsd-typography table { - border-collapse: collapse; - border: none; -} -.tsd-typography td, -.tsd-typography th { - padding: 6px 13px; - border: 1px solid var(--color-accent); -} -.tsd-typography thead, -.tsd-typography tr:nth-child(even) { - background-color: var(--color-background-secondary); -} - -.tsd-breadcrumb { - margin: 0; - padding: 0; - color: var(--color-text-aside); -} -.tsd-breadcrumb a { - color: var(--color-text-aside); - text-decoration: none; -} -.tsd-breadcrumb a:hover { - text-decoration: underline; -} -.tsd-breadcrumb li { - display: inline; -} -.tsd-breadcrumb li:after { - content: " / "; -} - -.tsd-comment-tags { - display: flex; - flex-direction: column; -} -dl.tsd-comment-tag-group { - display: flex; - align-items: center; - overflow: hidden; - margin: 0.5em 0; -} -dl.tsd-comment-tag-group dt { - display: flex; - margin-right: 0.5em; - font-size: 0.875em; - font-weight: normal; -} -dl.tsd-comment-tag-group dd { - margin: 0; -} -code.tsd-tag { - padding: 0.25em 0.4em; - border: 0.1em solid var(--color-accent); - margin-right: 0.25em; - font-size: 70%; -} -h1 code.tsd-tag:first-of-type { - margin-left: 0.25em; -} - -dl.tsd-comment-tag-group dd:before, -dl.tsd-comment-tag-group dd:after { - content: " "; -} -dl.tsd-comment-tag-group dd pre, -dl.tsd-comment-tag-group dd:after { - clear: both; -} -dl.tsd-comment-tag-group p { - margin: 0; -} - -.tsd-panel.tsd-comment .lead { - font-size: 1.1em; - line-height: 1.333em; - margin-bottom: 2em; -} -.tsd-panel.tsd-comment .lead:last-child { - margin-bottom: 0; -} - -.tsd-filter-visibility h4 { - font-size: 1rem; - padding-top: 0.75rem; - padding-bottom: 0.5rem; - margin: 0; -} -.tsd-filter-item:not(:last-child) { - margin-bottom: 0.5rem; -} -.tsd-filter-input { - display: flex; - width: fit-content; - width: -moz-fit-content; - align-items: center; - user-select: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - cursor: pointer; -} -.tsd-filter-input input[type="checkbox"] { - cursor: pointer; - position: absolute; - width: 1.5em; - height: 1.5em; - opacity: 0; -} -.tsd-filter-input input[type="checkbox"]:disabled { - pointer-events: none; -} -.tsd-filter-input svg { - cursor: pointer; - width: 1.5em; - height: 1.5em; - margin-right: 0.5em; - border-radius: 0.33em; - /* Leaving this at full opacity breaks event listeners on Firefox. - Don't remove unless you know what you're doing. */ - opacity: 0.99; -} -.tsd-filter-input input[type="checkbox"]:focus + svg { - transform: scale(0.95); -} -.tsd-filter-input input[type="checkbox"]:focus:not(:focus-visible) + svg { - transform: scale(1); -} -.tsd-checkbox-background { - fill: var(--color-accent); -} -input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { - stroke: var(--color-text); -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { - fill: var(--color-background); - stroke: var(--color-accent); - stroke-width: 0.25rem; -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { - stroke: var(--color-accent); -} - -.tsd-theme-toggle { - padding-top: 0.75rem; -} -.tsd-theme-toggle > h4 { - display: inline; - vertical-align: middle; - margin-right: 0.75rem; -} - -.tsd-hierarchy { - list-style: square; - margin: 0; -} -.tsd-hierarchy .target { - font-weight: bold; -} - -.tsd-panel-group.tsd-index-group { - margin-bottom: 0; -} -.tsd-index-panel .tsd-index-list { - list-style: none; - line-height: 1.333em; - margin: 0; - padding: 0.25rem 0 0 0; - overflow: hidden; - display: grid; - grid-template-columns: repeat(3, 1fr); - column-gap: 1rem; - grid-template-rows: auto; -} -@media (max-width: 1024px) { - .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(2, 1fr); - } -} -@media (max-width: 768px) { - .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(1, 1fr); - } -} -.tsd-index-panel .tsd-index-list li { - -webkit-page-break-inside: avoid; - -moz-page-break-inside: avoid; - -ms-page-break-inside: avoid; - -o-page-break-inside: avoid; - page-break-inside: avoid; -} - -.tsd-flag { - display: inline-block; - padding: 0.25em 0.4em; - border-radius: 4px; - color: var(--color-comment-tag-text); - background-color: var(--color-comment-tag); - text-indent: 0; - font-size: 75%; - line-height: 1; - font-weight: normal; -} - -.tsd-anchor { - position: relative; - top: -100px; -} - -.tsd-member { - position: relative; -} -.tsd-member .tsd-anchor + h3 { - display: flex; - align-items: center; - margin-top: 0; - margin-bottom: 0; - border-bottom: none; -} - -.tsd-navigation.settings { - margin: 1rem 0; -} -.tsd-navigation > a, -.tsd-navigation .tsd-accordion-summary { - width: calc(100% - 0.5rem); -} -.tsd-navigation a, -.tsd-navigation summary > span, -.tsd-page-navigation a { - display: inline-flex; - align-items: center; - padding: 0.25rem; - color: var(--color-text); - text-decoration: none; - box-sizing: border-box; -} -.tsd-navigation a.current, -.tsd-page-navigation a.current { - background: var(--color-active-menu-item); -} -.tsd-navigation a:hover, -.tsd-page-navigation a:hover { - text-decoration: underline; -} -.tsd-navigation ul, -.tsd-page-navigation ul { - margin-top: 0; - margin-bottom: 0; - padding: 0; - list-style: none; -} -.tsd-navigation li, -.tsd-page-navigation li { - padding: 0; - max-width: 100%; -} -.tsd-nested-navigation { - margin-left: 3rem; -} -.tsd-nested-navigation > li > details { - margin-left: -1.5rem; -} -.tsd-small-nested-navigation { - margin-left: 1.5rem; -} -.tsd-small-nested-navigation > li > details { - margin-left: -1.5rem; -} - -.tsd-nested-navigation > li > a, -.tsd-nested-navigation > li > span { - width: calc(100% - 1.75rem - 0.5rem); -} - -.tsd-page-navigation ul { - padding-left: 1.75rem; -} - -#tsd-sidebar-links a { - margin-top: 0; - margin-bottom: 0.5rem; - line-height: 1.25rem; -} -#tsd-sidebar-links a:last-of-type { - margin-bottom: 0; -} - -a.tsd-index-link { - padding: 0.25rem 0 !important; - font-size: 1rem; - line-height: 1.25rem; - display: inline-flex; - align-items: center; - color: var(--color-text); -} -.tsd-accordion-summary { - list-style-type: none; /* hide marker on non-safari */ - outline: none; /* broken on safari, so just hide it */ -} -.tsd-accordion-summary::-webkit-details-marker { - display: none; /* hide marker on safari */ -} -.tsd-accordion-summary, -.tsd-accordion-summary a { - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - - cursor: pointer; -} -.tsd-accordion-summary a { - width: calc(100% - 1.5rem); -} -.tsd-accordion-summary > * { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} -.tsd-index-accordion .tsd-accordion-summary > svg { - margin-left: 0.25rem; -} -.tsd-index-content > :not(:first-child) { - margin-top: 0.75rem; -} -.tsd-index-heading { - margin-top: 1.5rem; - margin-bottom: 0.75rem; -} - -.tsd-kind-icon { - margin-right: 0.5rem; - width: 1.25rem; - height: 1.25rem; - min-width: 1.25rem; - min-height: 1.25rem; -} -.tsd-kind-icon path { - transform-origin: center; - transform: scale(1.1); -} -.tsd-signature > .tsd-kind-icon { - margin-right: 0.8rem; -} - -.tsd-panel { - margin-bottom: 2.5rem; -} -.tsd-panel.tsd-member { - margin-bottom: 4rem; -} -.tsd-panel:empty { - display: none; -} -.tsd-panel > h1, -.tsd-panel > h2, -.tsd-panel > h3 { - margin: 1.5rem -1.5rem 0.75rem -1.5rem; - padding: 0 1.5rem 0.75rem 1.5rem; -} -.tsd-panel > h1.tsd-before-signature, -.tsd-panel > h2.tsd-before-signature, -.tsd-panel > h3.tsd-before-signature { - margin-bottom: 0; - border-bottom: none; -} - -.tsd-panel-group { - margin: 4rem 0; -} -.tsd-panel-group.tsd-index-group { - margin: 2rem 0; -} -.tsd-panel-group.tsd-index-group details { - margin: 2rem 0; -} - -#tsd-search { - transition: background-color 0.2s; -} -#tsd-search .title { - position: relative; - z-index: 2; -} -#tsd-search .field { - position: absolute; - left: 0; - top: 0; - right: 2.5rem; - height: 100%; -} -#tsd-search .field input { - box-sizing: border-box; - position: relative; - top: -50px; - z-index: 1; - width: 100%; - padding: 0 10px; - opacity: 0; - outline: 0; - border: 0; - background: transparent; - color: var(--color-text); -} -#tsd-search .field label { - position: absolute; - overflow: hidden; - right: -40px; -} -#tsd-search .field input, -#tsd-search .title, -#tsd-toolbar-links a { - transition: opacity 0.2s; -} -#tsd-search .results { - position: absolute; - visibility: hidden; - top: 40px; - width: 100%; - margin: 0; - padding: 0; - list-style: none; - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); -} -#tsd-search .results li { - background-color: var(--color-background); - line-height: initial; - padding: 4px; -} -#tsd-search .results li:nth-child(even) { - background-color: var(--color-background-secondary); -} -#tsd-search .results li.state { - display: none; -} -#tsd-search .results li.current:not(.no-results), -#tsd-search .results li:hover:not(.no-results) { - background-color: var(--color-accent); -} -#tsd-search .results a { - display: flex; - align-items: center; - padding: 0.25rem; - box-sizing: border-box; -} -#tsd-search .results a:before { - top: 10px; -} -#tsd-search .results span.parent { - color: var(--color-text-aside); - font-weight: normal; -} -#tsd-search.has-focus { - background-color: var(--color-accent); -} -#tsd-search.has-focus .field input { - top: 0; - opacity: 1; -} -#tsd-search.has-focus .title, -#tsd-search.has-focus #tsd-toolbar-links a { - z-index: 0; - opacity: 0; -} -#tsd-search.has-focus .results { - visibility: visible; -} -#tsd-search.loading .results li.state.loading { - display: block; -} -#tsd-search.failure .results li.state.failure { - display: block; -} - -#tsd-toolbar-links { - position: absolute; - top: 0; - right: 2rem; - height: 100%; - display: flex; - align-items: center; - justify-content: flex-end; -} -#tsd-toolbar-links a { - margin-left: 1.5rem; -} -#tsd-toolbar-links a:hover { - text-decoration: underline; -} - -.tsd-signature { - margin: 0 0 1rem 0; - padding: 1rem 0.5rem; - border: 1px solid var(--color-accent); - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - font-size: 14px; - overflow-x: auto; -} - -.tsd-signature-keyword { - color: var(--color-ts-keyword); - font-weight: normal; -} - -.tsd-signature-symbol { - color: var(--color-text-aside); - font-weight: normal; -} - -.tsd-signature-type { - font-style: italic; - font-weight: normal; -} - -.tsd-signatures { - padding: 0; - margin: 0 0 1em 0; - list-style-type: none; -} -.tsd-signatures .tsd-signature { - margin: 0; - border-color: var(--color-accent); - border-width: 1px 0; - transition: background-color 0.1s; -} -.tsd-description .tsd-signatures .tsd-signature { - border-width: 1px; -} - -ul.tsd-parameter-list, -ul.tsd-type-parameter-list { - list-style: square; - margin: 0; - padding-left: 20px; -} -ul.tsd-parameter-list > li.tsd-parameter-signature, -ul.tsd-type-parameter-list > li.tsd-parameter-signature { - list-style: none; - margin-left: -20px; -} -ul.tsd-parameter-list h5, -ul.tsd-type-parameter-list h5 { - font-size: 16px; - margin: 1em 0 0.5em 0; -} -.tsd-sources { - margin-top: 1rem; - font-size: 0.875em; -} -.tsd-sources a { - color: var(--color-text-aside); - text-decoration: underline; -} -.tsd-sources ul { - list-style: none; - padding: 0; -} - -.tsd-page-toolbar { - position: sticky; - z-index: 1; - top: 0; - left: 0; - width: 100%; - color: var(--color-text); - background: var(--color-background-secondary); - border-bottom: 1px var(--color-accent) solid; - transition: transform 0.3s ease-in-out; -} -.tsd-page-toolbar a { - color: var(--color-text); - text-decoration: none; -} -.tsd-page-toolbar a.title { - font-weight: bold; -} -.tsd-page-toolbar a.title:hover { - text-decoration: underline; -} -.tsd-page-toolbar .tsd-toolbar-contents { - display: flex; - justify-content: space-between; - height: 2.5rem; - margin: 0 auto; -} -.tsd-page-toolbar .table-cell { - position: relative; - white-space: nowrap; - line-height: 40px; -} -.tsd-page-toolbar .table-cell:first-child { - width: 100%; -} -.tsd-page-toolbar .tsd-toolbar-icon { - box-sizing: border-box; - line-height: 0; - padding: 12px 0; -} - -.tsd-widget { - display: inline-block; - overflow: hidden; - opacity: 0.8; - height: 40px; - transition: - opacity 0.1s, - background-color 0.2s; - vertical-align: bottom; - cursor: pointer; -} -.tsd-widget:hover { - opacity: 0.9; -} -.tsd-widget.active { - opacity: 1; - background-color: var(--color-accent); -} -.tsd-widget.no-caption { - width: 40px; -} -.tsd-widget.no-caption:before { - margin: 0; -} - -.tsd-widget.options, -.tsd-widget.menu { - display: none; -} -input[type="checkbox"] + .tsd-widget:before { - background-position: -120px 0; -} -input[type="checkbox"]:checked + .tsd-widget:before { - background-position: -160px 0; -} - -img { - max-width: 100%; -} - -.tsd-anchor-icon { - display: inline-flex; - align-items: center; - margin-left: 0.5rem; - vertical-align: middle; - color: var(--color-text); -} - -.tsd-anchor-icon svg { - width: 1em; - height: 1em; - visibility: hidden; -} - -.tsd-anchor-link:hover > .tsd-anchor-icon svg { - visibility: visible; -} - -.deprecated { - text-decoration: line-through !important; -} - -.warning { - padding: 1rem; - color: var(--color-warning-text); - background: var(--color-background-warning); -} - -.tsd-kind-project { - color: var(--color-ts-project); -} -.tsd-kind-module { - color: var(--color-ts-module); -} -.tsd-kind-namespace { - color: var(--color-ts-namespace); -} -.tsd-kind-enum { - color: var(--color-ts-enum); -} -.tsd-kind-enum-member { - color: var(--color-ts-enum-member); -} -.tsd-kind-variable { - color: var(--color-ts-variable); -} -.tsd-kind-function { - color: var(--color-ts-function); -} -.tsd-kind-class { - color: var(--color-ts-class); -} -.tsd-kind-interface { - color: var(--color-ts-interface); -} -.tsd-kind-constructor { - color: var(--color-ts-constructor); -} -.tsd-kind-property { - color: var(--color-ts-property); -} -.tsd-kind-method { - color: var(--color-ts-method); -} -.tsd-kind-call-signature { - color: var(--color-ts-call-signature); -} -.tsd-kind-index-signature { - color: var(--color-ts-index-signature); -} -.tsd-kind-constructor-signature { - color: var(--color-ts-constructor-signature); -} -.tsd-kind-parameter { - color: var(--color-ts-parameter); -} -.tsd-kind-type-literal { - color: var(--color-ts-type-literal); -} -.tsd-kind-type-parameter { - color: var(--color-ts-type-parameter); -} -.tsd-kind-accessor { - color: var(--color-ts-accessor); -} -.tsd-kind-get-signature { - color: var(--color-ts-get-signature); -} -.tsd-kind-set-signature { - color: var(--color-ts-set-signature); -} -.tsd-kind-type-alias { - color: var(--color-ts-type-alias); -} - -/* if we have a kind icon, don't color the text by kind */ -.tsd-kind-icon ~ span { - color: var(--color-text); -} - -* { - scrollbar-width: thin; - scrollbar-color: var(--color-accent) var(--color-icon-background); -} - -*::-webkit-scrollbar { - width: 0.75rem; -} - -*::-webkit-scrollbar-track { - background: var(--color-icon-background); -} - -*::-webkit-scrollbar-thumb { - background-color: var(--color-accent); - border-radius: 999rem; - border: 0.25rem solid var(--color-icon-background); -} - -/* mobile */ -@media (max-width: 769px) { - .tsd-widget.options, - .tsd-widget.menu { - display: inline-block; - } - - .container-main { - display: flex; - } - html .col-content { - float: none; - max-width: 100%; - width: 100%; - } - html .col-sidebar { - position: fixed !important; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 1024; - top: 0 !important; - bottom: 0 !important; - left: auto !important; - right: 0 !important; - padding: 1.5rem 1.5rem 0 0; - width: 75vw; - visibility: hidden; - background-color: var(--color-background); - transform: translate(100%, 0); - } - html .col-sidebar > *:last-child { - padding-bottom: 20px; - } - html .overlay { - content: ""; - display: block; - position: fixed; - z-index: 1023; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.75); - visibility: hidden; - } - - .to-has-menu .overlay { - animation: fade-in 0.4s; - } - - .to-has-menu .col-sidebar { - animation: pop-in-from-right 0.4s; - } - - .from-has-menu .overlay { - animation: fade-out 0.4s; - } - - .from-has-menu .col-sidebar { - animation: pop-out-to-right 0.4s; - } - - .has-menu body { - overflow: hidden; - } - .has-menu .overlay { - visibility: visible; - } - .has-menu .col-sidebar { - visibility: visible; - transform: translate(0, 0); - display: flex; - flex-direction: column; - gap: 1.5rem; - max-height: 100vh; - padding: 1rem 2rem; - } - .has-menu .tsd-navigation { - max-height: 100%; - } -} - -/* one sidebar */ -@media (min-width: 770px) { - .container-main { - display: grid; - grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); - grid-template-areas: "sidebar content"; - margin: 2rem auto; - } - - .col-sidebar { - grid-area: sidebar; - } - .col-content { - grid-area: content; - padding: 0 1rem; - } -} -@media (min-width: 770px) and (max-width: 1399px) { - .col-sidebar { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; - padding-top: 1rem; - } - .site-menu { - margin-top: 1rem; - } -} - -/* two sidebars */ -@media (min-width: 1200px) { - .container-main { - grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem); - grid-template-areas: "sidebar content toc"; - } - - .col-sidebar { - display: contents; - } - - .page-menu { - grid-area: toc; - padding-left: 1rem; - } - .site-menu { - grid-area: sidebar; - } - - .site-menu { - margin-top: 1rem 0; - } - - .page-menu, - .site-menu { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; - } -} diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 5c030fc..0000000 --- a/docs/index.html +++ /dev/null @@ -1,452 +0,0 @@ - - - - - - firewalk - - - - - - - - - - -
-
-
-

- Firewalk -

- -

- A light, fast, and memory-efficient collection traversal library for Firestore and - Node.js. -

- -

Versions

-
    -
  • - v2 -
  • -
  • - v1 -
  • -
-
-
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/v1/assets/highlight.css b/docs/v1/assets/highlight.css deleted file mode 100644 index 2e2e63f..0000000 --- a/docs/v1/assets/highlight.css +++ /dev/null @@ -1,92 +0,0 @@ -:root { - --light-hl-0: #000000; - --dark-hl-0: #D4D4D4; - --light-hl-1: #001080; - --dark-hl-1: #9CDCFE; - --light-hl-2: #0070C1; - --dark-hl-2: #4FC1FF; - --light-hl-3: #AF00DB; - --dark-hl-3: #C586C0; - --light-hl-4: #A31515; - --dark-hl-4: #CE9178; - --light-hl-5: #0000FF; - --dark-hl-5: #569CD6; - --light-hl-6: #795E26; - --dark-hl-6: #DCDCAA; - --light-hl-7: #267F99; - --dark-hl-7: #4EC9B0; - --light-hl-8: #098658; - --dark-hl-8: #B5CEA8; - --light-hl-9: #008000; - --dark-hl-9: #6A9955; - --light-code-background: #FFFFFF; - --dark-code-background: #1E1E1E; -} - -@media (prefers-color-scheme: light) { :root { - --hl-0: var(--light-hl-0); - --hl-1: var(--light-hl-1); - --hl-2: var(--light-hl-2); - --hl-3: var(--light-hl-3); - --hl-4: var(--light-hl-4); - --hl-5: var(--light-hl-5); - --hl-6: var(--light-hl-6); - --hl-7: var(--light-hl-7); - --hl-8: var(--light-hl-8); - --hl-9: var(--light-hl-9); - --code-background: var(--light-code-background); -} } - -@media (prefers-color-scheme: dark) { :root { - --hl-0: var(--dark-hl-0); - --hl-1: var(--dark-hl-1); - --hl-2: var(--dark-hl-2); - --hl-3: var(--dark-hl-3); - --hl-4: var(--dark-hl-4); - --hl-5: var(--dark-hl-5); - --hl-6: var(--dark-hl-6); - --hl-7: var(--dark-hl-7); - --hl-8: var(--dark-hl-8); - --hl-9: var(--dark-hl-9); - --code-background: var(--dark-code-background); -} } - -:root[data-theme='light'] { - --hl-0: var(--light-hl-0); - --hl-1: var(--light-hl-1); - --hl-2: var(--light-hl-2); - --hl-3: var(--light-hl-3); - --hl-4: var(--light-hl-4); - --hl-5: var(--light-hl-5); - --hl-6: var(--light-hl-6); - --hl-7: var(--light-hl-7); - --hl-8: var(--light-hl-8); - --hl-9: var(--light-hl-9); - --code-background: var(--light-code-background); -} - -:root[data-theme='dark'] { - --hl-0: var(--dark-hl-0); - --hl-1: var(--dark-hl-1); - --hl-2: var(--dark-hl-2); - --hl-3: var(--dark-hl-3); - --hl-4: var(--dark-hl-4); - --hl-5: var(--dark-hl-5); - --hl-6: var(--dark-hl-6); - --hl-7: var(--dark-hl-7); - --hl-8: var(--dark-hl-8); - --hl-9: var(--dark-hl-9); - --code-background: var(--dark-code-background); -} - -.hl-0 { color: var(--hl-0); } -.hl-1 { color: var(--hl-1); } -.hl-2 { color: var(--hl-2); } -.hl-3 { color: var(--hl-3); } -.hl-4 { color: var(--hl-4); } -.hl-5 { color: var(--hl-5); } -.hl-6 { color: var(--hl-6); } -.hl-7 { color: var(--hl-7); } -.hl-8 { color: var(--hl-8); } -.hl-9 { color: var(--hl-9); } -pre, code { background: var(--code-background); } diff --git a/docs/v1/assets/main.js b/docs/v1/assets/main.js deleted file mode 100644 index d0aa8d5..0000000 --- a/docs/v1/assets/main.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; -"use strict";(()=>{var Pe=Object.create;var ne=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Ie(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Pe(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),v=s.str.charAt(1),f;v in s.node.edges?f=s.node.edges[v]:(f=new t.TokenSet,s.node.edges[v]=f),s.str.length==1&&(f.final=!0),i.push({node:f,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${ce(l.parent,i)}.${d}`);let v=document.createElement("li");v.classList.value=l.classes??"";let f=document.createElement("a");f.href=r.base+l.url,f.innerHTML=u+d,v.append(f),e.appendChild(v)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var Be={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>Be[e])}var C=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",pe="mousemove",B="mouseup",J={x:0,y:0},fe=!1,ee=!1,He=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(He=!0,F="touchstart",pe="touchmove",B="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(pe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ee=!1});document.addEventListener("click",t=>{fe&&(t.preventDefault(),t.stopImmediatePropagation(),fe=!1)});var X=class extends C{constructor(n){super(n);this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,r=>this.onPointerUp(r)),this.el.addEventListener("click",r=>r.preventDefault()),document.addEventListener(F,r=>this.onDocumentPointerDown(r)),document.addEventListener(B,r=>this.onDocumentPointerUp(r))}setActive(n){if(this.active==n)return;this.active=n,document.documentElement.classList.toggle("has-"+this.className,n),this.el.classList.toggle("active",n);let r=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(n){D||(this.setActive(!0),n.preventDefault())}onDocumentPointerDown(n){if(this.active){if(n.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(n){if(!D&&this.active&&n.target.closest(".col-sidebar")){let r=n.target.closest("a");if(r){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),r.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ve=document.head.appendChild(document.createElement("style"));ve.dataset.for="filters";var Y=class extends C{constructor(n){super(n);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ve.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.checked}setLocalStorage(n){Q.setItem(this.key,n.toString()),this.value=n,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(n=>{n.style.display="block";let r=Array.from(n.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);n.style.display=r?"none":"block"})}};var Z=class extends C{constructor(n){super(n);this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let r=Q.getItem(this.key);this.el.open=r?r==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let i=this.summary.querySelector("a");i&&i.addEventListener("click",()=>{location.assign(i.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.href===r.href&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); -/*! Bundled license information: - -lunr/lunr.js: - (** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - *) - (*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Set - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.tokenizer - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Vector - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.stemmer - * Copyright (C) 2020 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - *) - (*! - * lunr.stopWordFilter - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.trimmer - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.TokenSet - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Builder - * Copyright (C) 2020 Oliver Nightingale - *) -*/ diff --git a/docs/v1/assets/navigation.js b/docs/v1/assets/navigation.js deleted file mode 100644 index 35f0a8b..0000000 --- a/docs/v1/assets/navigation.js +++ /dev/null @@ -1 +0,0 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAE42UTVPCMBCG/4rTM4gwgspNoTgeHB2/LgyHJd3SDKF00oWBcfjvRmtLmiZtz/vs826TTeffHuGBvLE3EZCmmHodj0VcBBJjbzwvqk+bROAGYwLi29iXcisVmQBFqsiy1p4FuoxoIxS55nHgjfuD21Pn7Iz3IHgw2cYhX7mUFaZqXJSchDIE5vyQByAWPfOVBNLzeNHXKxHltMFwpGVNMYSdoFqZwdTpMkYd3BumqsWqM5hmnWOsNvO8I70kv1mpVXEuVySd7PoUT2nQ5WlXCVHGIDxN/yFhjzIFkd2tNcNg6qYt0JrTM5gWOvSBRc0Dalgbqf1OimpVoW/4xzHBi3vBwf1Y/zZ4AkIsga3PWaQ6/9c7LxpRV3c3/eFAC/MPnHyQ4vgqMeAMCE1dlWhyFjvsdFaJJqdaxikQPCKRfrqZrlRsMuU7shSVsbRSS0u2F46LsDFN3s8kUKfh/lSz3s434yiCLxA7rLOalN2tr+psF7P8B2LbUyZReR1/5DBv7lmwcvboWgvN6GZfa5Xl1Zoux9NVssVp8QPj8GjMYwcAAA==" \ No newline at end of file diff --git a/docs/v1/assets/search.js b/docs/v1/assets/search.js deleted file mode 100644 index f564085..0000000 --- a/docs/v1/assets/search.js +++ /dev/null @@ -1 +0,0 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/docs/v1/assets/style.css b/docs/v1/assets/style.css deleted file mode 100644 index 07a385b..0000000 --- a/docs/v1/assets/style.css +++ /dev/null @@ -1,1394 +0,0 @@ -:root { - /* Light */ - --light-color-background: #f2f4f8; - --light-color-background-secondary: #eff0f1; - --light-color-warning-text: #222; - --light-color-background-warning: #e6e600; - --light-color-icon-background: var(--light-color-background); - --light-color-accent: #c5c7c9; - --light-color-active-menu-item: var(--light-color-accent); - --light-color-text: #222; - --light-color-text-aside: #6e6e6e; - --light-color-link: #1f70c2; - - --light-color-ts-keyword: #056bd6; - --light-color-ts-project: #b111c9; - --light-color-ts-module: var(--light-color-ts-project); - --light-color-ts-namespace: var(--light-color-ts-project); - --light-color-ts-enum: #7e6f15; - --light-color-ts-enum-member: var(--light-color-ts-enum); - --light-color-ts-variable: #4760ec; - --light-color-ts-function: #572be7; - --light-color-ts-class: #1f70c2; - --light-color-ts-interface: #108024; - --light-color-ts-constructor: var(--light-color-ts-class); - --light-color-ts-property: var(--light-color-ts-variable); - --light-color-ts-method: var(--light-color-ts-function); - --light-color-ts-call-signature: var(--light-color-ts-method); - --light-color-ts-index-signature: var(--light-color-ts-property); - --light-color-ts-constructor-signature: var(--light-color-ts-constructor); - --light-color-ts-parameter: var(--light-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --light-color-ts-type-parameter: var(--light-color-ts-type-alias); - --light-color-ts-accessor: var(--light-color-ts-property); - --light-color-ts-get-signature: var(--light-color-ts-accessor); - --light-color-ts-set-signature: var(--light-color-ts-accessor); - --light-color-ts-type-alias: #d51270; - /* reference not included as links will be colored with the kind that it points to */ - - --light-external-icon: url("data:image/svg+xml;utf8,"); - --light-color-scheme: light; - - /* Dark */ - --dark-color-background: #2b2e33; - --dark-color-background-secondary: #1e2024; - --dark-color-background-warning: #bebe00; - --dark-color-warning-text: #222; - --dark-color-icon-background: var(--dark-color-background-secondary); - --dark-color-accent: #9096a2; - --dark-color-active-menu-item: #5d5d6a; - --dark-color-text: #f5f5f5; - --dark-color-text-aside: #dddddd; - --dark-color-link: #00aff4; - - --dark-color-ts-keyword: #3399ff; - --dark-color-ts-project: #e358ff; - --dark-color-ts-module: var(--dark-color-ts-project); - --dark-color-ts-namespace: var(--dark-color-ts-project); - --dark-color-ts-enum: #f4d93e; - --dark-color-ts-enum-member: var(--dark-color-ts-enum); - --dark-color-ts-variable: #798dff; - --dark-color-ts-function: #a280ff; - --dark-color-ts-class: #8ac4ff; - --dark-color-ts-interface: #6cff87; - --dark-color-ts-constructor: var(--dark-color-ts-class); - --dark-color-ts-property: var(--dark-color-ts-variable); - --dark-color-ts-method: var(--dark-color-ts-function); - --dark-color-ts-call-signature: var(--dark-color-ts-method); - --dark-color-ts-index-signature: var(--dark-color-ts-property); - --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); - --dark-color-ts-parameter: var(--dark-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --dark-color-ts-type-parameter: var(--dark-color-ts-type-alias); - --dark-color-ts-accessor: var(--dark-color-ts-property); - --dark-color-ts-get-signature: var(--dark-color-ts-accessor); - --dark-color-ts-set-signature: var(--dark-color-ts-accessor); - --dark-color-ts-type-alias: #ff6492; - /* reference not included as links will be colored with the kind that it points to */ - - --dark-external-icon: url("data:image/svg+xml;utf8,"); - --dark-color-scheme: dark; -} - -@media (prefers-color-scheme: light) { - :root { - --color-background: var(--light-color-background); - --color-background-secondary: var(--light-color-background-secondary); - --color-background-warning: var(--light-color-background-warning); - --color-warning-text: var(--light-color-warning-text); - --color-icon-background: var(--light-color-icon-background); - --color-accent: var(--light-color-accent); - --color-active-menu-item: var(--light-color-active-menu-item); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - - --color-ts-keyword: var(--light-color-ts-keyword); - --color-ts-module: var(--light-color-ts-module); - --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-enum-member: var(--light-color-ts-enum-member); - --color-ts-variable: var(--light-color-ts-variable); - --color-ts-function: var(--light-color-ts-function); - --color-ts-class: var(--light-color-ts-class); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-constructor: var(--light-color-ts-constructor); - --color-ts-property: var(--light-color-ts-property); - --color-ts-method: var(--light-color-ts-method); - --color-ts-call-signature: var(--light-color-ts-call-signature); - --color-ts-index-signature: var(--light-color-ts-index-signature); - --color-ts-constructor-signature: var( - --light-color-ts-constructor-signature - ); - --color-ts-parameter: var(--light-color-ts-parameter); - --color-ts-type-parameter: var(--light-color-ts-type-parameter); - --color-ts-accessor: var(--light-color-ts-accessor); - --color-ts-get-signature: var(--light-color-ts-get-signature); - --color-ts-set-signature: var(--light-color-ts-set-signature); - --color-ts-type-alias: var(--light-color-ts-type-alias); - - --external-icon: var(--light-external-icon); - --color-scheme: var(--light-color-scheme); - } -} - -@media (prefers-color-scheme: dark) { - :root { - --color-background: var(--dark-color-background); - --color-background-secondary: var(--dark-color-background-secondary); - --color-background-warning: var(--dark-color-background-warning); - --color-warning-text: var(--dark-color-warning-text); - --color-icon-background: var(--dark-color-icon-background); - --color-accent: var(--dark-color-accent); - --color-active-menu-item: var(--dark-color-active-menu-item); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - - --color-ts-keyword: var(--dark-color-ts-keyword); - --color-ts-module: var(--dark-color-ts-module); - --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-enum-member: var(--dark-color-ts-enum-member); - --color-ts-variable: var(--dark-color-ts-variable); - --color-ts-function: var(--dark-color-ts-function); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-constructor: var(--dark-color-ts-constructor); - --color-ts-property: var(--dark-color-ts-property); - --color-ts-method: var(--dark-color-ts-method); - --color-ts-call-signature: var(--dark-color-ts-call-signature); - --color-ts-index-signature: var(--dark-color-ts-index-signature); - --color-ts-constructor-signature: var( - --dark-color-ts-constructor-signature - ); - --color-ts-parameter: var(--dark-color-ts-parameter); - --color-ts-type-parameter: var(--dark-color-ts-type-parameter); - --color-ts-accessor: var(--dark-color-ts-accessor); - --color-ts-get-signature: var(--dark-color-ts-get-signature); - --color-ts-set-signature: var(--dark-color-ts-set-signature); - --color-ts-type-alias: var(--dark-color-ts-type-alias); - - --external-icon: var(--dark-external-icon); - --color-scheme: var(--dark-color-scheme); - } -} - -html { - color-scheme: var(--color-scheme); -} - -body { - margin: 0; -} - -:root[data-theme="light"] { - --color-background: var(--light-color-background); - --color-background-secondary: var(--light-color-background-secondary); - --color-background-warning: var(--light-color-background-warning); - --color-warning-text: var(--light-color-warning-text); - --color-icon-background: var(--light-color-icon-background); - --color-accent: var(--light-color-accent); - --color-active-menu-item: var(--light-color-active-menu-item); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - - --color-ts-keyword: var(--light-color-ts-keyword); - --color-ts-module: var(--light-color-ts-module); - --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-enum-member: var(--light-color-ts-enum-member); - --color-ts-variable: var(--light-color-ts-variable); - --color-ts-function: var(--light-color-ts-function); - --color-ts-class: var(--light-color-ts-class); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-constructor: var(--light-color-ts-constructor); - --color-ts-property: var(--light-color-ts-property); - --color-ts-method: var(--light-color-ts-method); - --color-ts-call-signature: var(--light-color-ts-call-signature); - --color-ts-index-signature: var(--light-color-ts-index-signature); - --color-ts-constructor-signature: var( - --light-color-ts-constructor-signature - ); - --color-ts-parameter: var(--light-color-ts-parameter); - --color-ts-type-parameter: var(--light-color-ts-type-parameter); - --color-ts-accessor: var(--light-color-ts-accessor); - --color-ts-get-signature: var(--light-color-ts-get-signature); - --color-ts-set-signature: var(--light-color-ts-set-signature); - --color-ts-type-alias: var(--light-color-ts-type-alias); - - --external-icon: var(--light-external-icon); - --color-scheme: var(--light-color-scheme); -} - -:root[data-theme="dark"] { - --color-background: var(--dark-color-background); - --color-background-secondary: var(--dark-color-background-secondary); - --color-background-warning: var(--dark-color-background-warning); - --color-warning-text: var(--dark-color-warning-text); - --color-icon-background: var(--dark-color-icon-background); - --color-accent: var(--dark-color-accent); - --color-active-menu-item: var(--dark-color-active-menu-item); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - - --color-ts-keyword: var(--dark-color-ts-keyword); - --color-ts-module: var(--dark-color-ts-module); - --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-enum-member: var(--dark-color-ts-enum-member); - --color-ts-variable: var(--dark-color-ts-variable); - --color-ts-function: var(--dark-color-ts-function); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-constructor: var(--dark-color-ts-constructor); - --color-ts-property: var(--dark-color-ts-property); - --color-ts-method: var(--dark-color-ts-method); - --color-ts-call-signature: var(--dark-color-ts-call-signature); - --color-ts-index-signature: var(--dark-color-ts-index-signature); - --color-ts-constructor-signature: var( - --dark-color-ts-constructor-signature - ); - --color-ts-parameter: var(--dark-color-ts-parameter); - --color-ts-type-parameter: var(--dark-color-ts-type-parameter); - --color-ts-accessor: var(--dark-color-ts-accessor); - --color-ts-get-signature: var(--dark-color-ts-get-signature); - --color-ts-set-signature: var(--dark-color-ts-set-signature); - --color-ts-type-alias: var(--dark-color-ts-type-alias); - - --external-icon: var(--dark-external-icon); - --color-scheme: var(--dark-color-scheme); -} - -.always-visible, -.always-visible .tsd-signatures { - display: inherit !important; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - line-height: 1.2; -} - -h1 > a, -h2 > a, -h3 > a, -h4 > a, -h5 > a, -h6 > a { - text-decoration: none; - color: var(--color-text); -} - -h1 { - font-size: 1.875rem; - margin: 0.67rem 0; -} - -h2 { - font-size: 1.5rem; - margin: 0.83rem 0; -} - -h3 { - font-size: 1.25rem; - margin: 1rem 0; -} - -h4 { - font-size: 1.05rem; - margin: 1.33rem 0; -} - -h5 { - font-size: 1rem; - margin: 1.5rem 0; -} - -h6 { - font-size: 0.875rem; - margin: 2.33rem 0; -} - -.uppercase { - text-transform: uppercase; -} - -dl, -menu, -ol, -ul { - margin: 1em 0; -} - -dd { - margin: 0 0 0 40px; -} - -.container { - max-width: 1700px; - padding: 0 2rem; -} - -/* Footer */ -.tsd-generator { - border-top: 1px solid var(--color-accent); - padding-top: 1rem; - padding-bottom: 1rem; - max-height: 3.5rem; -} - -.tsd-generator > p { - margin-top: 0; - margin-bottom: 0; - padding: 0 1rem; -} - -.container-main { - margin: 0 auto; - /* toolbar, footer, margin */ - min-height: calc(100vh - 41px - 56px - 4rem); -} - -@keyframes fade-in { - from { - opacity: 0; - } - to { - opacity: 1; - } -} -@keyframes fade-out { - from { - opacity: 1; - visibility: visible; - } - to { - opacity: 0; - } -} -@keyframes fade-in-delayed { - 0% { - opacity: 0; - } - 33% { - opacity: 0; - } - 100% { - opacity: 1; - } -} -@keyframes fade-out-delayed { - 0% { - opacity: 1; - visibility: visible; - } - 66% { - opacity: 0; - } - 100% { - opacity: 0; - } -} -@keyframes pop-in-from-right { - from { - transform: translate(100%, 0); - } - to { - transform: translate(0, 0); - } -} -@keyframes pop-out-to-right { - from { - transform: translate(0, 0); - visibility: visible; - } - to { - transform: translate(100%, 0); - } -} -body { - background: var(--color-background); - font-family: "Segoe UI", sans-serif; - font-size: 16px; - color: var(--color-text); -} - -a { - color: var(--color-link); - text-decoration: none; -} -a:hover { - text-decoration: underline; -} -a.external[target="_blank"] { - background-image: var(--external-icon); - background-position: top 3px right; - background-repeat: no-repeat; - padding-right: 13px; -} - -code, -pre { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - padding: 0.2em; - margin: 0; - font-size: 0.875rem; - border-radius: 0.8em; -} - -pre { - position: relative; - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; - padding: 10px; - border: 1px solid var(--color-accent); -} -pre code { - padding: 0; - font-size: 100%; -} -pre > button { - position: absolute; - top: 10px; - right: 10px; - opacity: 0; - transition: opacity 0.1s; - box-sizing: border-box; -} -pre:hover > button, -pre > button.visible { - opacity: 1; -} - -blockquote { - margin: 1em 0; - padding-left: 1em; - border-left: 4px solid gray; -} - -.tsd-typography { - line-height: 1.333em; -} -.tsd-typography ul { - list-style: square; - padding: 0 0 0 20px; - margin: 0; -} -.tsd-typography .tsd-index-panel h3, -.tsd-index-panel .tsd-typography h3, -.tsd-typography h4, -.tsd-typography h5, -.tsd-typography h6 { - font-size: 1em; -} -.tsd-typography h5, -.tsd-typography h6 { - font-weight: normal; -} -.tsd-typography p, -.tsd-typography ul, -.tsd-typography ol { - margin: 1em 0; -} -.tsd-typography table { - border-collapse: collapse; - border: none; -} -.tsd-typography td, -.tsd-typography th { - padding: 6px 13px; - border: 1px solid var(--color-accent); -} -.tsd-typography thead, -.tsd-typography tr:nth-child(even) { - background-color: var(--color-background-secondary); -} - -.tsd-breadcrumb { - margin: 0; - padding: 0; - color: var(--color-text-aside); -} -.tsd-breadcrumb a { - color: var(--color-text-aside); - text-decoration: none; -} -.tsd-breadcrumb a:hover { - text-decoration: underline; -} -.tsd-breadcrumb li { - display: inline; -} -.tsd-breadcrumb li:after { - content: " / "; -} - -.tsd-comment-tags { - display: flex; - flex-direction: column; -} -dl.tsd-comment-tag-group { - display: flex; - align-items: center; - overflow: hidden; - margin: 0.5em 0; -} -dl.tsd-comment-tag-group dt { - display: flex; - margin-right: 0.5em; - font-size: 0.875em; - font-weight: normal; -} -dl.tsd-comment-tag-group dd { - margin: 0; -} -code.tsd-tag { - padding: 0.25em 0.4em; - border: 0.1em solid var(--color-accent); - margin-right: 0.25em; - font-size: 70%; -} -h1 code.tsd-tag:first-of-type { - margin-left: 0.25em; -} - -dl.tsd-comment-tag-group dd:before, -dl.tsd-comment-tag-group dd:after { - content: " "; -} -dl.tsd-comment-tag-group dd pre, -dl.tsd-comment-tag-group dd:after { - clear: both; -} -dl.tsd-comment-tag-group p { - margin: 0; -} - -.tsd-panel.tsd-comment .lead { - font-size: 1.1em; - line-height: 1.333em; - margin-bottom: 2em; -} -.tsd-panel.tsd-comment .lead:last-child { - margin-bottom: 0; -} - -.tsd-filter-visibility h4 { - font-size: 1rem; - padding-top: 0.75rem; - padding-bottom: 0.5rem; - margin: 0; -} -.tsd-filter-item:not(:last-child) { - margin-bottom: 0.5rem; -} -.tsd-filter-input { - display: flex; - width: fit-content; - width: -moz-fit-content; - align-items: center; - user-select: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - cursor: pointer; -} -.tsd-filter-input input[type="checkbox"] { - cursor: pointer; - position: absolute; - width: 1.5em; - height: 1.5em; - opacity: 0; -} -.tsd-filter-input input[type="checkbox"]:disabled { - pointer-events: none; -} -.tsd-filter-input svg { - cursor: pointer; - width: 1.5em; - height: 1.5em; - margin-right: 0.5em; - border-radius: 0.33em; - /* Leaving this at full opacity breaks event listeners on Firefox. - Don't remove unless you know what you're doing. */ - opacity: 0.99; -} -.tsd-filter-input input[type="checkbox"]:focus + svg { - transform: scale(0.95); -} -.tsd-filter-input input[type="checkbox"]:focus:not(:focus-visible) + svg { - transform: scale(1); -} -.tsd-checkbox-background { - fill: var(--color-accent); -} -input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { - stroke: var(--color-text); -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { - fill: var(--color-background); - stroke: var(--color-accent); - stroke-width: 0.25rem; -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { - stroke: var(--color-accent); -} - -.tsd-theme-toggle { - padding-top: 0.75rem; -} -.tsd-theme-toggle > h4 { - display: inline; - vertical-align: middle; - margin-right: 0.75rem; -} - -.tsd-hierarchy { - list-style: square; - margin: 0; -} -.tsd-hierarchy .target { - font-weight: bold; -} - -.tsd-panel-group.tsd-index-group { - margin-bottom: 0; -} -.tsd-index-panel .tsd-index-list { - list-style: none; - line-height: 1.333em; - margin: 0; - padding: 0.25rem 0 0 0; - overflow: hidden; - display: grid; - grid-template-columns: repeat(3, 1fr); - column-gap: 1rem; - grid-template-rows: auto; -} -@media (max-width: 1024px) { - .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(2, 1fr); - } -} -@media (max-width: 768px) { - .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(1, 1fr); - } -} -.tsd-index-panel .tsd-index-list li { - -webkit-page-break-inside: avoid; - -moz-page-break-inside: avoid; - -ms-page-break-inside: avoid; - -o-page-break-inside: avoid; - page-break-inside: avoid; -} - -.tsd-flag { - display: inline-block; - padding: 0.25em 0.4em; - border-radius: 4px; - color: var(--color-comment-tag-text); - background-color: var(--color-comment-tag); - text-indent: 0; - font-size: 75%; - line-height: 1; - font-weight: normal; -} - -.tsd-anchor { - position: relative; - top: -100px; -} - -.tsd-member { - position: relative; -} -.tsd-member .tsd-anchor + h3 { - display: flex; - align-items: center; - margin-top: 0; - margin-bottom: 0; - border-bottom: none; -} - -.tsd-navigation.settings { - margin: 1rem 0; -} -.tsd-navigation > a, -.tsd-navigation .tsd-accordion-summary { - width: calc(100% - 0.5rem); -} -.tsd-navigation a, -.tsd-navigation summary > span, -.tsd-page-navigation a { - display: inline-flex; - align-items: center; - padding: 0.25rem; - color: var(--color-text); - text-decoration: none; - box-sizing: border-box; -} -.tsd-navigation a.current, -.tsd-page-navigation a.current { - background: var(--color-active-menu-item); -} -.tsd-navigation a:hover, -.tsd-page-navigation a:hover { - text-decoration: underline; -} -.tsd-navigation ul, -.tsd-page-navigation ul { - margin-top: 0; - margin-bottom: 0; - padding: 0; - list-style: none; -} -.tsd-navigation li, -.tsd-page-navigation li { - padding: 0; - max-width: 100%; -} -.tsd-nested-navigation { - margin-left: 3rem; -} -.tsd-nested-navigation > li > details { - margin-left: -1.5rem; -} -.tsd-small-nested-navigation { - margin-left: 1.5rem; -} -.tsd-small-nested-navigation > li > details { - margin-left: -1.5rem; -} - -.tsd-nested-navigation > li > a, -.tsd-nested-navigation > li > span { - width: calc(100% - 1.75rem - 0.5rem); -} - -.tsd-page-navigation ul { - padding-left: 1.75rem; -} - -#tsd-sidebar-links a { - margin-top: 0; - margin-bottom: 0.5rem; - line-height: 1.25rem; -} -#tsd-sidebar-links a:last-of-type { - margin-bottom: 0; -} - -a.tsd-index-link { - padding: 0.25rem 0 !important; - font-size: 1rem; - line-height: 1.25rem; - display: inline-flex; - align-items: center; - color: var(--color-text); -} -.tsd-accordion-summary { - list-style-type: none; /* hide marker on non-safari */ - outline: none; /* broken on safari, so just hide it */ -} -.tsd-accordion-summary::-webkit-details-marker { - display: none; /* hide marker on safari */ -} -.tsd-accordion-summary, -.tsd-accordion-summary a { - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - - cursor: pointer; -} -.tsd-accordion-summary a { - width: calc(100% - 1.5rem); -} -.tsd-accordion-summary > * { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} -.tsd-index-accordion .tsd-accordion-summary > svg { - margin-left: 0.25rem; -} -.tsd-index-content > :not(:first-child) { - margin-top: 0.75rem; -} -.tsd-index-heading { - margin-top: 1.5rem; - margin-bottom: 0.75rem; -} - -.tsd-kind-icon { - margin-right: 0.5rem; - width: 1.25rem; - height: 1.25rem; - min-width: 1.25rem; - min-height: 1.25rem; -} -.tsd-kind-icon path { - transform-origin: center; - transform: scale(1.1); -} -.tsd-signature > .tsd-kind-icon { - margin-right: 0.8rem; -} - -.tsd-panel { - margin-bottom: 2.5rem; -} -.tsd-panel.tsd-member { - margin-bottom: 4rem; -} -.tsd-panel:empty { - display: none; -} -.tsd-panel > h1, -.tsd-panel > h2, -.tsd-panel > h3 { - margin: 1.5rem -1.5rem 0.75rem -1.5rem; - padding: 0 1.5rem 0.75rem 1.5rem; -} -.tsd-panel > h1.tsd-before-signature, -.tsd-panel > h2.tsd-before-signature, -.tsd-panel > h3.tsd-before-signature { - margin-bottom: 0; - border-bottom: none; -} - -.tsd-panel-group { - margin: 4rem 0; -} -.tsd-panel-group.tsd-index-group { - margin: 2rem 0; -} -.tsd-panel-group.tsd-index-group details { - margin: 2rem 0; -} - -#tsd-search { - transition: background-color 0.2s; -} -#tsd-search .title { - position: relative; - z-index: 2; -} -#tsd-search .field { - position: absolute; - left: 0; - top: 0; - right: 2.5rem; - height: 100%; -} -#tsd-search .field input { - box-sizing: border-box; - position: relative; - top: -50px; - z-index: 1; - width: 100%; - padding: 0 10px; - opacity: 0; - outline: 0; - border: 0; - background: transparent; - color: var(--color-text); -} -#tsd-search .field label { - position: absolute; - overflow: hidden; - right: -40px; -} -#tsd-search .field input, -#tsd-search .title, -#tsd-toolbar-links a { - transition: opacity 0.2s; -} -#tsd-search .results { - position: absolute; - visibility: hidden; - top: 40px; - width: 100%; - margin: 0; - padding: 0; - list-style: none; - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); -} -#tsd-search .results li { - background-color: var(--color-background); - line-height: initial; - padding: 4px; -} -#tsd-search .results li:nth-child(even) { - background-color: var(--color-background-secondary); -} -#tsd-search .results li.state { - display: none; -} -#tsd-search .results li.current:not(.no-results), -#tsd-search .results li:hover:not(.no-results) { - background-color: var(--color-accent); -} -#tsd-search .results a { - display: flex; - align-items: center; - padding: 0.25rem; - box-sizing: border-box; -} -#tsd-search .results a:before { - top: 10px; -} -#tsd-search .results span.parent { - color: var(--color-text-aside); - font-weight: normal; -} -#tsd-search.has-focus { - background-color: var(--color-accent); -} -#tsd-search.has-focus .field input { - top: 0; - opacity: 1; -} -#tsd-search.has-focus .title, -#tsd-search.has-focus #tsd-toolbar-links a { - z-index: 0; - opacity: 0; -} -#tsd-search.has-focus .results { - visibility: visible; -} -#tsd-search.loading .results li.state.loading { - display: block; -} -#tsd-search.failure .results li.state.failure { - display: block; -} - -#tsd-toolbar-links { - position: absolute; - top: 0; - right: 2rem; - height: 100%; - display: flex; - align-items: center; - justify-content: flex-end; -} -#tsd-toolbar-links a { - margin-left: 1.5rem; -} -#tsd-toolbar-links a:hover { - text-decoration: underline; -} - -.tsd-signature { - margin: 0 0 1rem 0; - padding: 1rem 0.5rem; - border: 1px solid var(--color-accent); - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - font-size: 14px; - overflow-x: auto; -} - -.tsd-signature-keyword { - color: var(--color-ts-keyword); - font-weight: normal; -} - -.tsd-signature-symbol { - color: var(--color-text-aside); - font-weight: normal; -} - -.tsd-signature-type { - font-style: italic; - font-weight: normal; -} - -.tsd-signatures { - padding: 0; - margin: 0 0 1em 0; - list-style-type: none; -} -.tsd-signatures .tsd-signature { - margin: 0; - border-color: var(--color-accent); - border-width: 1px 0; - transition: background-color 0.1s; -} -.tsd-description .tsd-signatures .tsd-signature { - border-width: 1px; -} - -ul.tsd-parameter-list, -ul.tsd-type-parameter-list { - list-style: square; - margin: 0; - padding-left: 20px; -} -ul.tsd-parameter-list > li.tsd-parameter-signature, -ul.tsd-type-parameter-list > li.tsd-parameter-signature { - list-style: none; - margin-left: -20px; -} -ul.tsd-parameter-list h5, -ul.tsd-type-parameter-list h5 { - font-size: 16px; - margin: 1em 0 0.5em 0; -} -.tsd-sources { - margin-top: 1rem; - font-size: 0.875em; -} -.tsd-sources a { - color: var(--color-text-aside); - text-decoration: underline; -} -.tsd-sources ul { - list-style: none; - padding: 0; -} - -.tsd-page-toolbar { - position: sticky; - z-index: 1; - top: 0; - left: 0; - width: 100%; - color: var(--color-text); - background: var(--color-background-secondary); - border-bottom: 1px var(--color-accent) solid; - transition: transform 0.3s ease-in-out; -} -.tsd-page-toolbar a { - color: var(--color-text); - text-decoration: none; -} -.tsd-page-toolbar a.title { - font-weight: bold; -} -.tsd-page-toolbar a.title:hover { - text-decoration: underline; -} -.tsd-page-toolbar .tsd-toolbar-contents { - display: flex; - justify-content: space-between; - height: 2.5rem; - margin: 0 auto; -} -.tsd-page-toolbar .table-cell { - position: relative; - white-space: nowrap; - line-height: 40px; -} -.tsd-page-toolbar .table-cell:first-child { - width: 100%; -} -.tsd-page-toolbar .tsd-toolbar-icon { - box-sizing: border-box; - line-height: 0; - padding: 12px 0; -} - -.tsd-widget { - display: inline-block; - overflow: hidden; - opacity: 0.8; - height: 40px; - transition: - opacity 0.1s, - background-color 0.2s; - vertical-align: bottom; - cursor: pointer; -} -.tsd-widget:hover { - opacity: 0.9; -} -.tsd-widget.active { - opacity: 1; - background-color: var(--color-accent); -} -.tsd-widget.no-caption { - width: 40px; -} -.tsd-widget.no-caption:before { - margin: 0; -} - -.tsd-widget.options, -.tsd-widget.menu { - display: none; -} -input[type="checkbox"] + .tsd-widget:before { - background-position: -120px 0; -} -input[type="checkbox"]:checked + .tsd-widget:before { - background-position: -160px 0; -} - -img { - max-width: 100%; -} - -.tsd-anchor-icon { - display: inline-flex; - align-items: center; - margin-left: 0.5rem; - vertical-align: middle; - color: var(--color-text); -} - -.tsd-anchor-icon svg { - width: 1em; - height: 1em; - visibility: hidden; -} - -.tsd-anchor-link:hover > .tsd-anchor-icon svg { - visibility: visible; -} - -.deprecated { - text-decoration: line-through !important; -} - -.warning { - padding: 1rem; - color: var(--color-warning-text); - background: var(--color-background-warning); -} - -.tsd-kind-project { - color: var(--color-ts-project); -} -.tsd-kind-module { - color: var(--color-ts-module); -} -.tsd-kind-namespace { - color: var(--color-ts-namespace); -} -.tsd-kind-enum { - color: var(--color-ts-enum); -} -.tsd-kind-enum-member { - color: var(--color-ts-enum-member); -} -.tsd-kind-variable { - color: var(--color-ts-variable); -} -.tsd-kind-function { - color: var(--color-ts-function); -} -.tsd-kind-class { - color: var(--color-ts-class); -} -.tsd-kind-interface { - color: var(--color-ts-interface); -} -.tsd-kind-constructor { - color: var(--color-ts-constructor); -} -.tsd-kind-property { - color: var(--color-ts-property); -} -.tsd-kind-method { - color: var(--color-ts-method); -} -.tsd-kind-call-signature { - color: var(--color-ts-call-signature); -} -.tsd-kind-index-signature { - color: var(--color-ts-index-signature); -} -.tsd-kind-constructor-signature { - color: var(--color-ts-constructor-signature); -} -.tsd-kind-parameter { - color: var(--color-ts-parameter); -} -.tsd-kind-type-literal { - color: var(--color-ts-type-literal); -} -.tsd-kind-type-parameter { - color: var(--color-ts-type-parameter); -} -.tsd-kind-accessor { - color: var(--color-ts-accessor); -} -.tsd-kind-get-signature { - color: var(--color-ts-get-signature); -} -.tsd-kind-set-signature { - color: var(--color-ts-set-signature); -} -.tsd-kind-type-alias { - color: var(--color-ts-type-alias); -} - -/* if we have a kind icon, don't color the text by kind */ -.tsd-kind-icon ~ span { - color: var(--color-text); -} - -* { - scrollbar-width: thin; - scrollbar-color: var(--color-accent) var(--color-icon-background); -} - -*::-webkit-scrollbar { - width: 0.75rem; -} - -*::-webkit-scrollbar-track { - background: var(--color-icon-background); -} - -*::-webkit-scrollbar-thumb { - background-color: var(--color-accent); - border-radius: 999rem; - border: 0.25rem solid var(--color-icon-background); -} - -/* mobile */ -@media (max-width: 769px) { - .tsd-widget.options, - .tsd-widget.menu { - display: inline-block; - } - - .container-main { - display: flex; - } - html .col-content { - float: none; - max-width: 100%; - width: 100%; - } - html .col-sidebar { - position: fixed !important; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 1024; - top: 0 !important; - bottom: 0 !important; - left: auto !important; - right: 0 !important; - padding: 1.5rem 1.5rem 0 0; - width: 75vw; - visibility: hidden; - background-color: var(--color-background); - transform: translate(100%, 0); - } - html .col-sidebar > *:last-child { - padding-bottom: 20px; - } - html .overlay { - content: ""; - display: block; - position: fixed; - z-index: 1023; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.75); - visibility: hidden; - } - - .to-has-menu .overlay { - animation: fade-in 0.4s; - } - - .to-has-menu .col-sidebar { - animation: pop-in-from-right 0.4s; - } - - .from-has-menu .overlay { - animation: fade-out 0.4s; - } - - .from-has-menu .col-sidebar { - animation: pop-out-to-right 0.4s; - } - - .has-menu body { - overflow: hidden; - } - .has-menu .overlay { - visibility: visible; - } - .has-menu .col-sidebar { - visibility: visible; - transform: translate(0, 0); - display: flex; - flex-direction: column; - gap: 1.5rem; - max-height: 100vh; - padding: 1rem 2rem; - } - .has-menu .tsd-navigation { - max-height: 100%; - } -} - -/* one sidebar */ -@media (min-width: 770px) { - .container-main { - display: grid; - grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); - grid-template-areas: "sidebar content"; - margin: 2rem auto; - } - - .col-sidebar { - grid-area: sidebar; - } - .col-content { - grid-area: content; - padding: 0 1rem; - } -} -@media (min-width: 770px) and (max-width: 1399px) { - .col-sidebar { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; - padding-top: 1rem; - } - .site-menu { - margin-top: 1rem; - } -} - -/* two sidebars */ -@media (min-width: 1200px) { - .container-main { - grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem); - grid-template-areas: "sidebar content toc"; - } - - .col-sidebar { - display: contents; - } - - .page-menu { - grid-area: toc; - padding-left: 1rem; - } - .site-menu { - grid-area: sidebar; - } - - .site-menu { - margin-top: 1rem 0; - } - - .page-menu, - .site-menu { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; - } -} diff --git a/docs/v1/classes/ImplementationError.html b/docs/v1/classes/ImplementationError.html deleted file mode 100644 index 259ae7a..0000000 --- a/docs/v1/classes/ImplementationError.html +++ /dev/null @@ -1,13 +0,0 @@ -ImplementationError | firewalk

Class ImplementationError

An error thrown when a piece of code is found to be incorrectly implemented. If the maintainers of the -library have done everything right, this error should never be encountered.

-

Hierarchy

  • Error
    • ImplementationError

Constructors

Properties

message: string
name: string
stack?: string
prepareStackTrace?: ((err, stackTraces) => any)

Type declaration

stackTraceLimit: number

Methods

  • Create .stack property on a target object

    -

    Parameters

    • targetObject: object
    • Optional constructorOpt: Function

    Returns void

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/classes/InvalidConfigError.html b/docs/v1/classes/InvalidConfigError.html deleted file mode 100644 index b875d3d..0000000 --- a/docs/v1/classes/InvalidConfigError.html +++ /dev/null @@ -1,12 +0,0 @@ -InvalidConfigError | firewalk

Class InvalidConfigError

An error thrown when an invalid configuration is provided.

-

Hierarchy

  • Error
    • InvalidConfigError

Constructors

Properties

message: string
name: string
stack?: string
prepareStackTrace?: ((err, stackTraces) => any)

Type declaration

stackTraceLimit: number

Methods

  • Create .stack property on a target object

    -

    Parameters

    • targetObject: object
    • Optional constructorOpt: Function

    Returns void

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/functions/createBatchMigrator.html b/docs/v1/functions/createBatchMigrator.html deleted file mode 100644 index fb57f95..0000000 --- a/docs/v1/functions/createBatchMigrator.html +++ /dev/null @@ -1,18 +0,0 @@ -createBatchMigrator | firewalk

Function createBatchMigrator

  • Creates a migrator that facilitates database migrations. Accepts a custom traverser object as argument which the -migrator will use when traversing the collection and writing to documents. This migrator uses atomic batch writes -when writing to docs so the entire operation will fail if a single write isn't successful.

    -

    Type Parameters

    • D = DocumentData

    Parameters

    • traverser: Traverser<D>

      The traverser object that this migrator will use when traversing the collection and writing to documents.

      -

    Returns BatchMigrator<D>

    A new BatchMigrator object.

    -

    Remarks

    Note that the TraversalConfig.batchSize config value must not exceed 500 for a traverser used in a BatchMigrator. -This is because in Firestore, each write batch can write to a maximum of 500 documents.

    -

    Throws

    InvalidConfigError Thrown if the traversal config of the specified traverser is not compatible with this migrator.

    -
  • Creates a migrator that facilitates database migrations. The migrator creates a default traverser that -it uses when traversing the collection and writing to documents. This migrator uses atomic batch writes when writing -to docs so the entire operation will fail if a single write isn't successful.

    -

    Type Parameters

    • D = DocumentData

    Parameters

    • traversable: Traversable<D>

      A collection-like traversable group of documents.

      -
    • Optional traversalConfig: Partial<TraversalConfig>

      Optional. The traversal configuration with which the default traverser will be created.

      -

    Returns BatchMigrator<D>

    A new BatchMigrator object.

    -

    Remarks

    Note that the TraversalConfig.batchSize config value must not exceed 500 for a traverser used in a BatchMigrator. -This is because in Firestore, each write batch can write to a maximum of 500 documents.

    -

    Throws

    InvalidConfigError Thrown if the specified traversalConfig is invalid or incompatible with this migrator.

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/functions/createMigrator.html b/docs/v1/functions/createMigrator.html deleted file mode 100644 index 6d2cbbd..0000000 --- a/docs/v1/functions/createMigrator.html +++ /dev/null @@ -1,13 +0,0 @@ -createMigrator | firewalk

Function createMigrator

  • Creates a migrator that facilitates database migrations. Accepts a custom traverser object as argument which the -migrator will use when traversing the collection and writing to documents. This migrator does not use atomic batch -writes so it is possible that when a write fails other writes go through.

    -

    Type Parameters

    • D = DocumentData

    Parameters

    • traverser: Traverser<D>

      The traverser object that this migrator will use when traversing the collection and writing to documents.

      -

    Returns DefaultMigrator<D>

    A new DefaultMigrator object.

    -
  • Creates a migrator that facilitates database migrations. The migrator creates a default traverser that -it uses when traversing the collection and writing to documents. This migrator does not use atomic batch writes -so it is possible that when a write fails other writes go through.

    -

    Type Parameters

    • D = DocumentData

    Parameters

    • traversable: Traversable<D>

      A collection-like traversable group of documents to migrate.

      -
    • Optional traversalConfig: Partial<TraversalConfig>

      Optional. The traversal configuration with which the default traverser will be created.

      -

    Returns DefaultMigrator<D>

    A new DefaultMigrator object.

    -

    Throws

    InvalidConfigError Thrown if the specified traversalConfig is invalid.

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/functions/createTraverser.html b/docs/v1/functions/createTraverser.html deleted file mode 100644 index 5b0bad2..0000000 --- a/docs/v1/functions/createTraverser.html +++ /dev/null @@ -1,13 +0,0 @@ -createTraverser | firewalk

Function createTraverser

  • Creates an object which can be used to traverse a Firestore collection or, more generally, -a Traversable.

    -

    Type Parameters

    • D = DocumentData

    Parameters

    Returns Traverser<D>

    A new Traverser object.

    -

    Remarks

    For each batch of document snapshots in the traversable, this traverser invokes a specified -async callback and immediately moves to the next batch. It does not wait for the callback -Promise to resolve before moving to the next batch. That is, when maxConcurrentBatchCount > 1, -there is no guarantee that any given batch will finish processing before a later batch.

    -

    The traverser becomes faster as you increase maxConcurrentBatchCount, but this will consume -more memory. You should increase concurrency when you want to trade some memory for speed.

    -

    Throws

    InvalidConfigError Thrown if the specified config is invalid.

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/index.html b/docs/v1/index.html deleted file mode 100644 index 43d87bf..0000000 --- a/docs/v1/index.html +++ /dev/null @@ -1,126 +0,0 @@ -firewalk

firewalk

- - Firewalk - -

- -

- A light, fast, and memory-efficient collection traversal library for Firestore and Node.js. Built by Proficient AI. -

- -
-

- - Firewalk is released under the MIT license. - - - - - - - - - - PRs welcome! -

- -

Firewalk is a Node.js library that walks you through Firestore collections.

-

When you have millions of documents in a collection and you need to make changes to them or just read them, you can't just retrieve all of them at once as your program's memory usage will explode. Firewalk's configurable traverser objects let you do this in a simple, intuitive and memory-efficient way using batch processing with concurrency control.

-

Firewalk is an extremely light and well-typed library that is useful in a variety of scenarios. You can use it in database migration scripts (e.g. when you need to add a new field to all docs) or a scheduled Cloud Function that needs to check every doc in a collection periodically or even a locally run script that retrieves some data from a collection.

-

Note: This library was previously known as Firecode. We're currently in the process of porting over the documentation from the -previous site.

-

Firewalk on Google Dev Library â–¸

-

Read the introductory blog post â–¸

-

View the full documentation (docs) â–¸

-

Overview

    -
  1. Installation
  2. -
  3. Core Concepts
  4. -
  5. Quick Start
  6. -
  7. More Examples
  8. -
  9. API
  10. -
  11. Upgrading
  12. -
  13. License
  14. -
-

Installation

Firewalk is designed to work with the Firebase Admin SDK so if you haven't already installed it, run

-
# npm
npm install firebase-admin

# yarn
yarn add firebase-admin -
-

Then run

-
# npm
npm install -E firewalk

# yarn
yarn add -E firewalk -
-

Core Concepts

There are only 2 kinds of objects you need to be familiar with when using this library:

-
    -
  1. Traverser: An object that walks you through a collection of documents (or more generally a Traversable).

    -
  2. -
  3. Migrator: A convenience object used for database migrations. It lets you easily write to the documents within a given traversable and uses a traverser to do that. You can easily write your own migration logic in the traverser callback if you don't want to use a migrator.

    -
  4. -
-

Quick Start

Suppose we have a users collection and we want to send an email to each user. This is how easy it is to do that efficiently with a Firewalk traverser:

-
import { value firestore } from 'firebase-admin';
import { value createTraverser } from 'firewalk';

const usersCollection = firestore().collection('users');
const traverser = createTraverser(usersCollection);

const { batchCount, docCount } = await traverser.traverse(async (batchDocs, batchIndex) => {
const batchSize = batchDocs.length;
await Promise.all(
batchDocs.map(async (doc) => {
const { email, firstName } = doc.data();
await sendEmail({ to: email, content: `Hello ${firstName}!` });
})
);
console.log(`Batch ${batchIndex} done! We emailed ${batchSize} users in this batch.`);
});

console.log(`Traversal done! We emailed ${docCount} users in ${batchCount} batches!`); -
-

We are doing 3 things here:

-
    -
  1. Create a reference to the users collection
  2. -
  3. Pass that reference to the createTraverser() function
  4. -
  5. Invoke .traverse() with an async callback that is called for each batch of document snapshots
  6. -
-

This pretty much sums up the core functionality of this library! The .traverse() method returns a Promise that resolves when the entire traversal finishes, which can take a while if you have millions of docs. The Promise resolves with an object containing the traversal details e.g. the number of docs you touched.

-

More Examples

Traverse faster by increasing concurrency

const projectsColRef = firestore().collection('projects');
const traverser = createTraverser(projectsColRef, {
batchSize: 500,
// This means we are prepared to hold 500 * 20 = 10,000 docs in memory.
// We sacrifice some memory to traverse faster.
maxConcurrentBatchCount: 20,
});
const { docCount } = await traverser.traverse(async (_, batchIndex) => {
console.log(`Gonna process batch ${batchIndex} now!`);
// ...
});
console.log(`Traversed ${docCount} projects super-fast!`); -
-

Add a new field using a migrator

const projectsColRef = firestore().collection('projects');
const migrator = createMigrator(projectsColRef);
const { migratedDocCount } = await migrator.update('isCompleted', false);
console.log(`Updated ${migratedDocCount} projects!`); -
-

Add a new field derived from the previous fields

type UserDoc = {
firstName: string;
lastName: string;
};
const usersColRef = firestore().collection('users') as firestore.CollectionReference<UserDoc>;
const migrator = createMigrator(usersColRef);
const { migratedDocCount } = await migrator.updateWithDerivedData((snap) => {
const { firstName, lastName } = snap.data();
return {
fullName: `${firstName} ${lastName}`,
};
});
console.log(`Updated ${migratedDocCount} users!`); -
-

Migrate faster by increasing concurrency

const projectsColRef = firestore().collection('projects');
const migrator = createMigrator(projectsColRef, { maxConcurrentBatchCount: 25 });
const { migratedDocCount } = await migrator.update('isCompleted', false);
console.log(`Updated ${migratedDocCount} projects super-fast!`); -
-

Change traversal config

const walletsWithNegativeBalance = firestore().collection('wallets').where('money', '<', 0);
const migrator = createMigrator(walletsWithNegativeBalance, {
// We want each batch to have 500 docs. The size of the very last batch may be less than 500
batchSize: 500,
// We want to wait 500ms before moving to the next batch
sleepTimeBetweenBatches: 500,
});
// Wipe out their debts!
const { migratedDocCount } = await migrator.set({ money: 0 });
console.log(`Set ${migratedDocCount} wallets!`); -
-

Rename a field

const postsColGroup = firestore().collectionGroup('posts');
const migrator = createMigrator(postsColGroup);
const { migratedDocCount } = await migrator.renameField('postedAt', 'publishedAt');
console.log(`Updated ${migratedDocCount} posts!`); -
-

API

You can find the full API reference for firewalk here. We maintain detailed docs for every version! Here are some of the core functions that this library provides.

-

createTraverser

Creates an object which can be used to traverse a Firestore collection or, more generally, a Traversable.

-

For each batch of document snapshots in the traversable, the traverser invokes a specified async callback and immediately moves to the next batch. It does not wait for the callback Promise to resolve before moving to the next batch. That is, when maxConcurrentBatchCount > 1, there is no guarantee that any given batch will finish processing before a later batch.

-

The traverser becomes faster as you increase maxConcurrentBatchCount, but this will consume more memory. You should increase concurrency when you want to trade some memory for speed.

-

Complexity:

    -
  • Time complexity: O((N / batchSize) * (Q(batchSize) + C(batchSize) / maxConcurrentBatchCount))
  • -
  • Space complexity: O(maxConcurrentBatchCount * (batchSize * D + S))
  • -
  • Billing: max(1, N) reads
  • -
-

where:

-
    -
  • N: number of docs in the traversable
  • -
  • Q(batchSize): average batch query time
  • -
  • C(batchSize): average callback processing time
  • -
  • D: average document size
  • -
  • S: average extra space used by the callback
  • -
-

createMigrator

Creates a migrator that facilitates database migrations. The migrator accepts a custom traverser to traverse the collection. Otherwise it will create a default traverser with your desired traversal config. This migrator does not use atomic batch writes so it is possible that when a write fails other writes go through.

-

Complexity:

    -
  • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
  • -
  • Space complexity: SC(traverser) where S = O(batchSize)
  • -
  • Billing: max(1, N) reads, K writes
  • -
-

where:

-
    -
  • N: number of docs in the traversable
  • -
  • K: number of docs that passed the migration predicate (K<=N)
  • -
  • W(batchSize): average batch write time
  • -
  • TC(traverser): time complexity of the underlying traverser
  • -
  • SC(traverser): space complexity of the underlying traverser
  • -
-

createBatchMigrator

Creates a migrator that facilitates database migrations. The migrator accepts a custom traverser to traverse the collection. Otherwise it will create a default traverser with your desired traversal config. This migrator uses atomic batch writes so the entire operation will fail if a single write isn't successful.

-

Complexity:

    -
  • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
  • -
  • Space complexity: SC(traverser) where S = O(batchSize)
  • -
  • Billing: max(1, N) reads, K writes
  • -
-

where:

-
    -
  • N: number of docs in the traversable
  • -
  • K: number of docs that passed the migration predicate (K<=N)
  • -
  • W(batchSize): average batch write time
  • -
  • TC(traverser): time complexity of the underlying traverser
  • -
  • SC(traverser): space complexity of the underlying traverser
  • -
-

Upgrading

This project is still very new and we have a lot to work on. We will be moving fast and until we release v1, there may be breaking changes between minor versions (e.g. when upgrading from 0.4 to 0.5). However, all breaking changes will be documented and you can always use our Releases page as a changelog.

-

License

This project is made available under the MIT License.

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/interfaces/BatchMigrator.html b/docs/v1/interfaces/BatchMigrator.html deleted file mode 100644 index 3fabab0..0000000 --- a/docs/v1/interfaces/BatchMigrator.html +++ /dev/null @@ -1,256 +0,0 @@ -BatchMigrator | firewalk

Interface BatchMigrator<D>

A batch migrator object that uses atomic batch writes.

-
interface BatchMigrator {
    traverser: Traverser<D>;
    deleteField(field): Promise<MigrationResult>;
    deleteFields(...fields): Promise<MigrationResult>;
    onAfterBatchComplete(callback): void;
    onBeforeBatchStart(callback): void;
    renameField(oldField, newField): Promise<MigrationResult>;
    renameFields(...changes): Promise<MigrationResult>;
    set(data): Promise<MigrationResult>;
    set(data, options): Promise<MigrationResult>;
    setWithDerivedData(getData): Promise<MigrationResult>;
    setWithDerivedData(getData, options): Promise<MigrationResult>;
    update(data, precondition?): Promise<MigrationResult>;
    update(field, value, ...moreFieldsOrPrecondition): Promise<MigrationResult>;
    updateWithDerivedData(getData, precondition?): Promise<MigrationResult>;
    updateWithDerivedData(getData): Promise<MigrationResult>;
    withPredicate(predicate): BatchMigrator<D>;
    withTraverser(traverser): BatchMigrator<D>;
}

Type Parameters

  • D = firestore.DocumentData

Hierarchy

Properties

traverser: Traverser<D>

The underlying traverser.

-

Methods

  • Deletes the specified field from all documents in this collection.

    -

    Parameters

    • field: string | FieldPath

      The field to delete.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Deletes the specified fields from all documents in this collection.

    -

    Parameters

    • Rest ...fields: (string | FieldPath)[]

      A list of fields to delete.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -

    Example

    const field1 = new firestore.FieldPath('name', 'last');
    const field2 = 'lastModifiedAt';
    await migrator.deleteFields(field1, field2); -
    -
  • Registers a callback function that fires after a batch is processed. You can register at most 1 callback. If you call -this function multiple times, only the last callback will be registered.

    -

    Parameters

    • callback: BatchCallback<D>

      A synchronous callback that takes batch doc snapshots and the 0-based batch index as its arguments.

      -

    Returns void

  • Registers a callback function that fires right before a batch starts processing. You can register at most 1 -callback. If you call this function multiple times, only the last callback will be registered.

    -

    Parameters

    • callback: BatchCallback<D>

      A synchronous callback that takes batch doc snapshots and the 0-based batch index as its arguments.

      -

    Returns void

  • Renames the specified field in all documents in this collection. Ignores the fields that are missing.

    -

    Parameters

    • oldField: string | FieldPath

      The old field.

      -
    • newField: string | FieldPath

      The new field.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Renames the specified fields in all documents in this collection. Ignores the fields that are missing.

    -

    Parameters

    • Rest ...changes: [oldField: string | FieldPath, newField: string | FieldPath][]

      A list of [oldField, newField] tuples. Each tuple is an array of 2 elements: -the old field to rename and the new field.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -

    Example

    const change1 = [new firestore.FieldPath('name', 'last'), 'lastName'];
    const change2 = ['lastModifiedAt', 'lastUpdatedAt'];
    await migrator.renameFields(change1, change2); -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • data: D

      A data object with which to set each document.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • data: Partial<D>

      A data object with which to set each document.

      -
    • options: SetOptions

      An object to configure the set behavior.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • getData: SetDataGetter<D>

      A function that takes a document snapshot and returns a data object with -which to set each document.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • getData: SetDataGetter<Partial<D>>

      A function that takes a document snapshot and returns a data object with -which to set each document.

      -
    • options: SetOptions

      An object to configure the set behavior.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • data: UpdateData

      A non-empty data object with which to update each document.

      -
    • Optional precondition: Precondition

      A Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided field-value pair.

    -

    Parameters

    • field: string | FieldPath

      The first field to update in each document.

      -
    • value: any

      The first value corresponding to the first field. Must not be undefined.

      -
    • Rest ...moreFieldsOrPrecondition: any[]

      An alternating list of field paths and values to update, -optionally followed by a Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • getData: UpdateDataGetter<D>

      A function that takes a document snapshot and returns a non-empty data object with -which to update each document.

      -
    • Optional precondition: Precondition

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • getData: UpdateFieldValueGetter<D>

      A function that takes a document snapshot and returns an alternating list of field -paths and values to update, optionally followed by a Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Applies a migration predicate that indicates whether to migrate the current document or not. By default, all -documents are migrated.

    -

    Parameters

    • predicate: MigrationPredicate<D>

      A function that takes a document snapshot and returns a boolean indicating whether to migrate it.

      -

    Returns BatchMigrator<D>

    A new BatchMigrator object.

    -

    Remarks

    If you have already applied other migration predicates to this migrator, this and all the other predicates will be -evaluated and the resulting booleans will be AND'd to get the boolean that indicates whether to migrate the document -or not. This is consistent with the intuitive default behavior that all documents are migrated.

    -

    Example

    const newMigrator = migrator
    .withPredicate((doc) => doc.get('name') !== undefined)
    .withPredicate((doc) => doc.ref.path.startsWith('users/')); -
    -

    In the above case newMigrator will migrate only the documents whose name field is not missing AND whose path -starts with "users/".

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/interfaces/DefaultMigrator.html b/docs/v1/interfaces/DefaultMigrator.html deleted file mode 100644 index 0d9d92b..0000000 --- a/docs/v1/interfaces/DefaultMigrator.html +++ /dev/null @@ -1,256 +0,0 @@ -DefaultMigrator | firewalk

Interface DefaultMigrator<D>

A batch migrator object that does not use atomic batch writes.

-
interface DefaultMigrator {
    traverser: Traverser<D>;
    deleteField(field): Promise<MigrationResult>;
    deleteFields(...fields): Promise<MigrationResult>;
    onAfterBatchComplete(callback): void;
    onBeforeBatchStart(callback): void;
    renameField(oldField, newField): Promise<MigrationResult>;
    renameFields(...changes): Promise<MigrationResult>;
    set(data): Promise<MigrationResult>;
    set(data, options): Promise<MigrationResult>;
    setWithDerivedData(getData): Promise<MigrationResult>;
    setWithDerivedData(getData, options): Promise<MigrationResult>;
    update(data, precondition?): Promise<MigrationResult>;
    update(field, value, ...moreFieldsOrPrecondition): Promise<MigrationResult>;
    updateWithDerivedData(getData, precondition?): Promise<MigrationResult>;
    updateWithDerivedData(getData): Promise<MigrationResult>;
    withPredicate(predicate): DefaultMigrator<D>;
    withTraverser(traverser): DefaultMigrator<D>;
}

Type Parameters

  • D = firestore.DocumentData

Hierarchy

Properties

traverser: Traverser<D>

The underlying traverser.

-

Methods

  • Deletes the specified field from all documents in this collection.

    -

    Parameters

    • field: string | FieldPath

      The field to delete.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Deletes the specified fields from all documents in this collection.

    -

    Parameters

    • Rest ...fields: (string | FieldPath)[]

      A list of fields to delete.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -

    Example

    const field1 = new firestore.FieldPath('name', 'last');
    const field2 = 'lastModifiedAt';
    await migrator.deleteFields(field1, field2); -
    -
  • Registers a callback function that fires after a batch is processed. You can register at most 1 callback. If you call -this function multiple times, only the last callback will be registered.

    -

    Parameters

    • callback: BatchCallback<D>

      A synchronous callback that takes batch doc snapshots and the 0-based batch index as its arguments.

      -

    Returns void

  • Registers a callback function that fires right before a batch starts processing. You can register at most 1 -callback. If you call this function multiple times, only the last callback will be registered.

    -

    Parameters

    • callback: BatchCallback<D>

      A synchronous callback that takes batch doc snapshots and the 0-based batch index as its arguments.

      -

    Returns void

  • Renames the specified field in all documents in this collection. Ignores the fields that are missing.

    -

    Parameters

    • oldField: string | FieldPath

      The old field.

      -
    • newField: string | FieldPath

      The new field.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Renames the specified fields in all documents in this collection. Ignores the fields that are missing.

    -

    Parameters

    • Rest ...changes: [oldField: string | FieldPath, newField: string | FieldPath][]

      A list of [oldField, newField] tuples. Each tuple is an array of 2 elements: -the old field to rename and the new field.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -

    Example

    const change1 = [new firestore.FieldPath('name', 'last'), 'lastName'];
    const change2 = ['lastModifiedAt', 'lastUpdatedAt'];
    await migrator.renameFields(change1, change2); -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • data: D

      A data object with which to set each document.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • data: Partial<D>

      A data object with which to set each document.

      -
    • options: SetOptions

      An object to configure the set behavior.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • getData: SetDataGetter<D>

      A function that takes a document snapshot and returns a data object with -which to set each document.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • getData: SetDataGetter<Partial<D>>

      A function that takes a document snapshot and returns a data object with -which to set each document.

      -
    • options: SetOptions

      An object to configure the set behavior.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • data: UpdateData

      A non-empty data object with which to update each document.

      -
    • Optional precondition: Precondition

      A Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided field-value pair.

    -

    Parameters

    • field: string | FieldPath

      The first field to update in each document.

      -
    • value: any

      The first value corresponding to the first field. Must not be undefined.

      -
    • Rest ...moreFieldsOrPrecondition: any[]

      An alternating list of field paths and values to update, -optionally followed by a Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • getData: UpdateDataGetter<D>

      A function that takes a document snapshot and returns a non-empty data object with -which to update each document.

      -
    • Optional precondition: Precondition

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • getData: UpdateFieldValueGetter<D>

      A function that takes a document snapshot and returns an alternating list of field -paths and values to update, optionally followed by a Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Applies a migration predicate that indicates whether to migrate the current document or not. By default, all -documents are migrated.

    -

    Parameters

    • predicate: MigrationPredicate<D>

      A function that takes a document snapshot and returns a boolean indicating whether to migrate it.

      -

    Returns DefaultMigrator<D>

    A new DefaultMigrator object.

    -

    Remarks

    If you have already applied other migration predicates to this migrator, this and all the other predicates will be -evaluated and the resulting booleans will be AND'd to get the boolean that indicates whether to migrate the document -or not. This is consistent with the intuitive default behavior that all documents are migrated.

    -

    Example

    const newMigrator = migrator
    .withPredicate((doc) => doc.get('name') !== undefined)
    .withPredicate((doc) => doc.ref.path.startsWith('users/')); -
    -

    In the above case newMigrator will migrate only the documents whose name field is not missing AND whose path -starts with "users/".

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/interfaces/MigrationResult.html b/docs/v1/interfaces/MigrationResult.html deleted file mode 100644 index bbd0a99..0000000 --- a/docs/v1/interfaces/MigrationResult.html +++ /dev/null @@ -1,6 +0,0 @@ -MigrationResult | firewalk

Interface MigrationResult

Represents an object that contains the details of a migration.

-
interface MigrationResult {
    migratedDocCount: number;
    traversalResult: TraversalResult;
}

Properties

migratedDocCount: number

The number of documents that have been migrated.

-
traversalResult: TraversalResult

The traversal result of the underlying traverser.

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/interfaces/Migrator.html b/docs/v1/interfaces/Migrator.html deleted file mode 100644 index 82b4902..0000000 --- a/docs/v1/interfaces/Migrator.html +++ /dev/null @@ -1,256 +0,0 @@ -Migrator | firewalk

Interface Migrator<D>

Represents the general interface of a migrator.

-
interface Migrator {
    traverser: Traverser<D>;
    deleteField(field): Promise<MigrationResult>;
    deleteFields(...fields): Promise<MigrationResult>;
    onAfterBatchComplete(callback): void;
    onBeforeBatchStart(callback): void;
    renameField(oldField, newField): Promise<MigrationResult>;
    renameFields(...changes): Promise<MigrationResult>;
    set(data): Promise<MigrationResult>;
    set(data, options): Promise<MigrationResult>;
    setWithDerivedData(getData): Promise<MigrationResult>;
    setWithDerivedData(getData, options): Promise<MigrationResult>;
    update(data, precondition?): Promise<MigrationResult>;
    update(field, value, ...moreFieldsOrPrecondition): Promise<MigrationResult>;
    updateWithDerivedData(getData, precondition?): Promise<MigrationResult>;
    updateWithDerivedData(getData): Promise<MigrationResult>;
    withPredicate(predicate): Migrator<D>;
    withTraverser(traverser): Migrator<D>;
}

Type Parameters

  • D = firestore.DocumentData

Hierarchy

Properties

traverser: Traverser<D>

The underlying traverser.

-

Methods

  • Deletes the specified field from all documents in this collection.

    -

    Parameters

    • field: string | FieldPath

      The field to delete.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Deletes the specified fields from all documents in this collection.

    -

    Parameters

    • Rest ...fields: (string | FieldPath)[]

      A list of fields to delete.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -

    Example

    const field1 = new firestore.FieldPath('name', 'last');
    const field2 = 'lastModifiedAt';
    await migrator.deleteFields(field1, field2); -
    -
  • Registers a callback function that fires after a batch is processed. You can register at most 1 callback. If you call -this function multiple times, only the last callback will be registered.

    -

    Parameters

    • callback: BatchCallback<D>

      A synchronous callback that takes batch doc snapshots and the 0-based batch index as its arguments.

      -

    Returns void

  • Registers a callback function that fires right before a batch starts processing. You can register at most 1 -callback. If you call this function multiple times, only the last callback will be registered.

    -

    Parameters

    • callback: BatchCallback<D>

      A synchronous callback that takes batch doc snapshots and the 0-based batch index as its arguments.

      -

    Returns void

  • Renames the specified field in all documents in this collection. Ignores the fields that are missing.

    -

    Parameters

    • oldField: string | FieldPath

      The old field.

      -
    • newField: string | FieldPath

      The new field.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Renames the specified fields in all documents in this collection. Ignores the fields that are missing.

    -

    Parameters

    • Rest ...changes: [oldField: string | FieldPath, newField: string | FieldPath][]

      A list of [oldField, newField] tuples. Each tuple is an array of 2 elements: -the old field to rename and the new field.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -

    Example

    const change1 = [new firestore.FieldPath('name', 'last'), 'lastName'];
    const change2 = ['lastModifiedAt', 'lastUpdatedAt'];
    await migrator.renameFields(change1, change2); -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • data: D

      A data object with which to set each document.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • data: Partial<D>

      A data object with which to set each document.

      -
    • options: SetOptions

      An object to configure the set behavior.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • getData: SetDataGetter<D>

      A function that takes a document snapshot and returns a data object with -which to set each document.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • getData: SetDataGetter<Partial<D>>

      A function that takes a document snapshot and returns a data object with -which to set each document.

      -
    • options: SetOptions

      An object to configure the set behavior.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • data: UpdateData

      A non-empty data object with which to update each document.

      -
    • Optional precondition: Precondition

      A Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided field-value pair.

    -

    Parameters

    • field: string | FieldPath

      The first field to update in each document.

      -
    • value: any

      The first value corresponding to the first field. Must not be undefined.

      -
    • Rest ...moreFieldsOrPrecondition: any[]

      An alternating list of field paths and values to update, -optionally followed by a Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • getData: UpdateDataGetter<D>

      A function that takes a document snapshot and returns a non-empty data object with -which to update each document.

      -
    • Optional precondition: Precondition

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • getData: UpdateFieldValueGetter<D>

      A function that takes a document snapshot and returns an alternating list of field -paths and values to update, optionally followed by a Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Applies a migration predicate that indicates whether to migrate the current document or not. By default, all -documents are migrated.

    -

    Parameters

    • predicate: MigrationPredicate<D>

      A function that takes a document snapshot and returns a boolean indicating whether to migrate it.

      -

    Returns Migrator<D>

    A new Migrator object.

    -

    Remarks

    If you have already applied other migration predicates to this migrator, this and all the other predicates will be -evaluated and the resulting booleans will be AND'd to get the boolean that indicates whether to migrate the document -or not. This is consistent with the intuitive default behavior that all documents are migrated.

    -

    Example

    const newMigrator = migrator
    .withPredicate((doc) => doc.get('name') !== undefined)
    .withPredicate((doc) => doc.ref.path.startsWith('users/')); -
    -

    In the above case newMigrator will migrate only the documents whose name field is not missing AND whose path -starts with "users/".

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/interfaces/SetOptions.html b/docs/v1/interfaces/SetOptions.html deleted file mode 100644 index 402e07a..0000000 --- a/docs/v1/interfaces/SetOptions.html +++ /dev/null @@ -1,15 +0,0 @@ -SetOptions | firewalk

Interface SetOptions

An options object that configures the behavior of set() calls in -DocumentReference, WriteBatch and Transaction. These calls can be -configured to perform granular merges instead of overwriting the target -documents in their entirety.

-
interface SetOptions {
    merge?: boolean;
    mergeFields?: (string | FieldPath)[];
}

Properties

Properties

merge?: boolean

Changes the behavior of a set() call to only replace the values specified -in its data argument. Fields omitted from the set() call remain -untouched.

-
mergeFields?: (string | FieldPath)[]

Changes the behavior of set() calls to only replace the specified field -paths. Any field path that is not specified is ignored and remains -untouched.

-

It is an error to pass a SetOptions object to a set() call that is -missing a value for any of the fields specified here.

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/interfaces/TraversalConfig.html b/docs/v1/interfaces/TraversalConfig.html deleted file mode 100644 index 4c20936..0000000 --- a/docs/v1/interfaces/TraversalConfig.html +++ /dev/null @@ -1,42 +0,0 @@ -TraversalConfig | firewalk

Interface TraversalConfig

The configuration with which a traverser is created.

-
interface TraversalConfig {
    batchSize: number;
    maxBatchRetryCount: number;
    maxConcurrentBatchCount: number;
    maxDocCount: number;
    sleepTimeBetweenBatches: number;
    sleepTimeBetweenTrials: number | ((lastTrialIndex) => number);
}

Properties

batchSize: number

The number of documents that will be traversed in each batch.

-

Default Value

250
-
-
maxBatchRetryCount: number

The maximum number of times the traverser will retry processing a given batch, in case of an error. -By default, batches are not retried.

-

Remarks

This field must be a non-negative integer representing the maximum number of times the traverser will -retry processing a given batch. By default, the traverser invokes the batch callback only once i.e. -with 0 retries but, if maxBatchRetryCount > 0, it will keep invoking the callback until it succeeds -or the total number of retries reaches maxBatchRetryCount.

-

Default Value

0
-
-
maxConcurrentBatchCount: number

The maximum number of batches that can be held in memory and processed concurrently.

-

Remarks

This field must be a positive integer representing the maximum number of batches that you wish -the traverser to process concurrently at any given time. The traverser will pause when the number -of batches being processed concurrently reaches this number and continue when a batch has been -processed. This means that the higher the value of maxConcurrentBatchCount, the more memory the -traverser will consume but also the faster it will finish the traversal.

-

Example

const projectsColRef = firestore().collection('projects');
const traverser = createTraverser(projectsColRef, {
batchSize: 500,
maxConcurrentBatchCount: 20,
}); -
-

By providing this config we have indicated that we want each batch to contain 500 documents and the -traverser to process 20 batches concurrently at any given time. This means we have ensured that our -machine can handle 500 * 20 = 10,000 documents in memory at any given time.

-

Default Value

1
-
-
maxDocCount: number

The maximum number of documents that will be traversed.

-

Default Value

Infinity

-
sleepTimeBetweenBatches: number

The amount of time (in ms) to "sleep" before moving on to the next batch.

-

Default Value

0
-
-
sleepTimeBetweenTrials: number | ((lastTrialIndex) => number)

A non-negative integer or a function that takes the 0-based index of the last trial and returns a -non-negative integer indicating the amount of time (in ms) to "sleep" before retrying processing -the current batch. This is useful if you want to implement something like exponential backoff.

-

Type declaration

    • (lastTrialIndex): number
    • Parameters

      • lastTrialIndex: number

      Returns number

Default Value

1000
-
-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/interfaces/TraversalResult.html b/docs/v1/interfaces/TraversalResult.html deleted file mode 100644 index 2854a70..0000000 --- a/docs/v1/interfaces/TraversalResult.html +++ /dev/null @@ -1,6 +0,0 @@ -TraversalResult | firewalk

Interface TraversalResult

Represents an object that contains the details of a traversal.

-
interface TraversalResult {
    batchCount: number;
    docCount: number;
}

Properties

Properties

batchCount: number

The number of batches that have been retrieved in this traversal.

-
docCount: number

The number of documents that have been retrieved in this traversal.

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/interfaces/TraverseEachConfig.html b/docs/v1/interfaces/TraverseEachConfig.html deleted file mode 100644 index 19fe8c0..0000000 --- a/docs/v1/interfaces/TraverseEachConfig.html +++ /dev/null @@ -1,6 +0,0 @@ -TraverseEachConfig | firewalk

Interface TraverseEachConfig

The configuration that a given traverser uses in sequential traversals.

-
interface TraverseEachConfig {
    sleepTimeBetweenDocs: number;
}

Properties

sleepTimeBetweenDocs: number

The amount of time (in ms) to "sleep" before moving to the next doc.

-

Default Value

0
-
-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/interfaces/Traverser.html b/docs/v1/interfaces/Traverser.html deleted file mode 100644 index 8b5cfc7..0000000 --- a/docs/v1/interfaces/Traverser.html +++ /dev/null @@ -1,55 +0,0 @@ -Traverser | firewalk

Interface Traverser<D>

A traverser object that facilitates Firestore collection traversals.

-
interface Traverser {
    traversable: Traversable<D>;
    traversalConfig: TraversalConfig;
    traverse(callback): Promise<TraversalResult>;
    traverseEach(callback, config?): Promise<TraversalResult>;
    withConfig(config): Traverser<D>;
    withExitEarlyPredicate(predicate): Traverser<D>;
}

Type Parameters

  • D = firestore.DocumentData

Properties

traversable: Traversable<D>

The underlying traversable.

-
traversalConfig: TraversalConfig

Existing traversal config.

-

Methods

  • Traverses the entire collection in batches of the size specified in traversal config. Invokes the specified -async callback for each batch of document snapshots and immediately moves to the next batch. Does not wait -for the callback Promise to resolve before moving to the next batch so there is no guarantee that any given -batch will finish processing before a later batch.

    -

    Parameters

    • callback: BatchCallback<D>

      An asynchronous callback function to invoke for each batch of document snapshots.

      -

    Returns Promise<TraversalResult>

    A Promise resolving to an object representing the details of the traversal.

    -

    Remarks

    This method throws only when the batch callback throws and the number of retries equals maxBatchRetryCount. -The last error thrown by the batch callback propagates up to this method.

    -

    Complexity:

    -
      -
    • Time complexity: O((N / batchSize) * (Q(batchSize) + C(batchSize) / maxConcurrentBatchCount))
    • -
    • Space complexity: O(maxConcurrentBatchCount * (batchSize * D + S))
    • -
    • Billing: max(1, N) reads
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • Q(batchSize): average batch query time
    • -
    • C(batchSize): average callback processing time
    • -
    • D: average document size
    • -
    • S: average extra space used by the callback
    • -
    -
  • Traverses the entire collection in batches of the size specified in traversal config. Invokes the specified -callback sequentially for each document snapshot in each batch.

    -

    Parameters

    • callback: TraverseEachCallback<D>

      An asynchronous callback function to invoke for each document snapshot in each batch.

      -
    • Optional config: Partial<TraverseEachConfig>

      The sequential traversal configuration.

      -

    Returns Promise<TraversalResult>

    A Promise resolving to an object representing the details of the traversal. The Promise resolves -when the entire traversal ends.

    -
  • Applies the specified exit-early predicate to the traverser. After retrieving each batch, the traverser -will evaluate the predicate with the current batch doc snapshots and batch index and decide whether to -continue the traversal or exit early.

    -

    Parameters

    • predicate: ExitEarlyPredicate<D>

      A synchronous function that takes batch doc snapshots and the 0-based batch index and -returns a boolean indicating whether to exit traversal early.

      -

    Returns Traverser<D>

    A new Traverser object.

    -

    Remarks

    If you have already applied other exit-early predicates to this traverser, this and all the other predicates -will be evaluated and the resulting booleans will be OR'd to get the boolean that indicates whether to exit -early or not. This is consistent with the intuitive default behavior that the traverser doesn't exit early.

    -

    Example

    const newTraverser = traverser
    .withExitEarlyPredicate((batchDocs) => batchDocs.some((d) => d.get('name') === undefined))
    .withExitEarlyPredicate((_, batchIndex) => batchIndex === 99); -
    -

    In the above case newTraverser will exit early if the name field of one of the docs in the batch is -missing OR if the batch index is 99. That is, it will never reach batch 100 and depending on the documents -in the database it may exit earlier than 99.

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/modules.html b/docs/v1/modules.html deleted file mode 100644 index c21f159..0000000 --- a/docs/v1/modules.html +++ /dev/null @@ -1,23 +0,0 @@ -firewalk

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/types/BatchCallback.html b/docs/v1/types/BatchCallback.html deleted file mode 100644 index 610a1f1..0000000 --- a/docs/v1/types/BatchCallback.html +++ /dev/null @@ -1,2 +0,0 @@ -BatchCallback | firewalk

Type alias BatchCallback<D>

BatchCallback<D>: ((batchDocs, batchIndex) => void | Promise<void>)

Type Parameters

  • D = firestore.DocumentData

Type declaration

    • (batchDocs, batchIndex): void | Promise<void>
    • A function that takes batch doc snapshots and the 0-based batch index as its arguments.

      -

      Parameters

      • batchDocs: firestore.QueryDocumentSnapshot<D>[]
      • batchIndex: number

      Returns void | Promise<void>

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/types/ExitEarlyPredicate.html b/docs/v1/types/ExitEarlyPredicate.html deleted file mode 100644 index 8549012..0000000 --- a/docs/v1/types/ExitEarlyPredicate.html +++ /dev/null @@ -1,3 +0,0 @@ -ExitEarlyPredicate | firewalk

Type alias ExitEarlyPredicate<D>

ExitEarlyPredicate<D>: ((...args) => boolean)

Type Parameters

  • D = firestore.DocumentData

Type declaration

    • (...args): boolean
    • A function that takes batch doc snapshots and the 0-based batch index and returns a boolean -indicating whether to exit traversal early.

      -

      Parameters

      Returns boolean

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/types/MigrationPredicate.html b/docs/v1/types/MigrationPredicate.html deleted file mode 100644 index 527ed62..0000000 --- a/docs/v1/types/MigrationPredicate.html +++ /dev/null @@ -1,2 +0,0 @@ -MigrationPredicate | firewalk

Type alias MigrationPredicate<D>

MigrationPredicate<D>: ((doc) => boolean)

Type Parameters

  • D = firestore.DocumentData

Type declaration

    • (doc): boolean
    • A function that takes a document snapshot and returns a boolean indicating whether to migrate it.

      -

      Parameters

      • doc: firestore.QueryDocumentSnapshot<D>

      Returns boolean

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/types/SetDataGetter.html b/docs/v1/types/SetDataGetter.html deleted file mode 100644 index 2156af0..0000000 --- a/docs/v1/types/SetDataGetter.html +++ /dev/null @@ -1,2 +0,0 @@ -SetDataGetter | firewalk

Type alias SetDataGetter<D>

SetDataGetter<D>: ((doc) => D)

Type Parameters

  • D = firestore.DocumentData

Type declaration

    • (doc): D
    • A function that takes a document snapshot and derives the data with which to set that document.

      -

      Parameters

      • doc: firestore.QueryDocumentSnapshot<D>

      Returns D

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/types/Traversable.html b/docs/v1/types/Traversable.html deleted file mode 100644 index c5c0b95..0000000 --- a/docs/v1/types/Traversable.html +++ /dev/null @@ -1,3 +0,0 @@ -Traversable | firewalk

Type alias Traversable<D>

Traversable<D>: firestore.CollectionReference<D> | firestore.CollectionGroup<D> | firestore.Query<D>

A collection-like group of documents. Can be one of CollectionReference, -CollectionGroup and Query.

-

Type Parameters

  • D = firestore.DocumentData

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/types/TraverseEachCallback.html b/docs/v1/types/TraverseEachCallback.html deleted file mode 100644 index 6fa0700..0000000 --- a/docs/v1/types/TraverseEachCallback.html +++ /dev/null @@ -1,3 +0,0 @@ -TraverseEachCallback | firewalk

Type alias TraverseEachCallback<D>

TraverseEachCallback<D>: ((doc, docIndex, batchIndex) => void | Promise<void>)

Type Parameters

  • D = firestore.DocumentData

Type declaration

    • (doc, docIndex, batchIndex): void | Promise<void>
    • An asynchronous function that takes a document snapshot, its 0-based index within the batch, and -the 0-based index of the batch as arguments.

      -

      Parameters

      • doc: firestore.QueryDocumentSnapshot<D>
      • docIndex: number
      • batchIndex: number

      Returns void | Promise<void>

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/types/UpdateDataGetter.html b/docs/v1/types/UpdateDataGetter.html deleted file mode 100644 index f9d16bc..0000000 --- a/docs/v1/types/UpdateDataGetter.html +++ /dev/null @@ -1,2 +0,0 @@ -UpdateDataGetter | firewalk

Type alias UpdateDataGetter<D>

UpdateDataGetter<D>: ((doc) => firestore.UpdateData)

Type Parameters

  • D = firestore.DocumentData

Type declaration

    • (doc): firestore.UpdateData
    • A function that takes a document snapshot and derives the data with which to update that document.

      -

      Parameters

      • doc: firestore.QueryDocumentSnapshot<D>

      Returns firestore.UpdateData

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v1/types/UpdateFieldValueGetter.html b/docs/v1/types/UpdateFieldValueGetter.html deleted file mode 100644 index e190447..0000000 --- a/docs/v1/types/UpdateFieldValueGetter.html +++ /dev/null @@ -1,4 +0,0 @@ -UpdateFieldValueGetter | firewalk

Type alias UpdateFieldValueGetter<D>

UpdateFieldValueGetter<D>: ((doc) => [string | firestore.FieldPath, any, ...any[]])

Type Parameters

  • D = firestore.DocumentData

Type declaration

    • (doc): [string | firestore.FieldPath, any, ...any[]]
    • A function that takes a document snapshot and returns an alternating list of field paths and -values to update within that document, optionally followed by a Precondition to enforce on -the update.

      -

      Parameters

      • doc: firestore.QueryDocumentSnapshot<D>

      Returns [string | firestore.FieldPath, any, ...any[]]

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/assets/highlight.css b/docs/v2/assets/highlight.css deleted file mode 100644 index 3e67e3f..0000000 --- a/docs/v2/assets/highlight.css +++ /dev/null @@ -1,92 +0,0 @@ -:root { - --light-hl-0: #795E26; - --dark-hl-0: #DCDCAA; - --light-hl-1: #000000; - --dark-hl-1: #D4D4D4; - --light-hl-2: #A31515; - --dark-hl-2: #CE9178; - --light-hl-3: #AF00DB; - --dark-hl-3: #C586C0; - --light-hl-4: #001080; - --dark-hl-4: #9CDCFE; - --light-hl-5: #0000FF; - --dark-hl-5: #569CD6; - --light-hl-6: #0070C1; - --dark-hl-6: #4FC1FF; - --light-hl-7: #267F99; - --dark-hl-7: #4EC9B0; - --light-hl-8: #098658; - --dark-hl-8: #B5CEA8; - --light-hl-9: #008000; - --dark-hl-9: #6A9955; - --light-code-background: #FFFFFF; - --dark-code-background: #1E1E1E; -} - -@media (prefers-color-scheme: light) { :root { - --hl-0: var(--light-hl-0); - --hl-1: var(--light-hl-1); - --hl-2: var(--light-hl-2); - --hl-3: var(--light-hl-3); - --hl-4: var(--light-hl-4); - --hl-5: var(--light-hl-5); - --hl-6: var(--light-hl-6); - --hl-7: var(--light-hl-7); - --hl-8: var(--light-hl-8); - --hl-9: var(--light-hl-9); - --code-background: var(--light-code-background); -} } - -@media (prefers-color-scheme: dark) { :root { - --hl-0: var(--dark-hl-0); - --hl-1: var(--dark-hl-1); - --hl-2: var(--dark-hl-2); - --hl-3: var(--dark-hl-3); - --hl-4: var(--dark-hl-4); - --hl-5: var(--dark-hl-5); - --hl-6: var(--dark-hl-6); - --hl-7: var(--dark-hl-7); - --hl-8: var(--dark-hl-8); - --hl-9: var(--dark-hl-9); - --code-background: var(--dark-code-background); -} } - -:root[data-theme='light'] { - --hl-0: var(--light-hl-0); - --hl-1: var(--light-hl-1); - --hl-2: var(--light-hl-2); - --hl-3: var(--light-hl-3); - --hl-4: var(--light-hl-4); - --hl-5: var(--light-hl-5); - --hl-6: var(--light-hl-6); - --hl-7: var(--light-hl-7); - --hl-8: var(--light-hl-8); - --hl-9: var(--light-hl-9); - --code-background: var(--light-code-background); -} - -:root[data-theme='dark'] { - --hl-0: var(--dark-hl-0); - --hl-1: var(--dark-hl-1); - --hl-2: var(--dark-hl-2); - --hl-3: var(--dark-hl-3); - --hl-4: var(--dark-hl-4); - --hl-5: var(--dark-hl-5); - --hl-6: var(--dark-hl-6); - --hl-7: var(--dark-hl-7); - --hl-8: var(--dark-hl-8); - --hl-9: var(--dark-hl-9); - --code-background: var(--dark-code-background); -} - -.hl-0 { color: var(--hl-0); } -.hl-1 { color: var(--hl-1); } -.hl-2 { color: var(--hl-2); } -.hl-3 { color: var(--hl-3); } -.hl-4 { color: var(--hl-4); } -.hl-5 { color: var(--hl-5); } -.hl-6 { color: var(--hl-6); } -.hl-7 { color: var(--hl-7); } -.hl-8 { color: var(--hl-8); } -.hl-9 { color: var(--hl-9); } -pre, code { background: var(--code-background); } diff --git a/docs/v2/assets/main.js b/docs/v2/assets/main.js deleted file mode 100644 index d0aa8d5..0000000 --- a/docs/v2/assets/main.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; -"use strict";(()=>{var Pe=Object.create;var ne=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Ie(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Pe(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),v=s.str.charAt(1),f;v in s.node.edges?f=s.node.edges[v]:(f=new t.TokenSet,s.node.edges[v]=f),s.str.length==1&&(f.final=!0),i.push({node:f,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${ce(l.parent,i)}.${d}`);let v=document.createElement("li");v.classList.value=l.classes??"";let f=document.createElement("a");f.href=r.base+l.url,f.innerHTML=u+d,v.append(f),e.appendChild(v)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var Be={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>Be[e])}var C=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",pe="mousemove",B="mouseup",J={x:0,y:0},fe=!1,ee=!1,He=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(He=!0,F="touchstart",pe="touchmove",B="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(pe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ee=!1});document.addEventListener("click",t=>{fe&&(t.preventDefault(),t.stopImmediatePropagation(),fe=!1)});var X=class extends C{constructor(n){super(n);this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,r=>this.onPointerUp(r)),this.el.addEventListener("click",r=>r.preventDefault()),document.addEventListener(F,r=>this.onDocumentPointerDown(r)),document.addEventListener(B,r=>this.onDocumentPointerUp(r))}setActive(n){if(this.active==n)return;this.active=n,document.documentElement.classList.toggle("has-"+this.className,n),this.el.classList.toggle("active",n);let r=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(n){D||(this.setActive(!0),n.preventDefault())}onDocumentPointerDown(n){if(this.active){if(n.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(n){if(!D&&this.active&&n.target.closest(".col-sidebar")){let r=n.target.closest("a");if(r){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),r.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ve=document.head.appendChild(document.createElement("style"));ve.dataset.for="filters";var Y=class extends C{constructor(n){super(n);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ve.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.checked}setLocalStorage(n){Q.setItem(this.key,n.toString()),this.value=n,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(n=>{n.style.display="block";let r=Array.from(n.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);n.style.display=r?"none":"block"})}};var Z=class extends C{constructor(n){super(n);this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let r=Q.getItem(this.key);this.el.open=r?r==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let i=this.summary.querySelector("a");i&&i.addEventListener("click",()=>{location.assign(i.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.href===r.href&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); -/*! Bundled license information: - -lunr/lunr.js: - (** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - *) - (*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Set - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.tokenizer - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Vector - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.stemmer - * Copyright (C) 2020 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - *) - (*! - * lunr.stopWordFilter - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.trimmer - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.TokenSet - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Builder - * Copyright (C) 2020 Oliver Nightingale - *) -*/ diff --git a/docs/v2/assets/navigation.js b/docs/v2/assets/navigation.js deleted file mode 100644 index 308c200..0000000 --- a/docs/v2/assets/navigation.js +++ /dev/null @@ -1 +0,0 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA42UTU8CMRCG/4rpeRUliMpNAY0HI/HrYjiM3YFtGMqmOxCI4b8bXRe63XZ3z/P0eaeTaT+/BeOWxUAMCbIMMxEJmSiKDWox+DxUH5cp4RI1A6uVHhuzMiISKXAiBkLmRzse6CzhJYlILJSOxeCie72Pjk69AVLxcKVnah5SVpiqcVpyMpoZyOBF7oBl8qTmBtjOU4dznRJRTute9q2sEc5gTVwrc5g6Xc6olX7BbE3s1TlMsy7QVpt+3gxs0GRA+fC9Hodppau5nsO00OEYZNLcoIW1kfqHdqhWFfYKvu1SPLklBeHX9LdiQyD6Ark4ZvEuLfavKDpR5zdXF5ddK2y8VTwGQ7uJwVhJYHR1VaLJeViyoLNKNDlfkUfA8IDM9nRzXanYwvSc/mZnHs1/xeuI8k/lF8/iU5Wd4pbRaCBRtk/AsAKqbbfCNHVdbPYXVYZplVpa8m0OrI+PafK+pzEwhm/s1tv57hVS/AG0xjqrS/nd9gO7X2tZLIDvdUmDwBj46GfF4Y4HK2f3e1ZoTjf7Wqs8f43rCnw4/d5+up/+AK1sSa26BwAA" \ No newline at end of file diff --git a/docs/v2/assets/search.js b/docs/v2/assets/search.js deleted file mode 100644 index 6a7a339..0000000 --- a/docs/v2/assets/search.js +++ /dev/null @@ -1 +0,0 @@ -window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAA+19XXMjN5Lgf5Ef3BdRSxe+UY67h9uZuYt9uIiN3bm9B4fDwaZKUq0pUlMsdrfX4f9+kYkPAigkWZTUM263ngQVC4lEIpHfQP16M+4/Hm6+/+HXm5+H3e3N91o2N7v1Y3/z/c1m7NdT/8/rafPwf4b7cT3tx5vm5jhub76/uTvuNtOw3x2+q7y1epgetzfNzWa7Phz6w833Nze/NeQAF2E/D+xfx/WHfjz0NNz4xlnAvO0MUzxCx5n+ab3dvl9vfo6wp1+e+sN32W/n0VVK6Ajzp5+g/0Vg38T3EpjNzdN67HfTDLVkCkrn6M9IPuymfrxbb8Kwi0jOW2kj3I/D9PCvY387bNZTvwzuN2WfM7OKGJ8Zfr7il4dP+1w3PGv5ieWmK4eeqsNOh9t/Gg7/NOwe+nGY+turqbDf/XN/tx/dbvz3aT1OC/GpdnxVxP7n3dSPjkH3j0/bfjGTEF1fEbnbHmD+r6Hf3i7EKe/xeVA5XI/L4XWRGXtoXEOXvMfnQWUpXYour4jMoV+6rdybrzv0/xumhz/34/Chv/3zelovx2Te8RUROz7dLpf78eVXR+B5xKH6vhC9ROv+ub9bH7fTOb1bvPKKmrcGeaHuLfF+rvYlUbisf2kUlmvg6vDX6+CF1Fimhas4vUAPL0ZumSYm0HuBLl6I4AVtXMXrOfr4enSqmucSPst1z0KELmjlKj7P0cvXo7OcPs/SzQsRIrRzFY9r9PPy4RcoIQqb5+qghcjRWrqK0JV6+ioknkukl+nqcyjmbv5fPg3TX9bj9pe5anXu+fyFlzr8BMRLXn8FU3pabubDfkdNa/7CS6dFQLw0rQqmddsqvvhv/eG4rW7+4pWzM6pZFevtdbC/mfe7MEn/HoHGI77W3/55v/nT/rhbjkel47WIzEldt18XGa7LTbYlttp8AudN1LNW8nPM4xfbxc8xiF/H/LzK7rxu+GUG5pWW5TUoXDAhl9mOzxywagQttA6vGfKCGbjM/nvmgAvmSFp41wxJmHLnbbgrB1hgh1xlpV0zPG2OXbTDrh/m6oletrQuIpHbHv/eTwDif/fTlEhDZyRkv73U4pgDu2Rs5KidncK/rsdpWG/PzWT2yitMqA5zwbzm+NLT88pn/X5bYpD8cj4ylVgLoc/2T/vd3XBf47jileW2w3tUVMN/VXdPDeo3aY86sUp8iaEP275/+uvw2P9zP33s+x3qrL4qE6uI0P1fhNbj+tM587CKSt7npcP/ab/bHEfo5tX4lagQ/V+KFgL7t34af7kao3nXV+Wcv47Devt8xondr0WquklpD6d45cpNepnoqcPy/oqVP+8z3S7ZDOnQt4t3wtxHqsvR/i9rslSg9spL1QQJ85KaqOJ7ll/cq5fkevLWcq4p2fzP+825PVKOMdsmvv+CmS/YJ3U3blklSTWykKpaEuI3+dvnp3IpRbJAH5fDnnosH3rmCC8eNXv5BQOeCeGdH7za8ZmITAmDLad4eP2Fg14x4JWD5fLu/6KrQJrE5c8vlXNVeJdk3AzHS9NB5/U/1ttjf2ZS5UuvM7Uq1GUTnGGdCAN+4pB/gRDLY7+bMOj3l3FMgnoe/HeVd85OT7ETCTf73WEaj5vpCrjf5J3qs6whTkxx92G9HW6dJCFmOHvldSZYB7tsfnOsf/uxuRl2t/2nm+9/vYG9OOx3N9/f8JVYdTfNzZ0Lsnz/g0OtudnsH4FANz/63/6jhxHhDffKd+1N80PbyHZlBf/xx+aH0AN/YI1YwUR5066UZY1oxIox08imXUnLGtXwlW15o/1f04hV24nGNmzVcdV0/i9rm3bVMdEw1rT4JuMNW6kGHrk3ZMNWQoiGqaZdCaMbpuENyRtmGrYyUjbMNnzVMduwzo/DAa7tuoYz6M5Uw3kjV1J0DRcwpFENB8istQ2Msmpb03DdiBWHd0zDV8rKhltEyzS8g15WN6KFl5lpBPNzEzw0gApKqEbI0AA6tJ1shA5PEGfNGmHDk843ZBsaLDQAsraykaLhK8kaKf1QEgAL1jUyAJbGz09aj7vsGr7iWjcKiSxtowCwabtGwboZeAKAmeGNCiirsHQK1o5J3ihA2apGBcAKaKEtazTQQra20cz/pLkfUwskrmi09AugATBvWaNh/VjHGm380mobGsAXuu0a04YGrB8ANNx1R1ZEBmU3zQ9G1DiUIYcCOaTjUGOQQwENif83CighWKP9X6AeY10DczQdazr/FxnUGAkMCusugEGBZMii/h2YYhdZVAnHotDDeCwYrjb80vmBeItUsI5DjWKOQ/En4cdEDm05cmi7MsDOsCgCOA52lJTMcaiBtQbaGS6AMd2chELSG8d0ojOObaSWbt1Fp9wSWqPcEgJkXMJWSrdyzGq3Tp1bJ7ESHSyTe9e0oSE9OkY1cmVa2xgdGoApZ42x4UHnG7Z1nU5Lym+aHyyrLSnHJeUr6WUOw4WEGTC31bUXIbCZcQaWu4Wxyq8LzAdFh9VOYmjOnaAwxrhlYEID9dmq1cIT3aAQgGXoHEG5ZrAxEbCEB6rDTSdQPEiUbMBgLTIag73GVkwFmgvptpjEHeY2lvFQcGNJ4xaFM+MWhbtFcWBxUTQsnHWdcQngFeP4yMBauCcWd3nbNRan1NkGJNpKG95YhfjaBiTaqlWysYAEF6KxAFhq29jOk7ELQ3TMd++AwsLqBkStexIgdwAZWKLT4YmBdTG26Wx40nnqszaAZi3z/RgoAZwIiA/XgbUytlRsaUdGBuLZrTcIc/eo8yvP2vA6Y36mDPnDPYMBFOsaxmQjV0rZhjG/Oozp+Jrx1GLMxmddAMdb34HHETiPLeFaJx4XwMlc1pgcfjq9KPFF1XCxklZnL8JPsLhSe4EGsgbER8uDFALsYblY5xmYAUd04R0UJAo3C+5PkF4cdqhAEYc6CaSeaMMzwUJfwRu1YsCSQrjWCWl10/wAsqxbWZnjrALOnRPGrXCoS+1kKwNhBkJDw3qa0EDUjfXiTdnTUBroA6qWr4TqsrG0H0to1cASc+4Gk8Y4MaFgHyGdOicUOtY5erWAPe4X4D7YbRyYD97tQIujCHBbn6+sDRvdctCufMWNcjteSgM7nq060/kNLZ3qU7CNDWpZBruWr7TqnJgE/wI3q9a4ER3mDI0hKWzDcHjUOUIjIl3DBO4vkAdoU+BrsME60MES1q+FbSWRG2DTofTSQFAJgBX0QMsCfpDKw4B1WZlWN0waPzGGtoVrdf411YZHcf4wi9BCwwUUiJLxGcyhA8mNJoZ7FodQcQjVeVIzJB9IS7CbVhoFOY+tOISOQ2gVn8UhkOQ4fxSdCK4LQEychTM4YFQTyWTiEEYG3I0f4sSPBvjR6Bo/Gs+PyvOj1dzv22ACG+stDGi4DYycyVet4Q1S2zINPCZXQnHgKL6ySgC7cNw7wBtiJdFk5s4cP+FmAbe20aAOMsz8D2zFgvUC80WLjyWKucO52drcujA35vcYcBGA4sYrXFSvCpnUeIuacWcbg8TGtddGOM63QoN6ESujhFMUHZgvLY8tZ+NL3BZi1bbWSzMDKkyjkYqTAJOEG9Ew04UWWhyu5YwkaPH4TATINvZFRelaOrZMfA+ZFaxW68dIzFP0k7q2RjP8zRFNe6LpQDTv4MAmd0QzwQ0BIxKJxpUzJngrPPU66amnmKeejkTTLJAqCn6QPJ5UNtCn6wJ9sMVjy/l2XaAKPlOxpWPLxPeQKrAaNkLukN4gkTx6KaXQXu9ElVLMUwqoDJTizuRjK+YtPg1uoBflzu0DLhO420CAt+giIimV6RwpwXt0Hh24ROjFgMo2aOIz7zBx4SS5FujysFUrmbO/uDbeuOoYGE7wsrdzOutFs4CNjKIZxgBJ61soYGRr/DYTMCpaT0BV1qnYCpufdWgfYstJLtawDtWhbXiL/ig4iLCmKwsuD1pQ8BowCMOdCUosPFOxh44tE1s2trrQl8UxUEYhFPTTOWpN1JZoQsvYimMgMwNRwZ51JODMulbCAmDfA7QaC/DAAtKzAGxCZAEQzqjOjZc5wjLPBKC9kQkARegFTgsyAdj4yAStZwJrPRMIKRu3ZMLrdWsCE2jlmaAN6lxZ7yIZ6bkBrGdUxkp6bgAaOnaAlXCa2gZ2wBYCFbA6KNIFxjXQFtdOwACzSM8iEKh3LOJayCIwhmMRWFlkEbRzHIsAHVrkZ9gWyCMGSIE8Au85HpEQzkAecc9U7KFjy8SWja0u9GVxDOQRhMKc6yOQR9pVh96ujK04BtOe5o5HgC6OR7CFnjL4sxwNNAUz4tzTgKOBbcBE4zI+U7GlXY+E08DI5mD0VjhNRGHj/EsJMSXkNBkMxy7oZyA+soj0jCaFFzfcS27cJ8hpgBCKGx44rfOMZoHPwN80ns9A6nTe7XfChneevUDqIH26wF4qcBeg5wDyKGywJTEo0Hmxgz4w2jXuGQog2PuOk0AJOU6Cfk7YcB04SUZpA7vZSRuw0J20AUo7TgIh66QNPlOxR5QErYktG1td6MviGE7aABTHSeB2OmkDEt1JG2zFMRwn2SBseBQ2PDASchQoKPTleOdaCX+gbyXqaltGSeTDD0EQhQimCsEGa0Jowcsh2QU5pIM2Yl4QSbDhUBBBGKH1a+KWEwJxjh7aM4gSLk7QdSIECrxaYiK4/MozCo/etwwegw6cAoN5OSSt5xTVBYnElfISCS0S5Bn81ckmcMtQNglQaR16UChzDK4iC3II/BXkHpCfXg6JwD0GrBknh7AlcGNEOYTPVOyhY8vElo2tLvRlcQwnhwCK4x5kBtwZOoghHaSQiLwDSoEF+ngpBC3n5UNMhGMsBp/J2FKxZWOrCy0MFcsWIns8tkBuQbRJxifKtRJeRJ8Z9JVZWVHwYvCn0RlFhyEwo/XMqFV0cj03diG6qDrphZX1alEzb2Yqo5yzDZa1s43ABMQta7i3jXRQi0p7caWV826BeMiFVnTeNjKm6Zx94ZnQubLGj+G8UGw5gdQF1caC8aN50GzojyFHWbT3cMIQCXLyyAbrB97z1g9aSTI+U7GHji0TWza2utCXxTGQoxCKs35MkEfgcTl55FpxDGf9GMdTbpLAU74FGs9FagTODfSywHFl4rsxjGbIukTSb1zwlXABxhAgiFORBSZygfBcwAIXsMAFbMYFwXABsem4QAUuCEzAAhNwzwTGZxNarRsfPQrcoLrADcFf0iJwQ2AGGZiBe2YQJ27gkRt45AaOhgvo7+gvQcjL8QXTkTEiX/DIFzLwReAK00Wu4JEreOQKHrgi8ETgiMAPkRt44IbICzzwAlqzImQSHC8IHXghcAIEpViYauAEHtcflx+2F284pgDBPeBIEZNaKhY5ohoAdb+9yYUvWi7MpEFgB6YTLoD4m21rEXcWQnMSYjMQCjI+7AhmGcbcIVwDoXZMlUMD3WWcJpipLqUoGwwKgyFipHsnSdm1dBiet/+QOPzLwu8hEvwWh/9C4/Cc0YF4zl4rEn8KwLc+JL8sEs85FYoPv1yKxXNBB+O5eIvGV6PxXNLReC7fovEJpRQdjefqLRr/FUTjuaaj8Vy/RePfovGvFY3nho7Gc/MWjf/ao/Hc0tF4bt+i8W/R+L9fNJ53dDSed2/xli8+3rIoDitaOhov2jcu+Eq4gNHReMHeovFfXzRecDoaL/ibXPji5cKiaLzA+JtU1er+vLxfnKnvFzEiJb3r4/0c3hkXHoczJGg9MebPp3QNRmCN6RoM9BgQNu68ENibWObfAu5Y5t+qUOYPq4xV/vjIHR6Cru5cGrKl8i0utX+P43EzOH7DJYCzEGqGgAC0kjlivEhVjxHib8mr+gw5QsxBh0MD6F2E0w3Oiuzc8SQ4tYAhLwhdVo85iEgdGQ834BThmZsiPHNT1EY3HM/NKZMe4kDfVPHqxILfKjsfW/anx1g4myGUdxo0bD9IVoTAhJHMMx22lGjkqgNWAym+kjoJ0gh0fwBxBce+chRiWXerfChTgu/iDjEip4gVms64iw1sT6UbvZI8MXgFGrXKVCcJv+HkoiqTzOVpQCe4kUyHeQyJbhLDo4oS1sad8YRZWfdjcugFTCiIS8Lezc+8xJrp1h8g6cLA6jQzIJlatcCYqnMTarhuy6lJRkXhwy+XovCS03kvyYu8l1b8d5/3ekt3fZnpLinodJcUWboLTluKl6a7FmW5pKRzVFK+5aiqOSqp6ByVVG85qoRSms5RSf2Wo/oKclTS0Dkqad5yVG85qtfKUUlL56ikfctRfe05KtnROSrZveWo3nJUf78clWrpHJV6y058+VHIRdkJxegclWJvXPCVcAGnc1SKv+Wovr4clRJ0jkqJN7nwxcuFRTkqhfE3Xb1mDX9LXlV0UkbFiJRyTrYG1PEawRDPwzQKxn9NTNP4+/8gX2MhbiyBgMHpCmka4F68MhGuVMMLGZ0T5xIxMCUo219pkbhpCuM+unohIP6WvGrOTCve1aOUn5afVRCHMfekwqTgPh6clGJuUnA1mpsUGMo4J4zcujkpPyUw9NyMmJ+QAn8FrudbmS7JNinwMiE6BjxfzCw4oBJIjAFr7jMJaB662xfxEkexguA67i64Ms0FckFwQ6ACgxN4ceOqhUcmPrLhUecbpsVGgh44OcB1lUu/4u1AsItcUEg7etqQmYLEEQYnDcc9D+Fl2XC4Os85a4Y3GlIpydVfaMrCFgUvU+V3f7UhMxW4EIPveBEnOxGEu4iScs4SC6E7GEzBKmnAynng8kQrcHXcwuGORT8MAj6OVkYWlNFobJlqOhh/85eaWpfywSxEcD6dE2cDXlw7dCxcTgk5NVjeDtMhEJNuW//I390WUAUPx3vooGnwVkbkMmNiy8ZW51rJBNBOsNUELv4W8pshr4mEBufPERrkOoLX4pTyxEC0DF4W7CIkoUQjgjV6xWWKAuY32uqdcjooLeGj4or7tIYNzNX5BBt4mBY1o3J3PVrug74YkpDo8yp/FyzzUV8tjLvrUcH2FO4GOncLK4QqXRLcqTC4gtNl4Dp3sSN0wVB72xl3d2rHfWIUsuV4QSrveOPTQj4DB3doWrwpFYDArLGbuxQR2A3UgFhZjGnDnkZ3Gu89BIzc3YbY1ykSWH680dD9quOvDnV3eSH+hvOEFZS4hOChe00cIo1OpbLwzLojhcYH6IGDHKcJ1IsMiRLsHKFDrM4AcRXeXgkTxbSBgR2A8FzAHSQginkkhXumPaKQJgjPsJIBbwnswjO8rNK1mJ8s73hsxTE6Gfp2cQw0ElwrjoGXVrpWGEO0bWzBfWxgFwvMnLhnIj6T8ZmKLR1bJrZsbMUxmB8j2Qigm0H71C48jDdCukg37AAVEv/ai7+Tsc6C+BMuoSzB5sO7hRV3l5qC5YN8DZddOgmkO2BjSLMFG62NNhqH1LLAqBZWYUADc8xttN78iUogPK6RFu4aUciFIScrMKowV+eCY8rj4ySaFgx51HXA2BPg6HhU2pBplSCM3N2oYE641An8agN+XnJj3NDZUBK50PV1fIblLJiAgtwz0Fyi1YWadIUVJHh1KNRROOMAJDFTsYOOLRN/tbEFYlZ2kLFtwzO8O9S1eGyJ2PJjJMwA1pfgdc0SLTPupKKwMdnBnfDTwXQBSa3CDcJ4lXDrLw623ja3XLr7ouEGYCwtwKoDFOa+kAASJG53gDmOPKwN89ertmCY40QlGOJcewgML9mWIJx57CEwnchDIVKLdQCxhWsNc8FAIriPTuBgmBfLS6ArFO64wcCyAUPDouLzz0z81djQsnjvKJhuDGwhsNVgDX0LbyWFgJvAI9KuZWOrCy2sonItFls8toRrJWuo6QoeHbKYS4qIsJwH6rpiNdHCGiINxi5cSVzjIhPUuwghasG8fgQdh2aTCkgo5rCAW4ZdpY84VfqApe3MAFSsQBLwaXAKBUksIqSrCNkqQtKprZcjVkOnQ3SqFVD4W3L7Z0v7FCZEXmU4/o733IuVOWWi/XW9Lfd33rYmGAvCrytws3X3VsfKPiH9PupwR7nLxZkv6AMVjpyoYdMhJ4K2RkbEAgu8crkVjRAWZq7gCnu8nDu91RTMVCGrFqBhFSZFs5XrE5fi9kED0CXhNcp76RSyYZ47wQtAy6+BhGbBp4YjElXfDn/z0s2b0Vp667kLugsm2PlPAjjr2QhvPetoPZtwB7JrddGVRZsfNp4zpCEhhIa0FsIb0q5lS5/UCKrMzIjEMQp1dMp7PCdHCXe84s6z06yDu8PdO45KSifcaiTpJuJPsZzN+mq2Wl2bUaQzhz9JvGZaeaEjQHrBXfFwJ3kCRON6VbWTiZLNhgBTZ/xMY0lfF4vgdCPdTnElSPCFA19wZXwJkgKNCZ7tSqTXQxuUbbK6d01w8sHMdWlb3biUlAgc7AsFZPD7Jew6tKPATHDFp6EI1zsQmNDFCpyQqIOaLYHuAfO1ex0EXJXP7zsFCyldtJGtr9IBPeN8iNbzLVgBGs26jnnXQeJl8C1+JAOtMDBJtPG9sFRHaO4UtNESKv2g5M96P6PF28DhLnkTfAWF7A/80KHgcK+74r8k2ArcI07v4eZA4coCOMwRQoWRq+bDHLI0oYeMffELFRaKX1UbnikWWzy2ZGy5C/ddEV94FiGrCNknxI0v4gNiMR2h6NgX6YU4m4iB83AwfMxDHUYXsIJyZ4WRCqgtUa5qwdX4gQ9jOs9EzufACjisXoQ8oJBdaKk2tlhs8dgS6OJB8ZaMz1Rs6dgysWVjDyzCblUjcL8gBjqOoeMYrn4RW3EMHcfQfoxkO6Fm1vXtFIJQQlv/GQYpw65R/mMLVvhvXmBID6sTdPh6BX5ERa6s1u6bJxZ0hosOeoUO3iHGZUwoYwap40oavUCwwulJiJm4gjKJ3y5wUHA9wLtGGY5jY1xAQIiXubKGUHuNLVwYQMS5qGC+a/Q3ofZHd6FlQHVAhl6gKnMt7loJ9fCWHlmz9EwIkQlf3I5hYZbWRWI5j8bAQcNcfY9yAXiNKWqsRrOnCKvz8hQPloQXQZCSYfgpDzBqfUMGbwiFEuowrJ4HFY1BZK28mLKh4IR5P6CFwmvtu7tFcR+qgD7afcDHf0YE0MMiVsgYWVeR6mtTtHafnLBSe4mkFSybexedeBA8GGOARUEXHp/I0FAeYRfkFz49AJ+KQO8dn+DHcEC/tAG0i65AP/ehCRRvrYwtFVva04phYB/wYxjYd88wzAYGD7rs2AOZ2FdMQuwu1GW1vkyPraQK5gTwLWQg2qReBsp5fcWDDVUy7pmKLR17mNiysdWF99wHbHzEsnWOAOYTtAx1VCjNMDajYx0VtmyoY8PsoOMbJjz5wI110xXaxpY/USIMijDYCzI0ULjAVjc6tkxs2djqfAcsLcUGC785Nz2NDlo8L2CrliH+lrzKaAvdss+czIgpDPRmMa1xLplh0eC1VccMf0teFWemdar/dt/mUtqcqoZxNlIIb2oZ7zKZjjtBCvYNTgvVOE6L+2mBZDzFYyQqTVdmDBOUK6mDR250yNvgp40wxAy+jfM0IOYj8MgNtix63yD5rY4tE1s2trrQ6trYYq6VUAYDZl31kI6NATMW1lcp95mmtvVJTVwklHyhjBoS1hi9Fp0PgcFHejgawp5okLbDSKbAsx7oXEILo6qg4FwhOURVgKPkykJdj279e1AgplZQ/wNpy9BSsaVjy8SWja3Ot2TbxhaLLe5aCYHQoAcHcK6WbH48y4LVrqtBePwJKadDmbnubINM3crGKUgXB2Qu+ivc99pYcP865Wmh2/SbFeYMdgaxw2/efejHqb/9F/ftux9+uLlpfr35yX8K7/S9xl9/O33z7vtfb1r3hLs/2v1hzP/1j5nwf6X/q/zf8L7xf62HFqD697h/j/v3eHivc3+Ff1/4cYUfV4a/vr/0/aXvL31/5fsr31/5fsrjrf3v2v+uw3M/H+3xNL6f8eMYhP/bb0DxNiUnOMV1enqIQhYjliO16YhuBJaN0FIr5nH0U2eB1H5K3A8kw1+VTtkP1DZtm80Houz10fJ+eSdNoejoFzvlvYSghlKnXjzv07IF6HGVdYIsJNGpPXVSOXbSnN8n6Xhdl+GoKJZIqRG+Spqykor9Su4Rnu+VX0Rlcu6xnruswyod1Q+3+SkjSUst84t3/Et3+gt3eLpTf7rNJg32E7Ewaaefc0oxiuO+bErFyf73//HTrpgxtV3+EDN+XH/66R3LN4P9Q0642AzFKreUlPpDTXpfTFp/HZN+965YbnAnF8i+vxWdSE2WdjoUNFZfA40PpUL9QwvNKZ8tVIr+gWf7sVhayrr9I0x2nU31vM3rwYTRPTD3x6PiMSl8kpcSinl40Z0MmBS+zksJWprbIhDWvx/dUD9u6Vu9VMKU5r3y/ZXvT7mrOlA/OJMevgmSK/we3AYP13i4ufvQ3FiZMMj7/YfcT9GUEg1UL6iVuj3rzaZ/mg4pPEqUpEznO99N/ZjLIdI4D5xSrFCGy3abAZOkP/o6XPx7C4bktBj79e0vOT0oF3jJOm8P+0yydCTTpMJoO/Xjbj0Nu/vccaNMCpt2ftwfd1Pu+JODhmhMFu/xcHYZd16IvvyjdUAUUS+NjAWRUoqSUlRkIqK5sTql3G3uSD5DnRS8VUrkwGuUpIwSsgyvmWIaecAkoP9tNgE4dn/FDghQ8l1Euhw8xzi1LtdPT9uhz3GRlJxcshsRXiZ1oYjhLDyTgw0qt1SBuWrxw425wpBk/K2+Z+KYxV6IYxe8rVN1Nd4fEXw21+UqxncvaEUBkCmXeQh51+eYVDm4X3abFCKp8sK6d0Xnh3G/2x8zrKC8jXDs0qFzIlqKCC8IQK+n/eOwyWX2IoIFqZpO9kM/ru/7XAJ9Db7o+uN6yPUeJ6fN82lG9G2BTgL+/Xrz8/7uLucfiq3T0P379aGQYYIKwJbJkkx6B2jT5iGb5RLDkfBWPpd/8pn8kdf2MxanwUrtmRkDybps1tst8Eku+k5i/4bKS7jepeEGVbyxqzbn+t7uN4fVYf/Yv3uX8Rokry9nYRBErhg5afHNqHSJKg5ihhQpd0ukHof7cT3tM3dHnUS/Y+R6ZspjUwA8DP+Vy8YklRYSYX8oEVkzrN5nJCA1Gp9Tcp5nvRCLuBQriBZrWLbCHgxcFvZe6pO/7zfr4yGbi6JsrDbrtn8szEAyvcXTfn3mE3GSjUUZqPDIa5tCu9vnBmJHhZnzDDcvKFl34soFf1h/GPJtxEj0F5jS7/vCOYXzdZc92/fDdlt2bClT50vfedkC7PfbPnepGSmaFzp/2Xo4+DlTk0UuSxb4mJu9pAlZ3a8eRhFIuYDOQldrJhkyl9yNvCmDWmTo5Cqr/QS81PLdK1enhLlVdOomZyN1wVN4HgJ5ICEMfCgioFdGxnJZ7oE+rHf3fZ6IFmQ4MxiU2U5MAfEcEKXZzgLa32bThHo7Iuwm017bbb+Zhn2uIiihWDXOv3SBF5gmxttr3BvpdD/uj08/vnuYpqfD9999d7/f32/79dNwWN32H77b7W/7/zx8dzeM/WHaj/132/XUH6bviv6rh+kx2+lwGrlOcmVrWIz9XT/2u03/AkwijAo2lI7NsXl8Wk/D+23Gd5oSWW3ec9t/GqZc0pJR5i+dw3JO2m2OI9A9nzw7a0YVfaftL7nXQ8boRNb7bsiMGFK1FeWkYRrBVAuar7pRYJDjuJ7JFEOJx5AfC3mvNCi92e8Ow2EqQ4LqBUksAJlD06QNWLBdGeEs4y+BXbI4TEK/EovxuCmcRKgPjn6d9fS2lA8NQI6PuXZjiyLWsf+0HrJlEmQBSKVj7nqTTkzIcuh8Yadhd8ydWtIcqVJw7NdTT7rbpzW9mbvHKYQ862EoFFRXDl0b1STLx84Om9u8y/VtCmMaIWx6yNOqNokM8LMoxO7vnsb9f/ab6bDZb8c+DxaStaYZPziplNvNZLFvfY9GRzBd4+Nh2j9mFuviZMDt6r6f3n2Lb2dRHGqDpAPfrqe8tkKQBXeXdM8F3XJtVYFlOZbvC/OWml3OStlc+81Q2I6KrLXN+t2tj9ts0UnTOh/9CkPbD1Lba0lBcEgl5CtTSOuUcP22n/q7od/mIe4u3b6hfxa2rWymBFguEBOVHnUIz0wJElouHUhTvjSMSkMnN1zCAE/97rZM0mvK58gXYxw+FAFX8vTAWcbtp/WwLaj1e61Ke7Uk/Rmz6Xaf5dEYmR4pci2mYuDc7jd10cfIRT6TEQdoY3+3elpPD6vDtB6nw8dhenj37fHQjzmbkqb/efCVBMJJiIXgY2Wj7Dd5WvSS0/qlOxGV00y3+80sX24p1snj4jFMd6E2gywlqdRgBHTyjX02tl3qhN9LmVaIhb9WudbFhEEgb7aRc1lLnoQq4jHBn+pyULtv811GxllzHHaZDJGkPZiGlfp1nu0lba7C0WxzopzLXPbrcTvklq8gBVA6I+iYe8+Ssu1ExSDpdyiv+jF3HCRZZ5zRZZebCIJ0N4xNe93tx00R3aOs63Q/9rvDscBTkBVNOus4DXmWh6wZqIoHD+Vvx/W2mC+5Qmm/ccwtPUHWAM2i6ZXCtv7DentcT/l0yDXP1tr3LOrKLoQLzgUf+g/9+Mv0UFhfkjwYmTHPp01fMN3ZbRV6DYdZSSZZ02VU1jMvTCGL2Kr75NMw4VZ7GvvbYVPQH+5LPZUXUPUF/aen/Q54cb3N7QPStczQn8bMhxNkbUDKfHfrzbAdptJDPxvVPLlVIgU05FgvyPHelVYxWQPL0k6HsrKaLFyrBIHmXhAZqSt1dNDNZQos6F6T69aZLg0F8peS5yW2ed6FrFQlfK4TnDztwsm0yyU4ub1DZk8om4ayUeq2Rhh3NxwyHcvIg5BnalUxPZCnHCnsn5FyjMmHbCdd2EpBaooKnHf/bXXKX7z7NoSt8iAiJdl1DeIKFxCcm7m/BB+6eb1KvLv9drv/WGhjSyGb8XwRI75QOhcIWNHId/tjXuUNd3Fc1jx3Yx6EY2Sv5wQk7o67WQYSrmc56wBf4MZZ8UGZKC68nLJmrubd3Pe7fsw1ESdvC5DtrGNuddqzcfrQsUh7XCjFPmd53A8f8jogRlawUOI4KLmEoe6zcyLkMdVEW2H+M48gUZRIk433x/W43k19HtAgkxWVYqKH9e42T1UK8hR1Kioe1oV8IW3RrFNx7Io01Up3vPA767VY9cKyh0KRc7JELkN1uH/IzQdObu+037DKiUnG79LamiFPLiyzqvLABVXJR1XwETUqebohJ+Rwv9sXepGTV8XMtHmpxSvae3h87G+H9dTnMoFkrQo7D5BCL2M/gsQytYxjV0zSzr2tJA0XyDK3zSOQQqN1lFTJCJzXAl2I3OXr/3uJEP29bzWaSYAgjjNhX9f7w65erEGGH9q87zj2m6LmQJDVGvlCQ6qxKMAiryjhacfbvPqakU7f2eMHuRIcds4VLUIiS6onQtfibNELilE9xLKwlDy4Wdo02ZbegUMwFVUhpB+XEXrq7wv5T9omdd48ARrv1nmcipO1FTJjsek4TEOhMskSwUW0/bDeDtkym6uK2tIAkgfmSltm4lIn+XY7zxHSOfxh92H/c85PZDVymSGt7vEP+5/LQA/pG2dKOY90LDlvNxPKpTYutXCwt0NJTKF9z8Xvhlnk+qwD5DvleemrThvFDVaNRwT4hSCgJGnlVODPff+UrxIZUUxWabsuypbIRE95Pqp0VstzTqXzWp5XKsuZVLpmJ+Qe97fD3dDfrovjbGTW4hlONIwzc9NJ2p+rlwVIx6dbUAYFwmSg7jy4WQzuwl7OyDe8H9djoV/J0EDKFMPPhbylTOqYgFJp70OxsUidnmjCxzUcjio8KVIPZh0HLBsr8saCvI8mnenj+hPWeo39NP4yTxmz9DzU3GYtEgUR5Kmisn6WjWXnrOZx6nOxtcf1p1p2m6d1K5qq0Hpcfxoej1nUhTz4cvYMUgCXM5cmEwCJjHssj2ZwshAlW+b+cT8Wxa2LQg2h+/Swzw00QxanpOTGEqHC616YqsmT4Bm84hz/0sMvHQ2wyhSJseM715gCIZShMnEhtPB7cZhiHc2rOE4FRepZpsSzvBHzQ5cFjLE/FPVsPMmRe/zPAchTN4srFWvFbUkhmqwc76yep88PJFHXLtWvQ8oxWaU1be9qORcyL3UmVxKhjz309dCrR2nI+PIZFfw4HA6F/ctIB/eVLq/IxGWR6CAPb9WE3r407ihJ+4w0zOO+KNojxXjFNHncfyiJSpaAhImVkYkUXK5QDOnjnbnj5/G4nYanPJLBSNPlOQQ75qtBpsuLepVU486K70j/c4E7u+vv16V/LMhK/5p3voPKg9wEOF/jm0dEd/3HzJ+6ypcu5BJ1miJ0ok5VhAPEhTtSu8Nm13+sCVWmr6pJj7CqdfaCdJRzTD5lrESG1hfsnd0+34ZX7OJdbjMI8lxslXf2+W54TtS+1Eb1mu8S6amoPbvs9++Oj++LaBZZDPGPrgiNRuJrRZCJxN0scpzQeP8eMui5sX7N8tZNj891Y+RrW6BBpLxWZfeiGxs94bNMGJlHzlMg/3CODRU9tuDgsKtfu0o2WAEUZxdXaM44PeQAzuZI6ldnlscXycway2GnoZL9Dm+99LEFyJgVDmqXnmEpY6eUw7LfuVs43M0wUJKfGxqnOEH98o0qyKK+lPTYdUaiIvhEdYpHrE3aOU8oMTJI+7qJ32wTPvVzh5o8ft+mHaFXWdMhyJBsxhT5icEL4rZetV+qz9rhuf34bXGpEjVU1msqqgFIE/38Ya4M5jG3nMjKk9QleloPuR4nb3gNUk5kUiVAGaF8tKj4JsNfyqRdD8UVaJysQ/5HC+bXiKVAEVwuSJ5xXAiA5NFdSxYEZGMXNyJxsjIu45GhL+viKZxT0f60P8zSjZx017MB94fDLIlOBiuSfmO/2e9uh5msITN+GXVqwS34QN0XEff7HDceR4rkWTiyqn+BkHoa95v+UNwmtySt4TsWkWLyLDt1uXUF5Czw8syrtkol0WUjESe/OZmWKTB9HPKtS1YA/U6M2BfzYcWafxr3T+v7kh8FWb5f9P0w3Baahsxxf+7z5mnm3WFW1hSQJ51SvvjbsS/ymWQ1SkoL7Hb1nTbYa36LDRlxSwtLx/KsmiCDRKm0wG5FiSB5JqsWH4Qb24sD0F/DV73G/n6YHVchD+Y8I3YbBijEMWlOvGCIXPeQDuKzRogJkjztkmQJAxfwbFUqvl2abcllTOp81hMrFLSiNpYUVs+ojR37p7E/wKmvojCOdEm/9P0xqzOqKJhIleLOHcrcLT9+kt69M/aH/Ta3fkldX4kl++6FpiOFpi17ztb1D3vtV3Ud5zlmav7Clv1Kg5D06BfYu1BIU3ymQJCVubnmgo758pO3l9WiLg7Ah2Js+pMGWVAvAzE717rkhmasIMqxJy2aYtq/zOorSR8sk+bTcSwqacjzIPUq3zysOA73D0W6mGIEwiVIveFD/7dj5ZAteX+TYbW+RSSMtL1SeXDoi8q75N6PsLl5ttkKOy47xRVhwrVI9/1UWBk8LdRVVCD00E8+ZERBSSozFHUl0KEv5DTpq5cyrJRJuYyJ0OEKFncbz+3sqiqZqnVdgKMuJTs87I/FMWDyQA+v8NCwuy8OVy04m17eai7IWzBrovSwLepoOXn+7Fw1AYKZhsf+fT997Ptd7Vb5JMTjYdVIWACaXVCTBDADBpehTONQXqKQfmpYU0mCw279dHjYF6qG2tOXPlEc6F87FxlGyr8LdiFUUd5jVEn/5t+gIo9/FCfwMwBFCQZ5npfnnWYXNAjycqFUzh+eytMP7R8zXlyQ+anfYOF3ViGy7NafhSGhS9O9NJ0lCdnDU3G7BiMvBEjZBW/Eyh3BC6d0y+R2UM1Z3spDP27gzo9i+5+/DCXpeTjcHXOlfjbN7HpO6+JQCiONHOKw9XMOV08P+f3ggjwVnJpy00Neu38V03msv4ZPYM5usyrMwc/1CUyyMmVp3j67V2XZh+Cmh+IY2TN4ImcG+1l4YsYLoXL2c/HEpdoN4sMFn/0zqeFY0WvXfJSVdMHUOKsLzn9OFXLjxQ0EVxzZnh6GInrzjEK6z8WFr8x1VBXGa8fKyNPR1YOFYR3G/fE+C/qTwVuWd/uYKSny7tPqAp4744iwi4gaeUQnZamhMHHJ5NuXbnHOjsef+W4QUKW41Ygiy1XB+TyDM+XfyH3WsdnfSYqe+lbPq9sDlxbxJbJ5PxURLPLkabaK4/q28BIXfFTLV4Svi1KQhM1ONW+V04h/lEx4JbgbKJMtBXnxcEAs8F+o/ywKa2fSvTw+XvHnIiLz714kYabT1yfmgZTKUa0C6Kr6cT4yctpWANUSAundiDalRCXOEwEVsSbyrsPKVYXhfEPGyslHHM08GVjZDOWXFEg3NXMKchDzZHyyowyV4Ux71z5zJZLw642mMpsZlBnPiDSsaqgYYPWkSJLYD75EMPZlvhoLjAgv+F5JgJS+x0v1iM2n9VoF9tFHoK4kqxbe50uS7w+y2PiMKCmzb8u/RYFB3Fw3kYe3koBiEVgiDwmE1aVOVlEnqsqLHUoPjLC1a5fOT7889YfNODzloow0R9NaoePutr8bdkX0jYwgLshtAsRxW2brGFnK/Frb6XNto1fR04E0U3EvLRkVT82k/M4+QVIy3Tbueo08N5Xk4Iiy7XxhKgGeeGtHJT0nbPr9pHnKMIWAFTEf1ttjX4OTqD9L5WocnCKxS9Z9FswyK8yrlGS7Ac4m+xI8I+QcUgXv4kKuZV9tST/Xfiy0PVl4m59iCPugUA8mh1wGrcnyolRWzj9HQdZlnylfPx7Kz5ssIk0QjInIR8bKSHTJQaxuh7wuGIEWhh4ZJ9fzrVN+a568w63iVH9cF1ejkLcWVYO9HkhxbcySCyo/PhQXl151mVO8maV0JStRmI+z8B55Cc8X77p12bTLQz+MzBSVF50QkYNUG398GHKrniwzqh8xJQLG6QeFPj7sy6+8XnUUwEMZiu/vLtv9eUynnkF66QfHl35oPFvX4oZwTkbBsu025MeAyERcm017cahqYeD42WmEgiAZlwxT1bNL/G1D+dnQ9/w3DYRMfVVzFZx3737KQJF3H2b7igCFQYlZ9Ql5eXQJsvggJCkJYjq3YB7itFJiqNS3YJ1WybzKj2SR4fezW3x6qDvpyVmNup1SQ3AcCh5YaEp90dojmXtxAOIaY+nVcuq/E1qUZc1LckOu9y/7Y154dyGn+ErnocsYfBADPzY3T8NTv4U7/r7/4cfffvv/hVjGoTA7AQA="; \ No newline at end of file diff --git a/docs/v2/assets/style.css b/docs/v2/assets/style.css deleted file mode 100644 index 07a385b..0000000 --- a/docs/v2/assets/style.css +++ /dev/null @@ -1,1394 +0,0 @@ -:root { - /* Light */ - --light-color-background: #f2f4f8; - --light-color-background-secondary: #eff0f1; - --light-color-warning-text: #222; - --light-color-background-warning: #e6e600; - --light-color-icon-background: var(--light-color-background); - --light-color-accent: #c5c7c9; - --light-color-active-menu-item: var(--light-color-accent); - --light-color-text: #222; - --light-color-text-aside: #6e6e6e; - --light-color-link: #1f70c2; - - --light-color-ts-keyword: #056bd6; - --light-color-ts-project: #b111c9; - --light-color-ts-module: var(--light-color-ts-project); - --light-color-ts-namespace: var(--light-color-ts-project); - --light-color-ts-enum: #7e6f15; - --light-color-ts-enum-member: var(--light-color-ts-enum); - --light-color-ts-variable: #4760ec; - --light-color-ts-function: #572be7; - --light-color-ts-class: #1f70c2; - --light-color-ts-interface: #108024; - --light-color-ts-constructor: var(--light-color-ts-class); - --light-color-ts-property: var(--light-color-ts-variable); - --light-color-ts-method: var(--light-color-ts-function); - --light-color-ts-call-signature: var(--light-color-ts-method); - --light-color-ts-index-signature: var(--light-color-ts-property); - --light-color-ts-constructor-signature: var(--light-color-ts-constructor); - --light-color-ts-parameter: var(--light-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --light-color-ts-type-parameter: var(--light-color-ts-type-alias); - --light-color-ts-accessor: var(--light-color-ts-property); - --light-color-ts-get-signature: var(--light-color-ts-accessor); - --light-color-ts-set-signature: var(--light-color-ts-accessor); - --light-color-ts-type-alias: #d51270; - /* reference not included as links will be colored with the kind that it points to */ - - --light-external-icon: url("data:image/svg+xml;utf8,"); - --light-color-scheme: light; - - /* Dark */ - --dark-color-background: #2b2e33; - --dark-color-background-secondary: #1e2024; - --dark-color-background-warning: #bebe00; - --dark-color-warning-text: #222; - --dark-color-icon-background: var(--dark-color-background-secondary); - --dark-color-accent: #9096a2; - --dark-color-active-menu-item: #5d5d6a; - --dark-color-text: #f5f5f5; - --dark-color-text-aside: #dddddd; - --dark-color-link: #00aff4; - - --dark-color-ts-keyword: #3399ff; - --dark-color-ts-project: #e358ff; - --dark-color-ts-module: var(--dark-color-ts-project); - --dark-color-ts-namespace: var(--dark-color-ts-project); - --dark-color-ts-enum: #f4d93e; - --dark-color-ts-enum-member: var(--dark-color-ts-enum); - --dark-color-ts-variable: #798dff; - --dark-color-ts-function: #a280ff; - --dark-color-ts-class: #8ac4ff; - --dark-color-ts-interface: #6cff87; - --dark-color-ts-constructor: var(--dark-color-ts-class); - --dark-color-ts-property: var(--dark-color-ts-variable); - --dark-color-ts-method: var(--dark-color-ts-function); - --dark-color-ts-call-signature: var(--dark-color-ts-method); - --dark-color-ts-index-signature: var(--dark-color-ts-property); - --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); - --dark-color-ts-parameter: var(--dark-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --dark-color-ts-type-parameter: var(--dark-color-ts-type-alias); - --dark-color-ts-accessor: var(--dark-color-ts-property); - --dark-color-ts-get-signature: var(--dark-color-ts-accessor); - --dark-color-ts-set-signature: var(--dark-color-ts-accessor); - --dark-color-ts-type-alias: #ff6492; - /* reference not included as links will be colored with the kind that it points to */ - - --dark-external-icon: url("data:image/svg+xml;utf8,"); - --dark-color-scheme: dark; -} - -@media (prefers-color-scheme: light) { - :root { - --color-background: var(--light-color-background); - --color-background-secondary: var(--light-color-background-secondary); - --color-background-warning: var(--light-color-background-warning); - --color-warning-text: var(--light-color-warning-text); - --color-icon-background: var(--light-color-icon-background); - --color-accent: var(--light-color-accent); - --color-active-menu-item: var(--light-color-active-menu-item); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - - --color-ts-keyword: var(--light-color-ts-keyword); - --color-ts-module: var(--light-color-ts-module); - --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-enum-member: var(--light-color-ts-enum-member); - --color-ts-variable: var(--light-color-ts-variable); - --color-ts-function: var(--light-color-ts-function); - --color-ts-class: var(--light-color-ts-class); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-constructor: var(--light-color-ts-constructor); - --color-ts-property: var(--light-color-ts-property); - --color-ts-method: var(--light-color-ts-method); - --color-ts-call-signature: var(--light-color-ts-call-signature); - --color-ts-index-signature: var(--light-color-ts-index-signature); - --color-ts-constructor-signature: var( - --light-color-ts-constructor-signature - ); - --color-ts-parameter: var(--light-color-ts-parameter); - --color-ts-type-parameter: var(--light-color-ts-type-parameter); - --color-ts-accessor: var(--light-color-ts-accessor); - --color-ts-get-signature: var(--light-color-ts-get-signature); - --color-ts-set-signature: var(--light-color-ts-set-signature); - --color-ts-type-alias: var(--light-color-ts-type-alias); - - --external-icon: var(--light-external-icon); - --color-scheme: var(--light-color-scheme); - } -} - -@media (prefers-color-scheme: dark) { - :root { - --color-background: var(--dark-color-background); - --color-background-secondary: var(--dark-color-background-secondary); - --color-background-warning: var(--dark-color-background-warning); - --color-warning-text: var(--dark-color-warning-text); - --color-icon-background: var(--dark-color-icon-background); - --color-accent: var(--dark-color-accent); - --color-active-menu-item: var(--dark-color-active-menu-item); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - - --color-ts-keyword: var(--dark-color-ts-keyword); - --color-ts-module: var(--dark-color-ts-module); - --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-enum-member: var(--dark-color-ts-enum-member); - --color-ts-variable: var(--dark-color-ts-variable); - --color-ts-function: var(--dark-color-ts-function); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-constructor: var(--dark-color-ts-constructor); - --color-ts-property: var(--dark-color-ts-property); - --color-ts-method: var(--dark-color-ts-method); - --color-ts-call-signature: var(--dark-color-ts-call-signature); - --color-ts-index-signature: var(--dark-color-ts-index-signature); - --color-ts-constructor-signature: var( - --dark-color-ts-constructor-signature - ); - --color-ts-parameter: var(--dark-color-ts-parameter); - --color-ts-type-parameter: var(--dark-color-ts-type-parameter); - --color-ts-accessor: var(--dark-color-ts-accessor); - --color-ts-get-signature: var(--dark-color-ts-get-signature); - --color-ts-set-signature: var(--dark-color-ts-set-signature); - --color-ts-type-alias: var(--dark-color-ts-type-alias); - - --external-icon: var(--dark-external-icon); - --color-scheme: var(--dark-color-scheme); - } -} - -html { - color-scheme: var(--color-scheme); -} - -body { - margin: 0; -} - -:root[data-theme="light"] { - --color-background: var(--light-color-background); - --color-background-secondary: var(--light-color-background-secondary); - --color-background-warning: var(--light-color-background-warning); - --color-warning-text: var(--light-color-warning-text); - --color-icon-background: var(--light-color-icon-background); - --color-accent: var(--light-color-accent); - --color-active-menu-item: var(--light-color-active-menu-item); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - - --color-ts-keyword: var(--light-color-ts-keyword); - --color-ts-module: var(--light-color-ts-module); - --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-enum-member: var(--light-color-ts-enum-member); - --color-ts-variable: var(--light-color-ts-variable); - --color-ts-function: var(--light-color-ts-function); - --color-ts-class: var(--light-color-ts-class); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-constructor: var(--light-color-ts-constructor); - --color-ts-property: var(--light-color-ts-property); - --color-ts-method: var(--light-color-ts-method); - --color-ts-call-signature: var(--light-color-ts-call-signature); - --color-ts-index-signature: var(--light-color-ts-index-signature); - --color-ts-constructor-signature: var( - --light-color-ts-constructor-signature - ); - --color-ts-parameter: var(--light-color-ts-parameter); - --color-ts-type-parameter: var(--light-color-ts-type-parameter); - --color-ts-accessor: var(--light-color-ts-accessor); - --color-ts-get-signature: var(--light-color-ts-get-signature); - --color-ts-set-signature: var(--light-color-ts-set-signature); - --color-ts-type-alias: var(--light-color-ts-type-alias); - - --external-icon: var(--light-external-icon); - --color-scheme: var(--light-color-scheme); -} - -:root[data-theme="dark"] { - --color-background: var(--dark-color-background); - --color-background-secondary: var(--dark-color-background-secondary); - --color-background-warning: var(--dark-color-background-warning); - --color-warning-text: var(--dark-color-warning-text); - --color-icon-background: var(--dark-color-icon-background); - --color-accent: var(--dark-color-accent); - --color-active-menu-item: var(--dark-color-active-menu-item); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - - --color-ts-keyword: var(--dark-color-ts-keyword); - --color-ts-module: var(--dark-color-ts-module); - --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-enum-member: var(--dark-color-ts-enum-member); - --color-ts-variable: var(--dark-color-ts-variable); - --color-ts-function: var(--dark-color-ts-function); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-constructor: var(--dark-color-ts-constructor); - --color-ts-property: var(--dark-color-ts-property); - --color-ts-method: var(--dark-color-ts-method); - --color-ts-call-signature: var(--dark-color-ts-call-signature); - --color-ts-index-signature: var(--dark-color-ts-index-signature); - --color-ts-constructor-signature: var( - --dark-color-ts-constructor-signature - ); - --color-ts-parameter: var(--dark-color-ts-parameter); - --color-ts-type-parameter: var(--dark-color-ts-type-parameter); - --color-ts-accessor: var(--dark-color-ts-accessor); - --color-ts-get-signature: var(--dark-color-ts-get-signature); - --color-ts-set-signature: var(--dark-color-ts-set-signature); - --color-ts-type-alias: var(--dark-color-ts-type-alias); - - --external-icon: var(--dark-external-icon); - --color-scheme: var(--dark-color-scheme); -} - -.always-visible, -.always-visible .tsd-signatures { - display: inherit !important; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - line-height: 1.2; -} - -h1 > a, -h2 > a, -h3 > a, -h4 > a, -h5 > a, -h6 > a { - text-decoration: none; - color: var(--color-text); -} - -h1 { - font-size: 1.875rem; - margin: 0.67rem 0; -} - -h2 { - font-size: 1.5rem; - margin: 0.83rem 0; -} - -h3 { - font-size: 1.25rem; - margin: 1rem 0; -} - -h4 { - font-size: 1.05rem; - margin: 1.33rem 0; -} - -h5 { - font-size: 1rem; - margin: 1.5rem 0; -} - -h6 { - font-size: 0.875rem; - margin: 2.33rem 0; -} - -.uppercase { - text-transform: uppercase; -} - -dl, -menu, -ol, -ul { - margin: 1em 0; -} - -dd { - margin: 0 0 0 40px; -} - -.container { - max-width: 1700px; - padding: 0 2rem; -} - -/* Footer */ -.tsd-generator { - border-top: 1px solid var(--color-accent); - padding-top: 1rem; - padding-bottom: 1rem; - max-height: 3.5rem; -} - -.tsd-generator > p { - margin-top: 0; - margin-bottom: 0; - padding: 0 1rem; -} - -.container-main { - margin: 0 auto; - /* toolbar, footer, margin */ - min-height: calc(100vh - 41px - 56px - 4rem); -} - -@keyframes fade-in { - from { - opacity: 0; - } - to { - opacity: 1; - } -} -@keyframes fade-out { - from { - opacity: 1; - visibility: visible; - } - to { - opacity: 0; - } -} -@keyframes fade-in-delayed { - 0% { - opacity: 0; - } - 33% { - opacity: 0; - } - 100% { - opacity: 1; - } -} -@keyframes fade-out-delayed { - 0% { - opacity: 1; - visibility: visible; - } - 66% { - opacity: 0; - } - 100% { - opacity: 0; - } -} -@keyframes pop-in-from-right { - from { - transform: translate(100%, 0); - } - to { - transform: translate(0, 0); - } -} -@keyframes pop-out-to-right { - from { - transform: translate(0, 0); - visibility: visible; - } - to { - transform: translate(100%, 0); - } -} -body { - background: var(--color-background); - font-family: "Segoe UI", sans-serif; - font-size: 16px; - color: var(--color-text); -} - -a { - color: var(--color-link); - text-decoration: none; -} -a:hover { - text-decoration: underline; -} -a.external[target="_blank"] { - background-image: var(--external-icon); - background-position: top 3px right; - background-repeat: no-repeat; - padding-right: 13px; -} - -code, -pre { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - padding: 0.2em; - margin: 0; - font-size: 0.875rem; - border-radius: 0.8em; -} - -pre { - position: relative; - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; - padding: 10px; - border: 1px solid var(--color-accent); -} -pre code { - padding: 0; - font-size: 100%; -} -pre > button { - position: absolute; - top: 10px; - right: 10px; - opacity: 0; - transition: opacity 0.1s; - box-sizing: border-box; -} -pre:hover > button, -pre > button.visible { - opacity: 1; -} - -blockquote { - margin: 1em 0; - padding-left: 1em; - border-left: 4px solid gray; -} - -.tsd-typography { - line-height: 1.333em; -} -.tsd-typography ul { - list-style: square; - padding: 0 0 0 20px; - margin: 0; -} -.tsd-typography .tsd-index-panel h3, -.tsd-index-panel .tsd-typography h3, -.tsd-typography h4, -.tsd-typography h5, -.tsd-typography h6 { - font-size: 1em; -} -.tsd-typography h5, -.tsd-typography h6 { - font-weight: normal; -} -.tsd-typography p, -.tsd-typography ul, -.tsd-typography ol { - margin: 1em 0; -} -.tsd-typography table { - border-collapse: collapse; - border: none; -} -.tsd-typography td, -.tsd-typography th { - padding: 6px 13px; - border: 1px solid var(--color-accent); -} -.tsd-typography thead, -.tsd-typography tr:nth-child(even) { - background-color: var(--color-background-secondary); -} - -.tsd-breadcrumb { - margin: 0; - padding: 0; - color: var(--color-text-aside); -} -.tsd-breadcrumb a { - color: var(--color-text-aside); - text-decoration: none; -} -.tsd-breadcrumb a:hover { - text-decoration: underline; -} -.tsd-breadcrumb li { - display: inline; -} -.tsd-breadcrumb li:after { - content: " / "; -} - -.tsd-comment-tags { - display: flex; - flex-direction: column; -} -dl.tsd-comment-tag-group { - display: flex; - align-items: center; - overflow: hidden; - margin: 0.5em 0; -} -dl.tsd-comment-tag-group dt { - display: flex; - margin-right: 0.5em; - font-size: 0.875em; - font-weight: normal; -} -dl.tsd-comment-tag-group dd { - margin: 0; -} -code.tsd-tag { - padding: 0.25em 0.4em; - border: 0.1em solid var(--color-accent); - margin-right: 0.25em; - font-size: 70%; -} -h1 code.tsd-tag:first-of-type { - margin-left: 0.25em; -} - -dl.tsd-comment-tag-group dd:before, -dl.tsd-comment-tag-group dd:after { - content: " "; -} -dl.tsd-comment-tag-group dd pre, -dl.tsd-comment-tag-group dd:after { - clear: both; -} -dl.tsd-comment-tag-group p { - margin: 0; -} - -.tsd-panel.tsd-comment .lead { - font-size: 1.1em; - line-height: 1.333em; - margin-bottom: 2em; -} -.tsd-panel.tsd-comment .lead:last-child { - margin-bottom: 0; -} - -.tsd-filter-visibility h4 { - font-size: 1rem; - padding-top: 0.75rem; - padding-bottom: 0.5rem; - margin: 0; -} -.tsd-filter-item:not(:last-child) { - margin-bottom: 0.5rem; -} -.tsd-filter-input { - display: flex; - width: fit-content; - width: -moz-fit-content; - align-items: center; - user-select: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - cursor: pointer; -} -.tsd-filter-input input[type="checkbox"] { - cursor: pointer; - position: absolute; - width: 1.5em; - height: 1.5em; - opacity: 0; -} -.tsd-filter-input input[type="checkbox"]:disabled { - pointer-events: none; -} -.tsd-filter-input svg { - cursor: pointer; - width: 1.5em; - height: 1.5em; - margin-right: 0.5em; - border-radius: 0.33em; - /* Leaving this at full opacity breaks event listeners on Firefox. - Don't remove unless you know what you're doing. */ - opacity: 0.99; -} -.tsd-filter-input input[type="checkbox"]:focus + svg { - transform: scale(0.95); -} -.tsd-filter-input input[type="checkbox"]:focus:not(:focus-visible) + svg { - transform: scale(1); -} -.tsd-checkbox-background { - fill: var(--color-accent); -} -input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { - stroke: var(--color-text); -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { - fill: var(--color-background); - stroke: var(--color-accent); - stroke-width: 0.25rem; -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { - stroke: var(--color-accent); -} - -.tsd-theme-toggle { - padding-top: 0.75rem; -} -.tsd-theme-toggle > h4 { - display: inline; - vertical-align: middle; - margin-right: 0.75rem; -} - -.tsd-hierarchy { - list-style: square; - margin: 0; -} -.tsd-hierarchy .target { - font-weight: bold; -} - -.tsd-panel-group.tsd-index-group { - margin-bottom: 0; -} -.tsd-index-panel .tsd-index-list { - list-style: none; - line-height: 1.333em; - margin: 0; - padding: 0.25rem 0 0 0; - overflow: hidden; - display: grid; - grid-template-columns: repeat(3, 1fr); - column-gap: 1rem; - grid-template-rows: auto; -} -@media (max-width: 1024px) { - .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(2, 1fr); - } -} -@media (max-width: 768px) { - .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(1, 1fr); - } -} -.tsd-index-panel .tsd-index-list li { - -webkit-page-break-inside: avoid; - -moz-page-break-inside: avoid; - -ms-page-break-inside: avoid; - -o-page-break-inside: avoid; - page-break-inside: avoid; -} - -.tsd-flag { - display: inline-block; - padding: 0.25em 0.4em; - border-radius: 4px; - color: var(--color-comment-tag-text); - background-color: var(--color-comment-tag); - text-indent: 0; - font-size: 75%; - line-height: 1; - font-weight: normal; -} - -.tsd-anchor { - position: relative; - top: -100px; -} - -.tsd-member { - position: relative; -} -.tsd-member .tsd-anchor + h3 { - display: flex; - align-items: center; - margin-top: 0; - margin-bottom: 0; - border-bottom: none; -} - -.tsd-navigation.settings { - margin: 1rem 0; -} -.tsd-navigation > a, -.tsd-navigation .tsd-accordion-summary { - width: calc(100% - 0.5rem); -} -.tsd-navigation a, -.tsd-navigation summary > span, -.tsd-page-navigation a { - display: inline-flex; - align-items: center; - padding: 0.25rem; - color: var(--color-text); - text-decoration: none; - box-sizing: border-box; -} -.tsd-navigation a.current, -.tsd-page-navigation a.current { - background: var(--color-active-menu-item); -} -.tsd-navigation a:hover, -.tsd-page-navigation a:hover { - text-decoration: underline; -} -.tsd-navigation ul, -.tsd-page-navigation ul { - margin-top: 0; - margin-bottom: 0; - padding: 0; - list-style: none; -} -.tsd-navigation li, -.tsd-page-navigation li { - padding: 0; - max-width: 100%; -} -.tsd-nested-navigation { - margin-left: 3rem; -} -.tsd-nested-navigation > li > details { - margin-left: -1.5rem; -} -.tsd-small-nested-navigation { - margin-left: 1.5rem; -} -.tsd-small-nested-navigation > li > details { - margin-left: -1.5rem; -} - -.tsd-nested-navigation > li > a, -.tsd-nested-navigation > li > span { - width: calc(100% - 1.75rem - 0.5rem); -} - -.tsd-page-navigation ul { - padding-left: 1.75rem; -} - -#tsd-sidebar-links a { - margin-top: 0; - margin-bottom: 0.5rem; - line-height: 1.25rem; -} -#tsd-sidebar-links a:last-of-type { - margin-bottom: 0; -} - -a.tsd-index-link { - padding: 0.25rem 0 !important; - font-size: 1rem; - line-height: 1.25rem; - display: inline-flex; - align-items: center; - color: var(--color-text); -} -.tsd-accordion-summary { - list-style-type: none; /* hide marker on non-safari */ - outline: none; /* broken on safari, so just hide it */ -} -.tsd-accordion-summary::-webkit-details-marker { - display: none; /* hide marker on safari */ -} -.tsd-accordion-summary, -.tsd-accordion-summary a { - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - - cursor: pointer; -} -.tsd-accordion-summary a { - width: calc(100% - 1.5rem); -} -.tsd-accordion-summary > * { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} -.tsd-index-accordion .tsd-accordion-summary > svg { - margin-left: 0.25rem; -} -.tsd-index-content > :not(:first-child) { - margin-top: 0.75rem; -} -.tsd-index-heading { - margin-top: 1.5rem; - margin-bottom: 0.75rem; -} - -.tsd-kind-icon { - margin-right: 0.5rem; - width: 1.25rem; - height: 1.25rem; - min-width: 1.25rem; - min-height: 1.25rem; -} -.tsd-kind-icon path { - transform-origin: center; - transform: scale(1.1); -} -.tsd-signature > .tsd-kind-icon { - margin-right: 0.8rem; -} - -.tsd-panel { - margin-bottom: 2.5rem; -} -.tsd-panel.tsd-member { - margin-bottom: 4rem; -} -.tsd-panel:empty { - display: none; -} -.tsd-panel > h1, -.tsd-panel > h2, -.tsd-panel > h3 { - margin: 1.5rem -1.5rem 0.75rem -1.5rem; - padding: 0 1.5rem 0.75rem 1.5rem; -} -.tsd-panel > h1.tsd-before-signature, -.tsd-panel > h2.tsd-before-signature, -.tsd-panel > h3.tsd-before-signature { - margin-bottom: 0; - border-bottom: none; -} - -.tsd-panel-group { - margin: 4rem 0; -} -.tsd-panel-group.tsd-index-group { - margin: 2rem 0; -} -.tsd-panel-group.tsd-index-group details { - margin: 2rem 0; -} - -#tsd-search { - transition: background-color 0.2s; -} -#tsd-search .title { - position: relative; - z-index: 2; -} -#tsd-search .field { - position: absolute; - left: 0; - top: 0; - right: 2.5rem; - height: 100%; -} -#tsd-search .field input { - box-sizing: border-box; - position: relative; - top: -50px; - z-index: 1; - width: 100%; - padding: 0 10px; - opacity: 0; - outline: 0; - border: 0; - background: transparent; - color: var(--color-text); -} -#tsd-search .field label { - position: absolute; - overflow: hidden; - right: -40px; -} -#tsd-search .field input, -#tsd-search .title, -#tsd-toolbar-links a { - transition: opacity 0.2s; -} -#tsd-search .results { - position: absolute; - visibility: hidden; - top: 40px; - width: 100%; - margin: 0; - padding: 0; - list-style: none; - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); -} -#tsd-search .results li { - background-color: var(--color-background); - line-height: initial; - padding: 4px; -} -#tsd-search .results li:nth-child(even) { - background-color: var(--color-background-secondary); -} -#tsd-search .results li.state { - display: none; -} -#tsd-search .results li.current:not(.no-results), -#tsd-search .results li:hover:not(.no-results) { - background-color: var(--color-accent); -} -#tsd-search .results a { - display: flex; - align-items: center; - padding: 0.25rem; - box-sizing: border-box; -} -#tsd-search .results a:before { - top: 10px; -} -#tsd-search .results span.parent { - color: var(--color-text-aside); - font-weight: normal; -} -#tsd-search.has-focus { - background-color: var(--color-accent); -} -#tsd-search.has-focus .field input { - top: 0; - opacity: 1; -} -#tsd-search.has-focus .title, -#tsd-search.has-focus #tsd-toolbar-links a { - z-index: 0; - opacity: 0; -} -#tsd-search.has-focus .results { - visibility: visible; -} -#tsd-search.loading .results li.state.loading { - display: block; -} -#tsd-search.failure .results li.state.failure { - display: block; -} - -#tsd-toolbar-links { - position: absolute; - top: 0; - right: 2rem; - height: 100%; - display: flex; - align-items: center; - justify-content: flex-end; -} -#tsd-toolbar-links a { - margin-left: 1.5rem; -} -#tsd-toolbar-links a:hover { - text-decoration: underline; -} - -.tsd-signature { - margin: 0 0 1rem 0; - padding: 1rem 0.5rem; - border: 1px solid var(--color-accent); - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - font-size: 14px; - overflow-x: auto; -} - -.tsd-signature-keyword { - color: var(--color-ts-keyword); - font-weight: normal; -} - -.tsd-signature-symbol { - color: var(--color-text-aside); - font-weight: normal; -} - -.tsd-signature-type { - font-style: italic; - font-weight: normal; -} - -.tsd-signatures { - padding: 0; - margin: 0 0 1em 0; - list-style-type: none; -} -.tsd-signatures .tsd-signature { - margin: 0; - border-color: var(--color-accent); - border-width: 1px 0; - transition: background-color 0.1s; -} -.tsd-description .tsd-signatures .tsd-signature { - border-width: 1px; -} - -ul.tsd-parameter-list, -ul.tsd-type-parameter-list { - list-style: square; - margin: 0; - padding-left: 20px; -} -ul.tsd-parameter-list > li.tsd-parameter-signature, -ul.tsd-type-parameter-list > li.tsd-parameter-signature { - list-style: none; - margin-left: -20px; -} -ul.tsd-parameter-list h5, -ul.tsd-type-parameter-list h5 { - font-size: 16px; - margin: 1em 0 0.5em 0; -} -.tsd-sources { - margin-top: 1rem; - font-size: 0.875em; -} -.tsd-sources a { - color: var(--color-text-aside); - text-decoration: underline; -} -.tsd-sources ul { - list-style: none; - padding: 0; -} - -.tsd-page-toolbar { - position: sticky; - z-index: 1; - top: 0; - left: 0; - width: 100%; - color: var(--color-text); - background: var(--color-background-secondary); - border-bottom: 1px var(--color-accent) solid; - transition: transform 0.3s ease-in-out; -} -.tsd-page-toolbar a { - color: var(--color-text); - text-decoration: none; -} -.tsd-page-toolbar a.title { - font-weight: bold; -} -.tsd-page-toolbar a.title:hover { - text-decoration: underline; -} -.tsd-page-toolbar .tsd-toolbar-contents { - display: flex; - justify-content: space-between; - height: 2.5rem; - margin: 0 auto; -} -.tsd-page-toolbar .table-cell { - position: relative; - white-space: nowrap; - line-height: 40px; -} -.tsd-page-toolbar .table-cell:first-child { - width: 100%; -} -.tsd-page-toolbar .tsd-toolbar-icon { - box-sizing: border-box; - line-height: 0; - padding: 12px 0; -} - -.tsd-widget { - display: inline-block; - overflow: hidden; - opacity: 0.8; - height: 40px; - transition: - opacity 0.1s, - background-color 0.2s; - vertical-align: bottom; - cursor: pointer; -} -.tsd-widget:hover { - opacity: 0.9; -} -.tsd-widget.active { - opacity: 1; - background-color: var(--color-accent); -} -.tsd-widget.no-caption { - width: 40px; -} -.tsd-widget.no-caption:before { - margin: 0; -} - -.tsd-widget.options, -.tsd-widget.menu { - display: none; -} -input[type="checkbox"] + .tsd-widget:before { - background-position: -120px 0; -} -input[type="checkbox"]:checked + .tsd-widget:before { - background-position: -160px 0; -} - -img { - max-width: 100%; -} - -.tsd-anchor-icon { - display: inline-flex; - align-items: center; - margin-left: 0.5rem; - vertical-align: middle; - color: var(--color-text); -} - -.tsd-anchor-icon svg { - width: 1em; - height: 1em; - visibility: hidden; -} - -.tsd-anchor-link:hover > .tsd-anchor-icon svg { - visibility: visible; -} - -.deprecated { - text-decoration: line-through !important; -} - -.warning { - padding: 1rem; - color: var(--color-warning-text); - background: var(--color-background-warning); -} - -.tsd-kind-project { - color: var(--color-ts-project); -} -.tsd-kind-module { - color: var(--color-ts-module); -} -.tsd-kind-namespace { - color: var(--color-ts-namespace); -} -.tsd-kind-enum { - color: var(--color-ts-enum); -} -.tsd-kind-enum-member { - color: var(--color-ts-enum-member); -} -.tsd-kind-variable { - color: var(--color-ts-variable); -} -.tsd-kind-function { - color: var(--color-ts-function); -} -.tsd-kind-class { - color: var(--color-ts-class); -} -.tsd-kind-interface { - color: var(--color-ts-interface); -} -.tsd-kind-constructor { - color: var(--color-ts-constructor); -} -.tsd-kind-property { - color: var(--color-ts-property); -} -.tsd-kind-method { - color: var(--color-ts-method); -} -.tsd-kind-call-signature { - color: var(--color-ts-call-signature); -} -.tsd-kind-index-signature { - color: var(--color-ts-index-signature); -} -.tsd-kind-constructor-signature { - color: var(--color-ts-constructor-signature); -} -.tsd-kind-parameter { - color: var(--color-ts-parameter); -} -.tsd-kind-type-literal { - color: var(--color-ts-type-literal); -} -.tsd-kind-type-parameter { - color: var(--color-ts-type-parameter); -} -.tsd-kind-accessor { - color: var(--color-ts-accessor); -} -.tsd-kind-get-signature { - color: var(--color-ts-get-signature); -} -.tsd-kind-set-signature { - color: var(--color-ts-set-signature); -} -.tsd-kind-type-alias { - color: var(--color-ts-type-alias); -} - -/* if we have a kind icon, don't color the text by kind */ -.tsd-kind-icon ~ span { - color: var(--color-text); -} - -* { - scrollbar-width: thin; - scrollbar-color: var(--color-accent) var(--color-icon-background); -} - -*::-webkit-scrollbar { - width: 0.75rem; -} - -*::-webkit-scrollbar-track { - background: var(--color-icon-background); -} - -*::-webkit-scrollbar-thumb { - background-color: var(--color-accent); - border-radius: 999rem; - border: 0.25rem solid var(--color-icon-background); -} - -/* mobile */ -@media (max-width: 769px) { - .tsd-widget.options, - .tsd-widget.menu { - display: inline-block; - } - - .container-main { - display: flex; - } - html .col-content { - float: none; - max-width: 100%; - width: 100%; - } - html .col-sidebar { - position: fixed !important; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 1024; - top: 0 !important; - bottom: 0 !important; - left: auto !important; - right: 0 !important; - padding: 1.5rem 1.5rem 0 0; - width: 75vw; - visibility: hidden; - background-color: var(--color-background); - transform: translate(100%, 0); - } - html .col-sidebar > *:last-child { - padding-bottom: 20px; - } - html .overlay { - content: ""; - display: block; - position: fixed; - z-index: 1023; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.75); - visibility: hidden; - } - - .to-has-menu .overlay { - animation: fade-in 0.4s; - } - - .to-has-menu .col-sidebar { - animation: pop-in-from-right 0.4s; - } - - .from-has-menu .overlay { - animation: fade-out 0.4s; - } - - .from-has-menu .col-sidebar { - animation: pop-out-to-right 0.4s; - } - - .has-menu body { - overflow: hidden; - } - .has-menu .overlay { - visibility: visible; - } - .has-menu .col-sidebar { - visibility: visible; - transform: translate(0, 0); - display: flex; - flex-direction: column; - gap: 1.5rem; - max-height: 100vh; - padding: 1rem 2rem; - } - .has-menu .tsd-navigation { - max-height: 100%; - } -} - -/* one sidebar */ -@media (min-width: 770px) { - .container-main { - display: grid; - grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); - grid-template-areas: "sidebar content"; - margin: 2rem auto; - } - - .col-sidebar { - grid-area: sidebar; - } - .col-content { - grid-area: content; - padding: 0 1rem; - } -} -@media (min-width: 770px) and (max-width: 1399px) { - .col-sidebar { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; - padding-top: 1rem; - } - .site-menu { - margin-top: 1rem; - } -} - -/* two sidebars */ -@media (min-width: 1200px) { - .container-main { - grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem); - grid-template-areas: "sidebar content toc"; - } - - .col-sidebar { - display: contents; - } - - .page-menu { - grid-area: toc; - padding-left: 1rem; - } - .site-menu { - grid-area: sidebar; - } - - .site-menu { - margin-top: 1rem 0; - } - - .page-menu, - .site-menu { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; - } -} diff --git a/docs/v2/classes/ImplementationError.html b/docs/v2/classes/ImplementationError.html deleted file mode 100644 index ecf6a1f..0000000 --- a/docs/v2/classes/ImplementationError.html +++ /dev/null @@ -1,13 +0,0 @@ -ImplementationError | firewalk

Class ImplementationError

An error thrown when a piece of code is found to be incorrectly implemented. If the maintainers of the -library have done everything right, this error should never be encountered.

-

Hierarchy

  • Error
    • ImplementationError

Constructors

Properties

message: string
name: string
stack?: string
prepareStackTrace?: ((err, stackTraces) => any)

Type declaration

stackTraceLimit: number

Methods

  • Create .stack property on a target object

    -

    Parameters

    • targetObject: object
    • Optional constructorOpt: Function

    Returns void

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/classes/InvalidConfigError.html b/docs/v2/classes/InvalidConfigError.html deleted file mode 100644 index e73fdb6..0000000 --- a/docs/v2/classes/InvalidConfigError.html +++ /dev/null @@ -1,12 +0,0 @@ -InvalidConfigError | firewalk

Class InvalidConfigError

An error thrown when an invalid configuration is provided.

-

Hierarchy

  • Error
    • InvalidConfigError

Constructors

Properties

message: string
name: string
stack?: string
prepareStackTrace?: ((err, stackTraces) => any)

Type declaration

stackTraceLimit: number

Methods

  • Create .stack property on a target object

    -

    Parameters

    • targetObject: object
    • Optional constructorOpt: Function

    Returns void

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/functions/createBatchMigrator.html b/docs/v2/functions/createBatchMigrator.html deleted file mode 100644 index 1989a9c..0000000 --- a/docs/v2/functions/createBatchMigrator.html +++ /dev/null @@ -1,18 +0,0 @@ -createBatchMigrator | firewalk

Function createBatchMigrator

  • Creates a migrator that facilitates database migrations. Accepts a custom traverser object as argument which the -migrator will use when traversing the collection and writing to documents. This migrator uses atomic batch writes -when writing to docs so the entire operation will fail if a single write isn't successful.

    -

    Type Parameters

    • D = DocumentData

    Parameters

    • traverser: Traverser<D>

      The traverser object that this migrator will use when traversing the collection and writing to documents.

      -

    Returns BatchMigrator<D>

    A new BatchMigrator object.

    -

    Remarks

    Note that the TraversalConfig.batchSize config value must not exceed 500 for a traverser used in a BatchMigrator. -This is because in Firestore, each write batch can write to a maximum of 500 documents.

    -

    Throws

    InvalidConfigError Thrown if the traversal config of the specified traverser is not compatible with this migrator.

    -
  • Creates a migrator that facilitates database migrations. The migrator creates a default traverser that -it uses when traversing the collection and writing to documents. This migrator uses atomic batch writes when writing -to docs so the entire operation will fail if a single write isn't successful.

    -

    Type Parameters

    • D = DocumentData

    Parameters

    • traversable: Traversable<D>

      A collection-like traversable group of documents.

      -
    • Optional traversalConfig: Partial<TraversalConfig>

      Optional. The traversal configuration with which the default traverser will be created.

      -

    Returns BatchMigrator<D>

    A new BatchMigrator object.

    -

    Remarks

    Note that the TraversalConfig.batchSize config value must not exceed 500 for a traverser used in a BatchMigrator. -This is because in Firestore, each write batch can write to a maximum of 500 documents.

    -

    Throws

    InvalidConfigError Thrown if the specified traversalConfig is invalid or incompatible with this migrator.

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/functions/createMigrator.html b/docs/v2/functions/createMigrator.html deleted file mode 100644 index d2d7ca5..0000000 --- a/docs/v2/functions/createMigrator.html +++ /dev/null @@ -1,13 +0,0 @@ -createMigrator | firewalk

Function createMigrator

  • Creates a migrator that facilitates database migrations. Accepts a custom traverser object as argument which the -migrator will use when traversing the collection and writing to documents. This migrator does not use atomic batch -writes so it is possible that when a write fails other writes go through.

    -

    Type Parameters

    • D = DocumentData

    Parameters

    • traverser: Traverser<D>

      The traverser object that this migrator will use when traversing the collection and writing to documents.

      -

    Returns DefaultMigrator<D>

    A new DefaultMigrator object.

    -
  • Creates a migrator that facilitates database migrations. The migrator creates a default traverser that -it uses when traversing the collection and writing to documents. This migrator does not use atomic batch writes -so it is possible that when a write fails other writes go through.

    -

    Type Parameters

    • D = DocumentData

    Parameters

    • traversable: Traversable<D>

      A collection-like traversable group of documents to migrate.

      -
    • Optional traversalConfig: Partial<TraversalConfig>

      Optional. The traversal configuration with which the default traverser will be created.

      -

    Returns DefaultMigrator<D>

    A new DefaultMigrator object.

    -

    Throws

    InvalidConfigError Thrown if the specified traversalConfig is invalid.

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/functions/createTraverser.html b/docs/v2/functions/createTraverser.html deleted file mode 100644 index e2a7d45..0000000 --- a/docs/v2/functions/createTraverser.html +++ /dev/null @@ -1,13 +0,0 @@ -createTraverser | firewalk

Function createTraverser

  • Creates an object which can be used to traverse a Firestore collection or, more generally, -a Traversable.

    -

    Type Parameters

    • D = DocumentData

    Parameters

    Returns Traverser<D>

    A new Traverser object.

    -

    Remarks

    For each batch of document snapshots in the traversable, this traverser invokes a specified -async callback and immediately moves to the next batch. It does not wait for the callback -Promise to resolve before moving to the next batch. That is, when maxConcurrentBatchCount > 1, -there is no guarantee that any given batch will finish processing before a later batch.

    -

    The traverser becomes faster as you increase maxConcurrentBatchCount, but this will consume -more memory. You should increase concurrency when you want to trade some memory for speed.

    -

    Throws

    InvalidConfigError Thrown if the specified config is invalid.

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/index.html b/docs/v2/index.html deleted file mode 100644 index c43c414..0000000 --- a/docs/v2/index.html +++ /dev/null @@ -1,146 +0,0 @@ -firewalk

firewalk

- - Firewalk - -

- -

- A light, fast, and memory-efficient collection traversal library for Firestore and Node.js. -

- -
-

- - Firewalk is released under the MIT license. - - - - - - - - - - PRs welcome! -

- -

Firewalk is a Node.js library that walks you through Firestore collections.

-

When you have millions of documents in a collection and you need to make changes to them or just read them, you can't just retrieve all of them at once as your program's memory usage will explode. Firewalk's configurable traverser objects let you do this in a simple, intuitive and memory-efficient way using batch processing with concurrency control.

-

Firewalk is an extremely light and well-typed library that is useful in a variety of scenarios. You can use it in database migration scripts (e.g. when you need to add a new field to all docs) or a scheduled Cloud Function that needs to check every doc in a collection periodically or even a locally run script that retrieves some data from a collection.

-

Note: This library was previously known as Firecode. We're currently in the process of porting over the documentation from the -previous site.

-

Read the introductory blog post â–¸

-

View the full documentation (docs) â–¸

-

Overview

    -
  1. Prerequisites
      -
    1. Compatibility Map
    2. -
    -
  2. -
  3. Installation
  4. -
  5. Core Concepts
  6. -
  7. Quick Start
  8. -
  9. More Examples
  10. -
  11. API
  12. -
  13. Upgrading
  14. -
  15. License
  16. -
-

Prerequisites

Firewalk is designed to work with the Firebase Admin SDK so if you haven't already installed it, you'll need add it as a dependency to your project.

-
npm install firebase-admin
-
-

Compatibility Map

Make sure to install the right version of Firewalk depending on the firebase-admin version your project is on.

- - - - - - - - - - - - - - - -
firewalkfirebase-admin
v1.xv9.x, v10.x
v2.xv11.x
-

Installation

You can add Firewalk to your project with npm or yarn.

-
npm install firewalk
-
-

Core Concepts

There are only 2 kinds of objects you need to be familiar with when using this library:

-
    -
  1. Traverser: An object that walks you through a collection of documents (or more generally a Traversable).

    -
  2. -
  3. Migrator: A convenience object used for database migrations. It lets you easily write to the documents within a given traversable and uses a traverser to do that. You can easily write your own migration logic in the traverser callback if you don't want to use a migrator.

    -
  4. -
-

Quick Start

Suppose we have a users collection and we want to send an email to each user. This is how easy it is to do that efficiently with a Firewalk traverser:

-
import { firestore } from 'firebase-admin';
import { createTraverser } from 'firewalk';

const usersCollection = firestore().collection('users');
const traverser = createTraverser(usersCollection);

const { batchCount, docCount } = await traverser.traverse(async (batchDocs, batchIndex) => {
const batchSize = batchDocs.length;
await Promise.all(
batchDocs.map(async (doc) => {
const { email, firstName } = doc.data();
await sendEmail({ to: email, content: `Hello ${firstName}!` });
})
);
console.log(`Batch ${batchIndex} done! We emailed ${batchSize} users in this batch.`);
});

console.log(`Traversal done! We emailed ${docCount} users in ${batchCount} batches!`); -
-

We are doing 3 things here:

-
    -
  1. Create a reference to the users collection
  2. -
  3. Pass that reference to the createTraverser() function
  4. -
  5. Invoke .traverse() with an async callback that is called for each batch of document snapshots
  6. -
-

This pretty much sums up the core functionality of this library! The .traverse() method returns a Promise that resolves when the entire traversal finishes, which can take a while if you have millions of docs. The Promise resolves with an object containing the traversal details e.g. the number of docs you touched.

-

More Examples

Traverse faster by increasing concurrency

const projectsColRef = firestore().collection('projects');
const traverser = createTraverser(projectsColRef, {
batchSize: 500,
// This means we are prepared to hold 500 * 20 = 10,000 docs in memory.
// We sacrifice some memory to traverse faster.
maxConcurrentBatchCount: 20,
});
const { docCount } = await traverser.traverse(async (_, batchIndex) => {
console.log(`Gonna process batch ${batchIndex} now!`);
// ...
});
console.log(`Traversed ${docCount} projects super-fast!`); -
-

Add a new field using a migrator

const projectsColRef = firestore().collection('projects');
const migrator = createMigrator(projectsColRef);
const { migratedDocCount } = await migrator.update('isCompleted', false);
console.log(`Updated ${migratedDocCount} projects!`); -
-

Add a new field derived from the previous fields

type UserDoc = {
firstName: string;
lastName: string;
};
const usersColRef = firestore().collection('users') as firestore.CollectionReference<UserDoc>;
const migrator = createMigrator(usersColRef);
const { migratedDocCount } = await migrator.updateWithDerivedData((snap) => {
const { firstName, lastName } = snap.data();
return {
fullName: `${firstName} ${lastName}`,
};
});
console.log(`Updated ${migratedDocCount} users!`); -
-

Migrate faster by increasing concurrency

const projectsColRef = firestore().collection('projects');
const migrator = createMigrator(projectsColRef, { maxConcurrentBatchCount: 25 });
const { migratedDocCount } = await migrator.update('isCompleted', false);
console.log(`Updated ${migratedDocCount} projects super-fast!`); -
-

Change traversal config

const walletsWithNegativeBalance = firestore().collection('wallets').where('money', '<', 0);
const migrator = createMigrator(walletsWithNegativeBalance, {
// We want each batch to have 500 docs. The size of the very last batch may be less than 500
batchSize: 500,
// We want to wait 500ms before moving to the next batch
sleepTimeBetweenBatches: 500,
});
// Wipe out their debts!
const { migratedDocCount } = await migrator.set({ money: 0 });
console.log(`Set ${migratedDocCount} wallets!`); -
-

Rename a field

const postsColGroup = firestore().collectionGroup('posts');
const migrator = createMigrator(postsColGroup);
const { migratedDocCount } = await migrator.renameField('postedAt', 'publishedAt');
console.log(`Updated ${migratedDocCount} posts!`); -
-

API

You can find the full API reference for firewalk here. We maintain detailed docs for every version! Here are some of the core functions that this library provides.

-

createTraverser

Creates an object which can be used to traverse a Firestore collection or, more generally, a Traversable.

-

For each batch of document snapshots in the traversable, the traverser invokes a specified async callback and immediately moves to the next batch. It does not wait for the callback Promise to resolve before moving to the next batch. That is, when maxConcurrentBatchCount > 1, there is no guarantee that any given batch will finish processing before a later batch.

-

The traverser becomes faster as you increase maxConcurrentBatchCount, but this will consume more memory. You should increase concurrency when you want to trade some memory for speed.

-

Complexity:

    -
  • Time complexity: O((N / batchSize) * (Q(batchSize) + C(batchSize) / maxConcurrentBatchCount))
  • -
  • Space complexity: O(maxConcurrentBatchCount * (batchSize * D + S))
  • -
  • Billing: max(1, N) reads
  • -
-

where:

-
    -
  • N: number of docs in the traversable
  • -
  • Q(batchSize): average batch query time
  • -
  • C(batchSize): average callback processing time
  • -
  • D: average document size
  • -
  • S: average extra space used by the callback
  • -
-

createMigrator

Creates a migrator that facilitates database migrations. The migrator accepts a custom traverser to traverse the collection. Otherwise it will create a default traverser with your desired traversal config. This migrator does not use atomic batch writes so it is possible that when a write fails other writes go through.

-

Complexity:

    -
  • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
  • -
  • Space complexity: SC(traverser) where S = O(batchSize)
  • -
  • Billing: max(1, N) reads, K writes
  • -
-

where:

-
    -
  • N: number of docs in the traversable
  • -
  • K: number of docs that passed the migration predicate (K<=N)
  • -
  • W(batchSize): average batch write time
  • -
  • TC(traverser): time complexity of the underlying traverser
  • -
  • SC(traverser): space complexity of the underlying traverser
  • -
-

createBatchMigrator

Creates a migrator that facilitates database migrations. The migrator accepts a custom traverser to traverse the collection. Otherwise it will create a default traverser with your desired traversal config. This migrator uses atomic batch writes so the entire operation will fail if a single write isn't successful.

-

Complexity:

    -
  • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
  • -
  • Space complexity: SC(traverser) where S = O(batchSize)
  • -
  • Billing: max(1, N) reads, K writes
  • -
-

where:

-
    -
  • N: number of docs in the traversable
  • -
  • K: number of docs that passed the migration predicate (K<=N)
  • -
  • W(batchSize): average batch write time
  • -
  • TC(traverser): time complexity of the underlying traverser
  • -
  • SC(traverser): space complexity of the underlying traverser
  • -
-

Upgrading

This project adheres to SemVer. Before upgrading to a new major version, make sure to check out the Releases page to view all the breaking changes.

-

License

This project is made available under the MIT License.

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/interfaces/BatchMigrator.html b/docs/v2/interfaces/BatchMigrator.html deleted file mode 100644 index 697bbf3..0000000 --- a/docs/v2/interfaces/BatchMigrator.html +++ /dev/null @@ -1,256 +0,0 @@ -BatchMigrator | firewalk

Interface BatchMigrator<D>

A batch migrator object that uses atomic batch writes.

-
interface BatchMigrator {
    traverser: Traverser<D>;
    deleteField(field): Promise<MigrationResult>;
    deleteFields(...fields): Promise<MigrationResult>;
    onAfterBatchComplete(callback): void;
    onBeforeBatchStart(callback): void;
    renameField(oldField, newField): Promise<MigrationResult>;
    renameFields(...changes): Promise<MigrationResult>;
    set(data, options): Promise<MigrationResult>;
    set(data): Promise<MigrationResult>;
    setWithDerivedData(getData, options): Promise<MigrationResult>;
    setWithDerivedData(getData): Promise<MigrationResult>;
    update(data, precondition?): Promise<MigrationResult>;
    update(field, value, ...moreFieldsOrPrecondition): Promise<MigrationResult>;
    updateWithDerivedData(getData, precondition?): Promise<MigrationResult>;
    updateWithDerivedData(getData): Promise<MigrationResult>;
    withPredicate(predicate): BatchMigrator<D>;
    withTraverser(traverser): BatchMigrator<D>;
}

Type Parameters

  • D = firestore.DocumentData

Hierarchy

Properties

traverser: Traverser<D>

The underlying traverser.

-

Methods

  • Deletes the specified field from all documents in this collection.

    -

    Parameters

    • field: string | FieldPath

      The field to delete.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Deletes the specified fields from all documents in this collection.

    -

    Parameters

    • Rest ...fields: (string | FieldPath)[]

      A list of fields to delete.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -

    Example

    const field1 = new firestore.FieldPath('name', 'last');
    const field2 = 'lastModifiedAt';
    await migrator.deleteFields(field1, field2); -
    -
  • Registers a callback function that fires after a batch is processed. You can register at most 1 callback. If you call -this function multiple times, only the last callback will be registered.

    -

    Parameters

    • callback: BatchCallback<D>

      A synchronous callback that takes batch doc snapshots and the 0-based batch index as its arguments.

      -

    Returns void

  • Registers a callback function that fires right before a batch starts processing. You can register at most 1 -callback. If you call this function multiple times, only the last callback will be registered.

    -

    Parameters

    • callback: BatchCallback<D>

      A synchronous callback that takes batch doc snapshots and the 0-based batch index as its arguments.

      -

    Returns void

  • Renames the specified field in all documents in this collection. Ignores the fields that are missing.

    -

    Parameters

    • oldField: string | FieldPath

      The old field.

      -
    • newField: string | FieldPath

      The new field.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Renames the specified fields in all documents in this collection. Ignores the fields that are missing.

    -

    Parameters

    • Rest ...changes: [oldField: string | FieldPath, newField: string | FieldPath][]

      A list of [oldField, newField] tuples. Each tuple is an array of 2 elements: -the old field to rename and the new field.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -

    Example

    const change1 = [new firestore.FieldPath('name', 'last'), 'lastName'];
    const change2 = ['lastModifiedAt', 'lastUpdatedAt'];
    await migrator.renameFields(change1, change2); -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • data: PartialWithFieldValue<D>

      A data object with which to set each document.

      -
    • options: SetOptions

      An object to configure the set behavior.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • data: WithFieldValue<D>

      A data object with which to set each document.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • getData: SetPartialDataGetter<D>

      A function that takes a document snapshot and returns a data object with -which to set each document.

      -
    • options: SetOptions

      An object to configure the set behavior.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • getData: SetDataGetter<D>

      A function that takes a document snapshot and returns a data object with -which to set each document.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • data: UpdateData<D>

      A non-empty data object with which to update each document.

      -
    • Optional precondition: Precondition

      A Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided field-value pair.

    -

    Parameters

    • field: string | FieldPath

      The first field to update in each document.

      -
    • value: any

      The first value corresponding to the first field. Must not be undefined.

      -
    • Rest ...moreFieldsOrPrecondition: any[]

      An alternating list of field paths and values to update, -optionally followed by a Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • getData: UpdateDataGetter<D>

      A function that takes a document snapshot and returns a non-empty data object with -which to update each document.

      -
    • Optional precondition: Precondition

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • getData: UpdateFieldValueGetter<D>

      A function that takes a document snapshot and returns an alternating list of field -paths and values to update, optionally followed by a Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Applies a migration predicate that indicates whether to migrate the current document or not. By default, all -documents are migrated.

    -

    Parameters

    • predicate: MigrationPredicate<D>

      A function that takes a document snapshot and returns a boolean indicating whether to migrate it.

      -

    Returns BatchMigrator<D>

    A new BatchMigrator object.

    -

    Remarks

    If you have already applied other migration predicates to this migrator, this and all the other predicates will be -evaluated and the resulting booleans will be AND'd to get the boolean that indicates whether to migrate the document -or not. This is consistent with the intuitive default behavior that all documents are migrated.

    -

    Example

    const newMigrator = migrator
    .withPredicate((doc) => doc.get('name') !== undefined)
    .withPredicate((doc) => doc.ref.path.startsWith('users/')); -
    -

    In the above case newMigrator will migrate only the documents whose name field is not missing AND whose path -starts with "users/".

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/interfaces/DefaultMigrator.html b/docs/v2/interfaces/DefaultMigrator.html deleted file mode 100644 index 0ef76d9..0000000 --- a/docs/v2/interfaces/DefaultMigrator.html +++ /dev/null @@ -1,256 +0,0 @@ -DefaultMigrator | firewalk

Interface DefaultMigrator<D>

A batch migrator object that does not use atomic batch writes.

-
interface DefaultMigrator {
    traverser: Traverser<D>;
    deleteField(field): Promise<MigrationResult>;
    deleteFields(...fields): Promise<MigrationResult>;
    onAfterBatchComplete(callback): void;
    onBeforeBatchStart(callback): void;
    renameField(oldField, newField): Promise<MigrationResult>;
    renameFields(...changes): Promise<MigrationResult>;
    set(data, options): Promise<MigrationResult>;
    set(data): Promise<MigrationResult>;
    setWithDerivedData(getData, options): Promise<MigrationResult>;
    setWithDerivedData(getData): Promise<MigrationResult>;
    update(data, precondition?): Promise<MigrationResult>;
    update(field, value, ...moreFieldsOrPrecondition): Promise<MigrationResult>;
    updateWithDerivedData(getData, precondition?): Promise<MigrationResult>;
    updateWithDerivedData(getData): Promise<MigrationResult>;
    withPredicate(predicate): DefaultMigrator<D>;
    withTraverser(traverser): DefaultMigrator<D>;
}

Type Parameters

  • D = firestore.DocumentData

Hierarchy

Properties

traverser: Traverser<D>

The underlying traverser.

-

Methods

  • Deletes the specified field from all documents in this collection.

    -

    Parameters

    • field: string | FieldPath

      The field to delete.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Deletes the specified fields from all documents in this collection.

    -

    Parameters

    • Rest ...fields: (string | FieldPath)[]

      A list of fields to delete.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -

    Example

    const field1 = new firestore.FieldPath('name', 'last');
    const field2 = 'lastModifiedAt';
    await migrator.deleteFields(field1, field2); -
    -
  • Registers a callback function that fires after a batch is processed. You can register at most 1 callback. If you call -this function multiple times, only the last callback will be registered.

    -

    Parameters

    • callback: BatchCallback<D>

      A synchronous callback that takes batch doc snapshots and the 0-based batch index as its arguments.

      -

    Returns void

  • Registers a callback function that fires right before a batch starts processing. You can register at most 1 -callback. If you call this function multiple times, only the last callback will be registered.

    -

    Parameters

    • callback: BatchCallback<D>

      A synchronous callback that takes batch doc snapshots and the 0-based batch index as its arguments.

      -

    Returns void

  • Renames the specified field in all documents in this collection. Ignores the fields that are missing.

    -

    Parameters

    • oldField: string | FieldPath

      The old field.

      -
    • newField: string | FieldPath

      The new field.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Renames the specified fields in all documents in this collection. Ignores the fields that are missing.

    -

    Parameters

    • Rest ...changes: [oldField: string | FieldPath, newField: string | FieldPath][]

      A list of [oldField, newField] tuples. Each tuple is an array of 2 elements: -the old field to rename and the new field.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -

    Example

    const change1 = [new firestore.FieldPath('name', 'last'), 'lastName'];
    const change2 = ['lastModifiedAt', 'lastUpdatedAt'];
    await migrator.renameFields(change1, change2); -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • data: PartialWithFieldValue<D>

      A data object with which to set each document.

      -
    • options: SetOptions

      An object to configure the set behavior.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • data: WithFieldValue<D>

      A data object with which to set each document.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • getData: SetPartialDataGetter<D>

      A function that takes a document snapshot and returns a data object with -which to set each document.

      -
    • options: SetOptions

      An object to configure the set behavior.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • getData: SetDataGetter<D>

      A function that takes a document snapshot and returns a data object with -which to set each document.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • data: UpdateData<D>

      A non-empty data object with which to update each document.

      -
    • Optional precondition: Precondition

      A Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided field-value pair.

    -

    Parameters

    • field: string | FieldPath

      The first field to update in each document.

      -
    • value: any

      The first value corresponding to the first field. Must not be undefined.

      -
    • Rest ...moreFieldsOrPrecondition: any[]

      An alternating list of field paths and values to update, -optionally followed by a Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • getData: UpdateDataGetter<D>

      A function that takes a document snapshot and returns a non-empty data object with -which to update each document.

      -
    • Optional precondition: Precondition

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • getData: UpdateFieldValueGetter<D>

      A function that takes a document snapshot and returns an alternating list of field -paths and values to update, optionally followed by a Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Applies a migration predicate that indicates whether to migrate the current document or not. By default, all -documents are migrated.

    -

    Parameters

    • predicate: MigrationPredicate<D>

      A function that takes a document snapshot and returns a boolean indicating whether to migrate it.

      -

    Returns DefaultMigrator<D>

    A new DefaultMigrator object.

    -

    Remarks

    If you have already applied other migration predicates to this migrator, this and all the other predicates will be -evaluated and the resulting booleans will be AND'd to get the boolean that indicates whether to migrate the document -or not. This is consistent with the intuitive default behavior that all documents are migrated.

    -

    Example

    const newMigrator = migrator
    .withPredicate((doc) => doc.get('name') !== undefined)
    .withPredicate((doc) => doc.ref.path.startsWith('users/')); -
    -

    In the above case newMigrator will migrate only the documents whose name field is not missing AND whose path -starts with "users/".

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/interfaces/MigrationResult.html b/docs/v2/interfaces/MigrationResult.html deleted file mode 100644 index ef8910f..0000000 --- a/docs/v2/interfaces/MigrationResult.html +++ /dev/null @@ -1,6 +0,0 @@ -MigrationResult | firewalk

Interface MigrationResult

Represents an object that contains the details of a migration.

-
interface MigrationResult {
    migratedDocCount: number;
    traversalResult: TraversalResult;
}

Properties

migratedDocCount: number

The number of documents that have been migrated.

-
traversalResult: TraversalResult

The traversal result of the underlying traverser.

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/interfaces/Migrator.html b/docs/v2/interfaces/Migrator.html deleted file mode 100644 index c73d0d9..0000000 --- a/docs/v2/interfaces/Migrator.html +++ /dev/null @@ -1,256 +0,0 @@ -Migrator | firewalk

Interface Migrator<D>

Represents the general interface of a migrator.

-
interface Migrator {
    traverser: Traverser<D>;
    deleteField(field): Promise<MigrationResult>;
    deleteFields(...fields): Promise<MigrationResult>;
    onAfterBatchComplete(callback): void;
    onBeforeBatchStart(callback): void;
    renameField(oldField, newField): Promise<MigrationResult>;
    renameFields(...changes): Promise<MigrationResult>;
    set(data, options): Promise<MigrationResult>;
    set(data): Promise<MigrationResult>;
    setWithDerivedData(getData, options): Promise<MigrationResult>;
    setWithDerivedData(getData): Promise<MigrationResult>;
    update(data, precondition?): Promise<MigrationResult>;
    update(field, value, ...moreFieldsOrPrecondition): Promise<MigrationResult>;
    updateWithDerivedData(getData, precondition?): Promise<MigrationResult>;
    updateWithDerivedData(getData): Promise<MigrationResult>;
    withPredicate(predicate): Migrator<D>;
    withTraverser(traverser): Migrator<D>;
}

Type Parameters

  • D = firestore.DocumentData

Hierarchy

Properties

traverser: Traverser<D>

The underlying traverser.

-

Methods

  • Deletes the specified field from all documents in this collection.

    -

    Parameters

    • field: string | FieldPath

      The field to delete.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Deletes the specified fields from all documents in this collection.

    -

    Parameters

    • Rest ...fields: (string | FieldPath)[]

      A list of fields to delete.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -

    Example

    const field1 = new firestore.FieldPath('name', 'last');
    const field2 = 'lastModifiedAt';
    await migrator.deleteFields(field1, field2); -
    -
  • Registers a callback function that fires after a batch is processed. You can register at most 1 callback. If you call -this function multiple times, only the last callback will be registered.

    -

    Parameters

    • callback: BatchCallback<D>

      A synchronous callback that takes batch doc snapshots and the 0-based batch index as its arguments.

      -

    Returns void

  • Registers a callback function that fires right before a batch starts processing. You can register at most 1 -callback. If you call this function multiple times, only the last callback will be registered.

    -

    Parameters

    • callback: BatchCallback<D>

      A synchronous callback that takes batch doc snapshots and the 0-based batch index as its arguments.

      -

    Returns void

  • Renames the specified field in all documents in this collection. Ignores the fields that are missing.

    -

    Parameters

    • oldField: string | FieldPath

      The old field.

      -
    • newField: string | FieldPath

      The new field.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Renames the specified fields in all documents in this collection. Ignores the fields that are missing.

    -

    Parameters

    • Rest ...changes: [oldField: string | FieldPath, newField: string | FieldPath][]

      A list of [oldField, newField] tuples. Each tuple is an array of 2 elements: -the old field to rename and the new field.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -

    Example

    const change1 = [new firestore.FieldPath('name', 'last'), 'lastName'];
    const change2 = ['lastModifiedAt', 'lastUpdatedAt'];
    await migrator.renameFields(change1, change2); -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • data: PartialWithFieldValue<D>

      A data object with which to set each document.

      -
    • options: SetOptions

      An object to configure the set behavior.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • data: WithFieldValue<D>

      A data object with which to set each document.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • getData: SetPartialDataGetter<D>

      A function that takes a document snapshot and returns a data object with -which to set each document.

      -
    • options: SetOptions

      An object to configure the set behavior.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Sets all documents in this collection with the provided data.

    -

    Parameters

    • getData: SetDataGetter<D>

      A function that takes a document snapshot and returns a data object with -which to set each document.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • data: UpdateData<D>

      A non-empty data object with which to update each document.

      -
    • Optional precondition: Precondition

      A Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided field-value pair.

    -

    Parameters

    • field: string | FieldPath

      The first field to update in each document.

      -
    • value: any

      The first value corresponding to the first field. Must not be undefined.

      -
    • Rest ...moreFieldsOrPrecondition: any[]

      An alternating list of field paths and values to update, -optionally followed by a Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • getData: UpdateDataGetter<D>

      A function that takes a document snapshot and returns a non-empty data object with -which to update each document.

      -
    • Optional precondition: Precondition

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Updates all documents in this collection with the provided data.

    -

    Parameters

    • getData: UpdateFieldValueGetter<D>

      A function that takes a document snapshot and returns an alternating list of field -paths and values to update, optionally followed by a Precondition to enforce on this update.

      -

    Returns Promise<MigrationResult>

    A Promise resolving to an object representing the details of the migration.

    -

    Remarks

    Complexity:

    -
      -
    • Time complexity: TC(traverser) where C(batchSize) = W(batchSize)
    • -
    • Space complexity: SC(traverser) where S = O(batchSize)
    • -
    • Billing: max(1, N) reads, K writes
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • K: number of docs that passed the migration predicate (K<=N)
    • -
    • W(batchSize): average batch write time
    • -
    • TC(traverser): time complexity of the underlying traverser
    • -
    • SC(traverser): space complexity of the underlying traverser
    • -
    -
  • Applies a migration predicate that indicates whether to migrate the current document or not. By default, all -documents are migrated.

    -

    Parameters

    • predicate: MigrationPredicate<D>

      A function that takes a document snapshot and returns a boolean indicating whether to migrate it.

      -

    Returns Migrator<D>

    A new Migrator object.

    -

    Remarks

    If you have already applied other migration predicates to this migrator, this and all the other predicates will be -evaluated and the resulting booleans will be AND'd to get the boolean that indicates whether to migrate the document -or not. This is consistent with the intuitive default behavior that all documents are migrated.

    -

    Example

    const newMigrator = migrator
    .withPredicate((doc) => doc.get('name') !== undefined)
    .withPredicate((doc) => doc.ref.path.startsWith('users/')); -
    -

    In the above case newMigrator will migrate only the documents whose name field is not missing AND whose path -starts with "users/".

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/interfaces/TraversalConfig.html b/docs/v2/interfaces/TraversalConfig.html deleted file mode 100644 index f80826a..0000000 --- a/docs/v2/interfaces/TraversalConfig.html +++ /dev/null @@ -1,42 +0,0 @@ -TraversalConfig | firewalk

Interface TraversalConfig

The configuration with which a traverser is created.

-
interface TraversalConfig {
    batchSize: number;
    maxBatchRetryCount: number;
    maxConcurrentBatchCount: number;
    maxDocCount: number;
    sleepTimeBetweenBatches: number;
    sleepTimeBetweenTrials: number | ((lastTrialIndex) => number);
}

Properties

batchSize: number

The number of documents that will be traversed in each batch.

-

Default Value

250
-
-
maxBatchRetryCount: number

The maximum number of times the traverser will retry processing a given batch, in case of an error. -By default, batches are not retried.

-

Remarks

This field must be a non-negative integer representing the maximum number of times the traverser will -retry processing a given batch. By default, the traverser invokes the batch callback only once i.e. -with 0 retries but, if maxBatchRetryCount > 0, it will keep invoking the callback until it succeeds -or the total number of retries reaches maxBatchRetryCount.

-

Default Value

0
-
-
maxConcurrentBatchCount: number

The maximum number of batches that can be held in memory and processed concurrently.

-

Remarks

This field must be a positive integer representing the maximum number of batches that you wish -the traverser to process concurrently at any given time. The traverser will pause when the number -of batches being processed concurrently reaches this number and continue when a batch has been -processed. This means that the higher the value of maxConcurrentBatchCount, the more memory the -traverser will consume but also the faster it will finish the traversal.

-

Example

const projectsColRef = firestore().collection('projects');
const traverser = createTraverser(projectsColRef, {
batchSize: 500,
maxConcurrentBatchCount: 20,
}); -
-

By providing this config we have indicated that we want each batch to contain 500 documents and the -traverser to process 20 batches concurrently at any given time. This means we have ensured that our -machine can handle 500 * 20 = 10,000 documents in memory at any given time.

-

Default Value

1
-
-
maxDocCount: number

The maximum number of documents that will be traversed.

-

Default Value

Infinity

-
sleepTimeBetweenBatches: number

The amount of time (in ms) to "sleep" before moving on to the next batch.

-

Default Value

0
-
-
sleepTimeBetweenTrials: number | ((lastTrialIndex) => number)

A non-negative integer or a function that takes the 0-based index of the last trial and returns a -non-negative integer indicating the amount of time (in ms) to "sleep" before retrying processing -the current batch. This is useful if you want to implement something like exponential backoff.

-

Type declaration

    • (lastTrialIndex): number
    • Parameters

      • lastTrialIndex: number

      Returns number

Default Value

1000
-
-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/interfaces/TraversalResult.html b/docs/v2/interfaces/TraversalResult.html deleted file mode 100644 index c664767..0000000 --- a/docs/v2/interfaces/TraversalResult.html +++ /dev/null @@ -1,6 +0,0 @@ -TraversalResult | firewalk

Interface TraversalResult

Represents an object that contains the details of a traversal.

-
interface TraversalResult {
    batchCount: number;
    docCount: number;
}

Properties

Properties

batchCount: number

The number of batches that have been retrieved in this traversal.

-
docCount: number

The number of documents that have been retrieved in this traversal.

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/interfaces/TraverseEachConfig.html b/docs/v2/interfaces/TraverseEachConfig.html deleted file mode 100644 index 9d76aa6..0000000 --- a/docs/v2/interfaces/TraverseEachConfig.html +++ /dev/null @@ -1,6 +0,0 @@ -TraverseEachConfig | firewalk

Interface TraverseEachConfig

The configuration that a given traverser uses in sequential traversals.

-
interface TraverseEachConfig {
    sleepTimeBetweenDocs: number;
}

Properties

sleepTimeBetweenDocs: number

The amount of time (in ms) to "sleep" before moving to the next doc.

-

Default Value

0
-
-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/interfaces/Traverser.html b/docs/v2/interfaces/Traverser.html deleted file mode 100644 index b44e5b2..0000000 --- a/docs/v2/interfaces/Traverser.html +++ /dev/null @@ -1,55 +0,0 @@ -Traverser | firewalk

Interface Traverser<D>

A traverser object that facilitates Firestore collection traversals.

-
interface Traverser {
    traversable: Traversable<D>;
    traversalConfig: TraversalConfig;
    traverse(callback): Promise<TraversalResult>;
    traverseEach(callback, config?): Promise<TraversalResult>;
    withConfig(config): Traverser<D>;
    withExitEarlyPredicate(predicate): Traverser<D>;
}

Type Parameters

  • D = firestore.DocumentData

Properties

traversable: Traversable<D>

The underlying traversable.

-
traversalConfig: TraversalConfig

Existing traversal config.

-

Methods

  • Traverses the entire collection in batches of the size specified in traversal config. Invokes the specified -async callback for each batch of document snapshots and immediately moves to the next batch. Does not wait -for the callback Promise to resolve before moving to the next batch so there is no guarantee that any given -batch will finish processing before a later batch.

    -

    Parameters

    • callback: BatchCallback<D>

      An asynchronous callback function to invoke for each batch of document snapshots.

      -

    Returns Promise<TraversalResult>

    A Promise resolving to an object representing the details of the traversal.

    -

    Remarks

    This method throws only when the batch callback throws and the number of retries equals maxBatchRetryCount. -The last error thrown by the batch callback propagates up to this method.

    -

    Complexity:

    -
      -
    • Time complexity: O((N / batchSize) * (Q(batchSize) + C(batchSize) / maxConcurrentBatchCount))
    • -
    • Space complexity: O(maxConcurrentBatchCount * (batchSize * D + S))
    • -
    • Billing: max(1, N) reads
    • -
    -

    where:

    -
      -
    • N: number of docs in the traversable
    • -
    • Q(batchSize): average batch query time
    • -
    • C(batchSize): average callback processing time
    • -
    • D: average document size
    • -
    • S: average extra space used by the callback
    • -
    -
  • Traverses the entire collection in batches of the size specified in traversal config. Invokes the specified -callback sequentially for each document snapshot in each batch.

    -

    Parameters

    • callback: TraverseEachCallback<D>

      An asynchronous callback function to invoke for each document snapshot in each batch.

      -
    • Optional config: Partial<TraverseEachConfig>

      The sequential traversal configuration.

      -

    Returns Promise<TraversalResult>

    A Promise resolving to an object representing the details of the traversal. The Promise resolves -when the entire traversal ends.

    -
  • Applies the specified exit-early predicate to the traverser. After retrieving each batch, the traverser -will evaluate the predicate with the current batch doc snapshots and batch index and decide whether to -continue the traversal or exit early.

    -

    Parameters

    • predicate: ExitEarlyPredicate<D>

      A synchronous function that takes batch doc snapshots and the 0-based batch index and -returns a boolean indicating whether to exit traversal early.

      -

    Returns Traverser<D>

    A new Traverser object.

    -

    Remarks

    If you have already applied other exit-early predicates to this traverser, this and all the other predicates -will be evaluated and the resulting booleans will be OR'd to get the boolean that indicates whether to exit -early or not. This is consistent with the intuitive default behavior that the traverser doesn't exit early.

    -

    Example

    const newTraverser = traverser
    .withExitEarlyPredicate((batchDocs) => batchDocs.some((d) => d.get('name') === undefined))
    .withExitEarlyPredicate((_, batchIndex) => batchIndex === 99); -
    -

    In the above case newTraverser will exit early if the name field of one of the docs in the batch is -missing OR if the batch index is 99. That is, it will never reach batch 100 and depending on the documents -in the database it may exit earlier than 99.

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/modules.html b/docs/v2/modules.html deleted file mode 100644 index 6316626..0000000 --- a/docs/v2/modules.html +++ /dev/null @@ -1,24 +0,0 @@ -firewalk

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/types/BatchCallback.html b/docs/v2/types/BatchCallback.html deleted file mode 100644 index 7c27085..0000000 --- a/docs/v2/types/BatchCallback.html +++ /dev/null @@ -1,2 +0,0 @@ -BatchCallback | firewalk

Type alias BatchCallback<D>

BatchCallback<D>: ((batchDocs, batchIndex) => void | Promise<void>)

Type Parameters

  • D = firestore.DocumentData

Type declaration

    • (batchDocs, batchIndex): void | Promise<void>
    • A function that takes batch doc snapshots and the 0-based batch index as its arguments.

      -

      Parameters

      • batchDocs: firestore.QueryDocumentSnapshot<D>[]
      • batchIndex: number

      Returns void | Promise<void>

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/types/ExitEarlyPredicate.html b/docs/v2/types/ExitEarlyPredicate.html deleted file mode 100644 index b262f75..0000000 --- a/docs/v2/types/ExitEarlyPredicate.html +++ /dev/null @@ -1,3 +0,0 @@ -ExitEarlyPredicate | firewalk

Type alias ExitEarlyPredicate<D>

ExitEarlyPredicate<D>: ((...args) => boolean)

Type Parameters

  • D = firestore.DocumentData

Type declaration

    • (...args): boolean
    • A function that takes batch doc snapshots and the 0-based batch index and returns a boolean -indicating whether to exit traversal early.

      -

      Parameters

      Returns boolean

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/types/MigrationPredicate.html b/docs/v2/types/MigrationPredicate.html deleted file mode 100644 index acc4ea1..0000000 --- a/docs/v2/types/MigrationPredicate.html +++ /dev/null @@ -1,2 +0,0 @@ -MigrationPredicate | firewalk

Type alias MigrationPredicate<D>

MigrationPredicate<D>: ((doc) => boolean)

Type Parameters

  • D = firestore.DocumentData

Type declaration

    • (doc): boolean
    • A function that takes a document snapshot and returns a boolean indicating whether to migrate it.

      -

      Parameters

      • doc: firestore.QueryDocumentSnapshot<D>

      Returns boolean

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/types/SetDataGetter.html b/docs/v2/types/SetDataGetter.html deleted file mode 100644 index ba7726d..0000000 --- a/docs/v2/types/SetDataGetter.html +++ /dev/null @@ -1,2 +0,0 @@ -SetDataGetter | firewalk

Type alias SetDataGetter<D>

SetDataGetter<D>: ((doc) => firestore.WithFieldValue<D>)

Type Parameters

  • D = firestore.DocumentData

Type declaration

    • (doc): firestore.WithFieldValue<D>
    • A function that takes a document snapshot and derives the data with which to set that document.

      -

      Parameters

      • doc: firestore.QueryDocumentSnapshot<D>

      Returns firestore.WithFieldValue<D>

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/types/SetOptions.html b/docs/v2/types/SetOptions.html deleted file mode 100644 index 3307596..0000000 --- a/docs/v2/types/SetOptions.html +++ /dev/null @@ -1,13 +0,0 @@ -SetOptions | firewalk

Type alias SetOptions

SetOptions: {
    merge?: boolean;
} | {
    mergeFields?: (string | FieldPath)[];
}

An options object that configures the behavior of set() calls in -DocumentReference, WriteBatch and Transaction. These calls can be -configured to perform granular merges instead of overwriting the target -documents in their entirety.

-

Type declaration

  • Optional Readonly merge?: boolean

Type declaration

  • Optional Readonly mergeFields?: (string | FieldPath)[]

Param: merge

Changes the behavior of a set() call to only replace the -values specified in its data argument. Fields omitted from the set() call -remain untouched. If your input sets any field to an empty map, all nested -fields are overwritten.

-

Param: mergeFields

Changes the behavior of set() calls to only replace -the specified field paths. Any field path that is not specified is ignored -and remains untouched. If your input sets any field to an empty map, all -nested fields are overwritten.

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/types/SetPartialDataGetter.html b/docs/v2/types/SetPartialDataGetter.html deleted file mode 100644 index 0cf372f..0000000 --- a/docs/v2/types/SetPartialDataGetter.html +++ /dev/null @@ -1,2 +0,0 @@ -SetPartialDataGetter | firewalk

Type alias SetPartialDataGetter<D>

SetPartialDataGetter<D>: ((doc) => firestore.PartialWithFieldValue<D>)

Type Parameters

  • D = firestore.DocumentData

Type declaration

    • (doc): firestore.PartialWithFieldValue<D>
    • A function that takes a document snapshot and derives the data with which to partially set that document.

      -

      Parameters

      • doc: firestore.QueryDocumentSnapshot<D>

      Returns firestore.PartialWithFieldValue<D>

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/types/Traversable.html b/docs/v2/types/Traversable.html deleted file mode 100644 index e174c32..0000000 --- a/docs/v2/types/Traversable.html +++ /dev/null @@ -1,3 +0,0 @@ -Traversable | firewalk

Type alias Traversable<D>

Traversable<D>: firestore.CollectionReference<D> | firestore.CollectionGroup<D> | firestore.Query<D>

A collection-like group of documents. Can be one of CollectionReference, -CollectionGroup and Query.

-

Type Parameters

  • D = firestore.DocumentData

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/types/TraverseEachCallback.html b/docs/v2/types/TraverseEachCallback.html deleted file mode 100644 index 4899f35..0000000 --- a/docs/v2/types/TraverseEachCallback.html +++ /dev/null @@ -1,3 +0,0 @@ -TraverseEachCallback | firewalk

Type alias TraverseEachCallback<D>

TraverseEachCallback<D>: ((doc, docIndex, batchIndex) => void | Promise<void>)

Type Parameters

  • D = firestore.DocumentData

Type declaration

    • (doc, docIndex, batchIndex): void | Promise<void>
    • An asynchronous function that takes a document snapshot, its 0-based index within the batch, and -the 0-based index of the batch as arguments.

      -

      Parameters

      • doc: firestore.QueryDocumentSnapshot<D>
      • docIndex: number
      • batchIndex: number

      Returns void | Promise<void>

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/types/UpdateDataGetter.html b/docs/v2/types/UpdateDataGetter.html deleted file mode 100644 index 1444c1d..0000000 --- a/docs/v2/types/UpdateDataGetter.html +++ /dev/null @@ -1,2 +0,0 @@ -UpdateDataGetter | firewalk

Type alias UpdateDataGetter<D>

UpdateDataGetter<D>: ((doc) => firestore.UpdateData<D>)

Type Parameters

  • D = firestore.DocumentData

Type declaration

    • (doc): firestore.UpdateData<D>
    • A function that takes a document snapshot and derives the data with which to update that document.

      -

      Parameters

      • doc: firestore.QueryDocumentSnapshot<D>

      Returns firestore.UpdateData<D>

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/v2/types/UpdateFieldValueGetter.html b/docs/v2/types/UpdateFieldValueGetter.html deleted file mode 100644 index 0171d1e..0000000 --- a/docs/v2/types/UpdateFieldValueGetter.html +++ /dev/null @@ -1,4 +0,0 @@ -UpdateFieldValueGetter | firewalk

Type alias UpdateFieldValueGetter<D>

UpdateFieldValueGetter<D>: ((doc) => [string | firestore.FieldPath, any, ...any[]])

Type Parameters

  • D = firestore.DocumentData

Type declaration

    • (doc): [string | firestore.FieldPath, any, ...any[]]
    • A function that takes a document snapshot and returns an alternating list of field paths and -values to update within that document, optionally followed by a Precondition to enforce on -the update.

      -

      Parameters

      • doc: firestore.QueryDocumentSnapshot<D>

      Returns [string | firestore.FieldPath, any, ...any[]]

Generated using TypeDoc

\ No newline at end of file