@herowcode/utils 1.5.1 → 1.5.3

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 (87) hide show
  1. package/dist/api/{index.d.mts → index.d.cts} +1 -1
  2. package/dist/chunk-6IYD4APX.js +28 -0
  3. package/dist/chunk-6IYD4APX.js.map +1 -0
  4. package/dist/chunk-7X4LRL26.js +103 -0
  5. package/dist/chunk-7X4LRL26.js.map +1 -0
  6. package/dist/chunk-D3RLXVKJ.cjs +30 -0
  7. package/dist/chunk-D3RLXVKJ.cjs.map +1 -0
  8. package/dist/{chunk-AQZBHMTO.js → chunk-DVHDU327.js} +16 -26
  9. package/dist/chunk-DVHDU327.js.map +1 -0
  10. package/dist/chunk-KWMJV4VK.cjs +110 -0
  11. package/dist/chunk-KWMJV4VK.cjs.map +1 -0
  12. package/dist/{chunk-UXEUYHBD.cjs → chunk-LN36GFUC.cjs} +12 -12
  13. package/dist/chunk-LN36GFUC.cjs.map +1 -0
  14. package/dist/{chunk-SLYUARZG.cjs → chunk-SLDBIYI4.cjs} +16 -26
  15. package/dist/chunk-SLDBIYI4.cjs.map +1 -0
  16. package/dist/{chunk-QRXVUXGJ.js → chunk-VQMAN6EZ.js} +12 -12
  17. package/dist/chunk-VQMAN6EZ.js.map +1 -0
  18. package/dist/date/index.cjs +13 -13
  19. package/dist/date/index.js +1 -1
  20. package/dist/download-url-BQ1RPHKW.d.cts +3 -0
  21. package/dist/download-url-BQ1RPHKW.d.ts +3 -0
  22. package/dist/{files/index.node.d.mts → file-exists-ZCP2yARf.d.cts} +1 -3
  23. package/dist/file-exists-ZCP2yARf.d.ts +5 -0
  24. package/dist/files/index.browser.cjs +16 -7
  25. package/dist/files/index.browser.cjs.map +1 -1
  26. package/dist/files/index.browser.d.cts +8 -0
  27. package/dist/files/index.browser.d.ts +5 -11
  28. package/dist/files/index.browser.js +13 -2
  29. package/dist/files/index.browser.js.map +1 -1
  30. package/dist/files/index.cjs +8 -8
  31. package/dist/files/index.d.cts +3 -0
  32. package/dist/files/index.d.ts +3 -3
  33. package/dist/files/index.js +2 -2
  34. package/dist/files/index.node.cjs +11 -3
  35. package/dist/files/index.node.cjs.map +1 -1
  36. package/dist/files/index.node.d.cts +6 -0
  37. package/dist/files/index.node.d.ts +4 -5
  38. package/dist/files/index.node.js +8 -1
  39. package/dist/files/index.node.js.map +1 -1
  40. package/dist/{files/index.browser.d.mts → format-bytes-B0QeE7As.d.cts} +2 -4
  41. package/dist/format-bytes-B0QeE7As.d.ts +12 -0
  42. package/dist/function/{index.d.mts → index.d.cts} +1 -1
  43. package/dist/index.cjs +21 -21
  44. package/dist/index.d.cts +12 -0
  45. package/dist/index.d.ts +4 -4
  46. package/dist/index.js +3 -3
  47. package/dist/nextjs/index.browser.cjs +5 -103
  48. package/dist/nextjs/index.browser.cjs.map +1 -1
  49. package/dist/nextjs/index.browser.js +1 -101
  50. package/dist/nextjs/index.browser.js.map +1 -1
  51. package/dist/nextjs/index.cjs +12 -0
  52. package/dist/nextjs/index.cjs.map +1 -0
  53. package/dist/nextjs/index.d.cts +3 -0
  54. package/dist/nextjs/index.d.ts +3 -0
  55. package/dist/nextjs/index.js +3 -0
  56. package/dist/nextjs/index.js.map +1 -0
  57. package/dist/{youtube/index.node.d.mts → validate-youtube-link-Bfr2jQY8.d.cts} +1 -1
  58. package/dist/validate-youtube-link-Bfr2jQY8.d.ts +49 -0
  59. package/dist/youtube/index.browser.d.cts +2 -0
  60. package/dist/youtube/index.browser.d.ts +1 -1
  61. package/dist/youtube/{index.d.mts → index.d.cts} +1 -1
  62. package/dist/youtube/index.d.ts +1 -1
  63. package/dist/youtube/index.node.cjs +10 -0
  64. package/dist/youtube/index.node.cjs.map +1 -1
  65. package/dist/youtube/index.node.d.cts +7 -0
  66. package/dist/youtube/index.node.d.ts +4 -46
  67. package/dist/youtube/index.node.js +12 -0
  68. package/dist/youtube/index.node.js.map +1 -1
  69. package/package.json +41 -31
  70. package/dist/chunk-AQZBHMTO.js.map +0 -1
  71. package/dist/chunk-GRSF4RY2.cjs +0 -20
  72. package/dist/chunk-GRSF4RY2.cjs.map +0 -1
  73. package/dist/chunk-O7SH3E3T.js +0 -18
  74. package/dist/chunk-O7SH3E3T.js.map +0 -1
  75. package/dist/chunk-QRXVUXGJ.js.map +0 -1
  76. package/dist/chunk-SLYUARZG.cjs.map +0 -1
  77. package/dist/chunk-UXEUYHBD.cjs.map +0 -1
  78. package/dist/files/index.d.mts +0 -3
  79. package/dist/format-bytes-BGjeDnvM.d.mts +0 -3
  80. package/dist/format-bytes-BGjeDnvM.d.ts +0 -3
  81. package/dist/index.d.mts +0 -12
  82. package/dist/youtube/index.browser.d.mts +0 -2
  83. /package/dist/array/{index.d.mts → index.d.cts} +0 -0
  84. /package/dist/date/{index.d.mts → index.d.cts} +0 -0
  85. /package/dist/nextjs/{index.browser.d.mts → index.browser.d.cts} +0 -0
  86. /package/dist/string/{index.d.mts → index.d.cts} +0 -0
  87. /package/dist/{try-catch-B7WzqcPU.d.mts → try-catch-B7WzqcPU.d.cts} +0 -0
