snapshot.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. exports.Snapshot = void 0;
  7. const util_1 = __importDefault(require("util"));
  8. const base_1 = require("./base");
  9. const file_1 = require("./file");
  10. const utils_1 = require("./utils");
  11. /**
  12. * A container for the signed part of snapshot metadata.
  13. *
  14. * Snapshot contains information about all target Metadata files.
  15. * A top-level role that specifies the latest versions of all targets metadata files,
  16. * and hence the latest versions of all targets (including any dependencies between them) on the repository.
  17. */
  18. class Snapshot extends base_1.Signed {
  19. constructor(opts) {
  20. super(opts);
  21. this.type = base_1.MetadataKind.Snapshot;
  22. this.meta = opts.meta || { 'targets.json': new file_1.MetaFile({ version: 1 }) };
  23. }
  24. equals(other) {
  25. if (!(other instanceof Snapshot)) {
  26. return false;
  27. }
  28. return super.equals(other) && util_1.default.isDeepStrictEqual(this.meta, other.meta);
  29. }
  30. toJSON() {
  31. return {
  32. _type: this.type,
  33. meta: metaToJSON(this.meta),
  34. spec_version: this.specVersion,
  35. version: this.version,
  36. expires: this.expires,
  37. ...this.unrecognizedFields,
  38. };
  39. }
  40. static fromJSON(data) {
  41. const { unrecognizedFields, ...commonFields } = base_1.Signed.commonFieldsFromJSON(data);
  42. const { meta, ...rest } = unrecognizedFields;
  43. return new Snapshot({
  44. ...commonFields,
  45. meta: metaFromJSON(meta),
  46. unrecognizedFields: rest,
  47. });
  48. }
  49. }
  50. exports.Snapshot = Snapshot;
  51. function metaToJSON(meta) {
  52. return Object.entries(meta).reduce((acc, [path, metadata]) => ({
  53. ...acc,
  54. [path]: metadata.toJSON(),
  55. }), {});
  56. }
  57. function metaFromJSON(data) {
  58. let meta;
  59. if (utils_1.guard.isDefined(data)) {
  60. if (!utils_1.guard.isObjectRecord(data)) {
  61. throw new TypeError('meta field is malformed');
  62. }
  63. else {
  64. meta = Object.entries(data).reduce((acc, [path, metadata]) => ({
  65. ...acc,
  66. [path]: file_1.MetaFile.fromJSON(metadata),
  67. }), {});
  68. }
  69. }
  70. return meta;
  71. }