sales-frontend-utils 0.0.3 → 0.0.6
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/dist/index.cjs +27 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +25 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -34,7 +34,34 @@ function debounce(func, delay) {
|
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
// src/agent/index.ts
|
|
38
|
+
var isUserAgentMobile = (userAgent) => {
|
|
39
|
+
return /mobile|iphone|android/i.test(userAgent);
|
|
40
|
+
};
|
|
41
|
+
var isUserAgentTablet = (userAgent) => {
|
|
42
|
+
return /iPad/i.test(userAgent);
|
|
43
|
+
};
|
|
44
|
+
var isSmartphoneDevice = () => {
|
|
45
|
+
if (typeof window === "undefined") {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
const userAgent = navigator.userAgent.toLowerCase();
|
|
49
|
+
const smartphonePatterns = [
|
|
50
|
+
/android.*mobile/i,
|
|
51
|
+
/webos/i,
|
|
52
|
+
/iphone/i,
|
|
53
|
+
/ipod/i,
|
|
54
|
+
/blackberry/i,
|
|
55
|
+
/windows phone/i,
|
|
56
|
+
/mobile/i
|
|
57
|
+
];
|
|
58
|
+
return smartphonePatterns.some((pattern) => pattern.test(userAgent));
|
|
59
|
+
};
|
|
60
|
+
|
|
37
61
|
exports.debounce = debounce;
|
|
62
|
+
exports.isSmartphoneDevice = isSmartphoneDevice;
|
|
63
|
+
exports.isUserAgentMobile = isUserAgentMobile;
|
|
64
|
+
exports.isUserAgentTablet = isUserAgentTablet;
|
|
38
65
|
exports.throttle = throttle;
|
|
39
66
|
//# sourceMappingURL=index.cjs.map
|
|
40
67
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/timing/timing-utils.ts"],"names":[],"mappings":";;;AAMO,SAAS,QAAA,CAA6C,MAAS,KAAiD,EAAA;AACrH,EAAA,IAAI,QAAW,GAAA,CAAA;AACf,EAAA,IAAI,OAAiC,GAAA,IAAA;AAErC,EAAA,OAAO,IAAI,IAAwB,KAAA;AACjC,IAAM,MAAA,GAAA,GAAM,KAAK,GAAI,EAAA;AAErB,IAAI,IAAA,GAAA,GAAM,YAAY,KAAO,EAAA;AAE3B,MAAW,QAAA,GAAA,GAAA;AACX,MAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,KACd,MAAA,IAAW,CAAC,OAAS,EAAA;AAEnB,MAAU,OAAA,GAAA,UAAA;AAAA,QACR,MAAM;AACJ,UAAA,QAAA,GAAW,KAAK,GAAI,EAAA;AACpB,UAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AACZ,UAAU,OAAA,GAAA,IAAA;AAAA,SACZ;AAAA,QACA,SAAS,GAAM,GAAA,QAAA;AAAA,OACjB;AAAA;AACF,GACF;AACF;AAQO,SAAS,QAAA,CAA6C,MAAS,KAAiD,EAAA;AACrH,EAAA,IAAI,OAAiC,GAAA,IAAA;AAErC,EAAA,OAAO,IAAI,IAAwB,KAAA;AACjC,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,YAAA,CAAa,OAAO,CAAA;AAAA;AAEtB,IAAA,OAAA,GAAU,WAAW,MAAM;AACzB,MAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AACZ,MAAU,OAAA,GAAA,IAAA;AAAA,OACT,KAAK,CAAA;AAAA,GACV;AACF","file":"index.cjs","sourcesContent":["/**\n * 쓰로틀\n * @param func\n * @param delay\n * @returns\n */\nexport function throttle<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let lastCall = 0;\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n const now = Date.now();\n\n if (now - lastCall >= delay) {\n // 마지막 호출로부터 delay 시간이 지났으면 즉시 실행\n lastCall = now;\n func(...args);\n } else if (!timeout) {\n // 대기 중인 타이머가 없으면 새로운 타이머 설정\n timeout = setTimeout(\n () => {\n lastCall = Date.now();\n func(...args);\n timeout = null;\n },\n delay - (now - lastCall)\n );\n }\n };\n}\n\n/**\n * 디바운스\n * @param func\n * @param delay\n * @returns\n */\nexport function debounce<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n func(...args);\n timeout = null;\n }, delay);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/timing/timing-utils.ts","../src/agent/index.ts"],"names":[],"mappings":";;;AAMO,SAAS,QAAA,CAA6C,MAAS,KAAiD,EAAA;AACrH,EAAA,IAAI,QAAW,GAAA,CAAA;AACf,EAAA,IAAI,OAAiC,GAAA,IAAA;AAErC,EAAA,OAAO,IAAI,IAAwB,KAAA;AACjC,IAAM,MAAA,GAAA,GAAM,KAAK,GAAI,EAAA;AAErB,IAAI,IAAA,GAAA,GAAM,YAAY,KAAO,EAAA;AAE3B,MAAW,QAAA,GAAA,GAAA;AACX,MAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,KACd,MAAA,IAAW,CAAC,OAAS,EAAA;AAEnB,MAAU,OAAA,GAAA,UAAA;AAAA,QACR,MAAM;AACJ,UAAA,QAAA,GAAW,KAAK,GAAI,EAAA;AACpB,UAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AACZ,UAAU,OAAA,GAAA,IAAA;AAAA,SACZ;AAAA,QACA,SAAS,GAAM,GAAA,QAAA;AAAA,OACjB;AAAA;AACF,GACF;AACF;AAQO,SAAS,QAAA,CAA6C,MAAS,KAAiD,EAAA;AACrH,EAAA,IAAI,OAAiC,GAAA,IAAA;AAErC,EAAA,OAAO,IAAI,IAAwB,KAAA;AACjC,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,YAAA,CAAa,OAAO,CAAA;AAAA;AAEtB,IAAA,OAAA,GAAU,WAAW,MAAM;AACzB,MAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AACZ,MAAU,OAAA,GAAA,IAAA;AAAA,OACT,KAAK,CAAA;AAAA,GACV;AACF;;;ACjDa,IAAA,iBAAA,GAAoB,CAAC,SAA+B,KAAA;AAC/D,EAAO,OAAA,wBAAA,CAAyB,KAAK,SAAS,CAAA;AAChD;AAEa,IAAA,iBAAA,GAAoB,CAAC,SAA+B,KAAA;AAC/D,EAAO,OAAA,OAAA,CAAQ,KAAK,SAAS,CAAA;AAC/B;AAMO,IAAM,qBAAqB,MAAe;AAC/C,EAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AACjC,IAAO,OAAA,KAAA;AAAA;AAGT,EAAM,MAAA,SAAA,GAAY,SAAU,CAAA,SAAA,CAAU,WAAY,EAAA;AAGlD,EAAA,MAAM,kBAAqB,GAAA;AAAA,IACzB,kBAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,mBAAmB,IAAK,CAAA,CAAC,YAAY,OAAQ,CAAA,IAAA,CAAK,SAAS,CAAC,CAAA;AACrE","file":"index.cjs","sourcesContent":["/**\n * 쓰로틀\n * @param func\n * @param delay\n * @returns\n */\nexport function throttle<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let lastCall = 0;\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n const now = Date.now();\n\n if (now - lastCall >= delay) {\n // 마지막 호출로부터 delay 시간이 지났으면 즉시 실행\n lastCall = now;\n func(...args);\n } else if (!timeout) {\n // 대기 중인 타이머가 없으면 새로운 타이머 설정\n timeout = setTimeout(\n () => {\n lastCall = Date.now();\n func(...args);\n timeout = null;\n },\n delay - (now - lastCall)\n );\n }\n };\n}\n\n/**\n * 디바운스\n * @param func\n * @param delay\n * @returns\n */\nexport function debounce<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n func(...args);\n timeout = null;\n }, delay);\n };\n}\n","export const isUserAgentMobile = (userAgent: string): boolean => {\n return /mobile|iphone|android/i.test(userAgent);\n};\n\nexport const isUserAgentTablet = (userAgent: string): boolean => {\n return /iPad/i.test(userAgent);\n};\n\n/**\n * 스마트폰 기기 여부를 판단합니다.(Only Client)\n * @returns\n */\nexport const isSmartphoneDevice = (): boolean => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const userAgent = navigator.userAgent.toLowerCase();\n\n // 스마트폰 기기 패턴들 (태블릿 제외)\n const smartphonePatterns = [\n /android.*mobile/i,\n /webos/i,\n /iphone/i,\n /ipod/i,\n /blackberry/i,\n /windows phone/i,\n /mobile/i\n ];\n\n return smartphonePatterns.some((pattern) => pattern.test(userAgent));\n};\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -13,4 +13,12 @@ declare function throttle<T extends (...args: any[]) => void>(func: T, delay: nu
|
|
|
13
13
|
*/
|
|
14
14
|
declare function debounce<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void;
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
declare const isUserAgentMobile: (userAgent: string) => boolean;
|
|
17
|
+
declare const isUserAgentTablet: (userAgent: string) => boolean;
|
|
18
|
+
/**
|
|
19
|
+
* 스마트폰 기기 여부를 판단합니다.(Only Client)
|
|
20
|
+
* @returns
|
|
21
|
+
*/
|
|
22
|
+
declare const isSmartphoneDevice: () => boolean;
|
|
23
|
+
|
|
24
|
+
export { debounce, isSmartphoneDevice, isUserAgentMobile, isUserAgentTablet, throttle };
|
package/dist/index.d.ts
CHANGED
|
@@ -13,4 +13,12 @@ declare function throttle<T extends (...args: any[]) => void>(func: T, delay: nu
|
|
|
13
13
|
*/
|
|
14
14
|
declare function debounce<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void;
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
declare const isUserAgentMobile: (userAgent: string) => boolean;
|
|
17
|
+
declare const isUserAgentTablet: (userAgent: string) => boolean;
|
|
18
|
+
/**
|
|
19
|
+
* 스마트폰 기기 여부를 판단합니다.(Only Client)
|
|
20
|
+
* @returns
|
|
21
|
+
*/
|
|
22
|
+
declare const isSmartphoneDevice: () => boolean;
|
|
23
|
+
|
|
24
|
+
export { debounce, isSmartphoneDevice, isUserAgentMobile, isUserAgentTablet, throttle };
|
package/dist/index.js
CHANGED
|
@@ -32,6 +32,30 @@ function debounce(func, delay) {
|
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
// src/agent/index.ts
|
|
36
|
+
var isUserAgentMobile = (userAgent) => {
|
|
37
|
+
return /mobile|iphone|android/i.test(userAgent);
|
|
38
|
+
};
|
|
39
|
+
var isUserAgentTablet = (userAgent) => {
|
|
40
|
+
return /iPad/i.test(userAgent);
|
|
41
|
+
};
|
|
42
|
+
var isSmartphoneDevice = () => {
|
|
43
|
+
if (typeof window === "undefined") {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
const userAgent = navigator.userAgent.toLowerCase();
|
|
47
|
+
const smartphonePatterns = [
|
|
48
|
+
/android.*mobile/i,
|
|
49
|
+
/webos/i,
|
|
50
|
+
/iphone/i,
|
|
51
|
+
/ipod/i,
|
|
52
|
+
/blackberry/i,
|
|
53
|
+
/windows phone/i,
|
|
54
|
+
/mobile/i
|
|
55
|
+
];
|
|
56
|
+
return smartphonePatterns.some((pattern) => pattern.test(userAgent));
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export { debounce, isSmartphoneDevice, isUserAgentMobile, isUserAgentTablet, throttle };
|
|
36
60
|
//# sourceMappingURL=index.js.map
|
|
37
61
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/timing/timing-utils.ts"],"names":[],"mappings":";AAMO,SAAS,QAAA,CAA6C,MAAS,KAAiD,EAAA;AACrH,EAAA,IAAI,QAAW,GAAA,CAAA;AACf,EAAA,IAAI,OAAiC,GAAA,IAAA;AAErC,EAAA,OAAO,IAAI,IAAwB,KAAA;AACjC,IAAM,MAAA,GAAA,GAAM,KAAK,GAAI,EAAA;AAErB,IAAI,IAAA,GAAA,GAAM,YAAY,KAAO,EAAA;AAE3B,MAAW,QAAA,GAAA,GAAA;AACX,MAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,KACd,MAAA,IAAW,CAAC,OAAS,EAAA;AAEnB,MAAU,OAAA,GAAA,UAAA;AAAA,QACR,MAAM;AACJ,UAAA,QAAA,GAAW,KAAK,GAAI,EAAA;AACpB,UAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AACZ,UAAU,OAAA,GAAA,IAAA;AAAA,SACZ;AAAA,QACA,SAAS,GAAM,GAAA,QAAA;AAAA,OACjB;AAAA;AACF,GACF;AACF;AAQO,SAAS,QAAA,CAA6C,MAAS,KAAiD,EAAA;AACrH,EAAA,IAAI,OAAiC,GAAA,IAAA;AAErC,EAAA,OAAO,IAAI,IAAwB,KAAA;AACjC,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,YAAA,CAAa,OAAO,CAAA;AAAA;AAEtB,IAAA,OAAA,GAAU,WAAW,MAAM;AACzB,MAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AACZ,MAAU,OAAA,GAAA,IAAA;AAAA,OACT,KAAK,CAAA;AAAA,GACV;AACF","file":"index.js","sourcesContent":["/**\n * 쓰로틀\n * @param func\n * @param delay\n * @returns\n */\nexport function throttle<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let lastCall = 0;\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n const now = Date.now();\n\n if (now - lastCall >= delay) {\n // 마지막 호출로부터 delay 시간이 지났으면 즉시 실행\n lastCall = now;\n func(...args);\n } else if (!timeout) {\n // 대기 중인 타이머가 없으면 새로운 타이머 설정\n timeout = setTimeout(\n () => {\n lastCall = Date.now();\n func(...args);\n timeout = null;\n },\n delay - (now - lastCall)\n );\n }\n };\n}\n\n/**\n * 디바운스\n * @param func\n * @param delay\n * @returns\n */\nexport function debounce<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n func(...args);\n timeout = null;\n }, delay);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/timing/timing-utils.ts","../src/agent/index.ts"],"names":[],"mappings":";AAMO,SAAS,QAAA,CAA6C,MAAS,KAAiD,EAAA;AACrH,EAAA,IAAI,QAAW,GAAA,CAAA;AACf,EAAA,IAAI,OAAiC,GAAA,IAAA;AAErC,EAAA,OAAO,IAAI,IAAwB,KAAA;AACjC,IAAM,MAAA,GAAA,GAAM,KAAK,GAAI,EAAA;AAErB,IAAI,IAAA,GAAA,GAAM,YAAY,KAAO,EAAA;AAE3B,MAAW,QAAA,GAAA,GAAA;AACX,MAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,KACd,MAAA,IAAW,CAAC,OAAS,EAAA;AAEnB,MAAU,OAAA,GAAA,UAAA;AAAA,QACR,MAAM;AACJ,UAAA,QAAA,GAAW,KAAK,GAAI,EAAA;AACpB,UAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AACZ,UAAU,OAAA,GAAA,IAAA;AAAA,SACZ;AAAA,QACA,SAAS,GAAM,GAAA,QAAA;AAAA,OACjB;AAAA;AACF,GACF;AACF;AAQO,SAAS,QAAA,CAA6C,MAAS,KAAiD,EAAA;AACrH,EAAA,IAAI,OAAiC,GAAA,IAAA;AAErC,EAAA,OAAO,IAAI,IAAwB,KAAA;AACjC,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,YAAA,CAAa,OAAO,CAAA;AAAA;AAEtB,IAAA,OAAA,GAAU,WAAW,MAAM;AACzB,MAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AACZ,MAAU,OAAA,GAAA,IAAA;AAAA,OACT,KAAK,CAAA;AAAA,GACV;AACF;;;ACjDa,IAAA,iBAAA,GAAoB,CAAC,SAA+B,KAAA;AAC/D,EAAO,OAAA,wBAAA,CAAyB,KAAK,SAAS,CAAA;AAChD;AAEa,IAAA,iBAAA,GAAoB,CAAC,SAA+B,KAAA;AAC/D,EAAO,OAAA,OAAA,CAAQ,KAAK,SAAS,CAAA;AAC/B;AAMO,IAAM,qBAAqB,MAAe;AAC/C,EAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AACjC,IAAO,OAAA,KAAA;AAAA;AAGT,EAAM,MAAA,SAAA,GAAY,SAAU,CAAA,SAAA,CAAU,WAAY,EAAA;AAGlD,EAAA,MAAM,kBAAqB,GAAA;AAAA,IACzB,kBAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,mBAAmB,IAAK,CAAA,CAAC,YAAY,OAAQ,CAAA,IAAA,CAAK,SAAS,CAAC,CAAA;AACrE","file":"index.js","sourcesContent":["/**\n * 쓰로틀\n * @param func\n * @param delay\n * @returns\n */\nexport function throttle<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let lastCall = 0;\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n const now = Date.now();\n\n if (now - lastCall >= delay) {\n // 마지막 호출로부터 delay 시간이 지났으면 즉시 실행\n lastCall = now;\n func(...args);\n } else if (!timeout) {\n // 대기 중인 타이머가 없으면 새로운 타이머 설정\n timeout = setTimeout(\n () => {\n lastCall = Date.now();\n func(...args);\n timeout = null;\n },\n delay - (now - lastCall)\n );\n }\n };\n}\n\n/**\n * 디바운스\n * @param func\n * @param delay\n * @returns\n */\nexport function debounce<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n func(...args);\n timeout = null;\n }, delay);\n };\n}\n","export const isUserAgentMobile = (userAgent: string): boolean => {\n return /mobile|iphone|android/i.test(userAgent);\n};\n\nexport const isUserAgentTablet = (userAgent: string): boolean => {\n return /iPad/i.test(userAgent);\n};\n\n/**\n * 스마트폰 기기 여부를 판단합니다.(Only Client)\n * @returns\n */\nexport const isSmartphoneDevice = (): boolean => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const userAgent = navigator.userAgent.toLowerCase();\n\n // 스마트폰 기기 패턴들 (태블릿 제외)\n const smartphonePatterns = [\n /android.*mobile/i,\n /webos/i,\n /iphone/i,\n /ipod/i,\n /blackberry/i,\n /windows phone/i,\n /mobile/i\n ];\n\n return smartphonePatterns.some((pattern) => pattern.test(userAgent));\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sales-frontend-utils",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"@types/node": "^22.14.0",
|
|
25
25
|
"tsup": "^8.4.0",
|
|
26
26
|
"typescript": "5.8.2",
|
|
27
|
-
"
|
|
28
|
-
"sales-frontend-
|
|
27
|
+
"sales-frontend-typescript-config": "0.0.2",
|
|
28
|
+
"eslint-config-sales-frontend-eslint-config-v8": "^0.0.6"
|
|
29
29
|
},
|
|
30
30
|
"scripts": {
|
|
31
31
|
"lint": "eslint . --max-warnings 0",
|