{"version":3,"sources":["jsdelivr-header.js","/npm/absurd-sql@0.0.46/dist/index.js"],"names":[],"mappings":"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","file":"/npm/absurd-sql@0.0.46/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/absurd-sql@0.0.46/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const ERRNO_CODES = {\n  EPERM: 63,\n  ENOENT: 44\n};\n\n// This implements an emscripten-compatible filesystem that is means\n// to be mounted to the one from `sql.js`. Example:\n//\n// let BFS = new SQLiteFS(SQL.FS, idbBackend);\n// SQL.FS.mount(BFS, {}, '/blocked');\n//\n// Now any files created under '/blocked' will be handled by this\n// filesystem, which creates a special file that handles read/writes\n// in the way that we want.\nclass SQLiteFS$1 {\n  constructor(FS, backend) {\n    this.FS = FS;\n    this.backend = backend;\n\n    this.node_ops = {\n      getattr: node => {\n        let fileattr = FS.isFile(node.mode) ? node.contents.getattr() : null;\n\n        let attr = {};\n        attr.dev = 1;\n        attr.ino = node.id;\n        attr.mode = fileattr ? fileattr.mode : node.mode;\n        attr.nlink = 1;\n        attr.uid = 0;\n        attr.gid = 0;\n        attr.rdev = node.rdev;\n        attr.size = fileattr ? fileattr.size : FS.isDir(node.mode) ? 4096 : 0;\n        attr.atime = new Date(0);\n        attr.mtime = new Date(0);\n        attr.ctime = new Date(0);\n        attr.blksize = fileattr ? fileattr.blockSize : 4096;\n        attr.blocks = Math.ceil(attr.size / attr.blksize);\n        return attr;\n      },\n      setattr: (node, attr) => {\n        if (this.FS.isFile(node.mode)) {\n          node.contents.setattr(attr);\n        } else {\n          if (attr.mode != null) {\n            node.mode = attr.mode;\n          }\n          if (attr.size != null) {\n            node.size = attr.size;\n          }\n        }\n      },\n      lookup: (parent, name) => {\n        throw new this.FS.ErrnoError(ERRNO_CODES.ENOENT);\n      },\n      mknod: (parent, name, mode, dev) => {\n        if (name.endsWith('.lock')) {\n          throw new Error('Locking via lockfiles is not supported');\n        }\n\n        return this.createNode(parent, name, mode, dev);\n      },\n      rename: (old_node, new_dir, new_name) => {\n        throw new Error('rename not implemented');\n      },\n      unlink: (parent, name) => {\n        let node = this.FS.lookupNode(parent, name);\n        node.contents.delete(name);\n      },\n      readdir: node => {\n        // We could list all the available databases here if `node` is\n        // the root directory. However Firefox does not implemented\n        // such a methods. Other browsers do, but since it's not\n        // supported on all browsers users will need to track it\n        // separate anyway right now\n\n        throw new Error('readdir not implemented');\n      },\n      symlink: (parent, newname, oldpath) => {\n        throw new Error('symlink not implemented');\n      },\n      readlink: node => {\n        throw new Error('symlink not implemented');\n      }\n    };\n\n    this.stream_ops = {\n      open: stream => {\n        if (this.FS.isFile(stream.node.mode)) {\n          stream.node.contents.open();\n        }\n      },\n\n      close: stream => {\n        if (this.FS.isFile(stream.node.mode)) {\n          stream.node.contents.close();\n        }\n      },\n\n      read: (stream, buffer, offset, length, position) => {\n        // console.log('read', offset, length, position)\n        return stream.node.contents.read(buffer, offset, length, position);\n      },\n\n      write: (stream, buffer, offset, length, position) => {\n        // console.log('write', offset, length, position);\n        return stream.node.contents.write(buffer, offset, length, position);\n      },\n\n      llseek: (stream, offset, whence) => {\n        // Copied from MEMFS\n        var position = offset;\n        if (whence === 1) {\n          position += stream.position;\n        } else if (whence === 2) {\n          if (FS.isFile(stream.node.mode)) {\n            position += stream.node.contents.getattr().size;\n          }\n        }\n        if (position < 0) {\n          throw new this.FS.ErrnoError(28);\n        }\n        return position;\n      },\n      allocate: (stream, offset, length) => {\n        stream.node.contents.setattr({ size: offset + length });\n      },\n      mmap: (stream, address, length, position, prot, flags) => {\n        throw new Error('mmap not implemented');\n      },\n      msync: (stream, buffer, offset, length, mmapFlags) => {\n        throw new Error('msync not implemented');\n      },\n      fsync: (stream, buffer, offset, length, mmapFlags) => {\n        stream.node.contents.fsync();\n      }\n    };\n  }\n\n  mount() {\n    return this.createNode(null, '/', 16384 /* dir */ | 511 /* 0777 */, 0);\n  }\n\n  lock(path, lockType) {\n    let { node } = this.FS.lookupPath(path);\n    return node.contents.lock(lockType);\n  }\n\n  unlock(path, lockType) {\n    let { node } = this.FS.lookupPath(path);\n    return node.contents.unlock(lockType);\n  }\n\n  createNode(parent, name, mode, dev) {\n    // Only files and directories supported\n    if (!(this.FS.isDir(mode) || this.FS.isFile(mode))) {\n      throw new this.FS.ErrnoError(ERRNO_CODES.EPERM);\n    }\n\n    var node = this.FS.createNode(parent, name, mode, dev);\n    if (this.FS.isDir(node.mode)) {\n      node.node_ops = {\n        mknod: this.node_ops.mknod,\n        lookup: this.node_ops.lookup,\n        unlink: this.node_ops.unlink,\n        setattr: this.node_ops.setattr\n      };\n      node.stream_ops = {};\n      node.contents = {};\n    } else if (this.FS.isFile(node.mode)) {\n      node.node_ops = this.node_ops;\n      node.stream_ops = this.stream_ops;\n\n      // Create file!\n      node.contents = this.backend.createFile(name);\n    }\n\n    // add the new node to the parent\n    if (parent) {\n      parent.contents[name] = node;\n      parent.timestamp = node.timestamp;\n    }\n\n    return node;\n  }\n}\n\n// Right now we don't support `export from` so we do this manually\nconst SQLiteFS = SQLiteFS$1;\n\nexport { SQLiteFS };\n"]}