@did-btcr2/common 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +3 -0
  3. package/dist/cjs/canonicalization.js +163 -0
  4. package/dist/cjs/canonicalization.js.map +1 -0
  5. package/dist/cjs/constants.js +116 -0
  6. package/dist/cjs/constants.js.map +1 -0
  7. package/dist/cjs/errors.js +151 -0
  8. package/dist/cjs/errors.js.map +1 -0
  9. package/dist/cjs/exts.js +182 -0
  10. package/dist/cjs/exts.js.map +1 -0
  11. package/dist/cjs/index.js +10 -0
  12. package/dist/cjs/index.js.map +1 -0
  13. package/dist/cjs/interfaces.js +2 -0
  14. package/dist/cjs/interfaces.js.map +1 -0
  15. package/dist/cjs/logger.browser.js +77 -0
  16. package/dist/cjs/logger.browser.js.map +1 -0
  17. package/dist/cjs/logger.js +139 -0
  18. package/dist/cjs/logger.js.map +1 -0
  19. package/dist/cjs/package.json +1 -0
  20. package/dist/cjs/patch.js +163 -0
  21. package/dist/cjs/patch.js.map +1 -0
  22. package/dist/cjs/types.js +20 -0
  23. package/dist/cjs/types.js.map +1 -0
  24. package/dist/esm/canonicalization.js +163 -0
  25. package/dist/esm/canonicalization.js.map +1 -0
  26. package/dist/esm/constants.js +116 -0
  27. package/dist/esm/constants.js.map +1 -0
  28. package/dist/esm/errors.js +151 -0
  29. package/dist/esm/errors.js.map +1 -0
  30. package/dist/esm/exts.js +182 -0
  31. package/dist/esm/exts.js.map +1 -0
  32. package/dist/esm/index.js +10 -0
  33. package/dist/esm/index.js.map +1 -0
  34. package/dist/esm/interfaces.js +2 -0
  35. package/dist/esm/interfaces.js.map +1 -0
  36. package/dist/esm/logger.browser.js +77 -0
  37. package/dist/esm/logger.browser.js.map +1 -0
  38. package/dist/esm/logger.js +139 -0
  39. package/dist/esm/logger.js.map +1 -0
  40. package/dist/esm/patch.js +163 -0
  41. package/dist/esm/patch.js.map +1 -0
  42. package/dist/esm/types.js +20 -0
  43. package/dist/esm/types.js.map +1 -0
  44. package/dist/types/canonicalization.d.ts +106 -0
  45. package/dist/types/canonicalization.d.ts.map +1 -0
  46. package/dist/types/constants.d.ts +103 -0
  47. package/dist/types/constants.d.ts.map +1 -0
  48. package/dist/types/errors.d.ts +113 -0
  49. package/dist/types/errors.d.ts.map +1 -0
  50. package/dist/types/exts.d.ts +82 -0
  51. package/dist/types/exts.d.ts.map +1 -0
  52. package/dist/types/index.d.ts +9 -0
  53. package/dist/types/index.d.ts.map +1 -0
  54. package/dist/types/interfaces.d.ts +282 -0
  55. package/dist/types/interfaces.d.ts.map +1 -0
  56. package/dist/types/logger.browser.d.ts +28 -0
  57. package/dist/types/logger.browser.d.ts.map +1 -0
  58. package/dist/types/logger.d.ts +45 -0
  59. package/dist/types/logger.d.ts.map +1 -0
  60. package/dist/types/patch.d.ts +63 -0
  61. package/dist/types/patch.d.ts.map +1 -0
  62. package/dist/types/types.d.ts +104 -0
  63. package/dist/types/types.d.ts.map +1 -0
  64. package/package.json +109 -0
  65. package/src/canonicalization.ts +180 -0
  66. package/src/constants.ts +123 -0
  67. package/src/errors.ts +224 -0
  68. package/src/exts.ts +293 -0
  69. package/src/index.ts +11 -0
  70. package/src/interfaces.ts +311 -0
  71. package/src/logger.browser.ts +92 -0
  72. package/src/logger.ts +162 -0
  73. package/src/patch.ts +181 -0
  74. package/src/rdf-canonize.d.ts +6 -0
  75. package/src/types.ts +113 -0
