snapshot-fs
Version:
Create a filesystem snapshot for use with memfs
1 lines • 4.65 kB
Source Map (JSON)
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;AA+CH,gDAUC;AAQD,kDAYC;AAQD,gDAoBC;AAvGD,kFAAoD;AACpD,iCAA2C;AAC3C,0DAKqC;AACrC,sDAA6B;AAG7B,wCAAoD;AAGpD;;;GAGG;AACU,QAAA,kBAAkB,GAAG,GAAG,CAAC;AAqBtC;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CAAC,EACvC,EAAE,EACF,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,MACH,EAAE;IAC3B,MAAM,QAAQ,GAAG,MAAM,IAAA,2BAAgB,EAAC;QACtC,mEAAmE;QACnE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAE,iBAAM,CAAC,QAAgB;QAC/C,IAAI;KACL,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,mBAAmB,CAAC,EACxC,EAAE,EACF,SAAS,EACT,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,MACH,EAAE;IAC3B,MAAM,QAAQ,GAAG,MAAM,IAAA,yBAAc,EAAC;QACpC,mEAAmE;QACnE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAE,iBAAM,CAAC,QAAgB;QAC/C,IAAI;QACJ,SAAS;KACV,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CAAC,EACvC,EAAE,EACF,SAAS,EACT,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,MACH,EAAE;IAC3B,MAAM,EAAE,GAAG,EAAE,GAAG,IAAA,aAAK,GAAE,CAAC;IACxB,MAAM,YAAY,GAAG,MAAM,IAAA,2BAAgB,EAAC;QAC1C,mEAAmE;QACnE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAE,iBAAM,CAAC,QAAgB;QAC/C,IAAI;QACJ,SAAS;KACV,CAAC,CAAC;IACH,MAAM,IAAA,sBAAY,EAAC,mBAAS,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,IAAA,+BAAe,EAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAE/C,oBAAoB;IACpB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["/**\n * Provides {@link createCJSONSnapshot} which creates a memfs snapshot from the\n * filesystem\n *\n * @module snapshot-fs/snapshot\n * @see {@link https://github.com/streamich/memfs/blob/master/docs/snapshot/index.md}\n */\n\nimport stableStringify from 'json-stable-stringify';\nimport { memfs, type Volume } from 'memfs';\nimport {\n type JsonUint8Array,\n type SnapshotNode,\n toBinarySnapshot,\n toJsonSnapshot,\n} from 'memfs/lib/snapshot/index.js';\nimport nodeFs from 'node:fs';\nimport { type sep } from 'node:path';\n\nimport { CBOR_KIND, readSnapshot } from './read.js';\nimport { type CborUint8Array } from './types.js';\n\n/**\n * All files will be relative to this path in the output\n * {@link memfs DirectoryJSON} object\n */\nexport const DEFAULT_MEMFS_ROOT = '/';\n\n/**\n * Options for {@link createCJSONSnapshot}\n */\nexport interface CreateSnapshotOptions {\n /**\n * Filesystem API\n */\n fs?: FsApi;\n\n separator?: typeof sep;\n\n /**\n * Source to snapshot\n */\n source?: string;\n}\n\nexport type FsApi = typeof nodeFs | Volume;\n\n/**\n * Creates a CBOR snapshot from the `from` path using the filesystem API `fs`.\n *\n * @param opts Options for creating the snapshot\n * @returns A promise that resolves to the snapshot\n */\nexport async function createCBORSnapshot({\n fs,\n source: path = process.cwd(),\n}: CreateSnapshotOptions = {}): Promise<CborUint8Array<SnapshotNode>> {\n const snapshot = await toBinarySnapshot({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n fs: fs ? fs.promises : (nodeFs.promises as any),\n path,\n });\n return snapshot;\n}\n\n/**\n * Creates a CJSON snapshot from the `from` path using the filesystem API `fs`.\n *\n * @param opts Options for creating the snapshot\n * @returns A promise that resolves to the snapshot\n */\nexport async function createCJSONSnapshot({\n fs,\n separator,\n source: path = process.cwd(),\n}: CreateSnapshotOptions = {}): Promise<JsonUint8Array<SnapshotNode>> {\n const snapshot = await toJsonSnapshot({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n fs: fs ? fs.promises : (nodeFs.promises as any),\n path,\n separator,\n });\n return snapshot;\n}\n\n/**\n * Creates a CJSON snapshot from the `from` path using the filesystem API `fs`.\n *\n * @param opts Options for creating the snapshot\n * @returns A promise that resolves to the snapshot\n */\nexport async function createJSONSnapshot({\n fs,\n separator,\n source: path = process.cwd(),\n}: CreateSnapshotOptions = {}): Promise<string> {\n const { vol } = memfs();\n const tempSnapshot = await toBinarySnapshot({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n fs: fs ? fs.promises : (nodeFs.promises as any),\n path,\n separator,\n });\n await readSnapshot(CBOR_KIND, tempSnapshot, { fs: vol, separator });\n const snapshot = stableStringify(vol.toJSON());\n\n /* c8 ignore next */\n if (snapshot === undefined) {\n throw new Error('Snapshot is empty!');\n }\n return snapshot;\n}\n"]}