From 55db8824e98c80b1c2547d8db4401b97c6ddb784 Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Wed, 11 Sep 2024 13:10:44 +0900 Subject: [PATCH 01/18] fix test ex3 --- "\354\234\244\354\230\201\355\227\214/ex2.js" | 4 +++- "\354\234\244\354\230\201\355\227\214/ex3.test.js" | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git "a/\354\234\244\354\230\201\355\227\214/ex2.js" "b/\354\234\244\354\230\201\355\227\214/ex2.js" index 6b95f04..a58ba13 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex2.js" +++ "b/\354\234\244\354\230\201\355\227\214/ex2.js" @@ -1,4 +1,6 @@ // range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; +const range = (start, end, step = start > end ? -1 : 1) => { + + }; module.exports = { range }; diff --git "a/\354\234\244\354\230\201\355\227\214/ex3.test.js" "b/\354\234\244\354\230\201\355\227\214/ex3.test.js" index 6c27a4d..1628e15 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex3.test.js" +++ "b/\354\234\244\354\230\201\355\227\214/ex3.test.js" @@ -8,11 +8,11 @@ const users = [lee, hong, kim]; assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); +assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [lee, kim, hong]); assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, lee, + kim, hong, ]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); +assert.deepStrictEqual(users.sortBy('dept:desc,id'), [kim, lee, hong]); From 8ebb52a51fddaf0ca4c51b1c8f58d8038b3071ca Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Wed, 11 Sep 2024 14:14:30 +0900 Subject: [PATCH 02/18] solve ex2 --- "\354\234\244\354\230\201\355\227\214/ex2.js" | 38 +++++++++++++++++-- .../ex2.test.js" | 6 +-- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git "a/\354\234\244\354\230\201\355\227\214/ex2.js" "b/\354\234\244\354\230\201\355\227\214/ex2.js" index a58ba13..b93b682 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex2.js" +++ "b/\354\234\244\354\230\201\355\227\214/ex2.js" @@ -1,6 +1,38 @@ // range 함수를 작성하세요. const range = (start, end, step = start > end ? -1 : 1) => { - - }; + if (end === undefined && start>0) { + end = start; + start = 1; + } else if(end === undefined && start===0){ + return [0]; + } else if(end === undefined && start<0){ + end = -1; + } -module.exports = { range }; + const arr = []; + + if(step>0){ + for(let i=start; i<=end; i+=step){ + arr.push(Number(i.toFixed(10))); + } + if(step%1 != 0){ + if (arr[arr.length - 1] !== end) { + arr.push(end); + } + } + }else if(step<0){ + for(let i=start; i>=end; i+=step){ + arr.push(Number(i.toFixed(10))); + } + if(step%1 != 0){ + if (arr[arr.length - 1] !== end) { + arr.push(end); + } + } + }else if(step === 0){ + arr.push(Number(start.toFixed(10))); + } + return arr; +}; + +module.exports = { range }; \ No newline at end of file diff --git "a/\354\234\244\354\230\201\355\227\214/ex2.test.js" "b/\354\234\244\354\230\201\355\227\214/ex2.test.js" index cbdb2e8..3e28d8e 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex2.test.js" +++ "b/\354\234\244\354\230\201\355\227\214/ex2.test.js" @@ -2,8 +2,8 @@ const assert = require('assert'); const { range } = require('./ex2'); assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); +assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); +assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); assert.deepStrictEqual(range(5, 5, 0), [5]); @@ -43,4 +43,4 @@ assert.deepStrictEqual( [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] ); -console.log(range(1, 2, 0.1)); +// console.log(range(1, 2, 0.1)); From 88d12da0b08356aea14f3c56817ba0867f54634c Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Wed, 11 Sep 2024 15:24:35 +0900 Subject: [PATCH 03/18] solve ex4 --- "\354\234\244\354\230\201\355\227\214/ex3.js" | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git "a/\354\234\244\354\230\201\355\227\214/ex3.js" "b/\354\234\244\354\230\201\355\227\214/ex3.js" index b1b0d75..4c01617 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex3.js" +++ "b/\354\234\244\354\230\201\355\227\214/ex3.js" @@ -1,3 +1,45 @@ Array.prototype.sortBy = function (sortProp = '') { + // 분류 기준 객체로 만들기 + const parts = sortProp.split(','); + + const criterias = parts.map(part => { + let criteria, method; + + if (part.indexOf(':') === -1) { + criteria = part.trim(); + method = 'asc'; + } + else { + [criteria, method] = part.split(':'); + method = method.trim() === '' ? 'asc' : method.trim(); + } + + return { + criteria: criteria.trim(), + method: method + }; + }); + + + console.log(criterias) + + // 정렬 + this.sort(function(a, b) { + for (const { criteria, method } of criterias) { + if (a[criteria] > b[criteria]) { + return method === 'asc' ? 1 : -1; + } + if (a[criteria] < b[criteria]) { + return method === 'asc' ? -1 : 1; + } + } + return 0; + }); + return this; }; + +const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; +const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; +const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; +const users = [lee, hong, kim]; \ No newline at end of file From 868ff418f1696ea2a0592dae946e838fab7e40d8 Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Wed, 11 Sep 2024 18:33:02 +0900 Subject: [PATCH 04/18] solve 4 --- "\354\234\244\354\230\201\355\227\214/ex4.js" | 97 ++++++++++++++++++- "\354\234\244\354\230\201\355\227\214/ex5.js" | 6 +- "\354\234\244\354\230\201\355\227\214/ex6.ts" | 2 +- 3 files changed, 102 insertions(+), 3 deletions(-) diff --git "a/\354\234\244\354\230\201\355\227\214/ex4.js" "b/\354\234\244\354\230\201\355\227\214/ex4.js" index 9ede02f..519da19 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex4.js" +++ "b/\354\234\244\354\230\201\355\227\214/ex4.js" @@ -1,3 +1,98 @@ -function deepCopy(obj) {} +function deepCopy(obj, seen = new WeakMap()) { + if (obj === null || typeof obj !== 'object') { + return obj; + } + + if (seen.has(obj)) { + return seen.get(obj); + } + + if (Array.isArray(obj)) { + const arrCopy = []; + seen.set(obj, arrCopy); + obj.forEach((item, index) => { + arrCopy[index] = deepCopy(item, seen); + }); + return arrCopy; + } + + if (obj instanceof Map) { + const mapCopy = new Map(); + seen.set(obj, mapCopy); + obj.forEach((value, key) => { + mapCopy.set(deepCopy(key, seen), deepCopy(value, seen)); + }); + return mapCopy; + } + + if (obj instanceof WeakMap) { + const weakMapCopy = new WeakMap(); + seen.set(obj, weakMapCopy); // 순환 참조 방지용 + return weakMapCopy; + } + + if (obj instanceof Set) { + const setCopy = new Set(); + seen.set(obj, setCopy); + obj.forEach(value => { + setCopy.add(deepCopy(value, seen)); + }); + return setCopy; + } + + if (obj instanceof WeakSet) { + const weakSetCopy = new WeakSet(); + seen.set(obj, weakSetCopy); // 순환 참조 방지용 + return weakSetCopy; + } + + if (obj instanceof Date) { + return new Date(obj.getTime()); + } + + if (obj instanceof RegExp) { + return new RegExp(obj.source, obj.flags); + } + + if (typeof obj === 'function') { + return obj; + } + + if (typeof obj === 'symbol') { + return Symbol(obj.description); + } + + const objCopy = {}; + seen.set(obj, objCopy); // 순환 참조 방지용 + for (const key of Object.keys(obj)) { + objCopy[key] = deepCopy(obj[key], seen); + } + + for (const sym of Object.getOwnPropertySymbols(obj)) { + objCopy[sym] = deepCopy(obj[sym], seen); + } + + return objCopy; + } + + const arr = [1, 2, 3]; + const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; + + const kim = { + nid: 3, + addr: 'Pusan', + arr: [1, 2, 3, { aid: 1 }, [10, 20]], + oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, xx: null, + yy: function() { console.log(this.oo); }, + yyy() { console.log(this.oo); }, + [Symbol()]: 9, + [Symbol()]: Symbol('symbol2'), + zs: new Set([arr, hong]), + zws: new WeakSet([arr, hong]), zm: new Map([[hong, arr]]), + zwm: new WeakMap([[hong, arr]]), +}; + +const deepCopiedKim = deepCopy(kim); +console.log(deepCopiedKim); module.exports = { deepCopy }; diff --git "a/\354\234\244\354\230\201\355\227\214/ex5.js" "b/\354\234\244\354\230\201\355\227\214/ex5.js" index 464a05a..9c48057 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex5.js" +++ "b/\354\234\244\354\230\201\355\227\214/ex5.js" @@ -1,3 +1,7 @@ module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, + searchByKoreanInitialSound: (data, firstSounds) => { + + }, }; + +s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; diff --git "a/\354\234\244\354\230\201\355\227\214/ex6.ts" "b/\354\234\244\354\230\201\355\227\214/ex6.ts" index 424ca54..e183d94 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex6.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex6.ts" @@ -1,4 +1,4 @@ export const randTime = (val: T): Promise => new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); -export function promiseAllSettled(promises: Promise[]) {} +export function promiseAllSettled(promises: Promise[]) {} \ No newline at end of file From 3d145620bc1084f08921af8fa00f417315aa1702 Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Wed, 11 Sep 2024 19:03:58 +0900 Subject: [PATCH 05/18] solve 6 --- "\354\234\244\354\230\201\355\227\214/ex6.ts" | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git "a/\354\234\244\354\230\201\355\227\214/ex6.ts" "b/\354\234\244\354\230\201\355\227\214/ex6.ts" index e183d94..3e782ce 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex6.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex6.ts" @@ -1,4 +1,37 @@ export const randTime = (val: T): Promise => new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); -export function promiseAllSettled(promises: Promise[]) {} \ No newline at end of file + +export function promiseAllSettled(promises: Promise[]): Promise<{ status: string, value?: T, reason?: any }[]> { + return new Promise((resolve)=>{ + const results: { status: string, value?: T, reason?: any }[] = []; + let completedPromises = 0; + + promises.forEach((promise, index)=>{ + promise + .then((value)=>{ + results[index] = {status: 'fulfilled', value: value}; + }) + .catch((reason)=>{ + results[index] = {status: 'rejected', reason: reason}; + }) + .finally(()=>{ + completedPromises += 1; + + if(completedPromises == promises.length){ + resolve(results); + } + }) + }) + }) +} + +async function printPromise(){ + const a = await Promise.allSettled([randTime(1), randTime(2), randTime(3)]); + const b = await promiseAllSettled([randTime(1), randTime(2), randTime(3)]); + console.log(a); + console.log("--------------------------------"); + console.log(b); +} + +printPromise(); \ No newline at end of file From 973f8ce6e7b17ea81a4c215c4743bf76859386ab Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Wed, 11 Sep 2024 19:13:49 +0900 Subject: [PATCH 06/18] add config --- package-lock.json | 207 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 10 ++- 2 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0e0cec7 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,207 @@ +{ + "name": "febasic", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "febasic", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "ts-node": "^10.9.2", + "tsc": "^2.0.4", + "typescript": "^5.6.2" + }, + "devDependencies": { + "@types/node": "^22.5.4" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + }, + "node_modules/@types/node": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tsc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/tsc/-/tsc-2.0.4.tgz", + "integrity": "sha512-fzoSieZI5KKJVBYGvwbVZs/J5za84f2lSTLPYf6AGiIf43tZ3GNrI1QzTLcjtyDDP4aLxd46RTZq1nQxe7+k5Q==", + "bin": { + "tsc": "bin/tsc" + } + }, + "node_modules/typescript": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } + } + } +} diff --git a/package.json b/package.json index c356ea8..e444eef 100644 --- a/package.json +++ b/package.json @@ -11,5 +11,13 @@ "TS" ], "author": "indiflex", - "license": "ISC" + "license": "ISC", + "devDependencies": { + "@types/node": "^22.5.4" + }, + "dependencies": { + "ts-node": "^10.9.2", + "tsc": "^2.0.4", + "typescript": "^5.6.2" + } } From 0a4ddc3de32d7296aa5a4ddff193b3228ddf0979 Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Wed, 11 Sep 2024 23:52:26 +0900 Subject: [PATCH 07/18] solve ex 10 --- .../ex7.test.ts" | 2 +- "\354\234\244\354\230\201\355\227\214/ex7.ts" | 69 ++++++++++++++++++- 2 files changed, 69 insertions(+), 2 deletions(-) diff --git "a/\354\234\244\354\230\201\355\227\214/ex7.test.ts" "b/\354\234\244\354\230\201\355\227\214/ex7.test.ts" index 62b881d..e5d79c5 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex7.test.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex7.test.ts" @@ -3,7 +3,7 @@ import { getPosts } from './ex7'; async function test(userId: string | number) { const posts = await getPosts(userId); - + assert.strictEqual(posts?.length, 10); assert.strictEqual(posts?.at(-1)?.comments?.length, 5); assert.deepStrictEqual(posts[0], { diff --git "a/\354\234\244\354\230\201\355\227\214/ex7.ts" "b/\354\234\244\354\230\201\355\227\214/ex7.ts" index 62812ac..bb41f75 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex7.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex7.ts" @@ -1,3 +1,70 @@ +import { title } from "process"; + const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; +export type CommentResponse = { + postId: number; + id: number; + name: string; + email: string; + body: string; + } + +export type Comment = { + postId: number; + id: number; + email: string; + body: string; +} + +export type Post = { + postId: number; + title: string; + comments: Comment[]; +} + +export type UserPost = { + postId: number; + id: number; + title: string; + body: string; +} + +export async function getPosts(userId: number | string):Promise { + const resList:UserPost[] = await fetch(`${POST_URL}?userId=${userId}`, {method: "GET"}) + .then((response) => response.json()) as UserPost[]; + + const postsByUserID: Post[] = []; + for(const res of resList){ + + const commentsres:CommentResponse[] = await fetch(`${POST_URL}/${res.id}/comments`, {method: "GET"}) + .then((response) => response.json()) as CommentResponse[]; + + const comments:Comment[] = commentsres.map((res)=>{return { + postId: res.postId, + id: res.id, + email: res.email, + body: res.body + }}) + + const post:Post = { + postId: res.id, + title: res.title, + comments: comments, + } + + postsByUserID.push(post); + } + + return postsByUserID; +} + +// test +const userId = 1; +async function print(){ +const posts = await getPosts(userId); + console.log(posts.length); + console.log(posts?.at(-1)?.comments?.length); + console.log(posts[0]); +}; -export async function getPosts(userId: number | string) {} +// print(); From 756b34f4e2b778087577ba31173e3df8e0f27e0c Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Thu, 12 Sep 2024 09:22:35 +0900 Subject: [PATCH 08/18] solve ex5 --- "\354\234\244\354\230\201\355\227\214/ex5.js" | 62 ++++++++++++++++++- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git "a/\354\234\244\354\230\201\355\227\214/ex5.js" "b/\354\234\244\354\230\201\355\227\214/ex5.js" index 9c48057..f618901 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex5.js" +++ "b/\354\234\244\354\230\201\355\227\214/ex5.js" @@ -1,7 +1,65 @@ module.exports = { searchByKoreanInitialSound: (data, firstSounds) => { - + return data.filter((str) => str.match(getRegExp(firstSounds))); }, }; +const INITIAL = [ + "ㄱ", + "ㄲ", + "ㄴ", + "ㄷ", + "ㄸ", + "ㄹ", + "ㅁ", + "ㅂ", + "ㅃ", + "ㅅ", + "ㅆ", + "ㅇ", + "ㅈ", + "ㅉ", + "ㅊ", + "ㅋ", + "ㅌ", + "ㅍ", + "ㅎ", +]; +const INITIAL_RANGE = [ + "가-깋", + "까-낗", + "나-닣", + "다-딯", + "따-띻", + "라-맇", + "마-밓", + "바-빟", + "빠-삫", + "사-싷", + "싸-앃", + "아-잏", + "자-짛", + "짜-찧", + "차-칳", + "카-킿", + "타-팋", + "파-핗", + "하-힣", +]; -s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; +const initialMap = new Map(); + +for (let i = 0; i < INITIAL.length; i++) { + initialMap.set(INITIAL[i], INITIAL_RANGE[i]); +} + +function getRegExp(initials) { + return initials + .split("") + .map( + (initial) => + "[" + + (initialMap.has(initial) ? initialMap.get(initial) : initial) + + "]" + ) + .join(""); +} From f98d4e81eee2b0168e1824a2201da7160d843593 Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Thu, 12 Sep 2024 12:36:20 +0900 Subject: [PATCH 09/18] solve ex8 --- "\354\234\244\354\230\201\355\227\214/ex7.ts" | 1 - "\354\234\244\354\230\201\355\227\214/ex8.ts" | 27 ++++++++++++++----- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git "a/\354\234\244\354\230\201\355\227\214/ex7.ts" "b/\354\234\244\354\230\201\355\227\214/ex7.ts" index bb41f75..4b21be9 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex7.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex7.ts" @@ -35,7 +35,6 @@ export async function getPosts(userId: number | string):Promise { const postsByUserID: Post[] = []; for(const res of resList){ - const commentsres:CommentResponse[] = await fetch(`${POST_URL}/${res.id}/comments`, {method: "GET"}) .then((response) => response.json()) as CommentResponse[]; diff --git "a/\354\234\244\354\230\201\355\227\214/ex8.ts" "b/\354\234\244\354\230\201\355\227\214/ex8.ts" index a67a2d2..6c5ce2c 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex8.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex8.ts" @@ -1,11 +1,24 @@ // dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; -// function throttle... +let timer: number | NodeJS.Timeout; +timer=0; +const debouncing = (cb: any, delay: number) => (i: number) => { + clearTimeout(timer); + timer = setTimeout(()=>cb(i), delay); +}; + +let isCalled: Boolean; +const throttling = (cb: any, delay: number) => (i: number) => { + if(!isCalled){ + cb(i); + isCalled = true; + setTimeout(()=>{isCalled = false}, delay); + } +}; -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 +// function throttle... +const d = debouncing((a: number) => console.log('debounce: ', a + 1), 500); +for (let i = 10; i < 15; i++) d(i); // 15 출력 -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 +const t = throttling((a: number) => console.log('throttle: ',a + 1), 500); +for (let i = 10; i < 15; i++) t(i); // 11 출력 \ No newline at end of file From e903ac7303bf228f95405ce0df18b4b986aa30ee Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Fri, 13 Sep 2024 00:02:20 +0900 Subject: [PATCH 10/18] . --- .../ex10.ts" | 282 ++++++++++++++++-- "\354\234\244\354\230\201\355\227\214/ex4.js" | 6 +- "\354\234\244\354\230\201\355\227\214/ex7.ts" | 4 +- 3 files changed, 258 insertions(+), 34 deletions(-) diff --git "a/\354\234\244\354\230\201\355\227\214/ex10.ts" "b/\354\234\244\354\230\201\355\227\214/ex10.ts" index 1ffaef5..1f6f31b 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex10.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex10.ts" @@ -13,59 +13,285 @@ class Collection { this.arr.push(...args); return this.arr; } +} + +class Stack extends Collection {} +class Queue extends Collection {} + +// ArrayList 클래스를 작성하세요. +export interface ListNode { + value: T; + rest?: ListNode; +} - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); +class ArrayList extends Collection { + // {} = list + // [] = array + public static listToArray(list: ListNode):any[]{ + const arr: any[] = []; + let lst = list; + while(true){ + let value = lst.value; + arr.push(value); + if(lst.rest === undefined){break}; + lst = lst.rest as ListNode; + } + return arr; + } + public static arrayToList(arr: any[]):ListNode{ + if (arr.length === 0) { throw Error('배열이 비어있습니다.'); } + let node: ListNode = { value: arr[0] }; + let current = node; + for (let i = 1; i < arr.length; i++) { + current.rest = { value: arr[i] }; + current = current.rest; + } + return node; } + private node: ListNode | null; // 메인으로 관리해야 하는 객체형 리스트 - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); + constructor(arr: T[]){ + super() + this.push(...arr); + this.node = this.arrayToLinkedNode(this._arr) as ListNode; } - remove() { - return this.poll; + toString(): string { + const listToString = (node: ListNode | undefined): string => { + if (!node) { + return ''; + } + return `{ value: ${node.value}, rest: ${node.rest ? listToString(node.rest) : 'null'} }`; + }; + + return listToString(this.node as ListNode); } - get length() { - return this.arr.length; + add(addValue: T, index?: number): ListNode { + if (index === undefined) { + // 인덱스가 없는 경우: 리스트의 끝에 값 추가 + let lst = this.node; + if (!lst) { + this.node = { value: addValue }; + return this.node; + } + while (lst.rest !== undefined) { + lst = lst.rest as ListNode; + } + lst.rest = { value: addValue }; + return this.node as ListNode; + } else { + // 인덱스가 있는 경우: 지정한 인덱스에 값 추가 + if (index < 0) { + throw new Error("인덱스는 0 이상의 정수여야 합니다."); + } + + if (index === 0) { + this.node = { value: addValue, rest: this.node as ListNode }; + return this.node; + } + + let current: ListNode | undefined = this.node as ListNode; + let depth = 0; + + while (current !== undefined && depth < index - 1) { + current = current.rest; + depth++; + } + + if (current === undefined) { + throw new Error("인덱스가 리스트의 길이를 초과했습니다."); + } + + current.rest = { value: addValue, rest: current.rest }; + return this.node as ListNode; + } } - get isEmpty() { - return !this.arr.length; + remove(removedValue: T): ListNode | undefined { + if( !this.node){return undefined}; + if(this.node.value === removedValue){ + this.node = this.node.rest as ListNode; + return this.node; + } + + let current = this.node; + while(current.rest !== undefined){ + if(current.rest.value === removedValue){ + current.rest = current.rest.rest; + return this.node; + } + current = current.rest; + } + return this.node; } - clear() { - this.arr.length = 0; + removeByIndex(index: number): ListNode | undefined { + if(!this.node){return undefined}; + if(index === 0){ + this.node = this.node.rest as ListNode; + return this.node; + } + + let current: ListNode | undefined = this.node; + let depth = 0; + + while(current!==undefined && current.rest!==undefined && depth | undefined { + if (!this.node) { throw new Error("빈 배열입니다."); } + let current: ListNode | null = this.node; + let depth = 0; + + while (depth < index) { + if (!current?.rest) { throw new Error("인덱스가 리스트의 길이를 초과했습니다."); } + current = current.rest; + depth++; + } + + if (current) { + current.value = insertValue; + } + + return this.node; + } + + get(index: number){ + let lst = this.node as ListNode; + if(index === 0){return lst.value;} + + let current: ListNode | undefined = this.node as ListNode; + let depth = 0; + while(current!==undefined && current.rest!==undefined && depth<=index-1){ + current = current.rest; + depth++; + } + if(current){return current.value} + } + + indexOf(targetValue: T): number | undefined{ + if( !this.node){return undefined}; + + let current = this.node; + let index = 0; + + while(current !== undefined){ + if(current.value === targetValue){return index;} + current = current.rest as ListNode; + index++; + } + return undefined; } - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; + contains(value: T): boolean{ + if(!this.node){return false;} + let current = this.node; + while(current !== undefined){ + if(current.value === value){return true;} + current = current.rest as ListNode; } + + return false; } - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; + isEmpty(): boolean { + return this.node === null; } - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); + size(): number{ + let lst = this.node as ListNode; + let depth:number = 0; + while(true){ + if(lst.rest === undefined){ + break; + }; + lst = lst.rest as ListNode; + depth++; + } + return (depth + 1); } - private isQueue() { - return this instanceof Queue; + clear(){ + this.node = null; + console.log("배열이 초기화되었습니다. add() 함수를 통해 초기 배열을 할당해주세요.") + } + + iterator() { + let current = this.node as ListNode; + + return { + next(): { value: T | undefined; done: boolean } { + if (current === undefined) { + return { value: undefined, done: true }; + } + + let value = current.value ; + current = current.rest as ListNode; + return { value, done: false }; + } + }; + } + + toArray(): T[] { + const list: ListNode = this.node as ListNode; + const arr: any[] = []; + let lst = list; + while(true){ + let value = lst.value; + arr.push(value); + if(lst.rest === undefined){break}; + lst = lst.rest as ListNode; + } + return arr; + } + + // 초기 배열을 리스트 노드로 변환 + arrayToLinkedNode(arr:T[]):ListNode|null{ + if (arr.length === 0) { return null; } + + let node: ListNode = { value: arr[0] }; + let current = node; + + for (let i = 1; i < arr.length; i++) { + current.rest = { value: arr[i] }; + current = current.rest; + }; + return node; } } -class Stack extends Collection {} -class Queue extends Collection {} +const arrLst = new ArrayList([1]); +console.log(arrLst.add(3)) +console.log(arrLst.add(5)) +console.log(arrLst.add(2, 1)) +console.log(arrLst.add(4, 3)) +console.log(arrLst.toString()) +console.log(arrLst.get(2)) +console.log(arrLst.indexOf(3)) +console.log(arrLst.remove(1)) +console.log(arrLst.removeByIndex(0)) +console.log(arrLst.toString()) +console.log(arrLst.set(0, 300)) +console.log(arrLst.contains(300)) +console.log(arrLst.contains(301)) +console.log(arrLst.toString()) +console.log(arrLst.iterator().next()) +console.log(arrLst.toArray()) +arrLst.clear(); +console.log(arrLst.isEmpty()) +console.log(arrLst.add(1)) +console.log(arrLst.isEmpty()) -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} +console.log(ArrayList.listToArray({ value: 1, rest: { value: 2, rest: { value: 3 } } })) +console.log(ArrayList.arrayToList([1,2,3,])); export { Stack, Queue, ArrayList }; diff --git "a/\354\234\244\354\230\201\355\227\214/ex4.js" "b/\354\234\244\354\230\201\355\227\214/ex4.js" index 519da19..b93ea7d 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex4.js" +++ "b/\354\234\244\354\230\201\355\227\214/ex4.js" @@ -27,7 +27,7 @@ function deepCopy(obj, seen = new WeakMap()) { if (obj instanceof WeakMap) { const weakMapCopy = new WeakMap(); - seen.set(obj, weakMapCopy); // 순환 참조 방지용 + seen.set(obj, weakMapCopy); return weakMapCopy; } @@ -42,7 +42,7 @@ function deepCopy(obj, seen = new WeakMap()) { if (obj instanceof WeakSet) { const weakSetCopy = new WeakSet(); - seen.set(obj, weakSetCopy); // 순환 참조 방지용 + seen.set(obj, weakSetCopy); return weakSetCopy; } @@ -63,7 +63,7 @@ function deepCopy(obj, seen = new WeakMap()) { } const objCopy = {}; - seen.set(obj, objCopy); // 순환 참조 방지용 + seen.set(obj, objCopy); for (const key of Object.keys(obj)) { objCopy[key] = deepCopy(obj[key], seen); } diff --git "a/\354\234\244\354\230\201\355\227\214/ex7.ts" "b/\354\234\244\354\230\201\355\227\214/ex7.ts" index 4b21be9..f4b34aa 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex7.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex7.ts" @@ -1,5 +1,3 @@ -import { title } from "process"; - const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; export type CommentResponse = { postId: number; @@ -35,7 +33,7 @@ export async function getPosts(userId: number | string):Promise { const postsByUserID: Post[] = []; for(const res of resList){ - const commentsres:CommentResponse[] = await fetch(`${POST_URL}/${res.id}/comments`, {method: "GET"}) + const commentsres:CommentResponse[] = await fetch(`${POST_URL}/${res.postId}/comments`, {method: "GET"}) .then((response) => response.json()) as CommentResponse[]; const comments:Comment[] = commentsres.map((res)=>{return { From 7508bfde4d5cf937deaa7060f036d91cefce667b Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Fri, 13 Sep 2024 06:26:14 +0900 Subject: [PATCH 11/18] setting tailwind --- .../ex1/index.html" | 13 + .../ex1/input.css" | 3 + .../ex1/output.css" | 568 ++++++++++++++++++ .../ex1/tailwind.config.js" | 9 + 4 files changed, 593 insertions(+) create mode 100644 "\354\234\244\354\230\201\355\227\214/ex1/input.css" create mode 100644 "\354\234\244\354\230\201\355\227\214/ex1/output.css" create mode 100644 "\354\234\244\354\230\201\355\227\214/ex1/tailwind.config.js" diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/index.html" "b/\354\234\244\354\230\201\355\227\214/ex1/index.html" index e69de29..5e4a3df 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex1/index.html" +++ "b/\354\234\244\354\230\201\355\227\214/ex1/index.html" @@ -0,0 +1,13 @@ + + + + + + + + +

