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,159 @@
|
|
|
1
|
+
import { camelCase, constantCase, pascalCase } from "change-case";
|
|
2
|
+
export const genQueryReactQueryClient = (apiName, methods, importErrorTypeArr) => {
|
|
3
|
+
const apiInstance = camelCase(apiName.toLocaleLowerCase()) + "Api";
|
|
4
|
+
const constantPrefix = constantCase(apiName);
|
|
5
|
+
const genImportArr = () => {
|
|
6
|
+
if (importErrorTypeArr.length === 0) {
|
|
7
|
+
return "";
|
|
8
|
+
}
|
|
9
|
+
const sortedImportTypeArr = importErrorTypeArr
|
|
10
|
+
.filter((type) => type !== "any" && !type.includes("[]"))
|
|
11
|
+
.sort((a, b) => a.localeCompare(b));
|
|
12
|
+
const importStrSet = [...new Set(sortedImportTypeArr)];
|
|
13
|
+
if (importStrSet.length < 5) {
|
|
14
|
+
return `import { ${importStrSet.join(", ")} } from "../@types/data-contracts";`;
|
|
15
|
+
}
|
|
16
|
+
return `import {
|
|
17
|
+
${importStrSet.join(",\n ")},
|
|
18
|
+
} from "../@types/data-contracts";`;
|
|
19
|
+
};
|
|
20
|
+
let isNeedInfiniteQueryInFile = false;
|
|
21
|
+
let isNeedMutationInFile = false;
|
|
22
|
+
let isNeedQueryInFile = false;
|
|
23
|
+
let queryKeys = "";
|
|
24
|
+
let queryHooks = "";
|
|
25
|
+
methods.forEach((methodInfo) => {
|
|
26
|
+
const { operationId, method, hasQuery, hasPathParams, responseType, errorType, comments, isInfinite } = methodInfo;
|
|
27
|
+
const pascalOpId = pascalCase(operationId);
|
|
28
|
+
const camelOpId = pascalCase(operationId).charAt(0).toLowerCase() + pascalCase(operationId).slice(1);
|
|
29
|
+
const constantOpId = constantCase(operationId);
|
|
30
|
+
const isGet = method.toUpperCase() === "GET";
|
|
31
|
+
const needsInfinite = isGet && hasQuery && isInfinite;
|
|
32
|
+
const hasVariables = hasPathParams || hasQuery;
|
|
33
|
+
// QUERY_KEY 생성
|
|
34
|
+
const targetQueryKey = constantOpId.replace(`${constantPrefix}_`, "");
|
|
35
|
+
if (isGet) {
|
|
36
|
+
if (needsInfinite) {
|
|
37
|
+
isNeedInfiniteQueryInFile = true;
|
|
38
|
+
queryKeys += ` ${targetQueryKey}: (variables?: Parameter<typeof ${apiInstance}.${camelOpId}>) =>\n`;
|
|
39
|
+
queryKeys += ` ["$${targetQueryKey}", variables].filter((key) => typeof key !== "undefined"),\n`;
|
|
40
|
+
queryKeys += ` ${targetQueryKey}_INFINITE: (variables?: Parameter<typeof ${apiInstance}.${camelOpId}>) =>\n`;
|
|
41
|
+
queryKeys += ` ["$${targetQueryKey}_INFINITE", variables].filter((key) => typeof key !== "undefined"),\n`;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
if (hasVariables) {
|
|
45
|
+
queryKeys += ` ${targetQueryKey}: (variables?: Parameter<typeof ${apiInstance}.${camelOpId}>) =>\n`;
|
|
46
|
+
queryKeys += ` ["$${targetQueryKey}", variables].filter((key) => typeof key !== "undefined"),\n`;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
queryKeys += ` ${targetQueryKey}: (variables?: Parameter<typeof ${apiInstance}.${camelOpId}>) =>\n`;
|
|
50
|
+
queryKeys += ` ["$${targetQueryKey}", variables].filter((key) => typeof key !== "undefined"),\n`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
queryKeys += ` ${targetQueryKey}: () => ["${targetQueryKey}"].filter((key) => typeof key !== "undefined"),\n`;
|
|
56
|
+
}
|
|
57
|
+
// Hook 생성
|
|
58
|
+
const commentStr = comments.map((c) => ` * ${c}`).join("\n");
|
|
59
|
+
if (isGet) {
|
|
60
|
+
// useQuery Hook
|
|
61
|
+
isNeedQueryInFile = true;
|
|
62
|
+
queryHooks += `/**\n${commentStr}\n */\n`;
|
|
63
|
+
queryHooks += `export const use${pascalOpId}Query = (\n`;
|
|
64
|
+
queryHooks += hasVariables
|
|
65
|
+
? ` params: QueryHookParams<typeof ${apiInstance}.${camelOpId}, AxiosError<${errorType}>>,\n`
|
|
66
|
+
: ` params?: QueryHookParams<typeof ${apiInstance}.${camelOpId}, AxiosError<${errorType}>>,\n`;
|
|
67
|
+
queryHooks += `) => {\n`;
|
|
68
|
+
queryHooks += ` const queryKey = QUERY_KEY_${constantPrefix}_API.${targetQueryKey}(params${hasVariables ? "" : "?"}.variables)\n`;
|
|
69
|
+
queryHooks += ` return useQuery({\n`;
|
|
70
|
+
queryHooks += ` queryKey,\n`;
|
|
71
|
+
queryHooks += ` queryFn: () => ${apiInstance}.${camelOpId}(params${hasVariables ? "" : "?"}.variables),\n`;
|
|
72
|
+
queryHooks += ` ...params?.options,\n`;
|
|
73
|
+
queryHooks += ` })\n`;
|
|
74
|
+
queryHooks += `}\n\n`;
|
|
75
|
+
// useInfiniteQuery Hook (hasQuery가 있는 경우)
|
|
76
|
+
if (needsInfinite) {
|
|
77
|
+
importErrorTypeArr.push(responseType);
|
|
78
|
+
queryHooks += `/**\n${commentStr}\n */\n`;
|
|
79
|
+
queryHooks += `export const use${pascalOpId}InfiniteQuery = (\n`;
|
|
80
|
+
queryHooks += ` params: InfiniteQueryHookParams<${responseType}, AxiosError<${errorType}>>,\n`;
|
|
81
|
+
queryHooks += `) => {\n`;
|
|
82
|
+
queryHooks += ` const queryKey = QUERY_KEY_${constantPrefix}_API.${targetQueryKey}_INFINITE(params.variables)\n\n`;
|
|
83
|
+
queryHooks += ` return useInfiniteQuery({\n`;
|
|
84
|
+
queryHooks += ` queryKey,\n`;
|
|
85
|
+
queryHooks += ` initialPageParam: 0,\n`;
|
|
86
|
+
queryHooks += ` queryFn: ({ pageParam = 0 }) => {\n`;
|
|
87
|
+
queryHooks += ` return ${apiInstance}.${camelOpId}({\n`;
|
|
88
|
+
queryHooks += ` ...params.variables,\n`;
|
|
89
|
+
queryHooks += ` query: {\n`;
|
|
90
|
+
queryHooks += ` ...params.variables?.query,\n`;
|
|
91
|
+
queryHooks += ` offset: String(pageParam),\n`;
|
|
92
|
+
queryHooks += ` },\n`;
|
|
93
|
+
queryHooks += ` })\n`;
|
|
94
|
+
queryHooks += ` },\n`;
|
|
95
|
+
queryHooks += ` getNextPageParam: (lastPage) => {\n`;
|
|
96
|
+
queryHooks += ` return lastPage.nextOffset\n`;
|
|
97
|
+
queryHooks += ` },\n`;
|
|
98
|
+
queryHooks += ` ...params?.options,\n`;
|
|
99
|
+
queryHooks += ` })\n`;
|
|
100
|
+
queryHooks += `}\n\n`;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// useMutation Hook
|
|
105
|
+
isNeedMutationInFile = true;
|
|
106
|
+
queryHooks += `/**\n${commentStr}\n */\n`;
|
|
107
|
+
queryHooks += `export const use${pascalOpId}Mutation = (\n`;
|
|
108
|
+
queryHooks += ` params: MutationHookParams<typeof ${apiInstance}.${camelOpId}, AxiosError<${errorType}>>,\n`;
|
|
109
|
+
queryHooks += `) => {\n`;
|
|
110
|
+
queryHooks += ` const mutationKey = QUERY_KEY_${constantPrefix}_API.${targetQueryKey}()\n`;
|
|
111
|
+
queryHooks += ` return useMutation({\n`;
|
|
112
|
+
queryHooks += ` mutationKey,\n`;
|
|
113
|
+
queryHooks += ` mutationFn: ${apiInstance}.${camelOpId},\n`;
|
|
114
|
+
queryHooks += ` ...params?.options,\n`;
|
|
115
|
+
queryHooks += ` })\n`;
|
|
116
|
+
queryHooks += `}\n\n`;
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
const importFromTanstackQuery = () => {
|
|
120
|
+
const importArr = [];
|
|
121
|
+
if (isNeedInfiniteQueryInFile) {
|
|
122
|
+
importArr.push("useInfiniteQuery");
|
|
123
|
+
}
|
|
124
|
+
if (isNeedMutationInFile) {
|
|
125
|
+
importArr.push("useMutation");
|
|
126
|
+
}
|
|
127
|
+
if (isNeedQueryInFile) {
|
|
128
|
+
importArr.push("useQuery");
|
|
129
|
+
}
|
|
130
|
+
return importArr.join(", ");
|
|
131
|
+
};
|
|
132
|
+
const importFromReactQueryType = () => {
|
|
133
|
+
const importArr = [];
|
|
134
|
+
if (isNeedInfiniteQueryInFile) {
|
|
135
|
+
importArr.push("InfiniteQueryHookParams");
|
|
136
|
+
}
|
|
137
|
+
if (isNeedMutationInFile) {
|
|
138
|
+
importArr.push("MutationHookParams");
|
|
139
|
+
}
|
|
140
|
+
if (isNeedQueryInFile) {
|
|
141
|
+
importArr.push("QueryHookParams");
|
|
142
|
+
importArr.push("Parameter");
|
|
143
|
+
}
|
|
144
|
+
return importArr.join(", ");
|
|
145
|
+
};
|
|
146
|
+
return `import { ${importFromTanstackQuery()} } from "@tanstack/react-query"
|
|
147
|
+
import { AxiosError } from "axios"
|
|
148
|
+
import { ${importFromReactQueryType()} } from "../@types/react-query-type"
|
|
149
|
+
import { ${apiInstance} } from "./${apiName}.api"
|
|
150
|
+
${importErrorTypeArr.length === 0 ? "" : `\n${genImportArr()}`}
|
|
151
|
+
/**
|
|
152
|
+
* QUERY_KEYS
|
|
153
|
+
*/
|
|
154
|
+
export const QUERY_KEY_${constantPrefix}_API = {
|
|
155
|
+
${queryKeys}}
|
|
156
|
+
|
|
157
|
+
${queryHooks}`;
|
|
158
|
+
};
|
|
159
|
+
//# sourceMappingURL=queryReactQueryClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryReactQueryClient.js","sourceRoot":"","sources":["../../../../src/template/api/gen/queryReactQueryClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpClientType.d.ts","sourceRoot":"","sources":["../../../../src/template/api/type/httpClientType.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpClientType.js","sourceRoot":"","sources":["../../../../src/template/api/type/httpClientType.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../../src/template/axios/instance.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GACxB,WAAW,OAAO,WA0FmC,CAAA"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
export const axiosInstance = (noRefresh) => `import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from "axios"
|
|
2
|
+
import qs from "qs"
|
|
3
|
+
|
|
4
|
+
import { ENV } from "@/configs/env"
|
|
5
|
+
import { apiLogger } from "@/utils/logger/api-logger"
|
|
6
|
+
import styledConsole from "@/utils/logger/styled-console"
|
|
7
|
+
${!noRefresh ? `import { tokenStorage } from "@/store/local/index"` : ""}
|
|
8
|
+
${!noRefresh ? `import { refresh } from "./refresh"\n` : ""}
|
|
9
|
+
const isDev = ENV.NODE_ENV === "development"
|
|
10
|
+
|
|
11
|
+
export class HttpClient {
|
|
12
|
+
private instance: AxiosInstance
|
|
13
|
+
|
|
14
|
+
constructor(config?: AxiosRequestConfig) {
|
|
15
|
+
this.instance = axios.create({
|
|
16
|
+
baseURL: ENV.API_BASE_URL,
|
|
17
|
+
timeout: 5000,
|
|
18
|
+
headers: {
|
|
19
|
+
"Content-Type": "application/json",
|
|
20
|
+
},
|
|
21
|
+
...config,
|
|
22
|
+
})
|
|
23
|
+
this.setupInterceptors()
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
private setupInterceptors() {
|
|
27
|
+
this.instance.interceptors.request.use(
|
|
28
|
+
(config) => {
|
|
29
|
+
${noRefresh ? "// " : ""}const token = tokenStorage?.get()
|
|
30
|
+
${noRefresh ? "// " : ""}const isAccess = !!token && !!token.access
|
|
31
|
+
${noRefresh ? "// " : ""}if (isAccess) {
|
|
32
|
+
${noRefresh ? "// " : ""} config.headers.setAuthorization(\`Bearer \${token.access}\`)
|
|
33
|
+
${noRefresh ? "// " : ""}}
|
|
34
|
+
return config
|
|
35
|
+
},
|
|
36
|
+
(error) => {
|
|
37
|
+
return Promise.reject(error)
|
|
38
|
+
},
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
this.instance.interceptors.response.use(
|
|
42
|
+
(res) => {
|
|
43
|
+
const { status, config: reqData, data: resData } = res
|
|
44
|
+
if (isDev) apiLogger({ status, reqData, resData })
|
|
45
|
+
return res
|
|
46
|
+
},
|
|
47
|
+
async (error: AxiosError) => {
|
|
48
|
+
try {
|
|
49
|
+
const { response: res, config: reqData } = error || {}
|
|
50
|
+
const { status } = res || { status: 400 }
|
|
51
|
+
${noRefresh ? "// " : ""}const isUnAuthError = status === 401
|
|
52
|
+
${noRefresh ? "// " : ""}const isExpiredToken = status === 444
|
|
53
|
+
|
|
54
|
+
if (isDev) apiLogger({ status, reqData, resData: error, method: "error" })
|
|
55
|
+
|
|
56
|
+
${noRefresh ? "// " : ""}if (isExpiredToken && reqData) {
|
|
57
|
+
${noRefresh ? "// " : ""} const refreshedConfig = await refresh(reqData)
|
|
58
|
+
${noRefresh ? "// " : ""} if (refreshedConfig) {
|
|
59
|
+
${noRefresh ? "// " : ""} return this.instance.request(refreshedConfig)
|
|
60
|
+
${noRefresh ? "// " : ""} }
|
|
61
|
+
${noRefresh ? "// " : ""}}
|
|
62
|
+
|
|
63
|
+
${noRefresh ? "// " : ""}if (isUnAuthError) {
|
|
64
|
+
${noRefresh ? "// " : ""} tokenStorage?.remove()
|
|
65
|
+
${noRefresh ? "// " : ""}}
|
|
66
|
+
|
|
67
|
+
return Promise.reject(error)
|
|
68
|
+
} catch (e) {
|
|
69
|
+
styledConsole({
|
|
70
|
+
method: "error",
|
|
71
|
+
topic: "UN_HANDLED",
|
|
72
|
+
title: "axios-interceptor",
|
|
73
|
+
data: e,
|
|
74
|
+
})
|
|
75
|
+
return Promise.reject(e)
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
this.instance.defaults.paramsSerializer = (params) => {
|
|
81
|
+
return qs.stringify(params, { arrayFormat: "repeat" })
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
public getInstance(): AxiosInstance {
|
|
86
|
+
return this.instance
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export const instance = new HttpClient().getInstance()`;
|
|
91
|
+
//# sourceMappingURL=instance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../../../src/template/axios/instance.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,SAAkB,EAClB,EAAE,CAAC;;;;;;EAMH,CAAC,SAAS,CAAC,CAAC,CAAC,oDAAoD,CAAC,CAAC,CAAC,EAAE;EACtE,CAAC,SAAS,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;UAqBjD,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;UACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;UACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;UACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;UACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;YAkBpB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;;;YAItB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;YAEtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;uDAyBqB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/template/axios/refresh.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,cA+EvB,CAAA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export const axiosRefresh = () => `import { ENV } from "@/configs/env"
|
|
2
|
+
import { tokenStorage } from "@/store/local/index"
|
|
3
|
+
import { TokenType } from "@/types/localStorageType"
|
|
4
|
+
import axios, { InternalAxiosRequestConfig } from "axios"
|
|
5
|
+
|
|
6
|
+
type RefreshSubscriber = (access: string | null) => void
|
|
7
|
+
|
|
8
|
+
let isTokenRefreshing = false
|
|
9
|
+
let refreshSubscribers: RefreshSubscriber[] = []
|
|
10
|
+
|
|
11
|
+
const onTokenRefreshed = (access: string) => {
|
|
12
|
+
refreshSubscribers.forEach((callback) => callback(access))
|
|
13
|
+
refreshSubscribers = []
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const onTokenRefreshFailed = () => {
|
|
17
|
+
refreshSubscribers.forEach((callback) => callback(null))
|
|
18
|
+
refreshSubscribers = []
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const refreshToken = async (): Promise<TokenType> => {
|
|
22
|
+
try {
|
|
23
|
+
const token = tokenStorage?.get()
|
|
24
|
+
if (!token?.refresh) {
|
|
25
|
+
throw new Error("Refresh token not found")
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const { data: newToken } = await axios.post<TokenType>(\`\${ENV.API_BASE_URL}/v1/user/refresh/\`, {
|
|
29
|
+
refresh: token.refresh,
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
const updatedToken = { ...token, ...newToken }
|
|
33
|
+
tokenStorage?.set(updatedToken)
|
|
34
|
+
|
|
35
|
+
return newToken
|
|
36
|
+
} catch (err) {
|
|
37
|
+
tokenStorage?.remove()
|
|
38
|
+
|
|
39
|
+
if (typeof window !== "undefined") {
|
|
40
|
+
window.location.href = "/login"
|
|
41
|
+
}
|
|
42
|
+
throw err
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export const refresh = async (
|
|
47
|
+
originalRequest?: InternalAxiosRequestConfig,
|
|
48
|
+
): Promise<InternalAxiosRequestConfig | null> => {
|
|
49
|
+
if (!originalRequest) {
|
|
50
|
+
return null
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
refreshSubscribers.push((access: string | null) => {
|
|
55
|
+
if (access) {
|
|
56
|
+
if (originalRequest.headers) {
|
|
57
|
+
originalRequest.headers.set("Authorization", \`Bearer \${access}\`)
|
|
58
|
+
}
|
|
59
|
+
resolve(originalRequest)
|
|
60
|
+
} else {
|
|
61
|
+
reject(new Error("Refresh token failed and cleared"))
|
|
62
|
+
}
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
if (!isTokenRefreshing) {
|
|
66
|
+
isTokenRefreshing = true
|
|
67
|
+
|
|
68
|
+
refreshToken()
|
|
69
|
+
.then((token) => {
|
|
70
|
+
onTokenRefreshed(token.access)
|
|
71
|
+
})
|
|
72
|
+
.catch(() => {
|
|
73
|
+
onTokenRefreshFailed()
|
|
74
|
+
})
|
|
75
|
+
.finally(() => {
|
|
76
|
+
isTokenRefreshing = false
|
|
77
|
+
})
|
|
78
|
+
}
|
|
79
|
+
})
|
|
80
|
+
}`;
|
|
81
|
+
//# sourceMappingURL=refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../../src/template/axios/refresh.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+EhC,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const nextImageComponentString = "'use client';\n\nimport { ComponentProps, Ref, useState } from 'react';\n\nimport NextImage, { ImageProps as NextImageProps } from 'next/image';\n\ninterface ImageAsNextProps\n extends Omit<ComponentProps<'div'>, 'children' | 'onError' | 'onLoad'> {\n src: NextImageProps['src'];\n alt: NextImageProps['alt'];\n children?: React.ReactNode;\n loader?: NextImageProps['loader'];\n fill?: NextImageProps['fill'];\n preload?: NextImageProps['preload'];\n priority?: NextImageProps['priority'];\n loading?: NextImageProps['loading'];\n placeholder?: NextImageProps['placeholder'];\n blurDataURL?: NextImageProps['blurDataURL'];\n unoptimized?: NextImageProps['unoptimized'];\n sizes?: NextImageProps['sizes'];\n onLoad?: NextImageProps['onLoad'];\n onError?: NextImageProps['onError'];\n id?: string;\n isDisabledSkeleton?: boolean;\n isLoading?: boolean;\n imageClassName?: string;\n ref?: Ref<HTMLImageElement>;\n}\n\nconst ImageAsNext = ({\n src,\n alt,\n children,\n fill = true,\n loader,\n preload,\n priority = false,\n loading,\n placeholder,\n blurDataURL,\n unoptimized,\n sizes = '100vw',\n onLoad,\n onError,\n id,\n\n isLoading,\n isDisabledSkeleton,\n\n className = '',\n imageClassName = '',\n ref,\n ...props\n}: ImageAsNextProps) => {\n const [internalIsLoading, setInternalIsLoading] = useState(true);\n\n const isCurrentlyLoading =\n isLoading !== undefined ? isLoading : internalIsLoading;\n const showSkeleton = !isDisabledSkeleton && isCurrentlyLoading;\n\n return (\n <div\n className={`relative overflow-hidden object-contain ${\n showSkeleton ? 'animate-pulse bg-gray-200 dark:bg-gray-700' : ''\n } ${className}`}\n {...props}\n >\n <NextImage\n ref={ref}\n src={src}\n alt={alt}\n fill={fill}\n loader={loader}\n preload={preload}\n priority={priority}\n loading={loading}\n placeholder={placeholder}\n blurDataURL={blurDataURL}\n unoptimized={unoptimized}\n sizes={sizes}\n id={id}\n className={`transition-opacity object-fit duration-300 ${\n showSkeleton ? 'opacity-0' : 'opacity-100'\n } ${imageClassName}`}\n onLoad={(e) => {\n setInternalIsLoading(false);\n onLoad?.(e);\n }}\n onError={(e) => {\n setInternalIsLoading(false);\n onError?.(e);\n }}\n />\n\n {children && <div className=\"absolute inset-0\">{children}</div>}\n </div>\n );\n};\n\nexport default ImageAsNext;\n\n\n";
|
|
2
|
+
//# sourceMappingURL=imageAsNext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageAsNext.d.ts","sourceRoot":"","sources":["../../src/template/imageAsNext.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,uhFAsGpC,CAAA"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
export const nextImageComponentString = `'use client';
|
|
2
|
+
|
|
3
|
+
import { ComponentProps, Ref, useState } from 'react';
|
|
4
|
+
|
|
5
|
+
import NextImage, { ImageProps as NextImageProps } from 'next/image';
|
|
6
|
+
|
|
7
|
+
interface ImageAsNextProps
|
|
8
|
+
extends Omit<ComponentProps<'div'>, 'children' | 'onError' | 'onLoad'> {
|
|
9
|
+
src: NextImageProps['src'];
|
|
10
|
+
alt: NextImageProps['alt'];
|
|
11
|
+
children?: React.ReactNode;
|
|
12
|
+
loader?: NextImageProps['loader'];
|
|
13
|
+
fill?: NextImageProps['fill'];
|
|
14
|
+
preload?: NextImageProps['preload'];
|
|
15
|
+
priority?: NextImageProps['priority'];
|
|
16
|
+
loading?: NextImageProps['loading'];
|
|
17
|
+
placeholder?: NextImageProps['placeholder'];
|
|
18
|
+
blurDataURL?: NextImageProps['blurDataURL'];
|
|
19
|
+
unoptimized?: NextImageProps['unoptimized'];
|
|
20
|
+
sizes?: NextImageProps['sizes'];
|
|
21
|
+
onLoad?: NextImageProps['onLoad'];
|
|
22
|
+
onError?: NextImageProps['onError'];
|
|
23
|
+
id?: string;
|
|
24
|
+
isDisabledSkeleton?: boolean;
|
|
25
|
+
isLoading?: boolean;
|
|
26
|
+
imageClassName?: string;
|
|
27
|
+
ref?: Ref<HTMLImageElement>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const ImageAsNext = ({
|
|
31
|
+
src,
|
|
32
|
+
alt,
|
|
33
|
+
children,
|
|
34
|
+
fill = true,
|
|
35
|
+
loader,
|
|
36
|
+
preload,
|
|
37
|
+
priority = false,
|
|
38
|
+
loading,
|
|
39
|
+
placeholder,
|
|
40
|
+
blurDataURL,
|
|
41
|
+
unoptimized,
|
|
42
|
+
sizes = '100vw',
|
|
43
|
+
onLoad,
|
|
44
|
+
onError,
|
|
45
|
+
id,
|
|
46
|
+
|
|
47
|
+
isLoading,
|
|
48
|
+
isDisabledSkeleton,
|
|
49
|
+
|
|
50
|
+
className = '',
|
|
51
|
+
imageClassName = '',
|
|
52
|
+
ref,
|
|
53
|
+
...props
|
|
54
|
+
}: ImageAsNextProps) => {
|
|
55
|
+
const [internalIsLoading, setInternalIsLoading] = useState(true);
|
|
56
|
+
|
|
57
|
+
const isCurrentlyLoading =
|
|
58
|
+
isLoading !== undefined ? isLoading : internalIsLoading;
|
|
59
|
+
const showSkeleton = !isDisabledSkeleton && isCurrentlyLoading;
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<div
|
|
63
|
+
className={\`relative overflow-hidden object-contain \${
|
|
64
|
+
showSkeleton ? 'animate-pulse bg-gray-200 dark:bg-gray-700' : ''
|
|
65
|
+
} \${className}\`}
|
|
66
|
+
{...props}
|
|
67
|
+
>
|
|
68
|
+
<NextImage
|
|
69
|
+
ref={ref}
|
|
70
|
+
src={src}
|
|
71
|
+
alt={alt}
|
|
72
|
+
fill={fill}
|
|
73
|
+
loader={loader}
|
|
74
|
+
preload={preload}
|
|
75
|
+
priority={priority}
|
|
76
|
+
loading={loading}
|
|
77
|
+
placeholder={placeholder}
|
|
78
|
+
blurDataURL={blurDataURL}
|
|
79
|
+
unoptimized={unoptimized}
|
|
80
|
+
sizes={sizes}
|
|
81
|
+
id={id}
|
|
82
|
+
className={\`transition-opacity object-fit duration-300 \${
|
|
83
|
+
showSkeleton ? 'opacity-0' : 'opacity-100'
|
|
84
|
+
} \${imageClassName}\`}
|
|
85
|
+
onLoad={(e) => {
|
|
86
|
+
setInternalIsLoading(false);
|
|
87
|
+
onLoad?.(e);
|
|
88
|
+
}}
|
|
89
|
+
onError={(e) => {
|
|
90
|
+
setInternalIsLoading(false);
|
|
91
|
+
onError?.(e);
|
|
92
|
+
}}
|
|
93
|
+
/>
|
|
94
|
+
|
|
95
|
+
{children && <div className="absolute inset-0">{children}</div>}
|
|
96
|
+
</div>
|
|
97
|
+
);
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export default ImageAsNext;
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
`;
|
|
104
|
+
//# sourceMappingURL=imageAsNext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageAsNext.js","sourceRoot":"","sources":["../../src/template/imageAsNext.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsGvC,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const LocalStorageManager = "export type Listener = () => void\n\nexport class LocalStorageManager<T> {\n private key: string\n public initialValue: T\n private listeners: Set<Listener> = new Set()\n\n constructor(key: string, initialValue: T) {\n this.key = key\n this.initialValue = initialValue\n }\n\n get(): T {\n if (typeof window === \"undefined\") return this.initialValue\n\n try {\n const item = window.localStorage.getItem(this.key)\n return item ? JSON.parse(item) : this.initialValue\n } catch (error) {\n console.warn(`[LocalStorage] Error reading key \"${this.key}\":`, error)\n return this.initialValue\n }\n }\n\n set = (value: T | ((val: T) => T)): void => {\n if (typeof window === \"undefined\") return\n\n try {\n const newValue = value instanceof Function ? value(this.get()) : value\n window.localStorage.setItem(this.key, JSON.stringify(newValue))\n this.notify()\n } catch (error) {\n console.error(`[LocalStorage] Error setting key \"${this.key}\":`, error)\n }\n }\n\n remove = (): void => {\n if (typeof window === \"undefined\") return\n window.localStorage.removeItem(this.key)\n this.notify()\n }\n\n subscribe = (listener: Listener): (() => void) => {\n this.listeners.add(listener)\n\n const handleStorageChange = (event: StorageEvent) => {\n if (event.key === this.key) {\n listener()\n }\n }\n\n window.addEventListener(\"storage\", handleStorageChange)\n\n return () => {\n this.listeners.delete(listener)\n window.removeEventListener(\"storage\", handleStorageChange)\n }\n }\n\n private notify() {\n this.listeners.forEach((listener) => listener())\n }\n}";
|
|
2
|
+
//# sourceMappingURL=LocalStorageManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalStorageManager.d.ts","sourceRoot":"","sources":["../../../src/template/localstorage/LocalStorageManager.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,+qDA8D9B,CAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export const LocalStorageManager = `export type Listener = () => void
|
|
2
|
+
|
|
3
|
+
export class LocalStorageManager<T> {
|
|
4
|
+
private key: string
|
|
5
|
+
public initialValue: T
|
|
6
|
+
private listeners: Set<Listener> = new Set()
|
|
7
|
+
|
|
8
|
+
constructor(key: string, initialValue: T) {
|
|
9
|
+
this.key = key
|
|
10
|
+
this.initialValue = initialValue
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
get(): T {
|
|
14
|
+
if (typeof window === "undefined") return this.initialValue
|
|
15
|
+
|
|
16
|
+
try {
|
|
17
|
+
const item = window.localStorage.getItem(this.key)
|
|
18
|
+
return item ? JSON.parse(item) : this.initialValue
|
|
19
|
+
} catch (error) {
|
|
20
|
+
console.warn(\`[LocalStorage] Error reading key "\${this.key}":\`, error)
|
|
21
|
+
return this.initialValue
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
set = (value: T | ((val: T) => T)): void => {
|
|
26
|
+
if (typeof window === "undefined") return
|
|
27
|
+
|
|
28
|
+
try {
|
|
29
|
+
const newValue = value instanceof Function ? value(this.get()) : value
|
|
30
|
+
window.localStorage.setItem(this.key, JSON.stringify(newValue))
|
|
31
|
+
this.notify()
|
|
32
|
+
} catch (error) {
|
|
33
|
+
console.error(\`[LocalStorage] Error setting key "\${this.key}":\`, error)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
remove = (): void => {
|
|
38
|
+
if (typeof window === "undefined") return
|
|
39
|
+
window.localStorage.removeItem(this.key)
|
|
40
|
+
this.notify()
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
subscribe = (listener: Listener): (() => void) => {
|
|
44
|
+
this.listeners.add(listener)
|
|
45
|
+
|
|
46
|
+
const handleStorageChange = (event: StorageEvent) => {
|
|
47
|
+
if (event.key === this.key) {
|
|
48
|
+
listener()
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
window.addEventListener("storage", handleStorageChange)
|
|
53
|
+
|
|
54
|
+
return () => {
|
|
55
|
+
this.listeners.delete(listener)
|
|
56
|
+
window.removeEventListener("storage", handleStorageChange)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private notify() {
|
|
61
|
+
this.listeners.forEach((listener) => listener())
|
|
62
|
+
}
|
|
63
|
+
}`;
|
|
64
|
+
//# sourceMappingURL=LocalStorageManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalStorageManager.js","sourceRoot":"","sources":["../../../src/template/localstorage/LocalStorageManager.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8DjC,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const localStorage = "import { TokenType } from \"@/types/localStorageType\"\nimport { LocalStorageManager } from \"@/utils/storage/LocalStorageManager\"\n\nexport const tokenStorage = new LocalStorageManager<TokenType>(\"token\", {\n access: \"\",\n refresh: \"\",\n hash: \"\",\n})";
|
|
2
|
+
//# sourceMappingURL=localStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localStorage.d.ts","sourceRoot":"","sources":["../../../src/template/localstorage/localStorage.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,6QAOtB,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const localStorage = `import { TokenType } from "@/types/localStorageType"
|
|
2
|
+
import { LocalStorageManager } from "@/utils/storage/LocalStorageManager"
|
|
3
|
+
|
|
4
|
+
export const tokenStorage = new LocalStorageManager<TokenType>("token", {
|
|
5
|
+
access: "",
|
|
6
|
+
refresh: "",
|
|
7
|
+
hash: "",
|
|
8
|
+
})`;
|
|
9
|
+
//# sourceMappingURL=localStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localStorage.js","sourceRoot":"","sources":["../../../src/template/localstorage/localStorage.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;GAOzB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localStorageType.d.ts","sourceRoot":"","sources":["../../../src/template/localstorage/localStorageType.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,sFAI3B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localStorageType.js","sourceRoot":"","sources":["../../../src/template/localstorage/localStorageType.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;EAI9B,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const useSharedStorage = "import { useCallback, useEffect, useState, useSyncExternalStore } from \"react\"\nimport { LocalStorageManager } from \"@/utils/storage/LocalStorageManager\"\n\nexport function useSharedStorage<T>(manager: LocalStorageManager<T>) {\n const storeValue = useSyncExternalStore(\n manager.subscribe,\n () => manager.get(),\n () => manager.initialValue,\n )\n\n const [isMounted, setIsMounted] = useState(false)\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n const value = isMounted ? storeValue : manager.initialValue\n\n const setValue = useCallback((val: T | ((prev: T) => T)) => manager.set(val), [manager])\n const removeValue = useCallback(() => manager.remove(), [manager])\n\n return [value, setValue, removeValue] as const\n}";
|
|
2
|
+
//# sourceMappingURL=useSharedStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSharedStorage.d.ts","sourceRoot":"","sources":["../../../src/template/localstorage/useSharedStorage.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,4vBAsB3B,CAAA"}
|