subaya 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"AxiosGeneratorCommand.d.ts","sourceRoot":"","sources":["../../../src/commands/axios/AxiosGeneratorCommand.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AAEvE,qBAAa,qBAAsB,SAAQ,gBAAgB;IACnD,OAAO,CAAC,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAiIxD"}
1
+ {"version":3,"file":"AxiosGeneratorCommand.d.ts","sourceRoot":"","sources":["../../../src/commands/axios/AxiosGeneratorCommand.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AAEvE,qBAAa,qBAAsB,SAAQ,gBAAgB;IACnD,OAAO,CAAC,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAqIxD"}
@@ -93,7 +93,11 @@ export class AxiosGeneratorCommand extends BaseAxiosCommand {
93
93
  }
94
94
  else {
95
95
  const storeDir = FileSystemService.getOutputPath("store");
96
+ // spinner를 잠시 멈추기 (stop 혹은 pause)
97
+ spinner?.stop && spinner.stop();
96
98
  await EnsureSystem.ensureLocalStorage(storeDir, true);
99
+ // spinner를 다시 시작 (resume 혹은 start)
100
+ spinner?.start && spinner.start();
97
101
  await FileSystemService.writeFileOrSkip({
98
102
  dir: axiosDir,
99
103
  file: "refresh",
@@ -1 +1 @@
1
- {"version":3,"file":"AxiosGeneratorCommand.js","sourceRoot":"","sources":["../../../src/commands/axios/AxiosGeneratorCommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AxiosGeneratorCommand.js","sourceRoot":"","sources":["../../../src/commands/axios/AxiosGeneratorCommand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { BaseCommand } from "../../core/BaseCommand.js";
2
+ export declare class PushGeneratorCommand extends BaseCommand {
3
+ execute(): Promise<void>;
4
+ }
5
+ //# sourceMappingURL=PushGeneratorCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PushGeneratorCommand.d.ts","sourceRoot":"","sources":["../../../src/commands/git/PushGeneratorCommand.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAEvD,qBAAa,oBAAqB,SAAQ,WAAW;IAC7C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAkD/B"}
@@ -0,0 +1,51 @@
1
+ import fs from "fs-extra";
2
+ import { execSync } from "node:child_process";
3
+ import { cwd } from "node:process";
4
+ import { BaseCommand } from "../../core/BaseCommand.js";
5
+ export class PushGeneratorCommand extends BaseCommand {
6
+ async execute() {
7
+ await this.getContext();
8
+ const targetCwd = cwd();
9
+ try {
10
+ // Track untracked files in diff without staging actual content.
11
+ execSync("git add -N .", { cwd: targetCwd, stdio: "pipe" });
12
+ const statusSummary = execSync("git status --porcelain", { cwd: targetCwd, stdio: "pipe" }).toString().split("\n");
13
+ let finalReport = "";
14
+ for (const line of statusSummary) {
15
+ if (!line.trim())
16
+ continue;
17
+ const status = line.substring(0, 2).trim();
18
+ const filePath = line.substring(3).trim();
19
+ if (!filePath)
20
+ continue;
21
+ finalReport += `\n[${status}] FILE: ${filePath}\n`;
22
+ finalReport += "-------------------------------------------\n";
23
+ try {
24
+ const escapedPath = filePath.replace(/(["\\$`])/g, "\\$1");
25
+ const diff = execSync(`git diff --unified=0 --no-color -- "${escapedPath}"`, {
26
+ cwd: targetCwd,
27
+ stdio: "pipe",
28
+ }).toString();
29
+ const contentOnly = diff
30
+ .split("\n")
31
+ .filter((l) => (l.startsWith("+") && !l.startsWith("+++")) || (l.startsWith("-") && !l.startsWith("---")))
32
+ .join("\n");
33
+ console.log(contentOnly);
34
+ finalReport += contentOnly ? `${contentOnly}\n` : "";
35
+ }
36
+ catch {
37
+ finalReport += "(내용을 불러올 수 없거나 바이너리 파일입니다.)\n";
38
+ }
39
+ }
40
+ const outputPath = `${targetCwd}/comprehensive_diff.txt`;
41
+ await fs.writeFile(outputPath, finalReport);
42
+ console.log(`✅ comprehensive_diff.txt 생성 완료! (${outputPath})`);
43
+ }
44
+ catch (err) {
45
+ const message = err instanceof Error ? err.message : String(err);
46
+ console.error("오류 발생:", message);
47
+ throw err;
48
+ }
49
+ }
50
+ }
51
+ //# sourceMappingURL=PushGeneratorCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PushGeneratorCommand.js","sourceRoot":"","sources":["../../../src/commands/git/PushGeneratorCommand.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  export declare const axiosInstanceWithLocalStorageRefreshToken = "import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from \"axios\"\nimport qs from \"qs\"\n\nimport { ENV } from \"@/configs/env\"\nimport { apiLogger } from \"@/utils/logger/api-logger\"\nimport styledConsole from \"@/utils/logger/styled-console\"\nimport { tokenStorage } from \"@/store/local/index\"\nimport { refresh } from \"./refresh\"\n\nconst isDev = ENV.NODE_ENV === \"development\"\n\nexport class HttpClient {\n private instance: AxiosInstance\n\n constructor(config?: AxiosRequestConfig) {\n this.instance = axios.create({\n baseURL: ENV.API_BASE_URL,\n timeout: 5000,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n ...config,\n })\n this.setupInterceptors()\n }\n\n private setupInterceptors() {\n this.instance.interceptors.request.use(\n (config) => {\n const token = tokenStorage?.get()\n const isAccess = !!token && !!token.access\n if (isAccess) {\n config.headers.setAuthorization(`Bearer ${token.access}`);\n }\n return config\n },\n (error) => {\n return Promise.reject(error)\n },\n )\n\n this.instance.interceptors.response.use(\n (res) => {\n const { status, config: reqData, data: resData } = res\n if (isDev) apiLogger({ status, reqData, resData })\n return res\n },\n async (error: AxiosError) => {\n try {\n const { response: res, config: reqData } = error || {}\n const { status } = res || { status: 400 }\n const isUnAuthError = status === 401\n const isExpiredToken = status === 444\n\n if (isDev) apiLogger({ status, reqData, resData: error, method: \"error\" })\n\n if (isExpiredToken && reqData) {\n const refreshedConfig = await refresh(reqData)\n if (refreshedConfig) {\n return this.instance.request(refreshedConfig)\n }\n }\n\n if (isUnAuthError) {\n tokenStorage?.remove()\n }\n\n return Promise.reject(error)\n } catch (e) {\n styledConsole({\n method: \"error\",\n topic: \"UN_HANDLED\",\n title: \"axios-interceptor\",\n data: e,\n })\n return Promise.reject(e)\n }\n },\n )\n\n this.instance.defaults.paramsSerializer = (params) => {\n return qs.stringify(params, { arrayFormat: \"repeat\" })\n }\n }\n\n public getInstance(): AxiosInstance {\n return this.instance\n }\n}\n\nexport const instance = new HttpClient().getInstance()";
2
- export declare const axiosInstanceWithNextServerJwt = "import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from \"axios\"\nimport qs from \"qs\"\n\nimport { ENV } from \"@/configs/env\"\nimport { apiLogger } from \"@/utils/logger/api-logger\"\nimport styledConsole from \"@/utils/logger/styled-console\"\nimport { clearTokens } from \"@/utils/jwt\"\n\nconst isDev = ENV.NODE_ENV === \"development\"\n\nlet isRefreshing = false;\nlet refreshSubscribers: ((token: string) => void)[] = [];\n\nconst onRefreshed = (token: string) => {\n refreshSubscribers.forEach((callback) => callback(token));\n refreshSubscribers = [];\n};\n\nconst addRefreshSubscriber = (callback: (token: string) => void) => {\n refreshSubscribers.push(callback);\n};\n\nexport class HttpClient {\n private instance: AxiosInstance\n\n constructor(config?: AxiosRequestConfig) {\n this.instance = axios.create({\n baseURL: ENV.API_BASE_URL,\n timeout: 5000,\n withCredentials: true, \n headers: {\n \"Content-Type\": \"application/json\",\n },\n ...config,\n })\n this.setupInterceptors()\n }\n\n private setupInterceptors() {\n this.instance.interceptors.request.use(\n (config) => config,\n (error) => Promise.reject(error),\n )\n\n this.instance.interceptors.response.use(\n (res) => {\n const { status, config: reqData, data: resData } = res\n if (isDev) apiLogger({ status, reqData, resData })\n return res\n },\n async (error: AxiosError) => {\n const { response: res, config: reqData } = error || {}\n const { status } = res || { status: 400 }\n const originalRequest = reqData as AxiosRequestConfig & { _retry?: boolean }\n const isBrowser = typeof window !== 'undefined'\n const isUnAuthError = status === 401\n const isExpiredToken = status === 444\n\n if (isExpiredToken && originalRequest && !originalRequest._retry && isBrowser) {\n originalRequest._retry = true;\n\n if (isRefreshing) {\n return new Promise((resolve) => {\n addRefreshSubscriber(() => {\n resolve(this.instance(originalRequest));\n });\n });\n }\n\n isRefreshing = true;\n\n try {\n await axios.post('/api/auth/refresh'); \n \n isRefreshing = false;\n onRefreshed('success');\n return this.instance(originalRequest);\n } catch (refreshError) {\n isRefreshing = false;\n refreshSubscribers = [];\n if (typeof window !== 'undefined') {\n window.location.href = '/login'; \n }\n return Promise.reject(refreshError);\n }\n }\n\n if (isUnAuthError) {\n await clearTokens();\n }\n\n styledConsole({\n method: \"error\",\n topic: \"UN_HANDLED\",\n title: \"axios-interceptor\",\n data: error,\n })\n return Promise.reject(error)\n },\n )\n\n this.instance.defaults.paramsSerializer = (params) => {\n return qs.stringify(params, { arrayFormat: \"repeat\" })\n }\n }\n\n public getInstance(): AxiosInstance {\n return this.instance\n }\n}\n\nexport const instance = new HttpClient().getInstance()";
2
+ export declare const axiosInstanceWithNextServerJwt = "import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from \"axios\"\nimport qs from \"qs\"\n\nimport { ENV } from \"@/configs/env\"\nimport { apiLogger } from \"@/utils/logger/api-logger\"\nimport styledConsole from \"@/utils/logger/styled-console\"\nimport { clearTokens } from \"@/utils/jwt\"\n\nconst isDev = ENV.NODE_ENV === \"development\"\n\nlet isRefreshing = false;\nlet refreshSubscribers: ((token: string) => void)[] = [];\n\nconst onRefreshed = (token: string) => {\n refreshSubscribers.forEach((callback) => callback(token));\n refreshSubscribers = [];\n};\n\nconst addRefreshSubscriber = (callback: (token: string) => void) => {\n refreshSubscribers.push(callback);\n};\n\nexport class HttpClient {\n private instance: AxiosInstance\n\n constructor(config?: AxiosRequestConfig) {\n this.instance = axios.create({\n baseURL: ENV.API_BASE_URL,\n timeout: 5000,\n withCredentials: true, \n headers: {\n \"Content-Type\": \"application/json\",\n },\n ...config,\n })\n this.setupInterceptors()\n }\n\n private setupInterceptors() {\n this.instance.interceptors.request.use(\n (config) => config,\n (error) => Promise.reject(error),\n )\n\n this.instance.interceptors.response.use(\n (res) => {\n const { status, config: reqData, data: resData } = res\n if (isDev) apiLogger({ status, reqData, resData })\n return res\n },\n async (error: AxiosError) => {\n const { response: res, config: reqData } = error\n const { status } = res || { status: 400 }\n const originalRequest = reqData as AxiosRequestConfig & { _retry?: boolean }\n const isBrowser = typeof window !== 'undefined'\n const isUnAuthError = status === 401\n const isExpiredToken = status === 444\n\n if (isExpiredToken && originalRequest && !originalRequest._retry && isBrowser) {\n originalRequest._retry = true;\n\n if (isRefreshing) {\n return new Promise((resolve) => {\n addRefreshSubscriber(() => {\n resolve(this.instance(originalRequest));\n });\n });\n }\n\n isRefreshing = true;\n\n try {\n await axios.post('/api/auth/refresh'); \n \n isRefreshing = false;\n onRefreshed('success');\n return this.instance(originalRequest);\n } catch (refreshError) {\n isRefreshing = false;\n refreshSubscribers = [];\n if (typeof window !== 'undefined') {\n window.location.href = '/login'; \n }\n return Promise.reject(refreshError);\n }\n }\n\n if (isUnAuthError) {\n await clearTokens();\n }\n\n styledConsole({\n method: \"error\",\n topic: \"UN_HANDLED\",\n title: \"axios-interceptor\",\n data: error,\n })\n return Promise.reject(error)\n },\n )\n\n this.instance.defaults.paramsSerializer = (params) => {\n return qs.stringify(params, { arrayFormat: \"repeat\" })\n }\n }\n\n public getInstance(): AxiosInstance {\n return this.instance\n }\n}\n\nexport const instance = new HttpClient().getInstance()";
3
3
  export declare const axiosInstance = "import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from \"axios\"\nimport qs from \"qs\"\n\nimport { ENV } from \"@/configs/env\"\nimport { apiLogger } from \"@/utils/logger/api-logger\"\nimport styledConsole from \"@/utils/logger/styled-console\"\n\nconst isDev = ENV.NODE_ENV === \"development\"\n\nexport class HttpClient {\n private instance: AxiosInstance\n\n constructor(config?: AxiosRequestConfig) {\n this.instance = axios.create({\n baseURL: ENV.API_BASE_URL,\n timeout: 5000,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n ...config,\n })\n this.setupInterceptors()\n }\n\n private setupInterceptors() {\n this.instance.interceptors.request.use(\n (config) => {\n return config\n },\n (error) => {\n return Promise.reject(error)\n },\n )\n\n this.instance.interceptors.response.use(\n (res) => {\n const { status, config: reqData, data: resData } = res\n if (isDev) apiLogger({ status, reqData, resData })\n return res\n },\n async (error: AxiosError) => {\n try {\n const { response: res, config: reqData } = error || {}\n const { status } = res || { status: 400 }\n\n if (isDev) apiLogger({ status, reqData, resData: error, method: \"error\" })\n\n return Promise.reject(error)\n } catch (e) {\n styledConsole({\n method: \"error\",\n topic: \"UN_HANDLED\",\n title: \"axios-interceptor\",\n data: e,\n })\n return Promise.reject(e)\n }\n },\n )\n\n this.instance.defaults.paramsSerializer = (params) => {\n return qs.stringify(params, { arrayFormat: \"repeat\" })\n }\n }\n\n public getInstance(): AxiosInstance {\n return this.instance\n }\n}\n\nexport const instance = new HttpClient().getInstance()\n";
4
4
  //# sourceMappingURL=instance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../../src/template/axios/instance.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yCAAyC,skFA0FC,CAAA;AAEvD,eAAO,MAAM,8BAA8B,ovGA+GY,CAAA;AAEvD,eAAO,MAAM,aAAa,u4DAuEzB,CAAA"}
1
+ {"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../../src/template/axios/instance.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yCAAyC,skFA0FC,CAAA;AAEvD,eAAO,MAAM,8BAA8B,8uGA+GY,CAAA;AAEvD,eAAO,MAAM,aAAa,u4DAuEzB,CAAA"}
@@ -140,7 +140,7 @@ export class HttpClient {
140
140
  return res
141
141
  },
142
142
  async (error: AxiosError) => {
143
- const { response: res, config: reqData } = error || {}
143
+ const { response: res, config: reqData } = error
144
144
  const { status } = res || { status: 400 }
145
145
  const originalRequest = reqData as AxiosRequestConfig & { _retry?: boolean }
146
146
  const isBrowser = typeof window !== 'undefined'
@@ -1 +1 @@
1
- {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/template/axios/refresh.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,cA+EvB,CAAA"}
1
+ {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/template/axios/refresh.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,cAkExB,CAAA"}
@@ -1,81 +1,68 @@
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"
1
+ export const axiosRefresh = () => `import type { AxiosRequestConfig } from 'axios'
2
+ import axios from 'axios'
5
3
 
6
- type RefreshSubscriber = (access: string | null) => void
4
+ import { ENV } from '@/configs/env'
5
+ import { tokenStorage } from '@/store/local'
6
+ import type { TokenType } from '@/types/localStorageType'
7
+
8
+ import { instance } from './instance'
9
+
10
+ type Request = (access: string) => void
7
11
 
8
12
  let isTokenRefreshing = false
9
- let refreshSubscribers: RefreshSubscriber[] = []
13
+ let refreshSubscribers: Request[] = []
10
14
 
11
15
  const onTokenRefreshed = (access: string) => {
12
- refreshSubscribers.forEach((callback) => callback(access))
13
- refreshSubscribers = []
16
+ refreshSubscribers.forEach((callback: Request) => callback(access))
14
17
  }
15
18
 
16
- const onTokenRefreshFailed = () => {
17
- refreshSubscribers.forEach((callback) => callback(null))
18
- refreshSubscribers = []
19
+ const addRefreshSubscriber = (callback: Request) => {
20
+ refreshSubscribers.push(callback)
19
21
  }
20
22
 
21
- const refreshToken = async (): Promise<TokenType> => {
23
+ const refreshToken = async () => {
22
24
  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
-
25
+ const token = tokenStorage.get()
26
+ if (!token.refresh) throw new Error('not found refresh-token')
27
+ const { data: newToken }: { data: TokenType } = await axios.post(
28
+ \`\${ENV.API_BASE_URL}/v1/user/refresh/\`,
29
+ { refresh: token.refresh },
30
+ )
31
+ tokenStorage.set({ ...token, ...newToken })
35
32
  return newToken
36
33
  } catch (err) {
37
- tokenStorage?.remove()
38
-
39
- if (typeof window !== "undefined") {
40
- window.location.href = "/login"
41
- }
34
+ tokenStorage.remove()
42
35
  throw err
43
36
  }
44
37
  }
45
38
 
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"))
39
+ export const refresh = async (reqData?: AxiosRequestConfig) => {
40
+ const retriedOriginalRequest = new Promise((resolve) => {
41
+ addRefreshSubscriber((access: string) => {
42
+ if (reqData?.headers) {
43
+ reqData.headers.Authorization = 'Bearer ' + access
44
+ resolve(instance(reqData))
45
+ return
62
46
  }
47
+ resolve(null)
63
48
  })
49
+ })
64
50
 
65
- if (!isTokenRefreshing) {
51
+ if (!isTokenRefreshing) {
52
+ try {
66
53
  isTokenRefreshing = true
67
-
68
- refreshToken()
69
- .then((token) => {
70
- onTokenRefreshed(token.access)
71
- })
72
- .catch(() => {
73
- onTokenRefreshFailed()
74
- })
75
- .finally(() => {
76
- isTokenRefreshing = false
77
- })
54
+ const token = await refreshToken()
55
+ onTokenRefreshed(token.access)
56
+ refreshSubscribers = []
57
+ } catch (error) {
58
+ console.log(error)
59
+ throw error
60
+ } finally {
61
+ isTokenRefreshing = false
78
62
  }
79
- })
80
- }`;
63
+ }
64
+
65
+ return retriedOriginalRequest
66
+ }
67
+ `;
81
68
  //# sourceMappingURL=refresh.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../../src/template/axios/refresh.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkEjC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "subaya",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "main": "dist/index.js",
5
5
  "bin": {
6
6
  "subaya": "./dist/index.js"