Skip to content
This repository was archived by the owner on Oct 25, 2023. It is now read-only.

Commit ce8140b

Browse files
authored
split node.slice into node.getByOrigin and node.iterate (#397)
1 parent 4b7b8a2 commit ce8140b

File tree

9 files changed

+59
-40
lines changed

9 files changed

+59
-40
lines changed

archaeologist/src/background/suggestAssociations.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export async function suggestAssociations(
77
limit?: number
88
): Promise<TNode[]> {
99
const beagle = Beagle.fromString(phrase)
10-
const iter = storage.node.slice({})
10+
const iter = storage.node.iterate()
1111
const suggested: TNode[] = []
1212
limit = limit ?? 8
1313
// FIXME(akindyakov): This is a dirty hack to limit time of search by limiting

archaeologist/src/omnibox/omnibox.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ const lookUpAndSuggestFor = lodash.debounce(
5252
suggest: (suggestResults: browser.Omnibox.SuggestResult[]) => void
5353
): Promise<void> => {
5454
const beagle = Beagle.fromString(text)
55-
const iter = storage.node.slice({})
55+
const iter = storage.node.iterate()
5656
const suggestions: browser.Omnibox.SuggestResult[] = []
5757
for (
5858
let node = await iter.next();

elementary/src/grid/SearchGrid.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ import { SmallCard } from '../SmallCard'
1313
import { ShrinkCard } from '../ShrinkCard'
1414
import { NodeTimeBadge } from '../NodeTimeBadge'
1515

16-
import { TNodeSliceIterator } from 'smuggler-api'
17-
import type { TNode, StorageApi } from 'smuggler-api'
16+
import type { TNode, INodeIterator, StorageApi } from 'smuggler-api'
1817

1918
import { log, isAbortError, errorise } from 'armoury'
2019

@@ -71,12 +70,12 @@ export const SearchGrid = ({
7170
storage: StorageApi
7271
}>) => {
7372
const [search, setUpSearch] = useState<{
74-
iter: TNodeSliceIterator
73+
iter: INodeIterator
7574
beagle: Beagle
7675
} | null>(null)
7776
useEffect(() => {
7877
setUpSearch({
79-
iter: storage.node.slice({}),
78+
iter: storage.node.iterate(),
8079
beagle: Beagle.fromString(q || undefined),
8180
})
8281
}, [q])
@@ -111,7 +110,7 @@ const SearchGridScroll = ({
111110
storage,
112111
}: React.PropsWithChildren<{
113112
beagle: Beagle
114-
iter: TNodeSliceIterator
113+
iter: INodeIterator
115114
onCardClick?: (arg0: TNode) => void
116115
portable?: boolean
117116
className?: string

smuggler-api/src/api_datacenter.ts

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import {
3232
} from './types'
3333
import type {
3434
CreateNodeArgs,
35-
GetNodeSliceArgs,
3635
NodeBatchRequestBody,
3736
CreateEdgeArgs,
3837
StorageApi,
@@ -227,6 +226,25 @@ async function getNode({
227226
return node
228227
}
229228

229+
async function getNodesByOrigin({
230+
origin,
231+
}: {
232+
origin: OriginId
233+
signal?: AbortSignal
234+
}): Promise<TNode[]> {
235+
const sliceAll: GetNodeSliceArgs = {
236+
start_time: 0, // since the beginning of time
237+
bucket_time_size: 366 * 24 * 60 * 60,
238+
origin,
239+
}
240+
const ret: TNode[] = []
241+
const iter = _getNodesSliceIter(sliceAll)
242+
for (let node = await iter.next(); node != null; node = await iter.next()) {
243+
ret.push(node)
244+
}
245+
return ret
246+
}
247+
230248
async function getNodeBatch(
231249
req: NodeBatchRequestBody,
232250
signal?: AbortSignal
@@ -347,19 +365,23 @@ const getNodesSlice: GetNodesSliceFn = async ({
347365
}
348366
}
349367

368+
type GetNodeSliceArgs = {
369+
start_time?: number
370+
origin?: OriginId
371+
bucket_time_size?: number
372+
}
373+
350374
function _getNodesSliceIter({
351-
end_time,
352375
start_time,
353-
limit,
354376
origin,
355377
bucket_time_size,
356378
}: GetNodeSliceArgs) {
357379
return new TNodeSliceIterator(
358380
getNodesSlice,
359381
start_time,
360-
end_time,
382+
undefined,
361383
bucket_time_size,
362-
limit,
384+
undefined,
363385
origin
364386
)
365387
}
@@ -782,9 +804,10 @@ export function makeDatacenterStorageApi(): StorageApi {
782804
return {
783805
node: {
784806
get: getNode,
807+
getByOrigin: getNodesByOrigin,
785808
update: updateNode,
786809
create: createNode,
787-
slice: _getNodesSliceIter,
810+
iterate: () => _getNodesSliceIter({}),
788811
delete: deleteNode,
789812
bulkDelete: bulkDeleteNodes,
790813
batch: {

smuggler-api/src/node_slice_iterator.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export interface INodeIterator {
55
next: () => Promise<Optional<TNode>>
66
total: () => number
77
exhausted: () => boolean
8+
abort: () => void
89
}
910

1011
export type GetNodesSliceFn = ({

smuggler-api/src/steroid/node.ts

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -314,10 +314,9 @@ export async function lookupNodes(
314314
return storage.node.get({ nid: key.nid, signal })
315315
} else if ('webBookmark' in key) {
316316
const { id, stableUrl } = genOriginId(key.webBookmark.url)
317-
const query = { ...SLICE_ALL, origin: { id } }
318-
const iter = storage.node.slice(query)
317+
const nodes: TNode[] = await storage.node.getByOrigin({ origin: { id } })
319318

320-
for (let node = await iter.next(); node != null; node = await iter.next()) {
319+
for (const node of nodes) {
321320
const nodeUrl = node.extattrs?.web?.url
322321
if (nodeUrl && stabiliseUrlForOriginId(nodeUrl) === stableUrl) {
323322
return node
@@ -326,34 +325,32 @@ export async function lookupNodes(
326325
return undefined
327326
} else if ('webQuote' in key) {
328327
const { id, stableUrl } = genOriginId(key.webQuote.url)
329-
const query = { ...SLICE_ALL, origin: { id } }
330-
const iter = storage.node.slice(query)
328+
const nodes: TNode[] = await storage.node.getByOrigin({ origin: { id } })
331329

332-
const nodes: TNode[] = []
333-
for (let node = await iter.next(); node != null; node = await iter.next()) {
330+
const ret: TNode[] = []
331+
for (const node of nodes) {
334332
if (NodeUtil.isWebQuote(node) && node.extattrs?.web_quote) {
335333
if (
336334
stabiliseUrlForOriginId(node.extattrs.web_quote.url) === stableUrl
337335
) {
338-
nodes.push(node)
336+
ret.push(node)
339337
}
340338
}
341339
}
342340
return nodes
343341
} else if ('url' in key) {
344342
const { id, stableUrl } = genOriginId(key.url)
345-
const query = { ...SLICE_ALL, origin: { id } }
346-
const iter = storage.node.slice(query)
343+
const nodes: TNode[] = await storage.node.getByOrigin({ origin: { id } })
347344

348-
const nodes: TNode[] = []
349-
for (let node = await iter.next(); node != null; node = await iter.next()) {
345+
const ret: TNode[] = []
346+
for (const node of nodes) {
350347
if (NodeUtil.isWebBookmark(node) && node.extattrs?.web) {
351348
if (stabiliseUrlForOriginId(node.extattrs.web.url) === stableUrl) {
352-
nodes.push(node)
349+
ret.push(node)
353350
}
354351
}
355352
}
356-
return nodes
353+
return ret
357354
}
358355

359356
throw new Error(`Failed to lookup nodes, unsupported key ${key}`)

smuggler-api/src/storage_api.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { MimeType } from 'armoury'
22
import type { Optional } from 'armoury'
3-
import { TNodeSliceIterator } from './node_slice_iterator'
3+
import { INodeIterator } from './node_slice_iterator'
44
import {
55
TNode,
66
NodePatchRequest,
@@ -39,14 +39,6 @@ export type CreateNodeArgs = {
3939
created_at?: Date
4040
}
4141

42-
export type GetNodeSliceArgs = {
43-
end_time?: number
44-
start_time?: number
45-
limit?: number
46-
origin?: OriginId
47-
bucket_time_size?: number
48-
}
49-
5042
export type NodeBatchRequestBody = {
5143
nids: Nid[]
5244
}
@@ -74,6 +66,13 @@ export type SwitchEdgeStickinessArgs = {
7466
export type StorageApi = {
7567
node: {
7668
get: ({ nid, signal }: { nid: Nid; signal?: AbortSignal }) => Promise<TNode>
69+
getByOrigin: ({
70+
origin,
71+
signal,
72+
}: {
73+
origin: OriginId
74+
signal?: AbortSignal
75+
}) => Promise<TNode[]>
7776
update: (
7877
args: { nid: Nid } & NodePatchRequest,
7978
signal?: AbortSignal
@@ -82,7 +81,7 @@ export type StorageApi = {
8281
args: CreateNodeArgs,
8382
signal?: AbortSignal
8483
) => Promise<NewNodeResponse>
85-
slice: (args: GetNodeSliceArgs) => TNodeSliceIterator
84+
iterate: () => INodeIterator
8685
delete: ({
8786
nid,
8887
signal,

smuggler-api/src/storage_api_throwing.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ export function makeAlwaysThrowingStorageApi(): StorageApi {
1414
return {
1515
node: {
1616
get: throwError,
17+
getByOrigin: throwError,
1718
update: throwError,
1819
create: throwError,
19-
slice: throwError,
20+
iterate: throwError,
2021
delete: throwError,
2122
bulkDelete: throwError,
2223
batch: {

truthsayer/src/card/SearchAndConnect.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
import React, { useContext } from 'react'
1+
import React from 'react'
22
import { Modal, Form } from 'react-bootstrap'
33

44
import { SearchGrid } from 'elementary'
55

66
import lodash from 'lodash'
77
import { MzdGlobalContext } from '../lib/global'
8-
import { StorageApi } from 'smuggler-api'
98

109
type SearchAndConnectJinnModalProps = {
1110
nid: string

0 commit comments

Comments
 (0)