@mnaoumov/typescript-lib 0.0.0 → 1.0.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 (180) hide show
  1. package/@types/debug/package.json +4 -0
  2. package/LICENSE +21 -0
  3. package/README.md +7 -1
  4. package/dist/lib/cjs/@types/debug.d.cts +21 -0
  5. package/dist/lib/cjs/abort-controller.cjs +202 -0
  6. package/dist/lib/cjs/abort-controller.d.cts +135 -0
  7. package/dist/lib/cjs/aggregate-error.cjs +98 -0
  8. package/dist/lib/cjs/aggregate-error.d.cts +24 -0
  9. package/dist/lib/cjs/array-buffer.cjs +96 -0
  10. package/dist/lib/cjs/array-buffer.d.cts +16 -0
  11. package/dist/lib/cjs/array.cjs +134 -0
  12. package/dist/lib/cjs/array.d.cts +46 -0
  13. package/dist/lib/cjs/async-events.cjs +466 -0
  14. package/dist/lib/cjs/async-events.d.cts +456 -0
  15. package/dist/lib/cjs/async-operation-hook.cjs +113 -0
  16. package/dist/lib/cjs/async-operation-hook.d.cts +59 -0
  17. package/dist/lib/cjs/async.cjs +521 -0
  18. package/dist/lib/cjs/async.d.cts +414 -0
  19. package/dist/lib/cjs/beeper.cjs +126 -0
  20. package/dist/lib/cjs/beeper.d.cts +21 -0
  21. package/dist/lib/cjs/blob.cjs +160 -0
  22. package/dist/lib/cjs/blob.d.cts +59 -0
  23. package/dist/lib/cjs/bytes.cjs +114 -0
  24. package/dist/lib/cjs/bytes.d.cts +17 -0
  25. package/dist/lib/cjs/debug-controller.cjs +80 -0
  26. package/dist/lib/cjs/debug-controller.d.cts +87 -0
  27. package/dist/lib/cjs/debug.cjs +235 -0
  28. package/dist/lib/cjs/debug.d.cts +66 -0
  29. package/dist/lib/cjs/desktop-zip-extractor.cjs +215 -0
  30. package/dist/lib/cjs/desktop-zip-extractor.d.cts +95 -0
  31. package/dist/lib/cjs/disposable.cjs +414 -0
  32. package/dist/lib/cjs/disposable.d.cts +387 -0
  33. package/dist/lib/cjs/enum.cjs +100 -0
  34. package/dist/lib/cjs/enum.d.cts +24 -0
  35. package/dist/lib/cjs/error.cjs +297 -0
  36. package/dist/lib/cjs/error.d.cts +181 -0
  37. package/dist/lib/cjs/function.cjs +141 -0
  38. package/dist/lib/cjs/function.d.cts +128 -0
  39. package/dist/lib/cjs/html-element.cjs +341 -0
  40. package/dist/lib/cjs/html-element.d.cts +199 -0
  41. package/dist/lib/cjs/index.cjs +195 -0
  42. package/dist/lib/cjs/index.d.cts +33 -0
  43. package/dist/lib/cjs/jpeg-metadata.cjs +228 -0
  44. package/dist/lib/cjs/jpeg-metadata.d.cts +42 -0
  45. package/dist/lib/cjs/library.cjs +158 -0
  46. package/dist/lib/cjs/library.d.cts +96 -0
  47. package/dist/lib/cjs/object-utils.cjs +617 -0
  48. package/dist/lib/cjs/object-utils.d.cts +298 -0
  49. package/dist/lib/cjs/path.cjs +202 -0
  50. package/dist/lib/cjs/path.d.cts +154 -0
  51. package/dist/lib/cjs/reg-exp.cjs +254 -0
  52. package/dist/lib/cjs/reg-exp.d.cts +87 -0
  53. package/dist/lib/cjs/string.cjs +326 -0
  54. package/dist/lib/cjs/string.d.cts +361 -0
  55. package/dist/lib/cjs/transformers/date-transformer.cjs +129 -0
  56. package/dist/lib/cjs/transformers/date-transformer.d.cts +39 -0
  57. package/dist/lib/cjs/transformers/group-transformer.cjs +173 -0
  58. package/dist/lib/cjs/transformers/group-transformer.d.cts +70 -0
  59. package/dist/lib/cjs/transformers/index.cjs +123 -0
  60. package/dist/lib/cjs/transformers/index.d.cts +9 -0
  61. package/dist/lib/cjs/transformers/map-transformer.cjs +129 -0
  62. package/dist/lib/cjs/transformers/map-transformer.d.cts +41 -0
  63. package/dist/lib/cjs/transformers/set-transformer.cjs +129 -0
  64. package/dist/lib/cjs/transformers/set-transformer.d.cts +39 -0
  65. package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +127 -0
  66. package/dist/lib/cjs/transformers/skip-private-property-transformer.d.cts +36 -0
  67. package/dist/lib/cjs/transformers/transformer.cjs +170 -0
  68. package/dist/lib/cjs/transformers/transformer.d.cts +70 -0
  69. package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +130 -0
  70. package/dist/lib/cjs/transformers/two-way-map-transformer.d.cts +42 -0
  71. package/dist/lib/cjs/transformers/typed-transformer.cjs +94 -0
  72. package/dist/lib/cjs/transformers/typed-transformer.d.cts +39 -0
  73. package/dist/lib/cjs/two-way-map.cjs +208 -0
  74. package/dist/lib/cjs/two-way-map.d.cts +101 -0
  75. package/dist/lib/cjs/type-guards.cjs +128 -0
  76. package/dist/lib/cjs/type-guards.d.cts +84 -0
  77. package/dist/lib/cjs/type.cjs +121 -0
  78. package/dist/lib/cjs/type.d.cts +122 -0
  79. package/dist/lib/cjs/typescript-lib-state.cjs +126 -0
  80. package/dist/lib/cjs/typescript-lib-state.d.cts +56 -0
  81. package/dist/lib/cjs/url.cjs +136 -0
  82. package/dist/lib/cjs/url.d.cts +74 -0
  83. package/dist/lib/cjs/value-provider.cjs +100 -0
  84. package/dist/lib/cjs/value-provider.d.cts +28 -0
  85. package/dist/lib/cjs/value-wrapper.cjs +144 -0
  86. package/dist/lib/cjs/value-wrapper.d.cts +47 -0
  87. package/dist/lib/esm/@types/debug.d.mts +21 -0
  88. package/dist/lib/esm/abort-controller.d.mts +135 -0
  89. package/dist/lib/esm/abort-controller.mjs +159 -0
  90. package/dist/lib/esm/aggregate-error.d.mts +24 -0
  91. package/dist/lib/esm/aggregate-error.mjs +60 -0
  92. package/dist/lib/esm/array-buffer.d.mts +16 -0
  93. package/dist/lib/esm/array-buffer.mjs +58 -0
  94. package/dist/lib/esm/array.d.mts +46 -0
  95. package/dist/lib/esm/array.mjs +93 -0
  96. package/dist/lib/esm/async-events.d.mts +456 -0
  97. package/dist/lib/esm/async-events.mjs +427 -0
  98. package/dist/lib/esm/async-operation-hook.d.mts +59 -0
  99. package/dist/lib/esm/async-operation-hook.mjs +71 -0
  100. package/dist/lib/esm/async.d.mts +414 -0
  101. package/dist/lib/esm/async.mjs +479 -0
  102. package/dist/lib/esm/beeper.d.mts +21 -0
  103. package/dist/lib/esm/beeper.mjs +88 -0
  104. package/dist/lib/esm/blob.d.mts +59 -0
  105. package/dist/lib/esm/blob.mjs +121 -0
  106. package/dist/lib/esm/bytes.d.mts +17 -0
  107. package/dist/lib/esm/bytes.mjs +76 -0
  108. package/dist/lib/esm/debug-controller.d.mts +87 -0
  109. package/dist/lib/esm/debug-controller.mjs +50 -0
  110. package/dist/lib/esm/debug.d.mts +66 -0
  111. package/dist/lib/esm/debug.mjs +185 -0
  112. package/dist/lib/esm/desktop-zip-extractor.d.mts +95 -0
  113. package/dist/lib/esm/desktop-zip-extractor.mjs +180 -0
  114. package/dist/lib/esm/disposable.d.mts +387 -0
  115. package/dist/lib/esm/disposable.mjs +360 -0
  116. package/dist/lib/esm/enum.d.mts +24 -0
  117. package/dist/lib/esm/enum.mjs +61 -0
  118. package/dist/lib/esm/error.d.mts +181 -0
  119. package/dist/lib/esm/error.mjs +248 -0
  120. package/dist/lib/esm/function.d.mts +128 -0
  121. package/dist/lib/esm/function.mjs +96 -0
  122. package/dist/lib/esm/html-element.d.mts +199 -0
  123. package/dist/lib/esm/html-element.mjs +291 -0
  124. package/dist/lib/esm/index.d.mts +33 -0
  125. package/dist/lib/esm/index.mjs +116 -0
  126. package/dist/lib/esm/jpeg-metadata.d.mts +42 -0
  127. package/dist/lib/esm/jpeg-metadata.mjs +189 -0
  128. package/dist/lib/esm/library.d.mts +96 -0
  129. package/dist/lib/esm/library.mjs +118 -0
  130. package/dist/lib/esm/object-utils.d.mts +298 -0
  131. package/dist/lib/esm/object-utils.mjs +567 -0
  132. package/dist/lib/esm/path.d.mts +154 -0
  133. package/dist/lib/esm/path.mjs +139 -0
  134. package/dist/lib/esm/reg-exp.d.mts +87 -0
  135. package/dist/lib/esm/reg-exp.mjs +213 -0
  136. package/dist/lib/esm/string.d.mts +361 -0
  137. package/dist/lib/esm/string.mjs +274 -0
  138. package/dist/lib/esm/transformers/date-transformer.d.mts +39 -0
  139. package/dist/lib/esm/transformers/date-transformer.mjs +91 -0
  140. package/dist/lib/esm/transformers/group-transformer.d.mts +70 -0
  141. package/dist/lib/esm/transformers/group-transformer.mjs +138 -0
  142. package/dist/lib/esm/transformers/index.d.mts +9 -0
  143. package/dist/lib/esm/transformers/index.mjs +68 -0
  144. package/dist/lib/esm/transformers/map-transformer.d.mts +41 -0
  145. package/dist/lib/esm/transformers/map-transformer.mjs +91 -0
  146. package/dist/lib/esm/transformers/set-transformer.d.mts +39 -0
  147. package/dist/lib/esm/transformers/set-transformer.mjs +91 -0
  148. package/dist/lib/esm/transformers/skip-private-property-transformer.d.mts +36 -0
  149. package/dist/lib/esm/transformers/skip-private-property-transformer.mjs +89 -0
  150. package/dist/lib/esm/transformers/transformer.d.mts +70 -0
  151. package/dist/lib/esm/transformers/transformer.mjs +132 -0
  152. package/dist/lib/esm/transformers/two-way-map-transformer.d.mts +42 -0
  153. package/dist/lib/esm/transformers/two-way-map-transformer.mjs +92 -0
  154. package/dist/lib/esm/transformers/typed-transformer.d.mts +39 -0
  155. package/dist/lib/esm/transformers/typed-transformer.mjs +56 -0
  156. package/dist/lib/esm/two-way-map.d.mts +101 -0
  157. package/dist/lib/esm/two-way-map.mjs +170 -0
  158. package/dist/lib/esm/type-guards.d.mts +84 -0
  159. package/dist/lib/esm/type-guards.mjs +85 -0
  160. package/dist/lib/esm/type.d.mts +122 -0
  161. package/dist/lib/esm/type.mjs +83 -0
  162. package/dist/lib/esm/typescript-lib-state.d.mts +56 -0
  163. package/dist/lib/esm/typescript-lib-state.mjs +84 -0
  164. package/dist/lib/esm/url.d.mts +74 -0
  165. package/dist/lib/esm/url.mjs +94 -0
  166. package/dist/lib/esm/value-provider.d.mts +28 -0
  167. package/dist/lib/esm/value-provider.mjs +62 -0
  168. package/dist/lib/esm/value-wrapper.d.mts +47 -0
  169. package/dist/lib/esm/value-wrapper.mjs +106 -0
  170. package/package.json +111 -13
  171. package/transformers/date-transformer/package.json +6 -0
  172. package/transformers/group-transformer/package.json +6 -0
  173. package/transformers/index/package.json +6 -0
  174. package/transformers/map-transformer/package.json +6 -0
  175. package/transformers/package.json +6 -0
  176. package/transformers/set-transformer/package.json +6 -0
  177. package/transformers/skip-private-property-transformer/package.json +6 -0
  178. package/transformers/transformer/package.json +6 -0
  179. package/transformers/two-way-map-transformer/package.json +6 -0
  180. package/transformers/typed-transformer/package.json +6 -0
