Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,7 @@ dist
!.yarn/releases
!.yarn/sdks
!.yarn/versions
.yarnrc.yml.temp
.yarnrc.yml.temp

# rollup
.rollup.cache
35 changes: 13 additions & 22 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,33 +1,24 @@
{
"name": "@ummgoban/shared",
"version": "0.0.1-alpha.9",
"version": "0.0.1-alpha.19",
"description": "ummgoban 공통 패키지",
"main": "dist/index.js",
"module": "dist/index.esm.js",
"types": "dist/index.d.ts",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.esm.js",
"require": "./dist/index.js",
"types": "./dist/index.d.ts"
"require": "./dist/index.js"
},
"./react": {
"types": "./dist/ummgoban-react/index.d.ts"
},
"./types": {
"types": "./dist/lib/types/index.d.ts"
},
"./utils": {
"types": "./dist/lib/utils/index.d.ts"
},
"./http": {
"types": "./dist/ummgoban-http/index.d.ts"
"./network": {
"types": "./dist/network/index.d.ts"
},
"./error": {
"types": "./dist/ummgoban-http/error/index.d.ts"
"./lib": {
"types": "./dist/lib/index.d.ts"
},
"./api-client": {
"types": "./dist/ummgoban-http/api-client/index.d.ts"
"./react": {
"types": "./dist/react/index.d.ts"
}
},
"files": [
Expand Down Expand Up @@ -56,11 +47,13 @@
"registry": "https://npm.pkg.github.com/"
},
"peerDependencies": {
"axios": ">=1.7.4",
"react": ">=18.0.0"
},
"devDependencies": {
"@rollup/plugin-alias": "^5.1.1",
"@rollup/plugin-commonjs": "^28.0.0",
"@rollup/plugin-json": "^6.1.0",
"@rollup/plugin-node-resolve": "^16.0.0",
"@rollup/plugin-typescript": "^12.0.0",
"@testing-library/dom": "^10.4.0",
Expand All @@ -72,6 +65,7 @@
"@typescript-eslint/eslint-plugin": "^8.23.0",
"@typescript-eslint/parser": "^8.23.0",
"@vitejs/plugin-react": "^4.5.0",
"axios": "^1.7.4",
"dotenv": "^16.4.7",
"eslint": "^9.27.0",
"eslint-config-prettier": "^10.1.5",
Expand All @@ -82,15 +76,12 @@
"jiti": "^2.4.2",
"jsdom": "^26.1.0",
"prettier": "^3.5.3",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"rollup": "^4.41.1",
"tslib": "^2.8.1",
"typescript": "^5.0.0",
"vite": "^6.3.5",
"vitest": "^3.1.4"
},
"dependencies": {
"axios": "^1.7.4",
"react": "^18.0.0"
}
}
10 changes: 8 additions & 2 deletions rollup.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import typescript from '@rollup/plugin-typescript';
import commonjs from '@rollup/plugin-commonjs';
import nodeResolve from '@rollup/plugin-node-resolve';
import alias from '@rollup/plugin-alias';
import json from '@rollup/plugin-json';
import path from 'path';
import {fileURLToPath} from 'url';

Expand All @@ -23,13 +24,18 @@ export default {
sourcemap: true,
},
],
external: [...Object.keys(pkg.peerDependencies || {}), ...Object.keys(pkg.dependencies || {})],
external: [...Object.keys(pkg.peerDependencies || {}), ...Object.keys(pkg.dependencies || {}), 'axios', 'react'],
plugins: [
alias({
entries: [{find: '@', replacement: path.resolve(__dirname, 'src')}],
}),
nodeResolve({extensions: ['.js', '.jsx', '.ts', '.tsx']}),
nodeResolve({
extensions: ['.js', '.jsx', '.ts', '.tsx'],
browser: true,
preferBuiltins: false,
}),
commonjs(),
json(),
typescript({
tsconfig: './tsconfig.build.json',
declaration: true,
Expand Down
6 changes: 3 additions & 3 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// http
export * from './ummgoban-http';
// network
export * from './network';

// lib
export * from './lib';

// react
export * from './ummgoban-react';
export * from './react';
2 changes: 1 addition & 1 deletion src/lib/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// utils
export * from './uitls';
export * from './utils';

// types
export * from './types';
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
47 changes: 47 additions & 0 deletions src/network/api-client/api-client.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import ApiClient from './api-client';
import type {ApiClientOptions} from './api-client';

describe('ApiClient', () => {
it('should be defined', () => {
expect(ApiClient).toBeDefined();
});

it('should throw error when getInstance is called before create', () => {
expect(() => ApiClient.getInstance()).toThrowError(
'ApiClient is not initialized:\nApiClient.create() must be called before getInstance()',
);
});

it('should create instance', () => {
const spyGetStorage = vi.fn(() => Promise.resolve(null));
const spySetStorage = vi.fn(() => Promise.resolve());
const spyRefreshAccessToken = vi.fn(() => Promise.resolve(null));

const options: ApiClientOptions = {
serverApiBaseUrl: 'https://api.example.com',
sessionOptions: {
getStorage: spyGetStorage,
setStorage: spySetStorage,
refreshAccessToken: spyRefreshAccessToken,
},
};
const instance = ApiClient.create(options);
expect(instance).toBeDefined();
expect(spyGetStorage).not.toHaveBeenCalled();
expect(spySetStorage).not.toHaveBeenCalled();
expect(spyRefreshAccessToken).not.toHaveBeenCalled();
});

it('should get instance', () => {
const options: ApiClientOptions = {
serverApiBaseUrl: 'https://api.example.com',
sessionOptions: {
getStorage: () => Promise.resolve(null),
setStorage: () => Promise.resolve(),
refreshAccessToken: () => Promise.resolve(null),
},
};
const instance = ApiClient.create(options);
expect(ApiClient.getInstance()).toBe(instance);
});
});
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import axios, {AxiosInstance, InternalAxiosRequestConfig, AxiosResponse, AxiosRequestConfig, AxiosError} from 'axios';

import {CustomError} from '../error';

import {SessionType, StorageKeyType} from '@/lib/types';
import {SessionType, StorageKeyType} from 'lib/types';

export interface ApiClientOptions {
serverApiBaseUrl: string;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import ApiClient from './api-client';
import type {ApiClientOptions} from './api-client';

export default ApiClient;
export {ApiClientOptions};
export {ApiClient, ApiClientOptions};
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ const TestMultiComponent = () => {

describe('CombineProviders', () => {
it('should render children with a single provider', () => {
const providers = [{provider: TestProvider, props: {value: {value: 'test'}}}] as const satisfies Providers<
const providers = [{provider: TestProvider, props: {value: {value: 'test'}}}] satisfies Providers<
[ProviderEntry<typeof TestProvider>]
>;
const CombineProviders = combineProviders(providers);
Expand All @@ -46,7 +46,7 @@ describe('CombineProviders', () => {
const providers = [
{provider: TestProvider, props: {value: {value: 'test'}}},
{provider: ThemeProvider, props: {value: {theme: 'dark'}}},
] as const satisfies Providers<[ProviderEntry<typeof TestProvider>, ProviderEntry<typeof ThemeProvider>]>;
] satisfies Providers<[ProviderEntry<typeof TestProvider>, ProviderEntry<typeof ThemeProvider>]>;
const CombineProviders = combineProviders(providers);

render(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export type Providers<T extends readonly ProviderEntry<any>[]> = T;
* const providers = [
* {provider: ThemeProvider, props: {value: {theme: 'dark'}}},
* {provider: TestProvider, props: {value: {value: 'test'}}},
* ] as const satisfies Providers<[
* ] satisfies Providers<[
* ProviderEntry<typeof ThemeProvider>,
* ProviderEntry<typeof TestProvider>,
* ]>;
Expand Down
File renamed without changes.
3 changes: 2 additions & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
"allowSyntheticDefaultImports": true,
"baseUrl": "./src",
"paths": {
"@/*": ["*"]
"react": ["node_modules/react"],
"@ummgoban/*": ["src/*"]
}
},
"include": ["src/**/*", "vitest.setup.ts", "jest-dom.d.ts"],
Expand Down
16 changes: 16 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -797,6 +797,20 @@ __metadata:
languageName: node
linkType: hard

"@rollup/plugin-json@npm:^6.1.0":
version: 6.1.0
resolution: "@rollup/plugin-json@npm:6.1.0"
dependencies:
"@rollup/pluginutils": ^5.1.0
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
checksum: cc018d20c80242a2b8b44fae61a968049cf31bb8406218187cc7cda35747616594e79452dd65722e7da6dd825b392e90d4599d43cd4461a02fefa2865945164e
languageName: node
linkType: hard

"@rollup/plugin-node-resolve@npm:^16.0.0":
version: 16.0.1
resolution: "@rollup/plugin-node-resolve@npm:16.0.1"
Expand Down Expand Up @@ -1308,6 +1322,7 @@ __metadata:
dependencies:
"@rollup/plugin-alias": ^5.1.1
"@rollup/plugin-commonjs": ^28.0.0
"@rollup/plugin-json": ^6.1.0
"@rollup/plugin-node-resolve": ^16.0.0
"@rollup/plugin-typescript": ^12.0.0
"@testing-library/dom": ^10.4.0
Expand Down Expand Up @@ -1338,6 +1353,7 @@ __metadata:
vite: ^6.3.5
vitest: ^3.1.4
peerDependencies:
axios: ">=1.7.4"
react: ">=18.0.0"
languageName: unknown
linkType: soft
Expand Down