index.jsView |
---|
129 | 129 … | if (value.length > 32) { |
130 | 130 … | value = {'/': value} |
131 | 131 … | } |
132 | 132 … | |
133 | | - const result = await this._get(key) |
134 | | - let root = result.root |
135 | | - |
136 | | - if (result.value) { |
137 | | - setValue(root, value) |
| 133 … | + if (isEmpty(this.root)) { |
| 134 … | + this.root['/'] = createNode(key, [], value)['/'] |
138 | 135 … | } else { |
139 | | - if (result.extensionIndex !== undefined) { |
140 | | - |
141 | | - let extension = getExtension(root) |
142 | | - const extensionKey = extension[result.extensionIndex] |
143 | | - const remExtension = extension.subarray(result.extensionIndex + 1) |
144 | | - extension = extension.subarray(0, result.extensionIndex) |
| 136 … | + const result = await this._get(key) |
| 137 … | + let root = result.root |
145 | 138 … | |
146 | | - setExtension(root, remExtension) |
147 | | - const branch = [] |
148 | | - branch[extensionKey] = {'/': root['/']} |
149 | | - root['/'] = createNode(extension, branch)['/'] |
150 | | - } |
| 139 … | + if (result.value) { |
| 140 … | + setValue(root, value) |
| 141 … | + } else { |
| 142 … | + if (result.extensionIndex !== undefined) { |
| 143 … | + |
| 144 … | + let extension = getExtension(root) |
| 145 … | + const extensionKey = extension[result.extensionIndex] |
| 146 … | + const remExtension = extension.subarray(result.extensionIndex + 1) |
| 147 … | + extension = extension.subarray(0, result.extensionIndex) |
151 | 148 … | |
152 | | - |
153 | | - if (result.index < key.length) { |
154 | | - const keySegment = key[result.index] |
155 | | - const extension = key.subarray(result.index + 1, key.length) |
156 | | - const newNode = createNode(extension, [], value) |
157 | | - const rootBranch = getBranch(root) |
158 | | - rootBranch[keySegment] = newNode |
159 | | - setBranch(root, rootBranch) |
160 | | - } else { |
161 | | - setValue(root, value) |
| 149 … | + setExtension(root, remExtension) |
| 150 … | + const branch = [] |
| 151 … | + branch[extensionKey] = {'/': root['/']} |
| 152 … | + root['/'] = createNode(extension, branch)['/'] |
| 153 … | + } |
| 154 … | + |
| 155 … | + |
| 156 … | + if (result.index < key.length) { |
| 157 … | + const keySegment = key[result.index] |
| 158 … | + const extension = key.subarray(result.index + 1, key.length) |
| 159 … | + const newNode = createNode(extension, [], value) |
| 160 … | + const rootBranch = getBranch(root) |
| 161 … | + rootBranch[keySegment] = newNode |
| 162 … | + setBranch(root, rootBranch) |
| 163 … | + } else { |
| 164 … | + setValue(root, value) |
| 165 … | + } |
162 | 166 … | } |
163 | 167 … | } |
164 | 168 … | } |
165 | 169 … | |
302 | 306 … | if (val !== undefined) { |
303 | 307 … | node['/'][VALUE] = val |
304 | 308 … | } |
305 | 309 … | } |
| 310 … | + |
| 311 … | +function isEmpty (node) { |
| 312 … | + const branch = getBranch(node) |
| 313 … | + return node['/'].length === 2 && branch[0] === undefined && branch[1] === undefined |
| 314 … | +} |