UNPKG

@neodx/vfs

Version:

Simple virtual file system - working dir context, lazy changes, different modes, integrations and moreover

1 lines 35.3 kB
{"version":3,"file":"operations-C-RkTDIe.cjs","sources":["../../../src/backend/create-in-memory-backend.ts","../../../../internal/src/errors.ts","../../../../internal/src/log.ts","../../../../internal/src/tasks.ts","../../../../internal/src/intl.ts","../../../src/core/operations.ts"],"sourcesContent":["import { entries, isTypeOfString, uniq } from '@neodx/std';\nimport { dirname, join } from 'pathe';\nimport type { VfsContentLike } from '../core/types';\nimport type { VfsBackend } from './shared';\n\nexport interface VirtualInitializer {\n [path: string]: string | VirtualInitializer;\n}\n\n/**\n * In-memory VFS backend.\n * Useful for testing, emulating file system, etc.\n */\nexport function createInMemoryBackend(root = '/', initializer: VirtualInitializer = {}) {\n // generate new implementation based on old one\n const store = new Map<string, Buffer>(\n entries(createInMemoryFilesRecord(initializer, root)).map(([path, content]) => [\n path,\n Buffer.from(content)\n ])\n );\n const deleted = new Set<string>();\n\n const isFile = (path: string) => store.has(path);\n const isDir = (path: string) =>\n !isFile(path) && Array.from(store.keys()).some(pathStartsBy(path));\n const deletePath = (path: string) => {\n store.delete(path);\n deleted.add(path);\n };\n\n return {\n read(path: string) {\n return store.get(path) ?? null;\n },\n\n isFile,\n isDir,\n exists(path: string) {\n return isFile(path) || isDir(path);\n },\n\n readDir(path: string) {\n return uniq(\n Array.from(store.keys())\n .filter(pathStartsBy(path))\n .map(name => name.split(withTrailingSlash(path))[1]!.split('/')[0]!)\n ).map(name => createInMemoryDirent(name, isFile(join(path, name))));\n },\n\n write(path: string, content: VfsContentLike) {\n store.set(path, Buffer.from(content));\n while (path !== '/') {\n deleted.delete(path);\n path = dirname(path);\n }\n },\n\n delete(path: string) {\n deletePath(path);\n for (const name of store.keys()) {\n if (pathStartsWith(name, path)) {\n deletePath(name);\n }\n }\n },\n\n __: {\n kind: 'in-memory',\n getStore: () => new Map(store),\n getDeleted: () => new Set(deleted)\n }\n } satisfies VfsBackend;\n}\n\nexport const createInMemoryDirent = (name: string, file: boolean, symlink = false) => ({\n isFile: () => file,\n isDirectory: () => !file,\n isSymbolicLink: () => symlink,\n name\n});\n\nexport const withTrailingSlash = (path: string) => (path.endsWith('/') ? path : `${path}/`);\nexport const pathStartsWith = (fullPath: string, basePath: string) =>\n fullPath.startsWith(withTrailingSlash(basePath));\nexport const pathStartsBy = (basePath: string) => (fullPath: string) =>\n pathStartsWith(fullPath, basePath);\n\n/**\n * @param initializer Virtual files tree\n * @param base Root path\n * @example\n * ```ts\n * createInMemoryFilesRecord({\n * \"package.json\": \"{...}\",\n * \"src\": {\n * \"foo\": {\n * \"bar.ts\": \"export const a = 1\"\n * \"baz.ts\": \"export const b = 2\"\n * },\n * \"index.ts\": \"export const c = 3\"\n * }\n * });\n * // {\n * // \"package.json\": \"{...}\",\n * // \"src/foo/bar.ts\": \"export const a = 1\",\n * // \"src/foo/baz.ts\": \"export const b = 2\",\n * // \"src/index.ts\": \"export const c = 3\"\n * // }\n * ```\n */\nexport function createInMemoryFilesRecord(initializer: VirtualInitializer, base = '') {\n const result = {} as Record<string, string>;\n\n for (const [name, value] of entries(initializer)) {\n const path = join(base, name);\n\n if (isTypeOfString(value)) result[path] = value;\n else Object.assign(result, createInMemoryFilesRecord(value, path));\n }\n return result;\n}\n","import { isTypeOfString } from '@neodx/std';\nimport { redefineName } from '@neodx/std/shared';\n\nexport const linkError = (error: unknown, cause?: unknown) =>\n isTypeOfString(error) ? new Error(error, { cause }) : error ?? cause;\n\nexport const createErrorType = <Name extends string>(name: Name) => {\n const ErrorType = class extends Error {\n static child = <ChildName extends string>(childName: ChildName) =>\n createErrorType<`${Name}.${ChildName}`>(`${name}.${childName}`);\n\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = name;\n }\n };\n\n redefineName(ErrorType, name);\n return ErrorType;\n};\n","import { compact, type Falsy } from '@neodx/std';\n\nexport const timeDisplay = () => {\n const start = Date.now();\n\n return () => formatTimeMs(Date.now() - start);\n};\n\nexport const formatTimeMs = (time: number) => {\n const showSeconds = time >= 100;\n const timeValue = showSeconds ? time / 1000 : time;\n\n return timeValue\n .toLocaleString('en', {\n style: 'unit',\n unit: showSeconds ? 'second' : 'millisecond',\n unitDisplay: 'narrow'\n })\n .padEnd(showSeconds ? 6 : 4);\n};\n\nexport const formatList = (list: Array<string | Falsy>, max = 4) => {\n const visible = compact(list);\n const extra = visible.slice(max).length;\n\n return visible.length > 0\n ? listFormatter.format(extra ? visible.slice(0, max - 1).concat(`${extra} more`) : visible)\n : 'none';\n};\n\nconst listFormatter = new Intl.ListFormat('en', {\n style: 'short',\n type: 'unit'\n});\n","import { colors } from '@neodx/colors';\nimport { type Logger } from '@neodx/log';\nimport { type Falsy, invariant, isTypeOfFunction } from '@neodx/std';\nimport { redefineName } from '@neodx/std/shared';\nimport { linkError } from './errors.ts';\nimport { timeDisplay } from './log.ts';\n\ntype EnabledTaskInvariant<Args extends readonly unknown[], Result> =\n | string\n | ((result: Result, ...args: Args) => string);\ntype DisabledTaskInvariant = false | void;\n\nexport function createTaskRunner({ log }: { log?: Logger<'error' | 'debug'> } = {}) {\n return {\n task: <\n const Args extends readonly unknown[],\n Result,\n Invariant extends EnabledTaskInvariant<Args, Result> | DisabledTaskInvariant = false\n >(\n name: string,\n handler: (...args: Args) => Result | Promise<Result>,\n {\n mapError,\n invariant: invariantMessage,\n mapSuccessMessage\n }: {\n mapSuccessMessage?: NoInfer<(result: Result, ...args: Args) => string>;\n invariant?: Invariant;\n mapError?: NoInfer<(cause: unknown, ...args: Args) => string | Error>;\n } = {}\n ) => {\n async function task(\n ...args: Args\n ): Promise<Invariant extends DisabledTaskInvariant ? Result : Exclude<Result, Falsy>> {\n const printAllTime = timeDisplay();\n\n try {\n const result = await handler(...args);\n\n if (mapSuccessMessage) {\n log?.debug(\n `${colors.gray(`[${name}] ${printAllTime()}`)} ${mapSuccessMessage(result, ...args)}`\n );\n }\n if (invariantMessage) {\n invariant(\n result,\n isTypeOfFunction(invariantMessage)\n ? invariantMessage(result, ...args)\n : invariantMessage\n );\n }\n return result as any;\n } catch (error) {\n // eslint-disable-next-line no-ex-assign\n error = linkError(mapError?.(error, ...args), error);\n log?.error(error);\n throw error;\n }\n }\n\n redefineName(task, name);\n return Object.assign(task, createTaskRunner({ log }));\n }\n };\n}\n","import type { SetOptional } from 'type-fest';\n\ntype OptionalRules = keyof typeof similarPlurals;\ntype Forms = SetOptional<Record<Intl.LDMLPluralRule, string>, OptionalRules>;\n\nconst rules = new Intl.PluralRules();\nconst similarPlurals = {\n two: 'few',\n few: 'many',\n many: 'other',\n zero: 'other'\n} satisfies Partial<Record<Intl.LDMLPluralRule, Intl.LDMLPluralRule>>;\nconst getPluralForm = (current: Intl.LDMLPluralRule, forms: Forms): string =>\n forms[current] ?? getPluralForm(similarPlurals[current as OptionalRules], forms);\n\nexport const plural = (\n n: number,\n forms: SetOptional<Record<Intl.LDMLPluralRule, string>, OptionalRules>\n) => getPluralForm(rules.select(n), forms).replace('%d', n.toString());\n\nconst sortingCollator = new Intl.Collator('en');\n\nexport const compare = {\n by:\n <T>(fn: (value: T) => string, compareFn: (a: string, b: string) => number) =>\n (a: T, b: T) =>\n compareFn(fn(a), fn(b)),\n locale: sortingCollator.compare.bind(sortingCollator)\n};\n","import { colors } from '@neodx/colors';\nimport { compare, plural } from '@neodx/internal/intl';\nimport { formatList } from '@neodx/internal/log';\nimport { compact, concurrently, isTruthy, prop, uniqBy } from '@neodx/std';\nimport { dirname, join, relative, sep } from 'pathe';\nimport { createInMemoryDirent } from '../backend/create-in-memory-backend.ts';\nimport type { VfsContext } from './context';\nimport type { VfsContentLike, VfsFileAction } from './types';\n\nexport async function existsVfsPath(ctx: VfsContext, path = '.') {\n const meta = ctx.get(path);\n\n ctx.log.debug('Check exists %s', displayPath(ctx, path));\n if (isKnownDeletedPath(ctx, path)) return false;\n // If we know any non-deleted descendants of this path, then it's exists\n if (meta || getVfsNonDeletedDescendants(ctx, path).length > 0) return true;\n return await ctx.backend.exists(path);\n}\n\nexport async function isVfsFile(ctx: VfsContext, path = '.') {\n const meta = ctx.get(path);\n\n return meta ? !meta.deleted : await ctx.backend.isFile(path);\n}\n\nexport async function isVfsDir(ctx: VfsContext, path = '.') {\n return (\n ctx.getRelativeChanges(path).some(meta => !meta.deleted) || (await ctx.backend.isDir(path))\n );\n}\n\nconst isKnownAsDir = (ctx: VfsContext, path: string) =>\n ctx.getRelativeChanges(path).some(meta => !meta.deleted);\n\n/**\n * Returns actual children of a directory.\n */\nexport async function readVfsDir(ctx: VfsContext, path = '.') {\n const originalDirChildren = await ctx.backend.readDir(path);\n const relativeChanges = ctx.getRelativeChanges(path);\n const isNotDeleted = (name: string) => !isKnownDeletedPath(ctx, name);\n const basePath = ctx.resolve(path);\n const getDirentName = (path: string) => relative(basePath, ctx.resolve(path)).split(sep)[0]!;\n const childrenFromChanges = relativeChanges\n .filter(it => isNotDeleted(it.path))\n .map(it => createInMemoryDirent(getDirentName(it.path), !isKnownAsDir(ctx, it.path)))\n .filter(it => Boolean(it.name.replaceAll('.', '')));\n\n const result = uniqBy(\n [\n ...originalDirChildren\n .filter(it => isNotDeleted(ctx.resolve(path, it.name)))\n .filter(it => !childrenFromChanges.some(dirent => dirent.name === it.name)),\n ...childrenFromChanges\n ],\n entry => entry.name\n ).sort(compare.by(prop('name'), compare.locale));\n\n ctx.log.debug(\n 'Read %s - %s (%s)',\n displayPath(ctx, path),\n plural(result.length, { one: '%d member', other: '%d members' }),\n formatList(result.map(prop('name')), 3)\n );\n return result;\n}\n\nexport async function tryReadVfsFile(ctx: VfsContext, path: string): Promise<Buffer | null>;\nexport async function tryReadVfsFile(\n ctx: VfsContext,\n path: string,\n encoding: BufferEncoding\n): Promise<string | null>;\nexport async function tryReadVfsFile(\n ctx: VfsContext,\n path: string,\n encoding?: BufferEncoding\n): Promise<Buffer | string | null> {\n ctx.log.debug('Read %s', displayPath(ctx, path));\n if (!(await isVfsFile(ctx, path))) return null;\n const content = ctx.get(path)?.content ?? (await ctx.backend.read(path));\n\n return encoding ? content!.toString(encoding) : content;\n}\n\nexport async function readVfsFile(ctx: VfsContext, path: string): Promise<Buffer>;\nexport async function readVfsFile(\n ctx: VfsContext,\n path: string,\n encoding: BufferEncoding\n): Promise<string>;\nexport async function readVfsFile(\n ctx: VfsContext,\n path: string,\n encoding?: BufferEncoding\n): Promise<Buffer | string> {\n const content = await tryReadVfsFile(ctx, path, encoding!);\n\n if (content === null) {\n throw new Error(`\"${path}\" is not file (full path: ${ctx.resolve(path)})`);\n }\n return content;\n}\n\nexport async function writeVfsFile(ctx: VfsContext, path: string, content: VfsContentLike) {\n ctx.log.debug('Write %s', displayPath(ctx, path));\n const pathIsDir = await isVfsDir(ctx, path);\n const actualContent = pathIsDir ? null : await tryReadVfsBackendFile(ctx, path);\n\n ensureVfsPath(ctx, ctx.resolve(path));\n if (actualContent && Buffer.from(content).equals(actualContent)) {\n // If content is not changed, then we can just forget about this file\n ctx.unregister(path);\n } else {\n ctx.registerPath(path, content, isKnownDeletedPath(ctx, path), pathIsDir);\n }\n}\n\nexport async function deleteVfsPath(ctx: VfsContext, path: string) {\n ctx.log.debug('Delete %s', displayPath(ctx, path));\n ctx.deletePath(path);\n for (const meta of ctx.getRelativeChanges(path)) {\n ctx.unregister(meta.path);\n }\n const parentDirName = dirname(ctx.resolve(path));\n\n if (ctx.relative(path).startsWith('..')) {\n ctx.log.warn(\n \"You're trying to delete a file outside of the root directory, we don't support it fully\"\n );\n } else if (!ctx.relative(parentDirName).startsWith('..')) {\n // const siblings = await readVfsDir(ctx, parentDirName);\n // TODO https://github.com/secundant/neodx/issues/148 Implement Layers API instead of this hack\n // TODO SEC-55 add condition\n // if (siblings.length === 0) {\n // await deleteVfsPath(ctx, parentDirName);\n //}\n }\n}\n\nexport async function renameVfs(ctx: VfsContext, from: string, ...to: string[]) {\n ctx.log.debug(\n 'Rename %s to %s',\n displayPath(ctx, from),\n to.map(path => displayPath(ctx, path)).join(', ')\n );\n if (!(await existsVfsPath(ctx, from))) {\n ctx.log.debug('Path %s not exists, rename skipped', displayPath(ctx, from));\n return;\n }\n if (await isVfsDir(ctx, from)) {\n throw new Error('Renaming a directory is not supported');\n }\n const content = await readVfsFile(ctx, from);\n\n await deleteVfsPath(ctx, from);\n await concurrently(to, path => writeVfsFile(ctx, path, content), 5);\n}\n\nexport async function getVfsActions(ctx: VfsContext): Promise<VfsFileAction[]>;\nexport async function getVfsActions<T extends VfsFileAction['type']>(\n ctx: VfsContext,\n types: T[]\n): Promise<Extract<VfsFileAction, { type: T }>[]>;\nexport async function getVfsActions(ctx: VfsContext, types?: VfsFileAction['type'][]) {\n const changes = await concurrently(\n ctx.getAllDirectChanges(),\n async ({ path, deleted, content, ...meta }): Promise<VfsFileAction | null> => {\n // ctx.log.debug('Resolving required action for %s', displayPath(ctx, path));\n const exists = await ctx.backend.exists(path);\n\n if (deleted && !exists) {\n return null;\n }\n if (deleted) {\n return { ...meta, path, type: 'delete' };\n }\n if (!content) return null;\n return {\n ...meta,\n path,\n type: exists ? 'update' : 'create',\n content\n };\n }\n );\n\n // ctx.log.debug('Found %d changes under \"%s\" working directory', changes.length, ctx.path);\n\n return types\n ? changes.filter(action => isTruthy(action) && types.includes(action.type))\n : compact(changes);\n}\n\n/** Guarantees all ancestor directories not deleted */\nexport function ensureVfsPath(ctx: VfsContext, path: string) {\n const parent = dirname(path);\n\n if (ctx.relative(parent).startsWith('..') || parent === path) return;\n if (isKnownDeletedPath(ctx, parent)) ctx.registerPath(parent, null, true);\n else if (!ctx.get(parent)?.updatedAfterDelete) ctx.unregister(parent);\n ensureVfsPath(ctx, parent);\n}\n\nexport function getVfsNonDeletedDescendants(ctx: VfsContext, path: string) {\n return ctx.getRelativeChanges(path).filter(meta => !meta.deleted);\n}\n\nexport async function tryReadVfsBackendFile(ctx: VfsContext, path: string) {\n const resolved = ctx.resolve(path);\n\n return (await ctx.backend.isFile(resolved)) ? await ctx.backend.read(resolved) : null;\n}\n\nconst prefixSize = 28;\nexport const displayPath = (ctx: VfsContext, path: string) => {\n const prefix =\n ctx.path.length > prefixSize\n ? `${ctx.path.slice(0, prefixSize / 4)}...${ctx.path.slice((-prefixSize * 3) / 4)}`\n : ctx.path;\n\n return `${colors.gray(prefix + sep)}${ctx.relative(path)}`;\n};\n\nconst isDirectDeletedPath = (ctx: VfsContext, path: string) => ctx.get(path)?.deleted;\n/** The directory itself or any of its ancestors is deleted */\nconst isKnownDeletedPath = (ctx: VfsContext, path: string) =>\n isDirectDeletedPath(ctx, path) || Boolean(hasDeletedAncestor(ctx, path) && !ctx.get(path));\n\nconst hasDeletedAncestor = (ctx: VfsContext, path: string) => {\n while (!isOuterPath(ctx, (path = parentPath(ctx, path)))) {\n if (isDirectDeletedPath(ctx, path) || ctx.get(path)?.updatedAfterDelete) return true;\n }\n return false;\n};\nconst parentPath = (ctx: VfsContext, path: string) => ctx.resolve(join(path, '..'));\nconst isOuterPath = (ctx: VfsContext, path: string) => ctx.relative(path).startsWith('..');\n"],"names":["createInMemoryBackend","root","initializer","store","Map","entries","createInMemoryFilesRecord","map","path","content","Buffer","from","deleted","Set","isFile","has","isDir","Array","keys","some","pathStartsBy","deletePath","delete","add","read","get","exists","readDir","uniq","filter","name","split","withTrailingSlash","createInMemoryDirent","join","write","set","dirname","pathStartsWith","__","kind","getStore","getDeleted","file","symlink","isDirectory","isSymbolicLink","endsWith","fullPath","basePath","startsWith","base","result","value","isTypeOfString","Object","assign","linkError","error","cause","Error","timeDisplay","start","Date","now","formatTimeMs","time","showSeconds","timeValue","toLocaleString","style","unit","unitDisplay","padEnd","formatList","list","max","visible","compact","extra","slice","length","listFormatter","format","concat","Intl","ListFormat","type","createTaskRunner","log","task","handler","mapError","invariant","invariantMessage","mapSuccessMessage","args","printAllTime","debug","colors","gray","isTypeOfFunction","redefineName","rules","PluralRules","similarPlurals","two","few","many","zero","getPluralForm","current","forms","plural","n","select","replace","toString","sortingCollator","Collator","compare","by","fn","compareFn","a","b","locale","bind","existsVfsPath","ctx","meta","displayPath","isKnownDeletedPath","getVfsNonDeletedDescendants","backend","isVfsFile","isVfsDir","getRelativeChanges","isKnownAsDir","readVfsDir","originalDirChildren","relativeChanges","isNotDeleted","resolve","getDirentName","relative","sep","childrenFromChanges","it","Boolean","replaceAll","uniqBy","dirent","entry","sort","prop","one","other","tryReadVfsFile","encoding","readVfsFile","writeVfsFile","pathIsDir","actualContent","tryReadVfsBackendFile","ensureVfsPath","equals","unregister","registerPath","deleteVfsPath","parentDirName","warn","renameVfs","to","concurrently","getVfsActions","types","changes","getAllDirectChanges","action","isTruthy","includes","parent","updatedAfterDelete","resolved","prefixSize","prefix","isDirectDeletedPath","hasDeletedAncestor","isOuterPath","parentPath"],"mappings":"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"}