feat: open FSSHTTP OneNote sections
This commit is contained in:
@@ -21,6 +21,7 @@ import type {
|
||||
ObjectSpace,
|
||||
PropertyEntry,
|
||||
StoreObject,
|
||||
StoreObjectSpaceReference,
|
||||
} from '../onestore/types.js';
|
||||
import { exGuidKey } from '../onestore/types.js';
|
||||
|
||||
@@ -40,13 +41,16 @@ export function objectReferences(
|
||||
propertyId,
|
||||
countObjectReferences
|
||||
);
|
||||
if (object.resolvedObjectIds) {
|
||||
return resolvedReferenceSlice(object.resolvedObjectIds, offset, count);
|
||||
}
|
||||
return resolveReferenceSlice(object, object.props.objectIds, offset, count);
|
||||
}
|
||||
|
||||
export function objectSpaceReferences(
|
||||
object: StoreObject,
|
||||
propertyId: number
|
||||
): ExGuid[] {
|
||||
): StoreObjectSpaceReference[] {
|
||||
const property = findProperty(object.props, propertyId);
|
||||
if (!property) return [];
|
||||
let count: number;
|
||||
@@ -60,12 +64,15 @@ export function objectSpaceReferences(
|
||||
propertyId,
|
||||
countObjectSpaceReferences
|
||||
);
|
||||
if (object.resolvedObjectSpaceIds) {
|
||||
return resolvedReferenceSlice(object.resolvedObjectSpaceIds, offset, count);
|
||||
}
|
||||
return resolveReferenceSlice(
|
||||
object,
|
||||
object.props.objectSpaceIds,
|
||||
offset,
|
||||
count
|
||||
);
|
||||
).map((id) => ({ id, key: exGuidKey(id) }));
|
||||
}
|
||||
|
||||
export function rootObject(
|
||||
@@ -257,6 +264,19 @@ function resolveReferenceSlice(
|
||||
});
|
||||
}
|
||||
|
||||
function resolvedReferenceSlice<T>(
|
||||
ids: readonly T[],
|
||||
offset: number,
|
||||
count: number
|
||||
): T[] {
|
||||
if (offset + count > ids.length) {
|
||||
throw new Error(
|
||||
`Reference range ${offset}+${count} exceeds resolved stream length ${ids.length}`
|
||||
);
|
||||
}
|
||||
return ids.slice(offset, offset + count);
|
||||
}
|
||||
|
||||
function propertyTypeError(propertyId: number, expected: string): Error {
|
||||
return new Error(`Property 0x${propertyId.toString(16)} is not ${expected}`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user