@xyo-network/diviner-payload-memory 5.1.21 → 5.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/diviner-payload-memory",
3
- "version": "5.1.21",
3
+ "version": "5.1.23",
4
4
  "description": "Primary SDK for using XYO Protocol 2.0",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -30,23 +30,26 @@
30
30
  "types": "dist/neutral/index.d.ts",
31
31
  "files": [
32
32
  "dist",
33
- "src"
33
+ "src",
34
+ "!**/*.bench.*",
35
+ "!**/*.spec.*",
36
+ "!**/*.test.*"
34
37
  ],
35
38
  "dependencies": {
36
- "@xyo-network/diviner-payload-generic": "~5.1.21"
39
+ "@xyo-network/diviner-payload-generic": "~5.1.23"
37
40
  },
38
41
  "devDependencies": {
39
- "@xylabs/delay": "~5.0.24",
42
+ "@xylabs/delay": "~5.0.33",
40
43
  "@xylabs/ts-scripts-yarn3": "~7.2.8",
41
44
  "@xylabs/tsconfig": "~7.2.8",
42
- "@xylabs/vitest-extended": "~5.0.24",
43
- "@xyo-network/archivist-memory": "~5.1.21",
44
- "@xyo-network/diviner-payload-model": "~5.1.21",
45
- "@xyo-network/node-memory": "~5.1.21",
46
- "@xyo-network/payload-builder": "~5.1.21",
47
- "@xyo-network/payload-model": "~5.1.21",
45
+ "@xylabs/vitest-extended": "~5.0.33",
46
+ "@xyo-network/archivist-memory": "~5.1.23",
47
+ "@xyo-network/diviner-payload-model": "~5.1.23",
48
+ "@xyo-network/node-memory": "~5.1.23",
49
+ "@xyo-network/payload-builder": "~5.1.23",
50
+ "@xyo-network/payload-model": "~5.1.23",
48
51
  "typescript": "~5.9.3",
49
- "vitest": "~4.0.8"
52
+ "vitest": "~4.0.9"
50
53
  },