+ Hello world! +

+ + \ No newline at end of file diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/input.css" "b/\354\234\244\354\230\201\355\227\214/ex1/input.css" new file mode 100644 index 0000000..bd6213e --- /dev/null +++ "b/\354\234\244\354\230\201\355\227\214/ex1/input.css" @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/output.css" "b/\354\234\244\354\230\201\355\227\214/ex1/output.css" new file mode 100644 index 0000000..f56387b --- /dev/null +++ "b/\354\234\244\354\230\201\355\227\214/ex1/output.css" @@ -0,0 +1,568 @@ +/* +! tailwindcss v3.4.11 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: #e5e7eb; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +6. Use the user's configured `sans` font-variation-settings by default. +7. Disable tap highlights on iOS +*/ + +html, +:host { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ + font-feature-settings: normal; + /* 5 */ + font-variation-settings: normal; + /* 6 */ + -webkit-tap-highlight-color: transparent; + /* 7 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font-family by default. +2. Use the user's configured `mono` font-feature-settings by default. +3. Use the user's configured `mono` font-variation-settings by default. +4. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + /* 1 */ + font-feature-settings: normal; + /* 2 */ + font-variation-settings: normal; + /* 3 */ + font-size: 1em; + /* 4 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-feature-settings: inherit; + /* 1 */ + font-variation-settings: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + letter-spacing: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +input:where([type='button']), +input:where([type='reset']), +input:where([type='submit']) { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Reset default styling for dialogs. +*/ + +dialog { + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden] { + display: none; +} + +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +.text-3xl { + font-size: 1.875rem; + line-height: 2.25rem; +} + +.font-bold { + font-weight: 700; +} + +.underline { + text-decoration-line: underline; +} \ No newline at end of file diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/tailwind.config.js" "b/\354\234\244\354\230\201\355\227\214/ex1/tailwind.config.js" new file mode 100644 index 0000000..edd33e2 --- /dev/null +++ "b/\354\234\244\354\230\201\355\227\214/ex1/tailwind.config.js" @@ -0,0 +1,9 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./**/*.{html,js}"], + theme: { + extend: {}, + }, + plugins: [], +} + From 606999c0081154543c61eb781a073b09c077dfbf Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Fri, 13 Sep 2024 13:14:55 +0900 Subject: [PATCH 12/18] solve ex 1 --- .../ex1/book-edit.html" | 69 +++++ .../ex1/index.html" | 270 +++++++++++++++++- .../ex1/public/github.png" | Bin 0 -> 2140 bytes .../ex1/public/js.png" | Bin 0 -> 2009 bytes .../ex1/public/kakao.png" | Bin 0 -> 945 bytes .../ex1/public/nave.png" | Bin 0 -> 1187 bytes .../ex1/public/ts.png" | Bin 0 -> 1895 bytes ...4\353\224\260\353\232\234\354\235\264.jpg" | Bin 0 -> 4677 bytes .../ex1/register.html" | 51 ++++ 9 files changed, 383 insertions(+), 7 deletions(-) create mode 100644 "\354\234\244\354\230\201\355\227\214/ex1/public/github.png" create mode 100644 "\354\234\244\354\230\201\355\227\214/ex1/public/js.png" create mode 100644 "\354\234\244\354\230\201\355\227\214/ex1/public/kakao.png" create mode 100644 "\354\234\244\354\230\201\355\227\214/ex1/public/nave.png" create mode 100644 "\354\234\244\354\230\201\355\227\214/ex1/public/ts.png" create mode 100644 "\354\234\244\354\230\201\355\227\214/ex1/public/\353\235\274\353\224\260\353\232\234\354\235\264.jpg" diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/book-edit.html" "b/\354\234\244\354\230\201\355\227\214/ex1/book-edit.html" index e69de29..8bba98b 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex1/book-edit.html" +++ "b/\354\234\244\354\230\201\355\227\214/ex1/book-edit.html" @@ -0,0 +1,69 @@ + + + + + + Book Edit Page + + + + + + + + +
+
+
+ + +
+ + +
+
+