@@ -1,110 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var clsx = require('clsx');
4
- var Image = require('next/image');
5
- var react = require('react');
6
- var tailwindMerge = require('tailwind-merge');
7
- var jsxRuntime = require('react/jsx-runtime');
3
+ var chunkKWMJV4VK_cjs = require('../chunk-KWMJV4VK.cjs');
8
4
 
9
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
5
 
11
- var clsx__default = /*#__PURE__*/_interopDefault(clsx);
12
- var Image__default = /*#__PURE__*/_interopDefault(Image);
13
6
 
14
- // src/nextjs/optimized-image.tsx
15
- function cn(...inputs) {
16
- return tailwindMerge.twMerge(clsx__default.default(inputs));
17
- }
18
- var OptimizedImage = react.forwardRef(
19
- function OptimizedImage2({
20
- src,
21
- alt,
22
- width,
23
- height,
24
- className,
25
- fallbackText = "Falha ao carregar a imagem",
26
- lazyLoad = true,
27
- onLoad,
28
- sizes,
29
- ...props
30
- }, ref) {
31
- const containerRef = react.useRef(null);
32
- const [isLoading, setIsLoading] = react.useState(true);
33
- const [hasError, setHasError] = react.useState(false);
34
- const [isInView, setIsInView] = react.useState(!lazyLoad);
35
- react.useEffect(() => {
36
- if (!lazyLoad || !containerRef.current) {
37
- setIsInView(true);
38
- return;
39
- }
40
- const observer = new IntersectionObserver(
41
- ([entry]) => {
42
- if (entry.isIntersecting) {
43
- setIsInView(true);
44
- observer.disconnect();
45
- }
46
- },
47
- { rootMargin: "200px" }
48
- );
49
- observer.observe(containerRef.current);
50
- return () => {
51
- observer.disconnect();
52
- };
53
- }, [lazyLoad]);
54
- const handleLoad = (ev) => {
55
- setIsLoading(false);
56
- onLoad == null ? void 0 : onLoad(ev);
57
- };
58
- const handleError = () => {
59
- setIsLoading(false);
60
- setHasError(true);
61
- };
62
- return /* @__PURE__ */ jsxRuntime.jsxs(
63
- "div",
64
- {
65
- ref: containerRef,
66
- className: "relative overflow-hidden",
67
- style: {
68
- width: width != null ? `${Number(width)}px` : "100%",
69
- height: height != null ? `${Number(height)}px` : "100%"
70
- },
71
- children: [
72
- isLoading && /* @__PURE__ */ jsxRuntime.jsx(
73
- "div",
74
- {
75
- className: "bg-muted absolute inset-0 animate-pulse rounded-md",
76
- style: { width: "100%", height: "100%" }
77
- }
78
- ),
79
- hasError ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-muted text-muted-foreground absolute inset-0 flex items-center justify-center rounded-md text-center text-sm", children: fallbackText }) : isInView && /* @__PURE__ */ jsxRuntime.jsx(
80
- Image__default.default,
81
- {
82
- ref,
83
- src: src || "/placeholder.svg",
84
- alt,
85
- width: width ? Number(width) : void 0,
86
- height: height ? Number(height) : void 0,
87
- sizes: sizes || "(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw",
88
- quality: 80,
89
- loading: props.priority ? "eager" : "lazy",
90
- className: cn(
91
- "rounded-md object-cover transition-opacity duration-300",
92
- isLoading ? "opacity-0" : "opacity-100",
93
- className
94
- ),
95
- onLoad: handleLoad,
96
- onError: handleError,
97
- placeholder: "blur",
98
- blurDataURL: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAEtAI8V7yQCgAAAABJRU5ErkJggg==",
99
- ...props
100
- }
101
- )
102
- ]
103
- }
104
- );
105
- }
106
- );
107
-
108
- exports.OptimizedImage = OptimizedImage;
7
+ Object.defineProperty(exports, "OptimizedImage", {
8
+ enumerable: true,
9
+ get: function () { return chunkKWMJV4VK_cjs.OptimizedImage; }
10
+ });
109
11
  //# sourceMappingURL=index.browser.cjs.map
