@adonis-agora/media 0.20.0 → 0.22.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 (70) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/dist/providers/media_provider.d.ts.map +1 -1
  3. package/dist/providers/media_provider.js +7 -0
  4. package/dist/providers/media_provider.js.map +1 -1
  5. package/dist/src/define_config.d.ts +22 -3
  6. package/dist/src/define_config.d.ts.map +1 -1
  7. package/dist/src/define_config.js +2 -2
  8. package/dist/src/define_config.js.map +1 -1
  9. package/dist/src/delivery.d.ts +46 -1
  10. package/dist/src/delivery.d.ts.map +1 -1
  11. package/dist/src/delivery.js +17 -1
  12. package/dist/src/delivery.js.map +1 -1
  13. package/dist/src/delivery_signing.d.ts +70 -0
  14. package/dist/src/delivery_signing.d.ts.map +1 -0
  15. package/dist/src/delivery_signing.js +82 -0
  16. package/dist/src/delivery_signing.js.map +1 -0
  17. package/dist/src/errors.d.ts +44 -1
  18. package/dist/src/errors.d.ts.map +1 -1
  19. package/dist/src/errors.js +70 -2
  20. package/dist/src/errors.js.map +1 -1
  21. package/dist/src/image_processor.d.ts +57 -1
  22. package/dist/src/image_processor.d.ts.map +1 -1
  23. package/dist/src/image_processor.js +16 -1
  24. package/dist/src/image_processor.js.map +1 -1
  25. package/dist/src/index.d.ts +10 -5
  26. package/dist/src/index.d.ts.map +1 -1
  27. package/dist/src/index.js +5 -3
  28. package/dist/src/index.js.map +1 -1
  29. package/dist/src/media_collection.d.ts +27 -0
  30. package/dist/src/media_collection.d.ts.map +1 -1
  31. package/dist/src/media_collection.js +26 -1
  32. package/dist/src/media_collection.js.map +1 -1
  33. package/dist/src/media_library.d.ts +111 -2
  34. package/dist/src/media_library.d.ts.map +1 -1
  35. package/dist/src/media_library.js +361 -16
  36. package/dist/src/media_library.js.map +1 -1
  37. package/dist/src/media_manager.d.ts +8 -1
  38. package/dist/src/media_manager.d.ts.map +1 -1
  39. package/dist/src/media_manager.js +5 -0
  40. package/dist/src/media_manager.js.map +1 -1
  41. package/dist/src/processors/sharp.d.ts +7 -2
  42. package/dist/src/processors/sharp.d.ts.map +1 -1
  43. package/dist/src/processors/sharp.js +105 -6
  44. package/dist/src/processors/sharp.js.map +1 -1
  45. package/dist/src/responsive_image.d.ts +88 -0
  46. package/dist/src/responsive_image.d.ts.map +1 -0
  47. package/dist/src/responsive_image.js +109 -0
  48. package/dist/src/responsive_image.js.map +1 -0
  49. package/dist/src/testing/fake_image_processor.d.ts +3 -2
  50. package/dist/src/testing/fake_image_processor.d.ts.map +1 -1
  51. package/dist/src/testing/fake_image_processor.js +2 -2
  52. package/dist/src/testing/fake_image_processor.js.map +1 -1
  53. package/dist/src/transformers/factory.d.ts +39 -0
  54. package/dist/src/transformers/factory.d.ts.map +1 -1
  55. package/dist/src/transformers/factory.js +20 -0
  56. package/dist/src/transformers/factory.js.map +1 -1
  57. package/dist/src/transformers/ffmpeg.d.ts +104 -0
  58. package/dist/src/transformers/ffmpeg.d.ts.map +1 -0
  59. package/dist/src/transformers/ffmpeg.js +207 -0
  60. package/dist/src/transformers/ffmpeg.js.map +1 -0
  61. package/dist/src/transformers/hls.d.ts +4 -1
  62. package/dist/src/transformers/hls.d.ts.map +1 -1
  63. package/dist/src/transformers/hls.js.map +1 -1
  64. package/dist/src/transformers/placeholder.d.ts +8 -0
  65. package/dist/src/transformers/placeholder.d.ts.map +1 -1
  66. package/dist/src/transformers/placeholder.js +7 -3
  67. package/dist/src/transformers/placeholder.js.map +1 -1
  68. package/dist/src/transformers/probe.d.ts +1 -1
  69. package/dist/src/transformers/probe.d.ts.map +1 -1
  70. package/package.json +3 -3
@@ -11,8 +11,8 @@ const CONTENT_TYPE = {
11
11
  */
12
12
  export class FakeImageProcessor {
13
13
  calls = [];
14
- async convert(input, preset) {
15
- this.calls.push({ inputSize: input.byteLength, preset });
14
+ async convert(input, preset, options) {
15
+ this.calls.push({ inputSize: input.byteLength, preset, ...(options ? { options } : {}) });
16
16
  const format = preset.format ?? 'webp';
17
17
  const data = Buffer.from(`fake:${preset.name}:${preset.width ?? ''}x${preset.height ?? ''}`);
18
18
  return { data, format, contentType: CONTENT_TYPE[format] ?? 'application/octet-stream' };
@@ -1 +1 @@
1
- {"version":3,"file":"fake_image_processor.js","sourceRoot":"","sources":["../../../src/testing/fake_image_processor.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAA2B;IAC3C,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,WAAW;IAChB,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,YAAY;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IACpB,KAAK,GAA2D,EAAE,CAAC;IAE5E,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,MAAwB;QACnD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7F,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,0BAA0B,EAAE,CAAC;IAC3F,CAAC;CACF"}
1
+ {"version":3,"file":"fake_image_processor.js","sourceRoot":"","sources":["../../../src/testing/fake_image_processor.ts"],"names":[],"mappings":"AAOA,MAAM,YAAY,GAA2B;IAC3C,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,WAAW;IAChB,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,YAAY;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IACpB,KAAK,GACZ,EAAE,CAAC;IAEL,KAAK,CAAC,OAAO,CACX,KAAa,EACb,MAAwB,EACxB,OAAwB;QAExB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7F,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,0BAA0B,EAAE,CAAC;IAC3F,CAAC;CACF"}
@@ -1,3 +1,4 @@
1
+ import { ffmpegHlsEngine, ffprobeEngine } from './ffmpeg.js';
1
2
  import { HlsTransformer, type HlsTransformerOptions } from './hls.js';
2
3
  import { PlaceholderTransformer, type PlaceholderTransformerOptions } from './placeholder.js';
3
4
  import { MetadataProbeTransformer, type MetadataProbeTransformerOptions } from './probe.js';
@@ -33,4 +34,42 @@ export declare const transformers: {
33
34
  */
34
35
  placeholder<Name extends string = 'placeholder'>(options?: PlaceholderTransformerOptions<Name>): PlaceholderTransformer<Name>;
35
36
  };
37
+ /**
38
+ * Alternative engines for the built-in transformers, plugged in through their `engine` option.
39
+ * The ffmpeg ones spawn the system `ffmpeg` / `ffprobe` binaries (nothing bundled, nothing to
40
+ * install from npm) and, unlike the default mediabunny engine, can **transcode** — an
41
+ * adaptive-bitrate ladder instead of a single stream copy:
42
+ *
43
+ * ```ts
44
+ * transformers.hls({ engine: engines.ffmpegHls({ ladder: engines.ladders.standard }) })
45
+ * transformers.probe({ engine: engines.ffprobe() })
46
+ * ```
47
+ */
48
+ export declare const engines: {
49
+ /** HLS via system ffmpeg: remux by default, or encode `ladder` into a multi-rendition package. */
50
+ ffmpegHls: typeof ffmpegHlsEngine;
51
+ /** Metadata probe via system ffprobe. */
52
+ ffprobe: typeof ffprobeEngine;
53
+ /** Ready-made ladders for {@link ffmpegHlsEngine}: `standard` (360/720/1080p), `compact` (360/720p). */
54
+ ladders: {
55
+ standard: ({
56
+ height: number;
57
+ videoBitrate: string;
58
+ audioBitrate: string;
59
+ } | {
60
+ audioBitrate?: never;
61
+ height: number;
62
+ videoBitrate: string;
63
+ })[];
64
+ compact: ({
65
+ height: number;
66
+ videoBitrate: string;
67
+ audioBitrate: string;
68
+ } | {
69
+ audioBitrate?: never;
70
+ height: number;
71
+ videoBitrate: string;
72
+ })[];
73
+ };
74
+ };
36
75
  //# sourceMappingURL=factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/transformers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,KAAK,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,KAAK,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,YAAY;IACvB,+FAA+F;IAC/F,GAAG,CAAC,IAAI,SAAS,MAAM,GAAG,KAAK,YAAW,qBAAqB,CAAC,IAAI,CAAC;IAGrE,+FAA+F;IAC/F,KAAK,CAAC,IAAI,SAAS,MAAM,GAAG,OAAO,YAAW,+BAA+B,CAAC,IAAI,CAAC;IAGnF;;;OAGG;IACH,WAAW,CAAC,IAAI,SAAS,MAAM,GAAG,aAAa,YACpC,6BAA6B,CAAC,IAAI,CAAC;CAI/C,CAAC"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/transformers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAW,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,KAAK,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,KAAK,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,YAAY;IACvB,+FAA+F;IAC/F,GAAG,CAAC,IAAI,SAAS,MAAM,GAAG,KAAK,YAAW,qBAAqB,CAAC,IAAI,CAAC;IAGrE,+FAA+F;IAC/F,KAAK,CAAC,IAAI,SAAS,MAAM,GAAG,OAAO,YAAW,+BAA+B,CAAC,IAAI,CAAC;IAGnF;;;OAGG;IACH,WAAW,CAAC,IAAI,SAAS,MAAM,GAAG,aAAa,YACpC,6BAA6B,CAAC,IAAI,CAAC;CAI/C,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,OAAO;IAClB,kGAAkG;;IAElG,yCAAyC;;IAEzC,wGAAwG;;;;;;;;;;;;;;;;;;;;;CAEzG,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { ffmpegHlsEngine, ffprobeEngine, ladders } from './ffmpeg.js';
1
2
  import { HlsTransformer } from './hls.js';
2
3
  import { PlaceholderTransformer } from './placeholder.js';
3
4
  import { MetadataProbeTransformer } from './probe.js';
@@ -39,4 +40,23 @@ export const transformers = {
39
40
  return new PlaceholderTransformer(options);
40
41
  },
41
42
  };
43
+ /**
44
+ * Alternative engines for the built-in transformers, plugged in through their `engine` option.
45
+ * The ffmpeg ones spawn the system `ffmpeg` / `ffprobe` binaries (nothing bundled, nothing to
46
+ * install from npm) and, unlike the default mediabunny engine, can **transcode** — an
47
+ * adaptive-bitrate ladder instead of a single stream copy:
48
+ *
49
+ * ```ts
50
+ * transformers.hls({ engine: engines.ffmpegHls({ ladder: engines.ladders.standard }) })
51
+ * transformers.probe({ engine: engines.ffprobe() })
52
+ * ```
53
+ */
54
+ export const engines = {
55
+ /** HLS via system ffmpeg: remux by default, or encode `ladder` into a multi-rendition package. */
56
+ ffmpegHls: ffmpegHlsEngine,
57
+ /** Metadata probe via system ffprobe. */
58
+ ffprobe: ffprobeEngine,
59
+ /** Ready-made ladders for {@link ffmpegHlsEngine}: `standard` (360/720/1080p), `compact` (360/720p). */
60
+ ladders,
61
+ };
42
62
  //# sourceMappingURL=factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/transformers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA8B,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAsC,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAwC,MAAM,YAAY,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,+FAA+F;IAC/F,GAAG,CAA8B,OAAO,GAAgC,EAAE;QACxE,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,+FAA+F;IAC/F,KAAK,CAAgC,OAAO,GAA0C,EAAE;QACtF,OAAO,IAAI,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD;;;OAGG;IACH,WAAW,CACT,OAAO,GAAwC,EAAE;QAEjD,OAAO,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/transformers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,cAAc,EAA8B,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAsC,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAwC,MAAM,YAAY,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,+FAA+F;IAC/F,GAAG,CAA8B,OAAO,GAAgC,EAAE;QACxE,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,+FAA+F;IAC/F,KAAK,CAAgC,OAAO,GAA0C,EAAE;QACtF,OAAO,IAAI,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD;;;OAGG;IACH,WAAW,CACT,OAAO,GAAwC,EAAE;QAEjD,OAAO,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,kGAAkG;IAClG,SAAS,EAAE,eAAe;IAC1B,yCAAyC;IACzC,OAAO,EAAE,aAAa;IACtB,wGAAwG;IACxG,OAAO;CACR,CAAC"}
@@ -0,0 +1,104 @@
1
+ import type { HlsRemuxEngine } from './hls.js';
2
+ import type { MediaProbeEngine } from './probe.js';
3
+ /**
4
+ * Engines backed by the system `ffmpeg` / `ffprobe` binaries — the alternative to the default
5
+ * mediabunny engines for hosts that have ffmpeg installed. What ffmpeg buys over mediabunny is
6
+ * **encoding**: mediabunny can only stream-copy in Node (no WebCodecs), while ffmpeg can transcode
7
+ * any source it decodes into an adaptive-bitrate ladder.
8
+ *
9
+ * Plug them into the existing transformers through their `engine` seam:
10
+ *
11
+ * ```ts
12
+ * import { engines, transformers } from '@adonis-agora/media'
13
+ *
14
+ * transformers: [
15
+ * transformers.hls({ engine: engines.ffmpegHls({ ladder: engines.ladders.standard }) }),
16
+ * transformers.probe({ engine: engines.ffprobe() }),
17
+ * ]
18
+ * ```
19
+ *
20
+ * No npm dependency: the binaries are spawned, never bundled. A missing binary surfaces as
21
+ * {@link TransformerRuntimeMissingError}; a failing run as {@link FfmpegFailedError} carrying the
22
+ * tail of ffmpeg's stderr.
23
+ */
24
+ /** One rung of an adaptive-bitrate ladder. */
25
+ export interface FfmpegRendition {
26
+ /** Output height in px; the width follows the source aspect ratio (rounded to even). */
27
+ height: number;
28
+ /** Target video bitrate, ffmpeg syntax (`'2800k'`, `'5M'`). Caps peak rate at 1.5× this. */
29
+ videoBitrate: string;
30
+ /** Audio bitrate, ffmpeg syntax. Default `'128k'`. */
31
+ audioBitrate?: string;
32
+ }
33
+ export interface FfmpegBinaryOptions {
34
+ /** Path or name of the `ffmpeg` binary. Default `'ffmpeg'` (resolved on `PATH`). */
35
+ ffmpegPath?: string;
36
+ /** Path or name of the `ffprobe` binary. Default `'ffprobe'` (resolved on `PATH`). */
37
+ ffprobePath?: string;
38
+ }
39
+ export interface FfmpegHlsEngineOptions extends FfmpegBinaryOptions {
40
+ /**
41
+ * Renditions to encode. Omit for **remux** (stream copy, no re-encode — fast, but the source must
42
+ * already be MPEG-TS compatible, e.g. h264/aac). With a ladder, every rendition is transcoded to
43
+ * h264/aac and listed in the master playlist. Rungs taller than the source are dropped (never
44
+ * upscale); if every rung is taller, the smallest one is kept at the source height.
45
+ */
46
+ ladder?: FfmpegRendition[];
47
+ /** x264 preset when transcoding. Default `'veryfast'`. */
48
+ preset?: string;
49
+ /** Extra ffmpeg arguments, inserted right before the HLS muxer options. */
50
+ extraArgs?: string[];
51
+ }
52
+ /** Ready-made ladders. */
53
+ export declare const ladders: {
54
+ /** 360p / 720p / 1080p — a sane default for course videos. */
55
+ standard: ({
56
+ height: number;
57
+ videoBitrate: string;
58
+ audioBitrate: string;
59
+ } | {
60
+ audioBitrate?: never;
61
+ height: number;
62
+ videoBitrate: string;
63
+ })[];
64
+ /** 360p / 720p — lighter on storage and encode time. */
65
+ compact: ({
66
+ height: number;
67
+ videoBitrate: string;
68
+ audioBitrate: string;
69
+ } | {
70
+ audioBitrate?: never;
71
+ height: number;
72
+ videoBitrate: string;
73
+ })[];
74
+ };
75
+ /** The rungs actually encoded for a source of `sourceHeight` px: never upscale, never empty. */
76
+ export declare function effectiveLadder(ladder: FfmpegRendition[], sourceHeight: number | undefined): FfmpegRendition[];
77
+ /**
78
+ * Build the ffmpeg argument list for one HLS run. Exported for tests and for anyone wrapping the
79
+ * engine; `renditions` empty means remux.
80
+ */
81
+ export declare function buildHlsArgs(input: {
82
+ sourcePath: string;
83
+ outputDir: string;
84
+ entryName: string;
85
+ targetDuration: number;
86
+ hasAudio: boolean;
87
+ renditions: FfmpegRendition[];
88
+ preset: string;
89
+ extraArgs: string[];
90
+ }): string[];
91
+ /**
92
+ * {@link HlsRemuxEngine} backed by the system ffmpeg: remux by default, or an adaptive-bitrate
93
+ * ladder when `ladder` is set. The output is the same shape the mediabunny engine produces — a
94
+ * master playlist at `entryName` plus per-rendition playlists and MPEG-TS segments — so delivery
95
+ * (`MediaHlsDeliveryHandler`, playlist rewriting) works unchanged.
96
+ */
97
+ export declare function ffmpegHlsEngine(options?: FfmpegHlsEngineOptions): HlsRemuxEngine;
98
+ /**
99
+ * {@link MediaProbeEngine} backed by the system ffprobe. Differences from the mediabunny probe:
100
+ * `format` is ffprobe's `format_name` (e.g. `'mov,mp4,m4a,3gp,3g2,mj2'`), and `mimeType` is not
101
+ * reported — ffprobe has no MIME/codecs-string notion; the record's own `mimeType` still applies.
102
+ */
103
+ export declare function ffprobeEngine(options?: Pick<FfmpegBinaryOptions, 'ffprobePath'>): MediaProbeEngine;
104
+ //# sourceMappingURL=ffmpeg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ffmpeg.d.ts","sourceRoot":"","sources":["../../../src/transformers/ffmpeg.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAoC,MAAM,UAAU,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAqB,MAAM,YAAY,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,8CAA8C;AAC9C,MAAM,WAAW,eAAe;IAC9B,wFAAwF;IACxF,MAAM,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE;;;;;OAKG;IACH,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAMD,0BAA0B;AAC1B,eAAO,MAAM,OAAO;IAClB,8DAA8D;;;;;;;;;;IAM9D,wDAAwD;;;;;;;;;;CAKb,CAAC;AA0G9C,gGAAgG;AAChG,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EAAE,EACzB,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,eAAe,EAAE,CAOnB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,GAAG,MAAM,EAAE,CAgEX;AAWD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,sBAA2B,GAAG,cAAc,CAqDpF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,aAAa,CAAM,GACrD,gBAAgB,CAOlB"}
@@ -0,0 +1,207 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { join } from 'node:path';
3
+ import { FfmpegFailedError, HlsSourceUnsupportedError, TransformerRuntimeMissingError, } from '../errors.js';
4
+ /** The rendition name ffmpeg's `%v` expands to; playlist `playlist-0.m3u8`, segments `segment-0-3.ts`. */
5
+ const PLAYLIST_PATTERN = 'playlist-%v.m3u8';
6
+ const SEGMENT_PATTERN = 'segment-%v-%d.ts';
7
+ /** Ready-made ladders. */
8
+ export const ladders = {
9
+ /** 360p / 720p / 1080p — a sane default for course videos. */
10
+ standard: [
11
+ { height: 360, videoBitrate: '800k', audioBitrate: '96k' },
12
+ { height: 720, videoBitrate: '2800k' },
13
+ { height: 1080, videoBitrate: '5000k' },
14
+ ],
15
+ /** 360p / 720p — lighter on storage and encode time. */
16
+ compact: [
17
+ { height: 360, videoBitrate: '800k', audioBitrate: '96k' },
18
+ { height: 720, videoBitrate: '2800k' },
19
+ ],
20
+ };
21
+ /** Run a binary to completion, collecting stdout and the tail of stderr. */
22
+ function run(binary, args, transformerName) {
23
+ return new Promise((resolve, reject) => {
24
+ const child = spawn(binary, args, { stdio: ['ignore', 'pipe', 'pipe'] });
25
+ const out = [];
26
+ let err = '';
27
+ child.stdout.on('data', (chunk) => out.push(chunk));
28
+ child.stderr.on('data', (chunk) => {
29
+ // ffmpeg is chatty on stderr; only the end explains a failure.
30
+ err = (err + chunk.toString()).slice(-4000);
31
+ });
32
+ child.on('error', (error) => {
33
+ if (error.code === 'ENOENT') {
34
+ reject(new TransformerRuntimeMissingError(transformerName, `the '${binary}' binary`, 'Install ffmpeg on the host (e.g. `apt-get install ffmpeg`, `apk add ffmpeg`) or point `ffmpegPath`/`ffprobePath` at it.'));
35
+ }
36
+ else {
37
+ reject(error);
38
+ }
39
+ });
40
+ child.on('close', (code) => {
41
+ if (code === 0)
42
+ resolve({ stdout: Buffer.concat(out).toString(), stderr: err });
43
+ else
44
+ reject(new FfmpegFailedError(binary, code, err));
45
+ });
46
+ });
47
+ }
48
+ async function probeSource(ffprobePath, sourcePath, transformerName) {
49
+ const { stdout } = await run(ffprobePath, ['-v', 'error', '-print_format', 'json', '-show_format', '-show_streams', sourcePath], transformerName);
50
+ let parsed;
51
+ try {
52
+ parsed = JSON.parse(stdout);
53
+ }
54
+ catch {
55
+ throw new FfmpegFailedError(ffprobePath, 0, `unparseable ffprobe output: ${stdout.slice(0, 200)}`);
56
+ }
57
+ const streams = parsed.streams ?? [];
58
+ const video = streams.find((s) => s.codec_type === 'video');
59
+ const audio = streams.find((s) => s.codec_type === 'audio');
60
+ const summary = { hasVideo: Boolean(video), hasAudio: Boolean(audio) };
61
+ if (parsed.format?.format_name)
62
+ summary.format = parsed.format.format_name;
63
+ const duration = Number(parsed.format?.duration);
64
+ if (Number.isFinite(duration))
65
+ summary.durationSeconds = duration;
66
+ if (video) {
67
+ // Phone videos store landscape frames plus a rotation; report the size as displayed.
68
+ const rotation = Math.abs(Number(video.side_data_list?.find((d) => d.rotation !== undefined)?.rotation ??
69
+ video.tags?.rotate ??
70
+ 0));
71
+ const swap = rotation === 90 || rotation === 270;
72
+ if (video.width !== undefined && video.height !== undefined) {
73
+ summary.width = swap ? video.height : video.width;
74
+ summary.height = swap ? video.width : video.height;
75
+ }
76
+ summary.videoCodec = video.codec_name ?? null;
77
+ }
78
+ if (audio) {
79
+ summary.audioCodec = audio.codec_name ?? null;
80
+ const sampleRate = Number(audio.sample_rate);
81
+ if (Number.isFinite(sampleRate))
82
+ summary.audioSampleRate = sampleRate;
83
+ if (audio.channels !== undefined)
84
+ summary.audioChannels = audio.channels;
85
+ }
86
+ return summary;
87
+ }
88
+ /** The rungs actually encoded for a source of `sourceHeight` px: never upscale, never empty. */
89
+ export function effectiveLadder(ladder, sourceHeight) {
90
+ const sorted = [...ladder].sort((a, b) => a.height - b.height);
91
+ if (!sourceHeight)
92
+ return sorted;
93
+ const fitting = sorted.filter((r) => r.height <= sourceHeight);
94
+ if (fitting.length > 0)
95
+ return fitting;
96
+ const smallest = sorted[0];
97
+ return smallest ? [{ ...smallest, height: sourceHeight - (sourceHeight % 2) }] : [];
98
+ }
99
+ /**
100
+ * Build the ffmpeg argument list for one HLS run. Exported for tests and for anyone wrapping the
101
+ * engine; `renditions` empty means remux.
102
+ */
103
+ export function buildHlsArgs(input) {
104
+ const { sourcePath, outputDir, entryName, targetDuration, hasAudio, renditions, preset } = input;
105
+ const args = ['-hide_banner', '-y', '-i', sourcePath];
106
+ const streamMap = [];
107
+ if (renditions.length === 0) {
108
+ args.push('-map', '0:v:0');
109
+ if (hasAudio)
110
+ args.push('-map', '0:a:0');
111
+ args.push('-c', 'copy');
112
+ streamMap.push(hasAudio ? 'v:0,a:0' : 'v:0');
113
+ }
114
+ else {
115
+ const n = renditions.length;
116
+ const splits = renditions.map((_, i) => `[v${i}]`).join('');
117
+ const scales = renditions.map((r, i) => `[v${i}]scale=-2:${r.height}[v${i}o]`).join(';');
118
+ args.push('-filter_complex', `[0:v:0]split=${n}${splits};${scales}`);
119
+ renditions.forEach((r, i) => {
120
+ const peak = `${Math.round(parseBitrate(r.videoBitrate) * 1.5)}`;
121
+ args.push('-map', `[v${i}o]`, `-c:v:${i}`, 'libx264', `-b:v:${i}`, r.videoBitrate, `-maxrate:v:${i}`, peak, `-bufsize:v:${i}`, `${Number(peak) * 2}`);
122
+ if (hasAudio) {
123
+ args.push('-map', '0:a:0', `-c:a:${i}`, 'aac', `-b:a:${i}`, r.audioBitrate ?? '128k');
124
+ }
125
+ streamMap.push(hasAudio ? `v:${i},a:${i}` : `v:${i}`);
126
+ });
127
+ // Segment boundaries must land on keyframes for every rendition to switch cleanly.
128
+ args.push('-preset', preset, '-pix_fmt', 'yuv420p', '-sc_threshold', '0', '-force_key_frames', `expr:gte(t,n_forced*${targetDuration})`);
129
+ }
130
+ args.push(...input.extraArgs, '-f', 'hls', '-hls_time', String(targetDuration), '-hls_playlist_type', 'vod', '-hls_segment_filename', join(outputDir, SEGMENT_PATTERN), '-master_pl_name', entryName, '-var_stream_map', streamMap.join(' '), join(outputDir, PLAYLIST_PATTERN));
131
+ return args;
132
+ }
133
+ /** `'2800k'` → 2_800_000. Plain numbers pass through. */
134
+ function parseBitrate(value) {
135
+ const match = /^(\d+(?:\.\d+)?)([kKmM]?)$/.exec(value.trim());
136
+ if (!match)
137
+ throw new Error(`Invalid bitrate "${value}" (expected e.g. '800k', '5M', '128000')`);
138
+ const n = Number(match[1]);
139
+ const unit = match[2]?.toLowerCase();
140
+ return unit === 'k' ? n * 1_000 : unit === 'm' ? n * 1_000_000 : n;
141
+ }
142
+ /**
143
+ * {@link HlsRemuxEngine} backed by the system ffmpeg: remux by default, or an adaptive-bitrate
144
+ * ladder when `ladder` is set. The output is the same shape the mediabunny engine produces — a
145
+ * master playlist at `entryName` plus per-rendition playlists and MPEG-TS segments — so delivery
146
+ * (`MediaHlsDeliveryHandler`, playlist rewriting) works unchanged.
147
+ */
148
+ export function ffmpegHlsEngine(options = {}) {
149
+ const ffmpegPath = options.ffmpegPath ?? 'ffmpeg';
150
+ const ffprobePath = options.ffprobePath ?? 'ffprobe';
151
+ // Validate the ladder while the config is in hand — a bad rung would otherwise fail deep inside
152
+ // libx264 with a cryptic error on the first transcode.
153
+ for (const r of options.ladder ?? []) {
154
+ if (!Number.isInteger(r.height) || r.height <= 0 || r.height % 2 !== 0) {
155
+ throw new Error(`Invalid rendition height ${r.height} (expected a positive even integer — h264 needs even dimensions)`);
156
+ }
157
+ parseBitrate(r.videoBitrate);
158
+ if (r.audioBitrate !== undefined)
159
+ parseBitrate(r.audioBitrate);
160
+ }
161
+ return {
162
+ async remux(request) {
163
+ const summary = await probeSource(ffprobePath, request.sourcePath, 'hls');
164
+ // Same definitive signal the mediabunny engine gives for an unusable source, so callers
165
+ // branch on one error regardless of engine (and don't retry an audio-only file forever).
166
+ if (!summary.hasVideo) {
167
+ throw new HlsSourceUnsupportedError('the source has no video stream', 'HLS packaging needs a video track; this file is audio-only or not a video.');
168
+ }
169
+ const renditions = options.ladder ? effectiveLadder(options.ladder, summary.height) : [];
170
+ await run(ffmpegPath, buildHlsArgs({
171
+ sourcePath: request.sourcePath,
172
+ outputDir: request.outputDir,
173
+ entryName: request.entryName,
174
+ targetDuration: request.targetDuration,
175
+ hasAudio: summary.hasAudio,
176
+ renditions,
177
+ preset: options.preset ?? 'veryfast',
178
+ extraArgs: options.extraArgs ?? [],
179
+ }), 'hls');
180
+ const result = {};
181
+ if (summary.durationSeconds !== undefined)
182
+ result.durationSeconds = summary.durationSeconds;
183
+ if (summary.width !== undefined)
184
+ result.width = summary.width;
185
+ if (summary.height !== undefined)
186
+ result.height = summary.height;
187
+ result.videoCodec = renditions.length > 0 ? 'h264' : (summary.videoCodec ?? null);
188
+ if (summary.hasAudio)
189
+ result.audioCodec = renditions.length > 0 ? 'aac' : (summary.audioCodec ?? null);
190
+ return result;
191
+ },
192
+ };
193
+ }
194
+ /**
195
+ * {@link MediaProbeEngine} backed by the system ffprobe. Differences from the mediabunny probe:
196
+ * `format` is ffprobe's `format_name` (e.g. `'mov,mp4,m4a,3gp,3g2,mj2'`), and `mimeType` is not
197
+ * reported — ffprobe has no MIME/codecs-string notion; the record's own `mimeType` still applies.
198
+ */
199
+ export function ffprobeEngine(options = {}) {
200
+ const ffprobePath = options.ffprobePath ?? 'ffprobe';
201
+ return {
202
+ async probe(sourcePath) {
203
+ return probeSource(ffprobePath, sourcePath, 'probe');
204
+ },
205
+ };
206
+ }
207
+ //# sourceMappingURL=ffmpeg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../../../src/transformers/ffmpeg.ts"],"names":[],"mappings":"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"}
@@ -66,7 +66,10 @@ export interface HlsTransformerOptions<Name extends string = 'hls'> {
66
66
  targetDuration?: number;
67
67
  /** WebCodecs implementation for the re-encode fallback (see {@link WebCodecsProvider}). */
68
68
  webcodecs?: WebCodecsProvider;
69
- /** Replace the mediabunny engine (mainly for tests). */
69
+ /**
70
+ * Replace the mediabunny engine — e.g. `engines.ffmpegHls({ ladder })` to transcode an
71
+ * adaptive-bitrate ladder with the system ffmpeg, or your own {@link HlsRemuxEngine}.
72
+ */
70
73
  engine?: HlsRemuxEngine;
71
74
  }
72
75
  /** File name of the entry (master) playlist an {@link HlsTransformer} produces. */
@@ -1 +1 @@
1
- {"version":3,"file":"hls.d.ts","sourceRoot":"","sources":["../../../src/transformers/hls.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAI1F;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvE,gGAAgG;AAChG,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEhE;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAI3B;AAED,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,SAAS,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CAC3C;AAED,sGAAsG;AACtG,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,qBAAqB,CAAC,IAAI,SAAS,MAAM,GAAG,KAAK;IAChE,sDAAsD;IACtD,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,wDAAwD;IACxD,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,cAAc,CAAC,IAAI,SAAS,MAAM,GAAG,KAAK,CAAE,YAAW,WAAW;IAC7E,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IAEpD,YAAY,OAAO,GAAE,qBAAqB,CAAC,IAAI,CAAM,EAMpD;IAEK,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CA6CrE;CACF;AAED,iGAAiG;AACjG,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElF"}
1
+ {"version":3,"file":"hls.d.ts","sourceRoot":"","sources":["../../../src/transformers/hls.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAI1F;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvE,gGAAgG;AAChG,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEhE;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAI3B;AAED,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,SAAS,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CAC3C;AAED,sGAAsG;AACtG,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,qBAAqB,CAAC,IAAI,SAAS,MAAM,GAAG,KAAK;IAChE,sDAAsD;IACtD,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B;;;OAGG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,cAAc,CAAC,IAAI,SAAS,MAAM,GAAG,KAAK,CAAE,YAAW,WAAW;IAC7E,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IAEpD,YAAY,OAAO,GAAE,qBAAqB,CAAC,IAAI,CAAM,EAMpD;IAEK,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CA6CrE;CACF;AAED,iGAAiG;AACjG,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElF"}
@@ -1 +1 @@
1
- {"version":3,"file":"hls.js","sourceRoot":"","sources":["../../../src/transformers/hls.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hls.js","sourceRoot":"","sources":["../../../src/transformers/hls.ts"],"names":[],"mappings":"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"}
@@ -82,4 +82,12 @@ export declare class PlaceholderTransformer<Name extends string = 'placeholder'>
82
82
  * ```
83
83
  */
84
84
  export declare function placeholderOf(record: MediaRecord): ImagePlaceholder | null;
85
+ /**
86
+ * sharp-backed {@link PlaceholderEngine}, importing the optional peer on first use.
87
+ *
88
+ * @internal `importSharp` is the seam tests use to simulate a host without the peer.
89
+ */
90
+ export declare function loadSharpPlaceholderEngine(transformerName: string, importSharp?: () => Promise<{
91
+ default: typeof import('sharp').default;
92
+ }>): Promise<PlaceholderEngine>;
85
93
  //# sourceMappingURL=placeholder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"placeholder.d.ts","sourceRoot":"","sources":["../../../src/transformers/placeholder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE1F,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,mGAAmG;IACnG,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,6BAA6B,CAAC,IAAI,SAAS,MAAM,GAAG,aAAa;IAChF,8DAA8D;IAC9D,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iGAAiG;IACjG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,sBAAsB,CAAC,IAAI,SAAS,MAAM,GAAG,aAAa,CAAE,YAAW,WAAW;IAC7F,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IAEvD,YAAY,OAAO,GAAE,6BAA6B,CAAC,IAAI,CAAM,EAK5D;IAEK,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CAQrE;CACF;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,GAAG,IAAI,CAmB1E"}
1
+ {"version":3,"file":"placeholder.d.ts","sourceRoot":"","sources":["../../../src/transformers/placeholder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE1F,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,mGAAmG;IACnG,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,6BAA6B,CAAC,IAAI,SAAS,MAAM,GAAG,aAAa;IAChF,8DAA8D;IAC9D,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iGAAiG;IACjG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,sBAAsB,CAAC,IAAI,SAAS,MAAM,GAAG,aAAa,CAAE,YAAW,WAAW;IAC7F,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IAEvD,YAAY,OAAO,GAAE,6BAA6B,CAAC,IAAI,CAAM,EAK5D;IAEK,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CAQrE;CACF;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,GAAG,IAAI,CAmB1E;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,eAAe,EAAE,MAAM,EACvB,WAAW,GAAE,MAAM,OAAO,CAAC;IAAE,OAAO,EAAE,cAAc,OAAO,EAAE,OAAO,CAAA;CAAE,CAAyB,GAC9F,OAAO,CAAC,iBAAiB,CAAC,CA8C5B"}
@@ -67,11 +67,15 @@ export function placeholderOf(record) {
67
67
  }
68
68
  return null;
69
69
  }
70
- /** sharp-backed {@link PlaceholderEngine}, importing the optional peer on first use. */
71
- async function loadSharpPlaceholderEngine(transformerName) {
70
+ /**
71
+ * sharp-backed {@link PlaceholderEngine}, importing the optional peer on first use.
72
+ *
73
+ * @internal `importSharp` is the seam tests use to simulate a host without the peer.
74
+ */
75
+ export async function loadSharpPlaceholderEngine(transformerName, importSharp = () => import('sharp')) {
72
76
  let sharp;
73
77
  try {
74
- sharp = (await import('sharp')).default;
78
+ sharp = (await importSharp()).default;
75
79
  }
76
80
  catch (error) {
77
81
  // Only a missing `sharp` itself — a broken install missing a transitive dep must surface as is.
@@ -1 +1 @@
1
- {"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../../src/transformers/placeholder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../../src/transformers/placeholder.ts"],"names":[],"mappings":"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"}
@@ -30,7 +30,7 @@ export interface MetadataProbeTransformerOptions<Name extends string = 'probe'>
30
30
  * remote disk that read is a download. Opt in for collections of small files.
31
31
  */
32
32
  eager?: boolean;
33
- /** Replace the mediabunny engine (mainly for tests). */
33
+ /** Replace the mediabunny engine — e.g. `engines.ffprobe()`, or your own {@link MediaProbeEngine}. */
34
34
  engine?: MediaProbeEngine;
35
35
  }
36
36
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../../src/transformers/probe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAK1F,wFAAwF;AACxF,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,+BAA+B,CAAC,IAAI,SAAS,MAAM,GAAG,OAAO;IAC5E,wDAAwD;IACxD,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wDAAwD;IACxD,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,wBAAwB,CAAC,IAAI,SAAS,MAAM,GAAG,OAAO,CAAE,YAAW,WAAW;IACzF,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IAEtD,YAAY,OAAO,GAAE,+BAA+B,CAAC,IAAI,CAAM,EAI9D;IAEK,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CAIrE;CACF"}
1
+ {"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../../src/transformers/probe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAK1F,wFAAwF;AACxF,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,+BAA+B,CAAC,IAAI,SAAS,MAAM,GAAG,OAAO;IAC5E,wDAAwD;IACxD,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sGAAsG;IACtG,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,wBAAwB,CAAC,IAAI,SAAS,MAAM,GAAG,OAAO,CAAE,YAAW,WAAW;IACzF,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IAEtD,YAAY,OAAO,GAAE,+BAA+B,CAAC,IAAI,CAAM,EAI9D;IAEK,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CAIrE;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adonis-agora/media",
3
- "version": "0.20.0",
3
+ "version": "0.22.0",
4
4
  "description": "Media-library for AdonisJS — owner collections (MIME whitelist, single-file replace, ordering), image conversions (eager/lazy), pluggable content transformers (HLS video via mediabunny, metadata probe, image blur-up placeholder), and column attachments, all on top of @adonisjs/drive. Pluggable MediaStore (in-memory + Lucid) and ImageProcessor (sharp). Part of the Agora ecosystem.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -147,12 +147,12 @@
147
147
  },
148
148
  "devDependencies": {
149
149
  "@adonis-agora/media-dashboard": "9.0.0",
150
- "@adonis-agora/media-react": "0.6.0",
150
+ "@adonis-agora/media-react": "0.7.0",
151
151
  "@adonisjs/assembler": "8.6.0",
152
152
  "@adonisjs/core": "7.6.0",
153
153
  "@adonisjs/drive": "4.0.0",
154
154
  "@adonisjs/lucid": "22.4.2",
155
- "@aws-sdk/client-s3": "3.1152.0",
155
+ "@aws-sdk/client-s3": "3.1153.0",
156
156
  "@smithy/util-stream": "4.8.2",
157
157
  "@tanstack/intent": "0.5.6",
158
158
  "@types/better-sqlite3": "9.6.0",