@uniai-fe/util-functions 0.1.1 → 0.2.1

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.
@@ -0,0 +1,104 @@
1
+ 'use strict';
2
+
3
+ // src/runtime-env/device.ts
4
+ var apple = ["iPhone", "iPad", "iPod", "Mac", "Macintosh"];
5
+ var tablet = ["Tablet", "iPad", "playbook", "silk"];
6
+ var mobile = [
7
+ "Android",
8
+ "Mobile",
9
+ "iPhone",
10
+ "iPod",
11
+ "iPad",
12
+ "BlackBerry",
13
+ "IEMobile",
14
+ "Kindle",
15
+ "NetFront",
16
+ "Silk-Accelerated",
17
+ "hpwOS",
18
+ "webOS",
19
+ "Fennec",
20
+ "Minimo",
21
+ "Opera Mobi",
22
+ "Opera Mini",
23
+ "Blazer",
24
+ "Dolfin",
25
+ "Dolphin",
26
+ "Skyfire",
27
+ "Zune"
28
+ ];
29
+ var userAgentCollection = {
30
+ apple,
31
+ tablet,
32
+ mobile
33
+ };
34
+ var setLowerCase = (v) => String(v).toLowerCase();
35
+ var deviceLowerCasePatterns = {
36
+ apple: apple.map(setLowerCase),
37
+ tablet: tablet.map(setLowerCase),
38
+ mobile: mobile.map(setLowerCase)
39
+ };
40
+ var checkResponsiveDevice = (userAgent) => {
41
+ const { mobile: mobile2, tablet: tablet2 } = deviceLowerCasePatterns;
42
+ const clientAgent = setLowerCase(userAgent);
43
+ const isTablet = tablet2.some((agent) => clientAgent.includes(agent));
44
+ const isMobile = mobile2.some((agent) => clientAgent.includes(agent));
45
+ if (isMobile) return isTablet ? "tablet" : "mobile";
46
+ return "desktop";
47
+ };
48
+ var checkAppleDevice = (userAgent) => {
49
+ const { apple: apple2 } = deviceLowerCasePatterns;
50
+ const clientAgent = setLowerCase(userAgent);
51
+ return apple2.some((agent) => clientAgent.includes(agent));
52
+ };
53
+
54
+ // src/runtime-env/pwa.ts
55
+ var DISPLAY_MODE_QUERIES = [
56
+ { mode: "standalone", query: "(display-mode: standalone)" },
57
+ { mode: "fullscreen", query: "(display-mode: fullscreen)" },
58
+ { mode: "minimal-ui", query: "(display-mode: minimal-ui)" },
59
+ { mode: "browser", query: "(display-mode: browser)" }
60
+ ];
61
+ var STANDALONE_DISPLAY_MODES = /* @__PURE__ */ new Set([
62
+ "standalone",
63
+ "fullscreen",
64
+ "minimal-ui"
65
+ ]);
66
+ var isWindowAvailable = () => typeof window !== "undefined";
67
+ var detectDisplayMode = () => {
68
+ if (!isWindowAvailable() || typeof window.matchMedia !== "function") {
69
+ return "unknown";
70
+ }
71
+ for (const { mode, query } of DISPLAY_MODE_QUERIES) {
72
+ if (window.matchMedia(query).matches) {
73
+ return mode;
74
+ }
75
+ }
76
+ return "unknown";
77
+ };
78
+ var detectNavigatorStandalone = () => {
79
+ if (!isWindowAvailable()) {
80
+ return false;
81
+ }
82
+ const nav = window.navigator;
83
+ return typeof nav.standalone === "boolean" ? Boolean(nav.standalone) : false;
84
+ };
85
+ var getPwaRuntimeInfo = () => {
86
+ const displayMode = detectDisplayMode();
87
+ const navigatorStandalone = detectNavigatorStandalone();
88
+ if (displayMode === "unknown" && navigatorStandalone) {
89
+ return { isStandalone: true, displayMode: "standalone" };
90
+ }
91
+ return {
92
+ displayMode,
93
+ isStandalone: displayMode === "unknown" ? navigatorStandalone : STANDALONE_DISPLAY_MODES.has(displayMode)
94
+ };
95
+ };
96
+ var checkStandaloneApp = getPwaRuntimeInfo;
97
+
98
+ exports.checkAppleDevice = checkAppleDevice;
99
+ exports.checkResponsiveDevice = checkResponsiveDevice;
100
+ exports.checkStandaloneApp = checkStandaloneApp;
101
+ exports.getPwaRuntimeInfo = getPwaRuntimeInfo;
102
+ exports.userAgentCollection = userAgentCollection;
103
+ //# sourceMappingURL=index.cjs.map
104
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/runtime-env/device.ts","../../src/runtime-env/pwa.ts"],"names":["mobile","tablet","apple"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { BreakPointType, DeviceCategoryType } from \"./types\";\n\n/**\n * Apple 디바이스\n */\nconst apple: string[] = [\"iPhone\", \"iPad\", \"iPod\", \"Mac\", \"Macintosh\"];\n/**\n * 태블릿 디바이스\n */\nconst tablet: string[] = [\"Tablet\", \"iPad\", \"playbook\", \"silk\"];\n/**\n * 모바일 디바이스\n */\nconst mobile: string[] = [\n \"Android\",\n \"Mobile\",\n \"iPhone\",\n \"iPod\",\n \"iPad\",\n \"BlackBerry\",\n \"IEMobile\",\n \"Kindle\",\n \"NetFront\",\n \"Silk-Accelerated\",\n \"hpwOS\",\n \"webOS\",\n \"Fennec\",\n \"Minimo\",\n \"Opera Mobi\",\n \"Opera Mini\",\n \"Blazer\",\n \"Dolfin\",\n \"Dolphin\",\n \"Skyfire\",\n \"Zune\",\n];\n\nexport const userAgentCollection: Record<DeviceCategoryType, string[]> = {\n apple,\n tablet,\n mobile,\n};\n\nconst setLowerCase = (v: unknown): string => String(v).toLowerCase();\nconst deviceLowerCasePatterns: Record<DeviceCategoryType, string[]> = {\n apple: apple.map(setLowerCase),\n tablet: tablet.map(setLowerCase),\n mobile: mobile.map(setLowerCase),\n};\n\n/**\n * 반응형 웹 breakpoint 감지\n */\nexport const checkResponsiveDevice = (userAgent: string): BreakPointType => {\n const { mobile, tablet } = deviceLowerCasePatterns;\n const clientAgent = setLowerCase(userAgent);\n const isTablet = tablet.some(agent => clientAgent.includes(agent));\n const isMobile = mobile.some(agent => clientAgent.includes(agent));\n\n if (isMobile) return isTablet ? \"tablet\" : \"mobile\";\n\n return \"desktop\";\n};\n\n/**\n * 애플 디바이스 감지\n */\nexport const checkAppleDevice = (userAgent: string): boolean => {\n const { apple } = deviceLowerCasePatterns;\n const clientAgent = setLowerCase(userAgent);\n return apple.some(agent => clientAgent.includes(agent));\n};\n","import type { DisplayMode, PwaRuntimeInfo } from \"./types\";\n\nconst DISPLAY_MODE_QUERIES: Array<{ mode: DisplayMode; query: string }> = [\n { mode: \"standalone\", query: \"(display-mode: standalone)\" },\n { mode: \"fullscreen\", query: \"(display-mode: fullscreen)\" },\n { mode: \"minimal-ui\", query: \"(display-mode: minimal-ui)\" },\n { mode: \"browser\", query: \"(display-mode: browser)\" },\n];\n\nconst STANDALONE_DISPLAY_MODES: ReadonlySet<DisplayMode> = new Set([\n \"standalone\",\n \"fullscreen\",\n \"minimal-ui\",\n]);\n\nconst isWindowAvailable = (): boolean => typeof window !== \"undefined\";\n\nconst detectDisplayMode = (): DisplayMode => {\n if (!isWindowAvailable() || typeof window.matchMedia !== \"function\") {\n return \"unknown\";\n }\n\n for (const { mode, query } of DISPLAY_MODE_QUERIES) {\n if (window.matchMedia(query).matches) {\n return mode;\n }\n }\n\n return \"unknown\";\n};\n\nconst detectNavigatorStandalone = (): boolean => {\n if (!isWindowAvailable()) {\n return false;\n }\n\n const nav = window.navigator as Navigator & { standalone?: boolean };\n return typeof nav.standalone === \"boolean\" ? Boolean(nav.standalone) : false;\n};\n\nexport const getPwaRuntimeInfo = (): PwaRuntimeInfo => {\n const displayMode = detectDisplayMode();\n const navigatorStandalone = detectNavigatorStandalone();\n\n if (displayMode === \"unknown\" && navigatorStandalone) {\n return { isStandalone: true, displayMode: \"standalone\" };\n }\n\n return {\n displayMode,\n isStandalone:\n displayMode === \"unknown\"\n ? navigatorStandalone\n : STANDALONE_DISPLAY_MODES.has(displayMode),\n };\n};\n\nexport const checkStandaloneApp = getPwaRuntimeInfo;\n"]}
@@ -0,0 +1,27 @@
1
+ type DeviceCategoryType = "apple" | "tablet" | "mobile";
2
+ type BreakPointType = "desktop" | "tablet" | "mobile";
3
+ interface ResponsiveDeviceStateType {
4
+ hardware: BreakPointType;
5
+ viewport: BreakPointType;
6
+ }
7
+ type ViewportOrientationStateType = "portrait" | "landscape";
8
+ type DisplayMode = "browser" | "standalone" | "minimal-ui" | "fullscreen" | "unknown";
9
+ interface PwaRuntimeInfo {
10
+ isStandalone: boolean;
11
+ displayMode: DisplayMode;
12
+ }
13
+
14
+ declare const userAgentCollection: Record<DeviceCategoryType, string[]>;
15
+ /**
16
+ * 반응형 웹 breakpoint 감지
17
+ */
18
+ declare const checkResponsiveDevice: (userAgent: string) => BreakPointType;
19
+ /**
20
+ * 애플 디바이스 감지
21
+ */
22
+ declare const checkAppleDevice: (userAgent: string) => boolean;
23
+
24
+ declare const getPwaRuntimeInfo: () => PwaRuntimeInfo;
25
+ declare const checkStandaloneApp: () => PwaRuntimeInfo;
26
+
27
+ export { type BreakPointType, type DeviceCategoryType, type DisplayMode, type PwaRuntimeInfo, type ResponsiveDeviceStateType, type ViewportOrientationStateType, checkAppleDevice, checkResponsiveDevice, checkStandaloneApp, getPwaRuntimeInfo, userAgentCollection };
@@ -0,0 +1,27 @@
1
+ type DeviceCategoryType = "apple" | "tablet" | "mobile";
2
+ type BreakPointType = "desktop" | "tablet" | "mobile";
3
+ interface ResponsiveDeviceStateType {
4
+ hardware: BreakPointType;
5
+ viewport: BreakPointType;
6
+ }
7
+ type ViewportOrientationStateType = "portrait" | "landscape";
8
+ type DisplayMode = "browser" | "standalone" | "minimal-ui" | "fullscreen" | "unknown";
9
+ interface PwaRuntimeInfo {
10
+ isStandalone: boolean;
11
+ displayMode: DisplayMode;
12
+ }
13
+
14
+ declare const userAgentCollection: Record<DeviceCategoryType, string[]>;
15
+ /**
16
+ * 반응형 웹 breakpoint 감지
17
+ */
18
+ declare const checkResponsiveDevice: (userAgent: string) => BreakPointType;
19
+ /**
20
+ * 애플 디바이스 감지
21
+ */
22
+ declare const checkAppleDevice: (userAgent: string) => boolean;
23
+
24
+ declare const getPwaRuntimeInfo: () => PwaRuntimeInfo;
25
+ declare const checkStandaloneApp: () => PwaRuntimeInfo;
26
+
27
+ export { type BreakPointType, type DeviceCategoryType, type DisplayMode, type PwaRuntimeInfo, type ResponsiveDeviceStateType, type ViewportOrientationStateType, checkAppleDevice, checkResponsiveDevice, checkStandaloneApp, getPwaRuntimeInfo, userAgentCollection };
@@ -0,0 +1,98 @@
1
+ // src/runtime-env/device.ts
2
+ var apple = ["iPhone", "iPad", "iPod", "Mac", "Macintosh"];
3
+ var tablet = ["Tablet", "iPad", "playbook", "silk"];
4
+ var mobile = [
5
+ "Android",
6
+ "Mobile",
7
+ "iPhone",
8
+ "iPod",
9
+ "iPad",
10
+ "BlackBerry",
11
+ "IEMobile",
12
+ "Kindle",
13
+ "NetFront",
14
+ "Silk-Accelerated",
15
+ "hpwOS",
16
+ "webOS",
17
+ "Fennec",
18
+ "Minimo",
19
+ "Opera Mobi",
20
+ "Opera Mini",
21
+ "Blazer",
22
+ "Dolfin",
23
+ "Dolphin",
24
+ "Skyfire",
25
+ "Zune"
26
+ ];
27
+ var userAgentCollection = {
28
+ apple,
29
+ tablet,
30
+ mobile
31
+ };
32
+ var setLowerCase = (v) => String(v).toLowerCase();
33
+ var deviceLowerCasePatterns = {
34
+ apple: apple.map(setLowerCase),
35
+ tablet: tablet.map(setLowerCase),
36
+ mobile: mobile.map(setLowerCase)
37
+ };
38
+ var checkResponsiveDevice = (userAgent) => {
39
+ const { mobile: mobile2, tablet: tablet2 } = deviceLowerCasePatterns;
40
+ const clientAgent = setLowerCase(userAgent);
41
+ const isTablet = tablet2.some((agent) => clientAgent.includes(agent));
42
+ const isMobile = mobile2.some((agent) => clientAgent.includes(agent));
43
+ if (isMobile) return isTablet ? "tablet" : "mobile";
44
+ return "desktop";
45
+ };
46
+ var checkAppleDevice = (userAgent) => {
47
+ const { apple: apple2 } = deviceLowerCasePatterns;
48
+ const clientAgent = setLowerCase(userAgent);
49
+ return apple2.some((agent) => clientAgent.includes(agent));
50
+ };
51
+
52
+ // src/runtime-env/pwa.ts
53
+ var DISPLAY_MODE_QUERIES = [
54
+ { mode: "standalone", query: "(display-mode: standalone)" },
55
+ { mode: "fullscreen", query: "(display-mode: fullscreen)" },
56
+ { mode: "minimal-ui", query: "(display-mode: minimal-ui)" },
57
+ { mode: "browser", query: "(display-mode: browser)" }
58
+ ];
59
+ var STANDALONE_DISPLAY_MODES = /* @__PURE__ */ new Set([
60
+ "standalone",
61
+ "fullscreen",
62
+ "minimal-ui"
63
+ ]);
64
+ var isWindowAvailable = () => typeof window !== "undefined";
65
+ var detectDisplayMode = () => {
66
+ if (!isWindowAvailable() || typeof window.matchMedia !== "function") {
67
+ return "unknown";
68
+ }
69
+ for (const { mode, query } of DISPLAY_MODE_QUERIES) {
70
+ if (window.matchMedia(query).matches) {
71
+ return mode;
72
+ }
73
+ }
74
+ return "unknown";
75
+ };
76
+ var detectNavigatorStandalone = () => {
77
+ if (!isWindowAvailable()) {
78
+ return false;
79
+ }
80
+ const nav = window.navigator;
81
+ return typeof nav.standalone === "boolean" ? Boolean(nav.standalone) : false;
82
+ };
83
+ var getPwaRuntimeInfo = () => {
84
+ const displayMode = detectDisplayMode();
85
+ const navigatorStandalone = detectNavigatorStandalone();
86
+ if (displayMode === "unknown" && navigatorStandalone) {
87
+ return { isStandalone: true, displayMode: "standalone" };
88
+ }
89
+ return {
90
+ displayMode,
91
+ isStandalone: displayMode === "unknown" ? navigatorStandalone : STANDALONE_DISPLAY_MODES.has(displayMode)
92
+ };
93
+ };
94
+ var checkStandaloneApp = getPwaRuntimeInfo;
95
+
96
+ export { checkAppleDevice, checkResponsiveDevice, checkStandaloneApp, getPwaRuntimeInfo, userAgentCollection };
97
+ //# sourceMappingURL=index.mjs.map
98
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/runtime-env/device.ts","../../src/runtime-env/pwa.ts"],"names":["mobile","tablet","apple"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { BreakPointType, DeviceCategoryType } from \"./types\";\n\n/**\n * Apple 디바이스\n */\nconst apple: string[] = [\"iPhone\", \"iPad\", \"iPod\", \"Mac\", \"Macintosh\"];\n/**\n * 태블릿 디바이스\n */\nconst tablet: string[] = [\"Tablet\", \"iPad\", \"playbook\", \"silk\"];\n/**\n * 모바일 디바이스\n */\nconst mobile: string[] = [\n \"Android\",\n \"Mobile\",\n \"iPhone\",\n \"iPod\",\n \"iPad\",\n \"BlackBerry\",\n \"IEMobile\",\n \"Kindle\",\n \"NetFront\",\n \"Silk-Accelerated\",\n \"hpwOS\",\n \"webOS\",\n \"Fennec\",\n \"Minimo\",\n \"Opera Mobi\",\n \"Opera Mini\",\n \"Blazer\",\n \"Dolfin\",\n \"Dolphin\",\n \"Skyfire\",\n \"Zune\",\n];\n\nexport const userAgentCollection: Record<DeviceCategoryType, string[]> = {\n apple,\n tablet,\n mobile,\n};\n\nconst setLowerCase = (v: unknown): string => String(v).toLowerCase();\nconst deviceLowerCasePatterns: Record<DeviceCategoryType, string[]> = {\n apple: apple.map(setLowerCase),\n tablet: tablet.map(setLowerCase),\n mobile: mobile.map(setLowerCase),\n};\n\n/**\n * 반응형 웹 breakpoint 감지\n */\nexport const checkResponsiveDevice = (userAgent: string): BreakPointType => {\n const { mobile, tablet } = deviceLowerCasePatterns;\n const clientAgent = setLowerCase(userAgent);\n const isTablet = tablet.some(agent => clientAgent.includes(agent));\n const isMobile = mobile.some(agent => clientAgent.includes(agent));\n\n if (isMobile) return isTablet ? \"tablet\" : \"mobile\";\n\n return \"desktop\";\n};\n\n/**\n * 애플 디바이스 감지\n */\nexport const checkAppleDevice = (userAgent: string): boolean => {\n const { apple } = deviceLowerCasePatterns;\n const clientAgent = setLowerCase(userAgent);\n return apple.some(agent => clientAgent.includes(agent));\n};\n","import type { DisplayMode, PwaRuntimeInfo } from \"./types\";\n\nconst DISPLAY_MODE_QUERIES: Array<{ mode: DisplayMode; query: string }> = [\n { mode: \"standalone\", query: \"(display-mode: standalone)\" },\n { mode: \"fullscreen\", query: \"(display-mode: fullscreen)\" },\n { mode: \"minimal-ui\", query: \"(display-mode: minimal-ui)\" },\n { mode: \"browser\", query: \"(display-mode: browser)\" },\n];\n\nconst STANDALONE_DISPLAY_MODES: ReadonlySet<DisplayMode> = new Set([\n \"standalone\",\n \"fullscreen\",\n \"minimal-ui\",\n]);\n\nconst isWindowAvailable = (): boolean => typeof window !== \"undefined\";\n\nconst detectDisplayMode = (): DisplayMode => {\n if (!isWindowAvailable() || typeof window.matchMedia !== \"function\") {\n return \"unknown\";\n }\n\n for (const { mode, query } of DISPLAY_MODE_QUERIES) {\n if (window.matchMedia(query).matches) {\n return mode;\n }\n }\n\n return \"unknown\";\n};\n\nconst detectNavigatorStandalone = (): boolean => {\n if (!isWindowAvailable()) {\n return false;\n }\n\n const nav = window.navigator as Navigator & { standalone?: boolean };\n return typeof nav.standalone === \"boolean\" ? Boolean(nav.standalone) : false;\n};\n\nexport const getPwaRuntimeInfo = (): PwaRuntimeInfo => {\n const displayMode = detectDisplayMode();\n const navigatorStandalone = detectNavigatorStandalone();\n\n if (displayMode === \"unknown\" && navigatorStandalone) {\n return { isStandalone: true, displayMode: \"standalone\" };\n }\n\n return {\n displayMode,\n isStandalone:\n displayMode === \"unknown\"\n ? navigatorStandalone\n : STANDALONE_DISPLAY_MODES.has(displayMode),\n };\n};\n\nexport const checkStandaloneApp = getPwaRuntimeInfo;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniai-fe/util-functions",
3
- "version": "0.1.1",
3
+ "version": "0.2.1",
4
4
  "description": "TypeScript Utilities for UNIAI FE Projects",
5
5
  "type": "module",
6
6
  "private": false,
@@ -12,7 +12,7 @@
12
12
  },
13
13
  "packageManager": "pnpm@10.22.0",
14
14
  "engines": {
15
- "node": ">=22",
15
+ "node": ">=24",
16
16
  "pnpm": ">=10"
17
17
  },
18
18
  "author": {
@@ -44,6 +44,12 @@
44
44
  "require": "./dist/index.cjs",
45
45
  "default": "./dist/index.mjs"
46
46
  },
47
+ "./runtime-env": {
48
+ "types": "./dist/runtime-env/index.d.ts",
49
+ "import": "./dist/runtime-env/index.mjs",
50
+ "require": "./dist/runtime-env/index.cjs",
51
+ "default": "./dist/runtime-env/index.mjs"
52
+ },
47
53
  "./api": {
48
54
  "types": "./dist/api/index.d.ts",
49
55
  "import": "./dist/api/index.mjs",