110
12
  //# sourceMappingURL=index.browser.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/nextjs/optimized-image.tsx"],"names":["twMerge","clsx","forwardRef","OptimizedImage","useRef","useState","useEffect","jsxs","jsx","Image"],"mappings":"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","file":"index.browser.cjs","sourcesContent":["\"use client\"\n\nimport clsx, { type ClassValue } from \"clsx\"\nimport Image from \"next/image\"\nimport type React from \"react\"\nimport { forwardRef, useEffect, useRef, useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nfunction cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\ninterface OptimizedImageProps\n extends React.ComponentPropsWithoutRef<typeof Image> {\n fallbackText?: string\n lazyLoad?: boolean\n}\n\nexport const OptimizedImage = forwardRef<HTMLImageElement, OptimizedImageProps>(\n function OptimizedImage(\n {\n src,\n alt,\n width,\n height,\n className,\n fallbackText = \"Falha ao carregar a imagem\",\n lazyLoad = true,\n onLoad,\n sizes,\n ...props\n },\n ref,\n ) {\n const containerRef = useRef<HTMLDivElement>(null)\n const [isLoading, setIsLoading] = useState(true)\n const [hasError, setHasError] = useState(false)\n const [isInView, setIsInView] = useState(!lazyLoad)\n\n useEffect(() => {\n if (!lazyLoad || !containerRef.current) {\n setIsInView(true)\n return\n }\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setIsInView(true)\n observer.disconnect()\n }\n },\n { rootMargin: \"200px\" },\n )\n\n observer.observe(containerRef.current)\n\n return () => {\n observer.disconnect()\n }\n }, [lazyLoad])\n\n const handleLoad = (ev: React.SyntheticEvent<HTMLImageElement, Event>) => {\n setIsLoading(false)\n onLoad?.(ev)\n }\n\n const handleError = () => {\n setIsLoading(false)\n setHasError(true)\n }\n\n return (\n <div\n ref={containerRef}\n className=\"relative overflow-hidden\"\n style={{\n width: width != null ? `${Number(width)}px` : \"100%\",\n height: height != null ? `${Number(height)}px` : \"100%\",\n }}\n >\n {isLoading && (\n <div\n className=\"bg-muted absolute inset-0 animate-pulse rounded-md\"\n style={{ width: \"100%\", height: \"100%\" }}\n />\n )}\n\n {hasError ? (\n <div className=\"bg-muted text-muted-foreground absolute inset-0 flex items-center justify-center rounded-md text-center text-sm\">\n {fallbackText}\n </div>\n ) : (\n isInView && (\n <Image\n ref={ref}\n src={src || \"/placeholder.svg\"}\n alt={alt}\n width={width ? Number(width) : undefined}\n height={height ? Number(height) : undefined}\n sizes={\n sizes ||\n \"(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw\"\n }\n quality={80}\n loading={props.priority ? \"eager\" : \"lazy\"}\n className={cn(\n \"rounded-md object-cover transition-opacity duration-300\",\n isLoading ? \"opacity-0\" : \"opacity-100\",\n className,\n )}\n onLoad={handleLoad}\n onError={handleError}\n placeholder=\"blur\"\n blurDataURL=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAEtAI8V7yQCgAAAABJRU5ErkJggg==\"\n {...props}\n />\n )\n )}\n </div>\n )\n },\n)\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.browser.cjs"}