There is no marks . . .

+
+ +
+ + + + \ No newline at end of file diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/index.html" "b/\354\234\244\354\230\201\355\227\214/ex1/index.html" index 5e4a3df..b1b68de 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex1/index.html" +++ "b/\354\234\244\354\230\201\355\227\214/ex1/index.html" @@ -1,13 +1,269 @@ - - + + - + Index Page + - -

- Hello world! -

+ + + + + + +
+
+ +
+

📓 BookMark

+
+
+
+ Google +
+

+ Naver +

+

+ This is Naver Web site. +

+
+
+
+ +
+
+
+
+ Google +
+

+ Github +

+

+ This is a simple Github Blog. + Explore more about the topics we cover. Explore more about + the topics we cover. Explore more about the topics we cover. +

+
+
+
+ +
+
+
+
+ Google +
+

+ Kakao +

+

+ This is a simple introduction about the Kakao. + Explore more about the topics we cover. Explore more about + the topics we cover. Explore more about the topics we cover. +

+
+
+
+ +
+
+
+
+ Google +
+

+ 윤영헌의 블로그 +

+

+ 윤영헌의 블로그입니다. +

+
+
+
+ +
+
+
+
+ +
+
+ + +
+

✏️ Study

+
+
+
+ Google +
+

+ JavaScript +

