UNPKG

@struktoai/mirage-core

Version:

A Unified Virtual Filesystem For AI Agents

40 lines • 2.05 kB
// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. ========= // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ========= Copyright 2026 @ Strukto.AI All Rights Reserved. ========= import { liftLost, lostCount, record, startOp } from "../../observe/context.js"; import { movePath } from "./api.js"; import { replaceOnto } from "./copy.js"; import { checkPath, dropboxPathOf } from "./paths.js"; // move_v2 rejects an existing destination, but rename(2) replaces one: // a file outright, and a directory when it is empty. So a conflict // deletes the target and retries, except for a folder that still lists a // child, where the original error propagates and the generic mv reports // "Directory not empty" (mirrors msgraph's renameReplace). The source moves // whole, so only a destination it replaces is held to its version. export async function rename(accessor, src, dst) { await checkPath(accessor, src); await checkPath(accessor, dst); const from = dropboxPathOf(accessor, src); const to = dropboxPathOf(accessor, dst); const tm = accessor.tokenManager; const timer = startOp(); const upto = lostCount(); const [moved] = await replaceOnto(tm, src, dst, to, () => movePath(tm, from, to), true); const folder = moved['.tag'] !== 'file'; const op = folder ? 'rename_prefix' : 'rename'; record(op, src.virtual, 'dropbox', 0, timer); record(op, dst.virtual, 'dropbox', 0, timer); liftLost(src, upto, folder); liftLost(dst, upto, folder); } //# sourceMappingURL=rename.js.map