@@ -1,103 +1,3 @@
1
- import clsx from 'clsx';
2
- import Image from 'next/image';
3
- import { forwardRef, useRef, useState, useEffect } from 'react';
4
- import { twMerge } from 'tailwind-merge';
5
- import { jsxs, jsx } from 'react/jsx-runtime';
6
-
7
- // src/nextjs/optimized-image.tsx
8
- function cn(...inputs) {
9
- return twMerge(clsx(inputs));
10
- }
11
- var OptimizedImage = forwardRef(
12
- function OptimizedImage2({
13
- src,
14
- alt,
15
- width,
16
- height,
17
- className,
18
- fallbackText = "Falha ao carregar a imagem",
19
- lazyLoad = true,
20
- onLoad,
21
- sizes,
22
- ...props
23
- }, ref) {
24
- const containerRef = useRef(null);
25
- const [isLoading, setIsLoading] = useState(true);
26
- const [hasError, setHasError] = useState(false);
27
- const [isInView, setIsInView] = useState(!lazyLoad);
28
- useEffect(() => {
29
- if (!lazyLoad || !containerRef.current) {
30
- setIsInView(true);
31
- return;
32
- }
33
- const observer = new IntersectionObserver(
34
- ([entry]) => {
35
- if (entry.isIntersecting) {
36
- setIsInView(true);
37
- observer.disconnect();
38
- }
39
- },
40
- { rootMargin: "200px" }
41
- );
42
- observer.observe(containerRef.current);
43
- return () => {
44
- observer.disconnect();
45
- };
46
- }, [lazyLoad]);
47
- const handleLoad = (ev) => {
48
- setIsLoading(false);
49
- onLoad == null ? void 0 : onLoad(ev);
50
- };
51
- const handleError = () => {
52
- setIsLoading(false);
53
- setHasError(true);
54
- };
55
- return /* @__PURE__ */ jsxs(
56
- "div",
57
- {
58
- ref: containerRef,
59
- className: "relative overflow-hidden",
60
- style: {
61
- width: width != null ? `${Number(width)}px` : "100%",
62
- height: height != null ? `${Number(height)}px` : "100%"
63
- },
64
- children: [
65
- isLoading && /* @__PURE__ */ jsx(
66
- "div",
67
- {
68
- className: "bg-muted absolute inset-0 animate-pulse rounded-md",
69
- style: { width: "100%", height: "100%" }
70
- }
71
- ),
72
- hasError ? /* @__PURE__ */ jsx("div", { className: "bg-muted text-muted-foreground absolute inset-0 flex items-center justify-center rounded-md text-center text-sm", children: fallbackText }) : isInView && /* @__PURE__ */ jsx(
73
- Image,
74
- {
75
- ref,
76
- src: src || "/placeholder.svg",
77
- alt,
78
- width: width ? Number(width) : void 0,
79
- height: height ? Number(height) : void 0,
80
- sizes: sizes || "(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw",
81
- quality: 80,
82
- loading: props.priority ? "eager" : "lazy",
83
- className: cn(
84
- "rounded-md object-cover transition-opacity duration-300",
85
- isLoading ? "opacity-0" : "opacity-100",
86
- className
87
- ),
88
- onLoad: handleLoad,
89
- onError: handleError,
90
- placeholder: "blur",
91
- blurDataURL: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAEtAI8V7yQCgAAAABJRU5ErkJggg==",
92
- ...props
93
- }
94
- )
95
- ]
96
- }
97
- );
98
- }
99
- );
100
-
101
- export { OptimizedImage };
1
+ export { OptimizedImage } from '../chunk-7X4LRL26.js';
102
2
  //# sourceMappingURL=index.browser.js.map
