feat: open FSSHTTP OneNote sections

This commit is contained in:
2026-07-22 19:26:08 +02:00
parent a7b1cd7d16
commit eb15fecb3f
12 changed files with 877 additions and 21 deletions

View File

@@ -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}`);
}