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

Commit 6a798b1

Browse files
committed
node.slice: rm timebased inputs, split origin lookup
1 parent b21b053 commit 6a798b1

File tree

8 files changed

+56
-31
lines changed

8 files changed

+56
-31
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.slice()
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.slice()
5656
const suggestions: browser.Omnibox.SuggestResult[] = []
5757
for (
5858
let node = await iter.next();

elementary/src/grid/SearchGrid.tsx

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

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

1919
import { log, isAbortError, errorise } from 'armoury'
@@ -71,12 +71,12 @@ export const SearchGrid = ({
7171
storage: StorageApi
7272
}>) => {
7373
const [search, setUpSearch] = useState<{
74-
iter: TNodeSliceIterator
74+
iter: INodeIterator
7575
beagle: Beagle
7676
} | null>(null)
7777
useEffect(() => {
7878
setUpSearch({
79-
iter: storage.node.slice({}),
79+
iter: storage.node.slice(),
8080
beagle: Beagle.fromString(q || undefined),
8181
})
8282
}, [q])
@@ -111,7 +111,7 @@ const SearchGridScroll = ({
111111
storage,
112112
}: React.PropsWithChildren<{
113113
beagle: Beagle
114-
iter: TNodeSliceIterator
114+
iter: INodeIterator
115115
onCardClick?: (arg0: TNode) => void
116116
portable?: boolean
117117
className?: string

smuggler-api/src/api_datacenter.ts

Lines changed: 27 additions & 2 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,6 +365,12 @@ 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({
351375
start_time,
352376
origin,
@@ -780,9 +804,10 @@ export function makeDatacenterStorageApi(): StorageApi {
780804
return {
781805
node: {
782806
get: getNode,
807+
getByOrigin: getNodesByOrigin,
783808
update: updateNode,
784809
create: createNode,
785-
slice: _getNodesSliceIter,
810+
slice: () => _getNodesSliceIter({}),
786811
delete: deleteNode,
787812
bulkDelete: bulkDeleteNodes,
788813
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: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import {
2121
genOriginId,
2222
} from 'armoury'
2323
import type { Optional } from 'armoury'
24-
import { CreateNodeArgs, GetNodeSliceArgs, StorageApi } from '../storage_api'
24+
import { CreateNodeArgs, StorageApi } from '../storage_api'
2525
import { NodeUtil } from '../typesutil'
2626
import lodash from 'lodash'
2727

@@ -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: GetNodeSliceArgs = { ...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: GetNodeSliceArgs = { ...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: GetNodeSliceArgs = { ...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 & 8 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,12 +39,6 @@ export type CreateNodeArgs = {
3939
created_at?: Date
4040
}
4141

42-
export type GetNodeSliceArgs = {
43-
start_time?: number
44-
origin?: OriginId
45-
bucket_time_size?: number
46-
}
47-
4842
export type NodeBatchRequestBody = {
4943
nids: Nid[]
5044
}
@@ -72,6 +66,13 @@ export type SwitchEdgeStickinessArgs = {
7266
export type StorageApi = {
7367
node: {
7468
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[]>
7576
update: (
7677
args: { nid: Nid } & NodePatchRequest,
7778
signal?: AbortSignal
@@ -80,7 +81,7 @@ export type StorageApi = {
8081
args: CreateNodeArgs,
8182
signal?: AbortSignal
8283
) => Promise<NewNodeResponse>
83-
slice: (args: GetNodeSliceArgs) => TNodeSliceIterator
84+
slice: () => INodeIterator
8485
delete: ({
8586
nid,
8687
signal,

smuggler-api/src/storage_api_throwing.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export function makeAlwaysThrowingStorageApi(): StorageApi {
1414
return {
1515
node: {
1616
get: throwError,
17+
getByOrigin: throwError,
1718
update: throwError,
1819
create: throwError,
1920
slice: throwError,

0 commit comments

Comments
 (0)