@@ -0,0 +1,195 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function () {
7
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
+ symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
+ }
11
+
12
+ function ensureBrowserProcess() {
13
+ const browserProcess = {
14
+ browser: true,
15
+ cwd() {
16
+ return '/';
17
+ },
18
+ env: {},
19
+ platform: 'android'
20
+ };
21
+
22
+ // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
+ const existingProcess = globalThis.process;
24
+
25
+ if (!existingProcess) {
26
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
+ globalThis.process = browserProcess;
28
+ return;
29
+ }
30
+
31
+ if (existingProcess.versions?.node) {
32
+ return;
33
+ }
34
+
35
+ const existingProcessRecord = existingProcess;
36
+
37
+ for (const [key, value] of Object.entries(browserProcess)) {
38
+ existingProcessRecord[key] ??= value;
39
+ }
40
+
41
+ existingProcessRecord['browser'] = true;
42
+ }
43
+
44
+ function keepName($unknown) {
45
+ return $unknown;
46
+ }
47
+
48
+ (function initCjs() {
49
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
+ const globalThisRecord = globalThis;
51
+ ensureDisposeSymbols();
52
+ globalThisRecord['__name'] ??= keepName;
53
+ globalThisRecord['__extractDefault'] ??= extractDefault;
54
+
55
+ ensureBrowserProcess();
56
+
57
+ // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
+ function extractDefault(module) {
59
+ return module && module.__esModule && 'default' in module ? module.default : module;
60
+ }
61
+ })();
62
+ })();
63
+
64
+ "use strict";
65
+ var __create = Object.create;
66
+ var __defProp = Object.defineProperty;
67
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
68
+ var __getOwnPropNames = Object.getOwnPropertyNames;
69
+ var __getProtoOf = Object.getPrototypeOf;
70
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
71
+ var __export = (target, all) => {
72
+ for (var name in all)
73
+ __defProp(target, name, { get: all[name], enumerable: true });
74
+ };
75
+ var __copyProps = (to, from, except, desc) => {
76
+ if (from && typeof from === "object" || typeof from === "function") {
77
+ for (let key of __getOwnPropNames(from))
78
+ if (!__hasOwnProp.call(to, key) && key !== except)
79
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
80
+ }
81
+ return to;
82
+ };
83
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
84
+ // If the importer is in node compatibility mode or this is not an ESM
85
+ // file that has been converted to a CommonJS file using a Babel-
86
+ // compatible transform (i.e. "__esModule" has not been set), then set
87
+ // "default" to the CommonJS "module.exports" for node compatibility.
88
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
89
+ mod
90
+ ));
91
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
92
+ var index_exports = {};
93
+ __export(index_exports, {
94
+ "abort-controller": () => abort_controller,
95
+ "aggregate-error": () => aggregate_error,
96
+ array: () => array,
97
+ "array-buffer": () => array_buffer,
98
+ async: () => async,
99
+ "async-events": () => async_events,
100
+ "async-operation-hook": () => async_operation_hook,
101
+ beeper: () => beeper,
102
+ blob: () => blob,
103
+ bytes: () => bytes,
104
+ debug: () => debug,
105
+ "debug-controller": () => debug_controller,
106
+ "desktop-zip-extractor": () => desktop_zip_extractor,
107
+ disposable: () => disposable,
108
+ enum: () => enum2,
109
+ error: () => error,
110
+ function: () => function2,
111
+ "html-element": () => html_element,
112
+ "jpeg-metadata": () => jpeg_metadata,
113
+ library: () => library,
114
+ "object-utils": () => object_utils,
115
+ path: () => path,
116
+ "reg-exp": () => reg_exp,
117
+ string: () => string,
118
+ transformers: () => transformers,
119
+ "two-way-map": () => two_way_map,
120
+ type: () => type,
121
+ "type-guards": () => type_guards,
122
+ "typescript-lib-state": () => typescript_lib_state,
123
+ url: () => url,
124
+ "value-provider": () => value_provider,
125
+ "value-wrapper": () => value_wrapper
126
+ });
127
+ module.exports = __toCommonJS(index_exports);
128
+ var abort_controller = __toESM(__extractDefault(require('./abort-controller.cjs')), 1);
129
+ var aggregate_error = __toESM(__extractDefault(require('./aggregate-error.cjs')), 1);
130
+ var array_buffer = __toESM(__extractDefault(require('./array-buffer.cjs')), 1);
131
+ var array = __toESM(__extractDefault(require('./array.cjs')), 1);
132
+ var async_events = __toESM(__extractDefault(require('./async-events.cjs')), 1);
133
+ var async_operation_hook = __toESM(__extractDefault(require('./async-operation-hook.cjs')), 1);
134
+ var async = __toESM(__extractDefault(require('./async.cjs')), 1);
135
+ var beeper = __toESM(__extractDefault(require('./beeper.cjs')), 1);
136
+ var blob = __toESM(__extractDefault(require('./blob.cjs')), 1);
137
+ var bytes = __toESM(__extractDefault(require('./bytes.cjs')), 1);
138
+ var debug_controller = __toESM(__extractDefault(require('./debug-controller.cjs')), 1);
139
+ var debug = __toESM(__extractDefault(require('./debug.cjs')), 1);
140
+ var desktop_zip_extractor = __toESM(__extractDefault(require('./desktop-zip-extractor.cjs')), 1);
141
+ var disposable = __toESM(__extractDefault(require('./disposable.cjs')), 1);
142
+ var enum2 = __toESM(__extractDefault(require('./enum.cjs')), 1);
143
+ var error = __toESM(__extractDefault(require('./error.cjs')), 1);
144
+ var function2 = __toESM(__extractDefault(require('./function.cjs')), 1);
145
+ var html_element = __toESM(__extractDefault(require('./html-element.cjs')), 1);
146
+ var jpeg_metadata = __toESM(__extractDefault(require('./jpeg-metadata.cjs')), 1);
147
+ var library = __toESM(__extractDefault(require('./library.cjs')), 1);
148
+ var object_utils = __toESM(__extractDefault(require('./object-utils.cjs')), 1);
149
+ var path = __toESM(__extractDefault(require('./path.cjs')), 1);
150
+ var reg_exp = __toESM(__extractDefault(require('./reg-exp.cjs')), 1);
151
+ var string = __toESM(__extractDefault(require('./string.cjs')), 1);
152
+ var transformers = __toESM(__extractDefault(require('./transformers/index.cjs')), 1);
153
+ var two_way_map = __toESM(__extractDefault(require('./two-way-map.cjs')), 1);
154
+ var type_guards = __toESM(__extractDefault(require('./type-guards.cjs')), 1);
155
+ var type = __toESM(__extractDefault(require('./type.cjs')), 1);
156
+ var typescript_lib_state = __toESM(__extractDefault(require('./typescript-lib-state.cjs')), 1);
157
+ var url = __toESM(__extractDefault(require('./url.cjs')), 1);
158
+ var value_provider = __toESM(__extractDefault(require('./value-provider.cjs')), 1);
159
+ var value_wrapper = __toESM(__extractDefault(require('./value-wrapper.cjs')), 1);
160
+ // Annotate the CommonJS export names for ESM import in node:
161
+ 0 && (module.exports = {
162
+ "abort-controller": null,
163
+ "aggregate-error": null,
164
+ array,
165
+ "array-buffer": null,
166
+ async,
167
+ "async-events": null,
168
+ "async-operation-hook": null,
169
+ beeper,
170
+ blob,
171
+ bytes,
172
+ debug,
173
+ "debug-controller": null,
174
+ "desktop-zip-extractor": null,
175
+ disposable,
176
+ enum: null,
177
+ error,
178
+ function: null,
179
+ "html-element": null,
180
+ "jpeg-metadata": null,
181
+ library,
182
+ "object-utils": null,
183
+ path,
184
+ "reg-exp": null,
185
+ string,
186
+ transformers,
187
+ "two-way-map": null,
188
+ type,
189
+ "type-guards": null,
190
+ "typescript-lib-state": null,
191
+ url,
192
+ "value-provider": null,
193
+ "value-wrapper": null
194
+ });
195
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2Fib3J0LWNvbnRyb2xsZXInIGZyb20gJy4vYWJvcnQtY29udHJvbGxlci50cyc7XG5leHBvcnQgKiBhcyAnYWdncmVnYXRlLWVycm9yJyBmcm9tICcuL2FnZ3JlZ2F0ZS1lcnJvci50cyc7XG5leHBvcnQgKiBhcyAnYXJyYXktYnVmZmVyJyBmcm9tICcuL2FycmF5LWJ1ZmZlci50cyc7XG5leHBvcnQgKiBhcyAnYXJyYXknIGZyb20gJy4vYXJyYXkudHMnO1xuZXhwb3J0ICogYXMgJ2FzeW5jLWV2ZW50cycgZnJvbSAnLi9hc3luYy1ldmVudHMudHMnO1xuZXhwb3J0ICogYXMgJ2FzeW5jLW9wZXJhdGlvbi1ob29rJyBmcm9tICcuL2FzeW5jLW9wZXJhdGlvbi1ob29rLnRzJztcbmV4cG9ydCAqIGFzICdhc3luYycgZnJvbSAnLi9hc3luYy50cyc7XG5leHBvcnQgKiBhcyAnYmVlcGVyJyBmcm9tICcuL2JlZXBlci50cyc7XG5leHBvcnQgKiBhcyAnYmxvYicgZnJvbSAnLi9ibG9iLnRzJztcbmV4cG9ydCAqIGFzICdieXRlcycgZnJvbSAnLi9ieXRlcy50cyc7XG5leHBvcnQgKiBhcyAnZGVidWctY29udHJvbGxlcicgZnJvbSAnLi9kZWJ1Zy1jb250cm9sbGVyLnRzJztcbmV4cG9ydCAqIGFzICdkZWJ1ZycgZnJvbSAnLi9kZWJ1Zy50cyc7XG5leHBvcnQgKiBhcyAnZGVza3RvcC16aXAtZXh0cmFjdG9yJyBmcm9tICcuL2Rlc2t0b3AtemlwLWV4dHJhY3Rvci50cyc7XG5leHBvcnQgKiBhcyAnZGlzcG9zYWJsZScgZnJvbSAnLi9kaXNwb3NhYmxlLnRzJztcbmV4cG9ydCAqIGFzICdlbnVtJyBmcm9tICcuL2VudW0udHMnO1xuZXhwb3J0ICogYXMgJ2Vycm9yJyBmcm9tICcuL2Vycm9yLnRzJztcbmV4cG9ydCAqIGFzICdmdW5jdGlvbicgZnJvbSAnLi9mdW5jdGlvbi50cyc7XG5leHBvcnQgKiBhcyAnaHRtbC1lbGVtZW50JyBmcm9tICcuL2h0bWwtZWxlbWVudC50cyc7XG5leHBvcnQgKiBhcyAnanBlZy1tZXRhZGF0YScgZnJvbSAnLi9qcGVnLW1ldGFkYXRhLnRzJztcbmV4cG9ydCAqIGFzICdsaWJyYXJ5JyBmcm9tICcuL2xpYnJhcnkudHMnO1xuZXhwb3J0ICogYXMgJ29iamVjdC11dGlscycgZnJvbSAnLi9vYmplY3QtdXRpbHMudHMnO1xuZXhwb3J0ICogYXMgJ3BhdGgnIGZyb20gJy4vcGF0aC50cyc7XG5leHBvcnQgKiBhcyAncmVnLWV4cCcgZnJvbSAnLi9yZWctZXhwLnRzJztcbmV4cG9ydCAqIGFzICdzdHJpbmcnIGZyb20gJy4vc3RyaW5nLnRzJztcbmV4cG9ydCAqIGFzICd0cmFuc2Zvcm1lcnMnIGZyb20gJy4vdHJhbnNmb3JtZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICd0d28td2F5LW1hcCcgZnJvbSAnLi90d28td2F5LW1hcC50cyc7XG5leHBvcnQgKiBhcyAndHlwZS1ndWFyZHMnIGZyb20gJy4vdHlwZS1ndWFyZHMudHMnO1xuZXhwb3J0ICogYXMgJ3R5cGUnIGZyb20gJy4vdHlwZS50cyc7XG5leHBvcnQgKiBhcyAndHlwZXNjcmlwdC1saWItc3RhdGUnIGZyb20gJy4vdHlwZXNjcmlwdC1saWItc3RhdGUudHMnO1xuZXhwb3J0ICogYXMgJ3VybCcgZnJvbSAnLi91cmwudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbHVlLXByb3ZpZGVyJyBmcm9tICcuL3ZhbHVlLXByb3ZpZGVyLnRzJztcbmV4cG9ydCAqIGFzICd2YWx1ZS13cmFwcGVyJyBmcm9tICcuL3ZhbHVlLXdyYXBwZXIudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQSw0QkFBQUE7QUFBQSxFQUFBLHlCQUFBQztBQUFBLEVBQUE7QUFBQSx3QkFBQUM7QUFBQSxFQUFBO0FBQUEsd0JBQUFDO0FBQUEsRUFBQSw4QkFBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsNEJBQUFDO0FBQUEsRUFBQSwrQkFBQUM7QUFBQSxFQUFBO0FBQUEsY0FBQUM7QUFBQSxFQUFBO0FBQUEsa0JBQUFDO0FBQUEsRUFBQSxzQkFBQUM7QUFBQSxFQUFBLHVCQUFBQztBQUFBLEVBQUE7QUFBQSx3QkFBQUM7QUFBQSxFQUFBO0FBQUEsbUJBQUFDO0FBQUEsRUFBQTtBQUFBO0FBQUEsdUJBQUFDO0FBQUEsRUFBQTtBQUFBLHVCQUFBQztBQUFBLEVBQUEsOEJBQUFDO0FBQUEsRUFBQTtBQUFBLDBCQUFBQztBQUFBLEVBQUEsdUJBQUFDO0FBQUE7QUFBQTtBQUVBLElBQUFqQixtQkFBb0M7QUFDcEMsSUFBQUMsa0JBQW1DO0FBQ25DLElBQUFDLGVBQWdDO0FBQ2hDLFlBQXlCO0FBQ3pCLElBQUFDLGVBQWdDO0FBQ2hDLElBQUFDLHVCQUF3QztBQUN4QyxZQUF5QjtBQUN6QixhQUEwQjtBQUMxQixXQUF3QjtBQUN4QixZQUF5QjtBQUN6QixJQUFBQyxtQkFBb0M7QUFDcEMsWUFBeUI7QUFDekIsSUFBQUMsd0JBQXlDO0FBQ3pDLGlCQUE4QjtBQUM5QixJQUFBQyxRQUF3QjtBQUN4QixZQUF5QjtBQUN6QixJQUFBQyxZQUE0QjtBQUM1QixJQUFBQyxlQUFnQztBQUNoQyxJQUFBQyxnQkFBaUM7QUFDakMsY0FBMkI7QUFDM0IsSUFBQUMsZUFBZ0M7QUFDaEMsV0FBd0I7QUFDeEIsSUFBQUMsVUFBMkI7QUFDM0IsYUFBMEI7QUFDMUIsbUJBQWdDO0FBQ2hDLElBQUFDLGNBQStCO0FBQy9CLElBQUFDLGNBQStCO0FBQy9CLFdBQXdCO0FBQ3hCLElBQUFDLHVCQUF3QztBQUN4QyxVQUF1QjtBQUN2QixJQUFBQyxpQkFBa0M7QUFDbEMsSUFBQUMsZ0JBQWlDOyIsCiAgIm5hbWVzIjogWyJhYm9ydC1jb250cm9sbGVyIiwgImFnZ3JlZ2F0ZS1lcnJvciIsICJhcnJheS1idWZmZXIiLCAiYXN5bmMtZXZlbnRzIiwgImFzeW5jLW9wZXJhdGlvbi1ob29rIiwgImRlYnVnLWNvbnRyb2xsZXIiLCAiZGVza3RvcC16aXAtZXh0cmFjdG9yIiwgImVudW0iLCAiZnVuY3Rpb24iLCAiaHRtbC1lbGVtZW50IiwgImpwZWctbWV0YWRhdGEiLCAib2JqZWN0LXV0aWxzIiwgInJlZy1leHAiLCAidHdvLXdheS1tYXAiLCAidHlwZS1ndWFyZHMiLCAidHlwZXNjcmlwdC1saWItc3RhdGUiLCAidmFsdWUtcHJvdmlkZXIiLCAidmFsdWUtd3JhcHBlciJdCn0K
@@ -0,0 +1,33 @@
1
+ /// <reference path="./library.d.cts" />
2
+ export * as 'abort-controller' from './abort-controller.cjs';
3
+ export * as 'aggregate-error' from './aggregate-error.cjs';
4
+ export * as 'array-buffer' from './array-buffer.cjs';
5
+ export * as 'array' from './array.cjs';
6
+ export * as 'async-events' from './async-events.cjs';
7
+ export * as 'async-operation-hook' from './async-operation-hook.cjs';
8
+ export * as 'async' from './async.cjs';
9
+ export * as 'beeper' from './beeper.cjs';
10
+ export * as 'blob' from './blob.cjs';
11
+ export * as 'bytes' from './bytes.cjs';
12
+ export * as 'debug-controller' from './debug-controller.cjs';
13
+ export * as 'debug' from './debug.cjs';
14
+ export * as 'desktop-zip-extractor' from './desktop-zip-extractor.cjs';
15
+ export * as 'disposable' from './disposable.cjs';
16
+ export * as 'enum' from './enum.cjs';
17
+ export * as 'error' from './error.cjs';
18
+ export * as 'function' from './function.cjs';
19
+ export * as 'html-element' from './html-element.cjs';
20
+ export * as 'jpeg-metadata' from './jpeg-metadata.cjs';
21
+ export * as 'library' from './library.cjs';
22
+ export * as 'object-utils' from './object-utils.cjs';
23
+ export * as 'path' from './path.cjs';
24
+ export * as 'reg-exp' from './reg-exp.cjs';
25
+ export * as 'string' from './string.cjs';
26
+ export * as 'transformers' from './transformers/index.cjs';
27
+ export * as 'two-way-map' from './two-way-map.cjs';
28
+ export * as 'type-guards' from './type-guards.cjs';
29
+ export * as 'type' from './type.cjs';
30
+ export * as 'typescript-lib-state' from './typescript-lib-state.cjs';
31
+ export * as 'url' from './url.cjs';
32
+ export * as 'value-provider' from './value-provider.cjs';
33
+ export * as 'value-wrapper' from './value-wrapper.cjs';
@@ -0,0 +1,228 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function () {
7
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
+ symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
+ }
11
+
12
+ function ensureBrowserProcess() {
13
+ const browserProcess = {
14
+ browser: true,
15
+ cwd() {
16
+ return '/';
17
+ },
18
+ env: {},
19
+ platform: 'android'
20
+ };
21
+
22
+ // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
+ const existingProcess = globalThis.process;
24
+
25
+ if (!existingProcess) {
26
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
+ globalThis.process = browserProcess;
28
+ return;
29
+ }
30
+
31
+ if (existingProcess.versions?.node) {
32
+ return;
33
+ }
34
+
35
+ const existingProcessRecord = existingProcess;
36
+
37
+ for (const [key, value] of Object.entries(browserProcess)) {
38
+ existingProcessRecord[key] ??= value;
39
+ }
40
+
41
+ existingProcessRecord['browser'] = true;
42
+ }
43
+
44
+ function keepName($unknown) {
45
+ return $unknown;
46
+ }
47
+
48
+ (function initCjs() {
49
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
+ const globalThisRecord = globalThis;
51
+ ensureDisposeSymbols();
52
+ globalThisRecord['__name'] ??= keepName;
53
+ globalThisRecord['__extractDefault'] ??= extractDefault;
54
+
55
+ ensureBrowserProcess();
56
+
57
+ // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
+ function extractDefault(module) {
59
+ return module && module.__esModule && 'default' in module ? module.default : module;
60
+ }
61
+ })();
62
+ })();
63
+
64
+ "use strict";
65
+ var __defProp = Object.defineProperty;
66
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
67
+ var __getOwnPropNames = Object.getOwnPropertyNames;
68
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
69
+ var __export = (target, all) => {
70
+ for (var name in all)
71
+ __defProp(target, name, { get: all[name], enumerable: true });
72
+ };
73
+ var __copyProps = (to, from, except, desc) => {
74
+ if (from && typeof from === "object" || typeof from === "function") {
75
+ for (let key of __getOwnPropNames(from))
76
+ if (!__hasOwnProp.call(to, key) && key !== except)
77
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
78
+ }
79
+ return to;
80
+ };
81
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
82
+ var jpeg_metadata_exports = {};
83
+ __export(jpeg_metadata_exports, {
84
+ extractJpegMetadataSegments: () => extractJpegMetadataSegments,
85
+ injectJpegMetadataSegments: () => injectJpegMetadataSegments
86
+ });
87
+ module.exports = __toCommonJS(jpeg_metadata_exports);
88
+ const APP0_MARKER = 224;
89
+ const APP1_MARKER = 225;
90
+ const APP2_MARKER = 226;
91
+ const EOI_MARKER = 217;
92
+ const MARKER_PREFIX = 255;
93
+ const SOI_MARKER = 216;
94
+ const SOS_MARKER = 218;
95
+ const EXIF_HEADER = "Exif\0\0";
96
+ const ICC_PROFILE_HEADER = "ICC_PROFILE\0";
97
+ const XMP_HEADER = "http://ns.adobe.com/xap/1.0/\0";
98
+ const SEGMENT_HEADER_SIZE = 4;
99
+ const SEGMENT_LENGTH_SIZE = 2;
100
+ const SOI_SIZE = 2;
101
+ const BIG_ENDIAN_TIFF_BYTE_ORDER = 19789;
102
+ const IFD_ENTRY_SIZE = 12;
103
+ const IFD_ENTRY_VALUE_OFFSET = 8;
104
+ const IFD_ENTRY_COUNT_SIZE = 2;
105
+ const LITTLE_ENDIAN_TIFF_BYTE_ORDER = 18761;
106
+ const ORIENTATION_TAG = 274;
107
+ const ORIENTATION_UPRIGHT = 1;
108
+ const TIFF_HEADER_SIZE = 8;
109
+ const TIFF_IFD_POINTER_OFFSET = 4;
110
+ const TIFF_MAGIC = 42;
111
+ const TIFF_MAGIC_OFFSET = 2;
112
+ function extractJpegMetadataSegments(bytes) {
113
+ if (!checkIsJpeg(bytes)) {
114
+ return [];
115
+ }
116
+ const view = createView(bytes);
117
+ const segments = [];
118
+ let offset = SOI_SIZE;
119
+ while (offset + SEGMENT_HEADER_SIZE <= bytes.length) {
120
+ if (bytes[offset] !== MARKER_PREFIX) {
121
+ break;
122
+ }
123
+ const marker = bytes[offset + 1];
124
+ if (marker === SOS_MARKER || marker === EOI_MARKER) {
125
+ break;
126
+ }
127
+ const segmentLength = view.getUint16(offset + SEGMENT_LENGTH_SIZE);
128
+ const segmentEnd = offset + SEGMENT_LENGTH_SIZE + segmentLength;
129
+ if (segmentLength < SEGMENT_LENGTH_SIZE || segmentEnd > bytes.length) {
130
+ break;
131
+ }
132
+ if (checkIsMetadataSegment(bytes, offset, marker)) {
133
+ segments.push(bytes.slice(offset, segmentEnd));
134
+ }
135
+ offset = segmentEnd;
136
+ }
137
+ return segments;
138
+ }
139
+ function injectJpegMetadataSegments(jpegBytes, segments) {
140
+ if (segments.length === 0 || !checkIsJpeg(jpegBytes)) {
141
+ return jpegBytes;
142
+ }
143
+ const normalizedSegments = segments.map((segment) => normalizeOrientation(segment));
144
+ const insertAt = findInsertOffset(jpegBytes);
145
+ const addedLength = normalizedSegments.reduce((total, segment) => total + segment.length, 0);
146
+ const result = new Uint8Array(jpegBytes.length + addedLength);
147
+ result.set(jpegBytes.subarray(0, insertAt), 0);
148
+ let writeAt = insertAt;
149
+ for (const segment of normalizedSegments) {
150
+ result.set(segment, writeAt);
151
+ writeAt += segment.length;
152
+ }
153
+ result.set(jpegBytes.subarray(insertAt), writeAt);
154
+ return result;
155
+ }
156
+ function checkIsJpeg(bytes) {
157
+ return bytes.length >= SOI_SIZE && bytes[0] === MARKER_PREFIX && bytes[1] === SOI_MARKER;
158
+ }
159
+ function checkIsMetadataSegment(bytes, offset, marker) {
160
+ const payloadOffset = offset + SEGMENT_HEADER_SIZE;
161
+ return marker === APP1_MARKER ? checkMatchesHeader(bytes, payloadOffset, EXIF_HEADER) || checkMatchesHeader(bytes, payloadOffset, XMP_HEADER) : marker === APP2_MARKER && checkMatchesHeader(bytes, payloadOffset, ICC_PROFILE_HEADER);
162
+ }
163
+ function checkMatchesHeader(bytes, offset, header) {
164
+ if (offset + header.length > bytes.length) {
165
+ return false;
166
+ }
167
+ for (let index = 0; index < header.length; index++) {
168
+ if (bytes[offset + index] !== header.codePointAt(index)) {
169
+ return false;
170
+ }
171
+ }
172
+ return true;
173
+ }
174
+ function createView(bytes) {
175
+ return new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
176
+ }
177
+ function findInsertOffset(jpegBytes) {
178
+ if (SOI_SIZE + SEGMENT_HEADER_SIZE > jpegBytes.length) {
179
+ return SOI_SIZE;
180
+ }
181
+ if (jpegBytes[SOI_SIZE] !== MARKER_PREFIX || jpegBytes[SOI_SIZE + 1] !== APP0_MARKER) {
182
+ return SOI_SIZE;
183
+ }
184
+ const app0End = SOI_SIZE + SEGMENT_LENGTH_SIZE + createView(jpegBytes).getUint16(SOI_SIZE + SEGMENT_LENGTH_SIZE);
185
+ return app0End > jpegBytes.length ? SOI_SIZE : app0End;
186
+ }
187
+ function normalizeOrientation(segment) {
188
+ if (segment[1] !== APP1_MARKER || !checkMatchesHeader(segment, SEGMENT_HEADER_SIZE, EXIF_HEADER)) {
189
+ return segment;
190
+ }
191
+ const tiffOffset = SEGMENT_HEADER_SIZE + EXIF_HEADER.length;
192
+ if (tiffOffset + TIFF_HEADER_SIZE > segment.length) {
193
+ return segment;
194
+ }
195
+ const view = createView(segment);
196
+ const byteOrder = view.getUint16(tiffOffset);
197
+ const isLittleEndian = byteOrder === LITTLE_ENDIAN_TIFF_BYTE_ORDER;
198
+ if (!isLittleEndian && byteOrder !== BIG_ENDIAN_TIFF_BYTE_ORDER) {
199
+ return segment;
200
+ }
201
+ if (view.getUint16(tiffOffset + TIFF_MAGIC_OFFSET, isLittleEndian) !== TIFF_MAGIC) {
202
+ return segment;
203
+ }
204
+ const ifdOffset = tiffOffset + view.getUint32(tiffOffset + TIFF_IFD_POINTER_OFFSET, isLittleEndian);
205
+ if (ifdOffset + IFD_ENTRY_COUNT_SIZE > segment.length) {
206
+ return segment;
207
+ }
208
+ const entryCount = view.getUint16(ifdOffset, isLittleEndian);
209
+ const entriesOffset = ifdOffset + IFD_ENTRY_COUNT_SIZE;
210
+ if (entriesOffset + entryCount * IFD_ENTRY_SIZE > segment.length) {
211
+ return segment;
212
+ }
213
+ const result = new Uint8Array(segment);
214
+ const resultView = createView(result);
215
+ for (let index = 0; index < entryCount; index++) {
216
+ const entryOffset = entriesOffset + index * IFD_ENTRY_SIZE;
217
+ if (resultView.getUint16(entryOffset, isLittleEndian) === ORIENTATION_TAG) {
218
+ resultView.setUint16(entryOffset + IFD_ENTRY_VALUE_OFFSET, ORIENTATION_UPRIGHT, isLittleEndian);
219
+ }
220
+ }
221
+ return result;
222
+ }
223
+ // Annotate the CommonJS export names for ESM import in node:
224
+ 0 && (module.exports = {
225
+ extractJpegMetadataSegments,
226
+ injectJpegMetadataSegments
227
+ });
228
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2pwZWctbWV0YWRhdGEudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZWFkcyBhbmQgcmUtYXR0YWNoZXMgYSBKUEVHJ3MgbWV0YWRhdGEgc2VnbWVudHMuXG4gKlxuICogUmUtZW5jb2RpbmcgYW4gaW1hZ2UgdGhyb3VnaCBhIGNhbnZhcyBrZWVwcyBvbmx5IHBpeGVsczogRVhJRiwgR1BTLCBYTVAgYW5kIHRoZSBJQ0MgcHJvZmlsZSBhcmUgYWxsXG4gKiBkcm9wcGVkIGJ5IGNvbnN0cnVjdGlvbiwgYmVjYXVzZSB0aGUgY2FudmFzIGhvbGRzIGRlY29kZWQgc2FtcGxlcyBhbmQgbm90aGluZyBlbHNlLiBUaGVzZSBoZWxwZXJzXG4gKiBsaWZ0IHRoZSBtZXRhZGF0YSBzZWdtZW50cyBvZmYgdGhlIG9yaWdpbmFsIGJ5dGVzIHNvIHRoZXkgY2FuIGJlIHNwbGljZWQgYmFjayBpbnRvIHRoZSByZS1lbmNvZGVkXG4gKiBKUEVHLlxuICovXG5cbmNvbnN0IEFQUDBfTUFSS0VSID0gMHhFMDtcbmNvbnN0IEFQUDFfTUFSS0VSID0gMHhFMTtcbmNvbnN0IEFQUDJfTUFSS0VSID0gMHhFMjtcbmNvbnN0IEVPSV9NQVJLRVIgPSAweEQ5O1xuY29uc3QgTUFSS0VSX1BSRUZJWCA9IDB4RkY7XG5jb25zdCBTT0lfTUFSS0VSID0gMHhEODtcbmNvbnN0IFNPU19NQVJLRVIgPSAweERBO1xuXG5jb25zdCBFWElGX0hFQURFUiA9ICdFeGlmXFwwXFwwJztcbmNvbnN0IElDQ19QUk9GSUxFX0hFQURFUiA9ICdJQ0NfUFJPRklMRVxcMCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItaHR0cHMgLS0gVGhlIGxpdGVyYWwgYnl0ZXMgQWRvYmUgd3JpdGVzIGludG8gdGhlIGBBUFAxYCBzZWdtZW50LiBJdCBpcyBhIG5hbWVzcGFjZSBpZGVudGlmaWVyLCBuZXZlciBmZXRjaGVkLCBhbmQgcmV3cml0aW5nIGl0IHRvIGBodHRwc2Agd291bGQgc3RvcCBYTVAgZnJvbSBldmVyIG1hdGNoaW5nLlxuY29uc3QgWE1QX0hFQURFUiA9ICdodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvXFwwJztcblxuLyoqXG4gKiBCeXRlcyBmcm9tIHRoZSBzdGFydCBvZiBhIHNlZ21lbnQgdG8gaXRzIHBheWxvYWQ6IHRoZSB0d28gbWFya2VyIGJ5dGVzIHBsdXMgdGhlIHR3byBsZW5ndGggYnl0ZXMuXG4gKi9cbmNvbnN0IFNFR01FTlRfSEVBREVSX1NJWkUgPSA0O1xuXG4vKipcbiAqIFRoZSBzZWdtZW50IGxlbmd0aCBmaWVsZCBpdHNlbGYgY291bnRzIHRoZSB0d28gYnl0ZXMgaXQgb2NjdXBpZXMuXG4gKi9cbmNvbnN0IFNFR01FTlRfTEVOR1RIX1NJWkUgPSAyO1xuXG4vKipcbiAqIFRoZSBgU09JYCBtYXJrZXIgdGhhdCBvcGVucyBldmVyeSBKUEVHLlxuICovXG5jb25zdCBTT0lfU0laRSA9IDI7XG5cbmNvbnN0IEJJR19FTkRJQU5fVElGRl9CWVRFX09SREVSID0gMHg0RF80RDtcbmNvbnN0IElGRF9FTlRSWV9TSVpFID0gMTI7XG4vKipcbiAqIEJ5dGVzIGZyb20gdGhlIHN0YXJ0IG9mIGFuIElGRCBlbnRyeSB0byBpdHMgaW5saW5lIHZhbHVlOiB0YWcgKDIpICsgdHlwZSAoMikgKyBjb3VudCAoNCkuXG4gKi9cbmNvbnN0IElGRF9FTlRSWV9WQUxVRV9PRkZTRVQgPSA4O1xuY29uc3QgSUZEX0VOVFJZX0NPVU5UX1NJWkUgPSAyO1xuY29uc3QgTElUVExFX0VORElBTl9USUZGX0JZVEVfT1JERVIgPSAweDQ5XzQ5O1xuY29uc3QgT1JJRU5UQVRJT05fVEFHID0gMHgwMV8xMjtcbmNvbnN0IE9SSUVOVEFUSU9OX1VQUklHSFQgPSAxO1xuY29uc3QgVElGRl9IRUFERVJfU0laRSA9IDg7XG5jb25zdCBUSUZGX0lGRF9QT0lOVEVSX09GRlNFVCA9IDQ7XG5jb25zdCBUSUZGX01BR0lDID0gMHgwMF8yQTtcbmNvbnN0IFRJRkZfTUFHSUNfT0ZGU0VUID0gMjtcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgbWV0YWRhdGEgc2VnbWVudHMgb2YgYSBKUEVHLlxuICpcbiAqIFJldHVybnMgZWFjaCBtYXRjaGluZyBzZWdtZW50IHdob2xlIFx1MjAxNCBtYXJrZXIsIGxlbmd0aCBhbmQgcGF5bG9hZCBcdTIwMTQgc29cbiAqIHtAbGluayBpbmplY3RKcGVnTWV0YWRhdGFTZWdtZW50c30gY2FuIHNwbGljZSBpdCBpbnRvIGFub3RoZXIgSlBFRyB1bnRvdWNoZWQuIE9ubHkgdGhlIHNlZ21lbnRzIHRoYXRcbiAqIGNhcnJ5IG1ldGFkYXRhIGFyZSByZXR1cm5lZDogdGhlIEVYSUYgYW5kIFhNUCBgQVBQMWBzIGFuZCB0aGUgSUNDIHByb2ZpbGUgYEFQUDJgLiBgQVBQMGAgKEpGSUYpIGlzXG4gKiBkZWxpYmVyYXRlbHkgbGVmdCBiZWhpbmQsIGJlY2F1c2UgdGhlIHJlLWVuY29kZWQgSlBFRyB3cml0ZXMgaXRzIG93bi5cbiAqXG4gKiBSZXR1cm5zIGFuIGVtcHR5IGFycmF5IGZvciBhbnl0aGluZyB0aGF0IGlzIG5vdCBhIEpQRUcsIGluY2x1ZGluZyBhIHRydW5jYXRlZCBvciBtYWxmb3JtZWQgb25lIFx1MjAxNCBhXG4gKiBjYWxsZXIgdGhhdCBjYW5ub3QgcHJlc2VydmUgbWV0YWRhdGEgc2hvdWxkIGNhcnJ5IG9uIHdpdGhvdXQgaXQgcmF0aGVyIHRoYW4gZmFpbC5cbiAqXG4gKiBAcGFyYW0gYnl0ZXMgLSBUaGUgYnl0ZXMgb2YgdGhlIHNvdXJjZSBpbWFnZS5cbiAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSBzZWdtZW50cywgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0SnBlZ01ldGFkYXRhU2VnbWVudHMoYnl0ZXM6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5W10ge1xuICBpZiAoIWNoZWNrSXNKcGVnKGJ5dGVzKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHZpZXcgPSBjcmVhdGVWaWV3KGJ5dGVzKTtcbiAgY29uc3Qgc2VnbWVudHM6IFVpbnQ4QXJyYXlbXSA9IFtdO1xuICBsZXQgb2Zmc2V0ID0gU09JX1NJWkU7XG5cbiAgd2hpbGUgKG9mZnNldCArIFNFR01FTlRfSEVBREVSX1NJWkUgPD0gYnl0ZXMubGVuZ3RoKSB7XG4gICAgaWYgKGJ5dGVzW29mZnNldF0gIT09IE1BUktFUl9QUkVGSVgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcmtlciA9IGJ5dGVzW29mZnNldCArIDFdO1xuICAgIGlmIChtYXJrZXIgPT09IFNPU19NQVJLRVIgfHwgbWFya2VyID09PSBFT0lfTUFSS0VSKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCBzZWdtZW50TGVuZ3RoID0gdmlldy5nZXRVaW50MTYob2Zmc2V0ICsgU0VHTUVOVF9MRU5HVEhfU0laRSk7XG4gICAgY29uc3Qgc2VnbWVudEVuZCA9IG9mZnNldCArIFNFR01FTlRfTEVOR1RIX1NJWkUgKyBzZWdtZW50TGVuZ3RoO1xuICAgIGlmIChzZWdtZW50TGVuZ3RoIDwgU0VHTUVOVF9MRU5HVEhfU0laRSB8fCBzZWdtZW50RW5kID4gYnl0ZXMubGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tJc01ldGFkYXRhU2VnbWVudChieXRlcywgb2Zmc2V0LCBtYXJrZXIpKSB7XG4gICAgICBzZWdtZW50cy5wdXNoKGJ5dGVzLnNsaWNlKG9mZnNldCwgc2VnbWVudEVuZCkpO1xuICAgIH1cblxuICAgIG9mZnNldCA9IHNlZ21lbnRFbmQ7XG4gIH1cblxuICByZXR1cm4gc2VnbWVudHM7XG59XG5cbi8qKlxuICogU3BsaWNlcyBtZXRhZGF0YSBzZWdtZW50cyBpbnRvIGEgSlBFRy5cbiAqXG4gKiBUaGUgc2VnbWVudHMgZ28gZGlyZWN0bHkgYWZ0ZXIgdGhlIGBTT0lgIGFuZCB0aGUgcmUtZW5jb2RlZCBKUEVHJ3Mgb3duIGBBUFAwYCwgd2hpY2ggaXMgd2hlcmUgYVxuICogcmVhZGVyIGV4cGVjdHMgdG8gZmluZCB0aGVtLlxuICpcbiAqIEV2ZXJ5IGNvcGllZCBFWElGIGJsb2NrIGhhcyBpdHMgb3JpZW50YXRpb24gdGFnIHJlc2V0IHRvIHVwcmlnaHQuIFRoZSBjYW52YXMgZGVjb2RlIGFscmVhZHkgYXBwbGllZFxuICogdGhlIG9yaWdpbmFsIG9yaWVudGF0aW9uIHRvIHRoZSBwaXhlbHMsIHNvIGNhcnJ5aW5nIHRoZSB0YWcgYWNyb3NzIHZlcmJhdGltIHdvdWxkIHJvdGF0ZSB0aGUgaW1hZ2UgYVxuICogc2Vjb25kIHRpbWUgXHUyMDE0IHRoZSBvbmUgcGllY2Ugb2YgbWV0YWRhdGEgdGhhdCBpcyB3cm9uZyB0byBwcmVzZXJ2ZSBhcy1pcy5cbiAqXG4gKiBAcGFyYW0ganBlZ0J5dGVzIC0gVGhlIGJ5dGVzIG9mIHRoZSByZS1lbmNvZGVkIEpQRUcuXG4gKiBAcGFyYW0gc2VnbWVudHMgLSBUaGUgc2VnbWVudHMgcmV0dXJuZWQgYnkge0BsaW5rIGV4dHJhY3RKcGVnTWV0YWRhdGFTZWdtZW50c30uXG4gKiBAcmV0dXJucyBUaGUgSlBFRyB3aXRoIHRoZSBzZWdtZW50cyBzcGxpY2VkIGluLCBvciB0aGUgaW5wdXQgdW5jaGFuZ2VkIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBhZGRcbiAqICAgb3IgdGhlIGlucHV0IGlzIG5vdCBhIEpQRUcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RKcGVnTWV0YWRhdGFTZWdtZW50cyhqcGVnQnl0ZXM6IFVpbnQ4QXJyYXksIHNlZ21lbnRzOiByZWFkb25seSBVaW50OEFycmF5W10pOiBVaW50OEFycmF5IHtcbiAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMCB8fCAhY2hlY2tJc0pwZWcoanBlZ0J5dGVzKSkge1xuICAgIHJldHVybiBqcGVnQnl0ZXM7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkU2VnbWVudHMgPSBzZWdtZW50cy5tYXAoKHNlZ21lbnQpID0+IG5vcm1hbGl6ZU9yaWVudGF0aW9uKHNlZ21lbnQpKTtcbiAgY29uc3QgaW5zZXJ0QXQgPSBmaW5kSW5zZXJ0T2Zmc2V0KGpwZWdCeXRlcyk7XG4gIGNvbnN0IGFkZGVkTGVuZ3RoID0gbm9ybWFsaXplZFNlZ21lbnRzLnJlZHVjZSgodG90YWwsIHNlZ21lbnQpID0+IHRvdGFsICsgc2VnbWVudC5sZW5ndGgsIDApO1xuICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShqcGVnQnl0ZXMubGVuZ3RoICsgYWRkZWRMZW5ndGgpO1xuXG4gIHJlc3VsdC5zZXQoanBlZ0J5dGVzLnN1YmFycmF5KDAsIGluc2VydEF0KSwgMCk7XG4gIGxldCB3cml0ZUF0ID0gaW5zZXJ0QXQ7XG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBub3JtYWxpemVkU2VnbWVudHMpIHtcbiAgICByZXN1bHQuc2V0KHNlZ21lbnQsIHdyaXRlQXQpO1xuICAgIHdyaXRlQXQgKz0gc2VnbWVudC5sZW5ndGg7XG4gIH1cbiAgcmVzdWx0LnNldChqcGVnQnl0ZXMuc3ViYXJyYXkoaW5zZXJ0QXQpLCB3cml0ZUF0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBjaGVja0lzSnBlZyhieXRlczogVWludDhBcnJheSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYnl0ZXMubGVuZ3RoID49IFNPSV9TSVpFICYmIGJ5dGVzWzBdID09PSBNQVJLRVJfUFJFRklYICYmIGJ5dGVzWzFdID09PSBTT0lfTUFSS0VSO1xufVxuXG5mdW5jdGlvbiBjaGVja0lzTWV0YWRhdGFTZWdtZW50KGJ5dGVzOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlciwgbWFya2VyOiBudW1iZXIgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgY29uc3QgcGF5bG9hZE9mZnNldCA9IG9mZnNldCArIFNFR01FTlRfSEVBREVSX1NJWkU7XG4gIHJldHVybiBtYXJrZXIgPT09IEFQUDFfTUFSS0VSXG4gICAgPyBjaGVja01hdGNoZXNIZWFkZXIoYnl0ZXMsIHBheWxvYWRPZmZzZXQsIEVYSUZfSEVBREVSKSB8fCBjaGVja01hdGNoZXNIZWFkZXIoYnl0ZXMsIHBheWxvYWRPZmZzZXQsIFhNUF9IRUFERVIpXG4gICAgOiBtYXJrZXIgPT09IEFQUDJfTUFSS0VSICYmIGNoZWNrTWF0Y2hlc0hlYWRlcihieXRlcywgcGF5bG9hZE9mZnNldCwgSUNDX1BST0ZJTEVfSEVBREVSKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tNYXRjaGVzSGVhZGVyKGJ5dGVzOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlciwgaGVhZGVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKG9mZnNldCArIGhlYWRlci5sZW5ndGggPiBieXRlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGhlYWRlci5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpZiAoYnl0ZXNbb2Zmc2V0ICsgaW5kZXhdICE9PSBoZWFkZXIuY29kZVBvaW50QXQoaW5kZXgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVWaWV3KGJ5dGVzOiBVaW50OEFycmF5KTogRGF0YVZpZXcge1xuICByZXR1cm4gbmV3IERhdGFWaWV3KGJ5dGVzLmJ1ZmZlciwgYnl0ZXMuYnl0ZU9mZnNldCwgYnl0ZXMuYnl0ZUxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRJbnNlcnRPZmZzZXQoanBlZ0J5dGVzOiBVaW50OEFycmF5KTogbnVtYmVyIHtcbiAgaWYgKFNPSV9TSVpFICsgU0VHTUVOVF9IRUFERVJfU0laRSA+IGpwZWdCeXRlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gU09JX1NJWkU7XG4gIH1cbiAgaWYgKGpwZWdCeXRlc1tTT0lfU0laRV0gIT09IE1BUktFUl9QUkVGSVggfHwganBlZ0J5dGVzW1NPSV9TSVpFICsgMV0gIT09IEFQUDBfTUFSS0VSKSB7XG4gICAgcmV0dXJuIFNPSV9TSVpFO1xuICB9XG5cbiAgY29uc3QgYXBwMEVuZCA9IFNPSV9TSVpFICsgU0VHTUVOVF9MRU5HVEhfU0laRSArIGNyZWF0ZVZpZXcoanBlZ0J5dGVzKS5nZXRVaW50MTYoU09JX1NJWkUgKyBTRUdNRU5UX0xFTkdUSF9TSVpFKTtcbiAgcmV0dXJuIGFwcDBFbmQgPiBqcGVnQnl0ZXMubGVuZ3RoID8gU09JX1NJWkUgOiBhcHAwRW5kO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVPcmllbnRhdGlvbihzZWdtZW50OiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XG4gIGlmIChzZWdtZW50WzFdICE9PSBBUFAxX01BUktFUiB8fCAhY2hlY2tNYXRjaGVzSGVhZGVyKHNlZ21lbnQsIFNFR01FTlRfSEVBREVSX1NJWkUsIEVYSUZfSEVBREVSKSkge1xuICAgIHJldHVybiBzZWdtZW50O1xuICB9XG5cbiAgY29uc3QgdGlmZk9mZnNldCA9IFNFR01FTlRfSEVBREVSX1NJWkUgKyBFWElGX0hFQURFUi5sZW5ndGg7XG4gIGlmICh0aWZmT2Zmc2V0ICsgVElGRl9IRUFERVJfU0laRSA+IHNlZ21lbnQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHNlZ21lbnQ7XG4gIH1cblxuICBjb25zdCB2aWV3ID0gY3JlYXRlVmlldyhzZWdtZW50KTtcbiAgY29uc3QgYnl0ZU9yZGVyID0gdmlldy5nZXRVaW50MTYodGlmZk9mZnNldCk7XG4gIGNvbnN0IGlzTGl0dGxlRW5kaWFuID0gYnl0ZU9yZGVyID09PSBMSVRUTEVfRU5ESUFOX1RJRkZfQllURV9PUkRFUjtcbiAgaWYgKCFpc0xpdHRsZUVuZGlhbiAmJiBieXRlT3JkZXIgIT09IEJJR19FTkRJQU5fVElGRl9CWVRFX09SREVSKSB7XG4gICAgcmV0dXJuIHNlZ21lbnQ7XG4gIH1cblxuICBpZiAodmlldy5nZXRVaW50MTYodGlmZk9mZnNldCArIFRJRkZfTUFHSUNfT0ZGU0VULCBpc0xpdHRsZUVuZGlhbikgIT09IFRJRkZfTUFHSUMpIHtcbiAgICByZXR1cm4gc2VnbWVudDtcbiAgfVxuXG4gIGNvbnN0IGlmZE9mZnNldCA9IHRpZmZPZmZzZXQgKyB2aWV3LmdldFVpbnQzMih0aWZmT2Zmc2V0ICsgVElGRl9JRkRfUE9JTlRFUl9PRkZTRVQsIGlzTGl0dGxlRW5kaWFuKTtcbiAgaWYgKGlmZE9mZnNldCArIElGRF9FTlRSWV9DT1VOVF9TSVpFID4gc2VnbWVudC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc2VnbWVudDtcbiAgfVxuXG4gIGNvbnN0IGVudHJ5Q291bnQgPSB2aWV3LmdldFVpbnQxNihpZmRPZmZzZXQsIGlzTGl0dGxlRW5kaWFuKTtcbiAgY29uc3QgZW50cmllc09mZnNldCA9IGlmZE9mZnNldCArIElGRF9FTlRSWV9DT1VOVF9TSVpFO1xuICBpZiAoZW50cmllc09mZnNldCArIGVudHJ5Q291bnQgKiBJRkRfRU5UUllfU0laRSA+IHNlZ21lbnQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHNlZ21lbnQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShzZWdtZW50KTtcbiAgY29uc3QgcmVzdWx0VmlldyA9IGNyZWF0ZVZpZXcocmVzdWx0KTtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVudHJ5Q291bnQ7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbnRyeU9mZnNldCA9IGVudHJpZXNPZmZzZXQgKyBpbmRleCAqIElGRF9FTlRSWV9TSVpFO1xuICAgIGlmIChyZXN1bHRWaWV3LmdldFVpbnQxNihlbnRyeU9mZnNldCwgaXNMaXR0bGVFbmRpYW4pID09PSBPUklFTlRBVElPTl9UQUcpIHtcbiAgICAgIHJlc3VsdFZpZXcuc2V0VWludDE2KGVudHJ5T2Zmc2V0ICsgSUZEX0VOVFJZX1ZBTFVFX09GRlNFVCwgT1JJRU5UQVRJT05fVVBSSUdIVCwgaXNMaXR0bGVFbmRpYW4pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXSwKICAibWFwcGlu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
@@ -0,0 +1,42 @@
1
+ /// <reference path="./library.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Reads and re-attaches a JPEG's metadata segments.
6
+ *
7
+ * Re-encoding an image through a canvas keeps only pixels: EXIF, GPS, XMP and the ICC profile are all
8
+ * dropped by construction, because the canvas holds decoded samples and nothing else. These helpers
9
+ * lift the metadata segments off the original bytes so they can be spliced back into the re-encoded
10
+ * JPEG.
11
+ */
12
+ /**
13
+ * Extracts the metadata segments of a JPEG.
14
+ *
15
+ * Returns each matching segment whole — marker, length and payload — so
16
+ * {@link injectJpegMetadataSegments} can splice it into another JPEG untouched. Only the segments that
17
+ * carry metadata are returned: the EXIF and XMP `APP1`s and the ICC profile `APP2`. `APP0` (JFIF) is
18
+ * deliberately left behind, because the re-encoded JPEG writes its own.
19
+ *
20
+ * Returns an empty array for anything that is not a JPEG, including a truncated or malformed one — a
21
+ * caller that cannot preserve metadata should carry on without it rather than fail.
22
+ *
23
+ * @param bytes - The bytes of the source image.
24
+ * @returns The metadata segments, in the order they appeared.
25
+ */
26
+ export declare function extractJpegMetadataSegments(bytes: Uint8Array): Uint8Array[];
27
+ /**
28
+ * Splices metadata segments into a JPEG.
29
+ *
30
+ * The segments go directly after the `SOI` and the re-encoded JPEG's own `APP0`, which is where a
31
+ * reader expects to find them.
32
+ *
33
+ * Every copied EXIF block has its orientation tag reset to upright. The canvas decode already applied
34
+ * the original orientation to the pixels, so carrying the tag across verbatim would rotate the image a
35
+ * second time — the one piece of metadata that is wrong to preserve as-is.
36
+ *
37
+ * @param jpegBytes - The bytes of the re-encoded JPEG.
38
+ * @param segments - The segments returned by {@link extractJpegMetadataSegments}.
39
+ * @returns The JPEG with the segments spliced in, or the input unchanged when there is nothing to add
40
+ * or the input is not a JPEG.
41
+ */
42
+ export declare function injectJpegMetadataSegments(jpegBytes: Uint8Array, segments: readonly Uint8Array[]): Uint8Array;