Zip file-backed filesystem Implemented according to the standard: http://pkware.com/documents/casestudies/APPNOTE.TXT

While there are a few zip libraries for JavaScript (e.g. JSZip and zip.js), they are not a good match for ZenFS. In particular, these libraries perform a lot of unneeded data copying, and eagerly decompress every file in the zip file upon loading to check the CRC32. They also eagerly decode strings. Furthermore, these libraries duplicate functionality already present in ZenFS (e.g. UTF-8 decoding and binary data manipulation).

When the filesystem is instantiated, we determine the directory structure of the zip file as quickly as possible. We lazily decompress and check the CRC32 of files. We do not cache decompressed files; if this is a desired feature, it is best implemented as a generic file system wrapper that can cache data from arbitrary file systems.

Current limitations:

  • No encryption.
  • No ZIP64 support.
  • Read-only. Write support would require that we:
    • Keep track of changed/new files.
    • Compress changed files, and generate appropriate metadata for each.
    • Update file offsets for other files in the zip file.
    • Stream it out to a location. This isn't that bad, so we might do this at a later date.

Hierarchy

  • ReadonlyMixin & AsyncFSMethods & FileSystem<this>
    • ZipFS

Constructors

  • Parameters

    • label: string
    • data: ArrayBufferLike

    Returns ZipFS

Properties

_mountPoint?: string

The last place this file system was mounted

_time: number = ...
attributes: ConstMap<FileSystemAttributes, keyof FileSystemAttributes, void>

FileSystemAttributes

data: ArrayBufferLike
directories: Map<string, Set<string>> = ...
eocd: Header
files: Map<string, FileEntry> = ...
id: number

A unique ID for this kind of file system. Currently unused internally, but could be used for partition tables or something

label: string
name: string

The name for this file system. For example, tmpfs for an in memory one

Accessors

  • get numberOfCentralDirectoryEntries(): number
  • Returns number

Methods

  • Parameters

    • path: string
    • flag: string
    • mode: number

    Returns Promise<never>

  • Create the file at path with the given options. Then, open it with flag.

    Parameters

    • path: string
    • flag: string
    • mode: number
    • options: CreationOptions

    Returns Promise<File>

  • Parameters

    • path: string
    • flag: string
    • mode: number

    Returns never

  • Create the file at path with the given options. Then, open it with flag.

    Parameters

    • path: string
    • flag: string
    • mode: number
    • options: CreationOptions

    Returns File

  • Test whether or not path exists.

    Parameters

    • path: string

    Returns Promise<boolean>

  • Test whether or not path exists.

    Parameters

    • path: string

    Returns boolean

  • Parameters

    • srcpath: string
    • dstpath: string

    Returns Promise<never>

  • Parameters

    • target: string
    • link: string

    Returns Promise<void>

  • Parameters

    • srcpath: string
    • dstpath: string

    Returns never

  • Parameters

    • target: string
    • link: string

    Returns void

  • Returns FileSystemMetadata

  • Parameters

    • path: string
    • mode: number

    Returns Promise<never>

  • Parameters

    • path: string
    • mode: number
    • options: CreationOptions

    Returns Promise<void>

  • Parameters

    • path: string
    • mode: number

    Returns never

  • Parameters

    • path: string
    • mode: number
    • options: CreationOptions

    Returns void

  • Opens the file at path with flag. The file must exist.

    Parameters

    • path: string

      The path to open.

    • flag: string

      The flag to use when opening the file.

    Returns Promise<File>

  • Opens the file at path with flag. The file must exist.

    Parameters

    • path: string

      The path to open.

    • flag: string

      The flag to use when opening the file.

    Returns File

  • Reads into a buffer

    Parameters

    • path: string
    • buffer: Uint8Array

      The buffer to read into. You must set the byteOffset and byteLength appropriately!

    • offset: number

      The offset into the file to start reading from

    • end: number

      The position in the file to stop reading

    Returns Promise<void>

  • Parameters

    • path: string

    Returns Promise<string[]>

  • Parameters

    • path: string

    Returns string[]

  • Reads into a buffer

    Parameters

    • path: string
    • buffer: Uint8Array

      The buffer to read into. You must set the byteOffset and byteLength appropriately!

    • offset: number

      The offset into the file to start reading from

    • end: number

      The position in the file to stop reading

    Returns void

  • Returns Promise<void>

  • Parameters

    • oldPath: string
    • newPath: string

    Returns Promise<never>

  • Parameters

    • oldPath: string
    • newPath: string

    Returns Promise<void>

  • Parameters

    • oldPath: string
    • newPath: string

    Returns never

  • Parameters

    • oldPath: string
    • newPath: string

    Returns void

  • Parameters

    • path: string

    Returns Promise<never>

  • Parameters

    • path: string

    Returns Promise<void>

  • Parameters

    • path: string

    Returns never

  • Parameters

    • path: string

    Returns void

  • Parameters

    • path: string

    Returns Promise<Stats>

  • Parameters

    • path: string

    Returns Stats

  • Parameters

    • path: string
    • data: Uint8Array
    • stats: Readonly<StatsLike<number>>

    Returns Promise<never>

  • Parameters

    • path: string
    • Optionaldata: Uint8Array
    • Optionalstats: Readonly<Partial<StatsLike>>

    Returns Promise<void>

  • Parameters

    • path: string
    • data: Uint8Array
    • stats: Readonly<StatsLike<number>>

    Returns never

  • Parameters

    • path: string
    • Optionaldata: Uint8Array
    • Optionalstats: Readonly<Partial<StatsLike>>

    Returns void

  • Returns string

  • Parameters

    • path: string

    Returns Promise<never>

  • Parameters

    • path: string

    Returns Promise<void>

  • Parameters

    • path: string

    Returns never

  • Parameters

    • path: string

    Returns void

  • Experimental

    Default implementation.

    Returns UsageInfo

    Implement

  • Parameters

    • path: string
    • buffer: Uint8Array
    • offset: number

    Returns Promise<never>

  • Writes a buffer to a file

    Parameters

    • path: string
    • buffer: Uint8Array

      The buffer to write. You must set the byteOffset and byteLength appropriately!

    • offset: number

      The offset in the file to start writing

    Returns Promise<void>

  • Parameters

    • path: string
    • buffer: Uint8Array
    • offset: number

    Returns Promise<never>

  • Writes a buffer to a file

    Parameters

    • path: string
    • buffer: Uint8Array

      The buffer to write. You must set the byteOffset and byteLength appropriately!

    • offset: number

      The offset in the file to start writing

    Returns void

  • Locates the end of central directory record at the end of the file. Throws an exception if it cannot be found.

    Parameters

    • data: ArrayBufferLike

    Returns Header

    Unfortunately, the comment is variable size and up to 64K in size. We assume that the magic signature does not appear in the comment, and in the bytes between the comment and the signature. Other ZIP implementations make this same assumption, since the alternative is to read thread every entry in the file.

    Offsets in this function are negative (i.e. from the end of the file).

    There is no byte alignment on the comment