@smoothcdn/loader 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/dist/astro.d.ts +5 -0
  2. package/dist/astro.d.ts.map +1 -0
  3. package/dist/astro.js +3 -0
  4. package/dist/core/config.d.ts +6 -0
  5. package/dist/core/config.d.ts.map +1 -0
  6. package/dist/core/config.js +78 -0
  7. package/dist/core/createLoader.d.ts +3 -0
  8. package/dist/core/createLoader.d.ts.map +1 -0
  9. package/dist/core/createLoader.js +24 -0
  10. package/dist/core/index.d.ts +5 -0
  11. package/dist/core/index.d.ts.map +1 -0
  12. package/dist/core/index.js +3 -0
  13. package/dist/core/loaders/fetch.d.ts +2 -0
  14. package/dist/core/loaders/fetch.d.ts.map +1 -0
  15. package/dist/core/loaders/fetch.js +10 -0
  16. package/dist/core/loaders/image.d.ts +2 -0
  17. package/dist/core/loaders/image.d.ts.map +1 -0
  18. package/dist/core/loaders/image.js +12 -0
  19. package/dist/core/loaders/script.d.ts +2 -0
  20. package/dist/core/loaders/script.d.ts.map +1 -0
  21. package/dist/core/loaders/script.js +14 -0
  22. package/dist/core/loaders/style.d.ts +2 -0
  23. package/dist/core/loaders/style.d.ts.map +1 -0
  24. package/dist/core/loaders/style.js +14 -0
  25. package/dist/core/runtime.d.ts +2 -0
  26. package/dist/core/runtime.d.ts.map +1 -0
  27. package/dist/core/runtime.js +7 -0
  28. package/dist/core/types.d.ts +72 -0
  29. package/dist/core/types.d.ts.map +1 -0
  30. package/dist/core/types.js +1 -0
  31. package/dist/core/utils.d.ts +7 -0
  32. package/dist/core/utils.d.ts.map +1 -0
  33. package/dist/core/utils.js +50 -0
  34. package/dist/framework/shared.d.ts +7 -0
  35. package/dist/framework/shared.d.ts.map +1 -0
  36. package/dist/framework/shared.js +8 -0
  37. package/dist/index.d.ts +5 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +3 -0
  40. package/dist/next/CDNImage.d.ts +8 -0
  41. package/dist/next/CDNImage.d.ts.map +1 -0
  42. package/dist/next/CDNImage.js +6 -0
  43. package/dist/next/Script.d.ts +7 -0
  44. package/dist/next/Script.d.ts.map +1 -0
  45. package/dist/next/Script.js +7 -0
  46. package/dist/next/Style.d.ts +6 -0
  47. package/dist/next/Style.d.ts.map +1 -0
  48. package/dist/next/Style.js +7 -0
  49. package/dist/next/index.d.ts +7 -0
  50. package/dist/next/index.d.ts.map +1 -0
  51. package/dist/next/index.js +6 -0
  52. package/dist/nuxt.d.ts +6 -0
  53. package/dist/nuxt.d.ts.map +1 -0
  54. package/dist/nuxt.js +4 -0
  55. package/dist/react/CDNAudio.d.ts +14 -0
  56. package/dist/react/CDNAudio.d.ts.map +1 -0
  57. package/dist/react/CDNAudio.js +5 -0
  58. package/dist/react/CDNImage.d.ts +11 -0
  59. package/dist/react/CDNImage.d.ts.map +1 -0
  60. package/dist/react/CDNImage.js +28 -0
  61. package/dist/react/CDNVideo.d.ts +12 -0
  62. package/dist/react/CDNVideo.d.ts.map +1 -0
  63. package/dist/react/CDNVideo.js +5 -0
  64. package/dist/react/index.d.ts +8 -0
  65. package/dist/react/index.d.ts.map +1 -0
  66. package/dist/react/index.js +7 -0
  67. package/dist/react/useFetch.d.ts +6 -0
  68. package/dist/react/useFetch.d.ts.map +1 -0
  69. package/dist/react/useFetch.js +14 -0
  70. package/dist/react/useImage.d.ts +6 -0
  71. package/dist/react/useImage.d.ts.map +1 -0
  72. package/dist/react/useImage.js +13 -0
  73. package/dist/react/useScript.d.ts +6 -0
  74. package/dist/react/useScript.d.ts.map +1 -0
  75. package/dist/react/useScript.js +13 -0
  76. package/dist/react/useStyle.d.ts +3 -0
  77. package/dist/react/useStyle.d.ts.map +1 -0
  78. package/dist/react/useStyle.js +7 -0
  79. package/dist/remix.d.ts +11 -0
  80. package/dist/remix.d.ts.map +1 -0
  81. package/dist/remix.js +8 -0
  82. package/dist/sveltekit.d.ts +19 -0
  83. package/dist/sveltekit.d.ts.map +1 -0
  84. package/dist/sveltekit.js +15 -0
  85. package/dist/types-generator.d.ts +20 -0
  86. package/dist/types-generator.d.ts.map +1 -0
  87. package/dist/types-generator.js +209 -0
  88. package/dist/vue/CDNImage.d.ts +39 -0
  89. package/dist/vue/CDNImage.d.ts.map +1 -0
  90. package/dist/vue/CDNImage.js +26 -0
  91. package/dist/vue/index.d.ts +7 -0
  92. package/dist/vue/index.d.ts.map +1 -0
  93. package/dist/vue/index.js +5 -0
  94. package/dist/vue/useCdnFetch.d.ts +6 -0
  95. package/dist/vue/useCdnFetch.d.ts.map +1 -0
  96. package/dist/vue/useCdnFetch.js +14 -0
  97. package/dist/vue/useCdnScript.d.ts +3 -0
  98. package/dist/vue/useCdnScript.d.ts.map +1 -0
  99. package/dist/vue/useCdnScript.js +7 -0
  100. package/dist/vue/useCdnStyle.d.ts +3 -0
  101. package/dist/vue/useCdnStyle.d.ts.map +1 -0
  102. package/dist/vue/useCdnStyle.js +7 -0
  103. package/dist/vue/useFetch.d.ts +6 -0
  104. package/dist/vue/useFetch.d.ts.map +1 -0
  105. package/dist/vue/useFetch.js +19 -0
  106. package/dist/vue/useImage.d.ts +6 -0
  107. package/dist/vue/useImage.d.ts.map +1 -0
  108. package/dist/vue/useImage.js +18 -0
  109. package/package.json +93 -0
  110. package/readme.md +356 -0
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { tryGetConfig } from "../core/config.js";
3
+ import { buildUrl } from "../core/utils.js";
4
+ const defaultSizes = "(min-width: 1280px) 556px, (min-width: 1024px) calc((100vw - 232px) / 2), (min-width: 768px) calc(100vw - 128px), calc(100vw - 32px)";
5
+ export function CDNImage({ assetPath, variantSlug, alt = '', responsive = false, variants, sizes, ...props }) {
6
+ const src = buildUrl(assetPath, variantSlug);
7
+ if (!responsive) {
8
+ return _jsx("img", { alt: alt, src: src, sizes: sizes, ...props });
9
+ }
10
+ const width = typeof props.width === "number" ? props.width : undefined;
11
+ const availableVariants = resolveImageVariants(variants).filter((variantWidth) => width ? variantWidth <= width : true);
12
+ const fallbackWidth = availableVariants[availableVariants.length - 1];
13
+ return (_jsx("img", { alt: alt, src: fallbackWidth ? getVariantSrc(src, fallbackWidth) : src, srcSet: availableVariants.map((variantWidth) => `${getVariantSrc(src, variantWidth)} ${variantWidth}w`).join(", "), sizes: sizes || defaultSizes, ...props }));
14
+ }
15
+ const resolveImageVariants = (variants) => {
16
+ if (variants && variants.length > 0) {
17
+ return variants;
18
+ }
19
+ const configVariants = Object.values(tryGetConfig()?.imageVariants || {});
20
+ return configVariants.length > 0 ? configVariants : [320, 480, 640, 768, 960, 1200];
21
+ };
22
+ const getVariantSrc = (src, width) => {
23
+ const extensionIndex = src.lastIndexOf(".");
24
+ if (extensionIndex === -1) {
25
+ return src;
26
+ }
27
+ return `${src.slice(0, extensionIndex)}_${width}${src.slice(extensionIndex)}`;
28
+ };
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import type { LoaderAssetMap, LoaderDefaultAssetMap, LoaderImagePath, LoaderVariantSlug, LoaderVideoPath } from "../core/types.js";
3
+ import type { CDNMediaSource } from "./CDNAudio.js";
4
+ export type CDNVideoProps<TAssets extends Partial<LoaderAssetMap> | undefined = LoaderDefaultAssetMap> = {
5
+ assetPath: LoaderVideoPath<TAssets>;
6
+ variantSlug?: LoaderVariantSlug<TAssets>;
7
+ posterAssetPath?: LoaderImagePath<TAssets>;
8
+ posterVariantSlug?: LoaderVariantSlug<TAssets>;
9
+ sources?: Array<CDNMediaSource<LoaderVideoPath<TAssets>, LoaderVariantSlug<TAssets>>>;
10
+ } & Omit<React.VideoHTMLAttributes<HTMLVideoElement>, "src" | "poster">;
11
+ export declare function CDNVideo<TAssets extends Partial<LoaderAssetMap> | undefined = LoaderDefaultAssetMap>({ assetPath, variantSlug, posterAssetPath, posterVariantSlug, sources, children, ...props }: CDNVideoProps<TAssets>): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=CDNVideo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CDNVideo.d.ts","sourceRoot":"","sources":["../../src/react/CDNVideo.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAC,cAAc,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjI,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AAElD,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,qBAAqB,IAAI;IACrG,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzC,eAAe,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC3C,iBAAiB,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CACzF,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC;AAExE,wBAAgB,QAAQ,CAAC,OAAO,SAAS,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,qBAAqB,EAChG,EACI,SAAS,EACT,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,QAAQ,EACR,GAAG,KAAK,EACX,EAAE,aAAa,CAAC,OAAO,CAAC,2CAiB5B"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { buildUrl } from "../core/utils.js";
3
+ export function CDNVideo({ assetPath, variantSlug, posterAssetPath, posterVariantSlug, sources, children, ...props }) {
4
+ return (_jsxs("video", { src: sources?.length ? undefined : buildUrl(assetPath, variantSlug), poster: posterAssetPath ? buildUrl(posterAssetPath, posterVariantSlug) : undefined, ...props, children: [sources?.map((source) => (_jsx("source", { src: buildUrl(source.assetPath, source.variantSlug), type: source.type }, `${source.assetPath}:${source.variantSlug || ""}:${source.type || ""}`))), children] }));
5
+ }
@@ -0,0 +1,8 @@
1
+ export { useScript } from "./useScript.js";
2
+ export { useStyle } from "./useStyle.js";
3
+ export { useImage } from "./useImage.js";
4
+ export { useFetch } from "./useFetch.js";
5
+ export { CDNImage } from "./CDNImage.js";
6
+ export { CDNAudio } from "./CDNAudio.js";
7
+ export { CDNVideo } from "./CDNVideo.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { useScript } from "./useScript.js";
2
+ export { useStyle } from "./useStyle.js";
3
+ export { useImage } from "./useImage.js";
4
+ export { useFetch } from "./useFetch.js";
5
+ export { CDNImage } from "./CDNImage.js";
6
+ export { CDNAudio } from "./CDNAudio.js";
7
+ export { CDNVideo } from "./CDNVideo.js";
@@ -0,0 +1,6 @@
1
+ import type { LoaderAssetMap, LoaderDefaultAssetMap, LoaderEndpointPath, LoaderVariantSlug } from "../core/types.js";
2
+ export declare function useFetch<T = unknown, TAssets extends Partial<LoaderAssetMap> | undefined = LoaderDefaultAssetMap>(assetPath: LoaderEndpointPath<TAssets>, variantSlug?: LoaderVariantSlug<TAssets>, init?: RequestInit): {
3
+ data: T | null;
4
+ error: Error | null;
5
+ };
6
+ //# sourceMappingURL=useFetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFetch.d.ts","sourceRoot":"","sources":["../../src/react/useFetch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,cAAc,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAEnH,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,SAAS,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,qBAAqB,EAC7G,SAAS,EAAE,kBAAkB,CAAC,OAAO,CAAC,EACtC,WAAW,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,EACxC,IAAI,CAAC,EAAE,WAAW;;;EAcrB"}
@@ -0,0 +1,14 @@
1
+ import { useEffect, useState } from "react";
2
+ import { createLoader } from "../core/createLoader.js";
3
+ export function useFetch(assetPath, variantSlug, init) {
4
+ const [data, setData] = useState(null);
5
+ const [error, setError] = useState(null);
6
+ useEffect(() => {
7
+ createLoader()
8
+ .fetch(assetPath, variantSlug, init)
9
+ .then(res => res.json())
10
+ .then(setData)
11
+ .catch(setError);
12
+ }, [assetPath, variantSlug, init]);
13
+ return { data, error };
14
+ }
@@ -0,0 +1,6 @@
1
+ import type { LoaderAssetMap, LoaderDefaultAssetMap, LoaderImagePath, LoaderVariantSlug } from "../core/types.js";
2
+ export declare function useImage<TAssets extends Partial<LoaderAssetMap> | undefined = LoaderDefaultAssetMap>(assetPath: LoaderImagePath<TAssets>, variantSlug?: LoaderVariantSlug<TAssets>): {
3
+ image: HTMLImageElement | null;
4
+ error: Error | null;
5
+ };
6
+ //# sourceMappingURL=useImage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useImage.d.ts","sourceRoot":"","sources":["../../src/react/useImage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,cAAc,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAEhH,wBAAgB,QAAQ,CAAC,OAAO,SAAS,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,qBAAqB,EAChG,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,EACnC,WAAW,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC;;;EAa3C"}
@@ -0,0 +1,13 @@
1
+ import { useEffect, useState } from "react";
2
+ import { createLoader } from "../core/createLoader.js";
3
+ export function useImage(assetPath, variantSlug) {
4
+ const [image, setImage] = useState(null);
5
+ const [error, setError] = useState(null);
6
+ useEffect(() => {
7
+ createLoader()
8
+ .image(assetPath, variantSlug)
9
+ .then(setImage)
10
+ .catch(setError);
11
+ }, [assetPath, variantSlug]);
12
+ return { image, error };
13
+ }
@@ -0,0 +1,6 @@
1
+ import type { LoaderAssetMap, LoaderDefaultAssetMap, LoaderScriptPath, LoaderVariantSlug } from "../core/types.js";
2
+ export declare function useScript<TAssets extends Partial<LoaderAssetMap> | undefined = LoaderDefaultAssetMap>(assetPath: LoaderScriptPath<TAssets>, variantSlug?: LoaderVariantSlug<TAssets>): {
3
+ loaded: boolean;
4
+ error: Error | null;
5
+ };
6
+ //# sourceMappingURL=useScript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScript.d.ts","sourceRoot":"","sources":["../../src/react/useScript.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,cAAc,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAEjH,wBAAgB,SAAS,CAAC,OAAO,SAAS,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,qBAAqB,EACjG,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,EACpC,WAAW,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC;;;EAc3C"}
@@ -0,0 +1,13 @@
1
+ import { useEffect, useState } from "react";
2
+ import { createLoader } from "../core/createLoader.js";
3
+ export function useScript(assetPath, variantSlug) {
4
+ const [loaded, setLoaded] = useState(false);
5
+ const [error, setError] = useState(null);
6
+ useEffect(() => {
7
+ const loader = createLoader();
8
+ loader.script(assetPath, variantSlug)
9
+ .then(() => setLoaded(true))
10
+ .catch(setError);
11
+ }, [assetPath, variantSlug]);
12
+ return { loaded, error };
13
+ }
@@ -0,0 +1,3 @@
1
+ import type { LoaderAssetMap, LoaderDefaultAssetMap, LoaderStylePath, LoaderVariantSlug } from "../core/types.js";
2
+ export declare function useStyle<TAssets extends Partial<LoaderAssetMap> | undefined = LoaderDefaultAssetMap>(assetPath: LoaderStylePath<TAssets>, variantSlug?: LoaderVariantSlug<TAssets>): void;
3
+ //# sourceMappingURL=useStyle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStyle.d.ts","sourceRoot":"","sources":["../../src/react/useStyle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,cAAc,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAEhH,wBAAgB,QAAQ,CAAC,OAAO,SAAS,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,qBAAqB,EAChG,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,EACnC,WAAW,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,QAK3C"}
@@ -0,0 +1,7 @@
1
+ import { useEffect } from "react";
2
+ import { createLoader } from "../core/createLoader.js";
3
+ export function useStyle(assetPath, variantSlug) {
4
+ useEffect(() => {
5
+ createLoader().style(assetPath, variantSlug);
6
+ }, [assetPath, variantSlug]);
7
+ }
@@ -0,0 +1,11 @@
1
+ import type { LoaderAssetMap, LoaderDefaultAssetMap, LoaderStylePath, LoaderVariantSlug } from "./core/types.js";
2
+ export interface RemixLinksDescriptor {
3
+ rel: "stylesheet";
4
+ href: string;
5
+ }
6
+ export declare const createSmoothLoader: <TAssets extends Partial<LoaderAssetMap> | undefined = undefined>() => import("./framework/shared.js").FrameworkLoader<TAssets>;
7
+ export declare const createStyleLink: <TAssets extends Partial<LoaderAssetMap> | undefined = LoaderDefaultAssetMap>(assetPath: LoaderStylePath<TAssets>, variantSlug?: LoaderVariantSlug<TAssets>) => RemixLinksDescriptor;
8
+ export { createLoader } from "./core/createLoader.js";
9
+ export { buildUrl } from "./core/utils.js";
10
+ export type * from "./core/types.js";
11
+ //# sourceMappingURL=remix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remix.d.ts","sourceRoot":"","sources":["../src/remix.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,cAAc,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAE/G,MAAM,WAAW,oBAAoB;IACjC,GAAG,EAAE,YAAY,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,kBAAkB,iIAAwB,CAAC;AAExD,eAAO,MAAM,eAAe,GACxB,OAAO,SAAS,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,qBAAqB,EAE3E,WAAW,eAAe,CAAC,OAAO,CAAC,EACnC,cAAc,iBAAiB,CAAC,OAAO,CAAC,KACzC,oBAGD,CAAC;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AACzC,mBAAmB,iBAAiB,CAAC"}
package/dist/remix.js ADDED
@@ -0,0 +1,8 @@
1
+ import { createFrameworkLoader } from "./framework/shared.js";
2
+ export const createSmoothLoader = createFrameworkLoader;
3
+ export const createStyleLink = (assetPath, variantSlug) => ({
4
+ rel: "stylesheet",
5
+ href: createFrameworkLoader().url(assetPath, variantSlug)
6
+ });
7
+ export { createLoader } from "./core/createLoader.js";
8
+ export { buildUrl } from "./core/utils.js";
@@ -0,0 +1,19 @@
1
+ import type { LoaderAssetMap, LoaderDefaultAssetMap, LoaderAssetPath, LoaderVariantSlug } from "./core/types.js";
2
+ export interface SvelteKitLoadEventLike {
3
+ depends?: (...deps: string[]) => void;
4
+ setHeaders?: (headers: Record<string, string>) => void;
5
+ }
6
+ export interface SvelteKitAssetOptions<TAssets extends Partial<LoaderAssetMap> | undefined = LoaderDefaultAssetMap> {
7
+ assetPath: LoaderAssetPath<TAssets>;
8
+ variantSlug?: LoaderVariantSlug<TAssets>;
9
+ depends?: string[];
10
+ cacheControl?: string;
11
+ }
12
+ export declare const createSmoothLoader: <TAssets extends Partial<LoaderAssetMap> | undefined = undefined>() => import("./framework/shared.js").FrameworkLoader<TAssets>;
13
+ export declare const createAssetLoad: <TAssets extends Partial<LoaderAssetMap> | undefined = LoaderDefaultAssetMap>(options: SvelteKitAssetOptions<TAssets>) => (event: SvelteKitLoadEventLike) => {
14
+ url: string;
15
+ };
16
+ export { createLoader } from "./core/createLoader.js";
17
+ export { buildUrl } from "./core/utils.js";
18
+ export type * from "./core/types.js";
19
+ //# sourceMappingURL=sveltekit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sveltekit.d.ts","sourceRoot":"","sources":["../src/sveltekit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,cAAc,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAE/G,MAAM,WAAW,sBAAsB;IACnC,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;CAC1D;AAED,MAAM,WAAW,qBAAqB,CAAC,OAAO,SAAS,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,qBAAqB;IAC9G,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,kBAAkB,iIAAwB,CAAC;AAExD,eAAO,MAAM,eAAe,GACxB,OAAO,SAAS,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,qBAAqB,EAE3E,SAAS,qBAAqB,CAAC,OAAO,CAAC,MACrC,OAAO,sBAAsB;;CAYlC,CAAC;AAEF,OAAO,EAAC,YAAY,EAAC,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AACzC,mBAAmB,iBAAiB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { createFrameworkLoader } from "./framework/shared.js";
2
+ export const createSmoothLoader = createFrameworkLoader;
3
+ export const createAssetLoad = (options) => (event) => {
4
+ if (options.depends?.length && event.depends) {
5
+ event.depends(...options.depends);
6
+ }
7
+ if (options.cacheControl && event.setHeaders) {
8
+ event.setHeaders({ "cache-control": options.cacheControl });
9
+ }
10
+ return {
11
+ url: createFrameworkLoader().url(options.assetPath, options.variantSlug)
12
+ };
13
+ };
14
+ export { createLoader } from "./core/createLoader.js";
15
+ export { buildUrl } from "./core/utils.js";
@@ -0,0 +1,20 @@
1
+ export interface GenerateTypesOptions {
2
+ cwd?: string;
3
+ configPath?: string;
4
+ outFile?: string;
5
+ typeName?: string;
6
+ }
7
+ export interface GeneratedTypesResult {
8
+ configPath: string;
9
+ outFile: string;
10
+ assets: string[];
11
+ images: string[];
12
+ audio: string[];
13
+ video: string[];
14
+ scripts: string[];
15
+ styles: string[];
16
+ endpoints: string[];
17
+ variants: string[];
18
+ }
19
+ export declare const generateTypes: (options?: GenerateTypesOptions) => GeneratedTypesResult;
20
+ //# sourceMappingURL=types-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-generator.d.ts","sourceRoot":"","sources":["../src/types-generator.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,oBAAoB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AASD,eAAO,MAAM,aAAa,GAAI,UAAS,oBAAyB,KAAG,oBA8BlE,CAAC"}
@@ -0,0 +1,209 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { normalizeConfig } from "./core/config.js";
4
+ import { applyReplacePath, normalizePath } from "./core/utils.js";
5
+ const IMAGE_EXTENSIONS = new Set([".avif", ".gif", ".jpg", ".jpeg", ".png", ".svg", ".webp"]);
6
+ const AUDIO_EXTENSIONS = new Set([".aac", ".flac", ".m4a", ".mp3", ".ogg", ".opus", ".wav", ".weba"]);
7
+ const VIDEO_EXTENSIONS = new Set([".avi", ".m4v", ".mov", ".mp4", ".mpeg", ".ogv", ".webm"]);
8
+ const SCRIPT_EXTENSIONS = new Set([".js", ".mjs", ".cjs"]);
9
+ const STYLE_EXTENSIONS = new Set([".css"]);
10
+ const ENDPOINT_EXTENSIONS = new Set([".json", ".xml"]);
11
+ export const generateTypes = (options = {}) => {
12
+ const cwd = options.cwd || process.cwd();
13
+ const configPath = options.configPath || path.join(cwd, ".scdn.json");
14
+ const outFile = path.resolve(cwd, options.outFile || "smoothcdn-loader.ts");
15
+ const typeName = options.typeName || "SmoothCDNAssets";
16
+ const config = normalizeConfig(readConfig(configPath));
17
+ const discoveredAssets = discoverAssets(cwd, config);
18
+ const variants = discoverVariants(config);
19
+ const content = renderTypes({
20
+ configImportPath: toImportPath(path.relative(path.dirname(outFile), configPath)),
21
+ typeName,
22
+ assets: discoveredAssets.assets,
23
+ images: discoveredAssets.images,
24
+ audio: discoveredAssets.audio,
25
+ video: discoveredAssets.video,
26
+ scripts: discoveredAssets.scripts,
27
+ styles: discoveredAssets.styles,
28
+ endpoints: discoveredAssets.endpoints,
29
+ variants
30
+ });
31
+ fs.mkdirSync(path.dirname(outFile), { recursive: true });
32
+ fs.writeFileSync(outFile, content);
33
+ return {
34
+ configPath,
35
+ outFile,
36
+ ...discoveredAssets,
37
+ variants
38
+ };
39
+ };
40
+ const readConfig = (configPath) => {
41
+ return JSON.parse(fs.readFileSync(configPath, "utf8"));
42
+ };
43
+ const discoverAssets = (cwd, config) => {
44
+ const sourcePatterns = config.sources || config.variants?.flatMap((variant) => variant.sources || []) || [];
45
+ const excludePatterns = [
46
+ ...(config.excludes || []),
47
+ ...(config.protected || []),
48
+ ...(config.variants?.flatMap((variant) => variant.excludes || []) || [])
49
+ ];
50
+ const assets = new Set();
51
+ const images = new Set();
52
+ const audio = new Set();
53
+ const video = new Set();
54
+ const scripts = new Set();
55
+ const styles = new Set();
56
+ const endpoints = new Set();
57
+ for (const pattern of sourcePatterns) {
58
+ for (const filePath of collectFilesForPattern(cwd, pattern)) {
59
+ const relativePath = normalizePath(path.relative(cwd, filePath));
60
+ if (excludePatterns.some((excludePattern) => matchesPattern(relativePath, excludePattern))) {
61
+ continue;
62
+ }
63
+ const publicPath = `/${normalizePath(applyReplacePath(relativePath, config.replacePath))}`;
64
+ const extension = path.extname(filePath).toLowerCase();
65
+ assets.add(publicPath);
66
+ if (IMAGE_EXTENSIONS.has(extension))
67
+ images.add(publicPath);
68
+ if (AUDIO_EXTENSIONS.has(extension))
69
+ audio.add(publicPath);
70
+ if (VIDEO_EXTENSIONS.has(extension))
71
+ video.add(publicPath);
72
+ if (SCRIPT_EXTENSIONS.has(extension))
73
+ scripts.add(publicPath);
74
+ if (STYLE_EXTENSIONS.has(extension))
75
+ styles.add(publicPath);
76
+ if (ENDPOINT_EXTENSIONS.has(extension))
77
+ endpoints.add(publicPath);
78
+ }
79
+ }
80
+ return {
81
+ assets: sortSet(assets),
82
+ images: sortSet(images),
83
+ audio: sortSet(audio),
84
+ video: sortSet(video),
85
+ scripts: sortSet(scripts),
86
+ styles: sortSet(styles),
87
+ endpoints: sortSet(endpoints)
88
+ };
89
+ };
90
+ const discoverVariants = (config) => {
91
+ const variants = new Set();
92
+ for (const variant of config.variants || []) {
93
+ const slug = variant.variantSlug || variant.slug || variant.name;
94
+ if (slug) {
95
+ variants.add(slug);
96
+ }
97
+ }
98
+ for (const variant of Object.keys(config.imageVariants || {})) {
99
+ variants.add(variant);
100
+ }
101
+ return sortSet(variants);
102
+ };
103
+ const collectFilesForPattern = (cwd, pattern) => {
104
+ const normalizedPattern = normalizePath(pattern.replace(/^\.\//, ""));
105
+ const globIndex = findGlobIndex(normalizedPattern);
106
+ const basePath = path.resolve(cwd, globIndex === -1 ? normalizedPattern : normalizedPattern.slice(0, globIndex));
107
+ if (!fs.existsSync(basePath)) {
108
+ return [];
109
+ }
110
+ if (fs.statSync(basePath).isFile()) {
111
+ return [basePath];
112
+ }
113
+ const recursive = normalizedPattern.includes("**");
114
+ return walkFiles(basePath, recursive);
115
+ };
116
+ const walkFiles = (directory, recursive) => {
117
+ const files = [];
118
+ for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
119
+ const entryPath = path.join(directory, entry.name);
120
+ if (entry.isDirectory()) {
121
+ if (recursive) {
122
+ files.push(...walkFiles(entryPath, recursive));
123
+ }
124
+ continue;
125
+ }
126
+ if (entry.isFile()) {
127
+ files.push(entryPath);
128
+ }
129
+ }
130
+ return files;
131
+ };
132
+ const findGlobIndex = (pattern) => {
133
+ const indexes = ["*", "?", "["]
134
+ .map((token) => pattern.indexOf(token))
135
+ .filter((index) => index >= 0);
136
+ if (indexes.length === 0) {
137
+ return -1;
138
+ }
139
+ const firstGlob = Math.min(...indexes);
140
+ const slashBeforeGlob = pattern.lastIndexOf("/", firstGlob);
141
+ return slashBeforeGlob === -1 ? 0 : slashBeforeGlob + 1;
142
+ };
143
+ const matchesPattern = (relativePath, pattern) => {
144
+ const normalizedPattern = normalizePath(pattern.replace(/^\.\//, ""));
145
+ if (normalizedPattern.endsWith("/**/*")) {
146
+ return relativePath.startsWith(normalizedPattern.slice(0, -"**/*".length));
147
+ }
148
+ if (normalizedPattern.endsWith("/*")) {
149
+ const base = normalizedPattern.slice(0, -1);
150
+ return relativePath.startsWith(base) && !relativePath.slice(base.length).includes("/");
151
+ }
152
+ if (normalizedPattern.includes("*")) {
153
+ const regexp = new RegExp(`^${escapeRegExp(normalizedPattern).replace(/\\\*\\\*/g, ".*").replace(/\\\*/g, "[^/]*")}$`);
154
+ return regexp.test(relativePath);
155
+ }
156
+ return relativePath === normalizedPattern;
157
+ };
158
+ const renderTypes = (input) => {
159
+ return `import { initConfig } from "@smoothcdn/loader";
160
+ import scdnConfig from "${input.configImportPath}";
161
+ import type { LoaderAssetMap } from "@smoothcdn/loader";
162
+
163
+ export function configureSmoothCDN() {
164
+ initConfig(scdnConfig);
165
+ }
166
+
167
+ configureSmoothCDN();
168
+
169
+ export { buildUrl, createLoader } from "@smoothcdn/loader";
170
+
171
+ export type SmoothCDNAsset = ${renderUnion(input.assets)};
172
+ export type SmoothCDNImage = ${renderUnion(input.images)};
173
+ export type SmoothCDNAudio = ${renderUnion(input.audio)};
174
+ export type SmoothCDNVideo = ${renderUnion(input.video)};
175
+ export type SmoothCDNScript = ${renderUnion(input.scripts)};
176
+ export type SmoothCDNStyle = ${renderUnion(input.styles)};
177
+ export type SmoothCDNEndpoint = ${renderUnion(input.endpoints)};
178
+ export type SmoothCDNVariant = ${renderUnion(input.variants)};
179
+
180
+ export interface ${input.typeName} extends LoaderAssetMap {
181
+ assets: SmoothCDNAsset;
182
+ images: SmoothCDNImage;
183
+ audio: SmoothCDNAudio;
184
+ video: SmoothCDNVideo;
185
+ scripts: SmoothCDNScript;
186
+ styles: SmoothCDNStyle;
187
+ endpoints: SmoothCDNEndpoint;
188
+ variants: SmoothCDNVariant;
189
+ }
190
+
191
+ declare global {
192
+ namespace SmoothCDN {
193
+ interface Assets extends ${input.typeName} {}
194
+ }
195
+ }
196
+ `;
197
+ };
198
+ const renderUnion = (values) => {
199
+ if (values.length === 0) {
200
+ return "never";
201
+ }
202
+ return values.map((value) => JSON.stringify(value)).join(" | ");
203
+ };
204
+ const sortSet = (values) => [...values].sort((a, b) => a.localeCompare(b));
205
+ const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
206
+ const toImportPath = (relativePath) => {
207
+ const normalized = normalizePath(relativePath).replace(/\.json$/, ".json");
208
+ return normalized.startsWith("./") || normalized.startsWith("../") ? normalized : `./${normalized}`;
209
+ };
@@ -0,0 +1,39 @@
1
+ import { type ImgHTMLAttributes, type PropType } from "vue";
2
+ import type { LoaderAssetMap, LoaderDefaultAssetMap, LoaderImagePath, LoaderVariantSlug } from "../core/types.js";
3
+ export type CDNImageProps<TAssets extends Partial<LoaderAssetMap> | undefined = LoaderDefaultAssetMap> = {
4
+ assetPath: LoaderImagePath<TAssets>;
5
+ variantSlug?: LoaderVariantSlug<TAssets>;
6
+ alt?: string;
7
+ } & Omit<ImgHTMLAttributes, "src">;
8
+ export declare const CDNImage: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
9
+ assetPath: {
10
+ type: PropType<string>;
11
+ required: true;
12
+ };
13
+ variantSlug: {
14
+ type: PropType<string | undefined>;
15
+ required: false;
16
+ };
17
+ alt: {
18
+ type: StringConstructor;
19
+ default: string;
20
+ };
21
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
22
+ [key: string]: any;
23
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
24
+ assetPath: {
25
+ type: PropType<string>;
26
+ required: true;
27
+ };
28
+ variantSlug: {
29
+ type: PropType<string | undefined>;
30
+ required: false;
31
+ };
32
+ alt: {
33
+ type: StringConstructor;
34
+ default: string;
35
+ };
36
+ }>> & Readonly<{}>, {
37
+ alt: string;
38
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
39
+ //# sourceMappingURL=CDNImage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CDNImage.d.ts","sourceRoot":"","sources":["../../src/vue/CDNImage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,KAAK,QAAQ,EAAC,MAAM,KAAK,CAAC;AAE9E,OAAO,KAAK,EAAC,cAAc,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAEhH,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,qBAAqB,IAAI;IACrG,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;AAEnC,eAAO,MAAM,QAAQ;;cAIO,QAAQ,CAAC,MAAM,CAAC;;;;cAIhB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;;;;;;;;;cAJ5B,QAAQ,CAAC,MAAM,CAAC;;;;cAIhB,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;;;;;;;;;4EAetD,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { defineComponent, h } from "vue";
2
+ import { buildUrl } from "../core/utils.js";
3
+ export const CDNImage = defineComponent({
4
+ name: "SmoothCDNImage",
5
+ props: {
6
+ assetPath: {
7
+ type: String,
8
+ required: true
9
+ },
10
+ variantSlug: {
11
+ type: String,
12
+ required: false
13
+ },
14
+ alt: {
15
+ type: String,
16
+ default: ""
17
+ }
18
+ },
19
+ setup(props, { attrs }) {
20
+ return () => h("img", {
21
+ ...attrs,
22
+ alt: props.alt,
23
+ src: buildUrl(props.assetPath, props.variantSlug)
24
+ });
25
+ }
26
+ });
@@ -0,0 +1,7 @@
1
+ export { CDNImage } from "./CDNImage.js";
2
+ export { useFetch } from "./useFetch.js";
3
+ export { useImage } from "./useImage.js";
4
+ export { createLoader } from "../core/createLoader.js";
5
+ export { buildUrl } from "../core/utils.js";
6
+ export type * from "../core/types.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAC1C,mBAAmB,kBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { CDNImage } from "./CDNImage.js";
2
+ export { useFetch } from "./useFetch.js";
3
+ export { useImage } from "./useImage.js";
4
+ export { createLoader } from "../core/createLoader.js";
5
+ export { buildUrl } from "../core/utils.js";
@@ -0,0 +1,6 @@
1
+ import { LoaderConfig } from "../core/types";
2
+ export declare function useCdnFetch<T = unknown>(config: LoaderConfig, path: string, init?: RequestInit): {
3
+ data: [T | null] extends [import("vue").Ref<any, any>] ? import("@vue/shared").IfAny<import("vue").Ref<any, any> & T, import("vue").Ref<import("vue").Ref<any, any> & T, import("vue").Ref<any, any> & T>, import("vue").Ref<any, any> & T> : import("vue").Ref<import("vue").UnwrapRef<T> | null, T | import("vue").UnwrapRef<T> | null>;
4
+ error: import("vue").Ref<Error | null, Error | null>;
5
+ };
6
+ //# sourceMappingURL=useCdnFetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCdnFetch.d.ts","sourceRoot":"","sources":["../../src/vue/useCdnFetch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,wBAAgB,WAAW,CAAC,CAAC,GAAG,OAAO,EACnC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,WAAW;;;EAcrB"}
@@ -0,0 +1,14 @@
1
+ import { ref, onMounted } from "vue";
2
+ import { createLoader } from "../core/createLoader";
3
+ export function useCdnFetch(config, path, init) {
4
+ const data = ref(null);
5
+ const error = ref(null);
6
+ onMounted(() => {
7
+ createLoader(config)
8
+ .fetch(path, init)
9
+ .then(r => r.json())
10
+ .then(v => (data.value = v))
11
+ .catch(e => (error.value = e));
12
+ });
13
+ return { data, error };
14
+ }
@@ -0,0 +1,3 @@
1
+ import { LoaderConfig } from "../core/types";
2
+ export declare function useCdnScript(config: LoaderConfig, path: string): void;
3
+ //# sourceMappingURL=useCdnScript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCdnScript.d.ts","sourceRoot":"","sources":["../../src/vue/useCdnScript.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,wBAAgB,YAAY,CACxB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,QAKf"}
@@ -0,0 +1,7 @@
1
+ import { onMounted } from "vue";
2
+ import { createLoader } from "../core/createLoader";
3
+ export function useCdnScript(config, path) {
4
+ onMounted(() => {
5
+ createLoader(config).script(path);
6
+ });
7
+ }
@@ -0,0 +1,3 @@
1
+ import { LoaderConfig } from "../core/types";
2
+ export declare function useCdnStyle(config: LoaderConfig, path: string): void;
3
+ //# sourceMappingURL=useCdnStyle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCdnStyle.d.ts","sourceRoot":"","sources":["../../src/vue/useCdnStyle.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,wBAAgB,WAAW,CACvB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,QAKf"}
@@ -0,0 +1,7 @@
1
+ import { onMounted } from "vue";
2
+ import { createLoader } from "../core/createLoader";
3
+ export function useCdnStyle(config, path) {
4
+ onMounted(() => {
5
+ createLoader(config).style(path);
6
+ });
7
+ }