@uniai-fe/util-functions 0.2.0 → 0.2.2

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.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "TypeScript Utilities for UNIAI FE Projects",
5
5
  "type": "module",
6
6
  "private": false,
@@ -10,7 +10,7 @@
10
10
  "publishConfig": {
11
11
  "access": "public"
12
12
  },
13
- "packageManager": "pnpm@10.22.0",
13
+ "packageManager": "pnpm@10.23.0",
14
14
  "engines": {
15
15
  "node": ">=24",
16
16
  "pnpm": ">=10"
@@ -44,11 +44,11 @@
44
44
  "require": "./dist/index.cjs",
45
45
  "default": "./dist/index.mjs"
46
46
  },
47
- "./user-agent": {
48
- "types": "./dist/user-agent/index.d.ts",
49
- "import": "./dist/user-agent/index.mjs",
50
- "require": "./dist/user-agent/index.cjs",
51
- "default": "./dist/user-agent/index.mjs"
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
52
  },
53
53
  "./api": {
54
54
  "types": "./dist/api/index.d.ts",
@@ -1,62 +0,0 @@
1
- 'use strict';
2
-
3
- // src/user-agent/device-patterns.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 devicePatterns = {
30
- apple,
31
- tablet,
32
- mobile
33
- };
34
- var device_patterns_default = devicePatterns;
35
-
36
- // src/user-agent/module.ts
37
- var setLowerCase = (v) => String(v).toLowerCase();
38
- var deviceLowerCasePatterns = Object.fromEntries(
39
- Object.entries(device_patterns_default).map(([key, value]) => [
40
- key,
41
- value.map(setLowerCase)
42
- ])
43
- );
44
- var checkResponsiveDevice = (userAgent) => {
45
- const { mobile: mobile2, tablet: tablet2 } = deviceLowerCasePatterns;
46
- const clientAgent = setLowerCase(userAgent);
47
- const isTablet = tablet2.some((agent) => clientAgent.includes(agent));
48
- const isMobile = mobile2.some((agent) => clientAgent.includes(agent));
49
- if (isMobile) return isTablet ? "tablet" : "mobile";
50
- return "desktop";
51
- };
52
- var checkAppleDevice = (userAgent) => {
53
- const { apple: apple2 } = deviceLowerCasePatterns;
54
- const clientAgent = setLowerCase(userAgent);
55
- return apple2.some((agent) => clientAgent.includes(agent));
56
- };
57
-
58
- exports.checkAppleDevice = checkAppleDevice;
59
- exports.checkResponsiveDevice = checkResponsiveDevice;
60
- exports.devicePatterns = device_patterns_default;
61
- //# sourceMappingURL=index.cjs.map
62
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/user-agent/device-patterns.ts","../../src/user-agent/module.ts"],"names":["mobile","tablet","apple"],"mappings":";;;AAEA,IAAM,QAAkB,CAAC,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,OAAO,WAAW,CAAA;AACrE,IAAM,MAAA,GAAmB,CAAC,QAAA,EAAU,MAAA,EAAQ,YAAY,MAAM,CAAA;AAC9D,IAAM,MAAA,GAAmB;AAAA,EACvB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,kBAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,cAAA,GAAuD;AAAA,EAC3D,KAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAO,uBAAA,GAAQ;;;AC/Bf,IAAM,eAAe,CAAC,CAAA,KAAuB,MAAA,CAAO,CAAC,EAAE,WAAA,EAAY;AACnE,IAAM,0BAA0B,MAAA,CAAO,WAAA;AAAA,EACrC,MAAA,CAAO,QAAQ,uBAAc,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAAA,IACnD,GAAA;AAAA,IACA,KAAA,CAAM,IAAI,YAAY;AAAA,GACvB;AACH,CAAA;AAKO,IAAM,qBAAA,GAAwB,CAAC,SAAA,KAAsC;AAC1E,EAAA,MAAM,EAAE,MAAA,EAAAA,OAAAA,EAAQ,MAAA,EAAAC,SAAO,GAAI,uBAAA;AAC3B,EAAA,MAAM,WAAA,GAAc,aAAa,SAAS,CAAA;AAC1C,EAAA,MAAM,WAAWA,OAAAA,CAAO,IAAA,CAAK,WAAS,WAAA,CAAY,QAAA,CAAS,KAAK,CAAC,CAAA;AACjE,EAAA,MAAM,WAAWD,OAAAA,CAAO,IAAA,CAAK,WAAS,WAAA,CAAY,QAAA,CAAS,KAAK,CAAC,CAAA;AAEjE,EAAA,IAAI,QAAA,EAAU,OAAO,QAAA,GAAW,QAAA,GAAW,QAAA;AAE3C,EAAA,OAAO,SAAA;AACT;AAKO,IAAM,gBAAA,GAAmB,CAAC,SAAA,KAA+B;AAC9D,EAAA,MAAM,EAAE,KAAA,EAAAE,MAAAA,EAAM,GAAI,uBAAA;AAClB,EAAA,MAAM,WAAA,GAAc,aAAa,SAAS,CAAA;AAC1C,EAAA,OAAOA,OAAM,IAAA,CAAK,CAAA,KAAA,KAAS,WAAA,CAAY,QAAA,CAAS,KAAK,CAAC,CAAA;AACxD","file":"index.cjs","sourcesContent":["import type { DeviceCategoryType } from \"./types\";\n\nconst apple: string[] = [\"iPhone\", \"iPad\", \"iPod\", \"Mac\", \"Macintosh\"];\nconst tablet: string[] = [\"Tablet\", \"iPad\", \"playbook\", \"silk\"];\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\nconst devicePatterns: Record<DeviceCategoryType, string[]> = {\n apple,\n tablet,\n mobile,\n};\n\nexport default devicePatterns;\n","import devicePatterns from \"./device-patterns\";\nimport type { BreakPointType, DeviceCategoryType } from \"./types\";\n\nconst setLowerCase = (v: unknown): string => String(v).toLowerCase();\nconst deviceLowerCasePatterns = Object.fromEntries(\n Object.entries(devicePatterns).map(([key, value]) => [\n key,\n value.map(setLowerCase),\n ]),\n) as Record<DeviceCategoryType, string[]>;\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"]}
@@ -1,20 +0,0 @@
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
-
9
- declare const devicePatterns: Record<DeviceCategoryType, string[]>;
10
-
11
- /**
12
- * 반응형 웹 breakpoint 감지
13
- */
14
- declare const checkResponsiveDevice: (userAgent: string) => BreakPointType;
15
- /**
16
- * 애플 디바이스 감지
17
- */
18
- declare const checkAppleDevice: (userAgent: string) => boolean;
19
-
20
- export { type BreakPointType, type DeviceCategoryType, type ResponsiveDeviceStateType, type ViewportOrientationStateType, checkAppleDevice, checkResponsiveDevice, devicePatterns };
@@ -1,20 +0,0 @@
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
-
9
- declare const devicePatterns: Record<DeviceCategoryType, string[]>;
10
-
11
- /**
12
- * 반응형 웹 breakpoint 감지
13
- */
14
- declare const checkResponsiveDevice: (userAgent: string) => BreakPointType;
15
- /**
16
- * 애플 디바이스 감지
17
- */
18
- declare const checkAppleDevice: (userAgent: string) => boolean;
19
-
20
- export { type BreakPointType, type DeviceCategoryType, type ResponsiveDeviceStateType, type ViewportOrientationStateType, checkAppleDevice, checkResponsiveDevice, devicePatterns };
@@ -1,58 +0,0 @@
1
- // src/user-agent/device-patterns.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 devicePatterns = {
28
- apple,
29
- tablet,
30
- mobile
31
- };
32
- var device_patterns_default = devicePatterns;
33
-
34
- // src/user-agent/module.ts
35
- var setLowerCase = (v) => String(v).toLowerCase();
36
- var deviceLowerCasePatterns = Object.fromEntries(
37
- Object.entries(device_patterns_default).map(([key, value]) => [
38
- key,
39
- value.map(setLowerCase)
40
- ])
41
- );
42
- var checkResponsiveDevice = (userAgent) => {
43
- const { mobile: mobile2, tablet: tablet2 } = deviceLowerCasePatterns;
44
- const clientAgent = setLowerCase(userAgent);
45
- const isTablet = tablet2.some((agent) => clientAgent.includes(agent));
46
- const isMobile = mobile2.some((agent) => clientAgent.includes(agent));
47
- if (isMobile) return isTablet ? "tablet" : "mobile";
48
- return "desktop";
49
- };
50
- var checkAppleDevice = (userAgent) => {
51
- const { apple: apple2 } = deviceLowerCasePatterns;
52
- const clientAgent = setLowerCase(userAgent);
53
- return apple2.some((agent) => clientAgent.includes(agent));
54
- };
55
-
56
- export { checkAppleDevice, checkResponsiveDevice, device_patterns_default as devicePatterns };
57
- //# sourceMappingURL=index.mjs.map
58
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/user-agent/device-patterns.ts","../../src/user-agent/module.ts"],"names":["mobile","tablet","apple"],"mappings":";AAEA,IAAM,QAAkB,CAAC,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,OAAO,WAAW,CAAA;AACrE,IAAM,MAAA,GAAmB,CAAC,QAAA,EAAU,MAAA,EAAQ,YAAY,MAAM,CAAA;AAC9D,IAAM,MAAA,GAAmB;AAAA,EACvB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,kBAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,cAAA,GAAuD;AAAA,EAC3D,KAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAO,uBAAA,GAAQ;;;AC/Bf,IAAM,eAAe,CAAC,CAAA,KAAuB,MAAA,CAAO,CAAC,EAAE,WAAA,EAAY;AACnE,IAAM,0BAA0B,MAAA,CAAO,WAAA;AAAA,EACrC,MAAA,CAAO,QAAQ,uBAAc,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAAA,IACnD,GAAA;AAAA,IACA,KAAA,CAAM,IAAI,YAAY;AAAA,GACvB;AACH,CAAA;AAKO,IAAM,qBAAA,GAAwB,CAAC,SAAA,KAAsC;AAC1E,EAAA,MAAM,EAAE,MAAA,EAAAA,OAAAA,EAAQ,MAAA,EAAAC,SAAO,GAAI,uBAAA;AAC3B,EAAA,MAAM,WAAA,GAAc,aAAa,SAAS,CAAA;AAC1C,EAAA,MAAM,WAAWA,OAAAA,CAAO,IAAA,CAAK,WAAS,WAAA,CAAY,QAAA,CAAS,KAAK,CAAC,CAAA;AACjE,EAAA,MAAM,WAAWD,OAAAA,CAAO,IAAA,CAAK,WAAS,WAAA,CAAY,QAAA,CAAS,KAAK,CAAC,CAAA;AAEjE,EAAA,IAAI,QAAA,EAAU,OAAO,QAAA,GAAW,QAAA,GAAW,QAAA;AAE3C,EAAA,OAAO,SAAA;AACT;AAKO,IAAM,gBAAA,GAAmB,CAAC,SAAA,KAA+B;AAC9D,EAAA,MAAM,EAAE,KAAA,EAAAE,MAAAA,EAAM,GAAI,uBAAA;AAClB,EAAA,MAAM,WAAA,GAAc,aAAa,SAAS,CAAA;AAC1C,EAAA,OAAOA,OAAM,IAAA,CAAK,CAAA,KAAA,KAAS,WAAA,CAAY,QAAA,CAAS,KAAK,CAAC,CAAA;AACxD","file":"index.mjs","sourcesContent":["import type { DeviceCategoryType } from \"./types\";\n\nconst apple: string[] = [\"iPhone\", \"iPad\", \"iPod\", \"Mac\", \"Macintosh\"];\nconst tablet: string[] = [\"Tablet\", \"iPad\", \"playbook\", \"silk\"];\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\nconst devicePatterns: Record<DeviceCategoryType, string[]> = {\n apple,\n tablet,\n mobile,\n};\n\nexport default devicePatterns;\n","import devicePatterns from \"./device-patterns\";\nimport type { BreakPointType, DeviceCategoryType } from \"./types\";\n\nconst setLowerCase = (v: unknown): string => String(v).toLowerCase();\nconst deviceLowerCasePatterns = Object.fromEntries(\n Object.entries(devicePatterns).map(([key, value]) => [\n key,\n value.map(setLowerCase),\n ]),\n) as Record<DeviceCategoryType, string[]>;\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"]}