1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | Object.defineProperty(exports, "__esModule", { value: true });
|
10 | exports.UpdateRecorderBom = exports.UpdateRecorderBase = void 0;
|
11 | const exception_1 = require("../exception/exception");
|
12 | const update_buffer_1 = require("../utility/update-buffer");
|
13 | class UpdateRecorderBase {
|
14 | constructor(entry) {
|
15 | this._original = Buffer.from(entry.content);
|
16 | this._content = update_buffer_1.UpdateBufferBase.create(entry.content);
|
17 | this._path = entry.path;
|
18 | }
|
19 | static createFromFileEntry(entry) {
|
20 | const c0 = entry.content.byteLength > 0 && entry.content.readUInt8(0);
|
21 | const c1 = entry.content.byteLength > 1 && entry.content.readUInt8(1);
|
22 | const c2 = entry.content.byteLength > 2 && entry.content.readUInt8(2);
|
23 |
|
24 | if (c0 == 0xef && c1 == 0xbb && c2 == 0xbf) {
|
25 | return new UpdateRecorderBom(entry);
|
26 | }
|
27 | else if (c0 === 0xff && c1 == 0xfe) {
|
28 | return new UpdateRecorderBom(entry);
|
29 | }
|
30 | else if (c0 === 0xfe && c1 == 0xff) {
|
31 | return new UpdateRecorderBom(entry);
|
32 | }
|
33 | return new UpdateRecorderBase(entry);
|
34 | }
|
35 | get path() {
|
36 | return this._path;
|
37 | }
|
38 |
|
39 | insertLeft(index, content) {
|
40 | this._content.insertLeft(index, typeof content == 'string' ? Buffer.from(content) : content);
|
41 | return this;
|
42 | }
|
43 | insertRight(index, content) {
|
44 | this._content.insertRight(index, typeof content == 'string' ? Buffer.from(content) : content);
|
45 | return this;
|
46 | }
|
47 | remove(index, length) {
|
48 | this._content.remove(index, length);
|
49 | return this;
|
50 | }
|
51 | apply(content) {
|
52 | if (!content.equals(this._content.original)) {
|
53 | throw new exception_1.ContentHasMutatedException(this.path);
|
54 | }
|
55 | return this._content.generate();
|
56 | }
|
57 | }
|
58 | exports.UpdateRecorderBase = UpdateRecorderBase;
|
59 | class UpdateRecorderBom extends UpdateRecorderBase {
|
60 | constructor(entry, _delta = 1) {
|
61 | super(entry);
|
62 | this._delta = _delta;
|
63 | }
|
64 | insertLeft(index, content) {
|
65 | return super.insertLeft(index + this._delta, content);
|
66 | }
|
67 | insertRight(index, content) {
|
68 | return super.insertRight(index + this._delta, content);
|
69 | }
|
70 | remove(index, length) {
|
71 | return super.remove(index + this._delta, length);
|
72 | }
|
73 | }
|
74 | exports.UpdateRecorderBom = UpdateRecorderBom;
|