PHP 8.2.30
Preview: VersionedStruct.js Size: 3.01 KB
/home/byroehnu/easepaybiz.easetack.com/node_modules/restructure/src/VersionedStruct.js

import {Struct} from './Struct.js';

const getPath = (object, pathArray) => {
  return pathArray.reduce((prevObj, key) => prevObj && prevObj[key], object);
};

export class VersionedStruct extends Struct {
  constructor(type, versions = {}) {
    super();
    this.type = type;
    this.versions = versions;
    if (typeof type === 'string') {
      this.versionPath = type.split('.');
    }
  }

  decode(stream, parent, length = 0) {
    const res = this._setup(stream, parent, length);

    if (typeof this.type === 'string') {
      res.version = getPath(parent, this.versionPath);
    } else {
      res.version = this.type.decode(stream);
    }

    if (this.versions.header) {
      this._parseFields(stream, res, this.versions.header);
    }

    const fields = this.versions[res.version];
    if ((fields == null)) {
      throw new Error(`Unknown version ${res.version}`);
    }

    if (fields instanceof VersionedStruct) {
      return fields.decode(stream, parent);
    }

    this._parseFields(stream, res, fields);

    if (this.process != null) {
      this.process.call(res, stream);
    }
    return res;
  }

  size(val, parent, includePointers = true) {
    let key, type;
    if (!val) {
      throw new Error('Not a fixed size');
    }

    if (this.preEncode != null) {
      this.preEncode.call(val);
    }

    const ctx = {
      parent,
      val,
      pointerSize: 0
    };

    let size = 0;
    if (typeof this.type !== 'string') {
      size += this.type.size(val.version, ctx);
    }

    if (this.versions.header) {
      for (key in this.versions.header) {
        type = this.versions.header[key];
        if (type.size != null) {
          size += type.size(val[key], ctx);
        }
      }
    }

    const fields = this.versions[val.version];
    if ((fields == null)) {
      throw new Error(`Unknown version ${val.version}`);
    }

    for (key in fields) {
      type = fields[key];
      if (type.size != null) {
        size += type.size(val[key], ctx);
      }
    }

    if (includePointers) {
      size += ctx.pointerSize;
    }

    return size;
  }

  encode(stream, val, parent) {
    let key, type;
    if (this.preEncode != null) {
      this.preEncode.call(val, stream);
    }

    const ctx = {
      pointers: [],
      startOffset: stream.pos,
      parent,
      val,
      pointerSize: 0
    };

    ctx.pointerOffset = stream.pos + this.size(val, ctx, false);

    if (typeof this.type !== 'string') {
      this.type.encode(stream, val.version);
    }

    if (this.versions.header) {
      for (key in this.versions.header) {
        type = this.versions.header[key];
        if (type.encode != null) {
          type.encode(stream, val[key], ctx);
        }
      }
    }

    const fields = this.versions[val.version];
    for (key in fields) {
      type = fields[key];
      if (type.encode != null) {
        type.encode(stream, val[key], ctx);
      }
    }

    let i = 0;
    while (i < ctx.pointers.length) {
      const ptr = ctx.pointers[i++];
      ptr.type.encode(stream, ptr.val, ptr.parent);
    }
  }
}

Directory Contents

Dirs: 0 × Files: 18

Name Size Perms Modified Actions
127 B lr--r--r-- 2026-03-14 01:49:07
Edit Download
2.43 KB lrw-r--r-- 2026-03-05 00:19:58
Edit Download
412 B lrw-r--r-- 2026-03-05 00:19:59
Edit Download
741 B lrw-r--r-- 2026-03-05 00:19:59
Edit Download
398 B lrw-r--r-- 2026-03-05 00:20:01
Edit Download
795 B lrw-r--r-- 2026-03-05 00:20:02
Edit Download
1.85 KB lrw-r--r-- 2026-03-05 00:20:03
Edit Download
3.13 KB lrw-r--r-- 2026-03-05 00:20:04
Edit Download
533 B lrw-r--r-- 2026-03-05 00:20:05
Edit Download
1.62 KB lrw-r--r-- 2026-03-05 00:20:07
Edit Download
2.23 KB lrw-r--r-- 2026-03-05 00:20:08
Edit Download
920 B lrw-r--r-- 2026-03-05 00:20:09
Edit Download
4.09 KB lrw-r--r-- 2026-03-05 00:20:09
Edit Download
519 B lrw-r--r-- 2026-03-05 00:20:10
Edit Download
3.71 KB lrw-r--r-- 2026-03-05 00:20:10
Edit Download
2.33 KB lrw-r--r-- 2026-03-05 00:20:11
Edit Download
723 B lrw-r--r-- 2026-03-05 00:20:11
Edit Download
3.01 KB lrw-r--r-- 2026-03-05 00:20:11
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).