103
3
  //# sourceMappingURL=index.browser.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/nextjs/optimized-image.tsx"],"names":["OptimizedImage"],"mappings":"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","file":"index.browser.js","sourcesContent":["\"use client\"\n\nimport clsx, { type ClassValue } from \"clsx\"\nimport Image from \"next/image\"\nimport type React from \"react\"\nimport { forwardRef, useEffect, useRef, useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nfunction cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\ninterface OptimizedImageProps\n extends React.ComponentPropsWithoutRef<typeof Image> {\n fallbackText?: string\n lazyLoad?: boolean\n}\n\nexport const OptimizedImage = forwardRef<HTMLImageElement, OptimizedImageProps>(\n function OptimizedImage(\n {\n src,\n alt,\n width,\n height,\n className,\n fallbackText = \"Falha ao carregar a imagem\",\n lazyLoad = true,\n onLoad,\n sizes,\n ...props\n },\n ref,\n ) {\n const containerRef = useRef<HTMLDivElement>(null)\n const [isLoading, setIsLoading] = useState(true)\n const [hasError, setHasError] = useState(false)\n const [isInView, setIsInView] = useState(!lazyLoad)\n\n useEffect(() => {\n if (!lazyLoad || !containerRef.current) {\n setIsInView(true)\n return\n }\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setIsInView(true)\n observer.disconnect()\n }\n },\n { rootMargin: \"200px\" },\n )\n\n observer.observe(containerRef.current)\n\n return () => {\n observer.disconnect()\n }\n }, [lazyLoad])\n\n const handleLoad = (ev: React.SyntheticEvent<HTMLImageElement, Event>) => {\n setIsLoading(false)\n onLoad?.(ev)\n }\n\n const handleError = () => {\n setIsLoading(false)\n setHasError(true)\n }\n\n return (\n <div\n ref={containerRef}\n className=\"relative overflow-hidden\"\n style={{\n width: width != null ? `${Number(width)}px` : \"100%\",\n height: height != null ? `${Number(height)}px` : \"100%\",\n }}\n >\n {isLoading && (\n <div\n className=\"bg-muted absolute inset-0 animate-pulse rounded-md\"\n style={{ width: \"100%\", height: \"100%\" }}\n />\n )}\n\n {hasError ? (\n <div className=\"bg-muted text-muted-foreground absolute inset-0 flex items-center justify-center rounded-md text-center text-sm\">\n {fallbackText}\n </div>\n ) : (\n isInView && (\n <Image\n ref={ref}\n src={src || \"/placeholder.svg\"}\n alt={alt}\n width={width ? Number(width) : undefined}\n height={height ? Number(height) : undefined}\n sizes={\n sizes ||\n \"(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw\"\n }\n quality={80}\n loading={props.priority ? \"eager\" : \"lazy\"}\n className={cn(\n \"rounded-md object-cover transition-opacity duration-300\",\n isLoading ? \"opacity-0\" : \"opacity-100\",\n className,\n )}\n onLoad={handleLoad}\n onError={handleError}\n placeholder=\"blur\"\n blurDataURL=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAEtAI8V7yQCgAAAABJRU5ErkJggg==\"\n {...props}\n />\n )\n )}\n </div>\n )\n },\n)\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.browser.js"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var chunkKWMJV4VK_cjs = require('../chunk-KWMJV4VK.cjs');
4
+
5
+
6
+
7
+ Object.defineProperty(exports, "OptimizedImage", {
8
+ enumerable: true,
9
+ get: function () { return chunkKWMJV4VK_cjs.OptimizedImage; }
10
+ });
11
+ //# sourceMappingURL=index.cjs.map
12
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
@@ -0,0 +1,3 @@
1
+ export { OptimizedImage } from './index.browser.cjs';
2
+ import 'next/image';
3
+ import 'react';
@@ -0,0 +1,3 @@
1
+ export { OptimizedImage } from './index.browser.js';
2
+ import 'next/image';
3
+ import 'react';
@@ -0,0 +1,3 @@
1
+ export { OptimizedImage } from '../chunk-7X4LRL26.js';
2
+ //# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -46,4 +46,4 @@ declare function getYoutubeVideoInfo(videoUrl: string): Promise<TYouTubeVideoInf
46
46
 
47
47
  declare function validateYoutubeLink(videoUrl: string): Promise<boolean>;
48
48
 
49
- export { type TYouTubeVideoInfo, extractYouTubeId, generateYoutubeURL, getYoutubeVideoInfo, validateYoutubeLink };
49
+ export { type TYouTubeVideoInfo as T, getYoutubeVideoInfo as a, extractYouTubeId as e, generateYoutubeURL as g, validateYoutubeLink as v };
@@ -0,0 +1,49 @@
1
+ declare function extractYouTubeId(urlString: string | null): string | null;
2
+
3
+ type TCreateYoutubeLinkOptions = {
4
+ videoURL: string;
5
+ start?: number | string;
6
+ end?: number | string;
7
+ embed?: boolean;
8
+ short?: boolean;
9
+ useFragment?: boolean;
10
+ autoplay?: boolean;
11
+ controls?: 0 | 1;
12
+ rel?: 0 | 1;
13
+ loop?: boolean;
14
+ mute?: boolean;
15
+ modestbranding?: 0 | 1;
16
+ origin?: string;
17
+ playlist?: string;
18
+ params?: Record<string, string | number | boolean>;
19
+ };
20
+ declare const generateYoutubeURL: (opts: TCreateYoutubeLinkOptions) => string | null;
21
+
22
+ type TYtThumbnail = {
23
+ url: string;
24
+ width?: number;
25
+ height?: number;
26
+ };
27
+ type TYouTubeVideoInfo = {
28
+ id: string;
29
+ url: string;
30
+ title: string;
31
+ channelTitle: string;
32
+ channelId?: string;
33
+ channelUrl?: string;
34
+ description?: string;
35
+ shortDescription?: string;
36
+ thumbnails: TYtThumbnail[];
37
+ thumbnail?: string;
38
+ publishedAt?: string;
39
+ uploadedAt?: string;
40
+ keywords?: string[];
41
+ viewCount?: number;
42
+ lengthSeconds?: number;
43
+ isLive?: boolean;
44
+ };
45
+ declare function getYoutubeVideoInfo(videoUrl: string): Promise<TYouTubeVideoInfo | null>;
46
+
47
+ declare function validateYoutubeLink(videoUrl: string): Promise<boolean>;
48
+
49
+ export { type TYouTubeVideoInfo as T, getYoutubeVideoInfo as a, extractYouTubeId as e, generateYoutubeURL as g, validateYoutubeLink as v };
@@ -0,0 +1,2 @@
1
+ export { T as TYouTubeVideoInfo, e as extractYouTubeId, g as generateYoutubeURL, a as getYoutubeVideoInfo, v as validateYoutubeLink } from '../validate-youtube-link-Bfr2jQY8.cjs';
2
+ export { getYoutubeThumbnail, getYoutubeVideoDuration } from './index.cjs';
@@ -1,2 +1,2 @@
1
- export { TYouTubeVideoInfo, extractYouTubeId, generateYoutubeURL, getYoutubeVideoInfo, validateYoutubeLink } from './index.node.js';
1
+ export { T as TYouTubeVideoInfo, e as extractYouTubeId, g as generateYoutubeURL, a as getYoutubeVideoInfo, v as validateYoutubeLink } from '../validate-youtube-link-Bfr2jQY8.js';
2
2
  export { getYoutubeThumbnail, getYoutubeVideoDuration } from './index.js';
