mirror of https://codeberg.org/pzp/pzp-goals.git
rename getRecordPurpose to getMsgPurpose
This commit is contained in:
parent
f99d906161
commit
e14fd87658
26
lib/index.js
26
lib/index.js
|
@ -1,13 +1,12 @@
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
const Obz = require('obz')
|
const Obz = require('obz')
|
||||||
// @ts-ignore
|
|
||||||
const multicb = require('multicb')
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {ReturnType<import('ppppp-db').init>} PPPPPDB
|
* @typedef {ReturnType<import('ppppp-db').init>} PPPPPDB
|
||||||
* @typedef {ReturnType<import('ppppp-record').init>} PPPPPRecord
|
* @typedef {ReturnType<import('ppppp-record').init>} PPPPPRecord
|
||||||
* @typedef {import('ppppp-db').RecPresent} RecPresent
|
* @typedef {import('ppppp-db').RecPresent} RecPresent
|
||||||
* @typedef {import('ppppp-db').Tangle} Tangle
|
* @typedef {import('ppppp-db').Tangle} Tangle
|
||||||
|
* @typedef {import('ppppp-db').Msg} Msg
|
||||||
* @typedef {ReturnType<PPPPPDB['getTangle']>} DBTangle
|
* @typedef {ReturnType<PPPPPDB['getTangle']>} DBTangle
|
||||||
* @typedef {string} MsgID
|
* @typedef {string} MsgID
|
||||||
* @typedef {'none'|'all'|`newest-${number}`|'record'|'set'} GoalDSL
|
* @typedef {'none'|'all'|`newest-${number}`|'record'|'set'} GoalDSL
|
||||||
|
@ -159,7 +158,7 @@ function initGoals(peer, config) {
|
||||||
|
|
||||||
case 'record':
|
case 'record':
|
||||||
assertRecordPlugin(peer)
|
assertRecordPlugin(peer)
|
||||||
const minDepth = peer.record.getMinRequiredDepth(goal.id)
|
const minDepth = peer.record.minRequiredDepth(goal.id)
|
||||||
return [minDepth, maxDepth]
|
return [minDepth, maxDepth]
|
||||||
|
|
||||||
case 'none':
|
case 'none':
|
||||||
|
@ -193,18 +192,19 @@ function initGoals(peer, config) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @public
|
* @public
|
||||||
* @param {RecPresent} rec
|
* @param {MsgID} msgID
|
||||||
|
* @param {Msg} msg
|
||||||
* @returns {Purpose}
|
* @returns {Purpose}
|
||||||
*/
|
*/
|
||||||
function getRecordPurpose(rec) {
|
function getMsgPurpose(msgID, msg) {
|
||||||
assertDBPlugin(peer)
|
assertDBPlugin(peer)
|
||||||
let servesAsTrail = false
|
let servesAsTrail = false
|
||||||
|
|
||||||
// Check whether this record is a goalful root of some tangle:
|
// Check whether this record is a goalful root of some tangle:
|
||||||
asRoot: if (goals.has(rec.id)) {
|
asRoot: if (goals.has(msgID)) {
|
||||||
const goal = /** @type {GoalImpl} */ (goals.get(rec.id))
|
const goal = /** @type {GoalImpl} */ (goals.get(msgID))
|
||||||
if (goal.type === 'none') break asRoot
|
if (goal.type === 'none') break asRoot
|
||||||
const tangle = peer.db.getTangle(rec.id)
|
const tangle = peer.db.getTangle(msgID)
|
||||||
if (!tangle) break asRoot
|
if (!tangle) break asRoot
|
||||||
const [min, max] = crossGoalWithTangle(goal, tangle)
|
const [min, max] = crossGoalWithTangle(goal, tangle)
|
||||||
if (min > max) break asRoot
|
if (min > max) break asRoot
|
||||||
|
@ -215,7 +215,7 @@ function initGoals(peer, config) {
|
||||||
// Check whether this record is a goalful affix of some tangle:
|
// Check whether this record is a goalful affix of some tangle:
|
||||||
const validTangles =
|
const validTangles =
|
||||||
/** @type {Array<[DBTangle, number, number, number, GoalType]>} */ ([])
|
/** @type {Array<[DBTangle, number, number, number, GoalType]>} */ ([])
|
||||||
asAffix: for (const tangleID in rec.msg.metadata.tangles) {
|
asAffix: for (const tangleID in msg.metadata.tangles) {
|
||||||
if (!goals.has(tangleID)) continue asAffix
|
if (!goals.has(tangleID)) continue asAffix
|
||||||
const goal = /** @type {GoalImpl} */ (goals.get(tangleID))
|
const goal = /** @type {GoalImpl} */ (goals.get(tangleID))
|
||||||
if (goal.type === 'none') continue asAffix
|
if (goal.type === 'none') continue asAffix
|
||||||
|
@ -223,7 +223,7 @@ function initGoals(peer, config) {
|
||||||
if (!tangle) continue asAffix
|
if (!tangle) continue asAffix
|
||||||
const [min, max] = crossGoalWithTangle(goal, tangle)
|
const [min, max] = crossGoalWithTangle(goal, tangle)
|
||||||
if (min > max) continue asAffix
|
if (min > max) continue asAffix
|
||||||
const recDepth = tangle.getDepth(rec.id)
|
const recDepth = tangle.getDepth(msgID)
|
||||||
if (recDepth < 0) continue asAffix
|
if (recDepth < 0) continue asAffix
|
||||||
validTangles.push([tangle, min, max, recDepth, goal.type])
|
validTangles.push([tangle, min, max, recDepth, goal.type])
|
||||||
}
|
}
|
||||||
|
@ -241,14 +241,14 @@ function initGoals(peer, config) {
|
||||||
.topoSort()
|
.topoSort()
|
||||||
.filter((msgID) => tangle.getDepth(msgID) === min)
|
.filter((msgID) => tangle.getDepth(msgID) === min)
|
||||||
const { erasables } = tangle.getDeletablesAndErasables(...minMsgIDs)
|
const { erasables } = tangle.getDeletablesAndErasables(...minMsgIDs)
|
||||||
if (erasables.has(rec.id)) return 'trail'
|
if (erasables.has(msgID)) return 'trail'
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check whether this record is a ghost affix of some tangle:
|
// Check whether this record is a ghost affix of some tangle:
|
||||||
for (const [tangle, , , , goalType] of validTangles) {
|
for (const [tangle, , , , goalType] of validTangles) {
|
||||||
if (goalType === 'record') {
|
if (goalType === 'record') {
|
||||||
assertRecordPlugin(peer)
|
assertRecordPlugin(peer)
|
||||||
if (peer.record.isGhostable(rec.id, tangle.id)) {
|
if (peer.record.isGhostable(msgID, tangle.id)) {
|
||||||
return 'ghost'
|
return 'ghost'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -268,7 +268,7 @@ function initGoals(peer, config) {
|
||||||
return {
|
return {
|
||||||
set,
|
set,
|
||||||
get,
|
get,
|
||||||
getRecordPurpose,
|
getMsgPurpose,
|
||||||
list,
|
list,
|
||||||
listen,
|
listen,
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,8 @@
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"files": [
|
"files": [
|
||||||
"*.js",
|
"*.js",
|
||||||
"lib/*.js"
|
"lib/*.js",
|
||||||
|
"lib/*.d.ts"
|
||||||
],
|
],
|
||||||
"types": "types/index.d.ts",
|
"types": "types/index.d.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|
|
@ -34,7 +34,7 @@ test('set, getByID, list, listen', async (t) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const purpose = alice.goals.getRecordPurpose(aliceAccountRoot)
|
const purpose = alice.goals.getMsgPurpose(aliceAccountRoot.id, aliceAccountRoot.msg)
|
||||||
assert.equal(purpose, 'goal', 'rec purpose is "goal"')
|
assert.equal(purpose, 'goal', 'rec purpose is "goal"')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ test('set, getByID, list, listen', async (t) => {
|
||||||
await p(alice.close)(true)
|
await p(alice.close)(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
test('getRecordPurpose', async (t) => {
|
test('getMsgPurpose', async (t) => {
|
||||||
const alice = createPeer({ name: 'alice' })
|
const alice = createPeer({ name: 'alice' })
|
||||||
|
|
||||||
await alice.db.loaded()
|
await alice.db.loaded()
|
||||||
|
@ -91,18 +91,18 @@ test('getRecordPurpose', async (t) => {
|
||||||
const gottenGoal = alice.goals.get(feedID)
|
const gottenGoal = alice.goals.get(feedID)
|
||||||
assert.strictEqual(gottenGoal.id, feedID, 'gotten goal id is correct')
|
assert.strictEqual(gottenGoal.id, feedID, 'gotten goal id is correct')
|
||||||
|
|
||||||
const purpose = alice.goals.getRecordPurpose(post2)
|
const purpose = alice.goals.getMsgPurpose(post2.id, post2.msg)
|
||||||
assert.equal(purpose, 'goal', 'purpose is "goal"')
|
assert.equal(purpose, 'goal', 'purpose is "goal"')
|
||||||
|
|
||||||
alice.goals.set(feedID, 'newest-1')
|
alice.goals.set(feedID, 'newest-1')
|
||||||
assert('set goal to newest-1')
|
assert('set goal to newest-1')
|
||||||
const purpose2 = alice.goals.getRecordPurpose(post2)
|
const purpose2 = alice.goals.getMsgPurpose(post2.id, post2.msg)
|
||||||
assert.equal(purpose2, 'none', 'purpose2 is "none"')
|
assert.equal(purpose2, 'none', 'purpose2 is "none"')
|
||||||
|
|
||||||
await p(alice.close)(true)
|
await p(alice.close)(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
test('getRecordPurpose ghost', async (t) => {
|
test('getMsgPurpose ghost', async (t) => {
|
||||||
const alice = createPeer({ name: 'alice', record: {ghostSpan: 3} })
|
const alice = createPeer({ name: 'alice', record: {ghostSpan: 3} })
|
||||||
|
|
||||||
await alice.db.loaded()
|
await alice.db.loaded()
|
||||||
|
@ -126,11 +126,11 @@ test('getRecordPurpose ghost', async (t) => {
|
||||||
const recs = msgIDs.map(id => alice.db.getRecord(id))
|
const recs = msgIDs.map(id => alice.db.getRecord(id))
|
||||||
|
|
||||||
alice.goals.set(feedID, 'record')
|
alice.goals.set(feedID, 'record')
|
||||||
assert.equal(alice.goals.getRecordPurpose(recs[1]), 'none')
|
assert.equal(alice.goals.getMsgPurpose(recs[1].id, recs[1].msg), 'none')
|
||||||
assert.equal(alice.goals.getRecordPurpose(recs[2]), 'ghost')
|
assert.equal(alice.goals.getMsgPurpose(recs[2].id, recs[2].msg), 'ghost')
|
||||||
assert.equal(alice.goals.getRecordPurpose(recs[3]), 'trail')
|
assert.equal(alice.goals.getMsgPurpose(recs[3].id, recs[3].msg), 'trail')
|
||||||
assert.equal(alice.goals.getRecordPurpose(recs[4]), 'trail')
|
assert.equal(alice.goals.getMsgPurpose(recs[4].id, recs[4].msg), 'trail')
|
||||||
assert.equal(alice.goals.getRecordPurpose(recs[5]), 'goal')
|
assert.equal(alice.goals.getMsgPurpose(recs[5].id, recs[5].msg), 'goal')
|
||||||
|
|
||||||
await p(alice.close)(true)
|
await p(alice.close)(true)
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue