@remotion/lambda-client 4.0.526 → 4.0.528

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.
package/dist/cjs/index.js CHANGED
@@ -70088,13 +70088,19 @@ function springCalculation({
70088
70088
  }) {
70089
70089
  const from = 0;
70090
70090
  const to = 1;
70091
+ const resolvedConfig = {
70092
+ damping: config.damping ?? defaultSpringConfig.damping,
70093
+ mass: config.mass ?? defaultSpringConfig.mass,
70094
+ stiffness: config.stiffness ?? defaultSpringConfig.stiffness,
70095
+ overshootClamping: config.overshootClamping ?? defaultSpringConfig.overshootClamping
70096
+ };
70091
70097
  const cacheKey = [
70092
70098
  frame,
70093
70099
  fps,
70094
- config.damping,
70095
- config.mass,
70096
- config.overshootClamping,
70097
- config.stiffness
70100
+ resolvedConfig.damping,
70101
+ resolvedConfig.mass,
70102
+ resolvedConfig.overshootClamping,
70103
+ resolvedConfig.stiffness
70098
70104
  ].join("-");
70099
70105
  if (calculationCache[cacheKey]) {
70100
70106
  return calculationCache[cacheKey];
@@ -70113,20 +70119,14 @@ function springCalculation({
70113
70119
  animation = advance({
70114
70120
  animation,
70115
70121
  now: time,
70116
- config: {
70117
- ...defaultSpringConfig,
70118
- ...config
70119
- }
70122
+ config: resolvedConfig
70120
70123
  });
70121
70124
  }
70122
70125
  if (unevenRest > 0) {
70123
70126
  animation = advance({
70124
70127
  animation,
70125
70128
  now: frameClamped / fps * 1000,
70126
- config: {
70127
- ...defaultSpringConfig,
70128
- ...config
70129
- }
70129
+ config: resolvedConfig
70130
70130
  });
70131
70131
  }
70132
70132
  calculationCache[cacheKey] = animation;
@@ -70591,7 +70591,7 @@ var parseAxisRotationValue = (output) => {
70591
70591
  axisRotation: true
70592
70592
  };
70593
70593
  };
70594
- var parseStringInterpolationValue = (output) => {
70594
+ var parseStringInterpolationValue = (output, outputType) => {
70595
70595
  if (typeof output === "number") {
70596
70596
  if (!Number.isFinite(output)) {
70597
70597
  throw new Error(`outputRange must contain only finite numbers, but got [${output}]`);
@@ -70604,8 +70604,18 @@ var parseStringInterpolationValue = (output) => {
70604
70604
  axisRotation: false
70605
70605
  };
70606
70606
  }
70607
+ if (outputType === "transform-origin") {
70608
+ const transformOriginParts = output.trim().split(/\s+/);
70609
+ if (transformOriginParts.length < 1 || transformOriginParts.length > 3 || transformOriginParts[0] === "") {
70610
+ throw new TypeError(`String outputRange values must contain 1 to 3 components, but got "${output}"`);
70611
+ }
70612
+ return parseTransformOriginValue(output, transformOriginParts);
70613
+ }
70607
70614
  const axisRotation = parseAxisRotationValue(output);
70608
70615
  if (axisRotation !== null) {
70616
+ if (outputType !== undefined && outputType !== "rotate") {
70617
+ throw new TypeError(`Cannot interpolate "${output}" as ${outputType} because it is a rotate value`);
70618
+ }
70609
70619
  return axisRotation;
70610
70620
  }
70611
70621
  const parts = output.trim().split(/\s+/);
@@ -70613,6 +70623,9 @@ var parseStringInterpolationValue = (output) => {
70613
70623
  throw new TypeError(`String outputRange values must contain 1 to 3 components, but got "${output}"`);
70614
70624
  }
70615
70625
  if (parts.some((part) => transformOriginKeywords.has(part.toLowerCase()))) {
70626
+ if (outputType !== undefined) {
70627
+ throw new TypeError(`Cannot interpolate "${output}" as ${outputType} because it is a transform-origin value`);
70628
+ }
70616
70629
  return parseTransformOriginValue(output, parts);
70617
70630
  }
70618
70631
  const parsed = parts.map((part) => parseStringInterpolationComponent(part, output));
@@ -70622,6 +70635,9 @@ var parseStringInterpolationValue = (output) => {
70622
70635
  throw new TypeError(`Cannot interpolate "${output}" because it mixes ${kind} and ${part.kind} values`);
70623
70636
  }
70624
70637
  }
70638
+ if (outputType !== undefined && outputType !== kind) {
70639
+ throw new TypeError(`Cannot interpolate "${output}" as ${outputType} because it is a ${kind} value`);
70640
+ }
70625
70641
  if (kind === "scale") {
70626
70642
  const x = parsed[0].value;
70627
70643
  const y = parsed[1]?.value ?? x;
@@ -70822,9 +70838,10 @@ var interpolateString = ({
70822
70838
  input,
70823
70839
  inputRange,
70824
70840
  outputRange,
70825
- options
70841
+ options,
70842
+ outputType
70826
70843
  }) => {
70827
- const initiallyParsedOutputRange = outputRange.map(parseStringInterpolationValue);
70844
+ const initiallyParsedOutputRange = outputRange.map((output) => parseStringInterpolationValue(output, outputType));
70828
70845
  const hasAxisRotation = initiallyParsedOutputRange.some((parsed) => parsed.axisRotation);
70829
70846
  const posterizedInput = options?.posterize === undefined ? input : Math.floor(input / options.posterize) * options.posterize;
70830
70847
  const segmentIndex = inputRange.length === 1 ? 0 : findRange(posterizedInput, inputRange);
@@ -70904,6 +70921,36 @@ var interpolateString = ({
70904
70921
  axisRotation: hasAxisRotation
70905
70922
  });
70906
70923
  };
70924
+ var interpolateFontWeight = ({
70925
+ input,
70926
+ inputRange,
70927
+ outputRange,
70928
+ options
70929
+ }) => {
70930
+ const normalizedOutputRange = outputRange.map((output) => {
70931
+ if (typeof output === "string") {
70932
+ const lowerCaseOutput = output.toLowerCase();
70933
+ if (lowerCaseOutput === "normal") {
70934
+ return 400;
70935
+ }
70936
+ if (lowerCaseOutput === "bold") {
70937
+ return 700;
70938
+ }
70939
+ }
70940
+ const match = typeof output === "string" ? cssNumberRegex.exec(output) : null;
70941
+ const value = typeof output === "number" ? output : match !== null && match[2] === undefined ? Number(match[1]) : Number.NaN;
70942
+ if (!Number.isFinite(value) || value < 1 || value > 1000) {
70943
+ throw new TypeError(`Cannot interpolate font weight "${output}". Expected "normal", "bold", or a number between 1 and 1000`);
70944
+ }
70945
+ return value;
70946
+ });
70947
+ return interpolateNumber({
70948
+ input,
70949
+ inputRange,
70950
+ outputRange: normalizedOutputRange,
70951
+ options
70952
+ });
70953
+ };
70907
70954
  var interpolateDiscreteString = ({
70908
70955
  input,
70909
70956
  inputRange,
@@ -71035,6 +71082,12 @@ function assertValidInterpolateOutputOption(output) {
71035
71082
  }
71036
71083
  throw new Error(`output must be "linear" or "perceptual-scale", but got ${String(output)}`);
71037
71084
  }
71085
+ function assertValidInterpolateOutputType(outputType) {
71086
+ if (outputType === undefined || outputType === "font-weight" || outputType === "scale" || outputType === "translate" || outputType === "rotate" || outputType === "transform-origin") {
71087
+ return;
71088
+ }
71089
+ throw new Error(`outputType must be "font-weight", "scale", "translate", "rotate", or "transform-origin", but got ${String(outputType)}`);
71090
+ }
71038
71091
  function interpolate(input, inputRange, outputRange, options) {
71039
71092
  if (typeof input === "undefined") {
71040
71093
  throw new Error("input can not be undefined");
@@ -71053,26 +71106,48 @@ function interpolate(input, inputRange, outputRange, options) {
71053
71106
  assertValidInterpolateEasingOption(options?.easing, inputRange.length);
71054
71107
  assertValidInterpolatePosterizeOption(options?.posterize);
71055
71108
  assertValidInterpolateOutputOption(options?.output);
71109
+ assertValidInterpolateOutputType(options?.outputType);
71056
71110
  if (typeof input !== "number") {
71057
71111
  throw new TypeError("Cannot interpolate an input which is not a number");
71058
71112
  }
71059
71113
  if (!Array.isArray(outputRange)) {
71060
71114
  throw new Error("outputRange must contain only numbers");
71061
71115
  }
71116
+ const outputType = options?.outputType;
71117
+ if (outputType === "font-weight") {
71118
+ if (!outputRange.every((output) => typeof output === "number" || typeof output === "string")) {
71119
+ throw new TypeError("Font weight outputRange must contain only numbers or strings");
71120
+ }
71121
+ return interpolateFontWeight({
71122
+ input,
71123
+ inputRange,
71124
+ outputRange,
71125
+ options
71126
+ });
71127
+ }
71062
71128
  const hasStringOutput = outputRange.some((output) => typeof output === "string");
71129
+ if (outputType !== undefined && outputType !== "scale" && !hasStringOutput) {
71130
+ throw new TypeError(`${outputType} outputRange must contain strings with the appropriate CSS units`);
71131
+ }
71063
71132
  if (hasStringOutput) {
71064
71133
  if (!outputRange.every((output) => typeof output === "string" || typeof output === "number")) {
71065
71134
  throw new TypeError("outputRange must contain only numbers, or supported scale, translate, and rotate strings");
71066
71135
  }
71067
71136
  try {
71068
- return interpolateString({ input, inputRange, outputRange, options });
71137
+ return interpolateString({
71138
+ input,
71139
+ inputRange,
71140
+ outputRange,
71141
+ options,
71142
+ outputType
71143
+ });
71069
71144
  } catch (error) {
71070
71145
  if (!outputRange.every((output) => typeof output === "string")) {
71071
71146
  throw error;
71072
71147
  }
71073
71148
  const hasNonNumericString = outputRange.some((output) => {
71074
71149
  try {
71075
- parseStringInterpolationValue(output);
71150
+ parseStringInterpolationValue(output, outputType);
71076
71151
  return false;
71077
71152
  } catch (parseError) {
71078
71153
  return parseError instanceof UnsupportedStringInterpolationValueError;
@@ -71512,10 +71587,20 @@ var freezeField = {
71512
71587
  step: 1,
71513
71588
  hiddenFromList: true
71514
71589
  };
71590
+ var playbackRateField = {
71591
+ type: "number",
71592
+ default: 1,
71593
+ min: 0.01,
71594
+ step: 0.1,
71595
+ description: "Playback rate",
71596
+ hiddenFromList: false,
71597
+ keyframable: false
71598
+ };
71515
71599
  var baseSchema = {
71516
71600
  durationInFrames: durationInFramesField,
71517
71601
  from: fromField,
71518
71602
  trimBefore: trimBeforeField,
71603
+ playbackRate: playbackRateField,
71519
71604
  freeze: freezeField,
71520
71605
  hidden: hiddenField,
71521
71606
  name: sequenceNameField,
@@ -71536,6 +71621,7 @@ var sequenceSchema = {
71536
71621
  var baseSchemaWithoutFrom = {
71537
71622
  durationInFrames: durationInFramesField,
71538
71623
  trimBefore: trimBeforeField,
71624
+ playbackRate: playbackRateField,
71539
71625
  freeze: freezeField,
71540
71626
  hidden: hiddenField,
71541
71627
  name: sequenceNameField,
@@ -72247,7 +72333,7 @@ var validateDownloadBehavior = (downloadBehavior) => {
72247
72333
  }
72248
72334
  }
72249
72335
  };
72250
- var VERSION = "4.0.526";
72336
+ var VERSION = "4.0.528";
72251
72337
  var isColorSupported = () => {
72252
72338
  const env = process.env || {};
72253
72339
  const isForceDisabled = "NO_COLOR" in env;
@@ -69430,13 +69430,19 @@ function springCalculation({
69430
69430
  }) {
69431
69431
  const from = 0;
69432
69432
  const to = 1;
69433
+ const resolvedConfig = {
69434
+ damping: config.damping ?? defaultSpringConfig.damping,
69435
+ mass: config.mass ?? defaultSpringConfig.mass,
69436
+ stiffness: config.stiffness ?? defaultSpringConfig.stiffness,
69437
+ overshootClamping: config.overshootClamping ?? defaultSpringConfig.overshootClamping
69438
+ };
69433
69439
  const cacheKey = [
69434
69440
  frame,
69435
69441
  fps,
69436
- config.damping,
69437
- config.mass,
69438
- config.overshootClamping,
69439
- config.stiffness
69442
+ resolvedConfig.damping,
69443
+ resolvedConfig.mass,
69444
+ resolvedConfig.overshootClamping,
69445
+ resolvedConfig.stiffness
69440
69446
  ].join("-");
69441
69447
  if (calculationCache[cacheKey]) {
69442
69448
  return calculationCache[cacheKey];
@@ -69455,20 +69461,14 @@ function springCalculation({
69455
69461
  animation = advance({
69456
69462
  animation,
69457
69463
  now: time,
69458
- config: {
69459
- ...defaultSpringConfig,
69460
- ...config
69461
- }
69464
+ config: resolvedConfig
69462
69465
  });
69463
69466
  }
69464
69467
  if (unevenRest > 0) {
69465
69468
  animation = advance({
69466
69469
  animation,
69467
69470
  now: frameClamped / fps * 1000,
69468
- config: {
69469
- ...defaultSpringConfig,
69470
- ...config
69471
- }
69471
+ config: resolvedConfig
69472
69472
  });
69473
69473
  }
69474
69474
  calculationCache[cacheKey] = animation;
@@ -69933,7 +69933,7 @@ var parseAxisRotationValue = (output) => {
69933
69933
  axisRotation: true
69934
69934
  };
69935
69935
  };
69936
- var parseStringInterpolationValue = (output) => {
69936
+ var parseStringInterpolationValue = (output, outputType) => {
69937
69937
  if (typeof output === "number") {
69938
69938
  if (!Number.isFinite(output)) {
69939
69939
  throw new Error(`outputRange must contain only finite numbers, but got [${output}]`);
@@ -69946,8 +69946,18 @@ var parseStringInterpolationValue = (output) => {
69946
69946
  axisRotation: false
69947
69947
  };
69948
69948
  }
69949
+ if (outputType === "transform-origin") {
69950
+ const transformOriginParts = output.trim().split(/\s+/);
69951
+ if (transformOriginParts.length < 1 || transformOriginParts.length > 3 || transformOriginParts[0] === "") {
69952
+ throw new TypeError(`String outputRange values must contain 1 to 3 components, but got "${output}"`);
69953
+ }
69954
+ return parseTransformOriginValue(output, transformOriginParts);
69955
+ }
69949
69956
  const axisRotation = parseAxisRotationValue(output);
69950
69957
  if (axisRotation !== null) {
69958
+ if (outputType !== undefined && outputType !== "rotate") {
69959
+ throw new TypeError(`Cannot interpolate "${output}" as ${outputType} because it is a rotate value`);
69960
+ }
69951
69961
  return axisRotation;
69952
69962
  }
69953
69963
  const parts = output.trim().split(/\s+/);
@@ -69955,6 +69965,9 @@ var parseStringInterpolationValue = (output) => {
69955
69965
  throw new TypeError(`String outputRange values must contain 1 to 3 components, but got "${output}"`);
69956
69966
  }
69957
69967
  if (parts.some((part) => transformOriginKeywords.has(part.toLowerCase()))) {
69968
+ if (outputType !== undefined) {
69969
+ throw new TypeError(`Cannot interpolate "${output}" as ${outputType} because it is a transform-origin value`);
69970
+ }
69958
69971
  return parseTransformOriginValue(output, parts);
69959
69972
  }
69960
69973
  const parsed = parts.map((part) => parseStringInterpolationComponent(part, output));
@@ -69964,6 +69977,9 @@ var parseStringInterpolationValue = (output) => {
69964
69977
  throw new TypeError(`Cannot interpolate "${output}" because it mixes ${kind} and ${part.kind} values`);
69965
69978
  }
69966
69979
  }
69980
+ if (outputType !== undefined && outputType !== kind) {
69981
+ throw new TypeError(`Cannot interpolate "${output}" as ${outputType} because it is a ${kind} value`);
69982
+ }
69967
69983
  if (kind === "scale") {
69968
69984
  const x = parsed[0].value;
69969
69985
  const y = parsed[1]?.value ?? x;
@@ -70164,9 +70180,10 @@ var interpolateString = ({
70164
70180
  input,
70165
70181
  inputRange,
70166
70182
  outputRange,
70167
- options
70183
+ options,
70184
+ outputType
70168
70185
  }) => {
70169
- const initiallyParsedOutputRange = outputRange.map(parseStringInterpolationValue);
70186
+ const initiallyParsedOutputRange = outputRange.map((output) => parseStringInterpolationValue(output, outputType));
70170
70187
  const hasAxisRotation = initiallyParsedOutputRange.some((parsed) => parsed.axisRotation);
70171
70188
  const posterizedInput = options?.posterize === undefined ? input : Math.floor(input / options.posterize) * options.posterize;
70172
70189
  const segmentIndex = inputRange.length === 1 ? 0 : findRange(posterizedInput, inputRange);
@@ -70246,6 +70263,36 @@ var interpolateString = ({
70246
70263
  axisRotation: hasAxisRotation
70247
70264
  });
70248
70265
  };
70266
+ var interpolateFontWeight = ({
70267
+ input,
70268
+ inputRange,
70269
+ outputRange,
70270
+ options
70271
+ }) => {
70272
+ const normalizedOutputRange = outputRange.map((output) => {
70273
+ if (typeof output === "string") {
70274
+ const lowerCaseOutput = output.toLowerCase();
70275
+ if (lowerCaseOutput === "normal") {
70276
+ return 400;
70277
+ }
70278
+ if (lowerCaseOutput === "bold") {
70279
+ return 700;
70280
+ }
70281
+ }
70282
+ const match = typeof output === "string" ? cssNumberRegex.exec(output) : null;
70283
+ const value = typeof output === "number" ? output : match !== null && match[2] === undefined ? Number(match[1]) : Number.NaN;
70284
+ if (!Number.isFinite(value) || value < 1 || value > 1000) {
70285
+ throw new TypeError(`Cannot interpolate font weight "${output}". Expected "normal", "bold", or a number between 1 and 1000`);
70286
+ }
70287
+ return value;
70288
+ });
70289
+ return interpolateNumber({
70290
+ input,
70291
+ inputRange,
70292
+ outputRange: normalizedOutputRange,
70293
+ options
70294
+ });
70295
+ };
70249
70296
  var interpolateDiscreteString = ({
70250
70297
  input,
70251
70298
  inputRange,
@@ -70377,6 +70424,12 @@ function assertValidInterpolateOutputOption(output) {
70377
70424
  }
70378
70425
  throw new Error(`output must be "linear" or "perceptual-scale", but got ${String(output)}`);
70379
70426
  }
70427
+ function assertValidInterpolateOutputType(outputType) {
70428
+ if (outputType === undefined || outputType === "font-weight" || outputType === "scale" || outputType === "translate" || outputType === "rotate" || outputType === "transform-origin") {
70429
+ return;
70430
+ }
70431
+ throw new Error(`outputType must be "font-weight", "scale", "translate", "rotate", or "transform-origin", but got ${String(outputType)}`);
70432
+ }
70380
70433
  function interpolate(input, inputRange, outputRange, options) {
70381
70434
  if (typeof input === "undefined") {
70382
70435
  throw new Error("input can not be undefined");
@@ -70395,26 +70448,48 @@ function interpolate(input, inputRange, outputRange, options) {
70395
70448
  assertValidInterpolateEasingOption(options?.easing, inputRange.length);
70396
70449
  assertValidInterpolatePosterizeOption(options?.posterize);
70397
70450
  assertValidInterpolateOutputOption(options?.output);
70451
+ assertValidInterpolateOutputType(options?.outputType);
70398
70452
  if (typeof input !== "number") {
70399
70453
  throw new TypeError("Cannot interpolate an input which is not a number");
70400
70454
  }
70401
70455
  if (!Array.isArray(outputRange)) {
70402
70456
  throw new Error("outputRange must contain only numbers");
70403
70457
  }
70458
+ const outputType = options?.outputType;
70459
+ if (outputType === "font-weight") {
70460
+ if (!outputRange.every((output) => typeof output === "number" || typeof output === "string")) {
70461
+ throw new TypeError("Font weight outputRange must contain only numbers or strings");
70462
+ }
70463
+ return interpolateFontWeight({
70464
+ input,
70465
+ inputRange,
70466
+ outputRange,
70467
+ options
70468
+ });
70469
+ }
70404
70470
  const hasStringOutput = outputRange.some((output) => typeof output === "string");
70471
+ if (outputType !== undefined && outputType !== "scale" && !hasStringOutput) {
70472
+ throw new TypeError(`${outputType} outputRange must contain strings with the appropriate CSS units`);
70473
+ }
70405
70474
  if (hasStringOutput) {
70406
70475
  if (!outputRange.every((output) => typeof output === "string" || typeof output === "number")) {
70407
70476
  throw new TypeError("outputRange must contain only numbers, or supported scale, translate, and rotate strings");
70408
70477
  }
70409
70478
  try {
70410
- return interpolateString({ input, inputRange, outputRange, options });
70479
+ return interpolateString({
70480
+ input,
70481
+ inputRange,
70482
+ outputRange,
70483
+ options,
70484
+ outputType
70485
+ });
70411
70486
  } catch (error) {
70412
70487
  if (!outputRange.every((output) => typeof output === "string")) {
70413
70488
  throw error;
70414
70489
  }
70415
70490
  const hasNonNumericString = outputRange.some((output) => {
70416
70491
  try {
70417
- parseStringInterpolationValue(output);
70492
+ parseStringInterpolationValue(output, outputType);
70418
70493
  return false;
70419
70494
  } catch (parseError) {
70420
70495
  return parseError instanceof UnsupportedStringInterpolationValueError;
@@ -70854,10 +70929,20 @@ var freezeField = {
70854
70929
  step: 1,
70855
70930
  hiddenFromList: true
70856
70931
  };
70932
+ var playbackRateField = {
70933
+ type: "number",
70934
+ default: 1,
70935
+ min: 0.01,
70936
+ step: 0.1,
70937
+ description: "Playback rate",
70938
+ hiddenFromList: false,
70939
+ keyframable: false
70940
+ };
70857
70941
  var baseSchema = {
70858
70942
  durationInFrames: durationInFramesField,
70859
70943
  from: fromField,
70860
70944
  trimBefore: trimBeforeField,
70945
+ playbackRate: playbackRateField,
70861
70946
  freeze: freezeField,
70862
70947
  hidden: hiddenField,
70863
70948
  name: sequenceNameField,
@@ -70878,6 +70963,7 @@ var sequenceSchema = {
70878
70963
  var baseSchemaWithoutFrom = {
70879
70964
  durationInFrames: durationInFramesField,
70880
70965
  trimBefore: trimBeforeField,
70966
+ playbackRate: playbackRateField,
70881
70967
  freeze: freezeField,
70882
70968
  hidden: hiddenField,
70883
70969
  name: sequenceNameField,
@@ -71589,7 +71675,7 @@ var validateDownloadBehavior = (downloadBehavior) => {
71589
71675
  }
71590
71676
  }
71591
71677
  };
71592
- var VERSION = "4.0.526";
71678
+ var VERSION = "4.0.528";
71593
71679
  var isColorSupported = () => {
71594
71680
  const env = process.env || {};
71595
71681
  const isForceDisabled = "NO_COLOR" in env;
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/lambda-client"
4
4
  },
5
5
  "name": "@remotion/lambda-client",
6
- "version": "4.0.526",
6
+ "version": "4.0.528",
7
7
  "main": "dist/cjs/index.js",
8
8
  "scripts": {
9
9
  "formatting": "oxfmt src --check",
@@ -26,10 +26,10 @@
26
26
  "@aws-sdk/lib-storage": "3.986.0",
27
27
  "mime-types": "2.1.34",
28
28
  "@aws-sdk/credential-provider-ini": "3.972.5",
29
- "@remotion/serverless-client": "4.0.526",
29
+ "@remotion/serverless-client": "4.0.528",
30
30
  "@types/express": "5.0.1",
31
31
  "express": "4.21.0",
32
- "@remotion/eslint-config-internal": "4.0.526",
32
+ "@remotion/eslint-config-internal": "4.0.528",
33
33
  "eslint": "9.19.0",
34
34
  "next": "16.3.3",
35
35
  "@types/mime-types": "2.1.1",