+

+ 자바스크립트 공부한 내용을 모아놓은 페이지입니다. +

+
+
+ +
+
+
+
+ Google +
+

+ TypeScript +

+

+ 저는 타입 스크립트를 오랜 시간 공부했습니다. +

+
+
+
+ +
+
+
+
+ +
+
+
+
+ + \ No newline at end of file diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/public/github.png" "b/\354\234\244\354\230\201\355\227\214/ex1/public/github.png" new file mode 100644 index 0000000000000000000000000000000000000000..d54c1bf5f14272933b3ba623dbc7dc468e5a0fdd GIT binary patch literal 2140 zcmaKu`9Bkm1IFDS*K)1&QqJ6w9zm;Y~0*1yT+CuQ;% z9x!toBmI|O7z~D1>af!DL5-9lmE=L$#LoxEwB3V~Q~KH1^1fNt*NuJZr`eqq(jjs4 zk6-04a`G_kh-1Fr4>Q91SbSH zJt9ZKsBtK>rNF(#bQqqG%UETWoE!vC>Ft-;gm1uN-fJ4B;r{8tpWt4yeMq52pD5Cl z;NQz81TOh*FV{@gtJ)dooyZo7snDMXvb|0v*f-3LB1_xu-`=T4;Jv-M@}n|7me;!k z=vaU0hTlB$i-*O9F|F(N&D zzM=aDJ}1MB9f9Rh%8K;SJmUcAic?+)e}zZ^rK^iLTC?LI^8c#EsHIbNqRWe+%5{+N z-XU58)|$r#tajd&OZL9-G`Ww(?^GMbBu7Z&X(k1Oz;WYI1`7ob9c)P91dit<1(8;R zP>0YD&V&>CfSWZu&oQ4oO-}^%pJpAnJIcJn6nlG0jtN;9wY7A#GxR+T5Prv^RG*Nw zXL0MRz7-ADfSt1 zt$JNq=$l-2f1!8dq5rC5HC1fVsS$iR#>$HODZ^5Ma}|uXymhTE#o=vEVv8SiMupf+ zc()~JaCxi&1_~16h8~}ij~9oTuR7tUX_?}|Eq`{r3b6SVcO*0-!IwB?-{z-`qgPE- zo&K1bu9BnM6qJ7LJlQ`N{?(~R*ef82%t4O9z_6BerDm|x^?t<@2%@_Kt!pG9y2 z3k8Rl2J{jnxL)KTB-4#dOdKaz8oE#`ZQ_msfPTNI%cuTcxp=e}$Ki4O8_hqGkDb@S zwfx7}gfW%l)LqzU-fIy~Z@0PtBDO*mt3I%(P5wM!KG1z`!Vr&bL;2?VIrFMgBvX?b zvhm%w`WHiXs7HG5Au-X@EDN(C&D=6p!EP=C#wD67&(!TKJ)AS@tA$DeE{!5YszgCV z*@H)3`1JPxVB84*q`7z|RK1B6e=QBB8DjxK8oawb@4NDU=Nfv8jaTrBwBjJjT^5<*>`Ho%VN81SYQ#C=GJ?##!b9PD zq&}iVmv0PfAs}656#Aph3}^d3`#atTv4-s2BOm!C z#<6KEx6VsYS-RG>Y|{#S^~Iv^Q5a|c*QX-xf=>9%-PgD6NTsAjwr_q*fn$lLErqf zihpA)J70L7i_|ecfmrA%9`6wzpz8CtBUgxF`%8?du`>^li7}tgd3N&H20DGR>h>;& za~Nqp>qzk)^sGx_YQ*={6MiII5LOuS%X%}S7LoOITr@R1%)&Mdhb#%_n3K1 z*Y4BV)VNYK`t)U2Jdu3UW*PybU_!@zUeAR&HsuoQaEo-(Zt%TY90pU-OY#*nhu}H>A>^cQOzn#SbI)3>cDqGuOLnu5)^7vlqf{?#aZBioS2nB{Q8d zxscNAHtRpFAjw$l=_+vj`WE_(y-b%z-2Rb`cT5hLuwPF6#^^*@PH&Yyl9?N7uj9X1 z^!#A*UDX{;~Xt;}7*_Go|a0+Xo` K6jBFrj`<&em@b|G literal 0 HcmV?d00001 diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/public/js.png" "b/\354\234\244\354\230\201\355\227\214/ex1/public/js.png" new file mode 100644 index 0000000000000000000000000000000000000000..6de842352fe290eb98924907a7840692d32d21ea GIT binary patch literal 2009 zcmbuA`9Bj51IL}C8Cz;c+^?|CM?PKEUH}|{Q1KXd%40Hfd zS7g*x#GcZj*<{&Ze`z>ObdseY3lTwCNG@;`8MFftLDDd&s18!x%s?VJ1_F{2&QDNb z2?chLD~Q;c|1$#JBa$;dl8l@eD-bKrTXS2bpqzSb91ip?uaxs+{>I<=(v7zz+3u-h z^*BQQSE6P-SAh}}Hk+PuAbL`cE0G}o+I5OO;K?2Yzqygdy5tcd+ao{BD)LsPUUIwP zqhl7AA{ zk%=>Mle<6lQXz^Q&3E)SjlNbn59}hICC{{16~eUwc~0VoV*jxkJ<$!^3MG&lMExur zp^X{79oqqoMX!24&OW40XmZ?Dld>e^eKO1#$+C#K!HW1UrMgK+s4O)LE7m$PD*Wixcx+n#Nh)CN-eEo8E*oy@}et zer-(*4X>p}r&XbJSEGgF(RrbJ#&}DRzkdycKh9>=v9R*zV1>dl?WW1}oE*H@Jj zlz)(3eltia*NcAYeZ@ObOTfD(Fc-zpfMezuaVtZB(G}3Bp%Z@Dp~aOtV)i?{%++DZ zq3na3D$x+*g@7k~_FQgsS{U~I95v7SJ*rPg8C8tgt9tx<&n6!R4EhKV6N1Z2IAdrmuptf_n^279dx$*7u0og4=#bNYxTcBw7mqWNxjm=wX zk2JLvWem{keErB@$Bi*wJCP^#a^n{xHTk~yi#heizK>t_Z(7>o8&ah_9Mq`~R+d&x z$wAi#hXWJZB27|QNbMaY8f4j1)pX`07GI_3HMIcXi~*aa$>Q$)bGg{*z*<1VVe*`s z3MLO}^}^&R!-!noV2Pv;cz*RWDYGF@&mMEhjg7%hR(Cc=dcaNYD=q7Jdw7LB4cz*a zbWS7 zt73=D?YV(MtbwLi53W7U>uI;OKyoKyYQSr$of{IvlZP{8E?kkQKAc~+Q~UVZHlTy0Ju`}b%P`N^G~TS`bN7yxq=#dJz;B~M2qcW?R7@~D0(n9u-oLfTEUYodNVdqYEWfl76_(*l zT!%kCJ9+&o$)( zVchP;BHcK0icOuV19#P&{qyQ0SLcQEO_(tRte__3`lE_5isD3oRy{5;6!JfLZ54l4 Y_9*viEi&0$_#Qwyk znEUH#`sO42?Q#9{sr%+p{r0o|_|E1SE>6Aad~V{;xR0jH6_CI-zW& z>u1(?%gtT|G)Z^p^#A|>000000000000000000000002^3}X-QbF!>=H@`1N{n&&2 zglhaSn>^;pUVedv^YpryCjVSrVBuqO=n@N43guC#k3xME>Z4E}h59JeN1;9n^-;Jt zNUL*?bwWoJR*R%~I{RQJb41~C|H{4W+t^(=|NGKN^=<4dT;(6Hm6I&OeBrtZ`-`tv zN9!09hUzHHYOm*$C^LrXD11ulmU`!J?S-q-6binHt%cRd1YQd+Hf@F3vk5H5vBnJ0 zR(N9q^G&QNL$nmGuT0@Q+LR&ug~LY^n8uqjgun3Ct}>!mrryGh{SvMsP8q^iSQV!5 zCgzkOe1+F0Q1r69=PS%67xE?S`3fuhB^2JjX)Ns9U&6b{Q-)|POiiHR_4b#h!np}t z#vU?ALt){|$K%owI{ zxHDfu`9M>co6FHs^@ier{c*2*i9Oy4v=?3}Zao?8g-ITJzHs%zsoep-ytVY*NxY3c zVJQ1+F>^ks>Oc9;HO;+~sCqQ|!MQGV&MJ~O$z#J$-S-xv#}%I%?hn^fn>dO+Wr(JG z{H^m|J)C&{`qM& zION&00000NkvXXu0mjf{ki4U literal 0 HcmV?d00001 diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/public/nave.png" "b/\354\234\244\354\230\201\355\227\214/ex1/public/nave.png" new file mode 100644 index 0000000000000000000000000000000000000000..aecb544985817a974a94b2620e4eafacc11e8d9f GIT binary patch literal 1187 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 RZr4@$=Yo;hJ+GsW{{sxAT<8D* literal 0 HcmV?d00001 diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/register.html" "b/\354\234\244\354\230\201\355\227\214/ex1/register.html" index e69de29..5141451 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex1/register.html" +++ "b/\354\234\244\354\230\201\355\227\214/ex1/register.html" @@ -0,0 +1,51 @@ + + + + + + Sign Up Page + + + + + + + + +
+

Sign Up

+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
+ + + From a045392c2d2e2667689120a79c5371e0749b884b Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Fri, 13 Sep 2024 14:03:59 +0900 Subject: [PATCH 13/18] solved 10 --- .../ex10.test.ts" | 3 + .../ex10.ts" | 66 ++++++++++++------- 2 files changed, 47 insertions(+), 22 deletions(-) diff --git "a/\354\234\244\354\230\201\355\227\214/ex10.test.ts" "b/\354\234\244\354\230\201\355\227\214/ex10.test.ts" index 6218a79..fd7523b 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex10.test.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex10.test.ts" @@ -1,4 +1,7 @@ import { ArrayList } from './ex10'; +import assert from 'assert'; console.log('🚀 ArrayList:', ArrayList); // 여기에 테스트코드를 작성하세요. +const arrlst = new ArrayList([1,2,3]) +assert.deepStrictEqual(arrlst.toArray(), [1,2,3]); \ No newline at end of file diff --git "a/\354\234\244\354\230\201\355\227\214/ex10.ts" "b/\354\234\244\354\230\201\355\227\214/ex10.ts" index 1f6f31b..441a258 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex10.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex10.ts" @@ -59,9 +59,9 @@ class ArrayList extends Collection { toString(): string { const listToString = (node: ListNode | undefined): string => { if (!node) { - return ''; + return 'a'; } - return `{ value: ${node.value}, rest: ${node.rest ? listToString(node.rest) : 'null'} }`; + return `{ value: ${node.value}, rest: ${node.rest ? listToString(node.rest) : 'no more'} }`; }; return listToString(this.node as ListNode); @@ -178,6 +178,10 @@ class ArrayList extends Collection { if(current){return current.value} } + peek() { + return this.get(this.size() - 1); + } + indexOf(targetValue: T): number | undefined{ if( !this.node){return undefined}; @@ -241,6 +245,22 @@ class ArrayList extends Collection { }; } + [Symbol.iterator](): Iterator { + let current = this.node as ListNode; + + return { + next(): IteratorResult { + if (current === null) { + return { value: undefined, done: true }; + } + + let value = current.value; + current = current.rest as ListNode; + return { value, done: false }; + }, + }; + } + toArray(): T[] { const list: ListNode = this.node as ListNode; const arr: any[] = []; @@ -269,27 +289,29 @@ class ArrayList extends Collection { } } -const arrLst = new ArrayList([1]); -console.log(arrLst.add(3)) -console.log(arrLst.add(5)) -console.log(arrLst.add(2, 1)) -console.log(arrLst.add(4, 3)) -console.log(arrLst.toString()) -console.log(arrLst.get(2)) -console.log(arrLst.indexOf(3)) -console.log(arrLst.remove(1)) -console.log(arrLst.removeByIndex(0)) -console.log(arrLst.toString()) -console.log(arrLst.set(0, 300)) -console.log(arrLst.contains(300)) -console.log(arrLst.contains(301)) +const arrLst = new ArrayList([1,2,3,4]); console.log(arrLst.toString()) -console.log(arrLst.iterator().next()) -console.log(arrLst.toArray()) -arrLst.clear(); -console.log(arrLst.isEmpty()) -console.log(arrLst.add(1)) -console.log(arrLst.isEmpty()) +// console.log(arrLst.add(3)) +// console.log(arrLst.add(5)) +// console.log(arrLst.add(2, 1)) +// console.log(arrLst.add(4, 3)) +// console.log(arrLst.toString()) +// console.log(arrLst.get(2)) +// console.log(arrLst.indexOf(3)) +// console.log(arrLst.remove(1)) +// console.log(arrLst.removeByIndex(0)) +// console.log(arrLst.toString()) +// console.log(arrLst.set(0, 300)) +// console.log(arrLst.contains(300)) +// console.log(arrLst.contains(301)) +// console.log(arrLst.toString()) +// console.log(arrLst.iterator().next()) +// console.log(arrLst.toArray()) +// console.log(arrLst.toString()) +// arrLst.clear(); +// console.log(arrLst.isEmpty()) +// console.log(arrLst.add(1)) +// console.log(arrLst.isEmpty()) console.log(ArrayList.listToArray({ value: 1, rest: { value: 2, rest: { value: 3 } } })) console.log(ArrayList.arrayToList([1,2,3,])); From 8cb2144fc2b14b9acae8e5cd3f1a6797d9875419 Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Fri, 13 Sep 2024 14:24:06 +0900 Subject: [PATCH 14/18] add test_10 --- .../ex10.test.ts" | 25 +++++++++++++++++-- .../ex10.ts" | 25 ------------------- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git "a/\354\234\244\354\230\201\355\227\214/ex10.test.ts" "b/\354\234\244\354\230\201\355\227\214/ex10.test.ts" index fd7523b..7101cec 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex10.test.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex10.test.ts" @@ -3,5 +3,26 @@ import assert from 'assert'; console.log('🚀 ArrayList:', ArrayList); // 여기에 테스트코드를 작성하세요. -const arrlst = new ArrayList([1,2,3]) -assert.deepStrictEqual(arrlst.toArray(), [1,2,3]); \ No newline at end of file +// instance +const arrLst = new ArrayList([1]) +assert.deepStrictEqual(arrLst.toArray(), [1]); +assert.deepStrictEqual(arrLst.add(3), {value: 1, rest: {value: 3}}); +assert.deepStrictEqual(arrLst.add(2,1), {value: 1, rest: {value: 2, rest: {value: 3}}}); +assert.deepStrictEqual(arrLst.peek(), 3); +assert.deepStrictEqual(arrLst.get(1), 2); +assert.deepStrictEqual(arrLst.indexOf(2), 1); +assert.deepStrictEqual(arrLst.remove(1), {value: 2, rest: {value: 3}}); +assert.deepStrictEqual(arrLst.removeByIndex(0), {value: 3}); +assert.deepStrictEqual(arrLst.contains(3), true); +assert.deepStrictEqual(arrLst.contains(1), false); +assert.deepStrictEqual(arrLst.set(0, 1), {value: 1}); +assert.deepStrictEqual(arrLst.add(3), {value: 1, rest: {value: 3}}); +assert.deepStrictEqual(arrLst.iterator().next(), {value: 1, done: false}); +assert.deepStrictEqual(arrLst.toArray(), [1,3]); +assert.deepStrictEqual(arrLst.toString(), '{ value: 1, rest: { value: 3, rest: no more } }'); +assert.deepStrictEqual(arrLst.isEmpty(), false); +arrLst.clear() +assert.deepStrictEqual(arrLst.isEmpty(), true); +// static +assert.deepStrictEqual(ArrayList.listToArray({ value: 1, rest: { value: 2, rest: { value: 3 } } }), [ 1, 2, 3 ]); +assert.deepStrictEqual(ArrayList.arrayToList([1,2,3,]), { value: 1, rest: { value: 2, rest: { value: 3 } } }); \ No newline at end of file diff --git "a/\354\234\244\354\230\201\355\227\214/ex10.ts" "b/\354\234\244\354\230\201\355\227\214/ex10.ts" index 441a258..555c4ca 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex10.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex10.ts" @@ -290,30 +290,5 @@ class ArrayList extends Collection { } const arrLst = new ArrayList([1,2,3,4]); -console.log(arrLst.toString()) -// console.log(arrLst.add(3)) -// console.log(arrLst.add(5)) -// console.log(arrLst.add(2, 1)) -// console.log(arrLst.add(4, 3)) -// console.log(arrLst.toString()) -// console.log(arrLst.get(2)) -// console.log(arrLst.indexOf(3)) -// console.log(arrLst.remove(1)) -// console.log(arrLst.removeByIndex(0)) -// console.log(arrLst.toString()) -// console.log(arrLst.set(0, 300)) -// console.log(arrLst.contains(300)) -// console.log(arrLst.contains(301)) -// console.log(arrLst.toString()) -// console.log(arrLst.iterator().next()) -// console.log(arrLst.toArray()) -// console.log(arrLst.toString()) -// arrLst.clear(); -// console.log(arrLst.isEmpty()) -// console.log(arrLst.add(1)) -// console.log(arrLst.isEmpty()) - -console.log(ArrayList.listToArray({ value: 1, rest: { value: 2, rest: { value: 3 } } })) -console.log(ArrayList.arrayToList([1,2,3,])); export { Stack, Queue, ArrayList }; From b5c4efc17c73338d461bc4080843baafb6256143 Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Fri, 13 Sep 2024 14:36:51 +0900 Subject: [PATCH 15/18] =?UTF-8?q?=EC=88=99=EC=A0=9C=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ex10.test.ts" | 1 + "\354\234\244\354\230\201\355\227\214/ex5.js" | 23 +++----- .../ex7.test.ts" | 52 +++++++++++++++++++ "\354\234\244\354\230\201\355\227\214/ex7.ts" | 8 ++- "\354\234\244\354\230\201\355\227\214/ex8.ts" | 4 +- "\354\234\244\354\230\201\355\227\214/ex9.js" | 1 + 6 files changed, 67 insertions(+), 22 deletions(-) diff --git "a/\354\234\244\354\230\201\355\227\214/ex10.test.ts" "b/\354\234\244\354\230\201\355\227\214/ex10.test.ts" index 7101cec..a69afe4 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex10.test.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex10.test.ts" @@ -6,6 +6,7 @@ console.log('🚀 ArrayList:', ArrayList); // instance const arrLst = new ArrayList([1]) assert.deepStrictEqual(arrLst.toArray(), [1]); +assert.deepStrictEqual(arrLst.size(), 1); assert.deepStrictEqual(arrLst.add(3), {value: 1, rest: {value: 3}}); assert.deepStrictEqual(arrLst.add(2,1), {value: 1, rest: {value: 2, rest: {value: 3}}}); assert.deepStrictEqual(arrLst.peek(), 3); diff --git "a/\354\234\244\354\230\201\355\227\214/ex5.js" "b/\354\234\244\354\230\201\355\227\214/ex5.js" index f618901..869f098 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex5.js" +++ "b/\354\234\244\354\230\201\355\227\214/ex5.js" @@ -1,9 +1,9 @@ module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => { - return data.filter((str) => str.match(getRegExp(firstSounds))); + searchByKoreanInitialSound: (obj, firstSounds) => { + return obj.filter((str) => str.match(getRegExp(firstSounds))); }, }; -const INITIAL = [ +const initial = [ "ㄱ", "ㄲ", "ㄴ", @@ -24,7 +24,7 @@ const INITIAL = [ "ㅍ", "ㅎ", ]; -const INITIAL_RANGE = [ +const initialRange = [ "가-깋", "까-낗", "나-닣", @@ -48,18 +48,11 @@ const INITIAL_RANGE = [ const initialMap = new Map(); -for (let i = 0; i < INITIAL.length; i++) { - initialMap.set(INITIAL[i], INITIAL_RANGE[i]); -} +for (let i = 0; i < initial.length; i++) { initialMap.set(initial[i], initialRange[i]);} function getRegExp(initials) { return initials - .split("") - .map( - (initial) => - "[" + - (initialMap.has(initial) ? initialMap.get(initial) : initial) + - "]" - ) - .join(""); + .split("") + .map((initial) => "[" + (initialMap.has(initial) ? initialMap.get(initial) : initial) + "]") + .join(""); } diff --git "a/\354\234\244\354\230\201\355\227\214/ex7.test.ts" "b/\354\234\244\354\230\201\355\227\214/ex7.test.ts" index e5d79c5..59ddbbd 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex7.test.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex7.test.ts" @@ -65,6 +65,58 @@ async function test(userId: string | number) { }); // 추가 테스트 코드를 작성하시오. + assert.deepStrictEqual(posts[1], { + postId: 2, + title: 'qui est esse', + comments: [ + { + postId: 2, + id: 6, + email: 'Presley.Mueller@myrl.com', + body: 'doloribus at sed quis culpa deserunt consectetur qui praesentium\n' + + 'accusamus fugiat dicta\n' + + 'voluptatem rerum ut voluptate autem\n' + + 'voluptatem repellendus aspernatur dolorem in' + }, + { + postId: 2, + id: 7, + email: 'Dallas@ole.me', + body: 'maiores sed dolores similique labore et inventore et\n' + + 'quasi temporibus esse sunt id et\n' + + 'eos voluptatem aliquam\n' + + 'aliquid ratione corporis molestiae mollitia quia et magnam dolor' + }, + { + postId: 2, + id: 8, + email: 'Mallory_Kunze@marie.org', + body: 'ut voluptatem corrupti velit\n' + + 'ad voluptatem maiores\n' + + 'et nisi velit vero accusamus maiores\n' + + 'voluptates quia aliquid ullam eaque' + }, + { + postId: 2, + id: 9, + email: 'Meghan_Littel@rene.us', + body: 'sapiente assumenda molestiae atque\n' + + 'adipisci laborum distinctio aperiam et ab ut omnis\n' + + 'et occaecati aspernatur odit sit rem expedita\n' + + 'quas enim ipsam minus' + }, + { + postId: 2, + id: 10, + email: 'Carmen_Keeling@caroline.name', + body: 'voluptate iusto quis nobis reprehenderit ipsum amet nulla\n' + + 'quia quas dolores velit et non\n' + + 'aut quia necessitatibus\n' + + 'nostrum quaerat nulla et accusamus nisi facilis' + } + ] + }); + } test(1); diff --git "a/\354\234\244\354\230\201\355\227\214/ex7.ts" "b/\354\234\244\354\230\201\355\227\214/ex7.ts" index f4b34aa..a47107e 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex7.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex7.ts" @@ -33,7 +33,7 @@ export async function getPosts(userId: number | string):Promise { const postsByUserID: Post[] = []; for(const res of resList){ - const commentsres:CommentResponse[] = await fetch(`${POST_URL}/${res.postId}/comments`, {method: "GET"}) + const commentsres:CommentResponse[] = await fetch(`${POST_URL}/${res.id}/comments`, {method: "GET"}) .then((response) => response.json()) as CommentResponse[]; const comments:Comment[] = commentsres.map((res)=>{return { @@ -59,9 +59,7 @@ export async function getPosts(userId: number | string):Promise { const userId = 1; async function print(){ const posts = await getPosts(userId); - console.log(posts.length); - console.log(posts?.at(-1)?.comments?.length); - console.log(posts[0]); + console.log(posts[1]); }; -// print(); +print(); diff --git "a/\354\234\244\354\230\201\355\227\214/ex8.ts" "b/\354\234\244\354\230\201\355\227\214/ex8.ts" index 6c5ce2c..e7d6689 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex8.ts" +++ "b/\354\234\244\354\230\201\355\227\214/ex8.ts" @@ -2,13 +2,13 @@ let timer: number | NodeJS.Timeout; timer=0; -const debouncing = (cb: any, delay: number) => (i: number) => { +const debouncing = (cb: any, delay: number) => (i: any) => { clearTimeout(timer); timer = setTimeout(()=>cb(i), delay); }; let isCalled: Boolean; -const throttling = (cb: any, delay: number) => (i: number) => { +const throttling = (cb: any, delay: number) => (i: any) => { if(!isCalled){ cb(i); isCalled = true; diff --git "a/\354\234\244\354\230\201\355\227\214/ex9.js" "b/\354\234\244\354\230\201\355\227\214/ex9.js" index ec3044f..62b065f 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex9.js" +++ "b/\354\234\244\354\230\201\355\227\214/ex9.js" @@ -1,3 +1,4 @@ +// 윤영헌 const MENU = { 짜장: { price: 7000 }, 짬뽕: { price: 9900 }, From 46eafc6eb270b82264e3df72658f0d78730b7d71 Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:05:11 +0900 Subject: [PATCH 16/18] refactor html --- package-lock.json | 1362 ++++++++++++++++- package.json | 3 +- .../ex1/index.html" | 3 +- 3 files changed, 1364 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0e0cec7..98b64c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,20 @@ "typescript": "^5.6.2" }, "devDependencies": { - "@types/node": "^22.5.4" + "@types/node": "^22.5.4", + "tailwindcss": "^3.4.11" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@cspotcode/source-map-support": { @@ -28,6 +41,47 @@ "node": ">=12" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -36,6 +90,15 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", @@ -50,6 +113,51 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", @@ -100,16 +208,202 @@ "node": ">=0.4.0" } }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -118,11 +412,953 @@ "node": ">=0.3.1" } }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.45", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz", + "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.11", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.11.tgz", + "integrity": "sha512-qhEuBcLemjSJk5ajccN9xJFtM/h0AVCPaA6C92jNP+M2J8kX+eMJHI7R2HFKUvvAsMpcfLILMCFYSeDwpMmlUg==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -190,11 +1426,135 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yaml": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/package.json b/package.json index e444eef..a9be624 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "author": "indiflex", "license": "ISC", "devDependencies": { - "@types/node": "^22.5.4" + "@types/node": "^22.5.4", + "tailwindcss": "^3.4.11" }, "dependencies": { "ts-node": "^10.9.2", diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/index.html" "b/\354\234\244\354\230\201\355\227\214/ex1/index.html" index b1b68de..c808390 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex1/index.html" +++ "b/\354\234\244\354\230\201\355\227\214/ex1/index.html" @@ -21,7 +21,7 @@
- +

📓 BookMark

@@ -179,7 +179,6 @@

📓 BookMark

-

✏️ Study

From 8a31f0c4b4b43cc22de9b755476f4406f5a5ce46 Mon Sep 17 00:00:00 2001 From: yoounyoungheon <107925716+yoounyoungheon@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:13:17 +0900 Subject: [PATCH 17/18] =?UTF-8?q?url=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\354\234\244\354\230\201\355\227\214/ex1/book-edit.html" | 2 +- "\354\234\244\354\230\201\355\227\214/ex1/index.html" | 2 +- "\354\234\244\354\230\201\355\227\214/ex1/register.html" | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/book-edit.html" "b/\354\234\244\354\230\201\355\227\214/ex1/book-edit.html" index 8bba98b..4f62c15 100644 --- "a/\354\234\244\354\230\201\355\227\214/ex1/book-edit.html" +++ "b/\354\234\244\354\230\201\355\227\214/ex1/book-edit.html" @@ -12,7 +12,7 @@