@@ -1,4 +1,4 @@
1
- export { TYouTubeVideoInfo, extractYouTubeId, generateYoutubeURL, getYoutubeVideoInfo, validateYoutubeLink } from './index.node.mjs';
1
+ export { T as TYouTubeVideoInfo, e as extractYouTubeId, g as generateYoutubeURL, a as getYoutubeVideoInfo, v as validateYoutubeLink } from '../validate-youtube-link-Bfr2jQY8.cjs';
2
2
 
3
3
  /**
4
4
  * getYoutubeVideoDuration
@@ -1,4 +1,4 @@
1
- export { TYouTubeVideoInfo, extractYouTubeId, generateYoutubeURL, getYoutubeVideoInfo, validateYoutubeLink } from './index.node.js';
1
+ export { T as TYouTubeVideoInfo, e as extractYouTubeId, g as generateYoutubeURL, a as getYoutubeVideoInfo, v as validateYoutubeLink } from '../validate-youtube-link-Bfr2jQY8.js';
2
2
 
3
3
  /**
4
4
  * getYoutubeVideoDuration
@@ -4,7 +4,15 @@ var chunk5YOEKMTJ_cjs = require('../chunk-5YOEKMTJ.cjs');
4
4
  require('../chunk-HK727IAV.cjs');
5
5
  var chunkVAZJXZU5_cjs = require('../chunk-VAZJXZU5.cjs');
6
6
 
7
+ // src/youtube/get-video-duration-node-fallback.ts
8
+ async function getYoutubeVideoDuration(_videoUrl) {
9
+ return null;
10
+ }
7
11
 
12
+ // src/youtube/get-youtube-thumbnail-node-fallback.ts
13
+ async function getYoutubeThumbnail(_videoUrl) {
14
+ return null;
15
+ }
8
16
 
9
17
  Object.defineProperty(exports, "generateYoutubeURL", {
10
18
  enumerable: true,
@@ -22,5 +30,7 @@ Object.defineProperty(exports, "extractYouTubeId", {
22
30
  enumerable: true,
23
31
  get: function () { return chunkVAZJXZU5_cjs.extractYouTubeId; }
24
32
  });
33
+ exports.getYoutubeThumbnail = getYoutubeThumbnail;
34
+ exports.getYoutubeVideoDuration = getYoutubeVideoDuration;
25
35
  //# sourceMappingURL=index.node.cjs.map
26
36
  //# sourceMappingURL=index.node.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.node.cjs"}
1
+ {"version":3,"sources":["../../src/youtube/get-video-duration-node-fallback.ts","../../src/youtube/get-youtube-thumbnail-node-fallback.ts"],"names":[],"mappings":";;;;;;;AAAA,eAAsB,wBACpB,SAAA,EACwB;AACxB,EAAA,OAAO,IAAA;AACT;;;ACJA,eAAsB,oBACpB,SAAA,EACwB;AACxB,EAAA,OAAO,IAAA;AACT","file":"index.node.cjs","sourcesContent":["export async function getYoutubeVideoDuration(\n _videoUrl: string,\n): Promise<string | null> {\n return null\n}\n","export async function getYoutubeThumbnail(\n _videoUrl: string,\n): Promise<string | null> {\n return null\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export { T as TYouTubeVideoInfo, e as extractYouTubeId, g as generateYoutubeURL, a as getYoutubeVideoInfo, v as validateYoutubeLink } from '../validate-youtube-link-Bfr2jQY8.cjs';
2
+
3
+ declare function getYoutubeVideoDuration(_videoUrl: string): Promise<string | null>;
4
+
5
+ declare function getYoutubeThumbnail(_videoUrl: string): Promise<string | null>;
6
+
7
+ export { getYoutubeThumbnail, getYoutubeVideoDuration };
@@ -1,49 +1,7 @@
1
- declare function extractYouTubeId(urlString: string | null): string | null;
1
+ export { T as TYouTubeVideoInfo, e as extractYouTubeId, g as generateYoutubeURL, a as getYoutubeVideoInfo, v as validateYoutubeLink } from '../validate-youtube-link-Bfr2jQY8.js';
2
2
 
3
- type TCreateYoutubeLinkOptions = {
4
- videoURL: string;
5
- start?: number | string;
6
- end?: number | string;
7
- embed?: boolean;
8
- short?: boolean;
9
- useFragment?: boolean;
10
- autoplay?: boolean;
11
- controls?: 0 | 1;
12
- rel?: 0 | 1;
13
- loop?: boolean;
14
- mute?: boolean;
15
- modestbranding?: 0 | 1;
16
- origin?: string;
17
- playlist?: string;
18
- params?: Record<string, string | number | boolean>;
19
- };
20
- declare const generateYoutubeURL: (opts: TCreateYoutubeLinkOptions) => string | null;
3
+ declare function getYoutubeVideoDuration(_videoUrl: string): Promise<string | null>;
21
4
 
22
- type TYtThumbnail = {
23
- url: string;
24
- width?: number;
25
- height?: number;
26
- };
27
- type TYouTubeVideoInfo = {
28
- id: string;
29
- url: string;
30
- title: string;
31
- channelTitle: string;
32
- channelId?: string;
33
- channelUrl?: string;
34
- description?: string;
35
- shortDescription?: string;
36
- thumbnails: TYtThumbnail[];
37
- thumbnail?: string;
38
- publishedAt?: string;
39
- uploadedAt?: string;
40
- keywords?: string[];
41
- viewCount?: number;
42
- lengthSeconds?: number;
43
- isLive?: boolean;
44
- };
45
- declare function getYoutubeVideoInfo(videoUrl: string): Promise<TYouTubeVideoInfo | null>;
5
+ declare function getYoutubeThumbnail(_videoUrl: string): Promise<string | null>;
46
6
 
47
- declare function validateYoutubeLink(videoUrl: string): Promise<boolean>;
48
-
49
- export { type TYouTubeVideoInfo, extractYouTubeId, generateYoutubeURL, getYoutubeVideoInfo, validateYoutubeLink };
7
+ export { getYoutubeThumbnail, getYoutubeVideoDuration };
@@ -1,5 +1,17 @@
1
1
  export { generateYoutubeURL, getYoutubeVideoInfo, validateYoutubeLink } from '../chunk-QAE6Q2SA.js';
2
2
  import '../chunk-53JMVGIG.js';
3
3
  export { extractYouTubeId } from '../chunk-ATWN4SRX.js';
4
+
5
+ // src/youtube/get-video-duration-node-fallback.ts
6
+ async function getYoutubeVideoDuration(_videoUrl) {
7
+ return null;
8
+ }
9
+
10
+ // src/youtube/get-youtube-thumbnail-node-fallback.ts
11
+ async function getYoutubeThumbnail(_videoUrl) {
12
+ return null;
13
+ }
14
+
15
+ export { getYoutubeThumbnail, getYoutubeVideoDuration };
4
16
  //# sourceMappingURL=index.node.js.map
5
17
  //# sourceMappingURL=index.node.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.node.js"}
1
+ {"version":3,"sources":["../../src/youtube/get-video-duration-node-fallback.ts","../../src/youtube/get-youtube-thumbnail-node-fallback.ts"],"names":[],"mappings":";;;;;AAAA,eAAsB,wBACpB,SAAA,EACwB;AACxB,EAAA,OAAO,IAAA;AACT;;;ACJA,eAAsB,oBACpB,SAAA,EACwB;AACxB,EAAA,OAAO,IAAA;AACT","file":"index.node.js","sourcesContent":["export async function getYoutubeVideoDuration(\n _videoUrl: string,\n): Promise<string | null> {\n return null\n}\n","export async function getYoutubeThumbnail(\n _videoUrl: string,\n): Promise<string | null> {\n return null\n}\n"]}