@@ -0,0 +1,182 @@
1
+ import { Canonicalization } from './canonicalization.js';
2
+ import { Patch } from './patch.js';
3
+ /** Array Interface Extensions */
4
+ Array.prototype.last = function () {
5
+ return this[this.length - 1] ?? undefined;
6
+ };
7
+ Array.prototype[-1] = function () {
8
+ return this.last();
9
+ };
10
+ Array.prototype.toUint8Array = function () {
11
+ return new Uint8Array(this);
12
+ };
13
+ /** BufferConstructor/Buffer Interface Extensions */
14
+ Buffer.fromHex = function (hex) {
15
+ return Buffer.from(hex, 'hex');
16
+ };
17
+ Buffer.toHex = function (ui8) {
18
+ return Buffer.from(ui8).toString('hex');
19
+ };
20
+ Buffer.toUint8Array = function (buf) {
21
+ return new Uint8Array(buf);
22
+ };
23
+ /** Date Interface Extensions */
24
+ Date.prototype.getUTCDateTime = function () {
25
+ return `${this.toISOString().slice(0, -5)}Z`;
26
+ };
27
+ Date.prototype.toUnix = function () {
28
+ const time = this.getTime();
29
+ if (isNaN(time)) {
30
+ throw new Error(`Invalid date string: "${this}"`);
31
+ }
32
+ return time;
33
+ };
34
+ /** JSON Interface Extensions */
35
+ JSON.is = function (unknown) {
36
+ if (unknown === null || typeof unknown !== 'object')
37
+ return false;
38
+ if (Array.isArray(unknown))
39
+ return unknown.every(item => Object.getPrototypeOf(item) !== null);
40
+ else
41
+ return Object.getPrototypeOf(unknown) === null;
42
+ };
43
+ JSON.parsable = function (unknown) {
44
+ try {
45
+ JSON.parse(unknown);
46
+ return true;
47
+ }
48
+ catch {
49
+ return false;
50
+ }
51
+ };
52
+ JSON.stringifiable = function (unknown) {
53
+ try {
54
+ JSON.stringify(unknown);
55
+ return true;
56
+ }
57
+ catch {
58
+ return false;
59
+ }
60
+ };
61
+ JSON.unprototyped = function (unknown) {
62
+ if (Array.isArray(unknown)) {
63
+ return unknown.every(item => Object.getPrototypeOf(item) === null);
64
+ }
65
+ return Object.getPrototypeOf(unknown) === null;
66
+ };
67
+ JSON.normalize = function (unknown) {
68
+ try {
69
+ return JSON.parse(JSON.stringify(unknown));
70
+ }
71
+ catch {
72
+ throw new Error('The object is not unprotocyped');
73
+ }
74
+ };
75
+ JSON.copy = function (o) {
76
+ return Object.assign({}, o);
77
+ };
78
+ JSON.clone = function (o) {
79
+ return JSON.parse(JSON.stringify(o));
80
+ };
81
+ JSON.cloneReplace = function (o, e, r) {
82
+ return JSON.parse(JSON.stringify(o).replaceAll(e, r));
83
+ };
84
+ JSON.equal = function (a, b) {
85
+ return a === b;
86
+ };
87
+ JSON.deepEqual = function (a, b) {
88
+ if (JSON.equal(a, b))
89
+ return true;
90
+ if (a === null || b === null || typeof a !== typeof b)
91
+ return false;
92
+ if (typeof a === 'object') {
93
+ const isArrayA = Array.isArray(a);
94
+ const isArrayB = Array.isArray(b);
95
+ if (isArrayA !== isArrayB)
96
+ return false;
97
+ if (isArrayA && isArrayB) {
98
+ if (a.length !== b.length)
99
+ return false;
100
+ for (let i = 0; i < a.length; i++) {
101
+ if (!this.deepEqual(a[i], b[i]))
102
+ return false;
103
+ }
104
+ return true;
105
+ }
106
+ else {
107
+ const keysA = Object.keys(a);
108
+ const keysB = Object.keys(b);
109
+ if (keysA.length !== keysB.length)
110
+ return false;
111
+ for (const key of keysA) {
112
+ if (!Object.prototype.hasOwnProperty.call(b, key)) {
113
+ return false;
114
+ }
115
+ if (!this.deepEqual(a[key], b[key])) {
116
+ return false;
117
+ }
118
+ }
119
+ return true;
120
+ }
121
+ }
122
+ return false;
123
+ };
124
+ JSON.delete = function (o, keys) {
125
+ if (!JSON.is(o))
126
+ return o;
127
+ for (const key of keys) {
128
+ if (Object.prototype.hasOwnProperty.call(o, key)) {
129
+ delete o[key];
130
+ }
131
+ for (const key in o) {
132
+ if (typeof o[key] === 'object') {
133
+ o[key] = this.delete(o[key], [key]);
134
+ }
135
+ }
136
+ }
137
+ return o;
138
+ };
139
+ JSON.sanitize = function (o) {
140
+ for (const key of Object.keys(o)) {
141
+ if (o[key] === undefined) {
142
+ delete o[key];
143
+ }
144
+ }
145
+ return o;
146
+ };
147
+ JSON.canonicalization = new Canonicalization();
148
+ JSON.patch = new Patch();
149
+ /** Set Interface Extensions */
150
+ Set.prototype.difference = function (other) {
151
+ const result = new Set(this);
152
+ for (const item of other) {
153
+ if (result.has(item)) {
154
+ result.delete(item);
155
+ }
156
+ }
157
+ return result;
158
+ };
159
+ /** String Interface Extensions */
160
+ String.prototype.toSnake = function () {
161
+ return this
162
+ .replace(/([a-z])([A-Z])/g, '$1_$2')
163
+ .toLowerCase();
164
+ };
165
+ String.prototype.toSnakeScream = function () {
166
+ return this.toSnake().toUpperCase();
167
+ };
168
+ String.prototype.chop = function () {
169
+ return this.length > 0 ? this.slice(0, -1) : '';
170
+ };
171
+ String.prototype.replaceEnd = function (e, r) {
172
+ const pattern = e instanceof RegExp
173
+ ? new RegExp(e.source.endsWith('$') ? e.source : `${e.source}$`, e.flags.replace('g', ''))
174
+ : new RegExp(`${e.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')}$`);
175
+ return this.replace(pattern, r ?? '');
176
+ };
177
+ /** Uint8Array Interface Extensions */
178
+ Uint8Array.prototype.toArray = function () {
179
+ return Array.from(this);
180
+ };
181
+ export default global;
182
+ //# sourceMappingURL=exts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exts.js","sourceRoot":"","sources":["../../src/exts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import './exts.js';
2
+ export * from './canonicalization.js';
3
+ export * from './constants.js';
4
+ export * from './errors.js';
5
+ export * from './interfaces.js';
6
+ export * from './logger.js';
7
+ export * from './patch.js';
8
+ export * from './types.js';
9
+ export * from './exts.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAC;AAEnB,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAE3B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,77 @@
1
+ export var Env;
2
+ (function (Env) {
3
+ Env["Development"] = "development";
4
+ Env["Production"] = "production";
5
+ Env["Test"] = "test";
6
+ })(Env || (Env = {}));
7
+ export const NODE_ENV = (typeof process !== 'undefined' && process.env?.NODE_ENV) ||
8
+ Env.Development;
9
+ // Browser-friendly level "styles" using CSS in console
10
+ const LEVEL_CSS = {
11
+ debug: 'color: #16a34a; font-weight: 600;',
12
+ error: 'color: #ef4444; font-weight: 600;',
13
+ info: 'color: #3b82f6; font-weight: 600;',
14
+ log: 'color: #6b7280;',
15
+ warn: 'color: #eab308; font-weight: 600;',
16
+ security: 'color: #a855f7; font-weight: 700;',
17
+ };
18
+ const LOG_LEVELS = {
19
+ development: ['debug', 'info', 'log', 'warn', 'security'],
20
+ test: ['log', 'info', 'error'],
21
+ production: ['error'],
22
+ };
23
+ // eslint-disable-next-line no-undef
24
+ const LEVEL_METHODS = {
25
+ debug: 'debug',
26
+ error: 'error',
27
+ info: 'info',
28
+ log: 'log',
29
+ warn: 'warn',
30
+ security: 'warn',
31
+ };
32
+ export class Logger {
33
+ levels;
34
+ namespace;
35
+ constructor(namespace) {
36
+ this.levels = LOG_LEVELS[NODE_ENV] || [];
37
+ this.namespace = namespace ?? 'did-btcr2-js';
38
+ }
39
+ _log(level, message, ...args) {
40
+ if (!this.levels.includes(level))
41
+ return;
42
+ const ts = new Date().toISOString();
43
+ const ns = this.namespace ? `[${this.namespace}]` : '';
44
+ const method = LEVEL_METHODS[level];
45
+ // %c applies CSS to the next string token
46
+ console[method]('%c' + ts + '%c ' + ns + ' ' + level + ':%c ' + String(message ?? ''), 'color:#9ca3af;', // timestamp (gray)
47
+ 'color:#9ca3af;', // namespace (same gray)
48
+ LEVEL_CSS[level], ...args);
49
+ }
50
+ debug(m, ...a) { this._log('debug', m, ...a); return this; }
51
+ error(m, ...a) { this._log('error', m, ...a); return this; }
52
+ info(m, ...a) { this._log('info', m, ...a); return this; }
53
+ warn(m, ...a) { this._log('warn', m, ...a); return this; }
54
+ security(m, ...a) { this._log('security', m, ...a); return this; }
55
+ log(m, ...a) { this._log('log', m, ...a); return this; }
56
+ newline() { console.log(); return this; }
57
+ // Static convenience API
58
+ static debug(m, ...a) { new Logger().debug(m, ...a); }
59
+ static error(m, ...a) { new Logger().error(m, ...a); }
60
+ static info(m, ...a) { new Logger().info(m, ...a); }
61
+ static warn(m, ...a) { new Logger().warn(m, ...a); }
62
+ static security(m, ...a) { new Logger().security(m, ...a); }
63
+ static log(m, ...a) { new Logger().log(m, ...a); }
64
+ static newline() { new Logger().newline(); }
65
+ // Keep signature but avoid Node 'path' – do a lightweight parse
66
+ // (unused by default; safe if you later enable it)
67
+ static getCallerLocation() {
68
+ const stack = new Error().stack?.split('\n');
69
+ const line = stack?.[3] || stack?.[2] || '';
70
+ const match = line.match(/\((.*):(\d+):(\d+)\)/) || line.match(/at (.*):(\d+):(\d+)/);
71
+ if (!match)
72
+ return '';
73
+ const file = (match[1] || '').split(/[\\/]/).pop() || '';
74
+ return `${file}:${match[2]}`;
75
+ }
76
+ }
77
+ //# sourceMappingURL=logger.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.browser.js","sourceRoot":"","sources":["../../src/logger.browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ import chalk from 'chalk';
2
+ import path from 'path';
3
+ export var Env;
4
+ (function (Env) {
5
+ Env["Development"] = "development";
6
+ Env["Production"] = "production";
7
+ Env["Test"] = "test";
8
+ })(Env || (Env = {}));
9
+ export const NODE_ENV = process.env.NODE_ENV || Env.Development;
10
+ /**
11
+ * Mapping of log levels to colors for cleaner, more flexible logging.
12
+ */
13
+ const LOG_LEVELS = {
14
+ development: ['debug', 'info', 'log', 'warn', 'security'],
15
+ test: ['log', 'info', 'error'],
16
+ production: ['error'],
17
+ };
18
+ /**
19
+ * Colors associated with each log level.
20
+ */
21
+ const LEVEL_STYLES = {
22
+ debug: chalk.green,
23
+ error: chalk.red,
24
+ info: chalk.blue,
25
+ log: chalk.gray,
26
+ warn: chalk.yellow,
27
+ security: chalk.magenta,
28
+ };
29
+ /**
30
+ * Defines the method mapping for console methods.
31
+ */
32
+ // eslint-disable-next-line no-undef
33
+ const LEVEL_METHODS = {
34
+ debug: 'debug',
35
+ error: 'error',
36
+ info: 'info',
37
+ log: 'log',
38
+ warn: 'warn',
39
+ security: 'warn',
40
+ };
41
+ /**
42
+ * A flexible, feature-rich logger with:
43
+ * - Environment-based filtering
44
+ * - Namespacing
45
+ * - File/line tracing
46
+ * - Timestamps
47
+ * - Colorized output
48
+ */
49
+ export class Logger {
50
+ levels;
51
+ namespace;
52
+ constructor(namespace) {
53
+ this.levels = LOG_LEVELS[NODE_ENV] || [];
54
+ this.namespace = namespace ?? 'did-btcr2-js';
55
+ }
56
+ /**
57
+ * Logs a message with the specified level.
58
+ */
59
+ _log(level, message, ...args) {
60
+ if (!this.levels.includes(level))
61
+ return;
62
+ const color = LEVEL_STYLES[level];
63
+ const method = LEVEL_METHODS[level];
64
+ const timestamp = new Date().toISOString();
65
+ const namespace = this.namespace ? `[${this.namespace}]` : '';
66
+ console[method](`${chalk.gray(timestamp)} ${namespace} ${color(level)}: ${chalk.white(message)}`, ...args);
67
+ }
68
+ // 🔹 Instance-based logging methods
69
+ debug(message, ...args) {
70
+ this._log('debug', message, ...args);
71
+ return this;
72
+ }
73
+ error(message, ...args) {
74
+ this._log('error', message, ...args);
75
+ return this;
76
+ }
77
+ info(message, ...args) {
78
+ this._log('info', message, ...args);
79
+ return this;
80
+ }
81
+ warn(message, ...args) {
82
+ this._log('warn', message, ...args);
83
+ return this;
84
+ }
85
+ security(message, ...args) {
86
+ this._log('security', message, ...args);
87
+ return this;
88
+ }
89
+ log(message, ...args) {
90
+ this._log('log', message, ...args);
91
+ return this;
92
+ }
93
+ newline() {
94
+ console.log();
95
+ return this;
96
+ }
97
+ /**
98
+ * Static methods for convenience (auto-instantiate).
99
+ */
100
+ static debug(message, ...args) {
101
+ new Logger().debug(message, ...args);
102
+ }
103
+ static error(message, ...args) {
104
+ new Logger().error(message, ...args);
105
+ }
106
+ static info(message, ...args) {
107
+ new Logger().info(message, ...args);
108
+ }
109
+ static warn(message, ...args) {
110
+ new Logger().warn(message, ...args);
111
+ }
112
+ static security(message, ...args) {
113
+ new Logger().security(message, ...args);
114
+ }
115
+ static log(message, ...args) {
116
+ new Logger().log(message, ...args);
117
+ }
118
+ static newline() {
119
+ new Logger().newline();
120
+ }
121
+ /**
122
+ * Returns the caller's file and line number.
123
+ */
124
+ static getCallerLocation() {
125
+ const stack = new Error().stack?.split('\n');
126
+ if (!stack)
127
+ return '';
128
+ // The first lines are irrelevant, we want the caller of the logger
129
+ const callerLine = stack[3] || stack[2] || '';
130
+ // Extract file path and line number
131
+ const match = callerLine.match(/\((.*):(\d+):(\d+)\)/);
132
+ if (!match)
133
+ return '';
134
+ const filePath = match[1];
135
+ const lineNumber = match[2];
136
+ return `${path.basename(filePath)}:${lineNumber}`;
137
+ }
138
+ }
139
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAN,IAAY,GAIX;AAJD,WAAY,GAAG;IACb,kCAA2B,CAAA;IAC3B,gCAAyB,CAAA;IACzB,oBAAa,CAAA;AACf,CAAC,EAJW,GAAG,KAAH,GAAG,QAId;AAID,MAAM,CAAC,MAAM,QAAQ,GAAI,OAAO,CAAC,GAAG,CAAC,QAAgB,IAAI,GAAG,CAAC,WAAW,CAAC;AAEzE;;GAEG;AACH,MAAM,UAAU,GAAyB;IACvC,WAAW,EAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC;IAC1D,IAAI,EAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;IACtC,UAAU,EAAI,CAAC,OAAO,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,MAAM,YAAY,GAAiC;IACjD,KAAK,EAAM,KAAK,CAAC,KAAK;IACtB,KAAK,EAAM,KAAK,CAAC,GAAG;IACpB,IAAI,EAAO,KAAK,CAAC,IAAI;IACrB,GAAG,EAAQ,KAAK,CAAC,IAAI;IACrB,IAAI,EAAO,KAAK,CAAC,MAAM;IACvB,QAAQ,EAAG,KAAK,CAAC,OAAO;CACzB,CAAC;AAEF;;GAEG;AACH,oCAAoC;AACpC,MAAM,aAAa,GAAiC;IAClD,KAAK,EAAM,OAAO;IAClB,KAAK,EAAM,OAAO;IAClB,IAAI,EAAO,MAAM;IACjB,GAAG,EAAQ,KAAK;IAChB,IAAI,EAAO,MAAM;IACjB,QAAQ,EAAG,MAAM;CAClB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,OAAO,MAAM;IACT,MAAM,CAAU;IAChB,SAAS,CAAU;IAE3B,YAAY,SAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,cAAc,CAAC;IAC/C,CAAC;IAED;;OAEG;IACK,IAAI,CAAC,KAAY,EAAE,OAAiB,EAAE,GAAG,IAAe;QAC9D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;QAEzC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAEpC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAE7D,OAAO,CAAC,MAAM,CAA8B,CAC3C,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAChF,GAAG,IAAI,CACR,CAAC;IACJ,CAAC;IAED,oCAAoC;IAC7B,KAAK,CAAC,OAAiB,EAAE,GAAG,IAAe;QAChD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,OAAiB,EAAE,GAAG,IAAe;QAChD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IACpD,CAAC;IAEM,IAAI,CAAC,OAAiB,EAAE,GAAG,IAAe;QAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IACnD,CAAC;IAEM,IAAI,CAAC,OAAiB,EAAE,GAAG,IAAe;QAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IACnD,CAAC;IAEM,QAAQ,CAAC,OAAiB,EAAE,GAAG,IAAe;QACnD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IACvD,CAAC;IAEM,GAAG,CAAC,OAAiB,EAAE,GAAG,IAAe;QAC9C,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAClD,CAAC;IAEM,OAAO;QACZ,OAAO,CAAC,GAAG,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,OAAiB,EAAE,GAAG,IAAe;QACvD,IAAI,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACvC,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,OAAiB,EAAE,GAAG,IAAe;QACvD,IAAI,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACvC,CAAC;IAEM,MAAM,CAAC,IAAI,CAAC,OAAiB,EAAE,GAAG,IAAe;QACtD,IAAI,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,IAAI,CAAC,OAAiB,EAAE,GAAG,IAAe;QACtD,IAAI,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,OAAiB,EAAE,GAAG,IAAe;QAC1D,IAAI,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,CAAC;IAEM,MAAM,CAAC,GAAG,CAAC,OAAiB,EAAE,GAAG,IAAe;QACrD,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;IAEM,MAAM,CAAC,OAAO;QACnB,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,iBAAiB;QAC9B,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAEtB,mEAAmE;QACnE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE9C,oCAAoC;QACpC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAEtB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAE5B,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC;IACpD,CAAC;CACF"}
@@ -0,0 +1,163 @@
1
+ import { Btc1Error } from './errors.js';
2
+ /**
3
+ * Implementation of {@link https://datatracker.ietf.org/doc/html/rfc6902 | IETF RFC 6902 JSON Patch}.
4
+ *
5
+ * JavaScript Object Notation (JSON) Patch defines a JSON document structure for expressing a sequence of operations to
6
+ * apply to a JavaScript Object Notation (JSON) document; it is suitable for use with the HTTP PATCH method. The
7
+ * "application/json-patch+json" media type is used to identify such patch documents.
8
+ *
9
+ * @class Patch
10
+ * @type {Patch}
11
+ */
12
+ export class Patch {
13
+ /**
14
+ * Applies a JSON Patch to a source document and returns the patched document.
15
+ * @param {JSONObject} sourceDocument The source document to patch.
16
+ * @param {PatchOperation[]} operations The JSON Patch operations to apply.
17
+ * @returns {JSONObject} The patched document.
18
+ * @throws {Error} If an unsupported operation is provided.
19
+ */
20
+ apply(sourceDocument, operations) {
21
+ const patchedDocument = JSON.normalize(sourceDocument);
22
+ for (const operation of operations) {
23
+ const { op, path, value, from } = operation;
24
+ const segments = path.split('/').slice(1);
25
+ switch (op) {
26
+ case 'add':
27
+ this.setValue(patchedDocument, segments, value);
28
+ break;
29
+ case 'remove':
30
+ this.removeValue(patchedDocument, segments);
31
+ break;
32
+ case 'replace':
33
+ this.setValue(patchedDocument, segments, value);
34
+ break;
35
+ case 'move': {
36
+ if (!from)
37
+ throw new Error('Missing \'from\' in move operation');
38
+ const fromSegments = from.split('/').slice(1);
39
+ const movedValue = this.getValue(patchedDocument, fromSegments);
40
+ this.removeValue(patchedDocument, fromSegments);
41
+ this.setValue(patchedDocument, segments, movedValue);
42
+ break;
43
+ }
44
+ case 'copy': {
45
+ if (!from)
46
+ throw new Error('Missing \'from\' in copy operation');
47
+ const copiedValue = this.getValue(patchedDocument, from.split('/').slice(1));
48
+ this.setValue(patchedDocument, segments, copiedValue);
49
+ break;
50
+ }
51
+ case 'test': {
52
+ const existingValue = this.getValue(patchedDocument, segments);
53
+ if (JSON.stringify(existingValue) !== JSON.stringify(value)) {
54
+ throw new Btc1Error(`Test operation failed at path`, 'JSON_PATCH_APPLY_ERROR', { path });
55
+ }
56
+ break;
57
+ }
58
+ default:
59
+ throw new Btc1Error(`Unsupported JSON Patch operation`, 'JSON_PATCH_APPLY_ERROR', { op });
60
+ }
61
+ }
62
+ return patchedDocument;
63
+ }
64
+ /**
65
+ * Constructs a JSON Patch with a single operation (e.g. add service).
66
+ * @param {PatchOperation} patches - The patch operation to create.
67
+ * @param {string} patch.op - The patch operation type (e.g. 'add').
68
+ * @param {string} patch.path - The JSON Pointer path to apply the operation.
69
+ * @param {*} patch.value - The value to apply (if applicable).
70
+ * @returns {PatchOperation[]} A single-entry JSON Patch array.
71
+ */
72
+ create(patches) {
73
+ return patches.map(({ op, path, value, from }) => {
74
+ const operation = { op, path };
75
+ if (value !== undefined) {
76
+ operation.value = value;
77
+ }
78
+ if (from !== undefined) {
79
+ operation.from = from;
80
+ }
81
+ return operation;
82
+ });
83
+ }
84
+ /**
85
+ * Find the diff between a source and target document constructing the patch operations from source => target.
86
+ * @param {JSONObject} sourceDocument The original JSON object.
87
+ * @param {JSONObject} targetDocument The target JSON object to transform into.
88
+ * @returns {PatchOperation[]} An array of JSON Patch operations.
89
+ */
90
+ diff(sourceDocument, targetDocument, path) {
91
+ const operations = [];
92
+ const sourceKeys = new Set(Object.keys(sourceDocument || {}));
93
+ const targetKeys = new Set(Object.keys(targetDocument || {}));
94
+ // Handle removed keys
95
+ for (const key of sourceKeys) {
96
+ if (!targetKeys.has(key)) {
97
+ operations.push({ op: 'remove', path: `${path}/${key}` });
98
+ }
99
+ }
100
+ // Handle added or updated keys
101
+ for (const key of targetKeys) {
102
+ const sourceVal = sourceDocument?.[key];
103
+ const targetVal = targetDocument?.[key];
104
+ const currentPath = `${path}/${key}`;
105
+ if (!(key in (sourceDocument || {}))) {
106
+ operations.push({ op: 'add', path: currentPath, value: targetVal });
107
+ }
108
+ else if (typeof sourceVal === 'object' && sourceVal !== null && typeof targetVal === 'object' && targetVal !== null) {
109
+ operations.push(...this.diff(sourceVal, targetVal, currentPath));
110
+ }
111
+ else if (JSON.stringify(sourceVal) !== JSON.stringify(targetVal)) {
112
+ operations.push({ op: 'replace', path: currentPath, value: targetVal });
113
+ }
114
+ }
115
+ return operations;
116
+ }
117
+ /**
118
+ * Gets the value at a given path in an object.
119
+ * @private
120
+ * @param {*} obj The object to get the value from.
121
+ * @param {string[]} path The path to the value.
122
+ * @returns {*} The value at the given path.
123
+ */
124
+ getValue(obj, path) {
125
+ return path.reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj);
126
+ }
127
+ /**
128
+ * Sets the value at a given path in an object.
129
+ * @private
130
+ * @param {*} obj The object to set the value in.
131
+ * @param {string[]} path The path to the value.
132
+ * @param {*} value The value to set.
133
+ * @returns {*} The object with the value set.
134
+ */
135
+ setValue(obj, path, value) {
136
+ let current = obj;
137
+ for (let i = 0; i < path.length - 1; i++) {
138
+ const key = path[i];
139
+ if (!(key in current))
140
+ current[key] = {};
141
+ current = current[key];
142
+ }
143
+ current[path[path.length - 1]] = value;
144
+ }
145
+ /**
146
+ * Removes the value at a given path in an object.
147
+ * @private
148
+ * @param {*} obj The object to remove the value from.
149
+ * @param {string[]} path The path to the value.
150
+ * @returns {*} The object with the value removed.
151
+ */
152
+ removeValue(obj, path) {
153
+ let current = obj;
154
+ for (let i = 0; i < path.length - 1; i++) {
155
+ const key = path[i];
156
+ if (!(key in current))
157
+ return;
158
+ current = current[key];
159
+ }
160
+ delete current[path[path.length - 1]];
161
+ }
162
+ }
163
+ //# sourceMappingURL=patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/patch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export var Btc1IdentifierTypes;
2
+ (function (Btc1IdentifierTypes) {
3
+ Btc1IdentifierTypes["KEY"] = "KEY";
4
+ Btc1IdentifierTypes["EXTERNAL"] = "EXTERNAL";
5
+ })(Btc1IdentifierTypes || (Btc1IdentifierTypes = {}));
6
+ export var Btc1IdentifierHrp;
7
+ (function (Btc1IdentifierHrp) {
8
+ Btc1IdentifierHrp["k"] = "k";
9
+ Btc1IdentifierHrp["x"] = "x";
10
+ })(Btc1IdentifierHrp || (Btc1IdentifierHrp = {}));
11
+ export var BitcoinNetworkNames;
12
+ (function (BitcoinNetworkNames) {
13
+ BitcoinNetworkNames[BitcoinNetworkNames["bitcoin"] = 0] = "bitcoin";
14
+ BitcoinNetworkNames[BitcoinNetworkNames["signet"] = 1] = "signet";
15
+ BitcoinNetworkNames[BitcoinNetworkNames["regtest"] = 2] = "regtest";
16
+ BitcoinNetworkNames[BitcoinNetworkNames["testnet3"] = 3] = "testnet3";
17
+ BitcoinNetworkNames[BitcoinNetworkNames["testnet4"] = 4] = "testnet4";
18
+ BitcoinNetworkNames[BitcoinNetworkNames["mutinynet"] = 5] = "mutinynet";
19
+ })(BitcoinNetworkNames || (BitcoinNetworkNames = {}));
20
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAsEA,MAAM,CAAN,IAAY,mBAGX;AAHD,WAAY,mBAAmB;IAC3B,kCAAW,CAAA;IACX,4CAAqB,CAAA;AACzB,CAAC,EAHW,mBAAmB,KAAnB,mBAAmB,QAG9B;AACD,MAAM,CAAN,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IACzB,4BAAO,CAAA;IACP,4BAAO,CAAA;AACX,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,QAG5B;AACD,MAAM,CAAN,IAAY,mBAOX;AAPD,WAAY,mBAAmB;IAC3B,mEAAW,CAAA;IACX,iEAAU,CAAA;IACV,mEAAW,CAAA;IACX,qEAAY,CAAA;IACZ,qEAAY,CAAA;IACZ,uEAAa,CAAA;AACjB,CAAC,EAPW,mBAAmB,KAAnB,mBAAmB,QAO9B"}