subaya 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.
- package/README.md +156 -0
- package/dist/commands/api/OrpcGeneratorCommand.d.ts +16 -0
- package/dist/commands/api/OrpcGeneratorCommand.d.ts.map +1 -0
- package/dist/commands/api/OrpcGeneratorCommand.js +100 -0
- package/dist/commands/api/OrpcGeneratorCommand.js.map +1 -0
- package/dist/commands/api/generators/ApiMethodGenerator.d.ts +22 -0
- package/dist/commands/api/generators/ApiMethodGenerator.d.ts.map +1 -0
- package/dist/commands/api/generators/ApiMethodGenerator.js +73 -0
- package/dist/commands/api/generators/ApiMethodGenerator.js.map +1 -0
- package/dist/commands/api/generators/QueryStringGenerator.d.ts +7 -0
- package/dist/commands/api/generators/QueryStringGenerator.d.ts.map +1 -0
- package/dist/commands/api/generators/QueryStringGenerator.js +34 -0
- package/dist/commands/api/generators/QueryStringGenerator.js.map +1 -0
- package/dist/commands/api/generators/SchemaGenerator.d.ts +5 -0
- package/dist/commands/api/generators/SchemaGenerator.d.ts.map +1 -0
- package/dist/commands/api/generators/SchemaGenerator.js +61 -0
- package/dist/commands/api/generators/SchemaGenerator.js.map +1 -0
- package/dist/commands/api/services/ApiFileWriter.d.ts +9 -0
- package/dist/commands/api/services/ApiFileWriter.d.ts.map +1 -0
- package/dist/commands/api/services/ApiFileWriter.js +112 -0
- package/dist/commands/api/services/ApiFileWriter.js.map +1 -0
- package/dist/commands/api/services/DependencyChecker.d.ts +6 -0
- package/dist/commands/api/services/DependencyChecker.d.ts.map +1 -0
- package/dist/commands/api/services/DependencyChecker.js +63 -0
- package/dist/commands/api/services/DependencyChecker.js.map +1 -0
- package/dist/commands/api/utils/CommentGenerator.d.ts +6 -0
- package/dist/commands/api/utils/CommentGenerator.d.ts.map +1 -0
- package/dist/commands/api/utils/CommentGenerator.js +52 -0
- package/dist/commands/api/utils/CommentGenerator.js.map +1 -0
- package/dist/commands/api/utils/ParameterExtractor.d.ts +10 -0
- package/dist/commands/api/utils/ParameterExtractor.d.ts.map +1 -0
- package/dist/commands/api/utils/ParameterExtractor.js +29 -0
- package/dist/commands/api/utils/ParameterExtractor.js.map +1 -0
- package/dist/commands/api/utils/ResponseTypeExtractor.d.ts +9 -0
- package/dist/commands/api/utils/ResponseTypeExtractor.d.ts.map +1 -0
- package/dist/commands/api/utils/ResponseTypeExtractor.js +36 -0
- package/dist/commands/api/utils/ResponseTypeExtractor.js.map +1 -0
- package/dist/commands/api/utils/TypeResolver.d.ts +6 -0
- package/dist/commands/api/utils/TypeResolver.d.ts.map +1 -0
- package/dist/commands/api/utils/TypeResolver.js +38 -0
- package/dist/commands/api/utils/TypeResolver.js.map +1 -0
- package/dist/commands/axios/AxiosGeneratorCommand.d.ts +5 -0
- package/dist/commands/axios/AxiosGeneratorCommand.d.ts.map +1 -0
- package/dist/commands/axios/AxiosGeneratorCommand.js +56 -0
- package/dist/commands/axios/AxiosGeneratorCommand.js.map +1 -0
- package/dist/commands/env/EnvGeneratorCommand.d.ts +8 -0
- package/dist/commands/env/EnvGeneratorCommand.d.ts.map +1 -0
- package/dist/commands/env/EnvGeneratorCommand.js +62 -0
- package/dist/commands/env/EnvGeneratorCommand.js.map +1 -0
- package/dist/commands/icon/IconGenerateCommand.d.ts +6 -0
- package/dist/commands/icon/IconGenerateCommand.d.ts.map +1 -0
- package/dist/commands/icon/IconGenerateCommand.js +103 -0
- package/dist/commands/icon/IconGenerateCommand.js.map +1 -0
- package/dist/commands/image/BackgroundRemoveCommand.d.ts +7 -0
- package/dist/commands/image/BackgroundRemoveCommand.d.ts.map +1 -0
- package/dist/commands/image/BackgroundRemoveCommand.js +89 -0
- package/dist/commands/image/BackgroundRemoveCommand.js.map +1 -0
- package/dist/commands/image/ImageOptimizeCommand.d.ts +8 -0
- package/dist/commands/image/ImageOptimizeCommand.d.ts.map +1 -0
- package/dist/commands/image/ImageOptimizeCommand.js +161 -0
- package/dist/commands/image/ImageOptimizeCommand.js.map +1 -0
- package/dist/commands/image/ImageResizeCommand.d.ts +5 -0
- package/dist/commands/image/ImageResizeCommand.d.ts.map +1 -0
- package/dist/commands/image/ImageResizeCommand.js +64 -0
- package/dist/commands/image/ImageResizeCommand.js.map +1 -0
- package/dist/commands/index.d.ts +4 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +4 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/localstorage/LocalstorageGeneratorCommand.d.ts +5 -0
- package/dist/commands/localstorage/LocalstorageGeneratorCommand.d.ts.map +1 -0
- package/dist/commands/localstorage/LocalstorageGeneratorCommand.js +45 -0
- package/dist/commands/localstorage/LocalstorageGeneratorCommand.js.map +1 -0
- package/dist/commands/provider/ProviderGeneratorCommand.d.ts +5 -0
- package/dist/commands/provider/ProviderGeneratorCommand.d.ts.map +1 -0
- package/dist/commands/provider/ProviderGeneratorCommand.js +54 -0
- package/dist/commands/provider/ProviderGeneratorCommand.js.map +1 -0
- package/dist/commands/route/NextRouteGeneratorCommand.d.ts +12 -0
- package/dist/commands/route/NextRouteGeneratorCommand.d.ts.map +1 -0
- package/dist/commands/route/NextRouteGeneratorCommand.js +126 -0
- package/dist/commands/route/NextRouteGeneratorCommand.js.map +1 -0
- package/dist/commands/share/ShareGeneratorCommand.d.ts +5 -0
- package/dist/commands/share/ShareGeneratorCommand.d.ts.map +1 -0
- package/dist/commands/share/ShareGeneratorCommand.js +44 -0
- package/dist/commands/share/ShareGeneratorCommand.js.map +1 -0
- package/dist/commands/state/StateGeneratorCommand.d.ts +10 -0
- package/dist/commands/state/StateGeneratorCommand.d.ts.map +1 -0
- package/dist/commands/state/StateGeneratorCommand.js +99 -0
- package/dist/commands/state/StateGeneratorCommand.js.map +1 -0
- package/dist/commands/supabase/SupabaseCommand.d.ts +7 -0
- package/dist/commands/supabase/SupabaseCommand.d.ts.map +1 -0
- package/dist/commands/supabase/SupabaseCommand.js +140 -0
- package/dist/commands/supabase/SupabaseCommand.js.map +1 -0
- package/dist/config/defaultConfig.d.ts +4 -0
- package/dist/config/defaultConfig.d.ts.map +1 -0
- package/dist/config/defaultConfig.js +15 -0
- package/dist/config/defaultConfig.js.map +1 -0
- package/dist/config/initial.d.ts +5 -0
- package/dist/config/initial.d.ts.map +1 -0
- package/dist/config/initial.js +32 -0
- package/dist/config/initial.js.map +1 -0
- package/dist/core/BaseCommand.d.ts +10 -0
- package/dist/core/BaseCommand.d.ts.map +1 -0
- package/dist/core/BaseCommand.js +36 -0
- package/dist/core/BaseCommand.js.map +1 -0
- package/dist/core/CommandRegistry.d.ts +15 -0
- package/dist/core/CommandRegistry.d.ts.map +1 -0
- package/dist/core/CommandRegistry.js +58 -0
- package/dist/core/CommandRegistry.js.map +1 -0
- package/dist/core/ConfigManager.d.ts +11 -0
- package/dist/core/ConfigManager.d.ts.map +1 -0
- package/dist/core/ConfigManager.js +42 -0
- package/dist/core/ConfigManager.js.map +1 -0
- package/dist/core/EnsureSystem.d.ts +10 -0
- package/dist/core/EnsureSystem.d.ts.map +1 -0
- package/dist/core/EnsureSystem.js +118 -0
- package/dist/core/EnsureSystem.js.map +1 -0
- package/dist/core/FileSystemService.d.ts +20 -0
- package/dist/core/FileSystemService.d.ts.map +1 -0
- package/dist/core/FileSystemService.js +97 -0
- package/dist/core/FileSystemService.js.map +1 -0
- package/dist/core/FrameworkDetector.d.ts +7 -0
- package/dist/core/FrameworkDetector.d.ts.map +1 -0
- package/dist/core/FrameworkDetector.js +33 -0
- package/dist/core/FrameworkDetector.js.map +1 -0
- package/dist/core/ProviderBuilder.d.ts +25 -0
- package/dist/core/ProviderBuilder.d.ts.map +1 -0
- package/dist/core/ProviderBuilder.js +227 -0
- package/dist/core/ProviderBuilder.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +105 -0
- package/dist/index.js.map +1 -0
- package/dist/template/api/gen/httpClient.d.ts +2 -0
- package/dist/template/api/gen/httpClient.d.ts.map +1 -0
- package/dist/template/api/gen/httpClient.js +177 -0
- package/dist/template/api/gen/httpClient.js.map +1 -0
- package/dist/template/api/gen/queryApiClient.d.ts +2 -0
- package/dist/template/api/gen/queryApiClient.d.ts.map +1 -0
- package/dist/template/api/gen/queryApiClient.js +27 -0
- package/dist/template/api/gen/queryApiClient.js.map +1 -0
- package/dist/template/api/gen/queryReactQueryClient.d.ts +13 -0
- package/dist/template/api/gen/queryReactQueryClient.d.ts.map +1 -0
- package/dist/template/api/gen/queryReactQueryClient.js +159 -0
- package/dist/template/api/gen/queryReactQueryClient.js.map +1 -0
- package/dist/template/api/type/httpClientType.d.ts +2 -0
- package/dist/template/api/type/httpClientType.d.ts.map +1 -0
- package/dist/template/api/type/httpClientType.js +2 -0
- package/dist/template/api/type/httpClientType.js.map +1 -0
- package/dist/template/axios/instance.d.ts +2 -0
- package/dist/template/axios/instance.d.ts.map +1 -0
- package/dist/template/axios/instance.js +91 -0
- package/dist/template/axios/instance.js.map +1 -0
- package/dist/template/axios/refresh.d.ts +2 -0
- package/dist/template/axios/refresh.d.ts.map +1 -0
- package/dist/template/axios/refresh.js +81 -0
- package/dist/template/axios/refresh.js.map +1 -0
- package/dist/template/imageAsNext.d.ts +2 -0
- package/dist/template/imageAsNext.d.ts.map +1 -0
- package/dist/template/imageAsNext.js +104 -0
- package/dist/template/imageAsNext.js.map +1 -0
- package/dist/template/localstorage/LocalStorageManager.d.ts +2 -0
- package/dist/template/localstorage/LocalStorageManager.d.ts.map +1 -0
- package/dist/template/localstorage/LocalStorageManager.js +64 -0
- package/dist/template/localstorage/LocalStorageManager.js.map +1 -0
- package/dist/template/localstorage/localStorage.d.ts +2 -0
- package/dist/template/localstorage/localStorage.d.ts.map +1 -0
- package/dist/template/localstorage/localStorage.js +9 -0
- package/dist/template/localstorage/localStorage.js.map +1 -0
- package/dist/template/localstorage/localStorageType.d.ts +2 -0
- package/dist/template/localstorage/localStorageType.d.ts.map +1 -0
- package/dist/template/localstorage/localStorageType.js +6 -0
- package/dist/template/localstorage/localStorageType.js.map +1 -0
- package/dist/template/localstorage/useSharedStorage.d.ts +2 -0
- package/dist/template/localstorage/useSharedStorage.d.ts.map +1 -0
- package/dist/template/localstorage/useSharedStorage.js +24 -0
- package/dist/template/localstorage/useSharedStorage.js.map +1 -0
- package/dist/template/logger/api-logger.d.ts +2 -0
- package/dist/template/logger/api-logger.d.ts.map +1 -0
- package/dist/template/logger/api-logger.js +44 -0
- package/dist/template/logger/api-logger.js.map +1 -0
- package/dist/template/logger/styled-console.d.ts +2 -0
- package/dist/template/logger/styled-console.d.ts.map +1 -0
- package/dist/template/logger/styled-console.js +27 -0
- package/dist/template/logger/styled-console.js.map +1 -0
- package/dist/template/provider/defaultProvider.tsx +6 -0
- package/dist/template/provider/providerTemplates.d.ts +9 -0
- package/dist/template/provider/providerTemplates.d.ts.map +1 -0
- package/dist/template/provider/providerTemplates.js +40 -0
- package/dist/template/provider/providerTemplates.js.map +1 -0
- package/dist/template/provider/providerTemplates.ts +47 -0
- package/dist/template/share/copyText.d.ts +2 -0
- package/dist/template/share/copyText.d.ts.map +1 -0
- package/dist/template/share/copyText.js +12 -0
- package/dist/template/share/copyText.js.map +1 -0
- package/dist/template/share/sharer.d.ts +2 -0
- package/dist/template/share/sharer.d.ts.map +1 -0
- package/dist/template/share/sharer.js +211 -0
- package/dist/template/share/sharer.js.map +1 -0
- package/dist/template/share/useSharer.d.ts +2 -0
- package/dist/template/share/useSharer.d.ts.map +1 -0
- package/dist/template/share/useSharer.js +78 -0
- package/dist/template/share/useSharer.js.map +1 -0
- package/dist/template/state/zustand-persist.d.ts +2 -0
- package/dist/template/state/zustand-persist.d.ts.map +1 -0
- package/dist/template/state/zustand-persist.js +53 -0
- package/dist/template/state/zustand-persist.js.map +1 -0
- package/dist/template/state/zustand-provider-store.d.ts +2 -0
- package/dist/template/state/zustand-provider-store.d.ts.map +1 -0
- package/dist/template/state/zustand-provider-store.js +19 -0
- package/dist/template/state/zustand-provider-store.js.map +1 -0
- package/dist/template/state/zustand-provider.d.ts +2 -0
- package/dist/template/state/zustand-provider.d.ts.map +1 -0
- package/dist/template/state/zustand-provider.js +46 -0
- package/dist/template/state/zustand-provider.js.map +1 -0
- package/dist/template/state/zustand.d.ts +2 -0
- package/dist/template/state/zustand.d.ts.map +1 -0
- package/dist/template/state/zustand.js +38 -0
- package/dist/template/state/zustand.js.map +1 -0
- package/dist/template/supabase/actions/supabaseAdmin.d.ts +2 -0
- package/dist/template/supabase/actions/supabaseAdmin.d.ts.map +1 -0
- package/dist/template/supabase/actions/supabaseAdmin.js +21 -0
- package/dist/template/supabase/actions/supabaseAdmin.js.map +1 -0
- package/dist/template/supabase/actions/supabaseCrud.d.ts +3 -0
- package/dist/template/supabase/actions/supabaseCrud.d.ts.map +1 -0
- package/dist/template/supabase/actions/supabaseCrud.js +72 -0
- package/dist/template/supabase/actions/supabaseCrud.js.map +1 -0
- package/dist/template/supabase/actions/supabaseCrudWithAdmin.d.ts +2 -0
- package/dist/template/supabase/actions/supabaseCrudWithAdmin.d.ts.map +1 -0
- package/dist/template/supabase/actions/supabaseCrudWithAdmin.js +57 -0
- package/dist/template/supabase/actions/supabaseCrudWithAdmin.js.map +1 -0
- package/dist/template/supabase/supabaseAdminLayout.d.ts +2 -0
- package/dist/template/supabase/supabaseAdminLayout.d.ts.map +1 -0
- package/dist/template/supabase/supabaseAdminLayout.js +7 -0
- package/dist/template/supabase/supabaseAdminLayout.js.map +1 -0
- package/dist/template/supabase/supabaseAdminLoginLayout.d.ts +2 -0
- package/dist/template/supabase/supabaseAdminLoginLayout.d.ts.map +1 -0
- package/dist/template/supabase/supabaseAdminLoginLayout.js +121 -0
- package/dist/template/supabase/supabaseAdminLoginLayout.js.map +1 -0
- package/dist/template/supabase/supabaseProxy.d.ts +2 -0
- package/dist/template/supabase/supabaseProxy.d.ts.map +1 -0
- package/dist/template/supabase/supabaseProxy.js +42 -0
- package/dist/template/supabase/supabaseProxy.js.map +1 -0
- package/dist/template/supabase/utilBase.d.ts +3 -0
- package/dist/template/supabase/utilBase.d.ts.map +1 -0
- package/dist/template/supabase/utilBase.js +29 -0
- package/dist/template/supabase/utilBase.js.map +1 -0
- package/dist/types/BaseExtensionCommands.d.ts +38 -0
- package/dist/types/BaseExtensionCommands.d.ts.map +1 -0
- package/dist/types/BaseExtensionCommands.js +20 -0
- package/dist/types/BaseExtensionCommands.js.map +1 -0
- package/dist/types/config.d.ts +19 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/env.d.ts +7 -0
- package/dist/types/env.d.ts.map +1 -0
- package/dist/types/env.js +5 -0
- package/dist/types/env.js.map +1 -0
- package/dist/types/index.d.ts +31 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/PathSearcher.d.ts +8 -0
- package/dist/utils/PathSearcher.d.ts.map +1 -0
- package/dist/utils/PathSearcher.js +40 -0
- package/dist/utils/PathSearcher.js.map +1 -0
- package/dist/utils/askInput.d.ts +10 -0
- package/dist/utils/askInput.d.ts.map +1 -0
- package/dist/utils/askInput.js +12 -0
- package/dist/utils/askInput.js.map +1 -0
- package/dist/utils/askSections.d.ts +13 -0
- package/dist/utils/askSections.d.ts.map +1 -0
- package/dist/utils/askSections.js +14 -0
- package/dist/utils/askSections.js.map +1 -0
- package/dist/utils/coverHyphenToQuotes.d.ts +2 -0
- package/dist/utils/coverHyphenToQuotes.d.ts.map +1 -0
- package/dist/utils/coverHyphenToQuotes.js +4 -0
- package/dist/utils/coverHyphenToQuotes.js.map +1 -0
- package/dist/utils/pathToAlias.d.ts +2 -0
- package/dist/utils/pathToAlias.d.ts.map +1 -0
- package/dist/utils/pathToAlias.js +4 -0
- package/dist/utils/pathToAlias.js.map +1 -0
- package/dist/utils/showSubaya.d.ts +2 -0
- package/dist/utils/showSubaya.d.ts.map +1 -0
- package/dist/utils/showSubaya.js +14 -0
- package/dist/utils/showSubaya.js.map +1 -0
- package/dist/utils/validateConfig.d.ts +3 -0
- package/dist/utils/validateConfig.d.ts.map +1 -0
- package/dist/utils/validateConfig.js +45 -0
- package/dist/utils/validateConfig.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const useSharedStorage = `import { useCallback, useEffect, useState, useSyncExternalStore } from "react"
|
|
2
|
+
import { LocalStorageManager } from "@/utils/storage/LocalStorageManager"
|
|
3
|
+
|
|
4
|
+
export function useSharedStorage<T>(manager: LocalStorageManager<T>) {
|
|
5
|
+
const storeValue = useSyncExternalStore(
|
|
6
|
+
manager.subscribe,
|
|
7
|
+
() => manager.get(),
|
|
8
|
+
() => manager.initialValue,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
const [isMounted, setIsMounted] = useState(false)
|
|
12
|
+
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
setIsMounted(true)
|
|
15
|
+
}, [])
|
|
16
|
+
|
|
17
|
+
const value = isMounted ? storeValue : manager.initialValue
|
|
18
|
+
|
|
19
|
+
const setValue = useCallback((val: T | ((prev: T) => T)) => manager.set(val), [manager])
|
|
20
|
+
const removeValue = useCallback(() => manager.remove(), [manager])
|
|
21
|
+
|
|
22
|
+
return [value, setValue, removeValue] as const
|
|
23
|
+
}`;
|
|
24
|
+
//# sourceMappingURL=useSharedStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSharedStorage.js","sourceRoot":"","sources":["../../../src/template/localstorage/useSharedStorage.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;EAsB9B,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const apiLogger = "import { CSSProperties } from 'react';\n\nimport { AxiosRequestConfig } from 'axios';\n\nimport styledConsole, { StyledConsoleArgs } from './styled-console';\n\ninterface ApiLoggerArgs extends Pick<StyledConsoleArgs, 'method'> {\n status: string | number;\n reqData?: AxiosRequestConfig;\n resData: unknown;\n}\n\nexport const apiLogger = ({\n status,\n reqData,\n resData,\n method: consoleMethod = 'log',\n}: ApiLoggerArgs) => {\n const { method, url, params } = reqData || {};\n const METHOD = method ? method.toUpperCase() : '';\n const paramSerialized = params\n ? `?${new URLSearchParams(params).toString()}`\n : '';\n\n styledConsole({\n topic: `${METHOD}:${status}`,\n topicColor: METHOD_COLOR_MAP[METHOD] || 'black',\n title: `${url}${paramSerialized}`,\n data: {\n request: reqData,\n response: resData,\n },\n method: consoleMethod,\n });\n};\n\nconst METHOD_COLOR_MAP: Record<string, CSSProperties['color']> = {\n GET: 'skyblue',\n PATCH: 'green',\n POST: 'orange',\n PUT: 'darkorange',\n DELETE: 'red',\n};";
|
|
2
|
+
//# sourceMappingURL=api-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-logger.d.ts","sourceRoot":"","sources":["../../../src/template/logger/api-logger.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,mjCA0CnB,CAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export const apiLogger = `import { CSSProperties } from 'react';
|
|
2
|
+
|
|
3
|
+
import { AxiosRequestConfig } from 'axios';
|
|
4
|
+
|
|
5
|
+
import styledConsole, { StyledConsoleArgs } from './styled-console';
|
|
6
|
+
|
|
7
|
+
interface ApiLoggerArgs extends Pick<StyledConsoleArgs, 'method'> {
|
|
8
|
+
status: string | number;
|
|
9
|
+
reqData?: AxiosRequestConfig;
|
|
10
|
+
resData: unknown;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const apiLogger = ({
|
|
14
|
+
status,
|
|
15
|
+
reqData,
|
|
16
|
+
resData,
|
|
17
|
+
method: consoleMethod = 'log',
|
|
18
|
+
}: ApiLoggerArgs) => {
|
|
19
|
+
const { method, url, params } = reqData || {};
|
|
20
|
+
const METHOD = method ? method.toUpperCase() : '';
|
|
21
|
+
const paramSerialized = params
|
|
22
|
+
? \`?\${new URLSearchParams(params).toString()}\`
|
|
23
|
+
: '';
|
|
24
|
+
|
|
25
|
+
styledConsole({
|
|
26
|
+
topic: \`\${METHOD}:\${status}\`,
|
|
27
|
+
topicColor: METHOD_COLOR_MAP[METHOD] || 'black',
|
|
28
|
+
title: \`\${url}\${paramSerialized}\`,
|
|
29
|
+
data: {
|
|
30
|
+
request: reqData,
|
|
31
|
+
response: resData,
|
|
32
|
+
},
|
|
33
|
+
method: consoleMethod,
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const METHOD_COLOR_MAP: Record<string, CSSProperties['color']> = {
|
|
38
|
+
GET: 'skyblue',
|
|
39
|
+
PATCH: 'green',
|
|
40
|
+
POST: 'orange',
|
|
41
|
+
PUT: 'darkorange',
|
|
42
|
+
DELETE: 'red',
|
|
43
|
+
};`;
|
|
44
|
+
//# sourceMappingURL=api-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-logger.js","sourceRoot":"","sources":["../../../src/template/logger/api-logger.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CtB,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const styledConsole = "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { CSSProperties } from 'react';\n\nexport type StyledConsoleArgs = {\n topic?: string;\n title?: string;\n data: unknown;\n topicColor?: CSSProperties['color'];\n method?: 'log' | 'warn' | 'error' | 'info';\n};\n\nfunction styledConsole({\n topic = '',\n title = '',\n data,\n topicColor = 'skyblue',\n method = 'log',\n}: StyledConsoleArgs) {\n const term_1 = `%c[${topic}]`;\n const term_1_style = [`color: ${topicColor}`, 'font-weight : bold'].join(';');\n const term_2 = `%c${title}`;\n const term_2_style = ['font-weight : bold'].join(';');\n console[method](`${term_1}${term_2}`, term_1_style, term_2_style, data);\n}\n\nexport default styledConsole;";
|
|
2
|
+
//# sourceMappingURL=styled-console.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styled-console.d.ts","sourceRoot":"","sources":["../../../src/template/logger/styled-console.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,ouBAyBI,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const styledConsole = `/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { CSSProperties } from 'react';
|
|
3
|
+
|
|
4
|
+
export type StyledConsoleArgs = {
|
|
5
|
+
topic?: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
data: unknown;
|
|
8
|
+
topicColor?: CSSProperties['color'];
|
|
9
|
+
method?: 'log' | 'warn' | 'error' | 'info';
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
function styledConsole({
|
|
13
|
+
topic = '',
|
|
14
|
+
title = '',
|
|
15
|
+
data,
|
|
16
|
+
topicColor = 'skyblue',
|
|
17
|
+
method = 'log',
|
|
18
|
+
}: StyledConsoleArgs) {
|
|
19
|
+
const term_1 = \`%c[\${topic}]\`;
|
|
20
|
+
const term_1_style = [\`color: \${topicColor}\`, 'font-weight : bold'].join(';');
|
|
21
|
+
const term_2 = \`%c\${title}\`;
|
|
22
|
+
const term_2_style = ['font-weight : bold'].join(';');
|
|
23
|
+
console[method](\`\${term_1}\${term_2}\`, term_1_style, term_2_style, data);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default styledConsole;`;
|
|
27
|
+
//# sourceMappingURL=styled-console.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styled-console.js","sourceRoot":"","sources":["../../../src/template/logger/styled-console.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;8BAyBC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ProviderTemplate {
|
|
2
|
+
imports: string[];
|
|
3
|
+
functions: string[];
|
|
4
|
+
wrapperOpen: string;
|
|
5
|
+
wrapperClose: string;
|
|
6
|
+
dependencies?: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare const providerTemplates: Record<string, ProviderTemplate>;
|
|
9
|
+
//# sourceMappingURL=providerTemplates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerTemplates.d.ts","sourceRoot":"","sources":["../../../src/template/provider/providerTemplates.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAsC9D,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export const providerTemplates = {
|
|
2
|
+
reactquery: {
|
|
3
|
+
imports: [
|
|
4
|
+
"import { QueryClient, QueryClientProvider } from '@tanstack/react-query';",
|
|
5
|
+
"import { ReactQueryDevtools } from '@tanstack/react-query-devtools';",
|
|
6
|
+
"import { useState } from 'react';",
|
|
7
|
+
],
|
|
8
|
+
functions: [
|
|
9
|
+
` const [queryClient] = useState(
|
|
10
|
+
() =>
|
|
11
|
+
new QueryClient({
|
|
12
|
+
defaultOptions: {
|
|
13
|
+
queries: {
|
|
14
|
+
staleTime: 60 * 1000,
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
})
|
|
18
|
+
);`,
|
|
19
|
+
],
|
|
20
|
+
wrapperOpen: "<QueryClientProvider client={queryClient}>",
|
|
21
|
+
wrapperClose: `<ReactQueryDevtools initialIsOpen={false} />
|
|
22
|
+
</QueryClientProvider>`,
|
|
23
|
+
dependencies: ["@tanstack/react-query", "@tanstack/react-query-devtools"],
|
|
24
|
+
},
|
|
25
|
+
i18n: {
|
|
26
|
+
imports: ["import { I18nProvider } from '@/lib/i18n';"],
|
|
27
|
+
functions: [],
|
|
28
|
+
wrapperOpen: "<I18nProvider>",
|
|
29
|
+
wrapperClose: "</I18nProvider>",
|
|
30
|
+
dependencies: [],
|
|
31
|
+
},
|
|
32
|
+
theme: {
|
|
33
|
+
imports: ["import { ThemeProvider } from 'next-themes';"],
|
|
34
|
+
functions: [],
|
|
35
|
+
wrapperOpen: '<ThemeProvider attribute="class" defaultTheme="system" enableSystem>',
|
|
36
|
+
wrapperClose: "</ThemeProvider>",
|
|
37
|
+
dependencies: ["next-themes"],
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=providerTemplates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerTemplates.js","sourceRoot":"","sources":["../../../src/template/provider/providerTemplates.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,iBAAiB,GAAqC;IACjE,UAAU,EAAE;QACV,OAAO,EAAE;YACP,2EAA2E;YAC3E,sEAAsE;YACtE,mCAAmC;SACpC;QACD,SAAS,EAAE;YACT;;;;;;;;;KASD;SACA;QACD,WAAW,EAAE,4CAA4C;QACzD,YAAY,EAAE;2BACS;QACvB,YAAY,EAAE,CAAC,uBAAuB,EAAE,gCAAgC,CAAC;KAC1E;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,CAAC,4CAA4C,CAAC;QACvD,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,gBAAgB;QAC7B,YAAY,EAAE,iBAAiB;QAC/B,YAAY,EAAE,EAAE;KACjB;IACD,KAAK,EAAE;QACL,OAAO,EAAE,CAAC,8CAA8C,CAAC;QACzD,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,sEAAsE;QACnF,YAAY,EAAE,kBAAkB;QAChC,YAAY,EAAE,CAAC,aAAa,CAAC;KAC9B;CACF,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export interface ProviderTemplate {
|
|
2
|
+
imports: string[]
|
|
3
|
+
functions: string[]
|
|
4
|
+
wrapperOpen: string
|
|
5
|
+
wrapperClose: string
|
|
6
|
+
dependencies?: string[]
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const providerTemplates: Record<string, ProviderTemplate> = {
|
|
10
|
+
reactquery: {
|
|
11
|
+
imports: [
|
|
12
|
+
"import { QueryClient, QueryClientProvider } from '@tanstack/react-query';",
|
|
13
|
+
"import { ReactQueryDevtools } from '@tanstack/react-query-devtools';",
|
|
14
|
+
"import { useState } from 'react';",
|
|
15
|
+
],
|
|
16
|
+
functions: [
|
|
17
|
+
` const [queryClient] = useState(
|
|
18
|
+
() =>
|
|
19
|
+
new QueryClient({
|
|
20
|
+
defaultOptions: {
|
|
21
|
+
queries: {
|
|
22
|
+
staleTime: 60 * 1000,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
})
|
|
26
|
+
);`,
|
|
27
|
+
],
|
|
28
|
+
wrapperOpen: "<QueryClientProvider client={queryClient}>",
|
|
29
|
+
wrapperClose: `<ReactQueryDevtools initialIsOpen={false} />
|
|
30
|
+
</QueryClientProvider>`,
|
|
31
|
+
dependencies: ["@tanstack/react-query", "@tanstack/react-query-devtools"],
|
|
32
|
+
},
|
|
33
|
+
i18n: {
|
|
34
|
+
imports: ["import { I18nProvider } from '@/lib/i18n';"],
|
|
35
|
+
functions: [],
|
|
36
|
+
wrapperOpen: "<I18nProvider>",
|
|
37
|
+
wrapperClose: "</I18nProvider>",
|
|
38
|
+
dependencies: [],
|
|
39
|
+
},
|
|
40
|
+
theme: {
|
|
41
|
+
imports: ["import { ThemeProvider } from 'next-themes';"],
|
|
42
|
+
functions: [],
|
|
43
|
+
wrapperOpen: '<ThemeProvider attribute="class" defaultTheme="system" enableSystem>',
|
|
44
|
+
wrapperClose: "</ThemeProvider>",
|
|
45
|
+
dependencies: ["next-themes"],
|
|
46
|
+
},
|
|
47
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const copyText = "export function copyText(text: string) {\n const input = document.createElement('input');\n input.readOnly = true;\n input.value = text;\n document.body.appendChild(input);\n input.select();\n input.setSelectionRange(0, input.value.length);\n document.execCommand('Copy');\n document.body.removeChild(input);\n}\n";
|
|
2
|
+
//# sourceMappingURL=copyText.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copyText.d.ts","sourceRoot":"","sources":["../../../src/template/share/copyText.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,sUAUpB,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const copyText = `export function copyText(text: string) {
|
|
2
|
+
const input = document.createElement('input');
|
|
3
|
+
input.readOnly = true;
|
|
4
|
+
input.value = text;
|
|
5
|
+
document.body.appendChild(input);
|
|
6
|
+
input.select();
|
|
7
|
+
input.setSelectionRange(0, input.value.length);
|
|
8
|
+
document.execCommand('Copy');
|
|
9
|
+
document.body.removeChild(input);
|
|
10
|
+
}
|
|
11
|
+
`;
|
|
12
|
+
//# sourceMappingURL=copyText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copyText.js","sourceRoot":"","sources":["../../../src/template/share/copyText.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;CAUvB,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const sharer = "import { ENV } from '@/configs/env';\nimport { copyText } from '@/utils/share/copy';\n\nexport type ShareTarget =\n | 'FACEBOOK'\n | 'MESSENGER'\n | 'KAKAO'\n | 'LINE'\n | 'X'\n | 'WHATSAPP'\n | 'LINK';\n\nexport interface SharerOptions {\n disabled: boolean;\n title: string;\n text: string;\n url: string;\n image?: string | null;\n imageWidth?: number;\n imageHeight?: number;\n beforeShare?: (target: ShareTarget) => void;\n afterShare?: (target: ShareTarget) => void;\n}\n\nexport class Sharer {\n private readonly isMobile = /Android|webOS|iPhone|iPad|iPod|Opera Mini/i.test(\n navigator.userAgent,\n );\n\n private readonly shareText: string;\n\n public constructor(private options: SharerOptions) {\n this.shareText = this.options.text\n ? `${this.options.title} - ${this.options.text}`\n : this.options.title;\n }\n\n public share(type: ShareTarget) {\n if (this.options.disabled) {\n return;\n }\n\n if (!this.options.beforeShare) {\n this.shareTo(type);\n return;\n }\n this.options.beforeShare?.(type);\n new Promise((resolve) => setTimeout(resolve, 400)).then(() => {\n this.shareTo(type);\n this.options.afterShare?.(type);\n });\n }\n\n private shareTo(type: ShareTarget) {\n switch (type) {\n case 'FACEBOOK':\n this.shareToFacebook();\n break;\n case 'MESSENGER':\n this.shareToMessenger();\n break;\n case 'LINE':\n this.shareToLine();\n break;\n case 'WHATSAPP':\n this.shareToWhatsapp();\n break;\n case 'KAKAO':\n this.shareToKakao();\n break;\n case 'LINK':\n this.shareToCopy();\n break;\n case 'X':\n this.shareToTwitter();\n }\n }\n\n private shareToFacebook() {\n const facebookShareLink = `https://facebook.com/sharer/sharer.php?u=${encodeURIComponent(\n this.options.url,\n )}`;\n window.open(facebookShareLink, '_blank');\n }\n\n private shareToLine() {\n const lineShareLink = `https://social-plugins.line.me/lineit/share?url=${encodeURIComponent(\n this.options.url,\n )}`;\n this.openLink(lineShareLink);\n }\n\n private shareToMessenger() {\n const url = this.options.url;\n if (!ENV.FACEBOOK_APP_ID) {\n alert('Facebook app id is not set');\n return;\n }\n\n const messengerShareLink = `https://www.facebook.com/dialog/send?app_id=${\n ENV.FACEBOOK_APP_ID\n }&link=${encodeURIComponent(url)}&redirect_uri=${encodeURI(url)}`;\n const mobileMessengerShareLink = `fb-messenger://share?link=${encodeURIComponent(\n url,\n )}&app_id=${ENV.FACEBOOK_APP_ID}`;\n\n if (this.isMobile) {\n this.openLink(mobileMessengerShareLink);\n } else {\n this.openLink(messengerShareLink);\n }\n }\n\n private shareToWhatsapp() {\n const whatsappShareLink = `https://api.whatsapp.com/send?text=${\n this.shareText\n } ${encodeURIComponent(this.options.url)}`;\n this.openLink(whatsappShareLink);\n }\n\n private shareToTwitter() {\n const twitterShareLink = `https://twitter.com/intent/tweet?text=${encodeURIComponent(\n this.shareText,\n )}&url=${encodeURIComponent(this.options.url)}`;\n this.openLink(twitterShareLink);\n }\n\n private shareToKakao() {\n const kakao = (window as any).Kakao\n if (!kakao || !ENV.KAKAO_SHARE_KEY) {\n return\n }\n if (!kakao.isInitialized()) {\n kakao.init(ENV.KAKAO_SHARE_KEY)\n }\n\n kakao.Share.sendDefault(\n this.options.image\n ? {\n objectType: 'feed',\n content: {\n title: this.options.title,\n description: this.options.text,\n imageUrl: this.options.image,\n imageWidth: this.options.imageWidth ?? 1080,\n imageHeight: this.options.imageHeight ?? 1080,\n link: {\n mobileWebUrl: this.options.url,\n webUrl: this.options.url,\n },\n },\n buttons: [\n {\n title: 'Click to join',\n link: {\n mobileWebUrl: this.options.url,\n webUrl: this.options.url,\n },\n },\n ],\n }\n : {\n objectType: 'text',\n text: this.shareText,\n link: {\n mobileWebUrl: this.options.url,\n webUrl: this.options.url,\n },\n },\n );\n }\n\n private async shareToCopy() {\n const isPC =\n !/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n );\n\n if (isPC) {\n copyText(this.options.url);\n alert('Copied to clipboard');\n return;\n }\n\n if (navigator.share) {\n try {\n await navigator.share({\n title: document.title,\n url: this.options.url,\n });\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n console.error('Share failed:', error);\n }\n } else {\n copyText(this.options.url);\n alert('Copied to clipboard');\n }\n }\n\n private openLink(url: string) {\n const a = document.createElement('a');\n a.setAttribute('href', url);\n a.setAttribute('target', '_blank');\n a.click();\n }\n}\n";
|
|
2
|
+
//# sourceMappingURL=sharer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharer.d.ts","sourceRoot":"","sources":["../../../src/template/share/sharer.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,q0KAiNlB,CAAA"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
export const sharer = `import { ENV } from '@/configs/env';
|
|
2
|
+
import { copyText } from '@/utils/share/copy';
|
|
3
|
+
|
|
4
|
+
export type ShareTarget =
|
|
5
|
+
| 'FACEBOOK'
|
|
6
|
+
| 'MESSENGER'
|
|
7
|
+
| 'KAKAO'
|
|
8
|
+
| 'LINE'
|
|
9
|
+
| 'X'
|
|
10
|
+
| 'WHATSAPP'
|
|
11
|
+
| 'LINK';
|
|
12
|
+
|
|
13
|
+
export interface SharerOptions {
|
|
14
|
+
disabled: boolean;
|
|
15
|
+
title: string;
|
|
16
|
+
text: string;
|
|
17
|
+
url: string;
|
|
18
|
+
image?: string | null;
|
|
19
|
+
imageWidth?: number;
|
|
20
|
+
imageHeight?: number;
|
|
21
|
+
beforeShare?: (target: ShareTarget) => void;
|
|
22
|
+
afterShare?: (target: ShareTarget) => void;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export class Sharer {
|
|
26
|
+
private readonly isMobile = /Android|webOS|iPhone|iPad|iPod|Opera Mini/i.test(
|
|
27
|
+
navigator.userAgent,
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
private readonly shareText: string;
|
|
31
|
+
|
|
32
|
+
public constructor(private options: SharerOptions) {
|
|
33
|
+
this.shareText = this.options.text
|
|
34
|
+
? \`\${this.options.title} - \${this.options.text}\`
|
|
35
|
+
: this.options.title;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public share(type: ShareTarget) {
|
|
39
|
+
if (this.options.disabled) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (!this.options.beforeShare) {
|
|
44
|
+
this.shareTo(type);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this.options.beforeShare?.(type);
|
|
48
|
+
new Promise((resolve) => setTimeout(resolve, 400)).then(() => {
|
|
49
|
+
this.shareTo(type);
|
|
50
|
+
this.options.afterShare?.(type);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private shareTo(type: ShareTarget) {
|
|
55
|
+
switch (type) {
|
|
56
|
+
case 'FACEBOOK':
|
|
57
|
+
this.shareToFacebook();
|
|
58
|
+
break;
|
|
59
|
+
case 'MESSENGER':
|
|
60
|
+
this.shareToMessenger();
|
|
61
|
+
break;
|
|
62
|
+
case 'LINE':
|
|
63
|
+
this.shareToLine();
|
|
64
|
+
break;
|
|
65
|
+
case 'WHATSAPP':
|
|
66
|
+
this.shareToWhatsapp();
|
|
67
|
+
break;
|
|
68
|
+
case 'KAKAO':
|
|
69
|
+
this.shareToKakao();
|
|
70
|
+
break;
|
|
71
|
+
case 'LINK':
|
|
72
|
+
this.shareToCopy();
|
|
73
|
+
break;
|
|
74
|
+
case 'X':
|
|
75
|
+
this.shareToTwitter();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
private shareToFacebook() {
|
|
80
|
+
const facebookShareLink = \`https://facebook.com/sharer/sharer.php?u=\${encodeURIComponent(
|
|
81
|
+
this.options.url,
|
|
82
|
+
)}\`;
|
|
83
|
+
window.open(facebookShareLink, '_blank');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
private shareToLine() {
|
|
87
|
+
const lineShareLink = \`https://social-plugins.line.me/lineit/share?url=\${encodeURIComponent(
|
|
88
|
+
this.options.url,
|
|
89
|
+
)}\`;
|
|
90
|
+
this.openLink(lineShareLink);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
private shareToMessenger() {
|
|
94
|
+
const url = this.options.url;
|
|
95
|
+
if (!ENV.FACEBOOK_APP_ID) {
|
|
96
|
+
alert('Facebook app id is not set');
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const messengerShareLink = \`https://www.facebook.com/dialog/send?app_id=\${
|
|
101
|
+
ENV.FACEBOOK_APP_ID
|
|
102
|
+
}&link=\${encodeURIComponent(url)}&redirect_uri=\${encodeURI(url)}\`;
|
|
103
|
+
const mobileMessengerShareLink = \`fb-messenger://share?link=\${encodeURIComponent(
|
|
104
|
+
url,
|
|
105
|
+
)}&app_id=\${ENV.FACEBOOK_APP_ID}\`;
|
|
106
|
+
|
|
107
|
+
if (this.isMobile) {
|
|
108
|
+
this.openLink(mobileMessengerShareLink);
|
|
109
|
+
} else {
|
|
110
|
+
this.openLink(messengerShareLink);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
private shareToWhatsapp() {
|
|
115
|
+
const whatsappShareLink = \`https://api.whatsapp.com/send?text=\${
|
|
116
|
+
this.shareText
|
|
117
|
+
} \${encodeURIComponent(this.options.url)}\`;
|
|
118
|
+
this.openLink(whatsappShareLink);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private shareToTwitter() {
|
|
122
|
+
const twitterShareLink = \`https://twitter.com/intent/tweet?text=\${encodeURIComponent(
|
|
123
|
+
this.shareText,
|
|
124
|
+
)}&url=\${encodeURIComponent(this.options.url)}\`;
|
|
125
|
+
this.openLink(twitterShareLink);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
private shareToKakao() {
|
|
129
|
+
const kakao = (window as any).Kakao
|
|
130
|
+
if (!kakao || !ENV.KAKAO_SHARE_KEY) {
|
|
131
|
+
return
|
|
132
|
+
}
|
|
133
|
+
if (!kakao.isInitialized()) {
|
|
134
|
+
kakao.init(ENV.KAKAO_SHARE_KEY)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
kakao.Share.sendDefault(
|
|
138
|
+
this.options.image
|
|
139
|
+
? {
|
|
140
|
+
objectType: 'feed',
|
|
141
|
+
content: {
|
|
142
|
+
title: this.options.title,
|
|
143
|
+
description: this.options.text,
|
|
144
|
+
imageUrl: this.options.image,
|
|
145
|
+
imageWidth: this.options.imageWidth ?? 1080,
|
|
146
|
+
imageHeight: this.options.imageHeight ?? 1080,
|
|
147
|
+
link: {
|
|
148
|
+
mobileWebUrl: this.options.url,
|
|
149
|
+
webUrl: this.options.url,
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
buttons: [
|
|
153
|
+
{
|
|
154
|
+
title: 'Click to join',
|
|
155
|
+
link: {
|
|
156
|
+
mobileWebUrl: this.options.url,
|
|
157
|
+
webUrl: this.options.url,
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
],
|
|
161
|
+
}
|
|
162
|
+
: {
|
|
163
|
+
objectType: 'text',
|
|
164
|
+
text: this.shareText,
|
|
165
|
+
link: {
|
|
166
|
+
mobileWebUrl: this.options.url,
|
|
167
|
+
webUrl: this.options.url,
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
private async shareToCopy() {
|
|
174
|
+
const isPC =
|
|
175
|
+
!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
|
|
176
|
+
navigator.userAgent,
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
if (isPC) {
|
|
180
|
+
copyText(this.options.url);
|
|
181
|
+
alert('Copied to clipboard');
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
if (navigator.share) {
|
|
186
|
+
try {
|
|
187
|
+
await navigator.share({
|
|
188
|
+
title: document.title,
|
|
189
|
+
url: this.options.url,
|
|
190
|
+
});
|
|
191
|
+
} catch (error) {
|
|
192
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
console.error('Share failed:', error);
|
|
196
|
+
}
|
|
197
|
+
} else {
|
|
198
|
+
copyText(this.options.url);
|
|
199
|
+
alert('Copied to clipboard');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
private openLink(url: string) {
|
|
204
|
+
const a = document.createElement('a');
|
|
205
|
+
a.setAttribute('href', url);
|
|
206
|
+
a.setAttribute('target', '_blank');
|
|
207
|
+
a.click();
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
`;
|
|
211
|
+
//# sourceMappingURL=sharer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharer.js","sourceRoot":"","sources":["../../../src/template/share/sharer.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiNrB,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const useSharer = "import { useCallback, useMemo } from 'react';\n\nimport DOMPurify from 'dompurify';\n\nimport { Sharer, SharerOptions } from '@/utils/share/sharer';\n\nexport function useSharer({ sharerOptions }: { sharerOptions: SharerOptions }) {\n const {\n url,\n text,\n image,\n title,\n disabled,\n imageWidth,\n imageHeight,\n afterShare,\n beforeShare,\n } = sharerOptions;\n\n const sharer = useMemo(() => {\n return new Sharer({\n disabled,\n url,\n title: DOMPurify.sanitize(title, { ALLOWED_TAGS: [] }),\n text: DOMPurify.sanitize(text, { ALLOWED_TAGS: [] }),\n image,\n imageWidth: imageWidth ?? 1920,\n imageHeight: imageHeight ?? 1080,\n afterShare,\n beforeShare,\n });\n }, [\n disabled,\n url,\n title,\n text,\n image,\n imageWidth,\n imageHeight,\n afterShare,\n beforeShare,\n ]);\n\n const shareToFacebook = useCallback(() => {\n sharer.share('FACEBOOK');\n }, [sharer]);\n const shareToMessenger = useCallback(() => {\n sharer.share('MESSENGER');\n }, [sharer]);\n const shareToLine = useCallback(() => {\n sharer.share('LINE');\n }, [sharer]);\n const shareToWhatsapp = useCallback(() => {\n sharer.share('WHATSAPP');\n }, [sharer]);\n const shareToKakao = useCallback(() => {\n sharer.share('KAKAO');\n }, [sharer]);\n const copyLink = useCallback(() => {\n sharer.share('LINK');\n }, [sharer]);\n const shareToX = useCallback(() => {\n sharer.share('X');\n }, [sharer]);\n\n return {\n shareToFacebook,\n shareToMessenger,\n shareToLine,\n shareToWhatsapp,\n shareToKakao,\n copyLink,\n shareToX,\n };\n}\n\n";
|
|
2
|
+
//# sourceMappingURL=useSharer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSharer.d.ts","sourceRoot":"","sources":["../../../src/template/share/useSharer.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,4pDA4ErB,CAAA"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export const useSharer = `import { useCallback, useMemo } from 'react';
|
|
2
|
+
|
|
3
|
+
import DOMPurify from 'dompurify';
|
|
4
|
+
|
|
5
|
+
import { Sharer, SharerOptions } from '@/utils/share/sharer';
|
|
6
|
+
|
|
7
|
+
export function useSharer({ sharerOptions }: { sharerOptions: SharerOptions }) {
|
|
8
|
+
const {
|
|
9
|
+
url,
|
|
10
|
+
text,
|
|
11
|
+
image,
|
|
12
|
+
title,
|
|
13
|
+
disabled,
|
|
14
|
+
imageWidth,
|
|
15
|
+
imageHeight,
|
|
16
|
+
afterShare,
|
|
17
|
+
beforeShare,
|
|
18
|
+
} = sharerOptions;
|
|
19
|
+
|
|
20
|
+
const sharer = useMemo(() => {
|
|
21
|
+
return new Sharer({
|
|
22
|
+
disabled,
|
|
23
|
+
url,
|
|
24
|
+
title: DOMPurify.sanitize(title, { ALLOWED_TAGS: [] }),
|
|
25
|
+
text: DOMPurify.sanitize(text, { ALLOWED_TAGS: [] }),
|
|
26
|
+
image,
|
|
27
|
+
imageWidth: imageWidth ?? 1920,
|
|
28
|
+
imageHeight: imageHeight ?? 1080,
|
|
29
|
+
afterShare,
|
|
30
|
+
beforeShare,
|
|
31
|
+
});
|
|
32
|
+
}, [
|
|
33
|
+
disabled,
|
|
34
|
+
url,
|
|
35
|
+
title,
|
|
36
|
+
text,
|
|
37
|
+
image,
|
|
38
|
+
imageWidth,
|
|
39
|
+
imageHeight,
|
|
40
|
+
afterShare,
|
|
41
|
+
beforeShare,
|
|
42
|
+
]);
|
|
43
|
+
|
|
44
|
+
const shareToFacebook = useCallback(() => {
|
|
45
|
+
sharer.share('FACEBOOK');
|
|
46
|
+
}, [sharer]);
|
|
47
|
+
const shareToMessenger = useCallback(() => {
|
|
48
|
+
sharer.share('MESSENGER');
|
|
49
|
+
}, [sharer]);
|
|
50
|
+
const shareToLine = useCallback(() => {
|
|
51
|
+
sharer.share('LINE');
|
|
52
|
+
}, [sharer]);
|
|
53
|
+
const shareToWhatsapp = useCallback(() => {
|
|
54
|
+
sharer.share('WHATSAPP');
|
|
55
|
+
}, [sharer]);
|
|
56
|
+
const shareToKakao = useCallback(() => {
|
|
57
|
+
sharer.share('KAKAO');
|
|
58
|
+
}, [sharer]);
|
|
59
|
+
const copyLink = useCallback(() => {
|
|
60
|
+
sharer.share('LINK');
|
|
61
|
+
}, [sharer]);
|
|
62
|
+
const shareToX = useCallback(() => {
|
|
63
|
+
sharer.share('X');
|
|
64
|
+
}, [sharer]);
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
shareToFacebook,
|
|
68
|
+
shareToMessenger,
|
|
69
|
+
shareToLine,
|
|
70
|
+
shareToWhatsapp,
|
|
71
|
+
shareToKakao,
|
|
72
|
+
copyLink,
|
|
73
|
+
shareToX,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
`;
|
|
78
|
+
//# sourceMappingURL=useSharer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSharer.js","sourceRoot":"","sources":["../../../src/template/share/useSharer.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4ExB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zustand-persist.d.ts","sourceRoot":"","sources":["../../../src/template/state/zustand-persist.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,GAAI,gBAAgB,MAAM,EAAE,UAAU,MAAM,WAmDvB,CAAA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export const zustandPersist = (stateClassName, filename) => `import { create } from "zustand"
|
|
2
|
+
import { persist } from "zustand/middleware"
|
|
3
|
+
import { useShallow } from "zustand/shallow"
|
|
4
|
+
import { useState, useEffect } from "react"
|
|
5
|
+
|
|
6
|
+
export interface ${stateClassName}StoreStateType {
|
|
7
|
+
count: number
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface ${stateClassName}StoreActionsType {
|
|
11
|
+
increaseCount: () => void
|
|
12
|
+
decreaseCount: () => void
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type ${stateClassName}StoreType = ${stateClassName}StoreStateType & ${stateClassName}StoreActionsType
|
|
16
|
+
|
|
17
|
+
const useBase${stateClassName}PersistStore = create<${stateClassName}StoreType>()(
|
|
18
|
+
persist(
|
|
19
|
+
(set) => ({
|
|
20
|
+
count: 1,
|
|
21
|
+
increaseCount: () => set((state) => ({ count: state.count + 1 })),
|
|
22
|
+
decreaseCount: () => set((state) => ({ count: state.count - 1 })),
|
|
23
|
+
}),
|
|
24
|
+
{
|
|
25
|
+
name: "${filename}-storage", // localStorage에 저장될 키 이름
|
|
26
|
+
}
|
|
27
|
+
)
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
const use${stateClassName}PersistStore = <K extends keyof ${stateClassName}StoreType>(...keys: K[]) => {
|
|
31
|
+
const [isMounted, setIsMounted] = useState(false)
|
|
32
|
+
|
|
33
|
+
const result = useBase${stateClassName}PersistStore(
|
|
34
|
+
useShallow((state) =>
|
|
35
|
+
keys.reduce(
|
|
36
|
+
(acc, key) => {
|
|
37
|
+
acc[key] = state[key]
|
|
38
|
+
return acc
|
|
39
|
+
},
|
|
40
|
+
{} as Pick<${stateClassName}StoreType, K>
|
|
41
|
+
)
|
|
42
|
+
)
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
setIsMounted(true)
|
|
47
|
+
}, [])
|
|
48
|
+
|
|
49
|
+
return isMounted ? result : ({} as Pick<${stateClassName}StoreType, K>)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export default use${stateClassName}PersistStore`;
|
|
53
|
+
//# sourceMappingURL=zustand-persist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zustand-persist.js","sourceRoot":"","sources":["../../../src/template/state/zustand-persist.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,cAAsB,EAAE,QAAgB,EAAE,EAAE,CAAC;;;;;mBAKzD,cAAc;;;;mBAId,cAAc;;;;;cAKnB,cAAc,eAAe,cAAc,oBAAoB,cAAc;;eAE5E,cAAc,yBAAyB,cAAc;;;;;;;;eAQrD,QAAQ;;;;;WAKZ,cAAc,mCAAmC,cAAc;;;0BAGhD,cAAc;;;;;;;qBAOnB,cAAc;;;;;;;;;4CASS,cAAc;;;oBAGtC,cAAc,cAAc,CAAA"}
|