51
54
  "publishConfig": {
52
55
  "access": "public"
@@ -1,2 +0,0 @@
1
- import '@xylabs/vitest-extended';
2
- //# sourceMappingURL=Diviner.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Diviner.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/Diviner.spec.ts"],"names":[],"mappings":"AAEA,OAAO,yBAAyB,CAAA"}
@@ -1,2 +0,0 @@
1
- import '@xylabs/vitest-extended';
2
- //# sourceMappingURL=MemoryPayloadDiviner.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MemoryPayloadDiviner.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/MemoryPayloadDiviner.spec.ts"],"names":[],"mappings":"AAEA,OAAO,yBAAyB,CAAA"}
@@ -1,155 +0,0 @@
1
- /* eslint-disable max-nested-callbacks */
2
-
3
- import '@xylabs/vitest-extended'
4
-
5
- import { delay } from '@xylabs/delay'
6
- import { MemoryArchivist } from '@xyo-network/archivist-memory'
7
- import { GenericPayloadDivinerConfigSchema } from '@xyo-network/diviner-payload-generic'
8
- import type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'
9
- import { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'
10
- import { MemoryNode } from '@xyo-network/node-memory'
11
- import { PayloadBuilder } from '@xyo-network/payload-builder'
12
- import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'
13
- import {
14
- beforeAll, describe, expect, it,
15
- } from 'vitest'
16
-
17
- import { MemoryPayloadDiviner } from '../MemoryPayloadDiviner.ts'
18
-
19
- /**
20
- * @group module
21
- * @group diviner
22
- */
23
-
24
- describe('GenericPayloadDiviner', () => {
25
- let archivist: MemoryArchivist
26
- let sut: MemoryPayloadDiviner
27
- let node: MemoryNode
28
- const payloadA: Payload<{ schema: string; url: string }> = {
29
- schema: 'network.xyo.test',
30
- url: 'https://xyo.network',
31
- }
32
- const payloadB: Payload<{ foo: string[]; schema: string }> = {
33
- foo: ['bar', 'baz'],
34
- schema: 'network.xyo.debug',
35
- }
36
- const payloadC: Payload<{ foo: string[]; schema: string }> = {
37
- foo: ['one', 'two'],
38
- schema: 'network.xyo.debug',
39
- }
40
- const payloadD: Payload<{ foo: string[]; schema: string }> = {
41
- foo: ['aaa', 'bbb'],
42
- schema: 'network.xyo.debug',
43
- }
44
- const insertedPayloads: WithStorageMeta<Payload>[] = []
45
- beforeAll(async () => {
46
- archivist = await MemoryArchivist.create({
47
- account: 'random',
48
- config: { name: 'test', schema: MemoryArchivist.defaultConfigSchema },
49
- })
50
- for (const payload of [payloadA, payloadB, payloadC, payloadD]) {
51
- await delay(2)
52
- const [insertedPayload] = await archivist.insert([payload])
53
- insertedPayloads.push(insertedPayload)
54
- }
55
- sut = await MemoryPayloadDiviner.create({
56
- account: 'random',
57
- config: {
58
- archivist: archivist.address,
59
- schema: GenericPayloadDivinerConfigSchema,
60
- },
61
- })
62
- node = await MemoryNode.create({
63
- account: 'random',
64
- config: { schema: MemoryNode.defaultConfigSchema },
65
- })
66
- const modules = [archivist, sut]
67
- await node.start()
68
- await Promise.all(
69
- modules.map(async (mod) => {
70
- await node.register(mod)
71
- await node.attach(mod.address, true)
72
- }),
73
- )
74
- await sut.start()
75
- })
76
- describe('with filter for', () => {
77
- describe('schema', () => {
78
- describe('single', () => {
79
- it.each(['network.xyo.test', 'network.xyo.debug'])('only returns payloads of that schema', async (schema) => {
80
- const schemas = [schema]
81
- const query = new PayloadBuilder<PayloadDivinerQueryPayload>({ schema: PayloadDivinerQuerySchema }).fields({ schemas }).build()
82
- const results = await sut.divine([query])
83
- expect(results.length).toBeGreaterThan(0)
84
- expect(results.every(result => result.schema === schema)).toBe(true)
85
- })
86
- it('only return single payload of that schema', async () => {
87
- const schemas = ['network.xyo.debug']
88
- const query = new PayloadBuilder<PayloadDivinerQueryPayload>({ schema: PayloadDivinerQuerySchema })
89
- .fields({ limit: 1, schemas })
90
- .build()
91
- const results = await sut.divine([query])
92
- expect(results.length).toBe(1)
93
- expect(await PayloadBuilder.dataHash(results[0])).toBe(await PayloadBuilder.dataHash(insertedPayloads[3]))
94
- expect(results.every(result => result.schema === 'network.xyo.debug')).toBe(true)
95
- })
96
- it('only return single payload of that schema (desc)', async () => {
97
- const schemas = ['network.xyo.debug']
98
- const query = new PayloadBuilder<PayloadDivinerQueryPayload>({ schema: PayloadDivinerQuerySchema })
99
- .fields({
100
- limit: 1, order: 'desc', schemas,
101
- })
102
- .build()
103
- const results = await sut.divine([query])
104
- expect(results.length).toBe(1)
105
- expect(PayloadBuilder.omitStorageMeta(results[0])).toEqual(PayloadBuilder.omitStorageMeta(insertedPayloads[3]))
106
- expect(await PayloadBuilder.dataHash(results[0])).toBe(await PayloadBuilder.dataHash(insertedPayloads[3]))
107
- expect(results.every(result => result.schema === 'network.xyo.debug')).toBe(true)
108
- })
109
- it('only return single payload of that schema (asc)', async () => {
110
- const schemas = ['network.xyo.debug']
111
- const query = new PayloadBuilder<PayloadDivinerQueryPayload>({ schema: PayloadDivinerQuerySchema })
112
- .fields({
113
- limit: 1, order: 'asc', schemas,
114
- })
115
- .build()
116
- const results = await sut.divine([query])
117
- expect(results.length).toBe(1)
118
- expect(await PayloadBuilder.dataHash(results[0])).toBe(await PayloadBuilder.dataHash(payloadB))
119
- expect(results.every(result => result.schema === 'network.xyo.debug')).toBe(true)
120
- })
121
- })
122
- describe('multiple', () => {
123
- it('only returns payloads of that schema', async () => {
124
- const schemas = ['network.xyo.test', 'network.xyo.debug']
125
- const query = new PayloadBuilder<PayloadDivinerQueryPayload>({ schema: PayloadDivinerQuerySchema }).fields({ schemas }).build()
126
- const results = await sut.divine([query])
127
- expect(results.length).toBeGreaterThan(0)
128
- expect(results.every(result => schemas.includes(result.schema))).toBe(true)
129
- })
130
- })
131
- })
132
- describe('custom field', () => {
133
- describe('property', () => {
134
- it('only returns payloads with that property', async () => {
135
- type WithUrl = { url?: string }
136
- const url = payloadA.url
137
- const query = new PayloadBuilder<PayloadDivinerQueryPayload & WithUrl>({ schema: PayloadDivinerQuerySchema }).fields({ url }).build()
138
- const results = await sut.divine([query])
139
- expect(results.length).toBeGreaterThan(0)
140
- expect(results.every(result => (result as WithUrl)?.url === url)).toBe(true)
141
- })
142
- })
143
- describe('array', () => {
144
- const cases: string[][] = [['bar'], ['baz'], ['bar', 'baz']]
145
- it.each(cases)('only returns payloads that have an array containing all the values supplied', async (...foo) => {
146
- type WithFoo = { foo?: string[] }
147
- const query = new PayloadBuilder<PayloadDivinerQueryPayload & WithFoo>({ schema: PayloadDivinerQuerySchema }).fields({ foo }).build()
148
- const results = await sut.divine([query])
149
- expect(results.length).toBeGreaterThan(0)
150
- expect(results.every(result => foo.every(v => (result as unknown as WithFoo)?.foo?.includes(v)))).toBe(true)
151
- })
152
- })
153
- })
154
- })
155
- })
@@ -1,183 +0,0 @@
1
- /* eslint-disable max-nested-callbacks */
2
-
3
- import '@xylabs/vitest-extended'
4
-
5
- import { delay } from '@xylabs/delay'
6
- import { MemoryArchivist } from '@xyo-network/archivist-memory'
7
- import { GenericPayloadDivinerConfigSchema } from '@xyo-network/diviner-payload-generic'
8
- import type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'
9
- import { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'
10
- import { MemoryNode } from '@xyo-network/node-memory'
11
- import { PayloadBuilder } from '@xyo-network/payload-builder'
12
- import type {
13
- Payload,
14
- WithStorageMeta,
15
- } from '@xyo-network/payload-model'
16
- import {
17
- isSequenceStorageMeta,
18
- SequenceConstants,
19
- } from '@xyo-network/payload-model'
20
- import {
21
- beforeAll,
22
- describe, expect, it,
23
- } from 'vitest'
24
-
25
- import { MemoryPayloadDiviner } from '../MemoryPayloadDiviner.ts'
26
-
27
- /**
28
- * @group module
29
- * @group diviner
30
- */
31
-
32
- describe('MemoryPayloadDiviner', () => {
33
- let archivist: MemoryArchivist
34
- let sut: MemoryPayloadDiviner
35
- let node: MemoryNode
36
- let payloadA: Payload<{ schema: string; url: string }>
37
- let payloadB: Payload<{ foo: string[]; schema: string }>
38
- let insertedPayloads: WithStorageMeta<Payload>[]
39
- beforeAll(async () => {
40
- payloadA = {
41
- schema: 'network.xyo.test',
42
- url: 'https://xyo.network',
43
- }
44
- await delay(2)
45
- payloadB = {
46
- foo: ['bar', 'baz'],
47
- schema: 'network.xyo.debug',
48
- }
49
-
50
- archivist = await MemoryArchivist.create({
51
- account: 'random',
52
- config: { name: 'test', schema: MemoryArchivist.defaultConfigSchema },
53
- })
54
- insertedPayloads = await archivist.insert([payloadA, payloadB])
55
- sut = await MemoryPayloadDiviner.create({
56
- account: 'random',
57
- config: {
58
- archivist: archivist.address,
59
- schema: GenericPayloadDivinerConfigSchema,
60
- },
61
- })
62
- node = await MemoryNode.create({
63
- account: 'random',
64
- config: { schema: MemoryNode.defaultConfigSchema },
65
- })
66
- const modules = [archivist, sut]
67
- await node.start()
68
- await Promise.all(
69
- modules.map(async (mod) => {
70
- await node.register(mod)
71
- await node.attach(mod.address, true)
72
- }),
73
- )
74
- })
75
- describe('with filter for', () => {
76
- describe('schema', () => {
77
- describe('single', () => {
78
- it.each(['network.xyo.test', 'network.xyo.debug'])('only returns payloads of that schema', async (schema) => {
79
- const schemas = [schema]
80
- const query = new PayloadBuilder<PayloadDivinerQueryPayload>({ schema: PayloadDivinerQuerySchema }).fields({ schemas }).build()
81
- const results = await sut.divine([query])
82
- expect(results.length).toBeGreaterThan(0)
83
- expect(results.every(result => result.schema === schema)).toBe(true)
84
- })
85
- })
86
- describe('multiple', () => {
87
- it('only returns payloads of that schema', async () => {
88
- const schemas = ['network.xyo.test', 'network.xyo.debug']
89
- const query = new PayloadBuilder<PayloadDivinerQueryPayload>({ schema: PayloadDivinerQuerySchema }).fields({ schemas }).build()
90
- const results = await sut.divine([query])
91
- expect(results.length).toBeGreaterThan(0)
92
- expect(results.every(result => schemas.includes(result.schema))).toBe(true)
93
- })
94
- })
95
- })
96
- describe('sequence', () => {
97
- describe('when order supplied', () => {
98
- describe('asc', () => {
99
- const order = 'asc'
100
- it('returns payloads greater than the supplied sequence', async () => {
101
- const cursor = SequenceConstants.minLocalSequence
102
- const query = new PayloadBuilder<PayloadDivinerQueryPayload>({ schema: PayloadDivinerQuerySchema })
103
- .fields({ order, cursor })
104
- .build()
105
- const results = await sut.divine([query])
106
- expect(results.length).toBeGreaterThan(0)
107
- expect(results.every(isSequenceStorageMeta)).toBeTruthy()
108
- expect((results.filter(isSequenceStorageMeta)).every(result => result._sequence > cursor)).toBe(true)
109
- })
110
- it.skip('returns payloads equal to the supplied sequence (not a thing with _sequence)', async () => {
111
- // eslint-disable-next-line sonarjs/no-alphabetical-sort
112
- const cursor = insertedPayloads.toSorted()[1]._sequence
113
- const query = new PayloadBuilder<PayloadDivinerQueryPayload>({ schema: PayloadDivinerQuerySchema })
114
- .fields({ order, cursor })
115
- .build()
116
- const results = await sut.divine([query])
117
- expect(results.length).toBeGreaterThan(0)
118
- expect(results.every(isSequenceStorageMeta)).toBeTruthy()
119
- expect((results.filter(isSequenceStorageMeta)).every(result => result._sequence !== cursor)).toBe(true)
120
- })
121
- })
122
- describe('desc', () => {
123
- const order = 'desc'
124
- it('returns payloads less than the supplied sequence', async () => {
125
- const cursor = SequenceConstants.maxLocalSequence
126
- const query = new PayloadBuilder<PayloadDivinerQueryPayload>({ schema: PayloadDivinerQuerySchema })
127
- .fields({ order, cursor })
128
- .build()
129
- const results = await sut.divine([query])
130
- expect(results.length).toBeGreaterThan(0)
131
- expect(results.every(isSequenceStorageMeta)).toBeTruthy()
132
- expect((results.filter(isSequenceStorageMeta)).every(result => result._sequence < cursor)).toBe(true)
133
- })
134
- it.skip('returns payloads equal to the supplied sequence (not a thing with _sequence)', async () => {
135
- // eslint-disable-next-line sonarjs/no-alphabetical-sort
136
- const cursor = insertedPayloads.toSorted()[0]._sequence
137
- const query = new PayloadBuilder<PayloadDivinerQueryPayload>({ schema: PayloadDivinerQuerySchema })
138
- .fields({ order, cursor })
139
- .build()
140
- const results = await sut.divine([query])
141
- expect(results.length).toBeGreaterThan(0)
142
- expect(results.every(isSequenceStorageMeta)).toBe(true)
143
- expect((results.filter(isSequenceStorageMeta)).every(result => result._sequence !== cursor)).toBe(true)
144
- })
145
- })
146
- })
147
- describe('when order not supplied', () => {
148
- it.skip('returns payloads equal to the supplied sequence (not a thing with _sequence)', async () => {
149
- for (const payload of insertedPayloads) {
150
- const cursor = payload._sequence
151
- const query = new PayloadBuilder<PayloadDivinerQueryPayload>({ schema: PayloadDivinerQuerySchema }).fields({ cursor }).build()
152
- const results = await sut.divine([query])
153
- expect(results.length).toBeGreaterThan(0)
154
- expect(results.every(isSequenceStorageMeta)).toBe(true)
155
- expect((results.filter(isSequenceStorageMeta)).every(result => result._sequence !== cursor)).toBe(true)
156
- }
157
- })
158
- })
159
- })
160
- describe('custom field', () => {
161
- describe('property', () => {
162
- it('only returns payloads with that property', async () => {
163
- type WithUrl = { url?: string }
164
- const url = payloadA.url
165
- const query = new PayloadBuilder<PayloadDivinerQueryPayload & WithUrl>({ schema: PayloadDivinerQuerySchema }).fields({ url }).build()
166
- const results = await sut.divine([query])
167
- expect(results.length).toBeGreaterThan(0)
168
- expect(results.every(result => (result as WithUrl)?.url === url)).toBe(true)
169
- })
170
- })
171
- describe('array', () => {
172
- const cases: string[][] = [['bar'], ['baz'], ['bar', 'baz']]
173
- it.each(cases)('only returns payloads that have an array containing all the values supplied', async (...foo) => {
174
- type WithFoo = { foo?: string[] }
175
- const query = new PayloadBuilder<PayloadDivinerQueryPayload & WithFoo>({ schema: PayloadDivinerQuerySchema }).fields({ foo }).build()
176
- const results = await sut.divine([query])
177
- expect(results.length).toBeGreaterThan(0)
178
- expect(results.every(result => foo.every(v => (result as unknown as WithFoo)?.foo?.includes(v)))).toBe(true)
179
- })
180
- })
181
- })
182
- })
183
- })