magic-file 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 (108) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +214 -0
  3. package/THIRD_PARTY_NOTICES +36 -0
  4. package/dist/cjs/Magic.d.ts +12 -0
  5. package/dist/cjs/Magic.d.ts.map +1 -0
  6. package/dist/cjs/Magic.js +59 -0
  7. package/dist/cjs/Magic.js.map +1 -0
  8. package/dist/cjs/StdioOverrideFunction.d.ts +2 -0
  9. package/dist/cjs/StdioOverrideFunction.d.ts.map +1 -0
  10. package/dist/cjs/StdioOverrideFunction.js +3 -0
  11. package/dist/cjs/StdioOverrideFunction.js.map +1 -0
  12. package/dist/cjs/constants.d.ts +34 -0
  13. package/dist/cjs/constants.d.ts.map +1 -0
  14. package/dist/cjs/constants.js +38 -0
  15. package/dist/cjs/constants.js.map +1 -0
  16. package/dist/cjs/detector.d.ts +7 -0
  17. package/dist/cjs/detector.d.ts.map +1 -0
  18. package/dist/cjs/detector.js +31 -0
  19. package/dist/cjs/detector.js.map +1 -0
  20. package/dist/cjs/errors.d.ts +13 -0
  21. package/dist/cjs/errors.d.ts.map +1 -0
  22. package/dist/cjs/errors.js +36 -0
  23. package/dist/cjs/errors.js.map +1 -0
  24. package/dist/cjs/index.d.ts +5 -0
  25. package/dist/cjs/index.d.ts.map +1 -0
  26. package/dist/cjs/index.js +13 -0
  27. package/dist/cjs/index.js.map +1 -0
  28. package/dist/cjs/input.d.ts +3 -0
  29. package/dist/cjs/input.d.ts.map +1 -0
  30. package/dist/cjs/input.js +26 -0
  31. package/dist/cjs/input.js.map +1 -0
  32. package/dist/cjs/loader.d.ts +3 -0
  33. package/dist/cjs/loader.d.ts.map +1 -0
  34. package/dist/cjs/loader.js +113 -0
  35. package/dist/cjs/loader.js.map +1 -0
  36. package/dist/cjs/memory.d.ts +9 -0
  37. package/dist/cjs/memory.d.ts.map +1 -0
  38. package/dist/cjs/memory.js +33 -0
  39. package/dist/cjs/memory.js.map +1 -0
  40. package/dist/cjs/mutex.d.ts +6 -0
  41. package/dist/cjs/mutex.d.ts.map +1 -0
  42. package/dist/cjs/mutex.js +27 -0
  43. package/dist/cjs/mutex.js.map +1 -0
  44. package/dist/cjs/package.json +1 -0
  45. package/dist/cjs/types.d.ts +37 -0
  46. package/dist/cjs/types.d.ts.map +1 -0
  47. package/dist/cjs/types.js +3 -0
  48. package/dist/cjs/types.js.map +1 -0
  49. package/dist/cjs/wasm-loader.d.ts +2 -0
  50. package/dist/cjs/wasm-loader.d.ts.map +1 -0
  51. package/dist/cjs/wasm-loader.js +22 -0
  52. package/dist/cjs/wasm-loader.js.map +1 -0
  53. package/dist/esm/Magic.d.ts +12 -0
  54. package/dist/esm/Magic.d.ts.map +1 -0
  55. package/dist/esm/Magic.js +55 -0
  56. package/dist/esm/Magic.js.map +1 -0
  57. package/dist/esm/StdioOverrideFunction.d.ts +2 -0
  58. package/dist/esm/StdioOverrideFunction.d.ts.map +1 -0
  59. package/dist/esm/StdioOverrideFunction.js +2 -0
  60. package/dist/esm/StdioOverrideFunction.js.map +1 -0
  61. package/dist/esm/constants.d.ts +34 -0
  62. package/dist/esm/constants.d.ts.map +1 -0
  63. package/dist/esm/constants.js +34 -0
  64. package/dist/esm/constants.js.map +1 -0
  65. package/dist/esm/detector.d.ts +7 -0
  66. package/dist/esm/detector.d.ts.map +1 -0
  67. package/dist/esm/detector.js +28 -0
  68. package/dist/esm/detector.js.map +1 -0
  69. package/dist/esm/errors.d.ts +13 -0
  70. package/dist/esm/errors.d.ts.map +1 -0
  71. package/dist/esm/errors.js +29 -0
  72. package/dist/esm/errors.js.map +1 -0
  73. package/dist/esm/index.d.ts +5 -0
  74. package/dist/esm/index.d.ts.map +1 -0
  75. package/dist/esm/index.js +4 -0
  76. package/dist/esm/index.js.map +1 -0
  77. package/dist/esm/input.d.ts +3 -0
  78. package/dist/esm/input.d.ts.map +1 -0
  79. package/dist/esm/input.js +23 -0
  80. package/dist/esm/input.js.map +1 -0
  81. package/dist/esm/loader.d.ts +3 -0
  82. package/dist/esm/loader.d.ts.map +1 -0
  83. package/dist/esm/loader.js +77 -0
  84. package/dist/esm/loader.js.map +1 -0
  85. package/dist/esm/memory.d.ts +9 -0
  86. package/dist/esm/memory.d.ts.map +1 -0
  87. package/dist/esm/memory.js +29 -0
  88. package/dist/esm/memory.js.map +1 -0
  89. package/dist/esm/mutex.d.ts +6 -0
  90. package/dist/esm/mutex.d.ts.map +1 -0
  91. package/dist/esm/mutex.js +24 -0
  92. package/dist/esm/mutex.js.map +1 -0
  93. package/dist/esm/package.json +1 -0
  94. package/dist/esm/types.d.ts +37 -0
  95. package/dist/esm/types.d.ts.map +1 -0
  96. package/dist/esm/types.js +2 -0
  97. package/dist/esm/types.js.map +1 -0
  98. package/dist/esm/wasm-loader.d.ts +2 -0
  99. package/dist/esm/wasm-loader.d.ts.map +1 -0
  100. package/dist/esm/wasm-loader.js +19 -0
  101. package/dist/esm/wasm-loader.js.map +1 -0
  102. package/dist/wasm/libmagic-wrapper.node.d.ts +2 -0
  103. package/dist/wasm/libmagic-wrapper.node.js +2 -0
  104. package/dist/wasm/libmagic-wrapper.node.wasm +0 -0
  105. package/dist/wasm/libmagic-wrapper.web.d.ts +2 -0
  106. package/dist/wasm/libmagic-wrapper.web.js +2 -0
  107. package/dist/wasm/libmagic-wrapper.web.wasm +0 -0
  108. package/package.json +73 -0
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.loadModule = loadModule;
37
+ const fflate_1 = require("fflate");
38
+ const errors_js_1 = require("./errors.js");
39
+ let factoryPromise = null;
40
+ function getFactory() {
41
+ if (!factoryPromise) {
42
+ factoryPromise = importFactory().catch((err) => {
43
+ factoryPromise = null;
44
+ throw err;
45
+ });
46
+ }
47
+ return factoryPromise;
48
+ }
49
+ async function importFactory() {
50
+ const mod = await Promise.resolve().then(() => __importStar(require("magic-file/wasm")));
51
+ const factory = mod.default;
52
+ if (typeof factory !== "function") {
53
+ throw new errors_js_1.MagicLoadError("Failed to load libmagic-wrapper. The WASM wrapper did not export a valid factory function.");
54
+ }
55
+ return factory;
56
+ }
57
+ async function loadModule(options) {
58
+ const factory = await getFactory();
59
+ const moduleOverrides = {};
60
+ if (options.wasmBinary != null) {
61
+ moduleOverrides.wasmBinary = options.wasmBinary;
62
+ }
63
+ else if (options.locateFile != null) {
64
+ moduleOverrides.locateFile = options.locateFile;
65
+ }
66
+ else if (typeof globalThis.window !== "undefined") {
67
+ try {
68
+ const { loadWasmBinary } = await Promise.resolve().then(() => __importStar(require("./wasm-loader.js")));
69
+ const binary = await loadWasmBinary();
70
+ if (binary) {
71
+ moduleOverrides.wasmBinary = binary;
72
+ }
73
+ }
74
+ catch {
75
+ // Browser without wasm-loader — factory handles it
76
+ }
77
+ }
78
+ const Module = (await factory(moduleOverrides));
79
+ Module.printOverride = options.stdio;
80
+ Module.FS.chdir("/magic");
81
+ const magicPaths = [];
82
+ for (let i = 0; i < options.magicFiles.length; i++) {
83
+ Module.FS.writeFile(`/magic/${i}`, options.magicFiles[i]);
84
+ magicPaths.push(`${i}`);
85
+ }
86
+ if (options.loadDefaultMagicfile) {
87
+ const compressed = Module.FS.readFile("/magic/magic.mgc.gz");
88
+ Module.FS.writeFile("/magic/magic.mgc", (0, fflate_1.gunzipSync)(compressed));
89
+ magicPaths.push("magic.mgc");
90
+ }
91
+ const loadErr = Module.ccall("magic_wrapper_load", "string", ["number", "string"], [options.flags, magicPaths.join(":")]);
92
+ if (loadErr !== "") {
93
+ throw new errors_js_1.MagicLoadError(`Load Error: ${loadErr}`);
94
+ }
95
+ if (options.loadDefaultMagicfile) {
96
+ try {
97
+ Module.FS.unlink("/magic/magic.mgc.gz");
98
+ }
99
+ catch { /* already cleaned */ }
100
+ try {
101
+ Module.FS.unlink("/magic/magic.mgc");
102
+ }
103
+ catch { /* already cleaned */ }
104
+ }
105
+ for (let i = 0; i < options.magicFiles.length; i++) {
106
+ try {
107
+ Module.FS.unlink(`/magic/${i}`);
108
+ }
109
+ catch { /* best effort */ }
110
+ }
111
+ return Module;
112
+ }
113
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { LibmagicModule } from "./types.js";
2
+ export declare class ScratchBuffer {
3
+ private ptr;
4
+ private capacity;
5
+ ensure(module: LibmagicModule, size: number): number;
6
+ write(module: LibmagicModule, data: Uint8Array): number;
7
+ release(module: LibmagicModule): void;
8
+ }
9
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,QAAQ,CAAa;IAE7B,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAWpD,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM;IAMvD,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;CAOtC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ScratchBuffer = void 0;
4
+ class ScratchBuffer {
5
+ constructor() {
6
+ this.ptr = 0;
7
+ this.capacity = 0;
8
+ }
9
+ ensure(module, size) {
10
+ if (size > this.capacity) {
11
+ if (this.ptr !== 0) {
12
+ module._free(this.ptr);
13
+ }
14
+ this.ptr = module._malloc(size);
15
+ this.capacity = size;
16
+ }
17
+ return this.ptr;
18
+ }
19
+ write(module, data) {
20
+ const ptr = this.ensure(module, data.byteLength);
21
+ module.HEAPU8.set(data, ptr);
22
+ return ptr;
23
+ }
24
+ release(module) {
25
+ if (this.ptr !== 0) {
26
+ module._free(this.ptr);
27
+ this.ptr = 0;
28
+ this.capacity = 0;
29
+ }
30
+ }
31
+ }
32
+ exports.ScratchBuffer = ScratchBuffer;
33
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/memory.ts"],"names":[],"mappings":";;;AAEA,MAAa,aAAa;IAA1B;QACU,QAAG,GAAW,CAAC,CAAC;QAChB,aAAQ,GAAW,CAAC,CAAC;IA0B/B,CAAC;IAxBC,MAAM,CAAC,MAAsB,EAAE,IAAY;QACzC,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;gBACnB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,MAAsB,EAAE,IAAgB;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,CAAC,MAAsB;QAC5B,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;CACF;AA5BD,sCA4BC"}
@@ -0,0 +1,6 @@
1
+ export declare function createMutex(): {
2
+ acquire: () => Promise<() => void>;
3
+ release: () => void;
4
+ };
5
+ export type Mutex = ReturnType<typeof createMutex>;
6
+ //# sourceMappingURL=mutex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutex.d.ts","sourceRoot":"","sources":["../../src/mutex.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW;mBAIC,OAAO,CAAC,MAAM,IAAI,CAAC;mBAczB,IAAI;EAOzB;AAED,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMutex = createMutex;
4
+ function createMutex() {
5
+ let locked = false;
6
+ const queue = [];
7
+ async function acquire() {
8
+ if (!locked) {
9
+ locked = true;
10
+ return release;
11
+ }
12
+ return new Promise((resolve) => {
13
+ queue.push(() => {
14
+ locked = true;
15
+ resolve(release);
16
+ });
17
+ });
18
+ }
19
+ function release() {
20
+ locked = false;
21
+ const next = queue.shift();
22
+ if (next)
23
+ next();
24
+ }
25
+ return { acquire, release };
26
+ }
27
+ //# sourceMappingURL=mutex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutex.js","sourceRoot":"","sources":["../../src/mutex.ts"],"names":[],"mappings":";;AAAA,kCAyBC;AAzBD,SAAgB,WAAW;IACzB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,KAAK,GAAsB,EAAE,CAAC;IAEpC,KAAK,UAAU,OAAO;QACpB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,CAAC;YACd,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,EAAE;YACzC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;gBACd,MAAM,GAAG,IAAI,CAAC;gBACd,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,OAAO;QACd,MAAM,GAAG,KAAK,CAAC;QACf,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,IAAI;YAAE,IAAI,EAAE,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC"}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,37 @@
1
+ import type { StdioOverrideFunction } from "./StdioOverrideFunction.js";
2
+ export type { StdioOverrideFunction };
3
+ export interface LibmagicModule extends EmscriptenModule {
4
+ FS: typeof FS;
5
+ ccall: typeof ccall;
6
+ cwrap: typeof cwrap;
7
+ HEAPU8: Uint8Array;
8
+ _malloc(size: number): number;
9
+ _free(ptr: number): void;
10
+ printOverride: StdioOverrideFunction;
11
+ }
12
+ export type LibmagicModuleFactory = (moduleOverrides?: Partial<LibmagicModule>) => Promise<LibmagicModule>;
13
+ export interface MagicDetectInput {
14
+ buffer: Uint8Array;
15
+ }
16
+ export type MagicInput = Uint8Array | ArrayBuffer | Buffer | (globalThis.File & {
17
+ readonly name: string;
18
+ }) | (globalThis.Blob & {
19
+ readonly name?: string;
20
+ });
21
+ export interface MagicOptions {
22
+ flags?: number;
23
+ loadDefaultMagicfile?: boolean;
24
+ magicFiles?: Uint8Array[];
25
+ stdio?: StdioOverrideFunction;
26
+ locateFile?: (path: string) => string;
27
+ wasmBinary?: ArrayBuffer | Uint8Array;
28
+ }
29
+ export interface MagicOptionsResolved {
30
+ flags: number;
31
+ loadDefaultMagicfile: boolean;
32
+ magicFiles: Uint8Array[];
33
+ stdio: StdioOverrideFunction;
34
+ locateFile: ((path: string) => string) | undefined;
35
+ wasmBinary: ArrayBuffer | Uint8Array | undefined;
36
+ }
37
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAEtC,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,EAAE,EAAE,OAAO,EAAE,CAAC;IACd,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,qBAAqB,CAAC;CACtC;AAED,MAAM,MAAM,qBAAqB,GAAG,CAClC,eAAe,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,KACtC,OAAO,CAAC,cAAc,CAAC,CAAC;AAE7B,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,WAAW,GACX,MAAM,GACN,CAAC,UAAU,CAAC,IAAI,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7C,CAAC,UAAU,CAAC,IAAI,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,UAAU,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;CACvC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,EAAE,OAAO,CAAC;IAC9B,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,KAAK,EAAE,qBAAqB,CAAC;IAC7B,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IACnD,UAAU,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;CAClD"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare function loadWasmBinary(): Promise<ArrayBuffer | undefined>;
2
+ //# sourceMappingURL=wasm-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-loader.d.ts","sourceRoot":"","sources":["../../src/wasm-loader.ts"],"names":[],"mappings":"AAWA,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAKvE"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadWasmBinary = loadWasmBinary;
4
+ let _url;
5
+ {
6
+ try {
7
+ // @ts-ignore TS1343 — import.meta only in ESM; this file is only loaded in browser
8
+ _url = new URL("../wasm/libmagic-wrapper.web.wasm", import.meta.url).href;
9
+ }
10
+ catch {
11
+ // Bundler doesn't support URL asset imports
12
+ }
13
+ }
14
+ async function loadWasmBinary() {
15
+ if (!_url)
16
+ return undefined;
17
+ const resp = await fetch(_url);
18
+ if (resp.ok)
19
+ return resp.arrayBuffer();
20
+ return undefined;
21
+ }
22
+ //# sourceMappingURL=wasm-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-loader.js","sourceRoot":"","sources":["../../src/wasm-loader.ts"],"names":[],"mappings":";;AAWA,wCAKC;AAhBD,IAAI,IAAwB,CAAC;AAE7B,CAAC;IACC,IAAI,CAAC;QACH,mFAAmF;QACnF,IAAI,GAAG,IAAI,GAAG,CAAC,mCAAmC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IACvC,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { MagicInput, MagicOptions } from "./types.js";
2
+ export declare class Magic {
3
+ static create(options?: MagicOptions): Promise<Magic>;
4
+ private detector;
5
+ private mutex;
6
+ private disposed;
7
+ private constructor();
8
+ detect(input: MagicInput): Promise<string>;
9
+ dispose(): void;
10
+ static normalize(input: MagicInput): Promise<Uint8Array>;
11
+ }
12
+ //# sourceMappingURL=Magic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Magic.d.ts","sourceRoot":"","sources":["../../src/Magic.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,UAAU,EACV,YAAY,EACb,MAAM,YAAY,CAAC;AAQpB,qBAAa,KAAK;WACH,MAAM,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;IAiB/D,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,QAAQ,CAAU;IAE1B,OAAO;IAMD,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBhD,OAAO,IAAI,IAAI;IAUf,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CAGzD"}
@@ -0,0 +1,55 @@
1
+ import { createDetector } from "./detector.js";
2
+ import { loadModule } from "./loader.js";
3
+ import { normalizeInput } from "./input.js";
4
+ import { createMutex } from "./mutex.js";
5
+ import { DEFAULT_FLAGS, DEFAULT_LOAD_DEFAULT_MAGICFILE, NOOP_STDIO, } from "./constants.js";
6
+ import { MagicDisposedError } from "./errors.js";
7
+ export class Magic {
8
+ static async create(options = {}) {
9
+ const resolved = {
10
+ flags: options.flags ?? DEFAULT_FLAGS,
11
+ loadDefaultMagicfile: options.loadDefaultMagicfile ?? DEFAULT_LOAD_DEFAULT_MAGICFILE,
12
+ magicFiles: options.magicFiles ?? [],
13
+ stdio: options.stdio ?? NOOP_STDIO,
14
+ locateFile: options.locateFile,
15
+ wasmBinary: options.wasmBinary,
16
+ };
17
+ const module = await loadModule(resolved);
18
+ const detector = createDetector(module);
19
+ return new Magic(detector);
20
+ }
21
+ constructor(detector) {
22
+ this.detector = detector;
23
+ this.mutex = createMutex();
24
+ this.disposed = false;
25
+ }
26
+ async detect(input) {
27
+ if (this.disposed) {
28
+ throw new MagicDisposedError();
29
+ }
30
+ if (!this.detector) {
31
+ throw new MagicDisposedError();
32
+ }
33
+ const release = await this.mutex.acquire();
34
+ try {
35
+ const buffer = await normalizeInput(input);
36
+ return this.detector(buffer);
37
+ }
38
+ finally {
39
+ release();
40
+ }
41
+ }
42
+ dispose() {
43
+ if (this.disposed)
44
+ return;
45
+ this.disposed = true;
46
+ if (this.detector) {
47
+ this.detector.dispose();
48
+ this.detector = null;
49
+ }
50
+ }
51
+ static normalize(input) {
52
+ return normalizeInput(input);
53
+ }
54
+ }
55
+ //# sourceMappingURL=Magic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Magic.js","sourceRoot":"","sources":["../../src/Magic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAc,MAAM,YAAY,CAAC;AAMrD,OAAO,EACL,aAAa,EACb,8BAA8B,EAC9B,UAAU,GACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,OAAO,KAAK;IAChB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAwB,EAAE;QAC5C,MAAM,QAAQ,GAAyB;YACrC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,aAAa;YACrC,oBAAoB,EAClB,OAAO,CAAC,oBAAoB,IAAI,8BAA8B;YAChE,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;YACpC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,UAAU;YAClC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAExC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAMD,YAAoB,QAAkB;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAiB;QAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACjC,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAE3C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;gBAAS,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAiB;QAChC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export type StdioOverrideFunction = (stdioName: "stdout" | "stderr", text: string) => void;
2
+ //# sourceMappingURL=StdioOverrideFunction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StdioOverrideFunction.d.ts","sourceRoot":"","sources":["../../src/StdioOverrideFunction.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,CAClC,SAAS,EAAE,QAAQ,GAAG,QAAQ,EAC9B,IAAI,EAAE,MAAM,KACT,IAAI,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=StdioOverrideFunction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StdioOverrideFunction.js","sourceRoot":"","sources":["../../src/StdioOverrideFunction.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ export declare const MagicFlags: Readonly<{
2
+ readonly NONE: 0;
3
+ readonly DEBUG: 1;
4
+ readonly SYMLINK: 2;
5
+ readonly COMPRESS: 4;
6
+ readonly DEVICES: 8;
7
+ readonly MIME_TYPE: 16;
8
+ readonly CONTINUE: 32;
9
+ readonly CHECK: 64;
10
+ readonly PRESERVE_ATIME: 128;
11
+ readonly RAW: 256;
12
+ readonly ERROR: 512;
13
+ readonly MIME_ENCODING: 1024;
14
+ readonly APPLE: 2048;
15
+ readonly EXTENSION: 16777216;
16
+ readonly COMPRESS_TRANSP: 33554432;
17
+ readonly NO_COMPRESS_FORK: 67108864;
18
+ readonly NO_CHECK_COMPRESS: 4096;
19
+ readonly NO_CHECK_TAR: 8192;
20
+ readonly NO_CHECK_SOFT: 16384;
21
+ readonly NO_CHECK_APPTYPE: 32768;
22
+ readonly NO_CHECK_ELF: 65536;
23
+ readonly NO_CHECK_TEXT: 131072;
24
+ readonly NO_CHECK_CDF: 262144;
25
+ readonly NO_CHECK_CSV: 524288;
26
+ readonly NO_CHECK_TOKENS: 1048576;
27
+ readonly NO_CHECK_ENCODING: 2097152;
28
+ readonly NO_CHECK_JSON: 4194304;
29
+ readonly NO_CHECK_SIMH: 8388608;
30
+ }>;
31
+ export declare const DEFAULT_FLAGS: number;
32
+ export declare const DEFAULT_LOAD_DEFAULT_MAGICFILE = true;
33
+ export declare const NOOP_STDIO: (_stdioName: "stdout" | "stderr", _text: string) => void;
34
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BZ,CAAC;AAEZ,eAAO,MAAM,aAAa,EAAE,MAA6B,CAAC;AAC1D,eAAO,MAAM,8BAA8B,OAAO,CAAC;AACnD,eAAO,MAAM,UAAU,GAAI,YAAY,QAAQ,GAAG,QAAQ,EAAE,OAAO,MAAM,SAAO,CAAC"}
@@ -0,0 +1,34 @@
1
+ export const MagicFlags = Object.freeze({
2
+ NONE: 0x0000000,
3
+ DEBUG: 0x0000001,
4
+ SYMLINK: 0x0000002,
5
+ COMPRESS: 0x0000004,
6
+ DEVICES: 0x0000008,
7
+ MIME_TYPE: 0x0000010,
8
+ CONTINUE: 0x0000020,
9
+ CHECK: 0x0000040,
10
+ PRESERVE_ATIME: 0x0000080,
11
+ RAW: 0x0000100,
12
+ ERROR: 0x0000200,
13
+ MIME_ENCODING: 0x0000400,
14
+ APPLE: 0x0000800,
15
+ EXTENSION: 0x1000000,
16
+ COMPRESS_TRANSP: 0x2000000,
17
+ NO_COMPRESS_FORK: 0x4000000,
18
+ NO_CHECK_COMPRESS: 0x0001000,
19
+ NO_CHECK_TAR: 0x0002000,
20
+ NO_CHECK_SOFT: 0x0004000,
21
+ NO_CHECK_APPTYPE: 0x0008000,
22
+ NO_CHECK_ELF: 0x0010000,
23
+ NO_CHECK_TEXT: 0x0020000,
24
+ NO_CHECK_CDF: 0x0040000,
25
+ NO_CHECK_CSV: 0x0080000,
26
+ NO_CHECK_TOKENS: 0x0100000,
27
+ NO_CHECK_ENCODING: 0x0200000,
28
+ NO_CHECK_JSON: 0x0400000,
29
+ NO_CHECK_SIMH: 0x0800000,
30
+ });
31
+ export const DEFAULT_FLAGS = MagicFlags.MIME_TYPE;
32
+ export const DEFAULT_LOAD_DEFAULT_MAGICFILE = true;
33
+ export const NOOP_STDIO = (_stdioName, _text) => { };
34
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,SAAS;IAChB,cAAc,EAAE,SAAS;IACzB,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,SAAS;IAChB,aAAa,EAAE,SAAS;IACxB,KAAK,EAAE,SAAS;IAChB,SAAS,EAAE,SAAS;IACpB,eAAe,EAAE,SAAS;IAC1B,gBAAgB,EAAE,SAAS;IAC3B,iBAAiB,EAAE,SAAS;IAC5B,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,SAAS;IACxB,gBAAgB,EAAE,SAAS;IAC3B,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,SAAS;IACxB,YAAY,EAAE,SAAS;IACvB,YAAY,EAAE,SAAS;IACvB,eAAe,EAAE,SAAS;IAC1B,iBAAiB,EAAE,SAAS;IAC5B,aAAa,EAAE,SAAS;IACxB,aAAa,EAAE,SAAS;CAChB,CAAC,CAAC;AAEZ,MAAM,CAAC,MAAM,aAAa,GAAW,UAAU,CAAC,SAAS,CAAC;AAC1D,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,CAAC;AACnD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,UAA+B,EAAE,KAAa,EAAE,EAAE,GAAE,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { LibmagicModule } from "./types.js";
2
+ export declare function createDetector(module: LibmagicModule): {
3
+ (buffer: Uint8Array): string;
4
+ dispose(): void;
5
+ };
6
+ export type Detector = ReturnType<typeof createDetector>;
7
+ //# sourceMappingURL=detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc;aAQ3B,UAAU,GAAG,MAAM;;EAwB5C;AAED,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { ScratchBuffer } from "./memory.js";
2
+ import { MagicDetectError } from "./errors.js";
3
+ export function createDetector(module) {
4
+ const detectFromWasm = module.cwrap("magic_wrapper_detect", "string", [
5
+ "number",
6
+ "number",
7
+ ]);
8
+ const scratch = new ScratchBuffer();
9
+ function detect(buffer) {
10
+ const ptr = scratch.write(module, buffer);
11
+ let result;
12
+ try {
13
+ result = detectFromWasm(ptr, buffer.byteLength);
14
+ }
15
+ catch (err) {
16
+ throw new MagicDetectError(`Detection failed: ${err instanceof Error ? err.message : String(err)}`);
17
+ }
18
+ if (result == null) {
19
+ throw new MagicDetectError("Detection returned null or undefined result");
20
+ }
21
+ return result;
22
+ }
23
+ detect.dispose = () => {
24
+ scratch.release(module);
25
+ };
26
+ return detect;
27
+ }
28
+ //# sourceMappingURL=detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/detector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,QAAQ,EAAE;QACpE,QAAQ;QACR,QAAQ;KACT,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;IAEpC,SAAS,MAAM,CAAC,MAAkB;QAChC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE1C,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,gBAAgB,CACxB,qBAAqB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACxE,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,gBAAgB,CAAC,6CAA6C,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;QACpB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare class MagicError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export declare class MagicLoadError extends MagicError {
5
+ constructor(message: string);
6
+ }
7
+ export declare class MagicDetectError extends MagicError {
8
+ constructor(message: string);
9
+ }
10
+ export declare class MagicDisposedError extends MagicError {
11
+ constructor();
12
+ }
13
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAK5B;AAED,qBAAa,cAAe,SAAQ,UAAU;gBAChC,OAAO,EAAE,MAAM;CAK5B;AAED,qBAAa,gBAAiB,SAAQ,UAAU;gBAClC,OAAO,EAAE,MAAM;CAK5B;AAED,qBAAa,kBAAmB,SAAQ,UAAU;;CAMjD"}
@@ -0,0 +1,29 @@
1
+ export class MagicError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = "MagicError";
5
+ Object.setPrototypeOf(this, MagicError.prototype);
6
+ }
7
+ }
8
+ export class MagicLoadError extends MagicError {
9
+ constructor(message) {
10
+ super(message);
11
+ this.name = "MagicLoadError";
12
+ Object.setPrototypeOf(this, MagicLoadError.prototype);
13
+ }
14
+ }
15
+ export class MagicDetectError extends MagicError {
16
+ constructor(message) {
17
+ super(message);
18
+ this.name = "MagicDetectError";
19
+ Object.setPrototypeOf(this, MagicDetectError.prototype);
20
+ }
21
+ }
22
+ export class MagicDisposedError extends MagicError {
23
+ constructor() {
24
+ super("Magic instance has been disposed and can no longer be used");
25
+ this.name = "MagicDisposedError";
26
+ Object.setPrototypeOf(this, MagicDisposedError.prototype);
27
+ }
28
+ }
29
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD;QACE,KAAK,CAAC,4DAA4D,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { Magic } from "./Magic.js";
2
+ export { MagicFlags } from "./constants.js";
3
+ export { MagicError, MagicLoadError, MagicDetectError, MagicDisposedError, } from "./errors.js";
4
+ export type { MagicOptions, MagicInput, StdioOverrideFunction, LibmagicModule, } from "./types.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EACL,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,YAAY,EACZ,UAAU,EACV,qBAAqB,EACrB,cAAc,GACf,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { Magic } from "./Magic.js";
2
+ export { MagicFlags } from "./constants.js";
3
+ export { MagicError, MagicLoadError, MagicDetectError, MagicDisposedError, } from "./errors.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EACL,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { MagicInput } from "./types.js";
2
+ export declare function normalizeInput(input: MagicInput): Promise<Uint8Array>;
3
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAoB3E"}
@@ -0,0 +1,23 @@
1
+ export async function normalizeInput(input) {
2
+ // Note: Node's Buffer is a subclass of Uint8Array, so this branch also
3
+ // covers Buffer inputs (including ones with a non-zero byteOffset into a
4
+ // shared underlying ArrayBuffer) without needing a separate check.
5
+ if (input instanceof Uint8Array) {
6
+ return input;
7
+ }
8
+ if (input instanceof ArrayBuffer) {
9
+ return new Uint8Array(input);
10
+ }
11
+ if (isBlob(input) || isFile(input)) {
12
+ const buf = await input.arrayBuffer();
13
+ return new Uint8Array(buf);
14
+ }
15
+ throw new TypeError(`Unsupported input type. Expected Uint8Array, ArrayBuffer, Buffer, Blob, or File. Got ${typeof input}`);
16
+ }
17
+ function isBlob(value) {
18
+ return typeof Blob !== "undefined" && value instanceof Blob;
19
+ }
20
+ function isFile(value) {
21
+ return typeof File !== "undefined" && value instanceof File;
22
+ }
23
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/input.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAiB;IACpD,uEAAuE;IACvE,yEAAyE;IACzE,mEAAmE;IACnE,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,MAAO,KAAc,CAAC,WAAW,EAAE,CAAC;QAChD,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,IAAI,SAAS,CACjB,wFAAwF,OAAO,KAAK,EAAE,CACvG,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,OAAO,IAAI,KAAK,WAAW,IAAI,KAAK,YAAY,IAAI,CAAC;AAC9D,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,OAAO,IAAI,KAAK,WAAW,IAAI,KAAK,YAAY,IAAI,CAAC;AAC9D,CAAC"}