diff --git a/packages/nest/readme.md b/packages/nest/readme.md
index e667fc9..fb94e27 100644
--- a/packages/nest/readme.md
+++ b/packages/nest/readme.md
@@ -92,6 +92,24 @@ Scenario 3:
const fs = await FileSystem.fromCID(fsPointer, { blockstore })
```
+## Commit verification
+
+This exists so you can approve modifications to the file system.
+
+```ts
+import { Modification } from '@wnfs-wg/nest'
+
+const fs = FileSystem.create({
+ blockstore,
+ onCommit: (modifications: Modification[]): { commit: boolean } => {
+ // For example, check if I have access to all paths.
+ const satisfied = modifications.every(m => ALLOWED_PATHS.includes( Path.toPosix(m.path) ))
+ if (satisfied) return { commit: true }
+ else return { commit: false }
+ }
+})
+```
+
## Docs
Check
diff --git a/packages/nest/src/class.ts b/packages/nest/src/class.ts
index da8718f..ce2cfef 100644
--- a/packages/nest/src/class.ts
+++ b/packages/nest/src/class.ts
@@ -625,7 +625,7 @@ export class FileSystem {
mutationOptions: MutationOptions = {}
): Promise<
| {
- changes: Modification[]
+ modifications: Modification[]
dataRoot: CID
}
| NOOP
@@ -639,7 +639,7 @@ export class FileSystem {
const commitResult = await TransactionContext.commit(context)
if (commitResult === 'no-op') return 'no-op'
- const { changes, privateNodes, rootTree } = commitResult
+ const { modifications, privateNodes, rootTree } = commitResult
this.#privateNodes = privateNodes
this.#rootTree = rootTree
@@ -650,7 +650,7 @@ export class FileSystem {
// Emit events
await this.#eventEmitter.emit('commit', {
dataRoot,
- modifications: [...changes],
+ modifications: [...modifications],
})
// Publish
@@ -663,7 +663,7 @@ export class FileSystem {
// Fin
return {
- changes,
+ modifications,
dataRoot,
}
}
diff --git a/packages/nest/src/root-tree.ts b/packages/nest/src/root-tree.ts
index c5b4e96..84def0e 100644
--- a/packages/nest/src/root-tree.ts
+++ b/packages/nest/src/root-tree.ts
@@ -11,12 +11,12 @@ export abstract class RootTree {
abstract privateForest(): PrivateForest
abstract replacePrivateForest(
forest: PrivateForest,
- changes: Modification[]
+ modifications: Modification[]
): Promise
abstract publicRoot(): PublicDirectory
abstract replacePublicRoot(
dir: PublicDirectory,
- changes: Modification[]
+ modifications: Modification[]
): Promise
abstract clone(): RootTree
diff --git a/packages/nest/src/root-tree/basic.ts b/packages/nest/src/root-tree/basic.ts
index c0352c3..e44a81b 100644
--- a/packages/nest/src/root-tree/basic.ts
+++ b/packages/nest/src/root-tree/basic.ts
@@ -150,7 +150,7 @@ export class BasicRootTree implements RootTree {
async replacePrivateForest(
forest: PrivateForest,
- _changes: Modification[]
+ _modifications: Modification[]
): Promise {
return new BasicRootTree({
blockstore: this.#blockstore,
@@ -169,7 +169,7 @@ export class BasicRootTree implements RootTree {
async replacePublicRoot(
dir: PublicDirectory,
- changes: Modification[]
+ modifications: Modification[]
): Promise {
const treeWithNewPublicRoot = new BasicRootTree({
blockstore: this.#blockstore,
@@ -181,26 +181,26 @@ export class BasicRootTree implements RootTree {
version: this.#version,
})
- const unixTree = await changes.reduce(async (oldRootPromise, change) => {
+ const unixTree = await modifications.reduce(async (oldRootPromise, mod) => {
const oldRoot = await oldRootPromise
- if (!Path.isPartition('public', change.path)) {
+ if (!Path.isPartition('public', mod.path)) {
return oldRoot
}
- const path = Path.removePartition(change.path)
+ const path = Path.removePartition(mod.path)
- if (change.type === 'removed') {
+ if (mod.type === 'removed') {
return await Unix.removeNodeFromTree(oldRoot, path, this.#blockstore)
}
const contentCID =
- Path.isFile(change.path) &&
- Path.isPartitionedNonEmpty(change.path)
+ Path.isFile(mod.path) &&
+ Path.isPartitionedNonEmpty(mod.path)
? await References.contentCID(
this.#blockstore,
treeWithNewPublicRoot,
- change.path
+ mod.path
)
: undefined
diff --git a/packages/nest/src/transaction.ts b/packages/nest/src/transaction.ts
index a436503..9d12c58 100644
--- a/packages/nest/src/transaction.ts
+++ b/packages/nest/src/transaction.ts
@@ -52,7 +52,7 @@ export class TransactionContext {
#privateNodes: MountedPrivateNodes
#rootTree: RootTree
- readonly #changes: Set<{
+ readonly #modifications: Set<{
type: MutationType
path: Path.Distinctive>
}>
@@ -71,13 +71,13 @@ export class TransactionContext {
this.#rng = rng
this.#rootTree = rootTree
- this.#changes = new Set()
+ this.#modifications = new Set()
}
/** @internal */
static async commit(context: TransactionContext): Promise<
| {
- changes: Array<{
+ modifications: Array<{
path: Path.Distinctive>
type: MutationType
}>
@@ -86,23 +86,23 @@ export class TransactionContext {
}
| NOOP
> {
- const changes = [...context.#changes]
+ const modifications = [...context.#modifications]
// Verify
- const { commit } = await context.#onCommit([...changes])
+ const { commit } = await context.#onCommit([...modifications])
if (!commit) return 'no-op'
// Private forest
- const newForest = await changes.reduce(
- async (oldForestPromise, change): Promise => {
+ const newForest = await modifications.reduce(
+ async (oldForestPromise, mod): Promise => {
const oldForest = await oldForestPromise
- if (!Path.isPartition('private', change.path)) {
+ if (!Path.isPartition('private', mod.path)) {
return oldForest
}
const maybeNode = findPrivateNode(
- change.path as Path.Distinctive>,
+ mod.path as Path.Distinctive>,
context.#privateNodes
)
@@ -119,12 +119,12 @@ export class TransactionContext {
// Replace forest
const rootTree = await context.#rootTree.replacePrivateForest(
newForest,
- changes
+ modifications
)
// Fin
return {
- changes: changes,
+ modifications: modifications,
privateNodes: context.#privateNodes,
rootTree: rootTree,
}
@@ -568,7 +568,7 @@ export class TransactionContext {
mut: Mutations.Public,
mutType: MutationType
): Promise {
- const change = {
+ const mod = {
type: mutType,
path: path,
}
@@ -581,11 +581,11 @@ export class TransactionContext {
// Replace public root
this.#rootTree = await this.#rootTree.replacePublicRoot(result.rootDir, [
- change,
+ mod,
])
// Mark node as changed
- this.#changes.add(change)
+ this.#modifications.add(mod)
}
async #privateMutation(
@@ -609,7 +609,7 @@ export class TransactionContext {
})
// Mark node as changed
- this.#changes.add(change)
+ this.#modifications.add(change)
// Replace forest
this.#rootTree = await this.#rootTree.replacePrivateForest(result.forest, [
diff --git a/packages/nest/src/types.ts b/packages/nest/src/types.ts
index a604f4f..18490cc 100644
--- a/packages/nest/src/types.ts
+++ b/packages/nest/src/types.ts
@@ -7,7 +7,7 @@ export type AnySupportedDataType =
| string
export type CommitVerifier = (
- changes: Modification[]
+ modifications: Modification[]
) => Promise<{ commit: boolean }>
export type DataType = 'bytes' | 'json' | 'utf8'
diff --git a/packages/nest/test/class.test.ts b/packages/nest/test/class.test.ts
index d95b889..c6e705e 100644
--- a/packages/nest/test/class.test.ts
+++ b/packages/nest/test/class.test.ts
@@ -1035,7 +1035,7 @@ describe('File System Class', () => {
fs = await FileSystem.create({
blockstore,
...fsOpts,
- onCommit: async (_changes: Modification[]) => ({ commit: false }),
+ onCommit: async (_modifications: Modification[]) => ({ commit: false }),
})
mounts = await fs.mountPrivateNodes([{ path: Path.root() }])