diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 000000000..e28227c69
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,2 @@
+cypress
+webpack*
\ No newline at end of file
diff --git a/.eslintrc b/.eslintrc
index e64c36932..c8bbcd611 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -1,11 +1,87 @@
{
- "rules": {},
+ "rules": {
+ "import/extensions": ["off"],
+ "no-await-in-loop": "off",
+ "no-constant-condition": "off",
+ "max-lines-per-function": ["error", 12],
+ "max-depth": ["error", 1],
+ "no-console": "off",
+ "class-methods-use-this": "off",
+ "spaced-comment": "off",
+ "lines-between-class-members": [
+ "error",
+ "always",
+ { "exceptAfterSingleLine": true },
+ ],
+ "sort-imports": [
+ "error",
+ {
+ "ignoreCase": true,
+ "ignoreDeclarationSort": true,
+ "ignoreMemberSort": false,
+ "allowSeparatedGroups": true,
+ },
+ ],
+ "import/order": [
+ "error",
+ {
+ "newlines-between": "always",
+ "groups": [
+ ["builtin", "external"],
+ "internal",
+ "parent",
+ "sibling",
+ "index",
+ ],
+ "pathGroups": [
+ {
+ "pattern": "next",
+ "group": "builtin",
+ },
+ {
+ "pattern": "react",
+ "group": "builtin",
+ },
+ {
+ "pattern": "@MyDesignSystem/**",
+ "group": "internal",
+ },
+ {
+ "pattern": "src/**",
+ "group": "internal",
+ },
+ ],
+ "pathGroupsExcludedImportTypes": ["src/**", "@MyDesignSystem/**"],
+ "alphabetize": {
+ "order": "asc",
+ "caseInsensitive": true,
+ },
+ },
+ ],
+ },
"env": {
"es6": true,
- "node": true
+ "node": true,
},
"parserOptions": {
- "ecmaVersion": "latest"
+ "ecmaVersion": "latest",
+ },
+ "parser": "@typescript-eslint/parser",
+ "plugins": ["@typescript-eslint"],
+ "extends": [
+ "airbnb",
+ "airbnb/hooks",
+ "prettier",
+ "eslint:recommended",
+ "plugin:@typescript-eslint/eslint-recommended",
+ "plugin:@typescript-eslint/recommended",
+ ],
+ "settings": {
+ "import/parsers": {
+ "@typescript-eslint/parser": [".ts", ".tsx"],
+ },
+ "import/resolver": {
+ "typescript": {},
+ },
},
- "extends": ["eslint:recommended", "plugin:prettier/recommended"]
}
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 000000000..66e4980ae
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,26 @@
+name: Automatically Deployment
+
+on: [push]
+
+jobs:
+ deployment:
+ runs-on: ubuntu-latest
+
+ name: Deploying to surge
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ with:
+ node-version: '16'
+
+ - name: Setting .env
+ run: |
+ echo "TMDB_API_KEY=$TMDB_API_KEY" >> .env
+ echo "TMDB_ACCESS_TOKEN=$TMDB_ACCESS_TOKEN" >> .env
+ cat .env
+
+ env:
+ TMDB_API_KEY: ${{ secrets.TMDB_API_KEY }}
+ TMDB_ACCESS_TOKEN: ${{ secrets.TMDB_ACCESS_TOKEN }}
+
diff --git a/.gitignore b/.gitignore
index 3c3629e64..1dcef2d9f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
node_modules
+.env
\ No newline at end of file
diff --git a/README.md b/README.md
index 24056b89e..adcb0a015 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,50 @@
# javascript-movie-review
-FE 레벨1 영화관 미션
+FE 레벨1 영화관 미션
+
+
+
+## 시연 영상
+
+![ezgif com-video-to-gif-converter](https://github.com/healim01/javascript-movie-review/assets/74346290/49546f9e-7206-4200-bd30-6c856b355ee4)
+
+
+
+## 모듈 구조
+![모듈구조](https://github.com/healim01/javascript-movie-review/assets/74346290/f0868b16-e84d-478d-b8d1-b427d79ce086)
+
+
+
+## 기능 목록
+
+### 도메인 로직
+
+#### APIClient
+
+- api 데이터 받아오기
+- 더보기 버튼 숨길지 보일지 결정
+
+#### DataStateStore
+
+- 데이터 관리
+- 스택으로 관리
+- 이전 데이터와 합쳐짐
+
+### 영화 리스트 구현
+
+- DataStateStore의 데이터를 받아와서 영화 리스트를 보여줌
+- 스크롤: 스롤링 기능
+
+### 영화 검색 기능
+
+#### 검색 입력창
+
+- enter 키, 검색 아이콘 클릭 시 검색 진행
+
+#### 검색 결과에 따른 영화 리스트
+
+- 검색 결과에 따라 영화 리스트와 타이틀 변경
+
+### 더보기 버튼
+
+- api를 통해 데이터를 불어올때, 다음 검색 대상이 존재하는지 여부에 따라 더보기 버튼을 숨기거나 보여줌
diff --git a/cypress.config.ts b/cypress.config.ts
new file mode 100644
index 000000000..17161e32e
--- /dev/null
+++ b/cypress.config.ts
@@ -0,0 +1,9 @@
+import { defineConfig } from "cypress";
+
+export default defineConfig({
+ e2e: {
+ setupNodeEvents(on, config) {
+ // implement node event listeners here
+ },
+ },
+});
diff --git a/cypress/e2e/more-button.cy.js b/cypress/e2e/more-button.cy.js
new file mode 100644
index 000000000..7535508f4
--- /dev/null
+++ b/cypress/e2e/more-button.cy.js
@@ -0,0 +1,121 @@
+import { getPopularURL, getSearchURL } from "../utils/createURL";
+
+describe("더보기 버튼 테스트", () => {
+ describe("인기 영화 리스트안의 더보기 버튼 테스트", () => {
+ beforeEach(() => {
+ cy.intercept(
+ {
+ method: "GET",
+ url: getPopularURL(1),
+ },
+ { fixture: "movie-popular-page1.json" },
+ ).as("getPopularMovies1");
+
+ cy.visitMainPage();
+
+ cy.wait("@getPopularMovies1").then((intercept) => {
+ cy.get("#more-button").click();
+ });
+ });
+
+ it("인기 영화 리스트에서 더보기 버튼을 눌렀을 경우,인기 영화 리스트에 20개 이하의 영화가 추가된다.", () => {
+ cy.intercept(
+ {
+ method: "GET",
+ url: getPopularURL(2),
+ },
+ { fixture: "movie-popular-page2.json" },
+ ).as("getPopularMovies2");
+
+ cy.wait("@getPopularMovies2").then((intercept) => {
+ cy.get(".item-view").within(() => {
+ cy.get(".item-list").then(($elements) => {
+ expect($elements.length).to.be.at.most(40);
+ });
+ });
+ });
+ });
+
+ it("인기 영화 리스트에서 더보기 버튼을 눌렀을 경우, 더 이상 불러온 영화 데이터가 없으면 더보기 버튼은 사라진다.", () => {
+ cy.intercept(
+ {
+ method: "GET",
+ url: getPopularURL(2),
+ },
+ { fixture: "movie-popular-last-page.json" },
+ ).as("getPopularMoviesLast");
+
+ cy.wait("@getPopularMoviesLast").then((intercept) => {
+ cy.get(".item-view").within(() => {
+ cy.get("#more-button").should("not.be.visible");
+ });
+ });
+ });
+ });
+
+ describe("영화 검색 리스트안의 더보기 버튼 테스트", () => {
+ beforeEach(() => {
+ cy.intercept(
+ {
+ method: "GET",
+ url: getPopularURL(1),
+ },
+ { fixture: "movie-popular-page1.json" },
+ ).as("getPopularMovies1");
+
+ cy.intercept(
+ {
+ method: "GET",
+ url: getSearchURL(1),
+ },
+ { fixture: "movie-search-page1.json" },
+ ).as("getSearchMovies1");
+
+ cy.visitMainPage();
+
+ cy.wait("@getPopularMovies1").then((intercept) => {
+ const TITLE = "행복";
+ cy.get("#search-input").type(TITLE);
+ cy.get(".search-button").click();
+
+ cy.wait("@getSearchMovies1").then((intercept) => {
+ cy.get("#more-button").click();
+ });
+ });
+ });
+
+ it("영화 검색 리스트에서 더보기 버튼을 눌렀을 경우, 영화 검색 리스트에 20개 이하의 영화가 추가된다.", () => {
+ cy.intercept(
+ {
+ method: "GET",
+ url: getSearchURL(2),
+ },
+ { fixture: "movie-search-page2.json" },
+ ).as("getSearchMovies2");
+
+ cy.wait("@getSearchMovies2").then((intercept) => {
+ cy.get(".item-view").within(() => {
+ cy.get(".item-list").then(($elements) => {
+ expect($elements.length).to.be.at.most(40);
+ });
+ });
+ });
+ });
+
+ it.only("영화 검색 리스트에서 더보기 버튼을 눌렀을 경우, 더 이상 불러온 영화 데이터가 없으면 더보기 버튼은 사라진다.", () => {
+ cy.intercept(
+ {
+ method: "GET",
+ url: getSearchURL(2),
+ },
+ { fixture: "movie-search-last-page.json" },
+ ).as("getSearchMoviesLast");
+
+ cy.wait("@getSearchMovies2").then((intercept) => {
+ cy.get(".item-view").within(() => {
+ cy.get("#more-button").should("not.be.visible");
+ });
+ });
+ });
+ });
+});
diff --git a/cypress/e2e/search-box.cy.js b/cypress/e2e/search-box.cy.js
new file mode 100644
index 000000000..322c141ab
--- /dev/null
+++ b/cypress/e2e/search-box.cy.js
@@ -0,0 +1,52 @@
+import { getPopularURL, getSearchURL } from "../utils/createURL";
+
+describe("검색창 테스트", () => {
+ beforeEach(() => {
+ cy.intercept(
+ {
+ method: "GET",
+ url: getPopularURL(1),
+ },
+ { fixture: "movie-popular-page1.json" },
+ ).as("getPopularMovies1");
+
+ cy.intercept(
+ {
+ method: "GET",
+ url: getSearchURL(1),
+ },
+ { fixture: "movie-search-page1.json" },
+ ).as("getSearchMovies1");
+
+ cy.visitMainPage();
+ });
+
+ it("검색창에 영화 제목을 입력 후 '검색 아이콘 클릭'하면 검색 데이터가 나온다.", () => {
+ // API 호출
+ cy.wait("@getPopularMovies1").then((intercept) => {
+ const TITLE = "행복";
+ cy.get("#search-input").type(TITLE);
+ cy.get(".search-button").click();
+
+ cy.wait("@getSearchMovies1").then((intercept) => {
+ cy.get(".item-view").within(() => {
+ cy.get(".list-title").should("contain.text", TITLE);
+ });
+ });
+ });
+ });
+ // TODO: 엔터 누르는 이벤트가 cypress 에 적용 되지 않음
+ it.skip("검색창에 영화 제목을 입력 후 '엔터를 누르면' 검색 데이터가 나온다.", () => {
+ // API 호출
+ cy.wait("@getPopularMovies1").then((intercept) => {
+ const TITLE = "행복";
+ cy.get("#search-input").type(TITLE).type("{enter}");
+
+ cy.wait("@getSearchMovies1").then((intercept) => {
+ cy.get(".item-view").within(() => {
+ cy.get(".list-title").should("contain.text", TITLE);
+ });
+ });
+ });
+ });
+});
diff --git a/cypress/fixtures/movie-popular-last-page.json b/cypress/fixtures/movie-popular-last-page.json
new file mode 100644
index 000000000..e02f707b4
--- /dev/null
+++ b/cypress/fixtures/movie-popular-last-page.json
@@ -0,0 +1,327 @@
+{
+ "page": 5,
+ "results": [
+ {
+ "adult": false,
+ "backdrop_path": "/deLWkOLZmBNkm8p16igfapQyqeq.jpg",
+ "genre_ids": [14, 12, 28],
+ "id": 763215,
+ "original_language": "en",
+ "original_title": "Damsel",
+ "overview": "매력적인 왕자와 결혼하게 된 젊은 여성. 그런데 신부가 아니라 불을 내뿜는 용에게 바칠 제물이 되면서, 꿈꿔왔던 결혼이 순식간에 치열한 생존 싸움으로 변한다.",
+ "popularity": 3001.85,
+ "poster_path": "/1Ku5QqFIsn9UQaD72hdlJVeIC57.jpg",
+ "release_date": "2024-03-08",
+ "title": "총총",
+ "video": false,
+ "vote_average": 7.266,
+ "vote_count": 858
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/gJL5kp5FMopB2sN4WZYnNT5uO0u.jpg",
+ "genre_ids": [28, 12, 16, 35, 10751],
+ "id": 1011985,
+ "original_language": "en",
+ "original_title": "Kung Fu Panda 4",
+ "overview": "마침내 내면의 평화… 냉면의 평화…가 찾아왔다고 믿는 용의 전사 ‘포’ 이젠 평화의 계곡의 영적 지도자가 되고, 자신을 대신할 후계자를 찾아야만 한다. “이제 용의 전사는 그만둬야 해요?” 용의 전사로의 모습이 익숙해지고 새로운 성장을 하기보다 지금 이대로가 좋은 ‘포’ 하지만 모든 쿵푸 마스터들의 능력을 그대로 복제하는 강력한 빌런 ‘카멜레온’이 나타나고 그녀를 막기 위해 정체를 알 수 없는 쿵푸 고수 ‘젠’과 함께 모험을 떠나게 되는데… 포는 가장 강력한 빌런과 자기 자신마저 뛰어넘고 진정한 변화를 할 수 있을까?",
+ "popularity": 3781.812,
+ "poster_path": "/1ZNOOMmILNUzVYbzG1j7GYb5bEV.jpg",
+ "release_date": "2024-03-02",
+ "title": "쿵푸팬더 4",
+ "video": false,
+ "vote_average": 6.911,
+ "vote_count": 157
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/xvk5AhfhgQcTuaCQyq3XqAnhEma.jpg",
+ "genre_ids": [28, 12, 35],
+ "id": 848538,
+ "original_language": "en",
+ "original_title": "Argylle",
+ "overview": "소설 내용이 현실 속 악당 스파이 조직의 활동을 그대로 묘사하자, 소심한 첩보 소설가 엘리 콘웨이와 반려 고양이는 그 무엇도, 그 누구도 믿을 수 없는 현실 스파이의 세계에 휘말리게 된다.",
+ "popularity": 1674.191,
+ "poster_path": "/hItxa5VfoMaMNFFUpmoipr0blAf.jpg",
+ "release_date": "2024-01-31",
+ "title": "아가일",
+ "video": false,
+ "vote_average": 6.142,
+ "vote_count": 604
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/mDeUmPe4MF35WWlAqj4QFX5UauJ.jpg",
+ "genre_ids": [28, 27, 53],
+ "id": 1096197,
+ "original_language": "pt",
+ "original_title": "No Way Up",
+ "overview": "",
+ "popularity": 1709.062,
+ "poster_path": "/ktxq0LYgl41I2DUn49TYIaS9dZR.jpg",
+ "release_date": "2024-01-18",
+ "title": "No Way Up",
+ "video": false,
+ "vote_average": 6.073,
+ "vote_count": 239
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/cu5Qk2QHxOyyMrD3Bq93DxgmJer.jpg",
+ "genre_ids": [28, 80],
+ "id": 1046090,
+ "original_language": "zh",
+ "original_title": "周處除三害",
+ "overview": "자신이 대만의 3대 지명 수배자 중 세 번째라는 사실을 알게 된 야심 가득한 범죄자. 도피 행각을 벌이던 그가 첫 번째와 두 번째 수배자를 제거하고자 한다.",
+ "popularity": 1407.442,
+ "poster_path": "/eNvuf4PHepy0nlXfludjGCJGG59.jpg",
+ "release_date": "2023-10-06",
+ "title": "돼지와 뱀과 비둘기",
+ "video": false,
+ "vote_average": 7.557,
+ "vote_count": 87
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/oFAukXiMPrwLpbulGmB5suEZlrm.jpg",
+ "genre_ids": [28, 12, 878, 14, 18],
+ "id": 624091,
+ "original_language": "id",
+ "original_title": "Sri Asih",
+ "overview": "화산 폭발로 인해 태어나자마자 친부모와 헤어진 알라나는 분노를 주체할 수 없다. 그녀를 입양한 부잣집 여인은 그녀를 보통 사람으로 키우려고 하지만 그녀는 성장할수록 자신이 보통 사람이 아님을 알게 된다. 그녀가 분노를 주체할 수 없는 순간 그녀는 인류에게 축복이 될 수도 재앙이 될 수도 있는 존재였던 것이다.",
+ "popularity": 1704.084,
+ "poster_path": "/lMZWF6Bm8MkFHjL9PHgUzHuuYfi.jpg",
+ "release_date": "2022-11-17",
+ "title": "스리 아시",
+ "video": false,
+ "vote_average": 6.3,
+ "vote_count": 26
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/47olX0FCvUCfAqlp8cK0O5fKLav.jpg",
+ "genre_ids": [16, 35, 878],
+ "id": 1239251,
+ "original_language": "en",
+ "original_title": "Megamind vs. the Doom Syndicate",
+ "overview": "",
+ "popularity": 1275.225,
+ "poster_path": "/yRZfiG1QpRkBc7fAmxfcR7Md5EC.jpg",
+ "release_date": "2024-03-01",
+ "title": "Megamind vs. the Doom Syndicate",
+ "video": false,
+ "vote_average": 5.736,
+ "vote_count": 121
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/o6e8Y0Q7RZIWi4qcJq4s5OYOVJs.jpg",
+ "genre_ids": [878, 10749, 35],
+ "id": 792307,
+ "original_language": "en",
+ "original_title": "Poor Things",
+ "overview": "대학에서 해부학을 가르치고 있는 교수인 고드윈 벡스터는 젊고 아름다운 여성 벨라와 함께 살고 있다. 어린 아기의 지능을 가지고 있는 벨라를 고드윈은 마치 자신의 딸처럼 아끼며 그녀에게 말과 행동을 가르친다. 한편 고드윈의 제자이자 평소 그를 존경해 왔던 맥스는 고드윈 교수와 가까이 지내게 되면서 벨라를 만나게 된다. 벨라의 이상 행동에 관심을 갖기 시작하는 맥스, 고드윈 박사로부터 벨라는 얼마 전에 자살한 여자를 자신이 의학적으로 되살린 것이라는 충격적인 말을 듣게 된다. 하지만 이미 벨라에게 마음을 뺏긴 맥스는 고드윈 박사의 제안에 따라 그녀와 약혼하기로 결심하는데...",
+ "popularity": 1077.325,
+ "poster_path": "/4VMekvKYG2FVIfKPG076rf625G7.jpg",
+ "release_date": "2023-12-07",
+ "title": "가여운 것들",
+ "video": false,
+ "vote_average": 7.868,
+ "vote_count": 2390
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/8uVKfOJUhmybNsVh089EqLHUYEG.jpg",
+ "genre_ids": [878, 12],
+ "id": 693134,
+ "original_language": "en",
+ "original_title": "Dune: Part Two",
+ "overview": "황제의 모략으로 멸문한 가문의 유일한 후계자 폴. 어머니 레이디 제시카와 간신히 목숨만 부지한 채 사막으로 도망친다. 그곳에서 만난 반란군들과 숨어 지내다 그들과 함께 황제의 모든 것을 파괴할 전투를 준비한다. 한편 반란군들의 기세가 높아질수록 불안해진 황제와 귀족 가문은 잔혹한 암살자 페이드 로타를 보내 반란군을 몰살하려 하는데…",
+ "popularity": 1180.358,
+ "poster_path": "/8uUU2pxm6IYZw8UgnKJyx7Dqwu9.jpg",
+ "release_date": "2024-02-27",
+ "title": "듄: 파트 2",
+ "video": false,
+ "vote_average": 8.406,
+ "vote_count": 1786
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/ekRp1sEA8pnuzVHQkUESTgNSKdW.jpg",
+ "genre_ids": [878, 28, 80],
+ "id": 932420,
+ "original_language": "en",
+ "original_title": "Code 8 Part II",
+ "overview": "초능력자들이 감시당하고 탄압받는 도시. 한 전과자가 부패 경찰로부터 10대 소녀를 지키려 하는데. 그러려면 경멸해 마지않는 마약왕과 손을 잡아야만 한다.",
+ "popularity": 1146.099,
+ "poster_path": "/5Xj0Lr8f4HdOozi7ZdAhh5R0Uh3.jpg",
+ "release_date": "2024-02-27",
+ "title": "코드 8: 파트 2",
+ "video": false,
+ "vote_average": 6.608,
+ "vote_count": 297
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/oBIQDKcqNxKckjugtmzpIIOgoc4.jpg",
+ "genre_ids": [28, 53, 10752],
+ "id": 969492,
+ "original_language": "en",
+ "original_title": "Land of Bad",
+ "overview": "라스베이거스 공군 기지의 베테랑 드론 조종사 리퍼(러셀 크로우)는 델타포스 티어-원 부대의 CIA 요원 구출작전 지원임무를 맡게 된다. 슈가(마일로 벤티밀리아), 아벨(루크 헴스워스)이 이끄는 티어-원 부대는 CIA 요원이 사라진 필리핀 남서부, 미스터리한 지형의 홀로 섬 정찰에 나서고, 이 위험천만한 작전을 위해 JTAC 신입요원 키니(리암 헴스워스)와 실전 경험이 많은 군인 비숍(리키 휘틀)까지 합류한다. 그러나 도망칠 곳도 숨을 곳도 없는 섬에서 이들은 곧 적에게 노출되고 피할 수 없는 전면전이 펼쳐지며 상황은 급반전을 맞이한다. 무기도, 통신장비도 없는 정글에 홀로 갇힌 키니, 동료를 구하고 작전을 성공시켜야 할 그에게 남은 건, 눈과 귀가 되어주는 드론 조종사 리퍼뿐! 누구도 포기하지 않는다, 끝까지 살아남는다!",
+ "popularity": 1067.477,
+ "poster_path": "/6yrDUJyl1naOn3zfOhFPE9ZGsfP.jpg",
+ "release_date": "2024-01-25",
+ "title": "랜드 오브 배드",
+ "video": false,
+ "vote_average": 6.994,
+ "vote_count": 348
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/gklkxY0veMajdCiGe6ggsh07VG2.jpg",
+ "genre_ids": [16, 28, 12, 35, 10751],
+ "id": 940551,
+ "original_language": "en",
+ "original_title": "Migration",
+ "overview": "가족을 과잉보호하는 아빠 ‘맥’ 때문에 평생을 작은 연못에서 안전하게 살아온 말러드 가족. 하지만 호기심 가득한 남매 ‘댁스’와 ‘그웬’을 위해 새로운 세상을 모험하고 싶은 엄마 ‘팸’의 설득으로 가족들은 항상 꿈꿔온 자메이카로 생애 첫 가족 모험을 떠나기로 한다! 설렘 넘치는 시작과 달리 태풍을 만나 길을 잃고, 낯선 친구들을 만나고, 위험 가득한 뉴욕에 불시착하게 된다. 인생 처음으로 모든 계획이 틀어지고 위기에 빠진 말러드 가족은 서툴지만 서로를 의지하며 모험을 계속한다. 새로운 세상, 함께라면 두려울 것 없어!",
+ "popularity": 903.985,
+ "poster_path": "/2xE3NI6zElWhwN9WJ92fqbZKmzZ.jpg",
+ "release_date": "2023-12-06",
+ "title": "인투 더 월드",
+ "video": false,
+ "vote_average": 7.565,
+ "vote_count": 945
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/yyFc8Iclt2jxPmLztbP617xXllT.jpg",
+ "genre_ids": [35, 10751, 14],
+ "id": 787699,
+ "original_language": "en",
+ "original_title": "Wonka",
+ "overview": "마법사이자 초콜릿 메이커 ‘윌리 웡카’의 꿈은 디저트의 성지, ‘달콤 백화점’에 자신만의 초콜릿 가게를 여는 것. 가진 것이라고는 낡은 모자 가득한 꿈과 단돈 12소베른 뿐이지만 특별한 마법의 초콜릿으로 사람들을 사로잡을 자신이 있다. 하지만 먹을 것도, 잠잘 곳도, 의지할 사람도 없는 상황 속에서 낡은 여인숙에 머물게 된 ‘웡카’는 ‘스크러빗 부인’과 ‘블리처’의 계략에 빠져 눈더미처럼 불어난 숙박비로 인해 순식간에 빚더미에 오른다. 게다가 밤마다 초콜릿을 훔쳐가는 작은 도둑 ‘움파 룸파’의 등장과 ‘달콤 백화점’을 독점한 초콜릿 카르텔의 강력한 견제까지. 세계 최고의 초콜릿 메이커가 되는 길은 험난하기만 한데…",
+ "popularity": 802.821,
+ "poster_path": "/g5mGMbiZLvgEf628D60GQrPHFJC.jpg",
+ "release_date": "2023-12-06",
+ "title": "웡카",
+ "video": false,
+ "vote_average": 7.202,
+ "vote_count": 2556
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/4Ep2KivIBUZbkS7kHjW7Qywnhhj.jpg",
+ "genre_ids": [28],
+ "id": 1049948,
+ "original_language": "en",
+ "original_title": "Vikings: Battle of Heirs",
+ "overview": "",
+ "popularity": 1050.14,
+ "poster_path": "/87goLbbqrJqAxqDS5cBsik1zKT.jpg",
+ "release_date": "2023-04-28",
+ "title": "Vikings: Battle of Heirs",
+ "video": false,
+ "vote_average": 7,
+ "vote_count": 3
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/nb3xI8XI3w4pMVZ38VijbsyBqP4.jpg",
+ "genre_ids": [18, 36],
+ "id": 872585,
+ "original_language": "en",
+ "original_title": "Oppenheimer",
+ "overview": "세상을 구하기 위해 세상을 파괴할 지도 모르는 선택을 해야 하는 천재 과학자의 핵개발 프로젝트.",
+ "popularity": 806.344,
+ "poster_path": "/jpD6z9fgNe7OqsHoDeAWQWoULde.jpg",
+ "release_date": "2023-07-19",
+ "title": "오펜하이머",
+ "video": false,
+ "vote_average": 8.113,
+ "vote_count": 7217
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/nTPFkLUARmo1bYHfkfdNpRKgEOs.jpg",
+ "genre_ids": [35, 10749],
+ "id": 1072790,
+ "original_language": "en",
+ "original_title": "Anyone But You",
+ "overview": "",
+ "popularity": 836.569,
+ "poster_path": "/5qHoazZiaLe7oFBok7XlUhg96f2.jpg",
+ "release_date": "2023-12-21",
+ "title": "페이크 러브",
+ "video": false,
+ "vote_average": 7.048,
+ "vote_count": 1016
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/wqmemsQb8xcLVQkwt8WTYnMIYms.jpg",
+ "genre_ids": [28, 35],
+ "id": 1217409,
+ "original_language": "es",
+ "original_title": "Jaque Mate",
+ "overview": "",
+ "popularity": 679.967,
+ "poster_path": "/umRkEsTwKU5nVbLVNw22cYB2fjm.jpg",
+ "release_date": "2024-01-25",
+ "title": "Jaque Mate",
+ "video": false,
+ "vote_average": 4.6,
+ "vote_count": 6
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/lzWHmYdfeFiMIY4JaMmtR7GEli3.jpg",
+ "genre_ids": [878, 12],
+ "id": 438631,
+ "original_language": "en",
+ "original_title": "Dune",
+ "overview": "10191년, 아트레이데스 가문의 후계자인 폴은 시간과 공간을 초월해 과거와 미래를 모두 볼 수 있고, 더 나은 미래를 만들 유일한 구원자인 예지된 자의 운명을 타고났다. 그리고 어떤 계시처럼 매일 꿈에서 아라키스의 행성에 있는 한 여인을 만난다. 귀족들이 지지하는 아트레이데스 가문에 대한 황제의 질투는 폴과 그 일족들을 죽음이 기다리는 아라키스로 이끄는데...",
+ "popularity": 663.721,
+ "poster_path": "/7zV8FTYofAORGm0Umgh1mNNCym8.jpg",
+ "release_date": "2021-09-15",
+ "title": "듄",
+ "video": false,
+ "vote_average": 7.788,
+ "vote_count": 10804
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/pwGmXVKUgKN13psUjlhC9zBcq1o.jpg",
+ "genre_ids": [28, 14],
+ "id": 634492,
+ "original_language": "en",
+ "original_title": "Madame Web",
+ "overview": "우연한 사고로 미래를 볼 수 있게 된 구급대원 '캐시 웹'이 거미줄처럼 엮인 운명을 마주하며, 같은 예지 능력을 가진 적 '심스'에 맞서 세상을 구할 히어로 '마담 웹'으로 거듭나게 되는 과정을 그린 마블의 NEW 히어로 드라마",
+ "popularity": 595.689,
+ "poster_path": "/eqEzpQNusV9XSdnA9HAvlLMeuPs.jpg",
+ "release_date": "2024-02-14",
+ "title": "마담 웹",
+ "video": false,
+ "vote_average": 5.356,
+ "vote_count": 477
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/6SLyu9ygASsrOqkCpjAwtyG9PWW.jpg",
+ "genre_ids": [10751, 878, 28, 35],
+ "id": 1094556,
+ "original_language": "en",
+ "original_title": "The Thundermans Return",
+ "overview": "",
+ "popularity": 583.77,
+ "poster_path": "/rz98XwP0VJq6e1jnWDCxn6EDLfP.jpg",
+ "release_date": "2024-03-07",
+ "title": "The Thundermans Return",
+ "video": false,
+ "vote_average": 7.767,
+ "vote_count": 43
+ }
+ ],
+ "total_pages": 5,
+ "total_results": 861261
+}
diff --git a/cypress/fixtures/movie-popular-page1.json b/cypress/fixtures/movie-popular-page1.json
new file mode 100644
index 000000000..66402c2ab
--- /dev/null
+++ b/cypress/fixtures/movie-popular-page1.json
@@ -0,0 +1,327 @@
+{
+ "page": 1,
+ "results": [
+ {
+ "adult": false,
+ "backdrop_path": "/deLWkOLZmBNkm8p16igfapQyqeq.jpg",
+ "genre_ids": [14, 12, 28],
+ "id": 763215,
+ "original_language": "en",
+ "original_title": "Damsel",
+ "overview": "매력적인 왕자와 결혼하게 된 젊은 여성. 그런데 신부가 아니라 불을 내뿜는 용에게 바칠 제물이 되면서, 꿈꿔왔던 결혼이 순식간에 치열한 생존 싸움으로 변한다.",
+ "popularity": 3001.85,
+ "poster_path": "/1Ku5QqFIsn9UQaD72hdlJVeIC57.jpg",
+ "release_date": "2024-03-08",
+ "title": "총총",
+ "video": false,
+ "vote_average": 7.266,
+ "vote_count": 858
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/gJL5kp5FMopB2sN4WZYnNT5uO0u.jpg",
+ "genre_ids": [28, 12, 16, 35, 10751],
+ "id": 1011985,
+ "original_language": "en",
+ "original_title": "Kung Fu Panda 4",
+ "overview": "마침내 내면의 평화… 냉면의 평화…가 찾아왔다고 믿는 용의 전사 ‘포’ 이젠 평화의 계곡의 영적 지도자가 되고, 자신을 대신할 후계자를 찾아야만 한다. “이제 용의 전사는 그만둬야 해요?” 용의 전사로의 모습이 익숙해지고 새로운 성장을 하기보다 지금 이대로가 좋은 ‘포’ 하지만 모든 쿵푸 마스터들의 능력을 그대로 복제하는 강력한 빌런 ‘카멜레온’이 나타나고 그녀를 막기 위해 정체를 알 수 없는 쿵푸 고수 ‘젠’과 함께 모험을 떠나게 되는데… 포는 가장 강력한 빌런과 자기 자신마저 뛰어넘고 진정한 변화를 할 수 있을까?",
+ "popularity": 3781.812,
+ "poster_path": "/1ZNOOMmILNUzVYbzG1j7GYb5bEV.jpg",
+ "release_date": "2024-03-02",
+ "title": "쿵푸팬더 4",
+ "video": false,
+ "vote_average": 6.911,
+ "vote_count": 157
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/xvk5AhfhgQcTuaCQyq3XqAnhEma.jpg",
+ "genre_ids": [28, 12, 35],
+ "id": 848538,
+ "original_language": "en",
+ "original_title": "Argylle",
+ "overview": "소설 내용이 현실 속 악당 스파이 조직의 활동을 그대로 묘사하자, 소심한 첩보 소설가 엘리 콘웨이와 반려 고양이는 그 무엇도, 그 누구도 믿을 수 없는 현실 스파이의 세계에 휘말리게 된다.",
+ "popularity": 1674.191,
+ "poster_path": "/hItxa5VfoMaMNFFUpmoipr0blAf.jpg",
+ "release_date": "2024-01-31",
+ "title": "아가일",
+ "video": false,
+ "vote_average": 6.142,
+ "vote_count": 604
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/mDeUmPe4MF35WWlAqj4QFX5UauJ.jpg",
+ "genre_ids": [28, 27, 53],
+ "id": 1096197,
+ "original_language": "pt",
+ "original_title": "No Way Up",
+ "overview": "",
+ "popularity": 1709.062,
+ "poster_path": "/ktxq0LYgl41I2DUn49TYIaS9dZR.jpg",
+ "release_date": "2024-01-18",
+ "title": "No Way Up",
+ "video": false,
+ "vote_average": 6.073,
+ "vote_count": 239
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/cu5Qk2QHxOyyMrD3Bq93DxgmJer.jpg",
+ "genre_ids": [28, 80],
+ "id": 1046090,
+ "original_language": "zh",
+ "original_title": "周處除三害",
+ "overview": "자신이 대만의 3대 지명 수배자 중 세 번째라는 사실을 알게 된 야심 가득한 범죄자. 도피 행각을 벌이던 그가 첫 번째와 두 번째 수배자를 제거하고자 한다.",
+ "popularity": 1407.442,
+ "poster_path": "/eNvuf4PHepy0nlXfludjGCJGG59.jpg",
+ "release_date": "2023-10-06",
+ "title": "돼지와 뱀과 비둘기",
+ "video": false,
+ "vote_average": 7.557,
+ "vote_count": 87
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/oFAukXiMPrwLpbulGmB5suEZlrm.jpg",
+ "genre_ids": [28, 12, 878, 14, 18],
+ "id": 624091,
+ "original_language": "id",
+ "original_title": "Sri Asih",
+ "overview": "화산 폭발로 인해 태어나자마자 친부모와 헤어진 알라나는 분노를 주체할 수 없다. 그녀를 입양한 부잣집 여인은 그녀를 보통 사람으로 키우려고 하지만 그녀는 성장할수록 자신이 보통 사람이 아님을 알게 된다. 그녀가 분노를 주체할 수 없는 순간 그녀는 인류에게 축복이 될 수도 재앙이 될 수도 있는 존재였던 것이다.",
+ "popularity": 1704.084,
+ "poster_path": "/lMZWF6Bm8MkFHjL9PHgUzHuuYfi.jpg",
+ "release_date": "2022-11-17",
+ "title": "스리 아시",
+ "video": false,
+ "vote_average": 6.3,
+ "vote_count": 26
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/47olX0FCvUCfAqlp8cK0O5fKLav.jpg",
+ "genre_ids": [16, 35, 878],
+ "id": 1239251,
+ "original_language": "en",
+ "original_title": "Megamind vs. the Doom Syndicate",
+ "overview": "",
+ "popularity": 1275.225,
+ "poster_path": "/yRZfiG1QpRkBc7fAmxfcR7Md5EC.jpg",
+ "release_date": "2024-03-01",
+ "title": "Megamind vs. the Doom Syndicate",
+ "video": false,
+ "vote_average": 5.736,
+ "vote_count": 121
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/o6e8Y0Q7RZIWi4qcJq4s5OYOVJs.jpg",
+ "genre_ids": [878, 10749, 35],
+ "id": 792307,
+ "original_language": "en",
+ "original_title": "Poor Things",
+ "overview": "대학에서 해부학을 가르치고 있는 교수인 고드윈 벡스터는 젊고 아름다운 여성 벨라와 함께 살고 있다. 어린 아기의 지능을 가지고 있는 벨라를 고드윈은 마치 자신의 딸처럼 아끼며 그녀에게 말과 행동을 가르친다. 한편 고드윈의 제자이자 평소 그를 존경해 왔던 맥스는 고드윈 교수와 가까이 지내게 되면서 벨라를 만나게 된다. 벨라의 이상 행동에 관심을 갖기 시작하는 맥스, 고드윈 박사로부터 벨라는 얼마 전에 자살한 여자를 자신이 의학적으로 되살린 것이라는 충격적인 말을 듣게 된다. 하지만 이미 벨라에게 마음을 뺏긴 맥스는 고드윈 박사의 제안에 따라 그녀와 약혼하기로 결심하는데...",
+ "popularity": 1077.325,
+ "poster_path": "/4VMekvKYG2FVIfKPG076rf625G7.jpg",
+ "release_date": "2023-12-07",
+ "title": "가여운 것들",
+ "video": false,
+ "vote_average": 7.868,
+ "vote_count": 2390
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/8uVKfOJUhmybNsVh089EqLHUYEG.jpg",
+ "genre_ids": [878, 12],
+ "id": 693134,
+ "original_language": "en",
+ "original_title": "Dune: Part Two",
+ "overview": "황제의 모략으로 멸문한 가문의 유일한 후계자 폴. 어머니 레이디 제시카와 간신히 목숨만 부지한 채 사막으로 도망친다. 그곳에서 만난 반란군들과 숨어 지내다 그들과 함께 황제의 모든 것을 파괴할 전투를 준비한다. 한편 반란군들의 기세가 높아질수록 불안해진 황제와 귀족 가문은 잔혹한 암살자 페이드 로타를 보내 반란군을 몰살하려 하는데…",
+ "popularity": 1180.358,
+ "poster_path": "/8uUU2pxm6IYZw8UgnKJyx7Dqwu9.jpg",
+ "release_date": "2024-02-27",
+ "title": "듄: 파트 2",
+ "video": false,
+ "vote_average": 8.406,
+ "vote_count": 1786
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/ekRp1sEA8pnuzVHQkUESTgNSKdW.jpg",
+ "genre_ids": [878, 28, 80],
+ "id": 932420,
+ "original_language": "en",
+ "original_title": "Code 8 Part II",
+ "overview": "초능력자들이 감시당하고 탄압받는 도시. 한 전과자가 부패 경찰로부터 10대 소녀를 지키려 하는데. 그러려면 경멸해 마지않는 마약왕과 손을 잡아야만 한다.",
+ "popularity": 1146.099,
+ "poster_path": "/5Xj0Lr8f4HdOozi7ZdAhh5R0Uh3.jpg",
+ "release_date": "2024-02-27",
+ "title": "코드 8: 파트 2",
+ "video": false,
+ "vote_average": 6.608,
+ "vote_count": 297
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/oBIQDKcqNxKckjugtmzpIIOgoc4.jpg",
+ "genre_ids": [28, 53, 10752],
+ "id": 969492,
+ "original_language": "en",
+ "original_title": "Land of Bad",
+ "overview": "라스베이거스 공군 기지의 베테랑 드론 조종사 리퍼(러셀 크로우)는 델타포스 티어-원 부대의 CIA 요원 구출작전 지원임무를 맡게 된다. 슈가(마일로 벤티밀리아), 아벨(루크 헴스워스)이 이끄는 티어-원 부대는 CIA 요원이 사라진 필리핀 남서부, 미스터리한 지형의 홀로 섬 정찰에 나서고, 이 위험천만한 작전을 위해 JTAC 신입요원 키니(리암 헴스워스)와 실전 경험이 많은 군인 비숍(리키 휘틀)까지 합류한다. 그러나 도망칠 곳도 숨을 곳도 없는 섬에서 이들은 곧 적에게 노출되고 피할 수 없는 전면전이 펼쳐지며 상황은 급반전을 맞이한다. 무기도, 통신장비도 없는 정글에 홀로 갇힌 키니, 동료를 구하고 작전을 성공시켜야 할 그에게 남은 건, 눈과 귀가 되어주는 드론 조종사 리퍼뿐! 누구도 포기하지 않는다, 끝까지 살아남는다!",
+ "popularity": 1067.477,
+ "poster_path": "/6yrDUJyl1naOn3zfOhFPE9ZGsfP.jpg",
+ "release_date": "2024-01-25",
+ "title": "랜드 오브 배드",
+ "video": false,
+ "vote_average": 6.994,
+ "vote_count": 348
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/gklkxY0veMajdCiGe6ggsh07VG2.jpg",
+ "genre_ids": [16, 28, 12, 35, 10751],
+ "id": 940551,
+ "original_language": "en",
+ "original_title": "Migration",
+ "overview": "가족을 과잉보호하는 아빠 ‘맥’ 때문에 평생을 작은 연못에서 안전하게 살아온 말러드 가족. 하지만 호기심 가득한 남매 ‘댁스’와 ‘그웬’을 위해 새로운 세상을 모험하고 싶은 엄마 ‘팸’의 설득으로 가족들은 항상 꿈꿔온 자메이카로 생애 첫 가족 모험을 떠나기로 한다! 설렘 넘치는 시작과 달리 태풍을 만나 길을 잃고, 낯선 친구들을 만나고, 위험 가득한 뉴욕에 불시착하게 된다. 인생 처음으로 모든 계획이 틀어지고 위기에 빠진 말러드 가족은 서툴지만 서로를 의지하며 모험을 계속한다. 새로운 세상, 함께라면 두려울 것 없어!",
+ "popularity": 903.985,
+ "poster_path": "/2xE3NI6zElWhwN9WJ92fqbZKmzZ.jpg",
+ "release_date": "2023-12-06",
+ "title": "인투 더 월드",
+ "video": false,
+ "vote_average": 7.565,
+ "vote_count": 945
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/yyFc8Iclt2jxPmLztbP617xXllT.jpg",
+ "genre_ids": [35, 10751, 14],
+ "id": 787699,
+ "original_language": "en",
+ "original_title": "Wonka",
+ "overview": "마법사이자 초콜릿 메이커 ‘윌리 웡카’의 꿈은 디저트의 성지, ‘달콤 백화점’에 자신만의 초콜릿 가게를 여는 것. 가진 것이라고는 낡은 모자 가득한 꿈과 단돈 12소베른 뿐이지만 특별한 마법의 초콜릿으로 사람들을 사로잡을 자신이 있다. 하지만 먹을 것도, 잠잘 곳도, 의지할 사람도 없는 상황 속에서 낡은 여인숙에 머물게 된 ‘웡카’는 ‘스크러빗 부인’과 ‘블리처’의 계략에 빠져 눈더미처럼 불어난 숙박비로 인해 순식간에 빚더미에 오른다. 게다가 밤마다 초콜릿을 훔쳐가는 작은 도둑 ‘움파 룸파’의 등장과 ‘달콤 백화점’을 독점한 초콜릿 카르텔의 강력한 견제까지. 세계 최고의 초콜릿 메이커가 되는 길은 험난하기만 한데…",
+ "popularity": 802.821,
+ "poster_path": "/g5mGMbiZLvgEf628D60GQrPHFJC.jpg",
+ "release_date": "2023-12-06",
+ "title": "웡카",
+ "video": false,
+ "vote_average": 7.202,
+ "vote_count": 2556
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/4Ep2KivIBUZbkS7kHjW7Qywnhhj.jpg",
+ "genre_ids": [28],
+ "id": 1049948,
+ "original_language": "en",
+ "original_title": "Vikings: Battle of Heirs",
+ "overview": "",
+ "popularity": 1050.14,
+ "poster_path": "/87goLbbqrJqAxqDS5cBsik1zKT.jpg",
+ "release_date": "2023-04-28",
+ "title": "Vikings: Battle of Heirs",
+ "video": false,
+ "vote_average": 7,
+ "vote_count": 3
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/nb3xI8XI3w4pMVZ38VijbsyBqP4.jpg",
+ "genre_ids": [18, 36],
+ "id": 872585,
+ "original_language": "en",
+ "original_title": "Oppenheimer",
+ "overview": "세상을 구하기 위해 세상을 파괴할 지도 모르는 선택을 해야 하는 천재 과학자의 핵개발 프로젝트.",
+ "popularity": 806.344,
+ "poster_path": "/jpD6z9fgNe7OqsHoDeAWQWoULde.jpg",
+ "release_date": "2023-07-19",
+ "title": "오펜하이머",
+ "video": false,
+ "vote_average": 8.113,
+ "vote_count": 7217
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/nTPFkLUARmo1bYHfkfdNpRKgEOs.jpg",
+ "genre_ids": [35, 10749],
+ "id": 1072790,
+ "original_language": "en",
+ "original_title": "Anyone But You",
+ "overview": "",
+ "popularity": 836.569,
+ "poster_path": "/5qHoazZiaLe7oFBok7XlUhg96f2.jpg",
+ "release_date": "2023-12-21",
+ "title": "페이크 러브",
+ "video": false,
+ "vote_average": 7.048,
+ "vote_count": 1016
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/wqmemsQb8xcLVQkwt8WTYnMIYms.jpg",
+ "genre_ids": [28, 35],
+ "id": 1217409,
+ "original_language": "es",
+ "original_title": "Jaque Mate",
+ "overview": "",
+ "popularity": 679.967,
+ "poster_path": "/umRkEsTwKU5nVbLVNw22cYB2fjm.jpg",
+ "release_date": "2024-01-25",
+ "title": "Jaque Mate",
+ "video": false,
+ "vote_average": 4.6,
+ "vote_count": 6
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/lzWHmYdfeFiMIY4JaMmtR7GEli3.jpg",
+ "genre_ids": [878, 12],
+ "id": 438631,
+ "original_language": "en",
+ "original_title": "Dune",
+ "overview": "10191년, 아트레이데스 가문의 후계자인 폴은 시간과 공간을 초월해 과거와 미래를 모두 볼 수 있고, 더 나은 미래를 만들 유일한 구원자인 예지된 자의 운명을 타고났다. 그리고 어떤 계시처럼 매일 꿈에서 아라키스의 행성에 있는 한 여인을 만난다. 귀족들이 지지하는 아트레이데스 가문에 대한 황제의 질투는 폴과 그 일족들을 죽음이 기다리는 아라키스로 이끄는데...",
+ "popularity": 663.721,
+ "poster_path": "/7zV8FTYofAORGm0Umgh1mNNCym8.jpg",
+ "release_date": "2021-09-15",
+ "title": "듄",
+ "video": false,
+ "vote_average": 7.788,
+ "vote_count": 10804
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/pwGmXVKUgKN13psUjlhC9zBcq1o.jpg",
+ "genre_ids": [28, 14],
+ "id": 634492,
+ "original_language": "en",
+ "original_title": "Madame Web",
+ "overview": "우연한 사고로 미래를 볼 수 있게 된 구급대원 '캐시 웹'이 거미줄처럼 엮인 운명을 마주하며, 같은 예지 능력을 가진 적 '심스'에 맞서 세상을 구할 히어로 '마담 웹'으로 거듭나게 되는 과정을 그린 마블의 NEW 히어로 드라마",
+ "popularity": 595.689,
+ "poster_path": "/eqEzpQNusV9XSdnA9HAvlLMeuPs.jpg",
+ "release_date": "2024-02-14",
+ "title": "마담 웹",
+ "video": false,
+ "vote_average": 5.356,
+ "vote_count": 477
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/6SLyu9ygASsrOqkCpjAwtyG9PWW.jpg",
+ "genre_ids": [10751, 878, 28, 35],
+ "id": 1094556,
+ "original_language": "en",
+ "original_title": "The Thundermans Return",
+ "overview": "",
+ "popularity": 583.77,
+ "poster_path": "/rz98XwP0VJq6e1jnWDCxn6EDLfP.jpg",
+ "release_date": "2024-03-07",
+ "title": "The Thundermans Return",
+ "video": false,
+ "vote_average": 7.767,
+ "vote_count": 43
+ }
+ ],
+ "total_pages": 43064,
+ "total_results": 861261
+}
diff --git a/cypress/fixtures/movie-popular-page2.json b/cypress/fixtures/movie-popular-page2.json
new file mode 100644
index 000000000..ce7f6c480
--- /dev/null
+++ b/cypress/fixtures/movie-popular-page2.json
@@ -0,0 +1,327 @@
+{
+ "page": 2,
+ "results": [
+ {
+ "adult": false,
+ "backdrop_path": "/deLWkOLZmBNkm8p16igfapQyqeq.jpg",
+ "genre_ids": [14, 12, 28],
+ "id": 763215,
+ "original_language": "en",
+ "original_title": "Damsel",
+ "overview": "매력적인 왕자와 결혼하게 된 젊은 여성. 그런데 신부가 아니라 불을 내뿜는 용에게 바칠 제물이 되면서, 꿈꿔왔던 결혼이 순식간에 치열한 생존 싸움으로 변한다.",
+ "popularity": 3001.85,
+ "poster_path": "/1Ku5QqFIsn9UQaD72hdlJVeIC57.jpg",
+ "release_date": "2024-03-08",
+ "title": "총총",
+ "video": false,
+ "vote_average": 7.266,
+ "vote_count": 858
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/gJL5kp5FMopB2sN4WZYnNT5uO0u.jpg",
+ "genre_ids": [28, 12, 16, 35, 10751],
+ "id": 1011985,
+ "original_language": "en",
+ "original_title": "Kung Fu Panda 4",
+ "overview": "마침내 내면의 평화… 냉면의 평화…가 찾아왔다고 믿는 용의 전사 ‘포’ 이젠 평화의 계곡의 영적 지도자가 되고, 자신을 대신할 후계자를 찾아야만 한다. “이제 용의 전사는 그만둬야 해요?” 용의 전사로의 모습이 익숙해지고 새로운 성장을 하기보다 지금 이대로가 좋은 ‘포’ 하지만 모든 쿵푸 마스터들의 능력을 그대로 복제하는 강력한 빌런 ‘카멜레온’이 나타나고 그녀를 막기 위해 정체를 알 수 없는 쿵푸 고수 ‘젠’과 함께 모험을 떠나게 되는데… 포는 가장 강력한 빌런과 자기 자신마저 뛰어넘고 진정한 변화를 할 수 있을까?",
+ "popularity": 3781.812,
+ "poster_path": "/1ZNOOMmILNUzVYbzG1j7GYb5bEV.jpg",
+ "release_date": "2024-03-02",
+ "title": "쿵푸팬더 4",
+ "video": false,
+ "vote_average": 6.911,
+ "vote_count": 157
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/xvk5AhfhgQcTuaCQyq3XqAnhEma.jpg",
+ "genre_ids": [28, 12, 35],
+ "id": 848538,
+ "original_language": "en",
+ "original_title": "Argylle",
+ "overview": "소설 내용이 현실 속 악당 스파이 조직의 활동을 그대로 묘사하자, 소심한 첩보 소설가 엘리 콘웨이와 반려 고양이는 그 무엇도, 그 누구도 믿을 수 없는 현실 스파이의 세계에 휘말리게 된다.",
+ "popularity": 1674.191,
+ "poster_path": "/hItxa5VfoMaMNFFUpmoipr0blAf.jpg",
+ "release_date": "2024-01-31",
+ "title": "아가일",
+ "video": false,
+ "vote_average": 6.142,
+ "vote_count": 604
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/mDeUmPe4MF35WWlAqj4QFX5UauJ.jpg",
+ "genre_ids": [28, 27, 53],
+ "id": 1096197,
+ "original_language": "pt",
+ "original_title": "No Way Up",
+ "overview": "",
+ "popularity": 1709.062,
+ "poster_path": "/ktxq0LYgl41I2DUn49TYIaS9dZR.jpg",
+ "release_date": "2024-01-18",
+ "title": "No Way Up",
+ "video": false,
+ "vote_average": 6.073,
+ "vote_count": 239
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/cu5Qk2QHxOyyMrD3Bq93DxgmJer.jpg",
+ "genre_ids": [28, 80],
+ "id": 1046090,
+ "original_language": "zh",
+ "original_title": "周處除三害",
+ "overview": "자신이 대만의 3대 지명 수배자 중 세 번째라는 사실을 알게 된 야심 가득한 범죄자. 도피 행각을 벌이던 그가 첫 번째와 두 번째 수배자를 제거하고자 한다.",
+ "popularity": 1407.442,
+ "poster_path": "/eNvuf4PHepy0nlXfludjGCJGG59.jpg",
+ "release_date": "2023-10-06",
+ "title": "돼지와 뱀과 비둘기",
+ "video": false,
+ "vote_average": 7.557,
+ "vote_count": 87
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/oFAukXiMPrwLpbulGmB5suEZlrm.jpg",
+ "genre_ids": [28, 12, 878, 14, 18],
+ "id": 624091,
+ "original_language": "id",
+ "original_title": "Sri Asih",
+ "overview": "화산 폭발로 인해 태어나자마자 친부모와 헤어진 알라나는 분노를 주체할 수 없다. 그녀를 입양한 부잣집 여인은 그녀를 보통 사람으로 키우려고 하지만 그녀는 성장할수록 자신이 보통 사람이 아님을 알게 된다. 그녀가 분노를 주체할 수 없는 순간 그녀는 인류에게 축복이 될 수도 재앙이 될 수도 있는 존재였던 것이다.",
+ "popularity": 1704.084,
+ "poster_path": "/lMZWF6Bm8MkFHjL9PHgUzHuuYfi.jpg",
+ "release_date": "2022-11-17",
+ "title": "스리 아시",
+ "video": false,
+ "vote_average": 6.3,
+ "vote_count": 26
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/47olX0FCvUCfAqlp8cK0O5fKLav.jpg",
+ "genre_ids": [16, 35, 878],
+ "id": 1239251,
+ "original_language": "en",
+ "original_title": "Megamind vs. the Doom Syndicate",
+ "overview": "",
+ "popularity": 1275.225,
+ "poster_path": "/yRZfiG1QpRkBc7fAmxfcR7Md5EC.jpg",
+ "release_date": "2024-03-01",
+ "title": "Megamind vs. the Doom Syndicate",
+ "video": false,
+ "vote_average": 5.736,
+ "vote_count": 121
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/o6e8Y0Q7RZIWi4qcJq4s5OYOVJs.jpg",
+ "genre_ids": [878, 10749, 35],
+ "id": 792307,
+ "original_language": "en",
+ "original_title": "Poor Things",
+ "overview": "대학에서 해부학을 가르치고 있는 교수인 고드윈 벡스터는 젊고 아름다운 여성 벨라와 함께 살고 있다. 어린 아기의 지능을 가지고 있는 벨라를 고드윈은 마치 자신의 딸처럼 아끼며 그녀에게 말과 행동을 가르친다. 한편 고드윈의 제자이자 평소 그를 존경해 왔던 맥스는 고드윈 교수와 가까이 지내게 되면서 벨라를 만나게 된다. 벨라의 이상 행동에 관심을 갖기 시작하는 맥스, 고드윈 박사로부터 벨라는 얼마 전에 자살한 여자를 자신이 의학적으로 되살린 것이라는 충격적인 말을 듣게 된다. 하지만 이미 벨라에게 마음을 뺏긴 맥스는 고드윈 박사의 제안에 따라 그녀와 약혼하기로 결심하는데...",
+ "popularity": 1077.325,
+ "poster_path": "/4VMekvKYG2FVIfKPG076rf625G7.jpg",
+ "release_date": "2023-12-07",
+ "title": "가여운 것들",
+ "video": false,
+ "vote_average": 7.868,
+ "vote_count": 2390
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/8uVKfOJUhmybNsVh089EqLHUYEG.jpg",
+ "genre_ids": [878, 12],
+ "id": 693134,
+ "original_language": "en",
+ "original_title": "Dune: Part Two",
+ "overview": "황제의 모략으로 멸문한 가문의 유일한 후계자 폴. 어머니 레이디 제시카와 간신히 목숨만 부지한 채 사막으로 도망친다. 그곳에서 만난 반란군들과 숨어 지내다 그들과 함께 황제의 모든 것을 파괴할 전투를 준비한다. 한편 반란군들의 기세가 높아질수록 불안해진 황제와 귀족 가문은 잔혹한 암살자 페이드 로타를 보내 반란군을 몰살하려 하는데…",
+ "popularity": 1180.358,
+ "poster_path": "/8uUU2pxm6IYZw8UgnKJyx7Dqwu9.jpg",
+ "release_date": "2024-02-27",
+ "title": "듄: 파트 2",
+ "video": false,
+ "vote_average": 8.406,
+ "vote_count": 1786
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/ekRp1sEA8pnuzVHQkUESTgNSKdW.jpg",
+ "genre_ids": [878, 28, 80],
+ "id": 932420,
+ "original_language": "en",
+ "original_title": "Code 8 Part II",
+ "overview": "초능력자들이 감시당하고 탄압받는 도시. 한 전과자가 부패 경찰로부터 10대 소녀를 지키려 하는데. 그러려면 경멸해 마지않는 마약왕과 손을 잡아야만 한다.",
+ "popularity": 1146.099,
+ "poster_path": "/5Xj0Lr8f4HdOozi7ZdAhh5R0Uh3.jpg",
+ "release_date": "2024-02-27",
+ "title": "코드 8: 파트 2",
+ "video": false,
+ "vote_average": 6.608,
+ "vote_count": 297
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/oBIQDKcqNxKckjugtmzpIIOgoc4.jpg",
+ "genre_ids": [28, 53, 10752],
+ "id": 969492,
+ "original_language": "en",
+ "original_title": "Land of Bad",
+ "overview": "라스베이거스 공군 기지의 베테랑 드론 조종사 리퍼(러셀 크로우)는 델타포스 티어-원 부대의 CIA 요원 구출작전 지원임무를 맡게 된다. 슈가(마일로 벤티밀리아), 아벨(루크 헴스워스)이 이끄는 티어-원 부대는 CIA 요원이 사라진 필리핀 남서부, 미스터리한 지형의 홀로 섬 정찰에 나서고, 이 위험천만한 작전을 위해 JTAC 신입요원 키니(리암 헴스워스)와 실전 경험이 많은 군인 비숍(리키 휘틀)까지 합류한다. 그러나 도망칠 곳도 숨을 곳도 없는 섬에서 이들은 곧 적에게 노출되고 피할 수 없는 전면전이 펼쳐지며 상황은 급반전을 맞이한다. 무기도, 통신장비도 없는 정글에 홀로 갇힌 키니, 동료를 구하고 작전을 성공시켜야 할 그에게 남은 건, 눈과 귀가 되어주는 드론 조종사 리퍼뿐! 누구도 포기하지 않는다, 끝까지 살아남는다!",
+ "popularity": 1067.477,
+ "poster_path": "/6yrDUJyl1naOn3zfOhFPE9ZGsfP.jpg",
+ "release_date": "2024-01-25",
+ "title": "랜드 오브 배드",
+ "video": false,
+ "vote_average": 6.994,
+ "vote_count": 348
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/gklkxY0veMajdCiGe6ggsh07VG2.jpg",
+ "genre_ids": [16, 28, 12, 35, 10751],
+ "id": 940551,
+ "original_language": "en",
+ "original_title": "Migration",
+ "overview": "가족을 과잉보호하는 아빠 ‘맥’ 때문에 평생을 작은 연못에서 안전하게 살아온 말러드 가족. 하지만 호기심 가득한 남매 ‘댁스’와 ‘그웬’을 위해 새로운 세상을 모험하고 싶은 엄마 ‘팸’의 설득으로 가족들은 항상 꿈꿔온 자메이카로 생애 첫 가족 모험을 떠나기로 한다! 설렘 넘치는 시작과 달리 태풍을 만나 길을 잃고, 낯선 친구들을 만나고, 위험 가득한 뉴욕에 불시착하게 된다. 인생 처음으로 모든 계획이 틀어지고 위기에 빠진 말러드 가족은 서툴지만 서로를 의지하며 모험을 계속한다. 새로운 세상, 함께라면 두려울 것 없어!",
+ "popularity": 903.985,
+ "poster_path": "/2xE3NI6zElWhwN9WJ92fqbZKmzZ.jpg",
+ "release_date": "2023-12-06",
+ "title": "인투 더 월드",
+ "video": false,
+ "vote_average": 7.565,
+ "vote_count": 945
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/yyFc8Iclt2jxPmLztbP617xXllT.jpg",
+ "genre_ids": [35, 10751, 14],
+ "id": 787699,
+ "original_language": "en",
+ "original_title": "Wonka",
+ "overview": "마법사이자 초콜릿 메이커 ‘윌리 웡카’의 꿈은 디저트의 성지, ‘달콤 백화점’에 자신만의 초콜릿 가게를 여는 것. 가진 것이라고는 낡은 모자 가득한 꿈과 단돈 12소베른 뿐이지만 특별한 마법의 초콜릿으로 사람들을 사로잡을 자신이 있다. 하지만 먹을 것도, 잠잘 곳도, 의지할 사람도 없는 상황 속에서 낡은 여인숙에 머물게 된 ‘웡카’는 ‘스크러빗 부인’과 ‘블리처’의 계략에 빠져 눈더미처럼 불어난 숙박비로 인해 순식간에 빚더미에 오른다. 게다가 밤마다 초콜릿을 훔쳐가는 작은 도둑 ‘움파 룸파’의 등장과 ‘달콤 백화점’을 독점한 초콜릿 카르텔의 강력한 견제까지. 세계 최고의 초콜릿 메이커가 되는 길은 험난하기만 한데…",
+ "popularity": 802.821,
+ "poster_path": "/g5mGMbiZLvgEf628D60GQrPHFJC.jpg",
+ "release_date": "2023-12-06",
+ "title": "웡카",
+ "video": false,
+ "vote_average": 7.202,
+ "vote_count": 2556
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/4Ep2KivIBUZbkS7kHjW7Qywnhhj.jpg",
+ "genre_ids": [28],
+ "id": 1049948,
+ "original_language": "en",
+ "original_title": "Vikings: Battle of Heirs",
+ "overview": "",
+ "popularity": 1050.14,
+ "poster_path": "/87goLbbqrJqAxqDS5cBsik1zKT.jpg",
+ "release_date": "2023-04-28",
+ "title": "Vikings: Battle of Heirs",
+ "video": false,
+ "vote_average": 7,
+ "vote_count": 3
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/nb3xI8XI3w4pMVZ38VijbsyBqP4.jpg",
+ "genre_ids": [18, 36],
+ "id": 872585,
+ "original_language": "en",
+ "original_title": "Oppenheimer",
+ "overview": "세상을 구하기 위해 세상을 파괴할 지도 모르는 선택을 해야 하는 천재 과학자의 핵개발 프로젝트.",
+ "popularity": 806.344,
+ "poster_path": "/jpD6z9fgNe7OqsHoDeAWQWoULde.jpg",
+ "release_date": "2023-07-19",
+ "title": "오펜하이머",
+ "video": false,
+ "vote_average": 8.113,
+ "vote_count": 7217
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/nTPFkLUARmo1bYHfkfdNpRKgEOs.jpg",
+ "genre_ids": [35, 10749],
+ "id": 1072790,
+ "original_language": "en",
+ "original_title": "Anyone But You",
+ "overview": "",
+ "popularity": 836.569,
+ "poster_path": "/5qHoazZiaLe7oFBok7XlUhg96f2.jpg",
+ "release_date": "2023-12-21",
+ "title": "페이크 러브",
+ "video": false,
+ "vote_average": 7.048,
+ "vote_count": 1016
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/wqmemsQb8xcLVQkwt8WTYnMIYms.jpg",
+ "genre_ids": [28, 35],
+ "id": 1217409,
+ "original_language": "es",
+ "original_title": "Jaque Mate",
+ "overview": "",
+ "popularity": 679.967,
+ "poster_path": "/umRkEsTwKU5nVbLVNw22cYB2fjm.jpg",
+ "release_date": "2024-01-25",
+ "title": "Jaque Mate",
+ "video": false,
+ "vote_average": 4.6,
+ "vote_count": 6
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/lzWHmYdfeFiMIY4JaMmtR7GEli3.jpg",
+ "genre_ids": [878, 12],
+ "id": 438631,
+ "original_language": "en",
+ "original_title": "Dune",
+ "overview": "10191년, 아트레이데스 가문의 후계자인 폴은 시간과 공간을 초월해 과거와 미래를 모두 볼 수 있고, 더 나은 미래를 만들 유일한 구원자인 예지된 자의 운명을 타고났다. 그리고 어떤 계시처럼 매일 꿈에서 아라키스의 행성에 있는 한 여인을 만난다. 귀족들이 지지하는 아트레이데스 가문에 대한 황제의 질투는 폴과 그 일족들을 죽음이 기다리는 아라키스로 이끄는데...",
+ "popularity": 663.721,
+ "poster_path": "/7zV8FTYofAORGm0Umgh1mNNCym8.jpg",
+ "release_date": "2021-09-15",
+ "title": "듄",
+ "video": false,
+ "vote_average": 7.788,
+ "vote_count": 10804
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/pwGmXVKUgKN13psUjlhC9zBcq1o.jpg",
+ "genre_ids": [28, 14],
+ "id": 634492,
+ "original_language": "en",
+ "original_title": "Madame Web",
+ "overview": "우연한 사고로 미래를 볼 수 있게 된 구급대원 '캐시 웹'이 거미줄처럼 엮인 운명을 마주하며, 같은 예지 능력을 가진 적 '심스'에 맞서 세상을 구할 히어로 '마담 웹'으로 거듭나게 되는 과정을 그린 마블의 NEW 히어로 드라마",
+ "popularity": 595.689,
+ "poster_path": "/eqEzpQNusV9XSdnA9HAvlLMeuPs.jpg",
+ "release_date": "2024-02-14",
+ "title": "마담 웹",
+ "video": false,
+ "vote_average": 5.356,
+ "vote_count": 477
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/6SLyu9ygASsrOqkCpjAwtyG9PWW.jpg",
+ "genre_ids": [10751, 878, 28, 35],
+ "id": 1094556,
+ "original_language": "en",
+ "original_title": "The Thundermans Return",
+ "overview": "",
+ "popularity": 583.77,
+ "poster_path": "/rz98XwP0VJq6e1jnWDCxn6EDLfP.jpg",
+ "release_date": "2024-03-07",
+ "title": "The Thundermans Return",
+ "video": false,
+ "vote_average": 7.767,
+ "vote_count": 43
+ }
+ ],
+ "total_pages": 43064,
+ "total_results": 861261
+}
diff --git a/cypress/fixtures/movie-search-last-page.json b/cypress/fixtures/movie-search-last-page.json
new file mode 100644
index 000000000..d8e5a94b0
--- /dev/null
+++ b/cypress/fixtures/movie-search-last-page.json
@@ -0,0 +1,327 @@
+{
+ "page": 5,
+ "results": [
+ {
+ "adult": false,
+ "backdrop_path": "/7bFz3PtoYKwr3Yc7X3zcp2CJtPI.jpg",
+ "genre_ids": [35, 18],
+ "id": 41776,
+ "original_language": "en",
+ "original_title": "This Is My Life",
+ "overview": "개그우먼 뺨친다는 소리를 수도 없이 들어온 도티 잉글스는 에리카와 오팔이라는 두 딸과 함께 사는 이혼녀. 백화점의 화장품 매장에서 그 좋은 입담과 재치로 손님들을 사로잡던 그녀는 마침내 코미디계의 문을 두드린다. 자신의 심볼로 결정한 '땡땡이' 의상을 온몸에 휘감고 오디션을 멋지게 치른 그녀는 유명 매니저 아놀드 모스에게 발탁된다. 사랑하는 딸을 뉴욕의 아파트에 남겨놓고 LA로 공연을 떠난 도티를 딸들은 그녀가 더이상 엄마로만 머물 수 없다는 사실을 깨달으면서 방황하기 시작한다. 예민한 사춘기 소녀인 에리카는 반발심으로 남자친구와 첫경험(?)을 치루고 도티와 모스가 연인 사이로 발전하자 친아빠를 찾아 가출을 하는데...",
+ "popularity": 6.3,
+ "poster_path": "/j1OyQTN7EB8c8u6zykIaRhyQFsn.jpg",
+ "release_date": "1992-02-21",
+ "title": "행복 찾기",
+ "video": false,
+ "vote_average": 6,
+ "vote_count": 14
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/3R8lX1mqTeBFLlFSyfnxRSYiEgk.jpg",
+ "genre_ids": [10752, 18],
+ "id": 37451,
+ "original_language": "en",
+ "original_title": "The Inn of the Sixth Happiness",
+ "overview": "글라디스는 선교사로 중국에 파견되었지만 자격이 부족하여 거절당해 열심히 일하며 모은 돈을 모으고 외진 지방으로 여행을 떠난다. 영국 여왕 로슨과 여섯번째 행복의 여관에서 일하게 되면서 \"발 검사관\" 직책을 수락하고 발을 묶는 중국 소녀들에 대한 법률을 홍보하면서 아이들과 함께 산을 여행하게 되는데...",
+ "popularity": 14.179,
+ "poster_path": "/qSkuoH1e3pUO2sbwESHqq2CNPel.jpg",
+ "release_date": "1958-12-11",
+ "title": "여섯번째 행복의 여관",
+ "video": false,
+ "vote_average": 6.846,
+ "vote_count": 68
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/1JLv7pGLxqqsshNuc2B3jASL3Xs.jpg",
+ "genre_ids": [99, 10402],
+ "id": 601169,
+ "original_language": "en",
+ "original_title": "Chasing Happiness",
+ "overview": "뉴저지 목사의 아들이라는 소박한 출신에서 혜성같은 명성을 얻기까지, 조나스 브라더스의 형제애는 굳건했다. 그러나, 그 후 놀랍고 고통스러운 이별이 찾아와 조, 케빈 그리고 닉은 각자의 길을 가게 된다.",
+ "popularity": 25.5,
+ "poster_path": "/qbJx8lLgGxMeBbieyYGHKcVWpN.jpg",
+ "release_date": "2019-06-04",
+ "title": "행복을 찾아서",
+ "video": false,
+ "vote_average": 8.024,
+ "vote_count": 144
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/x1zNrzip2FyjJKrqBhLwku0izrB.jpg",
+ "genre_ids": [10751, 35, 16],
+ "id": 245685,
+ "original_language": "en",
+ "original_title": "Postman Pat: The Movie",
+ "overview": "평소 소탈하고 친절하여 많은 이들로부터 사랑 받는 우체부 팻 아저씨는 아내 사라, 아들 줄리안과 함께 시골에서 소박하지만 행복한 삶을 살고 있었다. 이탈리아로의 가족여행을 계획한 팻 아저씨는 우연히 한 서바이벌 오디션 프로그램의 포상이 이탈리아 여행이라는 것을 알고 이 대회에 출전하기로 결심한다. 이 기회를 틈타 우체국의 본부장 카벙클이 오디션에 참가한 팻 아저씨의 빈 자리를 채우기 위해 팻로봇을 만들고, 팻로봇은 오히려 사고를 몰고 다녀 마을은 혼란에 휩싸인다. 팻 아저씨는 이 대회에서 숨겨진 재능을 발휘하며 승승장구하게 되고 런던에서 열리는 결승전까지 진출한다. 이 여정에서 갑자기 유명세를 탄 팻 아저씨는 어느덧 가족과 친구, 그리고 자신의 일자리까지 위협받게 되는데... 가족사랑 팻 아저씨의 이탈리아 여행권을 위한\r 좌충우돌 깜찍발랄한 오디션 도전이 시작 된다!!",
+ "popularity": 11.729,
+ "poster_path": "/oN9XRPY0IwjxiHkt3S2q8lPlGB2.jpg",
+ "release_date": "2014-05-23",
+ "title": "행복배달부 팻아저씨",
+ "video": false,
+ "vote_average": 5.044,
+ "vote_count": 45
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/wHGKsJKa2D9MYNwHTrxBjO2aZkX.jpg",
+ "genre_ids": [16, 35, 10751],
+ "id": 60897,
+ "original_language": "en",
+ "original_title": "Happiness Is a Warm Blanket, Charlie Brown",
+ "overview": "Linus is pushed to his limits when he learns Grandma is coming to visit and plans on ridding him of his childish security blanket.",
+ "popularity": 5.365,
+ "poster_path": "/yjRcn8painrtKiOy0zagyAwH4IH.jpg",
+ "release_date": "2011-03-29",
+ "title": "행복은 따뜻한 담요야, 찰리 브라운",
+ "video": false,
+ "vote_average": 7.1,
+ "vote_count": 62
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/63pni1oSA1wmOfFD7PQE054aGNU.jpg",
+ "genre_ids": [18, 35],
+ "id": 542714,
+ "original_language": "en",
+ "original_title": "Sometimes Always Never",
+ "overview": "어린시절 평소와 같이 아버지와 보드게임을 즐기던 형이 실종되고 지금까지 아무런 소식이 없다. 형의 그늘에서 벗어나지 못한 채 어른이 된 나는 어느 날 신원불명의 시체가 발견되었다는 연락을 받고 아버지와 함께 안치소로 향한다. 형이길 바랐을까? 형이 아니길 바랐을까?",
+ "popularity": 16.897,
+ "poster_path": "/iTOmzvjHv2RKYENsPfxf1UhSrQb.jpg",
+ "release_date": "2019-03-14",
+ "title": "행복의 단추를 채우는 완벽한 방법",
+ "video": false,
+ "vote_average": 6.367,
+ "vote_count": 60
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/4COuLuRV17cBCwmzYo2yQiLH01P.jpg",
+ "genre_ids": [18],
+ "id": 412120,
+ "original_language": "ja",
+ "original_title": "湯を沸かすほどの熱い愛",
+ "overview": "이 세상에 다신 없을 강‘철’멘탈 대인배 엄마 ‘후타바’와 가장 서툰 ‘철’없는 아빠 ‘가즈히로’, ‘철’들어가는 사춘기 딸 ‘아즈미’, ‘철’부지 이복동생 '아유코’! 누구보다 강한 엄마의 세상 가장 뜨거운 사랑을 받아가며 특별한 우리 가족은 웃고, 울고, 사랑하며 ‘행복 목욕탕’을 운영합니다. 모든 가족이 가지고 있는 것, ‘비밀’, ‘사랑’, ‘슬픔’, ‘행복’. 하지만 우리 가족에게는 다른 가족보다 더욱 큰 비밀과 뜨거운 사랑, 깊은 슬픔 그리고 따스한 행복이 있습니다.",
+ "popularity": 13.69,
+ "poster_path": "/5Had2Op6xeru9gFYhW3RYZdmRZa.jpg",
+ "release_date": "2016-10-29",
+ "title": "행복 목욕탕",
+ "video": false,
+ "vote_average": 7.109,
+ "vote_count": 46
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/7BAy0m2E8Cz93GUNwjLrzKHCU73.jpg",
+ "genre_ids": [99],
+ "id": 455918,
+ "original_language": "de",
+ "original_title": "Expedition Happiness",
+ "overview": "반려견까지 데리고 여자친구와 길을 나선 영화감독 펠릭스 슈타르크. 개조한 버스를 타고 알래스카에서 멕시코까지 누비는 이 여행길엔 수많은 깜짝 선물이 기다리고 있다.",
+ "popularity": 11.579,
+ "poster_path": "/lS09wiv0IF3n3lONGOtZo5EXqac.jpg",
+ "release_date": "2017-05-04",
+ "title": "행복 원정대: 알래스카에서 멕시코까지",
+ "video": false,
+ "vote_average": 6.576,
+ "vote_count": 118
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/eFEA6ftIihZnsh3lUYuuR8l8u3D.jpg",
+ "genre_ids": [18, 35],
+ "id": 45861,
+ "original_language": "zh",
+ "original_title": "幸福时光",
+ "overview": "정년 퇴직해 어렵게 홀로 살고 있는 50대의 자오는 두 번의 결혼 경력이 있는 뚱뚱하고 탐욕스러운 여인에게 홀딱 빠져 청혼한다. 자오가 큰 호텔의 지배인인 줄 알고 있는 여인은 지참금으로 5천 위안을 요구한다. 자오는 돈을 마련하기 위해 후배와 함께 버려진 버스를 ‘해피 타임 호텔’이라는 간이 여관으로 개조해서 젊은 연인들에게 빌려주는 사업을 시작하지만 벌이가 영 신통치 않다. 어느 날, 여인의 집에 찾아간 자오는 그녀의 의붓딸 우를 만나고, 취직 시켜 달라는 여인의 부탁에 떠밀려 우를 데리고 ‘해피 타임 호텔’을 찾아온 자오는 버스가 폐차 처리되는 과정을 목격한다. 어쩔 수 없이 우와 함께 자신의 집에서 생활하게 된 자오는 그녀가 안마사로 취직한 것처럼 만들기 위해 버려진 공장에 안마 시술소를 차린다. 그러던 어느날, 호텔 지배인이 아님을 알아챈 여인이 결별을 선언하고, 우마저 집으로 돌려보내라고 요구한다. 이에 충격을 받고 술에 만취한 자오는 트럭에 치여 혼수상태에 빠진다.",
+ "popularity": 13.382,
+ "poster_path": "/3R2mheIEHKmbrjDyohw88Z89d8a.jpg",
+ "release_date": "2000-12-31",
+ "title": "행복한 날들",
+ "video": false,
+ "vote_average": 7.122,
+ "vote_count": 49
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/lCt1HJfRuMskVCuBMuqv9D9L66J.jpg",
+ "genre_ids": [18, 10749],
+ "id": 94671,
+ "original_language": "en",
+ "original_title": "Jayne Mansfield's Car",
+ "overview": "아내의 마지막 선물은 꼴도 보기 싫은 새 가족이었다! 20년 전, 이혼하고 훌쩍 떠나버린 아내가 암으로 사망하여 고향으로 돌아왔다. 더불어 원수 같은 새 가족과 함께! 가부장적이고 무뚝뚝한 아버지 짐 콜드웰은 심기가 불편하지만 새 가족을 집안으로 받아들이게 된다. 이에 어색한 동거가 시작되지만, 함께 지낼수록 서로에 대한 앙금은 씻겨져 가고 각자의 상처도 보듬어가게 된다. 그러던 어느 날, 킹슬리와 함께 사냥을 떠난 짐은 손자의 실수로 약에 취해 위험천만한 행동을 하게 되는데... 2014년 5월, 피보다 진한 두 가족의 힐링 드라마가 시작된다!",
+ "popularity": 10.343,
+ "poster_path": "/52B13wFJFd4DhM9txFbmsiuVomE.jpg",
+ "release_date": "2013-07-25",
+ "title": "내 아내의 행복한 장례식",
+ "video": false,
+ "vote_average": 5.9,
+ "vote_count": 51
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/rbOePwWWAj5JgvY4ellJZIJHqja.jpg",
+ "genre_ids": [18, 10749],
+ "id": 392807,
+ "original_language": "fi",
+ "original_title": "Hymyilevä mies",
+ "overview": "평범한 제빵사에서 권투 영웅으로 떠오른 ‘올리’ 전 국민이 고대하는 세계 챔피언십을 앞두고 심각한 문제가 생겼다. “코치님, 솔직하게 말해도 돼요?” “말해봐” “저 사랑에 빠졌어요” “왜 하필… 지금!!”",
+ "popularity": 8.571,
+ "poster_path": "/8BmlWLnMvMciuryg8gHxhm5fd0J.jpg",
+ "release_date": "2016-09-02",
+ "title": "올리 마키의 가장 행복한 날",
+ "video": false,
+ "vote_average": 6.7,
+ "vote_count": 80
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/sbu5cZj81YMexlU4CFuCXZPU2jy.jpg",
+ "genre_ids": [18, 878, 80],
+ "id": 541340,
+ "original_language": "zh",
+ "original_title": "幸福城市",
+ "overview": "어둠에 잠긴 디스토피아, 세 사람을 향한 한 남자의 복수. 수십 년 전, 그에게는 어떤 일이 일어났던 걸까. 과거로 거슬러가며 하나씩, 그 어긋난 순간들이 드러난다.",
+ "popularity": 12.121,
+ "poster_path": "/ukakfDKUPneiI690GNvwQgNgPtu.jpg",
+ "release_date": "2018-12-13",
+ "title": "행복도시",
+ "video": false,
+ "vote_average": 6.646,
+ "vote_count": 65
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/5tEI9qnusNGIrgrxuGtc8fH34hT.jpg",
+ "genre_ids": [35, 10749],
+ "id": 20127,
+ "original_language": "en",
+ "original_title": "It Should Happen to You",
+ "overview": "Gladys Glover has just lost her modeling job when she meets filmmaker Pete Sheppard shooting a documentary in Central Park. For Pete it's love at first sight, but Gladys has her mind on other things, making a name for herself. Through a fluke of advertising she winds up with her name plastered over 10 billboards throughout city.",
+ "popularity": 10.257,
+ "poster_path": "/pX8geXN3vjvkgi6zNgtxheFpPXg.jpg",
+ "release_date": "1954-01-15",
+ "title": "평범한 여인의 행복",
+ "video": false,
+ "vote_average": 6.9,
+ "vote_count": 52
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/pl6EJOYd2zOsjVAfc6Df6ZvSZUc.jpg",
+ "genre_ids": [10402, 99],
+ "id": 696396,
+ "original_language": "en",
+ "original_title": "Happiness Continues",
+ "overview": "복귀 앨범 콘서트 투어에 나선 조나스 브라더스의 여정을 함께하며 콘서트 현장을 생생하게 만난다.",
+ "popularity": 9.282,
+ "poster_path": "/b2moEkoXck5B0EsGa49TPhbQbNa.jpg",
+ "release_date": "2020-04-23",
+ "title": "행복은 계속된다: 조나스 브라더스 콘서트",
+ "video": false,
+ "vote_average": 7.872,
+ "vote_count": 47
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/9CKiWfjNWp6SOpyPyqx4FkbimeL.jpg",
+ "genre_ids": [10751],
+ "id": 541481,
+ "original_language": "en",
+ "original_title": "H Is for Happiness",
+ "overview": "어린 캔디스 피는 학교 과제의 일환으로 매일 투닥대고 슬픔에 차 있는 자신의 가족을 화해시켜야 한다. 그녀는 엄청난 열정을 가지고, 때로는 의도치 않은 우스꽝스러운 태도로 주변사람들을 행복하게 해주려고 노력한다. 자신이 다른 차원의 세계에서 왔다고 믿는 캔디스 피의 학교 친구, 더글라스 벤슨은 캔디스 피의 뜻밖의 조력자이자 열렬한 팬이 된다.\r (2020년 제15회 부산국제어린이청소년영화제) 동생의 죽음으로 불화의 골이 깊어진 부모, 반목하는 아빠와 삼촌 사이에서 버티다가도 혼자라는 고립감을 느끼는 12살 소녀, 하지만 슬픔이나 불행이라는 단어 속으로 숨지 않고 당당히 자신의 존재와 꿈을 드러내고 이해받기 위해 고군분투하는 모습이 인상적이다. 반가운 호주영화. 『내 인생의 알파벳』이라는 원작소설을 바탕으로 한 무한긍정소녀 캔디스의 가족 회복기. (2020년 제15회 부산국제어린이청소년영화제/ 변혜경)",
+ "popularity": 7.052,
+ "poster_path": "/qcTIOHtpuTjI3SQxkcf4JA8xJuN.jpg",
+ "release_date": "2021-06-24",
+ "title": "행복은 H로 시작해",
+ "video": false,
+ "vote_average": 7.857,
+ "vote_count": 7
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/52TZcdJ5P6zznIqhMIrXNTQhKv3.jpg",
+ "genre_ids": [18],
+ "id": 252519,
+ "original_language": "ko",
+ "original_title": "나는 행복합니다",
+ "overview": "자신이 처한 상황을 견딜 수 없어 과대망상증이란 병을 얻게된 만수. 치매에 걸린 엄마와 자살한 형이 남겨준 도박 빚. 이 모든 현실을 기억할 수 없는 정신병동에서의 하루하루가 그에겐 꿈 같은 나날들이다. 빈 종이에 자신이 서명만 하면 전세계 은행에서 통용되는 화폐가치를 지닌다고 믿는 만수. 그 말을 믿어주는 친구들, 그리고 주치의와 개인 간호사 수경이 있는 그 곳의 생활은 달콤하기만 하다. 항상 만수의 곁에서 수호천사가 되어주는 수경이 있어 만수는 더욱 행복하지만 그녀의 얼굴은 언제나 슬픔에 가득 차 있다. 연인에게 버림받고, 직장암 말기의 아버지를 간호하며 힘든 하루하루를 보내고 있는 수간호사 수경. 애인에게 버림받고 월급도 차압당하며 괴로운 현실들 뿐이지만, 자신에게 병원비에 보태라며 천만 원쯤은 개의치 않고 쥐어주는 만수가 있어 행복하다. 수경에게는 그의 과대망상증이라는 병이 자신을 버틸 수 있게 하는 힘이 된다. 병원에서 강도 높은 치료를 받게 되는 만수, 점차 극한 상황으로 내몰리는 수경. 그들만의 행복한 시간은 끝을 보이기 시작 하는데...",
+ "popularity": 7.161,
+ "poster_path": "/40DlddW58VNiYmGAGCD17X5Q3mF.jpg",
+ "release_date": "2008-10-10",
+ "title": "나는 행복합니다",
+ "video": false,
+ "vote_average": 5.4,
+ "vote_count": 5
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/odi6xBunyvnqdc7zCHUq9G2By6y.jpg",
+ "genre_ids": [18],
+ "id": 182827,
+ "original_language": "ja",
+ "original_title": "舟を編む",
+ "overview": "1995년, 전혀 존재감이 없는 출판사의 뒷방 부서인 ‘사전편집부’에 공석이 생겼다! 지루하고 재미없는 편찬일을 떠맡고 싶지 않은 쾌남 ‘마사시’(오다기리 죠)는 세상과는 단절되어 보이는 영업부의 왕따 ‘마지메’(마츠다 류헤이)를 전격 스카우트해온다. 얼떨결에 사전편집부에 합류한 ‘마지메’는 새로운 사전 만들기 프로젝트인 [대도해]에 매력을 느끼고, 단어들을 수집하며 차츰 사람들과 언어로 소통하는 즐거움을 배워나간다. 그러던 중 찾아온 뜻밖의 사랑! 10년 동안 묵고 있는 하숙집 할머니의 손녀 ‘카구야’(미야자키 아오이)를 보고 한눈에 반한 ‘마지메’. ‘마지메’의 사랑을 도와주려는 편집부 식구들은 그에게 [사랑] 목록의 풀이를 맡기고, ‘마지메’는 ‘카구야’에게 어설프지만 진심을 다해 구애를 펼치며 단어 풀이를 해나간다. 2009년, 십여 년이 넘는 세월 동안 수작업으로 단어 하나 하나를 모아 총 3000만개의 단어풀이를 완성한중년의 ‘마지메’는 [대도해]의 출간을 앞둔 어느 날, 실수로 누락된 단어 한 개를 발견한다.\r 과연 ‘마지메’의 사랑과, 위기를 맞은 [대도해]의 출간은 이루어질 수 있을까?",
+ "popularity": 11.896,
+ "poster_path": "/beNVJQxRAjhZGqKPsPrilXmEGNu.jpg",
+ "release_date": "2013-04-13",
+ "title": "행복한 사전",
+ "video": false,
+ "vote_average": 7.2,
+ "vote_count": 50
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/xtUAP6xPWr5s4AAP38o8hwnhbJq.jpg",
+ "genre_ids": [99],
+ "id": 502759,
+ "original_language": "en",
+ "original_title": "Itzhak",
+ "overview": "이스라엘 작은 동네에서부터 세계 유수의 무대에 오르기까지, 육체적 한계마저 극복한 이차크 펄만의 음악 선물이 펼쳐진다! 슈베르트부터 스트라우스까지, 바흐부터 빌리 조엘까지, 이차크 펄만의 탁월한 바이올린 연주는 인간 경험의 심연을 울린다. 이 황홀한 다큐멘터리는 소아마비를 극복한 유대인 이민자 출신 바이올린 거장이 분투하는 모습을 다루며, 예술이 인생에서 빼놓을 수 없는 요소인 이유를 떠올리게 한다. 경지에 이른 펄만의 바이올린 연주는 그가 자란 텔아비브의 작은 동네에서부터 세계 유수의 무대까지 그를 이끈다. 음악과 인생에 대한 펄만의 관점도 들어본다. (2018년 제14회 제천국제음악영화제)",
+ "popularity": 3.048,
+ "poster_path": "/cffD1d8y0Pgu6oqzJsj6mqQzoYZ.jpg",
+ "release_date": "2017-10-05",
+ "title": "이차크의 행복한 바이올린",
+ "video": false,
+ "vote_average": 6.3,
+ "vote_count": 9
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/3lhXRVHJWADccsk13WScasKrRc4.jpg",
+ "genre_ids": [35, 18, 10749],
+ "id": 14659,
+ "original_language": "fr",
+ "original_title": "Mes amis, mes amours",
+ "overview": "파리의 외로운 싱글남 마티아스는 런던에서 아들과 단 둘이 살고 있는 죽마고우 앙트완으로부터 런던으로 이사오라는 제안을 받는다. 옆집에서 살자는 처음 계획과 달리 무료한 일상이 지루했던 마티아스는 앙트완의 가족과 함께 한집에서 살기를 계획하고, 두 집 사이에 있던 벽을 허문다. 그렇게 두 싱글 파파와 사랑스러운 아이들의 아슬아슬한 동거는 조금은 ‘딱딱한’ 규칙과 함께 시작된다. 동거의 규칙. 1. 보모 금지 2. 여자 출입금지 3. 통금시간은 12시! 평화로운 생활도 잠시, 마티아스는 자신의 서점에 들른 손님 오드리에게 첫눈에 반하게 된다. 그녀 역시 마티아스의 다정다감하고 유머스러운 매력에 빠져들게 되지만, 앙트완과 마티아스의 부부 같은 오묘한 관계를 보고 이별을 통보한다. 설상가상으로 아이들의 양육문제와 연애를 하면서 계속 규칙을 어기는 마티아스 때문에 두 사람의 갈등은 깊어져만 가는데… 과연, 두 싱글 파파의 동거는 해피엔딩이 될 수 있을까?",
+ "popularity": 3.019,
+ "poster_path": "/3JPCMxFpjJ1NU88HxOGOhUWg7ZZ.jpg",
+ "release_date": "2008-07-02",
+ "title": "행복한 프랑스 책방",
+ "video": false,
+ "vote_average": 5.327,
+ "vote_count": 52
+ },
+ {
+ "adult": false,
+ "backdrop_path": null,
+ "genre_ids": [],
+ "id": 350293,
+ "original_language": "ko",
+ "original_title": "행복은 성적순이 아니잖아요",
+ "overview": "어느 고등학교 2학년 교실, 성적이 바닥인 봉구(허석)와 천재(최수훈)는 각각 은주(이미연)와 양호 선생님을 짝사랑한다. 집이 어려운 창수는 어머니를 도와 청소 리어카를 끄는데 풍요로운 환경에서 자란 은주는 그를 이해하지 못하고 비아냥 거린다. 은주는 항상 좋은 성적을 유지하면서도 부모님의 집착 때문에 성적에 대한 강박관념에 시달리다가 순수한 마음의 봉구에게 끌린다. 잠시 현실을 벗어나 야외에서 한가로운 시간을 즐기는 은주와 봉구, 그러나 다음 시험에서 은주가 7등으로 밀려나자 그녀는 부모님의 차가운 시선을 받는다. 은주는 이를 견디지 못하고 자살하고, 교실 은주의 책상에는 꽃 한 송이가 놓이고 영구차가 학교를 도는 가운데 봉구와 아이들은 눈물을 흘린다. (박민) 어느 고등학교 2학년 교실, 성적이 바닥인 봉구(허석)와 천재(최수훈)는 각각 은주(이미연)와 양호 선생님을 짝사랑한다. 집이 어려운 창수는 어머니를 도와 청소 리어카를 끄는데 풍요로운 환경에서 자란 은주는 그를 이해하지 못하고 비아냥 거린다. 은주는 항상 좋은 성적을 유지하면서도 부모님의 집착 때문에 성적에 대한 강박관념에 시달리다가 순수한 마음의 봉구에게 끌린다. 잠시 현실을 벗어나 야외에서 한가로운 시간을 즐기는 은주와 봉구, 그러나 다음 시험에서 은주가 7등으로 밀려나자 그녀는 부모님의 차가운 시선을 받는다. 은주는 이를 견디지 못하고 자살하고, 교실 은주의 책상에는 꽃 한 송이가 놓이고 영구차가 학교를 도는 가운데 봉구와 아이들은 눈물을 흘린다. (박민)",
+ "popularity": 4.995,
+ "poster_path": "/nRRgeTXkKdi2IVFssEtEeMH7sxV.jpg",
+ "release_date": "1989-07-29",
+ "title": "행복은 성적순이 아니잖아요",
+ "video": false,
+ "vote_average": 6,
+ "vote_count": 1
+ }
+ ],
+ "total_pages": 5,
+ "total_results": 94
+}
diff --git a/cypress/fixtures/movie-search-page1.json b/cypress/fixtures/movie-search-page1.json
new file mode 100644
index 000000000..8ac5fed0b
--- /dev/null
+++ b/cypress/fixtures/movie-search-page1.json
@@ -0,0 +1,327 @@
+{
+ "page": 1,
+ "results": [
+ {
+ "adult": false,
+ "backdrop_path": "/rX9aF0Q7VKq8PCYDJgkF9IKNZX4.jpg",
+ "genre_ids": [10749, 18],
+ "id": 95910,
+ "original_language": "ko",
+ "original_title": "행복",
+ "overview": "서울에서 클럽을 운영하며 자유분방한 생활을 즐겨온 영수. 운영하던 가게는 망하고 애인 수연과도 헤어지고, 설상가상으로 심각한 간 경변까지 앓게 된 영수는 주변에 유학 간단 거짓말을 남기고 도망치듯 시골 요양원 ‘희망의 집’으로 내려간다. 8년째 요양원 ‘희망의 집’에서 살며 스텝으로 일하고 있는 은희. 숨이 차면 죽을 수도 있는 중증 폐질환 환자지만 은희는 밝고 낙천적이다. 자신의 병에 개의치 않고 연애에도 적극적인 은희는, 첫날부터 자꾸만 신경 쓰이던 영수에게 먼저 다가간다. 지루한 시골 요양원, 미래 따윈 보이지 않는 비참한 상황에서 영수 역시 아픈 것도 무서운 것도 없어 보이는 은희에게 의지하게 되고, 손을 잡고, 키스를 하고, 밤을 함께 보내면서 보통의 커플들처럼 그렇게 행복한 연애를 시작한다. 그리고 두 사람은 요양원을 나와 함께 살기 시작한다. 1년 뒤. 은희의 도움으로 건강을 되찾은 영수는, 마냥 행복한 은희와는 달리 둘만의 생활이 점점 지루해진다. 궁상맞은 시골 생활도, 언제 죽을 지 모르는 병약한 은희도 부담스러워진 영수 앞에 때마침 서울에서 수연이 찾아오는데……",
+ "popularity": 4.186,
+ "poster_path": "/fR8YZI97ASTRuG8EAs3QHTPiGRD.jpg",
+ "release_date": "2007-10-03",
+ "title": "행복",
+ "video": false,
+ "vote_average": 7,
+ "vote_count": 21
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/nKOQiWjhv6LXXSR3PiIab3LrKtU.jpg",
+ "genre_ids": [18],
+ "id": 1402,
+ "original_language": "en",
+ "original_title": "The Pursuit of Happyness",
+ "overview": "미국 샌프란시스코. 의료기 세일즈맨 크리스 가드너(윌 스미스)는 여기저기 열심히 뛰어다니지만 한물간 의료기기는 좀처럼 팔리지 않는다. 아들 크리스토퍼(제이든 스미스)는 엉터리 유치원에서 하루종일 엄마를 기다리다 잠들기 일쑤. 세금도 못내는 형편에 자동차까지 압류당하자 참다 지친 아내마저 두사람을 떠나버린다. 살던 집에서도 쫓겨난 크리스와 크리스토퍼. 이제 지갑에 남은 전재산이라곤 달랑 21달러 33센트 뿐. 전재산 21달러… 돌아갈 집도 없지만 꿈이 있다면 지켜내야 한다! 극한 상황에서도 크리스토퍼를 보살피던 크리스는 빨간색 페라리를 모는 성공한 주식중개인을 만나 ‘남이 할 수 있다면, 나도 할 수 있다’는 희망과 함께 주식중개인 인턴에 지원한다. 덜컥 붙긴 했지만 땡전 한푼 못받는 무보수에 60대 1이라는 엄청난 경쟁을 이겨내야 하는 혹독한 과정. 학력도 경력도 내세울 것 없지만 크리스는 아들과 함께 노숙자 시설과 지하철 화장실을 전전하는 어려움 속에서도 행복을 찾기 위한 위한 마지막 기회에 도전하게 되는데…",
+ "popularity": 45.331,
+ "poster_path": "/uRMMtYZkWyqsc4AO4aCoHBbZSwL.jpg",
+ "release_date": "2006-12-14",
+ "title": "행복을 찾아서",
+ "video": false,
+ "vote_average": 7.901,
+ "vote_count": 9468
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/3O5tanjVJGo8sgxC0Y8A1ecFB6d.jpg",
+ "genre_ids": [12, 35, 10751, 14],
+ "id": 420814,
+ "original_language": "en",
+ "original_title": "Christopher Robin",
+ "overview": "어른이 된 나 로빈(이완 맥그리거)은 가족도 일도 모두 완벽해 보이지만, 한편 지쳐가는 일상 속에 서있다. 어느 날, 눈 앞에 가장 행복한 시간을 함께했던 비밀 친구 ‘곰돌이 푸와 일행’들이 다시 찾아오게 되고 뜻하지 않게 놀라운 모험 속에 빠져들게 되는데…",
+ "popularity": 51.508,
+ "poster_path": "/aRgqTDrxZtq1YkZx5OUlZiqL3AX.jpg",
+ "release_date": "2018-08-02",
+ "title": "곰돌이 푸 다시 만나 행복해",
+ "video": false,
+ "vote_average": 7.3,
+ "vote_count": 2606
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/1ZZ492nBiFTInejsrPQKiyHgz1H.jpg",
+ "genre_ids": [10749, 35],
+ "id": 1139819,
+ "original_language": "nl",
+ "original_title": "Happy Ending",
+ "overview": "사귄 지 1년이 된 커플 루나와 밍크. 루나가 둘의 성생활에 제3의 인물을 초대하면서 지금까지 행복했던 둘의 관계가 완전히 달라진다.",
+ "popularity": 21.253,
+ "poster_path": "/rD3x0J6UCOhtv4Dj5AC7n8bxI5T.jpg",
+ "release_date": "2023-09-01",
+ "title": "행복한 결말",
+ "video": false,
+ "vote_average": 5.93,
+ "vote_count": 64
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/42vFebJ0VRnwdemaUOIr7c6Tjo1.jpg",
+ "genre_ids": [35, 18],
+ "id": 10757,
+ "original_language": "hi",
+ "original_title": "कभी ख़ुशी कभी ग़म",
+ "overview": "야쉬 레이찬드(아미타브 바흐찬)와 그의 아내 난디니(자야 바흐찬)는 두 아들 라훌(샤루칸)과 로한(로산)을 애정과 정성을 다해 키우며 화목한 가정을 이끌어 간다. 아버지 야쉬는 장남인 라훌이 가문의 풍부한 전통과 유산을 받아 이어나가기를 바라는 마음이 너무도 강한 나머지 이미 아들의 약혼녀까지 내정해둔 상태다. 반면, 아내는 시대가 많이 변했음을 남편에게 알리려 하지만, 남편의 강경함에 더 이상 말을 붙이지 못한다. 라훌은 입양아임에도 불구하고 자신에게 아낌없이 사랑을 배풀어 주는 부모님, 특히 아버지에게 어떤 존경심을 넘어선 충성의 경지까지 부모에 대한 마음이 극진하지만, 신분차이가 많이 나는 서민의 딸 안젤리를 만나게 되면서 부모의 의지와는 다른 길을 선택하게 된다. 명랑소녀 안젤리(까졸)와의 사랑에 빠진 라훌은 그녀와 결혼을 하고 집으로 데려오지만, 아버지는 가문의 전통과 신분차이의 이유로 그녀를 거부하고 아들로 하여금 입양된 존재를 상기시켜버린다. 이에 상처를 입은 라훌은 집을 떠나고 온전한 가족은 그 이후 분열된다. 어머니는 아들이 집으로 되돌아올날을 기대하며 둘째아들 로한에게 가족의 화합을 다짐받는다. 큰형을 찾아 완벽한 가족을 이루기 위한 로한의 고군분투가 시작된다. 가족은 재결합 할 수 있을 것인가?",
+ "popularity": 24.49,
+ "poster_path": "/lRl7wrJmkOzMTDVYFSIpUcsIjPQ.jpg",
+ "release_date": "2001-12-14",
+ "title": "때로는 행복 때로는 슬픔",
+ "video": false,
+ "vote_average": 7.735,
+ "vote_count": 509
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/b1PmdOB577WosIeimPv7WTdkDLJ.jpg",
+ "genre_ids": [27, 53],
+ "id": 1136558,
+ "original_language": "ja",
+ "original_title": "みなに幸あれ",
+ "overview": "간호사 시험을 앞두고 오랜만에 고향에 내려온 소녀. 할머니, 할아버지와의 오랜만의 재회를 기뻐하는 것도 잠시, 소녀는 고향 집에 있는 ‘무언가’를 감지하고 점차 불쾌함을 느끼기 시작한다. 어느 날, 그녀가 살아왔던 ‘행복한’ 나날들을 송두리째 공포로 몰아 넣는 진실을 알게되고 마는데...",
+ "popularity": 3.067,
+ "poster_path": "/80DGQv5qyz9k8fR7BFuXBv928dc.jpg",
+ "release_date": "2024-01-12",
+ "title": "모두의 행복을 위해",
+ "video": false,
+ "vote_average": 6.5,
+ "vote_count": 1
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/jOWgFmD1H5t6nL7ChbmX8oDFUZl.jpg",
+ "genre_ids": [10749, 35],
+ "id": 520172,
+ "original_language": "en",
+ "original_title": "Happiest Season",
+ "overview": "모두가 손꼽아 기다리는 크리스마스를 싫어하는 ‘애비’ 와 행복한 크리스마스를 꿈꾸는 ‘하퍼’. ‘애비’에게 즐거운 크리스마스 추억을 선물하고 싶은 ‘하퍼’는 자신의 집에 ‘애비’를 초대해 가족들과 함께 5일 동안 연휴를 보낼 것을 제안한다. 한편, ‘하퍼’ 역시 ‘애비’를 위해 단 하나뿐인 선물을 준비하지만 ‘하퍼’의 가족들로 인해 ‘애비’의 계획은 계속 틀어지기만 하는데… 과연 두 사람은 서로에게 가장 특별한 크리스마스를 선물할 수 있을까? 올겨울, 가장 행복한 크리스마스가 찾아옵니다!",
+ "popularity": 31.79,
+ "poster_path": "/3xRgtsYg13edwmTgGKAGHuw7qSE.jpg",
+ "release_date": "2020-11-26",
+ "title": "크리스마스에는 행복이",
+ "video": false,
+ "vote_average": 7.278,
+ "vote_count": 1112
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/jwRcMJ84Ga4zZtoTZG64sIQCsCG.jpg",
+ "genre_ids": [10751, 35, 18],
+ "id": 19724,
+ "original_language": "en",
+ "original_title": "Imagine That",
+ "overview": "7살 난 자신의 딸 올리비아에게 보다 일에 더 많은 시간을 투자하는 에반은 성공한 재정 관리직으로 일하고 있다. 어느 날 에반은 자신의 신임과 경력을 잃을수도 있는 중대한 기로 앞에서 딸을 통해 문제를 해결할 방법을 찾게 된다.",
+ "popularity": 33.818,
+ "poster_path": "/lyCTP5C3raH46hJNS9WfBSnWHsG.jpg",
+ "release_date": "2009-06-19",
+ "title": "행복한 상상",
+ "video": false,
+ "vote_average": 5.9,
+ "vote_count": 535
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/qIYZAQ6F9iqjc6nlxLTB7aOU7Us.jpg",
+ "genre_ids": [18],
+ "id": 523561,
+ "original_language": "da",
+ "original_title": "Lykke-Per",
+ "overview": "부와 성공을 좇아 가족을 떠난 공학도. 재능은 그를 코펜하겐의 상류사회로 안내하지만, 야심은 그를 예상치 못한 길로 이끈다. 삶과 행복에 대한 통찰로 가득한 드라마.",
+ "popularity": 18.326,
+ "poster_path": "/1jzJhk73paXQM4JfAacl2UJ7jYF.jpg",
+ "release_date": "2018-08-30",
+ "title": "행복한 남자",
+ "video": false,
+ "vote_average": 6.824,
+ "vote_count": 153
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/vn4bYPJ7l2NZcdYnoboxx1czA4u.jpg",
+ "genre_ids": [18, 10749],
+ "id": 63963,
+ "original_language": "ko",
+ "original_title": "우리들의 행복한 시간",
+ "overview": "세 번째 자살도 실패한 그 해 겨울, 모니카 고모의 손에 이끌려 교도소에 갔다. 내키진 않았지만, 정신병원에서 요양하는 것보다는 나을 테니까. 독해 보이는 창백한 얼굴의 사형수. 내내 거칠고 불쾌하게 구는 저 녀석이나 잘못한 거 없이 쩔쩔 매는 고모나 어이없기는 마찬가지다. 다른 때 같았으면 “가관이네, 끝!”하고 바로 잊어버렸을 텐데, 어쩐지 마음이 울컥한다. 아, 이 남자...! 내 생애 마지막이 될 겨울의 어느 날, 만남의 방에 불려갔다. 찾아온 수녀에게 나 좀 건들지 말라고 못되게 말해줬다. 그런데, 창가에 서 있는 저 여자, 죽은 동생이 좋아했던 애국가를 부른 가수 문유정이다! 그녀는 다른 사람들처럼 동정도 어색한 기색도 없이 그저 서늘하게 나를 보고 있었다. 두 번째 만난 날. 억지로 왔다며 기분 더럽다며 신경질을 부리는 이 여자, 어쩐지 나를 보는 것만 같아 눈을 뗄 수 없다. 교도소 만남의 방. 두 사람이 마주 앉는다. 부유하고 화려한 여자와 가난하고 불우했던 남자. 너무도 다르지만, 똑같이 살아있다는 것을 견딜 수 없어하던 그들. 처음엔 삐딱하고 매몰찬 말들로 서로를 밀어내지만, 이내 서로가 닮았음을 알아챈다. 조금씩 경계를 풀고 서로를 들여다보기 시작하는 두 사람. 조그만 창으로 들어오는 햇살의 온기만큼 따스해져가는 마음. 그들은 비로소, 아무에게도 하지 못했던 ‘진짜 이야기’를 꺼내놓게 된다. 유정이 고백을 들은 윤수의 진심 어린 눈물은 유정의 상처를 아물게 하고, 윤수의 불행했던 과거와 꼬여버린 운명은 유정의 마음을 울린다. 상처로 상처를 위로하고 다독이면서 그들의 절망은 기적처럼 찬란한 행복감으로 바뀌어간다. 이제, 여자는 스스로 죽을 결심 따위는 할 수 없게 되고, 남자는 생애 처음 간절히 살고 싶어진다. 세상에 ‘사랑’이 있다는 것, 살아있다는 것의 기쁨을 알게 해준 서로가 더 없이 소중하다.",
+ "popularity": 11.857,
+ "poster_path": "/pq0IVXJOuIGHC0AqCkqiMazevNb.jpg",
+ "release_date": "2006-09-14",
+ "title": "우리들의 행복한 시간",
+ "video": false,
+ "vote_average": 6.9,
+ "vote_count": 37
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/2HTz9iroaHnXW53dCR0V6Qlipwo.jpg",
+ "genre_ids": [99],
+ "id": 853354,
+ "original_language": "en",
+ "original_title": "Bob Ross: Happy Accidents, Betrayal & Greed",
+ "overview": "그림 그리기의 즐거움을 세상에 가르친 화가, 밥 로스. 그의 인생에 드리운 명암을 배울 시간이다. 밥 아저씨가 그린 행복한 나무도 사업이 가져온 배신과 탐욕의 그림자로부터 자유롭지 못했다.",
+ "popularity": 14.472,
+ "poster_path": "/jov3rCzNT8u5b7A56c0XKCkP5Dc.jpg",
+ "release_date": "2021-08-25",
+ "title": "밥 로스: 행복한 사고, 배신과 탐욕",
+ "video": false,
+ "vote_average": 6.82,
+ "vote_count": 86
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/vujKrqkydYxLuFvdGjA5bDicupV.jpg",
+ "genre_ids": [12, 18, 35],
+ "id": 254375,
+ "original_language": "en",
+ "original_title": "Hector and the Search for Happiness",
+ "overview": "매일 같이 불행하다고 외치는 사람들을 만나는 런던의 정신과 의사 ‘헥터’, 과연 진정한 행복이란 뭘까 궁금해진 그는 모든 걸 제쳐두고 훌쩍 행복을 찾기 위한 여행을 떠난다. 돈이 행복의 조건이라고 생각하는 상하이의 은행가, 가족과 행복하게 살고 싶은 아프리카의 마약 밀매상, 생애 마지막 여행을 떠난 말기암 환자, 그리고 가슴 속에 간직해둔 LA의 첫사랑까지 ‘헥터’는 여행지에서 만난 수많은 인연들을 통해 그는 리스트를 완성해 나간다. 설레고 흥겹고 즐거운 그리고 때로는 위험천만하기까지 한 여행의 순간들, 진정한 행복의 비밀을 찾아 떠난 정신과 의사의 버라이어티한 어드벤처가 시작된다!",
+ "popularity": 23.538,
+ "poster_path": "/3LBipHf67UME8q0f6NN885WXwtn.jpg",
+ "release_date": "2014-08-14",
+ "title": "꾸뻬씨의 행복여행",
+ "video": false,
+ "vote_average": 6.712,
+ "vote_count": 812
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/nUum6wFpzOA9MIfqtpaaIA1V1hU.jpg",
+ "genre_ids": [18, 14],
+ "id": 481432,
+ "original_language": "it",
+ "original_title": "Lazzaro felice",
+ "overview": "시간이 멈춘 것 같은 아름다운 시골 마을 인비올라타. 라짜로는 이웃들과 함께 마을의 지주인 후작 부인의 담배 농장에서 일하는 순박한 청년이다. 요양을 위해 마을을 찾아온 후작 부인의 아들 탄크레디와 라짜로는 둘만의 우정을 쌓는다. 자유를 갈망하는 탄크레디는 자신의 납치극을 꾸며 마을을 벗어나려고 결심하고, 라짜로는 그런 그를 돕는다. 한편, 납치 신고로 마을을 찾아온 경찰에 의해 이웃들은 뿔뿔이 흩어지게 되고 라짜로는 홀로 남게 되는데...",
+ "popularity": 18.144,
+ "poster_path": "/p52sARkb5Wd2b4JApC6iD9r2A7U.jpg",
+ "release_date": "2018-05-31",
+ "title": "행복한 라짜로",
+ "video": false,
+ "vote_average": 7.4,
+ "vote_count": 640
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/kYaqmkeCSqNSat8nKgdLSz0A20l.jpg",
+ "genre_ids": [35, 18],
+ "id": 248,
+ "original_language": "en",
+ "original_title": "Pocketful of Miracles",
+ "overview": "금주법 시대의 뉴요크. 몰래 술을 빚어 치부한 캬바레 주인 유드는 길거리 사과장수 노파 애니의 사과가 행운을 가져다 준다고 믿고 무슨 일이 있을 때마다 그 사과를 산다. 애니는 스페인에 살고 있는 딸 루이즈에게 생활비를 보내느라 고통을 받고 있었는데...딸에게 자신이 귀부인이라고 거짓말을 한 뒷골목의 여장부를 위해서 모든 뒷골목 사람들이 힘을 합쳐서 그녀를 잠시 귀부인으로 변모시켜주는 이 인정이 넘치는 스토리에는, 비록 밑바닥 인생이지만 의리 하나만은 한결같은 서민들의 끈끈한 정이 전편을 흐르고 있다. 뉴욕의 멋쟁이 데이브는 사과 행상 애니의 사과가 늘 자신에게 행운을 가져다 준다고 믿는다. 여느 때와 마찬가지로 데이브는 애니를 찾아가는데, 그녀는 무척이나 불안정한 모습이다. 사실 애니에게는 어릴 때 유럽으로 보낸 딸 루이즈가 있는데, 루이즈는 어느새 장성해 명문가 자제와의 결혼을 앞두고 있다. 그런데 루이즈의 뉴욕 방문을 앞두고, 애니는 자신을 부유한 귀부인으로 알고 있는 딸과 예비 사위에게 정체가 탄로날까 봐 걱정이 태산이다. 카프라는 오랫동안 자신의 작품 (1933)를 다시 만들고 싶어했는데, 약 20년 후에 결국 리메이크작 을 내놓았으며, 이는 카프라의 마지막 장편영화가 된다. 이후 이 작품을 토대로 성룡은 자신이 연출은 물론, 매염방과 함께 주연을 맡은 작품 (1989)을 만든다.",
+ "popularity": 23.695,
+ "poster_path": "/xjXwcGJjT5tE22wazQUYH32HwU8.jpg",
+ "release_date": "1961-12-18",
+ "title": "포켓에 가득찬 행복",
+ "video": false,
+ "vote_average": 7.3,
+ "vote_count": 158
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/2J6RdAjLzrq2e4f6ztw0dW5tZfR.jpg",
+ "genre_ids": [18, 10749, 14],
+ "id": 1037348,
+ "original_language": "ja",
+ "original_title": "わたしの幸せな結婚",
+ "overview": "사이모리 가문의 이능을 이어받지 못해 집안의 미움을 받던 '미요'는 쿠도 가문의 당주이자 냉정한 이능력자 '키요카'와 갑작스러운 정략결혼을 하게 된다. 원하지 않은 정략결혼으로 '미요'를 냉대하던 '키요카'는 이전의 약혼자들과는 다른 그녀의 모습에 점차 빠져들게 되고, '미요' 역시 무자비한 줄로만 알았던 '키요카'의 다정한 모습에 자꾸 설레기 시작한다. 그렇게 '키요카'와 '미요'가 서로의 마음을 알아가던 중 '미요'는 자신에게 숨겨진 능력이 있다는 것을 깨닫게 되고, 그녀의 이능은 두 사람의 행복한 결혼을 방해하게 되는데...",
+ "popularity": 13.621,
+ "poster_path": "/7NsnLIuztqLgjoKema2TwKhsBRh.jpg",
+ "release_date": "2023-03-17",
+ "title": "나의 행복한 결혼",
+ "video": false,
+ "vote_average": 7.1,
+ "vote_count": 24
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/8kFu3NmbwMmi8iRXWy09awhMFLC.jpg",
+ "genre_ids": [35, 18, 27],
+ "id": 16184,
+ "original_language": "ja",
+ "original_title": "カタクリ家の幸福",
+ "overview": "회사에서 퇴직한 카타쿠리 마사오는 도로가 건설될 것이라는 말만 믿고 가족들과 함께 산장 경영을 시작하지만 손님이 들지 않는다. 그러던 어느 날, 드디어 산장에 첫 손님이 들지만, 그는 다음날 아침 방 열쇠에 목이 찔려 숨진 채 발견된다. 이 일이 소문나면 더 이상 손님이 들지 않을 것이라고 생각한 카타쿠리 가족들은 손님의 시체를 유기하는데..",
+ "popularity": 16.543,
+ "poster_path": "/8iIei17w5DVEz4P9OjxIM10f7Jh.jpg",
+ "release_date": "2002-02-23",
+ "title": "카타쿠리가의 행복",
+ "video": false,
+ "vote_average": 6.973,
+ "vote_count": 188
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/wPliKFiYaUEYCWWIIFW9mxjiz0G.jpg",
+ "genre_ids": [18, 10749],
+ "id": 53023,
+ "original_language": "fr",
+ "original_title": "Le Bonheur",
+ "overview": "두 아이와 함께 아내와 행복한 가정을 꾸려가던 남자 주인공은 우연히 우체국에서 일하는 여자와 만나 사랑에 빠지게 된다. 아내에게 어떤 것도 숨길 수 없는 그는 아내에게 자신의 외도를 고백하게 되는데...",
+ "popularity": 14.946,
+ "poster_path": "/r6UYog9MruOe4X71AS57EhuJrFq.jpg",
+ "release_date": "1965-02-10",
+ "title": "행복",
+ "video": false,
+ "vote_average": 7.474,
+ "vote_count": 209
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/nTB7rsZ1JTCrolj91bRBFgi9G4x.jpg",
+ "genre_ids": [35, 18],
+ "id": 9583,
+ "original_language": "en",
+ "original_title": "Divine Secrets of the Ya-Ya Sisterhood",
+ "overview": "루지애나 출신의 유명 극작가 시다 리 워커는 타임지와의 인터뷰를 통해 엄마와의 좋지 못한 관계 때문에 어두운 유년기를 거쳤다고 밝힌다. 이에 오랫동안 시다 리와 관계를 끊고 지내던 엄마 바비는 격분하고 소녀시절부터 친구모임을 유지해왔던 야야 시스터후드 멤버들과 함께 뉴욕으로 시다 리를 찾아가 그녀를 납치하다시피 고향으로 데려온다. 이제 고향으로 돌아온 시다 리는 자신과 어머니의 관계를 조금씩 회상하게 된다",
+ "popularity": 13.751,
+ "poster_path": "/hI05FJ8wgPROHQgLtfJ4ZuH3l4b.jpg",
+ "release_date": "2002-06-07",
+ "title": "산드라 블록의 행복한 비밀",
+ "video": false,
+ "vote_average": 6.1,
+ "vote_count": 224
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/fqb1odEjdxDrwicf6DZVCKZvrAr.jpg",
+ "genre_ids": [35],
+ "id": 546630,
+ "original_language": "de",
+ "original_title": "100 Dinge",
+ "overview": "어렸을 적부터 함께 자라고, IT 회사도 공동 운영, 사는 집도 아랫집, 윗집으로 이웃사촌인 ‘폴’과 ‘토니’는 둘도 없는 X랄 친구! 스마트폰과 아마존 없이는 못 사는 #소비킹 ‘폴’과 자신감과 발모약 없이는 못 사는 #자기관리킹 ‘토니’가 1,400만 유로라는 빅딜 성사 후의 축하 파티에서 거하게 취해 신경전을 벌이다가 홧김에 황당한 내기를 하게 된다. 모든 것을 버린 후, 하루에 한 가지 물건을 돌려받으며 100일을 버텨야 하는 ‘100일 챌린지’를 하게 된 ‘폴’과 ‘토니’!",
+ "popularity": 15.328,
+ "poster_path": "/7eP30iaPesR3NpwgrGcdZLFCrt8.jpg",
+ "release_date": "2018-12-06",
+ "title": "100일 동안 100가지로 100퍼센트 행복찾기",
+ "video": false,
+ "vote_average": 6.667,
+ "vote_count": 278
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/tkXEGcyXEzuFGSPnHT56Fsebuxs.jpg",
+ "genre_ids": [53],
+ "id": 28455,
+ "original_language": "en",
+ "original_title": "Deceived",
+ "overview": "결혼한 지 6년이 됐고, 딸 하나를 둔 애드리엔은 세상에 부러울 것이 없다. 그러나 교통사고로 남편이 죽으면서 의문에 빠진다. 남편 잭 손더슨이라는 인물은 오래전에 죽었다는 사실을 알게 된 것이다. 애드리엔의 생명을 노리는 무서운 음모가 진행된다.",
+ "popularity": 14.035,
+ "poster_path": "/hL6iFhKp4C3EsAdMHKdABrOiSHl.jpg",
+ "release_date": "1991-09-27",
+ "title": "행복했던 여자",
+ "video": false,
+ "vote_average": 5.7,
+ "vote_count": 100
+ }
+ ],
+ "total_pages": 5,
+ "total_results": 94
+}
diff --git a/cypress/fixtures/movie-search-page2.json b/cypress/fixtures/movie-search-page2.json
new file mode 100644
index 000000000..33c9ca0e7
--- /dev/null
+++ b/cypress/fixtures/movie-search-page2.json
@@ -0,0 +1,327 @@
+{
+ "page": 2,
+ "results": [
+ {
+ "adult": false,
+ "backdrop_path": "/7bFz3PtoYKwr3Yc7X3zcp2CJtPI.jpg",
+ "genre_ids": [35, 18],
+ "id": 41776,
+ "original_language": "en",
+ "original_title": "This Is My Life",
+ "overview": "개그우먼 뺨친다는 소리를 수도 없이 들어온 도티 잉글스는 에리카와 오팔이라는 두 딸과 함께 사는 이혼녀. 백화점의 화장품 매장에서 그 좋은 입담과 재치로 손님들을 사로잡던 그녀는 마침내 코미디계의 문을 두드린다. 자신의 심볼로 결정한 '땡땡이' 의상을 온몸에 휘감고 오디션을 멋지게 치른 그녀는 유명 매니저 아놀드 모스에게 발탁된다. 사랑하는 딸을 뉴욕의 아파트에 남겨놓고 LA로 공연을 떠난 도티를 딸들은 그녀가 더이상 엄마로만 머물 수 없다는 사실을 깨달으면서 방황하기 시작한다. 예민한 사춘기 소녀인 에리카는 반발심으로 남자친구와 첫경험(?)을 치루고 도티와 모스가 연인 사이로 발전하자 친아빠를 찾아 가출을 하는데...",
+ "popularity": 6.3,
+ "poster_path": "/j1OyQTN7EB8c8u6zykIaRhyQFsn.jpg",
+ "release_date": "1992-02-21",
+ "title": "행복 찾기",
+ "video": false,
+ "vote_average": 6,
+ "vote_count": 14
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/3R8lX1mqTeBFLlFSyfnxRSYiEgk.jpg",
+ "genre_ids": [10752, 18],
+ "id": 37451,
+ "original_language": "en",
+ "original_title": "The Inn of the Sixth Happiness",
+ "overview": "글라디스는 선교사로 중국에 파견되었지만 자격이 부족하여 거절당해 열심히 일하며 모은 돈을 모으고 외진 지방으로 여행을 떠난다. 영국 여왕 로슨과 여섯번째 행복의 여관에서 일하게 되면서 \"발 검사관\" 직책을 수락하고 발을 묶는 중국 소녀들에 대한 법률을 홍보하면서 아이들과 함께 산을 여행하게 되는데...",
+ "popularity": 14.179,
+ "poster_path": "/qSkuoH1e3pUO2sbwESHqq2CNPel.jpg",
+ "release_date": "1958-12-11",
+ "title": "여섯번째 행복의 여관",
+ "video": false,
+ "vote_average": 6.846,
+ "vote_count": 68
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/1JLv7pGLxqqsshNuc2B3jASL3Xs.jpg",
+ "genre_ids": [99, 10402],
+ "id": 601169,
+ "original_language": "en",
+ "original_title": "Chasing Happiness",
+ "overview": "뉴저지 목사의 아들이라는 소박한 출신에서 혜성같은 명성을 얻기까지, 조나스 브라더스의 형제애는 굳건했다. 그러나, 그 후 놀랍고 고통스러운 이별이 찾아와 조, 케빈 그리고 닉은 각자의 길을 가게 된다.",
+ "popularity": 25.5,
+ "poster_path": "/qbJx8lLgGxMeBbieyYGHKcVWpN.jpg",
+ "release_date": "2019-06-04",
+ "title": "행복을 찾아서",
+ "video": false,
+ "vote_average": 8.024,
+ "vote_count": 144
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/x1zNrzip2FyjJKrqBhLwku0izrB.jpg",
+ "genre_ids": [10751, 35, 16],
+ "id": 245685,
+ "original_language": "en",
+ "original_title": "Postman Pat: The Movie",
+ "overview": "평소 소탈하고 친절하여 많은 이들로부터 사랑 받는 우체부 팻 아저씨는 아내 사라, 아들 줄리안과 함께 시골에서 소박하지만 행복한 삶을 살고 있었다. 이탈리아로의 가족여행을 계획한 팻 아저씨는 우연히 한 서바이벌 오디션 프로그램의 포상이 이탈리아 여행이라는 것을 알고 이 대회에 출전하기로 결심한다. 이 기회를 틈타 우체국의 본부장 카벙클이 오디션에 참가한 팻 아저씨의 빈 자리를 채우기 위해 팻로봇을 만들고, 팻로봇은 오히려 사고를 몰고 다녀 마을은 혼란에 휩싸인다. 팻 아저씨는 이 대회에서 숨겨진 재능을 발휘하며 승승장구하게 되고 런던에서 열리는 결승전까지 진출한다. 이 여정에서 갑자기 유명세를 탄 팻 아저씨는 어느덧 가족과 친구, 그리고 자신의 일자리까지 위협받게 되는데... 가족사랑 팻 아저씨의 이탈리아 여행권을 위한\r 좌충우돌 깜찍발랄한 오디션 도전이 시작 된다!!",
+ "popularity": 11.729,
+ "poster_path": "/oN9XRPY0IwjxiHkt3S2q8lPlGB2.jpg",
+ "release_date": "2014-05-23",
+ "title": "행복배달부 팻아저씨",
+ "video": false,
+ "vote_average": 5.044,
+ "vote_count": 45
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/wHGKsJKa2D9MYNwHTrxBjO2aZkX.jpg",
+ "genre_ids": [16, 35, 10751],
+ "id": 60897,
+ "original_language": "en",
+ "original_title": "Happiness Is a Warm Blanket, Charlie Brown",
+ "overview": "Linus is pushed to his limits when he learns Grandma is coming to visit and plans on ridding him of his childish security blanket.",
+ "popularity": 5.365,
+ "poster_path": "/yjRcn8painrtKiOy0zagyAwH4IH.jpg",
+ "release_date": "2011-03-29",
+ "title": "행복은 따뜻한 담요야, 찰리 브라운",
+ "video": false,
+ "vote_average": 7.1,
+ "vote_count": 62
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/63pni1oSA1wmOfFD7PQE054aGNU.jpg",
+ "genre_ids": [18, 35],
+ "id": 542714,
+ "original_language": "en",
+ "original_title": "Sometimes Always Never",
+ "overview": "어린시절 평소와 같이 아버지와 보드게임을 즐기던 형이 실종되고 지금까지 아무런 소식이 없다. 형의 그늘에서 벗어나지 못한 채 어른이 된 나는 어느 날 신원불명의 시체가 발견되었다는 연락을 받고 아버지와 함께 안치소로 향한다. 형이길 바랐을까? 형이 아니길 바랐을까?",
+ "popularity": 16.897,
+ "poster_path": "/iTOmzvjHv2RKYENsPfxf1UhSrQb.jpg",
+ "release_date": "2019-03-14",
+ "title": "행복의 단추를 채우는 완벽한 방법",
+ "video": false,
+ "vote_average": 6.367,
+ "vote_count": 60
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/4COuLuRV17cBCwmzYo2yQiLH01P.jpg",
+ "genre_ids": [18],
+ "id": 412120,
+ "original_language": "ja",
+ "original_title": "湯を沸かすほどの熱い愛",
+ "overview": "이 세상에 다신 없을 강‘철’멘탈 대인배 엄마 ‘후타바’와 가장 서툰 ‘철’없는 아빠 ‘가즈히로’, ‘철’들어가는 사춘기 딸 ‘아즈미’, ‘철’부지 이복동생 '아유코’! 누구보다 강한 엄마의 세상 가장 뜨거운 사랑을 받아가며 특별한 우리 가족은 웃고, 울고, 사랑하며 ‘행복 목욕탕’을 운영합니다. 모든 가족이 가지고 있는 것, ‘비밀’, ‘사랑’, ‘슬픔’, ‘행복’. 하지만 우리 가족에게는 다른 가족보다 더욱 큰 비밀과 뜨거운 사랑, 깊은 슬픔 그리고 따스한 행복이 있습니다.",
+ "popularity": 13.69,
+ "poster_path": "/5Had2Op6xeru9gFYhW3RYZdmRZa.jpg",
+ "release_date": "2016-10-29",
+ "title": "행복 목욕탕",
+ "video": false,
+ "vote_average": 7.109,
+ "vote_count": 46
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/7BAy0m2E8Cz93GUNwjLrzKHCU73.jpg",
+ "genre_ids": [99],
+ "id": 455918,
+ "original_language": "de",
+ "original_title": "Expedition Happiness",
+ "overview": "반려견까지 데리고 여자친구와 길을 나선 영화감독 펠릭스 슈타르크. 개조한 버스를 타고 알래스카에서 멕시코까지 누비는 이 여행길엔 수많은 깜짝 선물이 기다리고 있다.",
+ "popularity": 11.579,
+ "poster_path": "/lS09wiv0IF3n3lONGOtZo5EXqac.jpg",
+ "release_date": "2017-05-04",
+ "title": "행복 원정대: 알래스카에서 멕시코까지",
+ "video": false,
+ "vote_average": 6.576,
+ "vote_count": 118
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/eFEA6ftIihZnsh3lUYuuR8l8u3D.jpg",
+ "genre_ids": [18, 35],
+ "id": 45861,
+ "original_language": "zh",
+ "original_title": "幸福时光",
+ "overview": "정년 퇴직해 어렵게 홀로 살고 있는 50대의 자오는 두 번의 결혼 경력이 있는 뚱뚱하고 탐욕스러운 여인에게 홀딱 빠져 청혼한다. 자오가 큰 호텔의 지배인인 줄 알고 있는 여인은 지참금으로 5천 위안을 요구한다. 자오는 돈을 마련하기 위해 후배와 함께 버려진 버스를 ‘해피 타임 호텔’이라는 간이 여관으로 개조해서 젊은 연인들에게 빌려주는 사업을 시작하지만 벌이가 영 신통치 않다. 어느 날, 여인의 집에 찾아간 자오는 그녀의 의붓딸 우를 만나고, 취직 시켜 달라는 여인의 부탁에 떠밀려 우를 데리고 ‘해피 타임 호텔’을 찾아온 자오는 버스가 폐차 처리되는 과정을 목격한다. 어쩔 수 없이 우와 함께 자신의 집에서 생활하게 된 자오는 그녀가 안마사로 취직한 것처럼 만들기 위해 버려진 공장에 안마 시술소를 차린다. 그러던 어느날, 호텔 지배인이 아님을 알아챈 여인이 결별을 선언하고, 우마저 집으로 돌려보내라고 요구한다. 이에 충격을 받고 술에 만취한 자오는 트럭에 치여 혼수상태에 빠진다.",
+ "popularity": 13.382,
+ "poster_path": "/3R2mheIEHKmbrjDyohw88Z89d8a.jpg",
+ "release_date": "2000-12-31",
+ "title": "행복한 날들",
+ "video": false,
+ "vote_average": 7.122,
+ "vote_count": 49
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/lCt1HJfRuMskVCuBMuqv9D9L66J.jpg",
+ "genre_ids": [18, 10749],
+ "id": 94671,
+ "original_language": "en",
+ "original_title": "Jayne Mansfield's Car",
+ "overview": "아내의 마지막 선물은 꼴도 보기 싫은 새 가족이었다! 20년 전, 이혼하고 훌쩍 떠나버린 아내가 암으로 사망하여 고향으로 돌아왔다. 더불어 원수 같은 새 가족과 함께! 가부장적이고 무뚝뚝한 아버지 짐 콜드웰은 심기가 불편하지만 새 가족을 집안으로 받아들이게 된다. 이에 어색한 동거가 시작되지만, 함께 지낼수록 서로에 대한 앙금은 씻겨져 가고 각자의 상처도 보듬어가게 된다. 그러던 어느 날, 킹슬리와 함께 사냥을 떠난 짐은 손자의 실수로 약에 취해 위험천만한 행동을 하게 되는데... 2014년 5월, 피보다 진한 두 가족의 힐링 드라마가 시작된다!",
+ "popularity": 10.343,
+ "poster_path": "/52B13wFJFd4DhM9txFbmsiuVomE.jpg",
+ "release_date": "2013-07-25",
+ "title": "내 아내의 행복한 장례식",
+ "video": false,
+ "vote_average": 5.9,
+ "vote_count": 51
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/rbOePwWWAj5JgvY4ellJZIJHqja.jpg",
+ "genre_ids": [18, 10749],
+ "id": 392807,
+ "original_language": "fi",
+ "original_title": "Hymyilevä mies",
+ "overview": "평범한 제빵사에서 권투 영웅으로 떠오른 ‘올리’ 전 국민이 고대하는 세계 챔피언십을 앞두고 심각한 문제가 생겼다. “코치님, 솔직하게 말해도 돼요?” “말해봐” “저 사랑에 빠졌어요” “왜 하필… 지금!!”",
+ "popularity": 8.571,
+ "poster_path": "/8BmlWLnMvMciuryg8gHxhm5fd0J.jpg",
+ "release_date": "2016-09-02",
+ "title": "올리 마키의 가장 행복한 날",
+ "video": false,
+ "vote_average": 6.7,
+ "vote_count": 80
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/sbu5cZj81YMexlU4CFuCXZPU2jy.jpg",
+ "genre_ids": [18, 878, 80],
+ "id": 541340,
+ "original_language": "zh",
+ "original_title": "幸福城市",
+ "overview": "어둠에 잠긴 디스토피아, 세 사람을 향한 한 남자의 복수. 수십 년 전, 그에게는 어떤 일이 일어났던 걸까. 과거로 거슬러가며 하나씩, 그 어긋난 순간들이 드러난다.",
+ "popularity": 12.121,
+ "poster_path": "/ukakfDKUPneiI690GNvwQgNgPtu.jpg",
+ "release_date": "2018-12-13",
+ "title": "행복도시",
+ "video": false,
+ "vote_average": 6.646,
+ "vote_count": 65
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/5tEI9qnusNGIrgrxuGtc8fH34hT.jpg",
+ "genre_ids": [35, 10749],
+ "id": 20127,
+ "original_language": "en",
+ "original_title": "It Should Happen to You",
+ "overview": "Gladys Glover has just lost her modeling job when she meets filmmaker Pete Sheppard shooting a documentary in Central Park. For Pete it's love at first sight, but Gladys has her mind on other things, making a name for herself. Through a fluke of advertising she winds up with her name plastered over 10 billboards throughout city.",
+ "popularity": 10.257,
+ "poster_path": "/pX8geXN3vjvkgi6zNgtxheFpPXg.jpg",
+ "release_date": "1954-01-15",
+ "title": "평범한 여인의 행복",
+ "video": false,
+ "vote_average": 6.9,
+ "vote_count": 52
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/pl6EJOYd2zOsjVAfc6Df6ZvSZUc.jpg",
+ "genre_ids": [10402, 99],
+ "id": 696396,
+ "original_language": "en",
+ "original_title": "Happiness Continues",
+ "overview": "복귀 앨범 콘서트 투어에 나선 조나스 브라더스의 여정을 함께하며 콘서트 현장을 생생하게 만난다.",
+ "popularity": 9.282,
+ "poster_path": "/b2moEkoXck5B0EsGa49TPhbQbNa.jpg",
+ "release_date": "2020-04-23",
+ "title": "행복은 계속된다: 조나스 브라더스 콘서트",
+ "video": false,
+ "vote_average": 7.872,
+ "vote_count": 47
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/9CKiWfjNWp6SOpyPyqx4FkbimeL.jpg",
+ "genre_ids": [10751],
+ "id": 541481,
+ "original_language": "en",
+ "original_title": "H Is for Happiness",
+ "overview": "어린 캔디스 피는 학교 과제의 일환으로 매일 투닥대고 슬픔에 차 있는 자신의 가족을 화해시켜야 한다. 그녀는 엄청난 열정을 가지고, 때로는 의도치 않은 우스꽝스러운 태도로 주변사람들을 행복하게 해주려고 노력한다. 자신이 다른 차원의 세계에서 왔다고 믿는 캔디스 피의 학교 친구, 더글라스 벤슨은 캔디스 피의 뜻밖의 조력자이자 열렬한 팬이 된다.\r (2020년 제15회 부산국제어린이청소년영화제) 동생의 죽음으로 불화의 골이 깊어진 부모, 반목하는 아빠와 삼촌 사이에서 버티다가도 혼자라는 고립감을 느끼는 12살 소녀, 하지만 슬픔이나 불행이라는 단어 속으로 숨지 않고 당당히 자신의 존재와 꿈을 드러내고 이해받기 위해 고군분투하는 모습이 인상적이다. 반가운 호주영화. 『내 인생의 알파벳』이라는 원작소설을 바탕으로 한 무한긍정소녀 캔디스의 가족 회복기. (2020년 제15회 부산국제어린이청소년영화제/ 변혜경)",
+ "popularity": 7.052,
+ "poster_path": "/qcTIOHtpuTjI3SQxkcf4JA8xJuN.jpg",
+ "release_date": "2021-06-24",
+ "title": "행복은 H로 시작해",
+ "video": false,
+ "vote_average": 7.857,
+ "vote_count": 7
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/52TZcdJ5P6zznIqhMIrXNTQhKv3.jpg",
+ "genre_ids": [18],
+ "id": 252519,
+ "original_language": "ko",
+ "original_title": "나는 행복합니다",
+ "overview": "자신이 처한 상황을 견딜 수 없어 과대망상증이란 병을 얻게된 만수. 치매에 걸린 엄마와 자살한 형이 남겨준 도박 빚. 이 모든 현실을 기억할 수 없는 정신병동에서의 하루하루가 그에겐 꿈 같은 나날들이다. 빈 종이에 자신이 서명만 하면 전세계 은행에서 통용되는 화폐가치를 지닌다고 믿는 만수. 그 말을 믿어주는 친구들, 그리고 주치의와 개인 간호사 수경이 있는 그 곳의 생활은 달콤하기만 하다. 항상 만수의 곁에서 수호천사가 되어주는 수경이 있어 만수는 더욱 행복하지만 그녀의 얼굴은 언제나 슬픔에 가득 차 있다. 연인에게 버림받고, 직장암 말기의 아버지를 간호하며 힘든 하루하루를 보내고 있는 수간호사 수경. 애인에게 버림받고 월급도 차압당하며 괴로운 현실들 뿐이지만, 자신에게 병원비에 보태라며 천만 원쯤은 개의치 않고 쥐어주는 만수가 있어 행복하다. 수경에게는 그의 과대망상증이라는 병이 자신을 버틸 수 있게 하는 힘이 된다. 병원에서 강도 높은 치료를 받게 되는 만수, 점차 극한 상황으로 내몰리는 수경. 그들만의 행복한 시간은 끝을 보이기 시작 하는데...",
+ "popularity": 7.161,
+ "poster_path": "/40DlddW58VNiYmGAGCD17X5Q3mF.jpg",
+ "release_date": "2008-10-10",
+ "title": "나는 행복합니다",
+ "video": false,
+ "vote_average": 5.4,
+ "vote_count": 5
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/odi6xBunyvnqdc7zCHUq9G2By6y.jpg",
+ "genre_ids": [18],
+ "id": 182827,
+ "original_language": "ja",
+ "original_title": "舟を編む",
+ "overview": "1995년, 전혀 존재감이 없는 출판사의 뒷방 부서인 ‘사전편집부’에 공석이 생겼다! 지루하고 재미없는 편찬일을 떠맡고 싶지 않은 쾌남 ‘마사시’(오다기리 죠)는 세상과는 단절되어 보이는 영업부의 왕따 ‘마지메’(마츠다 류헤이)를 전격 스카우트해온다. 얼떨결에 사전편집부에 합류한 ‘마지메’는 새로운 사전 만들기 프로젝트인 [대도해]에 매력을 느끼고, 단어들을 수집하며 차츰 사람들과 언어로 소통하는 즐거움을 배워나간다. 그러던 중 찾아온 뜻밖의 사랑! 10년 동안 묵고 있는 하숙집 할머니의 손녀 ‘카구야’(미야자키 아오이)를 보고 한눈에 반한 ‘마지메’. ‘마지메’의 사랑을 도와주려는 편집부 식구들은 그에게 [사랑] 목록의 풀이를 맡기고, ‘마지메’는 ‘카구야’에게 어설프지만 진심을 다해 구애를 펼치며 단어 풀이를 해나간다. 2009년, 십여 년이 넘는 세월 동안 수작업으로 단어 하나 하나를 모아 총 3000만개의 단어풀이를 완성한중년의 ‘마지메’는 [대도해]의 출간을 앞둔 어느 날, 실수로 누락된 단어 한 개를 발견한다.\r 과연 ‘마지메’의 사랑과, 위기를 맞은 [대도해]의 출간은 이루어질 수 있을까?",
+ "popularity": 11.896,
+ "poster_path": "/beNVJQxRAjhZGqKPsPrilXmEGNu.jpg",
+ "release_date": "2013-04-13",
+ "title": "행복한 사전",
+ "video": false,
+ "vote_average": 7.2,
+ "vote_count": 50
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/xtUAP6xPWr5s4AAP38o8hwnhbJq.jpg",
+ "genre_ids": [99],
+ "id": 502759,
+ "original_language": "en",
+ "original_title": "Itzhak",
+ "overview": "이스라엘 작은 동네에서부터 세계 유수의 무대에 오르기까지, 육체적 한계마저 극복한 이차크 펄만의 음악 선물이 펼쳐진다! 슈베르트부터 스트라우스까지, 바흐부터 빌리 조엘까지, 이차크 펄만의 탁월한 바이올린 연주는 인간 경험의 심연을 울린다. 이 황홀한 다큐멘터리는 소아마비를 극복한 유대인 이민자 출신 바이올린 거장이 분투하는 모습을 다루며, 예술이 인생에서 빼놓을 수 없는 요소인 이유를 떠올리게 한다. 경지에 이른 펄만의 바이올린 연주는 그가 자란 텔아비브의 작은 동네에서부터 세계 유수의 무대까지 그를 이끈다. 음악과 인생에 대한 펄만의 관점도 들어본다. (2018년 제14회 제천국제음악영화제)",
+ "popularity": 3.048,
+ "poster_path": "/cffD1d8y0Pgu6oqzJsj6mqQzoYZ.jpg",
+ "release_date": "2017-10-05",
+ "title": "이차크의 행복한 바이올린",
+ "video": false,
+ "vote_average": 6.3,
+ "vote_count": 9
+ },
+ {
+ "adult": false,
+ "backdrop_path": "/3lhXRVHJWADccsk13WScasKrRc4.jpg",
+ "genre_ids": [35, 18, 10749],
+ "id": 14659,
+ "original_language": "fr",
+ "original_title": "Mes amis, mes amours",
+ "overview": "파리의 외로운 싱글남 마티아스는 런던에서 아들과 단 둘이 살고 있는 죽마고우 앙트완으로부터 런던으로 이사오라는 제안을 받는다. 옆집에서 살자는 처음 계획과 달리 무료한 일상이 지루했던 마티아스는 앙트완의 가족과 함께 한집에서 살기를 계획하고, 두 집 사이에 있던 벽을 허문다. 그렇게 두 싱글 파파와 사랑스러운 아이들의 아슬아슬한 동거는 조금은 ‘딱딱한’ 규칙과 함께 시작된다. 동거의 규칙. 1. 보모 금지 2. 여자 출입금지 3. 통금시간은 12시! 평화로운 생활도 잠시, 마티아스는 자신의 서점에 들른 손님 오드리에게 첫눈에 반하게 된다. 그녀 역시 마티아스의 다정다감하고 유머스러운 매력에 빠져들게 되지만, 앙트완과 마티아스의 부부 같은 오묘한 관계를 보고 이별을 통보한다. 설상가상으로 아이들의 양육문제와 연애를 하면서 계속 규칙을 어기는 마티아스 때문에 두 사람의 갈등은 깊어져만 가는데… 과연, 두 싱글 파파의 동거는 해피엔딩이 될 수 있을까?",
+ "popularity": 3.019,
+ "poster_path": "/3JPCMxFpjJ1NU88HxOGOhUWg7ZZ.jpg",
+ "release_date": "2008-07-02",
+ "title": "행복한 프랑스 책방",
+ "video": false,
+ "vote_average": 5.327,
+ "vote_count": 52
+ },
+ {
+ "adult": false,
+ "backdrop_path": null,
+ "genre_ids": [],
+ "id": 350293,
+ "original_language": "ko",
+ "original_title": "행복은 성적순이 아니잖아요",
+ "overview": "어느 고등학교 2학년 교실, 성적이 바닥인 봉구(허석)와 천재(최수훈)는 각각 은주(이미연)와 양호 선생님을 짝사랑한다. 집이 어려운 창수는 어머니를 도와 청소 리어카를 끄는데 풍요로운 환경에서 자란 은주는 그를 이해하지 못하고 비아냥 거린다. 은주는 항상 좋은 성적을 유지하면서도 부모님의 집착 때문에 성적에 대한 강박관념에 시달리다가 순수한 마음의 봉구에게 끌린다. 잠시 현실을 벗어나 야외에서 한가로운 시간을 즐기는 은주와 봉구, 그러나 다음 시험에서 은주가 7등으로 밀려나자 그녀는 부모님의 차가운 시선을 받는다. 은주는 이를 견디지 못하고 자살하고, 교실 은주의 책상에는 꽃 한 송이가 놓이고 영구차가 학교를 도는 가운데 봉구와 아이들은 눈물을 흘린다. (박민) 어느 고등학교 2학년 교실, 성적이 바닥인 봉구(허석)와 천재(최수훈)는 각각 은주(이미연)와 양호 선생님을 짝사랑한다. 집이 어려운 창수는 어머니를 도와 청소 리어카를 끄는데 풍요로운 환경에서 자란 은주는 그를 이해하지 못하고 비아냥 거린다. 은주는 항상 좋은 성적을 유지하면서도 부모님의 집착 때문에 성적에 대한 강박관념에 시달리다가 순수한 마음의 봉구에게 끌린다. 잠시 현실을 벗어나 야외에서 한가로운 시간을 즐기는 은주와 봉구, 그러나 다음 시험에서 은주가 7등으로 밀려나자 그녀는 부모님의 차가운 시선을 받는다. 은주는 이를 견디지 못하고 자살하고, 교실 은주의 책상에는 꽃 한 송이가 놓이고 영구차가 학교를 도는 가운데 봉구와 아이들은 눈물을 흘린다. (박민)",
+ "popularity": 4.995,
+ "poster_path": "/nRRgeTXkKdi2IVFssEtEeMH7sxV.jpg",
+ "release_date": "1989-07-29",
+ "title": "행복은 성적순이 아니잖아요",
+ "video": false,
+ "vote_average": 6,
+ "vote_count": 1
+ }
+ ],
+ "total_pages": 5,
+ "total_results": 94
+}
diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts
new file mode 100644
index 000000000..9311e434d
--- /dev/null
+++ b/cypress/support/commands.ts
@@ -0,0 +1,11 @@
+///
+
+Cypress.Commands.add("visitMainPage", () => {
+ cy.visit("http://localhost:8080/");
+});
+
+declare namespace Cypress {
+ interface Chainable {
+ visitMainPage(): Cypress.Chainable;
+ }
+}
diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts
new file mode 100644
index 000000000..6a173d6fc
--- /dev/null
+++ b/cypress/support/e2e.ts
@@ -0,0 +1,20 @@
+// ***********************************************************
+// This example support/e2e.ts is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import "./commands";
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
diff --git a/cypress/utils/createURL.js b/cypress/utils/createURL.js
new file mode 100644
index 000000000..140253bef
--- /dev/null
+++ b/cypress/utils/createURL.js
@@ -0,0 +1,9 @@
+export const getPopularURL = (page) =>
+ new RegExp(
+ `^https:\\/\\/api\\.themoviedb\\.org\\/3\\/movie\\/popular\\?.*page=${page}.*`,
+ );
+
+export const getSearchURL = (page) =>
+ new RegExp(
+ `^https:\\/\\/api\\.themoviedb\\.org\\/3\\/search\\/movie\\?query=.*&include_adult=false&language=ko&page=${page}`,
+ );
diff --git a/dist/2e162b4fefb34cd7ed8d.png b/dist/2e162b4fefb34cd7ed8d.png
new file mode 100644
index 000000000..b2a61da8e
Binary files /dev/null and b/dist/2e162b4fefb34cd7ed8d.png differ
diff --git a/dist/3b06285860c611dd0f6c.svg b/dist/3b06285860c611dd0f6c.svg
new file mode 100644
index 000000000..22a2e0a5b
--- /dev/null
+++ b/dist/3b06285860c611dd0f6c.svg
@@ -0,0 +1,4 @@
+
diff --git a/dist/6328741810b732410eec.png b/dist/6328741810b732410eec.png
new file mode 100644
index 000000000..a17bed7c6
Binary files /dev/null and b/dist/6328741810b732410eec.png differ
diff --git a/dist/bundle.js b/dist/bundle.js
new file mode 100644
index 000000000..752e95ebe
--- /dev/null
+++ b/dist/bundle.js
@@ -0,0 +1,564 @@
+/*
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ({
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./templates/common.css":
+/*!********************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./templates/common.css ***!
+ \********************************************************************/
+/***/ ((module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/getUrl.js */ \"./node_modules/css-loader/dist/runtime/getUrl.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__);\n// Imports\n\n\n\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! ./search_button.png */ \"./templates/search_button.png\"), __webpack_require__.b);\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"* {\\n box-sizing: border-box !important;\\n}\\n\\nbody {\\n font-size: 14px;\\n background-color: #222222;\\n color: #fff;\\n}\\n\\na {\\n color: inherit;\\n text-decoration: none;\\n}\\n\\nbutton {\\n cursor: pointer;\\n}\\n\\n#app {\\n padding-bottom: 48px;\\n}\\n\\n*:focus {\\n outline: none;\\n}\\n.screen-only {\\n position: absolute;\\n top: -999px;\\n left: -999px;\\n}\\n.item-view,\\n.skeleton-view .item-test {\\n width: 100%;\\n}\\n\\n.item-view,\\n.skeleton-view {\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n width: 1200px;\\n margin: 0 auto;\\n}\\n\\n.list-title {\\n font-size: 2rem;\\n font-weight: bold;\\n user-select: none;\\n}\\n\\n/* https://andrew.hedges.name/experiments/aspect_ratio/ */\\n\\n.item-list {\\n display: grid;\\n margin: 48px 0;\\n grid-template-columns: repeat(4, 180px);\\n grid-column-gap: 160px;\\n grid-row-gap: 48px;\\n}\\n.item-list.no-item-list {\\n display: block;\\n li {\\n font-size: 24px;\\n text-align: center;\\n }\\n}\\n.item-card {\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.item-thumbnail {\\n border-radius: 8px;\\n width: 180px;\\n height: 270px;\\n object-fit: cover;\\n background-size: contain;\\n}\\n\\n.item-title {\\n margin-top: 16px;\\n font-size: 1.2rem;\\n font-weight: bold;\\n}\\n\\n.item-score {\\n display: flex;\\n align-items: flex-end;\\n margin-top: 16px;\\n font-size: 1.2rem;\\n}\\n\\n.item-score::after {\\n margin-left: 8px;\\n}\\n.full-width {\\n width: 100%;\\n}\\n\\n.last-item {\\n margin-top: 48px;\\n}\\n\\nbutton.btn {\\n border: 0;\\n border-radius: 8px;\\n height: 30px;\\n color: #fff;\\n}\\n\\nbutton.primary {\\n background: #f33f3f;\\n}\\n\\n.more-button {\\n display: none;\\n}\\n\\n.more-button.open {\\n display: block;\\n margin: 0 auto;\\n}\\n/*skeleton*/\\n.skeleton-view {\\n display: none;\\n}\\n\\n.skeleton-view.on {\\n display: grid;\\n}\\n.item-card .skeleton {\\n background: linear-gradient(-90deg, #aaa, #f0f0f0, #aaa, #f0f0f0);\\n background-size: 400%;\\n animation: skeleton-animation 5s infinite ease-out;\\n border-radius: 8px;\\n}\\n\\n.item-title.skeleton::after,\\n.item-score.skeleton::after {\\n font-size: 0;\\n content: \\\"loading\\\";\\n}\\n\\n.error-view {\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n align-items: center;\\n width: 100%;\\n height: 100vh;\\n font-size: 1.2rem;\\n font-weight: bold;\\n}\\n\\n@keyframes skeleton-animation {\\n 0% {\\n background-position: 0% 50%;\\n }\\n 50% {\\n background-position: 100% 50%;\\n }\\n 100% {\\n background-position: 0% 50%;\\n }\\n}\\nheader {\\n width: 100%;\\n min-width: 1200px;\\n height: 72px;\\n background-color: #222;\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n padding: 0 20px;\\n border-bottom: 1px solid white;\\n margin-bottom: 48px;\\n}\\n\\nheader h1 {\\n cursor: pointer;\\n user-select: none;\\n font-size: 2rem;\\n font-weight: bold;\\n letter-spacing: -0.1rem;\\n color: #f33f3f;\\n}\\n\\nheader > .search-box {\\n display: flex;\\n background: #fff;\\n padding: 8px;\\n border-radius: 4px;\\n}\\n\\nheader .search-box input {\\n border: 0;\\n}\\n\\nheader .search-box > .search-button {\\n width: 14px;\\n border: 0;\\n text-indent: -1000rem;\\n background: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \") transparent no-repeat 0 1px;\\n background-size: contain;\\n}\\n\\n#no-item {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n\", \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://javascript-movie-review/./templates/common.css?./node_modules/css-loader/dist/cjs.js");
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./templates/reset.css":
+/*!*******************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./templates/reset.css ***!
+ \*******************************************************************/
+/***/ ((module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/* http://meyerweb.com/eric/tools/css/reset/\\n v2.0 | 20110126\\n License: none (public domain)\\n*/\\n\\nhtml,\\nbody,\\ndiv,\\nspan,\\napplet,\\nobject,\\niframe,\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6,\\np,\\nblockquote,\\npre,\\na,\\nabbr,\\nacronym,\\naddress,\\nbig,\\ncite,\\ncode,\\ndel,\\ndfn,\\nem,\\nimg,\\nins,\\nkbd,\\nq,\\ns,\\nsamp,\\nsmall,\\nstrike,\\nstrong,\\nsub,\\nsup,\\ntt,\\nvar,\\nb,\\nu,\\ni,\\ncenter,\\ndl,\\ndt,\\ndd,\\nol,\\nul,\\nli,\\nfieldset,\\nform,\\nlabel,\\nlegend,\\ntable,\\ncaption,\\ntbody,\\ntfoot,\\nthead,\\ntr,\\nth,\\ntd,\\narticle,\\naside,\\ncanvas,\\ndetails,\\nembed,\\nfigure,\\nfigcaption,\\nfooter,\\nheader,\\nhgroup,\\nmenu,\\nnav,\\noutput,\\nruby,\\nsection,\\nsummary,\\ntime,\\nmark,\\naudio,\\nvideo {\\n margin: 0;\\n padding: 0;\\n border: 0;\\n font-size: 100%;\\n font: inherit;\\n vertical-align: baseline;\\n}\\n/* HTML5 display-role reset for older browsers */\\narticle,\\naside,\\ndetails,\\nfigcaption,\\nfigure,\\nfooter,\\nheader,\\nhgroup,\\nmenu,\\nnav,\\nsection {\\n display: block;\\n}\\nbody {\\n line-height: 1;\\n}\\nol,\\nul {\\n list-style: none;\\n}\\nblockquote,\\nq {\\n quotes: none;\\n}\\nblockquote:before,\\nblockquote:after,\\nq:before,\\nq:after {\\n content: \\\"\\\";\\n content: none;\\n}\\ntable {\\n border-collapse: collapse;\\n border-spacing: 0;\\n}\\n\", \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://javascript-movie-review/./templates/reset.css?./node_modules/css-loader/dist/cjs.js");
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/runtime/api.js":
+/*!*****************************************************!*\
+ !*** ./node_modules/css-loader/dist/runtime/api.js ***!
+ \*****************************************************/
+/***/ ((module) => {
+
+eval("\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};\n\n//# sourceURL=webpack://javascript-movie-review/./node_modules/css-loader/dist/runtime/api.js?");
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/runtime/getUrl.js":
+/*!********************************************************!*\
+ !*** ./node_modules/css-loader/dist/runtime/getUrl.js ***!
+ \********************************************************/
+/***/ ((module) => {
+
+eval("\n\nmodule.exports = function (url, options) {\n if (!options) {\n options = {};\n }\n if (!url) {\n return url;\n }\n url = String(url.__esModule ? url.default : url);\n\n // If url is already wrapped in quotes, remove them\n if (/^['\"].*['\"]$/.test(url)) {\n url = url.slice(1, -1);\n }\n if (options.hash) {\n url += options.hash;\n }\n\n // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n if (/[\"'() \\t\\n]|(%20)/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\"), \"\\\"\");\n }\n return url;\n};\n\n//# sourceURL=webpack://javascript-movie-review/./node_modules/css-loader/dist/runtime/getUrl.js?");
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/runtime/noSourceMaps.js":
+/*!**************************************************************!*\
+ !*** ./node_modules/css-loader/dist/runtime/noSourceMaps.js ***!
+ \**************************************************************/
+/***/ ((module) => {
+
+eval("\n\nmodule.exports = function (i) {\n return i[1];\n};\n\n//# sourceURL=webpack://javascript-movie-review/./node_modules/css-loader/dist/runtime/noSourceMaps.js?");
+
+/***/ }),
+
+/***/ "./templates/common.css":
+/*!******************************!*\
+ !*** ./templates/common.css ***!
+ \******************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ \"./node_modules/style-loader/dist/runtime/styleDomAPI.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ \"./node_modules/style-loader/dist/runtime/insertBySelector.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ \"./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ \"./node_modules/style-loader/dist/runtime/insertStyleElement.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ \"./node_modules/style-loader/dist/runtime/styleTagTransform.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_common_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./common.css */ \"./node_modules/css-loader/dist/cjs.js!./templates/common.css\");\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());\noptions.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());\n\n options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, \"head\");\n \noptions.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());\noptions.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());\n\nvar update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_common_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"], options);\n\n\n\n\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_common_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"] && _node_modules_css_loader_dist_cjs_js_common_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals ? _node_modules_css_loader_dist_cjs_js_common_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals : undefined);\n\n\n//# sourceURL=webpack://javascript-movie-review/./templates/common.css?");
+
+/***/ }),
+
+/***/ "./templates/reset.css":
+/*!*****************************!*\
+ !*** ./templates/reset.css ***!
+ \*****************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ \"./node_modules/style-loader/dist/runtime/styleDomAPI.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ \"./node_modules/style-loader/dist/runtime/insertBySelector.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ \"./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ \"./node_modules/style-loader/dist/runtime/insertStyleElement.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ \"./node_modules/style-loader/dist/runtime/styleTagTransform.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_reset_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./reset.css */ \"./node_modules/css-loader/dist/cjs.js!./templates/reset.css\");\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());\noptions.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());\n\n options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, \"head\");\n \noptions.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());\noptions.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());\n\nvar update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_reset_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"], options);\n\n\n\n\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_reset_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"] && _node_modules_css_loader_dist_cjs_js_reset_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals ? _node_modules_css_loader_dist_cjs_js_reset_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals : undefined);\n\n\n//# sourceURL=webpack://javascript-movie-review/./templates/reset.css?");
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
+/*!****************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
+ \****************************************************************************/
+/***/ ((module) => {
+
+eval("\n\nvar stylesInDOM = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n\n return updater;\n}\n\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n\n stylesInDOM.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};\n\n//# sourceURL=webpack://javascript-movie-review/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js?");
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***!
+ \********************************************************************/
+/***/ ((module) => {
+
+eval("\n\nvar memo = {};\n/* istanbul ignore next */\n\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n}\n/* istanbul ignore next */\n\n\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n}\n\nmodule.exports = insertBySelector;\n\n//# sourceURL=webpack://javascript-movie-review/./node_modules/style-loader/dist/runtime/insertBySelector.js?");
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js":
+/*!**********************************************************************!*\
+ !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***!
+ \**********************************************************************/
+/***/ ((module) => {
+
+eval("\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\n\nmodule.exports = insertStyleElement;\n\n//# sourceURL=webpack://javascript-movie-review/./node_modules/style-loader/dist/runtime/insertStyleElement.js?");
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":
+/*!**********************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***!
+ \**********************************************************************************/
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+eval("\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = true ? __webpack_require__.nc : 0;\n\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\n\nmodule.exports = setAttributesWithoutAttributes;\n\n//# sourceURL=webpack://javascript-movie-review/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js?");
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js":
+/*!***************************************************************!*\
+ !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***!
+ \***************************************************************/
+/***/ ((module) => {
+
+eval("\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n\n var needLayer = typeof obj.layer !== \"undefined\";\n\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n\n css += obj.css;\n\n if (needLayer) {\n css += \"}\";\n }\n\n if (obj.media) {\n css += \"}\";\n }\n\n if (obj.supports) {\n css += \"}\";\n }\n\n var sourceMap = obj.sourceMap;\n\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n options.styleTagTransform(css, styleElement, options.options);\n}\n\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n\n styleElement.parentNode.removeChild(styleElement);\n}\n/* istanbul ignore next */\n\n\nfunction domAPI(options) {\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\n\nmodule.exports = domAPI;\n\n//# sourceURL=webpack://javascript-movie-review/./node_modules/style-loader/dist/runtime/styleDomAPI.js?");
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js":
+/*!*********************************************************************!*\
+ !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***!
+ \*********************************************************************/
+/***/ ((module) => {
+
+eval("\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n\n styleElement.appendChild(document.createTextNode(css));\n }\n}\n\nmodule.exports = styleTagTransform;\n\n//# sourceURL=webpack://javascript-movie-review/./node_modules/style-loader/dist/runtime/styleTagTransform.js?");
+
+/***/ }),
+
+/***/ "./src/app.ts":
+/*!********************!*\
+ !*** ./src/app.ts ***!
+ \********************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"$main\": () => (/* binding */ $main),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _components_Header__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/Header */ \"./src/components/Header.ts\");\n/* harmony import */ var _components_ViewContainer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/ViewContainer */ \"./src/components/ViewContainer.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\nconst $main = document.querySelector(\"main\");\nfunction App() {\n return __awaiter(this, void 0, void 0, function* () {\n const $app = document.querySelector(\"#app\");\n $app === null || $app === void 0 ? void 0 : $app.prepend((0,_components_Header__WEBPACK_IMPORTED_MODULE_0__[\"default\"])());\n yield (0,_components_ViewContainer__WEBPACK_IMPORTED_MODULE_1__[\"default\"])();\n });\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (App);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/app.ts?");
+
+/***/ }),
+
+/***/ "./src/components/ErrorView.ts":
+/*!*************************************!*\
+ !*** ./src/components/ErrorView.ts ***!
+ \*************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _constants_system__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants/system */ \"./src/constants/system.ts\");\n\nconst $main = document.querySelector(\"main\");\nconst renderErrorView = () => {\n const $errorView = document.querySelector(\".error-view\");\n if ($errorView) {\n return;\n }\n const $errorDiv = document.createElement(\"div\");\n $errorDiv.classList.add(\"error-view\");\n $errorDiv.textContent = _constants_system__WEBPACK_IMPORTED_MODULE_0__.ERROR_VIEW_TEXT;\n $main === null || $main === void 0 ? void 0 : $main.appendChild($errorDiv);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (renderErrorView);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/components/ErrorView.ts?");
+
+/***/ }),
+
+/***/ "./src/components/Header.ts":
+/*!**********************************!*\
+ !*** ./src/components/Header.ts ***!
+ \**********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _templates_logo_png__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../templates/logo.png */ \"./templates/logo.png\");\n/* harmony import */ var _constants_system__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants/system */ \"./src/constants/system.ts\");\n/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../model */ \"./src/model/index.ts\");\n/* harmony import */ var _service_handleSkeletonAndAPI__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../service/handleSkeletonAndAPI */ \"./src/service/handleSkeletonAndAPI.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n/* harmony import */ var _ItemView__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ItemView */ \"./src/components/ItemView.ts\");\n/* harmony import */ var _SearchBox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./SearchBox */ \"./src/components/SearchBox.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\nconst handleClickToRefresh = () => __awaiter(void 0, void 0, void 0, function* () {\n const $itemView = document.querySelector(\".item-view\");\n $itemView === null || $itemView === void 0 ? void 0 : $itemView.remove();\n const $searchBox = document.querySelector(\"#search-input\");\n if ($searchBox instanceof HTMLInputElement) {\n $searchBox.value = \"\";\n }\n yield (0,_service_handleSkeletonAndAPI__WEBPACK_IMPORTED_MODULE_3__.handleGetPopularMovieData)(true);\n (0,_ItemView__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(_constants_system__WEBPACK_IMPORTED_MODULE_1__.TITLE_TEXT.POPULAR, _model__WEBPACK_IMPORTED_MODULE_2__.dataStateStore.movieData, \"popular\");\n});\nconst Logo = () => {\n const logoImgAttribute = {\n src: _templates_logo_png__WEBPACK_IMPORTED_MODULE_0__,\n alt: _constants_system__WEBPACK_IMPORTED_MODULE_1__.LOGO_IMG_ALT,\n };\n const $logo = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.createElementWithAttribute)(\"img\", logoImgAttribute);\n $logo.addEventListener(\"click\", handleClickToRefresh);\n return $logo;\n};\nconst Header = () => {\n const $header = document.createElement(\"header\");\n const $h1 = document.createElement(\"h1\");\n const $logo = Logo();\n $h1.appendChild($logo);\n $header.appendChild($h1);\n $header.appendChild((0,_SearchBox__WEBPACK_IMPORTED_MODULE_6__[\"default\"])());\n return $header;\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Header);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/components/Header.ts?");
+
+/***/ }),
+
+/***/ "./src/components/ItemCard.ts":
+/*!************************************!*\
+ !*** ./src/components/ItemCard.ts ***!
+ \************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n/* harmony import */ var _MovieImg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MovieImg */ \"./src/components/MovieImg.ts\");\n/* harmony import */ var _MovieScore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MovieScore */ \"./src/components/MovieScore.ts\");\n/* harmony import */ var _MovieTitle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./MovieTitle */ \"./src/components/MovieTitle.ts\");\n\n\n\n\nconst Card = (movie) => {\n const $card = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createElementWithAttribute)(\"div\", { class: \"item-card\" });\n const $img = (0,_MovieImg__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(movie);\n const $title = (0,_MovieTitle__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(movie);\n const $score = (0,_MovieScore__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(movie);\n $card.appendChild($img);\n $card.appendChild($title);\n $card.appendChild($score);\n return $card;\n};\nconst ItemCard = (movie) => {\n const $li = document.createElement(\"li\");\n const $a = document.createElement(\"a\");\n const $card = Card(movie);\n $a.appendChild($card);\n $li.appendChild($a);\n return $li;\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ItemCard);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/components/ItemCard.ts?");
+
+/***/ }),
+
+/***/ "./src/components/ItemCardList.ts":
+/*!****************************************!*\
+ !*** ./src/components/ItemCardList.ts ***!
+ \****************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _constants_system__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants/system */ \"./src/constants/system.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n/* harmony import */ var _ItemCard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ItemCard */ \"./src/components/ItemCard.ts\");\n\n\n\nconst NoItem = () => {\n const $noItem = document.createElement(\"li\");\n $noItem.textContent = _constants_system__WEBPACK_IMPORTED_MODULE_0__.NO_ITEM_TEXT;\n return $noItem;\n};\nconst ItemCardList = (movieList) => {\n const $ul = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.createElementWithAttribute)(\"ul\", {\n class: \"item-list\",\n });\n if (movieList && movieList.length > 0) {\n movieList.map((movie) => $ul.appendChild((0,_ItemCard__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(movie)));\n }\n else {\n $ul.classList.add(\"no-item-list\");\n $ul.appendChild(NoItem());\n }\n return $ul;\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ItemCardList);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/components/ItemCardList.ts?");
+
+/***/ }),
+
+/***/ "./src/components/ItemView.ts":
+/*!************************************!*\
+ !*** ./src/components/ItemView.ts ***!
+ \************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n/* harmony import */ var _ItemCardList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ItemCardList */ \"./src/components/ItemCardList.ts\");\n/* harmony import */ var _MoreButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MoreButton */ \"./src/components/MoreButton.ts\");\n/* harmony import */ var _Title__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Title */ \"./src/components/Title.ts\");\n\n\n\n\nconst $main = document.querySelector(\"main\");\nconst makeSection = (titleText, movieList) => {\n const $section = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createElementWithAttribute)(\"section\", {\n class: \"item-view\",\n });\n $section.appendChild((0,_Title__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(titleText));\n $section.appendChild((0,_ItemCardList__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(movieList));\n return $section;\n};\nconst renderItemView = (titleText, movieData, listType) => {\n const $section = makeSection(titleText, movieData.movieList);\n $main === null || $main === void 0 ? void 0 : $main.appendChild($section);\n (0,_MoreButton__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(listType, movieData.isShowMoreButton);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (renderItemView);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/components/ItemView.ts?");
+
+/***/ }),
+
+/***/ "./src/components/MoreButton.ts":
+/*!**************************************!*\
+ !*** ./src/components/MoreButton.ts ***!
+ \**************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _constants_system__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants/system */ \"./src/constants/system.ts\");\n/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../model */ \"./src/model/index.ts\");\n/* harmony import */ var _service_handleSkeletonAndAPI__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../service/handleSkeletonAndAPI */ \"./src/service/handleSkeletonAndAPI.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n/* harmony import */ var _ItemCardList__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ItemCardList */ \"./src/components/ItemCardList.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\nconst changeMoreButtonState = (event, isShowMoreButton) => {\n const { target } = event;\n if (target instanceof HTMLButtonElement) {\n target.classList.toggle(\"open\", isShowMoreButton);\n }\n};\nconst addItemsToMovieList = (totalMovieList) => {\n var _a;\n const $itemList = document.querySelector(\".item-view .item-list\");\n if (!$itemList)\n return;\n const $newItemList = (0,_ItemCardList__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(totalMovieList);\n (_a = $itemList.parentElement) === null || _a === void 0 ? void 0 : _a.replaceChild($newItemList, $itemList);\n};\nconst getSearchInputValue = () => {\n const $searchInput = document.querySelector(\"#search-input\");\n if (!($searchInput instanceof HTMLInputElement)) {\n return undefined;\n }\n return $searchInput.value;\n};\nconst getSearchMovieData = () => __awaiter(void 0, void 0, void 0, function* () {\n const title = getSearchInputValue();\n if (!title)\n return;\n yield (0,_service_handleSkeletonAndAPI__WEBPACK_IMPORTED_MODULE_2__.handleGetSearchMovieData)(title, false);\n});\nconst handleMovieDataState = (event) => {\n const previousScrollPosition = window.scrollY;\n const { movieList, isShowMoreButton } = _model__WEBPACK_IMPORTED_MODULE_1__.dataStateStore.movieData;\n addItemsToMovieList(movieList);\n changeMoreButtonState(event, isShowMoreButton);\n window.scrollTo(0, previousScrollPosition);\n};\nconst handleMovieData = (event, listType) => __awaiter(void 0, void 0, void 0, function* () {\n if (listType === \"popular\") {\n yield (0,_service_handleSkeletonAndAPI__WEBPACK_IMPORTED_MODULE_2__.handleGetPopularMovieData)();\n }\n else {\n yield getSearchMovieData();\n }\n handleMovieDataState(event);\n});\nconst handleClickMoreButton = (event, listType) => __awaiter(void 0, void 0, void 0, function* () {\n event.stopPropagation();\n (0,_utils__WEBPACK_IMPORTED_MODULE_3__.debounceFunc)(() => handleMovieData(event, listType));\n});\nconst makeMoreButton = () => {\n const $moreButton = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.createElementWithAttribute)(\"button\", {\n id: \"more-button\",\n class: \"btn primary full-width more-button open\",\n });\n $moreButton.textContent = _constants_system__WEBPACK_IMPORTED_MODULE_0__.MORE_BUTTON_TEXT;\n return $moreButton;\n};\nconst MoreButton = (listType, isShowMoreButton) => {\n var _a;\n if (!isShowMoreButton)\n return;\n const $moreButton = makeMoreButton();\n (_a = document.querySelector(\".item-view\")) === null || _a === void 0 ? void 0 : _a.appendChild($moreButton);\n $moreButton.addEventListener(\"click\", (event) => handleClickMoreButton(event, listType));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MoreButton);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/components/MoreButton.ts?");
+
+/***/ }),
+
+/***/ "./src/components/MovieImg.ts":
+/*!************************************!*\
+ !*** ./src/components/MovieImg.ts ***!
+ \************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _templates_no_image_svg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../templates/no_image.svg */ \"./templates/no_image.svg\");\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../config */ \"./src/config.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n\n\n\nconst POSTER_SIZE = \"w500\";\nfunction SkeletonImg() {\n const $skeletonImg = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.createElementWithAttribute)(\"div\", {\n class: \"item-thumbnail skeleton\",\n });\n return $skeletonImg;\n}\nconst imgSrc = (path) => path === null ? _templates_no_image_svg__WEBPACK_IMPORTED_MODULE_0__ : _config__WEBPACK_IMPORTED_MODULE_1__.IMAGE_URL + POSTER_SIZE + path;\nconst MovieImg = (movie) => {\n const skeletonUI = SkeletonImg();\n const imgElement = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.createElementWithAttribute)(\"img\", {\n class: \"item-thumbnail\",\n src: imgSrc(movie.poster_path),\n loading: \"lazy\",\n alt: movie.title,\n style: \"display: none;\",\n });\n imgElement.addEventListener(\"load\", () => {\n skeletonUI.style.display = \"none\";\n imgElement.style.display = \"block\";\n });\n const container = document.createElement(\"div\");\n container.appendChild(skeletonUI);\n container.appendChild(imgElement);\n return container;\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MovieImg);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/components/MovieImg.ts?");
+
+/***/ }),
+
+/***/ "./src/components/MovieScore.ts":
+/*!**************************************!*\
+ !*** ./src/components/MovieScore.ts ***!
+ \**************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _templates_star_filled_png__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../templates/star_filled.png */ \"./templates/star_filled.png\");\n/* harmony import */ var _constants_system__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants/system */ \"./src/constants/system.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n\n\n\nconst MovieScore = (movie) => {\n const $score = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.createElementWithAttribute)(\"p\", { class: \"item-score\" });\n const $star = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.createElementWithAttribute)(\"img\", {\n src: _templates_star_filled_png__WEBPACK_IMPORTED_MODULE_0__,\n alt: _constants_system__WEBPACK_IMPORTED_MODULE_1__.STAR_IMG_ALT,\n });\n $score.appendChild($star);\n $score.appendChild(document.createTextNode(movie.vote_average.toString()));\n return $score;\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MovieScore);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/components/MovieScore.ts?");
+
+/***/ }),
+
+/***/ "./src/components/MovieTitle.ts":
+/*!**************************************!*\
+ !*** ./src/components/MovieTitle.ts ***!
+ \**************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n\nconst MovieTitle = (movie) => {\n const $title = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createElementWithAttribute)(\"p\", { class: \"item-title\" });\n $title.textContent = movie.title;\n return $title;\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MovieTitle);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/components/MovieTitle.ts?");
+
+/***/ }),
+
+/***/ "./src/components/SearchBox.ts":
+/*!*************************************!*\
+ !*** ./src/components/SearchBox.ts ***!
+ \*************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _constants_system__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants/system */ \"./src/constants/system.ts\");\n/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../model */ \"./src/model/index.ts\");\n/* harmony import */ var _service_handleSkeletonAndAPI__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../service/handleSkeletonAndAPI */ \"./src/service/handleSkeletonAndAPI.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n/* harmony import */ var _ItemView__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ItemView */ \"./src/components/ItemView.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\nconst searchMovie = () => __awaiter(void 0, void 0, void 0, function* () {\n const $searchInput = document.querySelector(\"#search-input\");\n if (!($searchInput instanceof HTMLInputElement))\n return;\n const title = $searchInput.value;\n const $itemView = document.querySelector(\".item-view\");\n $itemView === null || $itemView === void 0 ? void 0 : $itemView.remove();\n yield (0,_service_handleSkeletonAndAPI__WEBPACK_IMPORTED_MODULE_2__.handleGetSearchMovieData)(title, true);\n (0,_ItemView__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(_constants_system__WEBPACK_IMPORTED_MODULE_0__.TITLE_TEXT.SEARCH(title), _model__WEBPACK_IMPORTED_MODULE_1__.dataStateStore.movieData, \"search\");\n});\nconst handleInputKeydown = (event) => {\n const keyCode = event.keyCode || event.which;\n const { target } = event;\n if (!(target instanceof HTMLInputElement))\n return;\n if (keyCode === _constants_system__WEBPACK_IMPORTED_MODULE_0__.ENTER_KEYCODE) {\n (0,_utils__WEBPACK_IMPORTED_MODULE_3__.debounceFunc)(() => searchMovie());\n }\n};\nconst Label = () => {\n const $label = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.createElementWithAttribute)(\"label\", {\n forId: \"search-input\",\n class: \"screen-only\",\n });\n $label.textContent = _constants_system__WEBPACK_IMPORTED_MODULE_0__.SEARCH_LABEL_TEXT;\n return $label;\n};\nconst Input = () => {\n const $input = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.createElementWithAttribute)(\"input\", {\n id: \"search-input\",\n type: \"text\",\n placeholder: \"검색\",\n });\n if ($input instanceof HTMLInputElement) {\n $input.addEventListener(\"keydown\", handleInputKeydown);\n }\n return $input;\n};\nconst InputBox = () => {\n const $div = document.createElement(\"div\");\n $div.appendChild(Label());\n $div.appendChild(Input());\n return $div;\n};\nconst Button = () => {\n const $button = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.createElementWithAttribute)(\"button\", {\n class: \"search-button\",\n });\n $button.textContent = _constants_system__WEBPACK_IMPORTED_MODULE_0__.SEARCH_BUTTON_TEXT;\n $button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n (0,_utils__WEBPACK_IMPORTED_MODULE_3__.debounceFunc)(() => searchMovie());\n });\n return $button;\n};\nconst SearchBox = () => {\n const $searchBox = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.createElementWithAttribute)(\"div\", {\n class: \"search-box\",\n });\n $searchBox.appendChild(InputBox());\n $searchBox.appendChild(Button());\n return $searchBox;\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SearchBox);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/components/SearchBox.ts?");
+
+/***/ }),
+
+/***/ "./src/components/SkeletonList.ts":
+/*!****************************************!*\
+ !*** ./src/components/SkeletonList.ts ***!
+ \****************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n\nconst SkeletonImg = ($card) => {\n $card.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_0__.createElementWithAttribute)(\"div\", {\n class: \"item-thumbnail skeleton\",\n }));\n};\nconst SkeletonTitle = ($card) => {\n $card.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_0__.createElementWithAttribute)(\"div\", {\n class: \"item-title skeleton\",\n }));\n};\nconst SkeletonScore = ($card) => {\n $card.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_0__.createElementWithAttribute)(\"div\", {\n class: \"item-score skeleton\",\n }));\n};\nconst SkeletonCard = () => {\n const $card = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createElementWithAttribute)(\"div\", { class: \"item-card\" });\n SkeletonImg($card);\n SkeletonTitle($card);\n SkeletonScore($card);\n return $card;\n};\nconst Skeleton = () => {\n const $skeleton = document.createElement(\"li\");\n const $card = SkeletonCard();\n $skeleton.appendChild($card);\n return $skeleton;\n};\nconst SkeletonListTitle = () => {\n const $title = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createElementWithAttribute)(\"h2\", { class: \"list-title\" });\n $title.textContent = \"지금 인기 있는 영화\";\n return $title;\n};\nconst SkeletonList = () => {\n const $ul = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createElementWithAttribute)(\"ul\", {\n class: \"item-list skeleton-list\",\n });\n Array.from({ length: 12 }).forEach(() => {\n $ul.appendChild(Skeleton());\n });\n return $ul;\n};\nconst renderSkeletonView = () => {\n const $main = document.querySelector(\"main\");\n const $section = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createElementWithAttribute)(\"section\", {\n class: \"skeleton-view\",\n });\n $section.appendChild(SkeletonListTitle());\n $section.appendChild(SkeletonList());\n $main === null || $main === void 0 ? void 0 : $main.appendChild($section);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (renderSkeletonView);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/components/SkeletonList.ts?");
+
+/***/ }),
+
+/***/ "./src/components/Title.ts":
+/*!*********************************!*\
+ !*** ./src/components/Title.ts ***!
+ \*********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\n\nconst Title = (text) => {\n const $title = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createElementWithAttribute)(\"h2\", { class: \"list-title\" });\n $title.textContent = text;\n return $title;\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Title);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/components/Title.ts?");
+
+/***/ }),
+
+/***/ "./src/components/ViewContainer.ts":
+/*!*****************************************!*\
+ !*** ./src/components/ViewContainer.ts ***!
+ \*****************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../model */ \"./src/model/index.ts\");\n/* harmony import */ var _service_handleSkeletonAndAPI__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../service/handleSkeletonAndAPI */ \"./src/service/handleSkeletonAndAPI.ts\");\n/* harmony import */ var _ItemView__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ItemView */ \"./src/components/ItemView.ts\");\n/* harmony import */ var _SkeletonList__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./SkeletonList */ \"./src/components/SkeletonList.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\nconst ViewContainer = () => __awaiter(void 0, void 0, void 0, function* () {\n (0,_SkeletonList__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n yield (0,_service_handleSkeletonAndAPI__WEBPACK_IMPORTED_MODULE_1__.handleGetPopularMovieData)();\n (0,_ItemView__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(\"지금 인기 있는 영화\", _model__WEBPACK_IMPORTED_MODULE_0__.dataStateStore.movieData, \"popular\");\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ViewContainer);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/components/ViewContainer.ts?");
+
+/***/ }),
+
+/***/ "./src/config.ts":
+/*!***********************!*\
+ !*** ./src/config.ts ***!
+ \***********************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ACCESS_TOKEN\": () => (/* binding */ ACCESS_TOKEN),\n/* harmony export */ \"API_KEY\": () => (/* binding */ API_KEY),\n/* harmony export */ \"BASE_URL\": () => (/* binding */ BASE_URL),\n/* harmony export */ \"IMAGE_URL\": () => (/* binding */ IMAGE_URL),\n/* harmony export */ \"endpoint\": () => (/* binding */ endpoint),\n/* harmony export */ \"options\": () => (/* binding */ options)\n/* harmony export */ });\nconst API_KEY = \"aa74e05b52531d082b5fbdff12e609ef\";\nconst ACCESS_TOKEN = \"eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJhYTc0ZTA1YjUyNTMxZDA4MmI1ZmJkZmYxMmU2MDllZiIsInN1YiI6IjY1ZjcwODY3NTkwN2RlMDE3Y2U2ZTdjMCIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.eNcDSIvNHHZJPmbhf3G9QXiqQAsmlaZBL0_xSZWWNFk\";\nconst BASE_URL = \"https://api.themoviedb.org/3\";\nconst IMAGE_URL = \"https://image.tmdb.org/t/p/\";\nconst options = {\n method: \"GET\",\n headers: {\n accept: \"application/json\",\n Authorization: `Bearer ${ACCESS_TOKEN}`,\n },\n};\nconst endpoint = {\n popularMovie: (page) => `movie/popular?language=ko&page=${page}`,\n searchMovie: (title, page) => `search/movie?query=${title}}&include_adult=false&language=ko&page=${page}`,\n};\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/config.ts?");
+
+/***/ }),
+
+/***/ "./src/constants/system.ts":
+/*!*********************************!*\
+ !*** ./src/constants/system.ts ***!
+ \*********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ENTER_KEYCODE\": () => (/* binding */ ENTER_KEYCODE),\n/* harmony export */ \"ERROR_VIEW_TEXT\": () => (/* binding */ ERROR_VIEW_TEXT),\n/* harmony export */ \"LOGO_IMG_ALT\": () => (/* binding */ LOGO_IMG_ALT),\n/* harmony export */ \"MAX_PAGE\": () => (/* binding */ MAX_PAGE),\n/* harmony export */ \"MORE_BUTTON_TEXT\": () => (/* binding */ MORE_BUTTON_TEXT),\n/* harmony export */ \"NO_ITEM_TEXT\": () => (/* binding */ NO_ITEM_TEXT),\n/* harmony export */ \"SEARCH_BUTTON_TEXT\": () => (/* binding */ SEARCH_BUTTON_TEXT),\n/* harmony export */ \"SEARCH_LABEL_TEXT\": () => (/* binding */ SEARCH_LABEL_TEXT),\n/* harmony export */ \"STAR_IMG_ALT\": () => (/* binding */ STAR_IMG_ALT),\n/* harmony export */ \"TITLE_TEXT\": () => (/* binding */ TITLE_TEXT)\n/* harmony export */ });\nconst TITLE_TEXT = {\n POPULAR: \"지금 인기 있는 영화\",\n SEARCH: (title) => `\"${title}\" 검색 결과`,\n};\nconst NO_ITEM_TEXT = \"검색 결과가 없습니다.\";\nconst ERROR_VIEW_TEXT = \"서버와의 연결이 불안정합니다. 다시 시도해주세요.\";\nconst MORE_BUTTON_TEXT = \"더 보기\";\nconst SEARCH_BUTTON_TEXT = \"검색\";\nconst SEARCH_LABEL_TEXT = \"영화 검색\";\nconst LOGO_IMG_ALT = \"MovieList 로고\";\nconst STAR_IMG_ALT = \"별점\";\nconst MAX_PAGE = 500;\nconst ENTER_KEYCODE = 13;\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/constants/system.ts?");
+
+/***/ }),
+
+/***/ "./src/index.js":
+/*!**********************!*\
+ !*** ./src/index.js ***!
+ \**********************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _templates_reset_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../templates/reset.css */ \"./templates/reset.css\");\n/* harmony import */ var _templates_common_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../templates/common.css */ \"./templates/common.css\");\n/* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./app */ \"./src/app.ts\");\n\n\n\n(0,_app__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/index.js?");
+
+/***/ }),
+
+/***/ "./src/model/APIClient.ts":
+/*!********************************!*\
+ !*** ./src/model/APIClient.ts ***!
+ \********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _components_ErrorView__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/ErrorView */ \"./src/components/ErrorView.ts\");\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../config */ \"./src/config.ts\");\n/* harmony import */ var _constants_system__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constants/system */ \"./src/constants/system.ts\");\n/* harmony import */ var _DataStateStore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./DataStateStore */ \"./src/model/DataStateStore.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __classPrivateFieldGet = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (undefined && undefined.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _APIClient_currentPage, _APIClient_isShowMoreButton, _APIClient_updateCurrentPage;\n\n\n\n\nclass APIClient {\n constructor() {\n _APIClient_currentPage.set(this, 0);\n _APIClient_isShowMoreButton.set(this, (page, totalPage) => page < totalPage && page <= _constants_system__WEBPACK_IMPORTED_MODULE_2__.MAX_PAGE);\n _APIClient_updateCurrentPage.set(this, (isResetCurrentPage) => {\n if (isResetCurrentPage)\n __classPrivateFieldSet(this, _APIClient_currentPage, 1, \"f\");\n else\n __classPrivateFieldSet(this, _APIClient_currentPage, __classPrivateFieldGet(this, _APIClient_currentPage, \"f\") + 1, \"f\");\n });\n }\n getPopularMovieData(isResetCurrentPage) {\n return __awaiter(this, void 0, void 0, function* () {\n __classPrivateFieldGet(this, _APIClient_updateCurrentPage, \"f\").call(this, isResetCurrentPage);\n const data = yield this.fetchPopularMovie();\n _DataStateStore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getTotalMovieData({\n movieList: data.results,\n isShowMoreButton: __classPrivateFieldGet(this, _APIClient_isShowMoreButton, \"f\").call(this, data.page, data.total_pages),\n }, isResetCurrentPage);\n });\n }\n fetchPopularMovie() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const response = yield fetch(`${_config__WEBPACK_IMPORTED_MODULE_1__.BASE_URL}/${_config__WEBPACK_IMPORTED_MODULE_1__.endpoint.popularMovie(__classPrivateFieldGet(this, _APIClient_currentPage, \"f\"))}`, _config__WEBPACK_IMPORTED_MODULE_1__.options);\n return yield response.json();\n }\n catch (error) {\n (0,_components_ErrorView__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n return error;\n }\n });\n }\n getSearchMovieData(isResetCurrentPage, title) {\n return __awaiter(this, void 0, void 0, function* () {\n __classPrivateFieldGet(this, _APIClient_updateCurrentPage, \"f\").call(this, isResetCurrentPage);\n const data = yield this.fetchSearchMovie(title);\n _DataStateStore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getTotalMovieData({\n movieList: data.results,\n isShowMoreButton: __classPrivateFieldGet(this, _APIClient_isShowMoreButton, \"f\").call(this, data.page, data.total_pages),\n }, isResetCurrentPage);\n });\n }\n fetchSearchMovie(title) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const response = yield fetch(`${_config__WEBPACK_IMPORTED_MODULE_1__.BASE_URL}/${_config__WEBPACK_IMPORTED_MODULE_1__.endpoint.searchMovie(title, __classPrivateFieldGet(this, _APIClient_currentPage, \"f\"))}`, _config__WEBPACK_IMPORTED_MODULE_1__.options);\n return yield response.json();\n }\n catch (error) {\n (0,_components_ErrorView__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n return error;\n }\n });\n }\n}\n_APIClient_currentPage = new WeakMap(), _APIClient_isShowMoreButton = new WeakMap(), _APIClient_updateCurrentPage = new WeakMap();\nconst apiClient = new APIClient();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (apiClient);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/model/APIClient.ts?");
+
+/***/ }),
+
+/***/ "./src/model/DataStateStore.ts":
+/*!*************************************!*\
+ !*** ./src/model/DataStateStore.ts ***!
+ \*************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar __classPrivateFieldGet = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (undefined && undefined.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _DataStateStore_movieList, _DataStateStore_isShowMorButton;\nclass DataStateStore {\n constructor() {\n _DataStateStore_movieList.set(this, void 0);\n _DataStateStore_isShowMorButton.set(this, true);\n }\n getTotalMovieData({ movieList, isShowMoreButton }, resetMovieList) {\n if (!__classPrivateFieldGet(this, _DataStateStore_movieList, \"f\") || resetMovieList)\n __classPrivateFieldSet(this, _DataStateStore_movieList, movieList, \"f\");\n else\n __classPrivateFieldSet(this, _DataStateStore_movieList, __classPrivateFieldGet(this, _DataStateStore_movieList, \"f\").concat(movieList), \"f\");\n __classPrivateFieldSet(this, _DataStateStore_isShowMorButton, isShowMoreButton, \"f\");\n }\n get movieData() {\n return {\n movieList: JSON.parse(JSON.stringify(__classPrivateFieldGet(this, _DataStateStore_movieList, \"f\"))),\n isShowMoreButton: __classPrivateFieldGet(this, _DataStateStore_isShowMorButton, \"f\"),\n };\n }\n}\n_DataStateStore_movieList = new WeakMap(), _DataStateStore_isShowMorButton = new WeakMap();\nconst dataStateStore = new DataStateStore();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (dataStateStore);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/model/DataStateStore.ts?");
+
+/***/ }),
+
+/***/ "./src/model/index.ts":
+/*!****************************!*\
+ !*** ./src/model/index.ts ***!
+ \****************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"apiClient\": () => (/* reexport safe */ _APIClient__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"dataStateStore\": () => (/* reexport safe */ _DataStateStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _APIClient__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./APIClient */ \"./src/model/APIClient.ts\");\n/* harmony import */ var _DataStateStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./DataStateStore */ \"./src/model/DataStateStore.ts\");\n\n\n\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/model/index.ts?");
+
+/***/ }),
+
+/***/ "./src/service/handleSkeletonAndAPI.ts":
+/*!*********************************************!*\
+ !*** ./src/service/handleSkeletonAndAPI.ts ***!
+ \*********************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"handleGetPopularMovieData\": () => (/* binding */ handleGetPopularMovieData),\n/* harmony export */ \"handleGetSearchMovieData\": () => (/* binding */ handleGetSearchMovieData)\n/* harmony export */ });\n/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../model */ \"./src/model/index.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nconst removeSkeletonView = ($skeletonView) => {\n setTimeout(() => {\n $skeletonView === null || $skeletonView === void 0 ? void 0 : $skeletonView.classList.remove(\"on\");\n }, 500);\n};\nconst handleSkeletonAndAPI = (apiFun) => __awaiter(void 0, void 0, void 0, function* () {\n const $skeletonView = document.querySelector(\".skeleton-view\");\n $skeletonView === null || $skeletonView === void 0 ? void 0 : $skeletonView.classList.add(\"on\");\n yield apiFun();\n removeSkeletonView($skeletonView);\n});\nconst handleGetPopularMovieData = (isResetCurrentPage = false) => __awaiter(void 0, void 0, void 0, function* () {\n yield handleSkeletonAndAPI(() => _model__WEBPACK_IMPORTED_MODULE_0__.apiClient.getPopularMovieData(isResetCurrentPage));\n});\nconst handleGetSearchMovieData = (title, isResetCurrentPage) => __awaiter(void 0, void 0, void 0, function* () {\n yield handleSkeletonAndAPI(() => _model__WEBPACK_IMPORTED_MODULE_0__.apiClient.getSearchMovieData(isResetCurrentPage, title));\n});\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/service/handleSkeletonAndAPI.ts?");
+
+/***/ }),
+
+/***/ "./src/utils/createElementWithAttribute.ts":
+/*!*************************************************!*\
+ !*** ./src/utils/createElementWithAttribute.ts ***!
+ \*************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nconst createElementWithAttribute = (elementTag, attribute) => {\n const $element = document.createElement(elementTag);\n Object.entries(attribute).forEach(([key, value]) => {\n $element.setAttribute(key, value);\n });\n return $element;\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createElementWithAttribute);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/utils/createElementWithAttribute.ts?");
+
+/***/ }),
+
+/***/ "./src/utils/debounceFunc.ts":
+/*!***********************************!*\
+ !*** ./src/utils/debounceFunc.ts ***!
+ \***********************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nlet debounce;\nconst debounceFunc = (func) => {\n if (debounce) {\n clearTimeout(debounce);\n }\n debounce = setTimeout(func, 1000);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (debounceFunc);\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/utils/debounceFunc.ts?");
+
+/***/ }),
+
+/***/ "./src/utils/index.ts":
+/*!****************************!*\
+ !*** ./src/utils/index.ts ***!
+ \****************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createElementWithAttribute\": () => (/* reexport safe */ _createElementWithAttribute__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ \"debounceFunc\": () => (/* reexport safe */ _debounceFunc__WEBPACK_IMPORTED_MODULE_1__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _createElementWithAttribute__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createElementWithAttribute */ \"./src/utils/createElementWithAttribute.ts\");\n/* harmony import */ var _debounceFunc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./debounceFunc */ \"./src/utils/debounceFunc.ts\");\n\n\n\n\n\n//# sourceURL=webpack://javascript-movie-review/./src/utils/index.ts?");
+
+/***/ }),
+
+/***/ "./templates/logo.png":
+/*!****************************!*\
+ !*** ./templates/logo.png ***!
+ \****************************/
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+eval("module.exports = __webpack_require__.p + \"2e162b4fefb34cd7ed8d.png\";\n\n//# sourceURL=webpack://javascript-movie-review/./templates/logo.png?");
+
+/***/ }),
+
+/***/ "./templates/no_image.svg":
+/*!********************************!*\
+ !*** ./templates/no_image.svg ***!
+ \********************************/
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+eval("module.exports = __webpack_require__.p + \"3b06285860c611dd0f6c.svg\";\n\n//# sourceURL=webpack://javascript-movie-review/./templates/no_image.svg?");
+
+/***/ }),
+
+/***/ "./templates/search_button.png":
+/*!*************************************!*\
+ !*** ./templates/search_button.png ***!
+ \*************************************/
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+eval("module.exports = __webpack_require__.p + \"f1bd4269f4446ceae306.png\";\n\n//# sourceURL=webpack://javascript-movie-review/./templates/search_button.png?");
+
+/***/ }),
+
+/***/ "./templates/star_filled.png":
+/*!***********************************!*\
+ !*** ./templates/star_filled.png ***!
+ \***********************************/
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+eval("module.exports = __webpack_require__.p + \"6328741810b732410eec.png\";\n\n//# sourceURL=webpack://javascript-movie-review/./templates/star_filled.png?");
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ id: moduleId,
+/******/ // no module.loaded needed
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = __webpack_modules__;
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/compat get default export */
+/******/ (() => {
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = (module) => {
+/******/ var getter = module && module.__esModule ?
+/******/ () => (module['default']) :
+/******/ () => (module);
+/******/ __webpack_require__.d(getter, { a: getter });
+/******/ return getter;
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/define property getters */
+/******/ (() => {
+/******/ // define getter functions for harmony exports
+/******/ __webpack_require__.d = (exports, definition) => {
+/******/ for(var key in definition) {
+/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ }
+/******/ }
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/global */
+/******/ (() => {
+/******/ __webpack_require__.g = (function() {
+/******/ if (typeof globalThis === 'object') return globalThis;
+/******/ try {
+/******/ return this || new Function('return this')();
+/******/ } catch (e) {
+/******/ if (typeof window === 'object') return window;
+/******/ }
+/******/ })();
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/******/ /* webpack/runtime/make namespace object */
+/******/ (() => {
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = (exports) => {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/publicPath */
+/******/ (() => {
+/******/ var scriptUrl;
+/******/ if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + "";
+/******/ var document = __webpack_require__.g.document;
+/******/ if (!scriptUrl && document) {
+/******/ if (document.currentScript)
+/******/ scriptUrl = document.currentScript.src
+/******/ if (!scriptUrl) {
+/******/ var scripts = document.getElementsByTagName("script");
+/******/ if(scripts.length) scriptUrl = scripts[scripts.length - 1].src
+/******/ }
+/******/ }
+/******/ // When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration
+/******/ // or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.
+/******/ if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser");
+/******/ scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/");
+/******/ __webpack_require__.p = scriptUrl;
+/******/ })();
+/******/
+/******/ /* webpack/runtime/jsonp chunk loading */
+/******/ (() => {
+/******/ __webpack_require__.b = document.baseURI || self.location.href;
+/******/
+/******/ // object to store loaded and loading chunks
+/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
+/******/ var installedChunks = {
+/******/ "main": 0
+/******/ };
+/******/
+/******/ // no chunk on demand loading
+/******/
+/******/ // no prefetching
+/******/
+/******/ // no preloaded
+/******/
+/******/ // no HMR
+/******/
+/******/ // no HMR manifest
+/******/
+/******/ // no on chunks loaded
+/******/
+/******/ // no jsonp function
+/******/ })();
+/******/
+/******/ /* webpack/runtime/nonce */
+/******/ (() => {
+/******/ __webpack_require__.nc = undefined;
+/******/ })();
+/******/
+/************************************************************************/
+/******/
+/******/ // startup
+/******/ // Load entry module and return exports
+/******/ // This entry module can't be inlined because the eval devtool is used.
+/******/ var __webpack_exports__ = __webpack_require__("./src/index.js");
+/******/
+/******/ })()
+;
\ No newline at end of file
diff --git a/dist/f1bd4269f4446ceae306.png b/dist/f1bd4269f4446ceae306.png
new file mode 100644
index 000000000..65c9ab48c
Binary files /dev/null and b/dist/f1bd4269f4446ceae306.png differ
diff --git a/dist/index.html b/dist/index.html
new file mode 100644
index 000000000..565cba395
--- /dev/null
+++ b/dist/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ Document
+
+
+
+
+
+
+
diff --git a/index.html b/index.html
index 5efa25cfa..1b16aa730 100644
--- a/index.html
+++ b/index.html
@@ -1,4 +1,4 @@
-
+
@@ -7,6 +7,8 @@
Document
- 영화 리뷰 미션을 진행하세요
+
+
+
diff --git a/package-lock.json b/package-lock.json
index eb8d5c220..5b37e48de 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,14 +13,22 @@
"@babel/preset-env": "^7.20.2",
"@babel/preset-typescript": "^7.18.6",
"@types/jest": "^29.4.0",
+ "@typescript-eslint/eslint-plugin": "^7.3.1",
"babel-jest": "^29.3.1",
"css-loader": "^6.7.3",
"cypress": "^12.3.0",
"dotenv-webpack": "^8.0.1",
"eslint": "^8.35.0",
+ "eslint-config-airbnb": "^19.0.4",
+ "eslint-config-prettier": "^9.0.0",
+ "eslint-import-resolver-typescript": "^3.6.1",
+ "eslint-plugin-import": "^2.29.1",
+ "eslint-plugin-jest": "^27.6.0",
+ "eslint-plugin-jsx-a11y": "^6.8.0",
+ "eslint-plugin-prettier": "^5.0.1",
"html-webpack-plugin": "^5.5.0",
"jest": "^29.3.1",
- "prettier": "^2.8.4",
+ "prettier": "^3.0.0",
"style-loader": "^3.3.1",
"ts-loader": "^9.4.2",
"typescript": "^4.9.4",
@@ -29,6 +37,15 @@
"webpack-dev-server": "^4.11.1"
}
},
+ "node_modules/@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/@ampproject/remapping": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
@@ -1830,12 +1847,12 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz",
- "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==",
+ "version": "7.24.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz",
+ "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==",
"dev": true,
"dependencies": {
- "regenerator-runtime": "^0.13.11"
+ "regenerator-runtime": "^0.14.0"
},
"engines": {
"node": ">=6.9.0"
@@ -2007,15 +2024,39 @@
"node": ">=10.0.0"
}
},
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
"node_modules/@eslint/eslintrc": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.0.tgz",
- "integrity": "sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.4.0",
+ "espree": "^9.6.0",
"globals": "^13.19.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
@@ -2054,9 +2095,9 @@
}
},
"node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.20.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
- "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -2099,22 +2140,22 @@
}
},
"node_modules/@eslint/js": {
- "version": "8.35.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz",
- "integrity": "sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+ "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.11.8",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
- "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
"dev": true,
"dependencies": {
- "@humanwhocodes/object-schema": "^1.2.1",
- "debug": "^4.1.1",
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
"minimatch": "^3.0.5"
},
"engines": {
@@ -2158,9 +2199,9 @@
}
},
"node_modules/@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
- "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
"dev": true
},
"node_modules/@istanbuljs/load-nyc-config": {
@@ -2580,6 +2621,18 @@
"node": ">= 8"
}
},
+ "node_modules/@pkgr/core": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
+ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
"node_modules/@sinclair/typebox": {
"version": "0.25.24",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz",
@@ -2791,9 +2844,15 @@
}
},
"node_modules/@types/json-schema": {
- "version": "7.0.11",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
- "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true
+ },
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
"dev": true
},
"node_modules/@types/mime": {
@@ -2832,6 +2891,12 @@
"integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",
"dev": true
},
+ "node_modules/@types/semver": {
+ "version": "7.5.8",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
+ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
+ "dev": true
+ },
"node_modules/@types/serve-index": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz",
@@ -2912,1089 +2977,2375 @@
"@types/node": "*"
}
},
- "node_modules/@webassemblyjs/ast": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
- "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.3.1.tgz",
+ "integrity": "sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==",
"dev": true,
"dependencies": {
- "@webassemblyjs/helper-numbers": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
+ "@eslint-community/regexpp": "^4.5.1",
+ "@typescript-eslint/scope-manager": "7.3.1",
+ "@typescript-eslint/type-utils": "7.3.1",
+ "@typescript-eslint/utils": "7.3.1",
+ "@typescript-eslint/visitor-keys": "7.3.1",
+ "debug": "^4.3.4",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.4",
+ "natural-compare": "^1.4.0",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^7.0.0",
+ "eslint": "^8.56.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
- "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
- "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
- "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-numbers": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
- "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz",
+ "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==",
"dev": true,
"dependencies": {
- "@webassemblyjs/floating-point-hex-parser": "1.11.1",
- "@webassemblyjs/helper-api-error": "1.11.1",
- "@xtuc/long": "4.2.2"
+ "@typescript-eslint/types": "7.3.1",
+ "@typescript-eslint/visitor-keys": "7.3.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
- "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
- "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz",
+ "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==",
"dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1"
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@webassemblyjs/ieee754": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
- "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz",
+ "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==",
"dev": true,
"dependencies": {
- "@xtuc/ieee754": "^1.2.0"
+ "@typescript-eslint/types": "7.3.1",
+ "@typescript-eslint/visitor-keys": "7.3.1",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "9.0.3",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/@webassemblyjs/leb128": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
- "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz",
+ "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==",
"dev": true,
"dependencies": {
- "@xtuc/long": "4.2.2"
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "7.3.1",
+ "@typescript-eslint/types": "7.3.1",
+ "@typescript-eslint/typescript-estree": "7.3.1",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.56.0"
}
},
- "node_modules/@webassemblyjs/utf8": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
- "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
- "dev": true
- },
- "node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
- "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz",
+ "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/helper-wasm-section": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1",
- "@webassemblyjs/wasm-opt": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1",
- "@webassemblyjs/wast-printer": "1.11.1"
+ "@typescript-eslint/types": "7.3.1",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
- "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
+ "node_modules/@typescript-eslint/eslint-plugin/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": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/ieee754": "1.11.1",
- "@webassemblyjs/leb128": "1.11.1",
- "@webassemblyjs/utf8": "1.11.1"
+ "balanced-match": "^1.0.0"
}
},
- "node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
- "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1"
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
- "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-api-error": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/ieee754": "1.11.1",
- "@webassemblyjs/leb128": "1.11.1",
- "@webassemblyjs/utf8": "1.11.1"
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@webassemblyjs/wast-printer": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
- "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.3.1.tgz",
+ "integrity": "sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@webassemblyjs/ast": "1.11.1",
- "@xtuc/long": "4.2.2"
+ "@typescript-eslint/scope-manager": "7.3.1",
+ "@typescript-eslint/types": "7.3.1",
+ "@typescript-eslint/typescript-estree": "7.3.1",
+ "@typescript-eslint/visitor-keys": "7.3.1",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.56.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/@webpack-cli/configtest": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.0.1.tgz",
- "integrity": "sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A==",
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz",
+ "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==",
"dev": true,
+ "peer": true,
+ "dependencies": {
+ "@typescript-eslint/types": "7.3.1",
+ "@typescript-eslint/visitor-keys": "7.3.1"
+ },
"engines": {
- "node": ">=14.15.0"
+ "node": "^18.18.0 || >=20.0.0"
},
- "peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@webpack-cli/info": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.1.tgz",
- "integrity": "sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA==",
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz",
+ "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==",
"dev": true,
+ "peer": true,
"engines": {
- "node": ">=14.15.0"
+ "node": "^18.18.0 || >=20.0.0"
},
- "peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@webpack-cli/serve": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.1.tgz",
- "integrity": "sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw==",
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz",
+ "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==",
"dev": true,
+ "peer": true,
+ "dependencies": {
+ "@typescript-eslint/types": "7.3.1",
+ "@typescript-eslint/visitor-keys": "7.3.1",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "9.0.3",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
"engines": {
- "node": ">=14.15.0"
+ "node": "^18.18.0 || >=20.0.0"
},
- "peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
},
"peerDependenciesMeta": {
- "webpack-dev-server": {
+ "typescript": {
"optional": true
}
}
},
- "node_modules/@xtuc/ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "dev": true
- },
- "node_modules/@xtuc/long": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "dev": true
- },
- "node_modules/accepts": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz",
+ "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==",
"dev": true,
+ "peer": true,
"dependencies": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
+ "@typescript-eslint/types": "7.3.1",
+ "eslint-visitor-keys": "^3.4.1"
},
"engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/acorn": {
- "version": "8.8.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
- "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
+ "node": "^18.18.0 || >=20.0.0"
},
- "engines": {
- "node": ">=0.4.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/acorn-import-assertions": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
- "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
+ "node_modules/@typescript-eslint/parser/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,
- "peerDependencies": {
- "acorn": "^8"
+ "peer": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
}
},
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "node_modules/@typescript-eslint/parser/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ "peer": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "node_modules/@typescript-eslint/parser/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
"dev": true,
+ "peer": true,
"dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
+ "brace-expansion": "^2.0.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "node_modules/@typescript-eslint/parser/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
+ "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
"dev": true,
"dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/ajv-formats": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
- "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.3.1.tgz",
+ "integrity": "sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==",
"dev": true,
"dependencies": {
- "ajv": "^8.0.0"
+ "@typescript-eslint/typescript-estree": "7.3.1",
+ "@typescript-eslint/utils": "7.3.1",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "ajv": "^8.0.0"
+ "eslint": "^8.56.0"
},
"peerDependenciesMeta": {
- "ajv": {
+ "typescript": {
"optional": true
}
}
},
- "node_modules/ajv-formats/node_modules/ajv": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
- "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz",
+ "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==",
"dev": true,
"dependencies": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
+ "@typescript-eslint/types": "7.3.1",
+ "@typescript-eslint/visitor-keys": "7.3.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ajv-formats/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz",
+ "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==",
"dev": true,
"engines": {
- "node": ">=6"
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz",
+ "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==",
"dev": true,
"dependencies": {
- "type-fest": "^0.21.3"
+ "@typescript-eslint/types": "7.3.1",
+ "@typescript-eslint/visitor-keys": "7.3.1",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "9.0.3",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
},
"engines": {
- "node": ">=8"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-html-community": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
- "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
- "dev": true,
- "engines": [
- "node >= 0.8.0"
- ],
- "bin": {
- "ansi-html": "bin/ansi-html"
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "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==",
+ "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz",
+ "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==",
"dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "7.3.1",
+ "@typescript-eslint/types": "7.3.1",
+ "@typescript-eslint/typescript-estree": "7.3.1",
+ "semver": "^7.5.4"
+ },
"engines": {
- "node": ">=8"
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.56.0"
}
},
- "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==",
+ "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz",
+ "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==",
"dev": true,
"dependencies": {
- "color-convert": "^2.0.1"
+ "@typescript-eslint/types": "7.3.1",
+ "eslint-visitor-keys": "^3.4.1"
},
"engines": {
- "node": ">=8"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "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==",
+ "node_modules/@typescript-eslint/type-utils/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": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
+ "balanced-match": "^1.0.0"
}
},
- "node_modules/arch": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
- "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+ "node_modules/@typescript-eslint/type-utils/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"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": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
- ]
+ }
},
- "node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
"dev": true,
"dependencies": {
- "sprintf-js": "~1.0.2"
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/array-flatten": {
+ "node_modules/@typescript-eslint/type-utils/node_modules/ms": {
"version": "2.1.2",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
- "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "node_modules/asn1": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
- "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
- "dev": true,
- "dependencies": {
- "safer-buffer": "~2.1.0"
- }
- },
- "node_modules/assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "node_modules/@typescript-eslint/types": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
+ "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
"dev": true,
"engines": {
- "node": ">=0.8"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
+ "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
"dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/async": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
- "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
- "dev": true
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true
- },
- "node_modules/at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "dev": true,
- "engines": {
- "node": ">= 4.0.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
"engines": {
- "node": "*"
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/aws4": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
- "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==",
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "node_modules/babel-jest": {
- "version": "29.3.1",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.3.1.tgz",
- "integrity": "sha512-aard+xnMoxgjwV70t0L6wkW/3HQQtV+O0PEimxKgzNqCJnbYmroPojdP2tqKSOAt8QAKV/uSZU8851M7B5+fcA==",
+ "node_modules/@typescript-eslint/utils": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
+ "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
"dev": true,
"dependencies": {
- "@jest/transform": "^29.3.1",
- "@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^29.2.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "slash": "^3.0.0"
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@babel/core": "^7.8.0"
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
- "node_modules/babel-plugin-istanbul": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
- "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
+ "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^5.0.4",
- "test-exclude": "^6.0.0"
+ "@typescript-eslint/types": "5.62.0",
+ "eslint-visitor-keys": "^3.3.0"
},
"engines": {
- "node": ">=8"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/babel-plugin-jest-hoist": {
- "version": "29.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz",
- "integrity": "sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA==",
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/ast": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
+ "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.1.14",
- "@types/babel__traverse": "^7.0.6"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "@webassemblyjs/helper-numbers": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
}
},
- "node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz",
- "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==",
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
+ "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
+ "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
+ "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-numbers": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
+ "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.17.7",
- "@babel/helper-define-polyfill-provider": "^0.3.3",
- "semver": "^6.1.1"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@webassemblyjs/floating-point-hex-parser": "1.11.1",
+ "@webassemblyjs/helper-api-error": "1.11.1",
+ "@xtuc/long": "4.2.2"
}
},
- "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
+ "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
+ "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
"dev": true,
- "bin": {
- "semver": "bin/semver.js"
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-buffer": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/wasm-gen": "1.11.1"
}
},
- "node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz",
- "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==",
+ "node_modules/@webassemblyjs/ieee754": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
+ "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
"dev": true,
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.3.3",
- "core-js-compat": "^3.25.1"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@xtuc/ieee754": "^1.2.0"
}
},
- "node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz",
- "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==",
+ "node_modules/@webassemblyjs/leb128": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
+ "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
"dev": true,
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.3.3"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@xtuc/long": "4.2.2"
}
},
- "node_modules/babel-preset-current-node-syntax": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
- "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+ "node_modules/@webassemblyjs/utf8": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
+ "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
+ "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
"dev": true,
"dependencies": {
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.8.3",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.8.3",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-top-level-await": "^7.8.3"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-buffer": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/helper-wasm-section": "1.11.1",
+ "@webassemblyjs/wasm-gen": "1.11.1",
+ "@webassemblyjs/wasm-opt": "1.11.1",
+ "@webassemblyjs/wasm-parser": "1.11.1",
+ "@webassemblyjs/wast-printer": "1.11.1"
}
},
- "node_modules/babel-preset-jest": {
- "version": "29.2.0",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz",
- "integrity": "sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA==",
+ "node_modules/@webassemblyjs/wasm-gen": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
+ "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
"dev": true,
"dependencies": {
- "babel-plugin-jest-hoist": "^29.2.0",
- "babel-preset-current-node-syntax": "^1.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/ieee754": "1.11.1",
+ "@webassemblyjs/leb128": "1.11.1",
+ "@webassemblyjs/utf8": "1.11.1"
}
},
- "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/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "node_modules/@webassemblyjs/wasm-opt": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
+ "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
"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": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-buffer": "1.11.1",
+ "@webassemblyjs/wasm-gen": "1.11.1",
+ "@webassemblyjs/wasm-parser": "1.11.1"
+ }
},
- "node_modules/batch": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
- "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
- "dev": true
+ "node_modules/@webassemblyjs/wasm-parser": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
+ "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-api-error": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/ieee754": "1.11.1",
+ "@webassemblyjs/leb128": "1.11.1",
+ "@webassemblyjs/utf8": "1.11.1"
+ }
},
- "node_modules/bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
+ "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
"dev": true,
"dependencies": {
- "tweetnacl": "^0.14.3"
+ "@webassemblyjs/ast": "1.11.1",
+ "@xtuc/long": "4.2.2"
}
},
- "node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "node_modules/@webpack-cli/configtest": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.0.1.tgz",
+ "integrity": "sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=14.15.0"
+ },
+ "peerDependencies": {
+ "webpack": "5.x.x",
+ "webpack-cli": "5.x.x"
}
},
- "node_modules/blob-util": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
- "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==",
+ "node_modules/@webpack-cli/info": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.1.tgz",
+ "integrity": "sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.15.0"
+ },
+ "peerDependencies": {
+ "webpack": "5.x.x",
+ "webpack-cli": "5.x.x"
+ }
+ },
+ "node_modules/@webpack-cli/serve": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.1.tgz",
+ "integrity": "sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.15.0"
+ },
+ "peerDependencies": {
+ "webpack": "5.x.x",
+ "webpack-cli": "5.x.x"
+ },
+ "peerDependenciesMeta": {
+ "webpack-dev-server": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
"dev": true
},
- "node_modules/bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "node_modules/@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"dev": true
},
- "node_modules/body-parser": {
- "version": "1.20.1",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
- "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"dev": true,
"dependencies": {
- "bytes": "3.1.2",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "on-finished": "2.4.1",
- "qs": "6.11.0",
- "raw-body": "2.5.1",
- "type-is": "~1.6.18",
- "unpipe": "1.0.0"
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
},
"engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
+ "node": ">= 0.6"
}
},
- "node_modules/body-parser/node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "node_modules/acorn": {
+ "version": "8.11.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+ "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
"dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
"engines": {
- "node": ">= 0.8"
+ "node": ">=0.4.0"
}
},
- "node_modules/bonjour-service": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.0.tgz",
- "integrity": "sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==",
+ "node_modules/acorn-import-assertions": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
+ "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
"dev": true,
- "dependencies": {
- "array-flatten": "^2.1.2",
- "dns-equal": "^1.0.0",
- "fast-deep-equal": "^3.1.3",
- "multicast-dns": "^7.2.5"
+ "peerDependencies": {
+ "acorn": "^8"
}
},
- "node_modules/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "dev": true
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
- "node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
"dev": true,
"dependencies": {
- "fill-range": "^7.0.1"
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
- "node_modules/browserslist": {
- "version": "4.21.4",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
- "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- }
- ],
"dependencies": {
- "caniuse-lite": "^1.0.30001400",
- "electron-to-chromium": "^1.4.251",
- "node-releases": "^2.0.6",
- "update-browserslist-db": "^1.0.9"
- },
- "bin": {
- "browserslist": "cli.js"
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
},
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/bser": {
+ "node_modules/ajv-formats": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
- "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
"dev": true,
"dependencies": {
- "node-int64": "^0.4.0"
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
}
},
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "node_modules/ajv-formats/node_modules/ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
"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": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
- "dev": true,
- "engines": {
- "node": "*"
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "node_modules/ajv-formats/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
- "node_modules/bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
+ "node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true,
- "engines": {
- "node": ">= 0.8"
+ "peerDependencies": {
+ "ajv": "^6.9.1"
}
},
- "node_modules/cachedir": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz",
- "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==",
+ "node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
"dev": true,
"engines": {
"node": ">=6"
}
},
- "node_modules/call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
"dev": true,
"dependencies": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "node_modules/ansi-html-community": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
+ "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
+ "dev": true,
+ "engines": [
+ "node >= 0.8.0"
+ ],
+ "bin": {
+ "ansi-html": "bin/ansi-html"
+ }
+ },
+ "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": ">=6"
+ "node": ">=8"
}
},
- "node_modules/camel-case": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
- "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
+ "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": {
- "pascal-case": "^3.1.2",
- "tslib": "^2.0.3"
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "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": ">=6"
+ "node": ">= 8"
}
},
- "node_modules/caniuse-lite": {
- "version": "1.0.30001442",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz",
- "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==",
+ "node_modules/arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
"dev": true,
"funding": [
{
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
},
{
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
}
]
},
- "node_modules/caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
- "dev": true
+ "node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
},
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "is-array-buffer": "^3.0.4"
},
"engines": {
- "node": ">=10"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/chalk/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/array-flatten": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+ "dev": true
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
+ "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "get-intrinsic": "^1.2.1",
+ "is-string": "^1.0.7"
},
"engines": {
- "node": ">=8"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/char-regex": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
- "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=8"
}
},
- "node_modules/check-more-types": {
- "version": "2.24.0",
- "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
- "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==",
+ "node_modules/array.prototype.findlast": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz",
+ "integrity": "sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw==",
"dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.3.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
"engines": {
- "node": ">= 0.8.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "node_modules/array.prototype.findlastindex": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz",
+ "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==",
"dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
"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"
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.3.0",
+ "es-shim-unscopables": "^1.0.2"
},
"engines": {
- "node": ">= 8.10.0"
+ "node": ">= 0.4"
},
- "optionalDependencies": {
- "fsevents": "~2.3.2"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/chrome-trace-event": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
- "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+ "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
"dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
"engines": {
- "node": ">=6.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/ci-info": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz",
- "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==",
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+ "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
"dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.toreversed": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz",
+ "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "node_modules/array.prototype.tosorted": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz",
+ "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.1.0",
+ "es-shim-unscopables": "^1.0.2"
+ }
+ },
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.2.1",
+ "get-intrinsic": "^1.2.3",
+ "is-array-buffer": "^3.0.4",
+ "is-shared-array-buffer": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/ast-types-flow": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
+ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
+ "dev": true
+ },
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/async": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
+ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
+ "dev": true
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true
+ },
+ "node_modules/at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dev": true,
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/aws4": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==",
+ "dev": true
+ },
+ "node_modules/axe-core": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz",
+ "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
+ "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
+ "dev": true,
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/babel-jest": {
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.3.1.tgz",
+ "integrity": "sha512-aard+xnMoxgjwV70t0L6wkW/3HQQtV+O0PEimxKgzNqCJnbYmroPojdP2tqKSOAt8QAKV/uSZU8851M7B5+fcA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/transform": "^29.3.1",
+ "@types/babel__core": "^7.1.14",
+ "babel-plugin-istanbul": "^6.1.1",
+ "babel-preset-jest": "^29.2.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.8.0"
+ }
+ },
+ "node_modules/babel-plugin-istanbul": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
+ "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-instrument": "^5.0.4",
+ "test-exclude": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-jest-hoist": {
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz",
+ "integrity": "sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.3.3",
+ "@babel/types": "^7.3.3",
+ "@types/babel__core": "^7.1.14",
+ "@types/babel__traverse": "^7.0.6"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs2": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz",
+ "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.17.7",
+ "@babel/helper-define-polyfill-provider": "^0.3.3",
+ "semver": "^6.1.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs3": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz",
+ "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.3.3",
+ "core-js-compat": "^3.25.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-regenerator": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz",
+ "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.3.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-preset-current-node-syntax": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
+ "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-bigint": "^7.8.3",
+ "@babel/plugin-syntax-class-properties": "^7.8.3",
+ "@babel/plugin-syntax-import-meta": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.8.3",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-top-level-await": "^7.8.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/babel-preset-jest": {
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz",
+ "integrity": "sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA==",
+ "dev": true,
+ "dependencies": {
+ "babel-plugin-jest-hoist": "^29.2.0",
+ "babel-preset-current-node-syntax": "^1.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "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/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "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/batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
+ "dev": true
+ },
+ "node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "dev": true,
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/blob-util": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
+ "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==",
+ "dev": true
+ },
+ "node_modules/bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true
+ },
+ "node_modules/body-parser": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
+ "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
+ "dev": true,
+ "dependencies": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.11.0",
+ "raw-body": "2.5.1",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/body-parser/node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/bonjour-service": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.0.tgz",
+ "integrity": "sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==",
+ "dev": true,
+ "dependencies": {
+ "array-flatten": "^2.1.2",
+ "dns-equal": "^1.0.0",
+ "fast-deep-equal": "^3.1.3",
+ "multicast-dns": "^7.2.5"
+ }
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+ "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001400",
+ "electron-to-chromium": "^1.4.251",
+ "node-releases": "^2.0.6",
+ "update-browserslist-db": "^1.0.9"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/bser": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "dev": true,
+ "dependencies": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "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": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
+ "node_modules/bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/cachedir": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz",
+ "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camel-case": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
+ "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
+ "dev": true,
+ "dependencies": {
+ "pascal-case": "^3.1.2",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001442",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz",
+ "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ }
+ ]
+ },
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
+ "dev": true
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/char-regex": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
+ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/check-more-types": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
+ "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "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"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chrome-trace-event": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz",
+ "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cjs-module-lexer": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
+ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "dev": true
+ },
+ "node_modules/clean-css": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz",
+ "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==",
+ "dev": true,
+ "dependencies": {
+ "source-map": "~0.6.0"
+ },
+ "engines": {
+ "node": ">= 10.0"
+ }
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "dependencies": {
+ "restore-cursor": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-table3": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz",
+ "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": "10.* || >= 12.*"
+ },
+ "optionalDependencies": {
+ "@colors/colors": "1.5.0"
+ }
+ },
+ "node_modules/cli-truncate": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+ "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+ "dev": true,
+ "dependencies": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/clone-deep": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4",
+ "kind-of": "^6.0.2",
+ "shallow-clone": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true,
+ "engines": {
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/collect-v8-coverage": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
+ "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
+ "dev": true
+ },
+ "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/colorette": {
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
+ "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
+ "dev": true
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
+ "node_modules/common-tags": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
+ "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/compressible": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+ "dev": true,
+ "dependencies": {
+ "mime-db": ">= 1.43.0 < 2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "dev": true,
+ "dependencies": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/compression/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/confusing-browser-globals": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
+ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
+ "dev": true
+ },
+ "node_modules/connect-history-api-fallback": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
+ "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
+ },
+ "node_modules/cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
+ "dev": true
+ },
+ "node_modules/core-js-compat": {
+ "version": "3.27.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.1.tgz",
+ "integrity": "sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.21.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "dev": true
+ },
+ "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/css-loader": {
+ "version": "6.7.3",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz",
+ "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==",
+ "dev": true,
+ "dependencies": {
+ "icss-utils": "^5.1.0",
+ "postcss": "^8.4.19",
+ "postcss-modules-extract-imports": "^3.0.0",
+ "postcss-modules-local-by-default": "^4.0.0",
+ "postcss-modules-scope": "^3.0.0",
+ "postcss-modules-values": "^4.0.0",
+ "postcss-value-parser": "^4.2.0",
+ "semver": "^7.3.8"
+ },
+ "engines": {
+ "node": ">= 12.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.0.0"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
+ "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.0.1",
+ "domhandler": "^4.3.1",
+ "domutils": "^2.8.0",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
+ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "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/cypress": {
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.3.0.tgz",
+ "integrity": "sha512-ZQNebibi6NBt51TRxRMYKeFvIiQZ01t50HSy7z/JMgRVqBUey3cdjog5MYEbzG6Ktti5ckDt1tfcC47lmFwXkw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "@cypress/request": "^2.88.10",
+ "@cypress/xvfb": "^1.2.4",
+ "@types/node": "^14.14.31",
+ "@types/sinonjs__fake-timers": "8.1.1",
+ "@types/sizzle": "^2.3.2",
+ "arch": "^2.2.0",
+ "blob-util": "^2.0.2",
+ "bluebird": "^3.7.2",
+ "buffer": "^5.6.0",
+ "cachedir": "^2.3.0",
+ "chalk": "^4.1.0",
+ "check-more-types": "^2.24.0",
+ "cli-cursor": "^3.1.0",
+ "cli-table3": "~0.6.1",
+ "commander": "^5.1.0",
+ "common-tags": "^1.8.0",
+ "dayjs": "^1.10.4",
+ "debug": "^4.3.2",
+ "enquirer": "^2.3.6",
+ "eventemitter2": "6.4.7",
+ "execa": "4.1.0",
+ "executable": "^4.1.1",
+ "extract-zip": "2.0.1",
+ "figures": "^3.2.0",
+ "fs-extra": "^9.1.0",
+ "getos": "^3.2.1",
+ "is-ci": "^3.0.0",
+ "is-installed-globally": "~0.4.0",
+ "lazy-ass": "^1.6.0",
+ "listr2": "^3.8.3",
+ "lodash": "^4.17.21",
+ "log-symbols": "^4.0.0",
+ "minimist": "^1.2.6",
+ "ospath": "^1.2.2",
+ "pretty-bytes": "^5.6.0",
+ "proxy-from-env": "1.0.0",
+ "request-progress": "^3.0.0",
+ "semver": "^7.3.2",
+ "supports-color": "^8.1.1",
+ "tmp": "~0.2.1",
+ "untildify": "^4.0.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "cypress": "bin/cypress"
+ },
"engines": {
- "node": ">=8"
+ "node": "^14.0.0 || ^16.0.0 || >=18.0.0"
}
},
- "node_modules/cjs-module-lexer": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
- "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "node_modules/cypress/node_modules/@types/node": {
+ "version": "14.18.36",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.36.tgz",
+ "integrity": "sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==",
"dev": true
},
- "node_modules/clean-css": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz",
- "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==",
- "dev": true,
- "dependencies": {
- "source-map": "~0.6.0"
- },
- "engines": {
- "node": ">= 10.0"
- }
- },
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "node_modules/cypress/node_modules/commander": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
+ "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
"dev": true,
"engines": {
- "node": ">=6"
+ "node": ">= 6"
}
},
- "node_modules/cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "node_modules/cypress/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"dependencies": {
- "restore-cursor": "^3.1.0"
+ "ms": "2.1.2"
},
"engines": {
- "node": ">=8"
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/cli-table3": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz",
- "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==",
+ "node_modules/cypress/node_modules/execa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
"dev": true,
"dependencies": {
- "string-width": "^4.2.0"
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
},
"engines": {
- "node": "10.* || >= 12.*"
+ "node": ">=10"
},
- "optionalDependencies": {
- "@colors/colors": "1.5.0"
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/cli-truncate": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
- "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+ "node_modules/cypress/node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"dev": true,
"dependencies": {
- "slice-ansi": "^3.0.0",
- "string-width": "^4.2.0"
+ "pump": "^3.0.0"
},
"engines": {
"node": ">=8"
@@ -4003,891 +5354,1184 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "node_modules/cypress/node_modules/human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
"dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
"engines": {
- "node": ">=12"
+ "node": ">=8.12.0"
}
},
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+ "node_modules/cypress/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+ "dev": true
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
"dev": true,
"dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
+ "assert-plus": "^1.0.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=0.10"
}
},
- "node_modules/co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "node_modules/data-view-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+ "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
"dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
"engines": {
- "iojs": ">= 1.0.0",
- "node": ">= 0.12.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/collect-v8-coverage": {
+ "node_modules/data-view-byte-length": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
- "dev": true
- },
- "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==",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+ "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
"dev": true,
"dependencies": {
- "color-name": "~1.1.4"
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
},
"engines": {
- "node": ">=7.0.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "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/data-view-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "node_modules/colorette": {
- "version": "2.0.19",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
- "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
+ "node_modules/dayjs": {
+ "version": "1.11.7",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz",
+ "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==",
"dev": true
},
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
+ "ms": "2.0.0"
}
},
- "node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "node_modules/dedent": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
"dev": true
},
- "node_modules/common-tags": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
- "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
"dev": true,
"engines": {
- "node": ">=4.0.0"
+ "node": ">=0.10.0"
}
},
- "node_modules/compressible": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
- "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+ "node_modules/default-gateway": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
+ "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
"dev": true,
"dependencies": {
- "mime-db": ">= 1.43.0 < 2"
+ "execa": "^5.0.0"
},
"engines": {
- "node": ">= 0.6"
+ "node": ">= 10"
}
},
- "node_modules/compression": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
- "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"dev": true,
"dependencies": {
- "accepts": "~1.3.5",
- "bytes": "3.0.0",
- "compressible": "~2.0.16",
- "debug": "2.6.9",
- "on-headers": "~1.0.2",
- "safe-buffer": "5.1.2",
- "vary": "~1.1.2"
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
},
"engines": {
- "node": ">= 0.8.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/compression/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "node_modules/connect-history-api-fallback": {
+ "node_modules/define-lazy-prop": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
- "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
"dev": true,
"engines": {
- "node": ">=0.8"
+ "node": ">=8"
}
},
- "node_modules/content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
"dev": true,
"dependencies": {
- "safe-buffer": "5.2.1"
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
},
"engines": {
- "node": ">= 0.6"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"dev": true,
"engines": {
- "node": ">= 0.6"
+ "node": ">=0.4.0"
}
},
- "node_modules/convert-source-map": {
+ "node_modules/depd": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "node_modules/cookie": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
- "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
"dev": true,
"engines": {
- "node": ">= 0.6"
+ "node": ">=6"
}
},
- "node_modules/cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/detect-newline": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/detect-node": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
+ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
"dev": true
},
- "node_modules/core-js-compat": {
- "version": "3.27.1",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.1.tgz",
- "integrity": "sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA==",
+ "node_modules/diff-sequences": {
+ "version": "29.3.1",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz",
+ "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==",
+ "dev": true,
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4"
+ "path-type": "^4.0.0"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/core-util-is": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "node_modules/dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==",
"dev": true
},
- "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==",
+ "node_modules/dns-packet": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz",
+ "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==",
"dev": true,
"dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
+ "@leichtgewicht/ip-codec": "^2.0.1"
},
"engines": {
- "node": ">= 8"
+ "node": ">=6"
}
},
- "node_modules/css-loader": {
- "version": "6.7.3",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz",
- "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==",
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
"dependencies": {
- "icss-utils": "^5.1.0",
- "postcss": "^8.4.19",
- "postcss-modules-extract-imports": "^3.0.0",
- "postcss-modules-local-by-default": "^4.0.0",
- "postcss-modules-scope": "^3.0.0",
- "postcss-modules-values": "^4.0.0",
- "postcss-value-parser": "^4.2.0",
- "semver": "^7.3.8"
+ "esutils": "^2.0.2"
},
"engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^5.0.0"
+ "node": ">=6.0.0"
}
},
- "node_modules/css-select": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
- "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
+ "node_modules/dom-converter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
+ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
"dev": true,
"dependencies": {
- "boolbase": "^1.0.0",
- "css-what": "^6.0.1",
- "domhandler": "^4.3.1",
- "domutils": "^2.8.0",
- "nth-check": "^2.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
+ "utila": "~0.4"
}
},
- "node_modules/css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+ "node_modules/dom-serializer": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
+ "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
"dev": true,
- "engines": {
- "node": ">= 6"
+ "dependencies": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/fb55"
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
}
},
- "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==",
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
"dev": true,
- "bin": {
- "cssesc": "bin/cssesc"
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ]
+ },
+ "node_modules/domhandler": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.2.0"
},
"engines": {
- "node": ">=4"
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
- "node_modules/cypress": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.3.0.tgz",
- "integrity": "sha512-ZQNebibi6NBt51TRxRMYKeFvIiQZ01t50HSy7z/JMgRVqBUey3cdjog5MYEbzG6Ktti5ckDt1tfcC47lmFwXkw==",
+ "node_modules/domutils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
"dev": true,
- "hasInstallScript": true,
"dependencies": {
- "@cypress/request": "^2.88.10",
- "@cypress/xvfb": "^1.2.4",
- "@types/node": "^14.14.31",
- "@types/sinonjs__fake-timers": "8.1.1",
- "@types/sizzle": "^2.3.2",
- "arch": "^2.2.0",
- "blob-util": "^2.0.2",
- "bluebird": "^3.7.2",
- "buffer": "^5.6.0",
- "cachedir": "^2.3.0",
- "chalk": "^4.1.0",
- "check-more-types": "^2.24.0",
- "cli-cursor": "^3.1.0",
- "cli-table3": "~0.6.1",
- "commander": "^5.1.0",
- "common-tags": "^1.8.0",
- "dayjs": "^1.10.4",
- "debug": "^4.3.2",
- "enquirer": "^2.3.6",
- "eventemitter2": "6.4.7",
- "execa": "4.1.0",
- "executable": "^4.1.1",
- "extract-zip": "2.0.1",
- "figures": "^3.2.0",
- "fs-extra": "^9.1.0",
- "getos": "^3.2.1",
- "is-ci": "^3.0.0",
- "is-installed-globally": "~0.4.0",
- "lazy-ass": "^1.6.0",
- "listr2": "^3.8.3",
- "lodash": "^4.17.21",
- "log-symbols": "^4.0.0",
- "minimist": "^1.2.6",
- "ospath": "^1.2.2",
- "pretty-bytes": "^5.6.0",
- "proxy-from-env": "1.0.0",
- "request-progress": "^3.0.0",
- "semver": "^7.3.2",
- "supports-color": "^8.1.1",
- "tmp": "~0.2.1",
- "untildify": "^4.0.0",
- "yauzl": "^2.10.0"
- },
- "bin": {
- "cypress": "bin/cypress"
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
},
- "engines": {
- "node": "^14.0.0 || ^16.0.0 || >=18.0.0"
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
}
},
- "node_modules/cypress/node_modules/@types/node": {
- "version": "14.18.36",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.36.tgz",
- "integrity": "sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==",
- "dev": true
+ "node_modules/dot-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
+ "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
},
- "node_modules/cypress/node_modules/commander": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
- "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
+ "node_modules/dotenv": {
+ "version": "8.6.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
+ "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
"dev": true,
"engines": {
- "node": ">= 6"
+ "node": ">=10"
}
},
- "node_modules/cypress/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "node_modules/dotenv-defaults": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz",
+ "integrity": "sha512-iOIzovWfsUHU91L5i8bJce3NYK5JXeAwH50Jh6+ARUdLiiGlYWfGw6UkzsYqaXZH/hjE/eCd/PlfM/qqyK0AMg==",
"dev": true,
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "dotenv": "^8.2.0"
}
},
- "node_modules/cypress/node_modules/execa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
- "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+ "node_modules/dotenv-webpack": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-8.0.1.tgz",
+ "integrity": "sha512-CdrgfhZOnx4uB18SgaoP9XHRN2v48BbjuXQsZY5ixs5A8579NxQkmMxRtI7aTwSiSQcM2ao12Fdu+L3ZS3bG4w==",
"dev": true,
"dependencies": {
- "cross-spawn": "^7.0.0",
- "get-stream": "^5.0.0",
- "human-signals": "^1.1.1",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.0",
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2",
- "strip-final-newline": "^2.0.0"
+ "dotenv-defaults": "^2.0.2"
},
"engines": {
"node": ">=10"
},
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ "peerDependencies": {
+ "webpack": "^4 || ^5"
}
},
- "node_modules/cypress/node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
"dev": true,
"dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
}
},
- "node_modules/cypress/node_modules/human-signals": {
+ "node_modules/ee-first": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
- "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "dev": true
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.284",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+ "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
+ "dev": true
+ },
+ "node_modules/emittery": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
"dev": true,
"engines": {
- "node": ">=8.12.0"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
}
},
- "node_modules/cypress/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "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/dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
"dev": true,
- "dependencies": {
- "assert-plus": "^1.0.0"
- },
"engines": {
- "node": ">=0.10"
+ "node": ">= 0.8"
}
},
- "node_modules/dayjs": {
- "version": "1.11.7",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz",
- "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==",
- "dev": true
- },
- "node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dev": true,
"dependencies": {
- "ms": "2.0.0"
+ "once": "^1.4.0"
}
},
- "node_modules/dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
- "dev": true
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "node_modules/deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "node_modules/enhanced-resolve": {
+ "version": "5.12.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
+ "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
"dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10.13.0"
}
},
- "node_modules/default-gateway": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
- "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
+ "node_modules/enquirer": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
+ "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
"dev": true,
"dependencies": {
- "execa": "^5.0.0"
+ "ansi-colors": "^4.1.1"
},
"engines": {
- "node": ">= 10"
+ "node": ">=8.6"
}
},
- "node_modules/define-lazy-prop": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
- "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+ "node_modules/entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
"dev": true,
- "engines": {
- "node": ">=8"
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
}
},
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "node_modules/envinfo": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
+ "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==",
"dev": true,
+ "bin": {
+ "envinfo": "dist/cli.js"
+ },
"engines": {
- "node": ">=0.4.0"
+ "node": ">=4"
}
},
- "node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
- "engines": {
- "node": ">= 0.8"
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
}
},
- "node_modules/destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "dev": true,
+ "node_modules/es-abstract": {
+ "version": "1.23.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz",
+ "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.3",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "data-view-buffer": "^1.0.1",
+ "data-view-byte-length": "^1.0.1",
+ "data-view-byte-offset": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.0.3",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.6",
+ "get-intrinsic": "^1.2.4",
+ "get-symbol-description": "^1.0.2",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.0.7",
+ "is-array-buffer": "^3.0.4",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.1",
+ "is-negative-zero": "^2.0.3",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.3",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.13",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.13.1",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.5",
+ "regexp.prototype.flags": "^1.5.2",
+ "safe-array-concat": "^1.1.2",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.trim": "^1.2.9",
+ "string.prototype.trimend": "^1.0.8",
+ "string.prototype.trimstart": "^1.0.7",
+ "typed-array-buffer": "^1.0.2",
+ "typed-array-byte-length": "^1.0.1",
+ "typed-array-byte-offset": "^1.0.2",
+ "typed-array-length": "^1.0.5",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.15"
+ },
"engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/detect-newline": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
- "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
"dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
"engines": {
- "node": ">=8"
+ "node": ">= 0.4"
}
},
- "node_modules/detect-node": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
- "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
- "dev": true
- },
- "node_modules/diff-sequences": {
- "version": "29.3.1",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz",
- "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==",
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-iterator-helpers": {
+ "version": "1.0.18",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz",
+ "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==",
"dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-errors": "^1.3.0",
+ "es-set-tostringtag": "^2.0.3",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "globalthis": "^1.0.3",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.7",
+ "iterator.prototype": "^1.1.2",
+ "safe-array-concat": "^1.1.2"
+ },
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 0.4"
}
},
- "node_modules/dns-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
- "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==",
+ "node_modules/es-module-lexer": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
+ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
"dev": true
},
- "node_modules/dns-packet": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz",
- "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==",
+ "node_modules/es-object-atoms": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+ "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
"dev": true,
"dependencies": {
- "@leichtgewicht/ip-codec": "^2.0.1"
+ "es-errors": "^1.3.0"
},
"engines": {
- "node": ">=6"
+ "node": ">= 0.4"
}
},
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "node_modules/es-set-tostringtag": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
"dev": true,
"dependencies": {
- "esutils": "^2.0.2"
+ "get-intrinsic": "^1.2.4",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.1"
},
"engines": {
- "node": ">=6.0.0"
+ "node": ">= 0.4"
}
},
- "node_modules/dom-converter": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
- "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
"dev": true,
"dependencies": {
- "utila": "~0.4"
+ "hasown": "^2.0.0"
}
},
- "node_modules/dom-serializer": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
- "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
"dev": true,
"dependencies": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.2.0",
- "entities": "^2.0.0"
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ]
+ "engines": {
+ "node": ">=6"
+ }
},
- "node_modules/domhandler": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
- "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+ "dev": true
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+ "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
"dev": true,
"dependencies": {
- "domelementtype": "^2.2.0"
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.57.0",
+ "@humanwhocodes/config-array": "^0.11.14",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
},
"engines": {
- "node": ">= 4"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/domutils": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
- "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+ "node_modules/eslint-config-airbnb": {
+ "version": "19.0.4",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz",
+ "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==",
"dev": true,
"dependencies": {
- "dom-serializer": "^1.0.1",
- "domelementtype": "^2.2.0",
- "domhandler": "^4.2.0"
+ "eslint-config-airbnb-base": "^15.0.0",
+ "object.assign": "^4.1.2",
+ "object.entries": "^1.1.5"
},
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
+ "engines": {
+ "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.32.0 || ^8.2.0",
+ "eslint-plugin-import": "^2.25.3",
+ "eslint-plugin-jsx-a11y": "^6.5.1",
+ "eslint-plugin-react": "^7.28.0",
+ "eslint-plugin-react-hooks": "^4.3.0"
}
},
- "node_modules/dot-case": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
- "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
+ "node_modules/eslint-config-airbnb-base": {
+ "version": "15.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
+ "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
"dev": true,
"dependencies": {
- "no-case": "^3.0.4",
- "tslib": "^2.0.3"
+ "confusing-browser-globals": "^1.0.10",
+ "object.assign": "^4.1.2",
+ "object.entries": "^1.1.5",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.32.0 || ^8.2.0",
+ "eslint-plugin-import": "^2.25.2"
}
},
- "node_modules/dotenv": {
- "version": "8.6.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
- "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
+ "node_modules/eslint-config-airbnb-base/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
- "engines": {
- "node": ">=10"
+ "bin": {
+ "semver": "bin/semver.js"
}
},
- "node_modules/dotenv-defaults": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz",
- "integrity": "sha512-iOIzovWfsUHU91L5i8bJce3NYK5JXeAwH50Jh6+ARUdLiiGlYWfGw6UkzsYqaXZH/hjE/eCd/PlfM/qqyK0AMg==",
+ "node_modules/eslint-config-prettier": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
+ "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
"dev": true,
"dependencies": {
- "dotenv": "^8.2.0"
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
}
},
- "node_modules/dotenv-webpack": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-8.0.1.tgz",
- "integrity": "sha512-CdrgfhZOnx4uB18SgaoP9XHRN2v48BbjuXQsZY5ixs5A8579NxQkmMxRtI7aTwSiSQcM2ao12Fdu+L3ZS3bG4w==",
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"dependencies": {
- "dotenv-defaults": "^2.0.2"
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/eslint-import-resolver-node/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/eslint-import-resolver-typescript": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz",
+ "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "enhanced-resolve": "^5.12.0",
+ "eslint-module-utils": "^2.7.4",
+ "fast-glob": "^3.3.1",
+ "get-tsconfig": "^4.5.0",
+ "is-core-module": "^2.11.0",
+ "is-glob": "^4.0.3"
},
"engines": {
- "node": ">=10"
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
},
"peerDependencies": {
- "webpack": "^4 || ^5"
+ "eslint": "*",
+ "eslint-plugin-import": "*"
}
},
- "node_modules/ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "node_modules/eslint-import-resolver-typescript/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"dependencies": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
- "dev": true
- },
- "node_modules/electron-to-chromium": {
- "version": "1.4.284",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
- "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
+ "node_modules/eslint-import-resolver-typescript/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "node_modules/emittery": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
- "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
+ "node_modules/eslint-module-utils": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz",
+ "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==",
"dev": true,
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
"engines": {
- "node": ">=12"
+ "node": ">=4"
},
- "funding": {
- "url": "https://github.com/sindresorhus/emittery?sponsor=1"
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
}
},
- "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==",
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true
},
- "node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "node_modules/eslint-plugin-import": {
+ "version": "2.29.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
+ "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
"dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.7",
+ "array.prototype.findlastindex": "^1.2.3",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.8.0",
+ "hasown": "^2.0.0",
+ "is-core-module": "^2.13.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.7",
+ "object.groupby": "^1.0.1",
+ "object.values": "^1.1.7",
+ "semver": "^6.3.1",
+ "tsconfig-paths": "^3.15.0"
+ },
"engines": {
- "node": ">= 0.8"
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
}
},
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
"dependencies": {
- "once": "^1.4.0"
+ "ms": "^2.1.1"
}
},
- "node_modules/enhanced-resolve": {
- "version": "5.12.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
- "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
"dev": true,
"dependencies": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
+ "esutils": "^2.0.2"
},
"engines": {
- "node": ">=10.13.0"
+ "node": ">=0.10.0"
}
},
- "node_modules/enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+ "node_modules/eslint-plugin-import/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/eslint-plugin-import/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-jest": {
+ "version": "27.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz",
+ "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==",
"dev": true,
"dependencies": {
- "ansi-colors": "^4.1.1"
+ "@typescript-eslint/utils": "^5.10.0"
},
"engines": {
- "node": ">=8.6"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0",
+ "eslint": "^7.0.0 || ^8.0.0",
+ "jest": "*"
+ },
+ "peerDependenciesMeta": {
+ "@typescript-eslint/eslint-plugin": {
+ "optional": true
+ },
+ "jest": {
+ "optional": true
+ }
}
},
- "node_modules/entities": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz",
+ "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.23.2",
+ "aria-query": "^5.3.0",
+ "array-includes": "^3.1.7",
+ "array.prototype.flatmap": "^1.3.2",
+ "ast-types-flow": "^0.0.8",
+ "axe-core": "=4.7.0",
+ "axobject-query": "^3.2.1",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "es-iterator-helpers": "^1.0.15",
+ "hasown": "^2.0.0",
+ "jsx-ast-utils": "^3.3.5",
+ "language-tags": "^1.0.9",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.7",
+ "object.fromentries": "^2.0.7"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y/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/eslint-plugin-prettier": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz",
+ "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==",
"dev": true,
+ "dependencies": {
+ "prettier-linter-helpers": "^1.0.0",
+ "synckit": "^0.8.6"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
"funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
+ "url": "https://opencollective.com/eslint-plugin-prettier"
+ },
+ "peerDependencies": {
+ "@types/eslint": ">=8.0.0",
+ "eslint": ">=8.0.0",
+ "eslint-config-prettier": "*",
+ "prettier": ">=3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/eslint": {
+ "optional": true
+ },
+ "eslint-config-prettier": {
+ "optional": true
+ }
}
},
- "node_modules/envinfo": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
- "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==",
+ "node_modules/eslint-plugin-react": {
+ "version": "7.34.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz",
+ "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==",
"dev": true,
- "bin": {
- "envinfo": "dist/cli.js"
+ "peer": true,
+ "dependencies": {
+ "array-includes": "^3.1.7",
+ "array.prototype.findlast": "^1.2.4",
+ "array.prototype.flatmap": "^1.3.2",
+ "array.prototype.toreversed": "^1.1.2",
+ "array.prototype.tosorted": "^1.1.3",
+ "doctrine": "^2.1.0",
+ "es-iterator-helpers": "^1.0.17",
+ "estraverse": "^5.3.0",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.7",
+ "object.fromentries": "^2.0.7",
+ "object.hasown": "^1.1.3",
+ "object.values": "^1.1.7",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.5",
+ "semver": "^6.3.1",
+ "string.prototype.matchall": "^4.0.10"
},
"engines": {
"node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
}
},
- "node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
"dev": true,
- "dependencies": {
- "is-arrayish": "^0.2.1"
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
}
},
- "node_modules/es-module-lexer": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
- "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
- "dev": true
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
"dev": true,
+ "peer": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
"engines": {
- "node": ">=6"
+ "node": ">=0.10.0"
}
},
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
- "dev": true
- },
- "node_modules/escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "node_modules/eslint-plugin-react/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
+ "peer": true,
"engines": {
- "node": ">=8"
+ "node": ">=4.0"
}
},
- "node_modules/eslint": {
- "version": "8.35.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz",
- "integrity": "sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==",
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.5",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
+ "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@eslint/eslintrc": "^2.0.0",
- "@eslint/js": "8.35.0",
- "@humanwhocodes/config-array": "^0.11.8",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.1.1",
- "eslint-utils": "^3.0.0",
- "eslint-visitor-keys": "^3.3.0",
- "espree": "^9.4.0",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "grapheme-splitter": "^1.0.4",
- "ignore": "^5.2.0",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-sdsl": "^4.1.4",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "regexpp": "^3.2.0",
- "strip-ansi": "^6.0.1",
- "strip-json-comments": "^3.1.0",
- "text-table": "^0.2.0"
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "resolve": "bin/resolve"
},
"funding": {
- "url": "https://opencollective.com/eslint"
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
}
},
"node_modules/eslint-scope": {
@@ -4903,40 +6547,16 @@
"node": ">=8.0.0"
}
},
- "node_modules/eslint-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
- "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
- "dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^2.0.0"
- },
- "engines": {
- "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- },
- "peerDependencies": {
- "eslint": ">=5"
- }
- },
- "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/eslint-visitor-keys": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
- "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint/node_modules/argparse": {
@@ -4975,9 +6595,9 @@
}
},
"node_modules/eslint/node_modules/eslint-scope": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
- "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
"dev": true,
"dependencies": {
"esrecurse": "^4.3.0",
@@ -4985,6 +6605,9 @@
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint/node_modules/estraverse": {
@@ -5051,19 +6674,6 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/eslint/node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
"node_modules/eslint/node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -5085,23 +6695,6 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "node_modules/eslint/node_modules/optionator": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
- "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
- "dev": true,
- "dependencies": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
"node_modules/eslint/node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -5132,27 +6725,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint/node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/eslint/node_modules/type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
"node_modules/eslint/node_modules/type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
@@ -5166,14 +6738,14 @@
}
},
"node_modules/espree": {
- "version": "9.4.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
- "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
"dev": true,
"dependencies": {
- "acorn": "^8.8.0",
+ "acorn": "^8.9.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.3.0"
+ "eslint-visitor-keys": "^3.4.1"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -5472,6 +7044,28 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
+ "node_modules/fast-diff": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
+ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
+ "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-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -5650,6 +7244,15 @@
}
}
},
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
"node_modules/forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@@ -5733,10 +7336,40 @@
}
},
"node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
+ "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/function.prototype.name": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
"node_modules/gensync": {
"version": "1.0.0-beta.2",
@@ -5757,14 +7390,19 @@
}
},
"node_modules/get-intrinsic": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
- "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
"dev": true,
"dependencies": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.3"
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -5791,6 +7429,35 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/get-symbol-description": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.7.3",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
+ "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==",
+ "dev": true,
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
"node_modules/getos": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
@@ -5871,16 +7538,63 @@
"node": ">=4"
}
},
+ "node_modules/globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/graceful-fs": {
"version": "4.2.10",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
"dev": true
},
- "node_modules/grapheme-splitter": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
- "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true
},
"node_modules/handle-thing": {
@@ -5889,16 +7603,13 @@
"integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
"dev": true
},
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
"dev": true,
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-flag": {
@@ -5910,6 +7621,30 @@
"node": ">=8"
}
},
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
@@ -5922,6 +7657,33 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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/he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -6286,6 +8048,20 @@
"node": ">=10"
}
},
+ "node_modules/internal-slot": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+ "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.0",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/interpret": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
@@ -6304,12 +8080,55 @@
"node": ">= 10"
}
},
+ "node_modules/is-array-buffer": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
"dev": true
},
+ "node_modules/is-async-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
+ "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -6322,6 +8141,34 @@
"node": ">=8"
}
},
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-ci": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz",
@@ -6335,12 +8182,42 @@
}
},
"node_modules/is-core-module": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
- "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+ "version": "2.13.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+ "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-view": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+ "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+ "dev": true,
+ "dependencies": {
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"dev": true,
"dependencies": {
- "has": "^1.0.3"
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -6370,6 +8247,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-finalizationregistry": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz",
+ "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"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",
@@ -6388,6 +8277,21 @@
"node": ">=6"
}
},
+ "node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
@@ -6416,6 +8320,30 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -6425,6 +8353,21 @@
"node": ">=0.12.0"
}
},
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-path-inside": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
@@ -6458,6 +8401,49 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-set": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@@ -6470,6 +8456,51 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+ "dev": true,
+ "dependencies": {
+ "which-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
@@ -6488,6 +8519,46 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-weakmap": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakset": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
+ "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-wsl": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
@@ -6637,6 +8708,19 @@
"node": ">=8"
}
},
+ "node_modules/iterator.prototype": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz",
+ "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "get-intrinsic": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "reflect.getprototypeof": "^1.0.4",
+ "set-function-name": "^2.0.1"
+ }
+ },
"node_modules/jest": {
"version": "29.3.1",
"resolved": "https://registry.npmjs.org/jest/-/jest-29.3.1.tgz",
@@ -7264,16 +9348,6 @@
"node": ">= 10.13.0"
}
},
- "node_modules/js-sdsl": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
- "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/js-sdsl"
- }
- },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -7380,6 +9454,21 @@
"verror": "1.10.0"
}
},
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "object.assign": "^4.1.4",
+ "object.values": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
"node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -7398,6 +9487,24 @@
"node": ">=6"
}
},
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.22",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
+ "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==",
+ "dev": true
+ },
+ "node_modules/language-tags": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
+ "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
+ "dev": true,
+ "dependencies": {
+ "language-subtag-registry": "^0.3.20"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/lazy-ass": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
@@ -7416,6 +9523,19 @@
"node": ">=6"
}
},
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/lines-and-columns": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
@@ -7559,6 +9679,19 @@
"node": ">=8"
}
},
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
"node_modules/lower-case": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
@@ -7646,6 +9779,15 @@
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true
},
+ "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/methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
@@ -7853,11 +9995,125 @@
"url": "https://github.com/fb55/nth-check?sponsor=1"
}
},
+ "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,
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/object-inspect": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
- "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
+ "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.entries": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
+ "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.groupby": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.hasown": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz",
+ "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+ "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
"dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -7930,6 +10186,23 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dev": true,
+ "dependencies": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/ospath": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz",
@@ -8098,6 +10371,15 @@
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
"dev": true
},
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
@@ -8158,6 +10440,15 @@
"node": ">=8"
}
},
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/postcss": {
"version": "8.4.21",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
@@ -8260,21 +10551,42 @@
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
"dev": true
},
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/prettier": {
- "version": "2.8.4",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz",
- "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==",
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
+ "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
"dev": true,
"bin": {
- "prettier": "bin-prettier.js"
+ "prettier": "bin/prettier.cjs"
},
"engines": {
- "node": ">=10.13.0"
+ "node": ">=14"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
+ "node_modules/prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "dependencies": {
+ "fast-diff": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/pretty-bytes": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
@@ -8342,6 +10654,25 @@
"node": ">= 6"
}
},
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/prop-types/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "dev": true,
+ "peer": true
+ },
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -8516,6 +10847,27 @@
"node": ">= 10.13.0"
}
},
+ "node_modules/reflect.getprototypeof": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
+ "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.1",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "globalthis": "^1.0.3",
+ "which-builtin-type": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/regenerate": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
@@ -8535,9 +10887,9 @@
}
},
"node_modules/regenerator-runtime": {
- "version": "0.13.11",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
- "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
"dev": true
},
"node_modules/regenerator-transform": {
@@ -8549,16 +10901,22 @@
"@babel/runtime": "^7.8.4"
}
},
- "node_modules/regexpp": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
- "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+ "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
"dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "set-function-name": "^2.0.1"
+ },
"engines": {
- "node": ">=8"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/mysticatea"
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/regexpu-core": {
@@ -8698,6 +11056,15 @@
"node": ">=8"
}
},
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
"node_modules/resolve.exports": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz",
@@ -8792,6 +11159,30 @@
"tslib": "^2.1.0"
}
},
+ "node_modules/safe-array-concat": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+ "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4",
+ "has-symbols": "^1.0.3",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-array-concat/node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -8812,6 +11203,23 @@
}
]
},
+ "node_modules/safe-regex-test": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+ "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.1.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -8855,9 +11263,9 @@
}
},
"node_modules/semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -8986,6 +11394,38 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-function-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -9277,6 +11717,73 @@
"node": ">=8"
}
},
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz",
+ "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "get-intrinsic": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "regexp.prototype.flags": "^1.5.0",
+ "set-function-name": "^2.0.0",
+ "side-channel": "^1.0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+ "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+ "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
+ "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -9362,6 +11869,28 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/synckit": {
+ "version": "0.8.8",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz",
+ "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==",
+ "dev": true,
+ "dependencies": {
+ "@pkgr/core": "^0.1.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
+ "node_modules/synckit/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+ "dev": true
+ },
"node_modules/tapable": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
@@ -9522,6 +12051,18 @@
"node": ">=0.8"
}
},
+ "node_modules/ts-api-utils": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
+ "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=16"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
+ }
+ },
"node_modules/ts-loader": {
"version": "9.4.2",
"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz",
@@ -9541,12 +12082,66 @@
"webpack": "^5.0.0"
}
},
+ "node_modules/tsconfig-paths": {
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+ "dev": true,
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/tsconfig-paths/node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/tsconfig-paths/node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/tslib": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
"integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==",
"dev": true
},
+ "node_modules/tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.8.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ },
+ "peerDependencies": {
+ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+ }
+ },
+ "node_modules/tsutils/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
"node_modules/tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@@ -9565,6 +12160,18 @@
"integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
"dev": true
},
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
@@ -9599,6 +12206,79 @@
"node": ">= 0.6"
}
},
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz",
+ "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/typescript": {
"version": "4.9.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
@@ -9612,6 +12292,21 @@
"node": ">=4.2.0"
}
},
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/unicode-canonical-property-names-ecmascript": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
@@ -10169,21 +12864,97 @@
"node": ">= 8"
}
},
- "node_modules/wildcard": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
- "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "dependencies": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-builtin-type": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz",
+ "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==",
+ "dev": true,
+ "dependencies": {
+ "function.prototype.name": "^1.1.5",
+ "has-tostringtag": "^1.0.0",
+ "is-async-function": "^2.0.0",
+ "is-date-object": "^1.0.5",
+ "is-finalizationregistry": "^1.0.2",
+ "is-generator-function": "^1.0.10",
+ "is-regex": "^1.1.4",
+ "is-weakref": "^1.0.2",
+ "isarray": "^2.0.5",
+ "which-boxed-primitive": "^1.0.2",
+ "which-collection": "^1.0.1",
+ "which-typed-array": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-builtin-type/node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
"dev": true
},
- "node_modules/word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "node_modules/which-collection": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
"dev": true,
+ "dependencies": {
+ "is-map": "^2.0.3",
+ "is-set": "^2.0.3",
+ "is-weakmap": "^2.0.2",
+ "is-weakset": "^2.0.3"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/which-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/wildcard": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
+ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
+ "dev": true
+ },
"node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
diff --git a/package.json b/package.json
index 884bb127c..0b6df4cb6 100644
--- a/package.json
+++ b/package.json
@@ -28,14 +28,22 @@
"@babel/preset-env": "^7.20.2",
"@babel/preset-typescript": "^7.18.6",
"@types/jest": "^29.4.0",
+ "@typescript-eslint/eslint-plugin": "^7.3.1",
"babel-jest": "^29.3.1",
"css-loader": "^6.7.3",
"cypress": "^12.3.0",
"dotenv-webpack": "^8.0.1",
"eslint": "^8.35.0",
+ "eslint-config-airbnb": "^19.0.4",
+ "eslint-config-prettier": "^9.0.0",
+ "eslint-import-resolver-typescript": "^3.6.1",
+ "eslint-plugin-import": "^2.29.1",
+ "eslint-plugin-jest": "^27.6.0",
+ "eslint-plugin-jsx-a11y": "^6.8.0",
+ "eslint-plugin-prettier": "^5.0.1",
"html-webpack-plugin": "^5.5.0",
"jest": "^29.3.1",
- "prettier": "^2.8.4",
+ "prettier": "^3.0.0",
"style-loader": "^3.3.1",
"ts-loader": "^9.4.2",
"typescript": "^4.9.4",
diff --git a/src/app.ts b/src/app.ts
new file mode 100644
index 000000000..df4b4e8e4
--- /dev/null
+++ b/src/app.ts
@@ -0,0 +1,13 @@
+import Header from "./components/Header";
+import ViewContainer from "./components/ViewContainer";
+
+export const $main = document.querySelector("main");
+
+async function App() {
+ const $app = document.querySelector("#app");
+
+ $app?.prepend(Header());
+ await ViewContainer();
+}
+
+export default App;
diff --git a/src/components/ErrorView.ts b/src/components/ErrorView.ts
new file mode 100644
index 000000000..de19b94d9
--- /dev/null
+++ b/src/components/ErrorView.ts
@@ -0,0 +1,17 @@
+import { ERROR_VIEW_TEXT } from "../constants/system";
+
+const $main = document.querySelector("main");
+
+const renderErrorView = () => {
+ const $errorView = document.querySelector(".error-view");
+ if ($errorView) {
+ return;
+ }
+ const $errorDiv = document.createElement("div");
+ $errorDiv.classList.add("error-view");
+ $errorDiv.textContent = ERROR_VIEW_TEXT;
+
+ $main?.appendChild($errorDiv);
+};
+
+export default renderErrorView;
diff --git a/src/components/Header.ts b/src/components/Header.ts
new file mode 100644
index 000000000..77e9df752
--- /dev/null
+++ b/src/components/Header.ts
@@ -0,0 +1,45 @@
+import LogoImg from "../../templates/logo.png";
+import { LOGO_IMG_ALT, TITLE_TEXT } from "../constants/system";
+import { dataStateStore } from "../model";
+import { handleGetPopularMovieData } from "../service/handleSkeletonAndAPI";
+import { createElementWithAttribute } from "../utils";
+
+import ItemView from "./ItemView";
+import SearchBox from "./SearchBox";
+
+const handleClickToRefresh = async () => {
+ const $itemView = document.querySelector(".item-view");
+ $itemView?.remove();
+ const $searchBox = document.querySelector("#search-input");
+ if ($searchBox instanceof HTMLInputElement) {
+ $searchBox.value = "";
+ }
+ await handleGetPopularMovieData(true);
+
+ ItemView(TITLE_TEXT.POPULAR, dataStateStore.movieData, "popular");
+};
+
+const Logo = () => {
+ const logoImgAttribute = {
+ src: LogoImg,
+ alt: LOGO_IMG_ALT,
+ };
+ const $logo = createElementWithAttribute("img", logoImgAttribute);
+
+ $logo.addEventListener("click", handleClickToRefresh);
+
+ return $logo;
+};
+
+const Header = () => {
+ const $header = document.createElement("header");
+ const $h1 = document.createElement("h1");
+ const $logo = Logo();
+
+ $h1.appendChild($logo);
+ $header.appendChild($h1);
+ $header.appendChild(SearchBox());
+
+ return $header;
+};
+export default Header;
diff --git a/src/components/ItemCard.ts b/src/components/ItemCard.ts
new file mode 100644
index 000000000..0fc0d2075
--- /dev/null
+++ b/src/components/ItemCard.ts
@@ -0,0 +1,32 @@
+import { Movie } from "../type/movie";
+import { createElementWithAttribute } from "../utils";
+
+import MovieImg from "./MovieImg";
+import MovieScore from "./MovieScore";
+import MovieTitle from "./MovieTitle";
+
+const Card = (movie: Movie) => {
+ const $card = createElementWithAttribute("div", { class: "item-card" });
+ const $img = MovieImg(movie);
+ const $title = MovieTitle(movie);
+ const $score = MovieScore(movie);
+
+ $card.appendChild($img);
+ $card.appendChild($title);
+ $card.appendChild($score);
+
+ return $card;
+};
+
+const ItemCard = (movie: Movie) => {
+ const $li = document.createElement("li");
+ const $a = document.createElement("a");
+ const $card = Card(movie);
+
+ $a.appendChild($card);
+ $li.appendChild($a);
+
+ return $li;
+};
+
+export default ItemCard;
diff --git a/src/components/ItemCardList.ts b/src/components/ItemCardList.ts
new file mode 100644
index 000000000..7a475cfc3
--- /dev/null
+++ b/src/components/ItemCardList.ts
@@ -0,0 +1,26 @@
+import { NO_ITEM_TEXT } from "../constants/system";
+import { Movie } from "../type/movie";
+import { createElementWithAttribute } from "../utils";
+
+import ItemCard from "./ItemCard";
+
+const NoItem = () => {
+ const $noItem = document.createElement("li");
+ $noItem.textContent = NO_ITEM_TEXT;
+
+ return $noItem;
+};
+
+const ItemCardList = (movieList: Movie[] | undefined) => {
+ const $ul = createElementWithAttribute("ul", {
+ class: "item-list",
+ });
+ if (movieList && movieList.length > 0) {
+ movieList.map((movie) => $ul.appendChild(ItemCard(movie)));
+ } else {
+ $ul.classList.add("no-item-list");
+ $ul.appendChild(NoItem());
+ }
+ return $ul;
+};
+export default ItemCardList;
diff --git a/src/components/ItemView.ts b/src/components/ItemView.ts
new file mode 100644
index 000000000..84175de39
--- /dev/null
+++ b/src/components/ItemView.ts
@@ -0,0 +1,30 @@
+import { ListType, Movie, PartialMovieDataForItemView } from "../type/movie";
+import { createElementWithAttribute } from "../utils";
+
+import ItemList from "./ItemCardList";
+import MoreButton from "./MoreButton";
+import Title from "./Title";
+
+const $main = document.querySelector("main");
+
+const makeSection = (titleText: string, movieList: Movie[] | undefined) => {
+ const $section = createElementWithAttribute("section", {
+ class: "item-view",
+ });
+ $section.appendChild(Title(titleText));
+ $section.appendChild(ItemList(movieList));
+
+ return $section;
+};
+
+const renderItemView = (
+ titleText: string,
+ movieData: PartialMovieDataForItemView,
+ listType: ListType,
+) => {
+ const $section = makeSection(titleText, movieData.movieList);
+
+ $main?.appendChild($section);
+ MoreButton(listType, movieData.isShowMoreButton);
+};
+export default renderItemView;
diff --git a/src/components/MoreButton.ts b/src/components/MoreButton.ts
new file mode 100644
index 000000000..b47212025
--- /dev/null
+++ b/src/components/MoreButton.ts
@@ -0,0 +1,98 @@
+import { MORE_BUTTON_TEXT } from "../constants/system";
+import { dataStateStore } from "../model";
+import {
+ handleGetPopularMovieData,
+ handleGetSearchMovieData,
+} from "../service/handleSkeletonAndAPI";
+import { ListType, Movie } from "../type/movie";
+import { createElementWithAttribute, debounceFunc } from "../utils";
+
+import ItemList from "./ItemCardList";
+
+// --- MoreButton click event
+const changeMoreButtonState = (event: Event, isShowMoreButton: boolean) => {
+ const { target } = event;
+
+ if (target instanceof HTMLButtonElement) {
+ target.classList.toggle("open", isShowMoreButton);
+ }
+};
+
+const addItemsToMovieList = (totalMovieList: Movie[]) => {
+ const $itemList = document.querySelector(".item-view .item-list");
+
+ if (!$itemList) return;
+
+ const $newItemList = ItemList(totalMovieList);
+ $itemList.parentElement?.replaceChild($newItemList, $itemList);
+};
+
+const getSearchInputValue = () => {
+ const $searchInput = document.querySelector("#search-input");
+
+ if (!($searchInput instanceof HTMLInputElement)) {
+ return undefined;
+ }
+
+ return $searchInput.value;
+};
+
+const getSearchMovieData = async () => {
+ const title = getSearchInputValue();
+
+ if (!title) return;
+
+ await handleGetSearchMovieData(title, false);
+};
+
+const handleMovieDataState = (event: Event) => {
+ const previousScrollPosition = window.scrollY;
+
+ const { movieList, isShowMoreButton } = dataStateStore.movieData;
+
+ addItemsToMovieList(movieList);
+ changeMoreButtonState(event, isShowMoreButton);
+
+ window.scrollTo(0, previousScrollPosition);
+};
+
+const handleMovieData = async (event: Event, listType: ListType) => {
+ if (listType === "popular") {
+ await handleGetPopularMovieData();
+ } else {
+ await getSearchMovieData();
+ }
+
+ handleMovieDataState(event);
+};
+
+const handleClickMoreButton = async (event: Event, listType: ListType) => {
+ event.stopPropagation();
+
+ debounceFunc(() => handleMovieData(event, listType));
+};
+
+// MoreButton click event ---
+
+// make MoreButton ----
+const makeMoreButton = () => {
+ const $moreButton = createElementWithAttribute("button", {
+ id: "more-button",
+ class: "btn primary full-width more-button open",
+ });
+ $moreButton.textContent = MORE_BUTTON_TEXT;
+
+ return $moreButton;
+};
+
+const MoreButton = (listType: ListType, isShowMoreButton: boolean) => {
+ if (!isShowMoreButton) return;
+ const $moreButton = makeMoreButton();
+ document.querySelector(".item-view")?.appendChild($moreButton);
+
+ $moreButton.addEventListener("click", (event) =>
+ handleClickMoreButton(event, listType),
+ );
+};
+
+export default MoreButton;
diff --git a/src/components/MovieImg.ts b/src/components/MovieImg.ts
new file mode 100644
index 000000000..755cf37a1
--- /dev/null
+++ b/src/components/MovieImg.ts
@@ -0,0 +1,41 @@
+/* eslint-disable max-lines-per-function */
+import noImg from "../../templates/no_image.svg";
+import { IMAGE_URL } from "../config";
+import { Movie } from "../type/movie";
+import { createElementWithAttribute } from "../utils";
+
+const POSTER_SIZE = "w500";
+
+function SkeletonImg() {
+ const $skeletonImg = createElementWithAttribute("div", {
+ class: "item-thumbnail skeleton",
+ });
+ return $skeletonImg;
+}
+
+const imgSrc = (path: string | null) =>
+ path === null ? noImg : IMAGE_URL + POSTER_SIZE + path;
+
+const MovieImg = (movie: Movie) => {
+ const skeletonUI = SkeletonImg();
+
+ const imgElement = createElementWithAttribute("img", {
+ class: "item-thumbnail",
+ src: imgSrc(movie.poster_path),
+ loading: "lazy",
+ alt: movie.title,
+ style: "display: none;",
+ });
+
+ imgElement.addEventListener("load", () => {
+ skeletonUI.style.display = "none";
+ imgElement.style.display = "block";
+ });
+
+ const container = document.createElement("div");
+ container.appendChild(skeletonUI);
+ container.appendChild(imgElement);
+ return container;
+};
+
+export default MovieImg;
diff --git a/src/components/MovieScore.ts b/src/components/MovieScore.ts
new file mode 100644
index 000000000..7912c4997
--- /dev/null
+++ b/src/components/MovieScore.ts
@@ -0,0 +1,18 @@
+import starFilled from "../../templates/star_filled.png";
+import { STAR_IMG_ALT } from "../constants/system";
+import { Movie } from "../type/movie";
+import { createElementWithAttribute } from "../utils";
+
+const MovieScore = (movie: Movie) => {
+ const $score = createElementWithAttribute("p", { class: "item-score" });
+ const $star = createElementWithAttribute("img", {
+ src: starFilled,
+ alt: STAR_IMG_ALT,
+ });
+
+ $score.appendChild($star);
+ $score.appendChild(document.createTextNode(movie.vote_average.toString()));
+
+ return $score;
+};
+export default MovieScore;
diff --git a/src/components/MovieTitle.ts b/src/components/MovieTitle.ts
new file mode 100644
index 000000000..a4349979d
--- /dev/null
+++ b/src/components/MovieTitle.ts
@@ -0,0 +1,10 @@
+import { Movie } from "../type/movie";
+import { createElementWithAttribute } from "../utils";
+
+const MovieTitle = (movie: Movie) => {
+ const $title = createElementWithAttribute("p", { class: "item-title" });
+ $title.textContent = movie.title;
+
+ return $title;
+};
+export default MovieTitle;
diff --git a/src/components/SearchBox.ts b/src/components/SearchBox.ts
new file mode 100644
index 000000000..ec59757fd
--- /dev/null
+++ b/src/components/SearchBox.ts
@@ -0,0 +1,92 @@
+import {
+ ENTER_KEYCODE,
+ SEARCH_BUTTON_TEXT,
+ SEARCH_LABEL_TEXT,
+ TITLE_TEXT,
+} from "../constants/system";
+import { dataStateStore } from "../model";
+import { handleGetSearchMovieData } from "../service/handleSkeletonAndAPI";
+import { createElementWithAttribute, debounceFunc } from "../utils";
+
+import ItemView from "./ItemView";
+
+// SearchBox event ----
+const searchMovie = async () => {
+ const $searchInput = document.querySelector("#search-input");
+ if (!($searchInput instanceof HTMLInputElement)) return;
+ const title = $searchInput.value;
+
+ const $itemView = document.querySelector(".item-view");
+ $itemView?.remove();
+ await handleGetSearchMovieData(title, true);
+ ItemView(TITLE_TEXT.SEARCH(title), dataStateStore.movieData, "search");
+};
+
+const handleInputKeydown = (event: KeyboardEvent) => {
+ const keyCode = event.keyCode || event.which;
+ const { target } = event;
+
+ if (!(target instanceof HTMLInputElement)) return;
+
+ if (keyCode === ENTER_KEYCODE) {
+ debounceFunc(() => searchMovie());
+ }
+};
+
+//--- SearchBox event
+// make SearchBox ---
+const Label = () => {
+ const $label = createElementWithAttribute("label", {
+ forId: "search-input",
+ class: "screen-only",
+ });
+ $label.textContent = SEARCH_LABEL_TEXT;
+
+ return $label;
+};
+
+const Input = () => {
+ const $input = createElementWithAttribute("input", {
+ id: "search-input",
+ type: "text",
+ placeholder: "검색",
+ });
+ if ($input instanceof HTMLInputElement) {
+ $input.addEventListener("keydown", handleInputKeydown);
+ }
+
+ return $input;
+};
+
+const InputBox = () => {
+ const $div = document.createElement("div");
+
+ $div.appendChild(Label());
+ $div.appendChild(Input());
+
+ return $div;
+};
+
+const Button = () => {
+ const $button = createElementWithAttribute("button", {
+ class: "search-button",
+ });
+ $button.textContent = SEARCH_BUTTON_TEXT;
+ $button.addEventListener("click", (event) => {
+ event.stopPropagation();
+ debounceFunc(() => searchMovie());
+ });
+
+ return $button;
+};
+
+const SearchBox = () => {
+ const $searchBox = createElementWithAttribute("div", {
+ class: "search-box",
+ });
+ $searchBox.appendChild(InputBox());
+ $searchBox.appendChild(Button());
+
+ return $searchBox;
+};
+export default SearchBox;
diff --git a/src/components/SkeletonList.ts b/src/components/SkeletonList.ts
new file mode 100644
index 000000000..3d3af2332
--- /dev/null
+++ b/src/components/SkeletonList.ts
@@ -0,0 +1,76 @@
+import { createElementWithAttribute } from "../utils";
+
+const SkeletonImg = ($card: HTMLElement) => {
+ $card.appendChild(
+ createElementWithAttribute("div", {
+ class: "item-thumbnail skeleton",
+ }),
+ );
+};
+
+const SkeletonTitle = ($card: HTMLElement) => {
+ $card.appendChild(
+ createElementWithAttribute("div", {
+ class: "item-title skeleton",
+ }),
+ );
+};
+
+const SkeletonScore = ($card: HTMLElement) => {
+ $card.appendChild(
+ createElementWithAttribute("div", {
+ class: "item-score skeleton",
+ }),
+ );
+};
+
+const SkeletonCard = () => {
+ const $card = createElementWithAttribute("div", { class: "item-card" });
+ SkeletonImg($card);
+ SkeletonTitle($card);
+ SkeletonScore($card);
+
+ return $card;
+};
+
+const Skeleton = () => {
+ const $skeleton = document.createElement("li");
+
+ const $card = SkeletonCard();
+
+ $skeleton.appendChild($card);
+
+ return $skeleton;
+};
+
+const SkeletonListTitle = () => {
+ const $title = createElementWithAttribute("h2", { class: "list-title" });
+
+ $title.textContent = "지금 인기 있는 영화";
+
+ return $title;
+};
+
+const SkeletonList = () => {
+ const $ul = createElementWithAttribute("ul", {
+ class: "item-list skeleton-list",
+ });
+
+ Array.from({ length: 12 }).forEach(() => {
+ $ul.appendChild(Skeleton());
+ });
+
+ return $ul;
+};
+
+const renderSkeletonView = () => {
+ const $main = document.querySelector("main");
+ const $section = createElementWithAttribute("section", {
+ class: "skeleton-view",
+ });
+
+ $section.appendChild(SkeletonListTitle());
+ $section.appendChild(SkeletonList());
+ $main?.appendChild($section);
+};
+export default renderSkeletonView;
diff --git a/src/components/Title.ts b/src/components/Title.ts
new file mode 100644
index 000000000..34713eaca
--- /dev/null
+++ b/src/components/Title.ts
@@ -0,0 +1,9 @@
+import { createElementWithAttribute } from "../utils";
+
+const Title = (text: string) => {
+ const $title = createElementWithAttribute("h2", { class: "list-title" });
+ $title.textContent = text;
+
+ return $title;
+};
+export default Title;
diff --git a/src/components/ViewContainer.ts b/src/components/ViewContainer.ts
new file mode 100644
index 000000000..12fc2fe7f
--- /dev/null
+++ b/src/components/ViewContainer.ts
@@ -0,0 +1,12 @@
+import { dataStateStore } from "../model";
+import { handleGetPopularMovieData } from "../service/handleSkeletonAndAPI";
+
+import renderItemView from "./ItemView";
+import renderSkeletonView from "./SkeletonList";
+
+const ViewContainer = async () => {
+ renderSkeletonView();
+ await handleGetPopularMovieData();
+ renderItemView("지금 인기 있는 영화", dataStateStore.movieData, "popular");
+};
+export default ViewContainer;
diff --git a/src/config.ts b/src/config.ts
new file mode 100644
index 000000000..50b012ada
--- /dev/null
+++ b/src/config.ts
@@ -0,0 +1,21 @@
+export const API_KEY = process.env.TMDB_API_KEY;
+
+export const ACCESS_TOKEN = process.env.TMDB_ACCESS_TOKEN;
+
+export const BASE_URL = "https://api.themoviedb.org/3";
+
+export const IMAGE_URL = "https://image.tmdb.org/t/p/";
+
+export const options = {
+ method: "GET",
+ headers: {
+ accept: "application/json",
+ Authorization: `Bearer ${ACCESS_TOKEN}`,
+ },
+};
+
+export const endpoint = {
+ popularMovie: (page: number) => `movie/popular?language=ko&page=${page}`,
+ searchMovie: (title: string, page: number) =>
+ `search/movie?query=${title}}&include_adult=false&language=ko&page=${page}`,
+};
diff --git a/src/constants/system.ts b/src/constants/system.ts
new file mode 100644
index 000000000..7b485187f
--- /dev/null
+++ b/src/constants/system.ts
@@ -0,0 +1,23 @@
+export const TITLE_TEXT = {
+ POPULAR: "지금 인기 있는 영화",
+ SEARCH: (title: string) => `"${title}" 검색 결과`,
+};
+
+export const NO_ITEM_TEXT = "검색 결과가 없습니다.";
+
+export const ERROR_VIEW_TEXT =
+ "서버와의 연결이 불안정합니다. 다시 시도해주세요.";
+
+export const MORE_BUTTON_TEXT = "더 보기";
+
+export const SEARCH_BUTTON_TEXT = "검색";
+
+export const SEARCH_LABEL_TEXT = "영화 검색";
+
+export const LOGO_IMG_ALT = "MovieList 로고";
+
+export const STAR_IMG_ALT = "별점";
+
+export const MAX_PAGE = 500;
+
+export const ENTER_KEYCODE = 13;
diff --git a/src/index.js b/src/index.js
index e69de29bb..e11376f3a 100644
--- a/src/index.js
+++ b/src/index.js
@@ -0,0 +1,6 @@
+import "../templates/reset.css";
+import "../templates/common.css";
+
+import App from "./app";
+
+App();
diff --git a/src/model/APIClient.ts b/src/model/APIClient.ts
new file mode 100644
index 000000000..acf7d2f9b
--- /dev/null
+++ b/src/model/APIClient.ts
@@ -0,0 +1,72 @@
+import renderErrorView from "../components/ErrorView";
+import { BASE_URL, endpoint, options } from "../config";
+import { MAX_PAGE } from "../constants/system";
+
+import dataStateStore from "./DataStateStore";
+
+class APIClient {
+ #currentPage = 0;
+
+ #isShowMoreButton = (page: number, totalPage: number) =>
+ page < totalPage && page <= MAX_PAGE;
+
+ #updateCurrentPage = (isResetCurrentPage: boolean) => {
+ if (isResetCurrentPage) this.#currentPage = 1;
+ else this.#currentPage += 1;
+ };
+
+ async getPopularMovieData(isResetCurrentPage: boolean) {
+ this.#updateCurrentPage(isResetCurrentPage);
+ const data = await this.fetchPopularMovie();
+
+ dataStateStore.getTotalMovieData(
+ {
+ movieList: data.results,
+ isShowMoreButton: this.#isShowMoreButton(data.page, data.total_pages),
+ },
+ isResetCurrentPage,
+ );
+ }
+
+ async fetchPopularMovie() {
+ try {
+ const response = await fetch(
+ `${BASE_URL}/${endpoint.popularMovie(this.#currentPage)}`,
+ options,
+ );
+ return await response.json();
+ } catch (error) {
+ renderErrorView();
+ return error;
+ }
+ }
+
+ async getSearchMovieData(isResetCurrentPage: boolean, title: string) {
+ this.#updateCurrentPage(isResetCurrentPage);
+ const data = await this.fetchSearchMovie(title);
+
+ dataStateStore.getTotalMovieData(
+ {
+ movieList: data.results,
+ isShowMoreButton: this.#isShowMoreButton(data.page, data.total_pages),
+ },
+ isResetCurrentPage,
+ );
+ }
+
+ async fetchSearchMovie(title: string) {
+ try {
+ const response = await fetch(
+ `${BASE_URL}/${endpoint.searchMovie(title, this.#currentPage)}`,
+ options,
+ );
+ return await response.json();
+ } catch (error) {
+ renderErrorView();
+ return error;
+ }
+ }
+}
+
+const apiClient = new APIClient();
+export default apiClient;
diff --git a/src/model/DataStateStore.ts b/src/model/DataStateStore.ts
new file mode 100644
index 000000000..a637dc676
--- /dev/null
+++ b/src/model/DataStateStore.ts
@@ -0,0 +1,27 @@
+import { Movie, MovieData } from "../type/movie";
+
+class DataStateStore {
+ #movieList: Movie[] | undefined;
+ #isShowMorButton = true;
+
+ getTotalMovieData(
+ { movieList, isShowMoreButton }: MovieData,
+ resetMovieList: boolean,
+ ) {
+ if (!this.#movieList || resetMovieList) this.#movieList = movieList;
+ else this.#movieList = this.#movieList.concat(movieList);
+
+ this.#isShowMorButton = isShowMoreButton;
+ }
+
+ get movieData() {
+ return {
+ movieList: JSON.parse(JSON.stringify(this.#movieList)) as Movie[],
+ isShowMoreButton: this.#isShowMorButton,
+ };
+ }
+}
+
+const dataStateStore = new DataStateStore();
+
+export default dataStateStore;
diff --git a/src/model/index.ts b/src/model/index.ts
new file mode 100644
index 000000000..fd9ecbb81
--- /dev/null
+++ b/src/model/index.ts
@@ -0,0 +1,4 @@
+import apiClient from "./APIClient";
+import dataStateStore from "./DataStateStore";
+
+export { apiClient, dataStateStore };
diff --git a/src/service/handleSkeletonAndAPI.ts b/src/service/handleSkeletonAndAPI.ts
new file mode 100644
index 000000000..f9ab0c3f0
--- /dev/null
+++ b/src/service/handleSkeletonAndAPI.ts
@@ -0,0 +1,31 @@
+import { apiClient } from "../model";
+
+const removeSkeletonView = ($skeletonView: Element) => {
+ setTimeout(() => {
+ $skeletonView?.classList.remove("on");
+ }, 500);
+};
+
+const handleSkeletonAndAPI = async (apiFun: () => Promise) => {
+ const $skeletonView = document.querySelector(".skeleton-view") as Element;
+ $skeletonView?.classList.add("on");
+ await apiFun();
+ removeSkeletonView($skeletonView);
+};
+
+export const handleGetPopularMovieData = async (
+ isResetCurrentPage: boolean = false,
+) => {
+ await handleSkeletonAndAPI(() =>
+ apiClient.getPopularMovieData(isResetCurrentPage),
+ );
+};
+
+export const handleGetSearchMovieData = async (
+ title: string,
+ isResetCurrentPage: boolean,
+) => {
+ await handleSkeletonAndAPI(() =>
+ apiClient.getSearchMovieData(isResetCurrentPage, title),
+ );
+};
diff --git a/src/type/global.d.ts b/src/type/global.d.ts
new file mode 100644
index 000000000..512c0a71f
--- /dev/null
+++ b/src/type/global.d.ts
@@ -0,0 +1,5 @@
+declare module "*.png";
+declare module "*.jpg";
+declare module "*.jpeg";
+declare module "*.gif";
+declare module "*.svg";
diff --git a/src/type/movie.ts b/src/type/movie.ts
new file mode 100644
index 000000000..f7219cb05
--- /dev/null
+++ b/src/type/movie.ts
@@ -0,0 +1,27 @@
+export interface Movie {
+ adult: boolean;
+ backdrop_path: string;
+ genre_ids: number[];
+ id: number;
+ original_language: string;
+ original_title: string;
+ overview: string;
+ popularity: number;
+ poster_path: string;
+ release_date: string;
+ title: string;
+ video: boolean;
+ vote_average: number;
+ vote_count: number;
+}
+
+export interface MovieData {
+ movieList: Movie[];
+ isShowMoreButton: boolean;
+}
+
+export interface PartialMovieDataForItemView extends Partial {
+ isShowMoreButton: boolean;
+}
+
+export type ListType = "popular" | "search";
diff --git a/src/utils/createElementWithAttribute.ts b/src/utils/createElementWithAttribute.ts
new file mode 100644
index 000000000..007808092
--- /dev/null
+++ b/src/utils/createElementWithAttribute.ts
@@ -0,0 +1,16 @@
+interface Attribute {
+ [key: string]: string;
+}
+
+const createElementWithAttribute = (
+ elementTag: string,
+ attribute: Attribute,
+) => {
+ const $element = document.createElement(elementTag);
+ Object.entries(attribute).forEach(([key, value]) => {
+ $element.setAttribute(key, value);
+ });
+
+ return $element;
+};
+export default createElementWithAttribute;
diff --git a/src/utils/debounceFunc.ts b/src/utils/debounceFunc.ts
new file mode 100644
index 000000000..bb90c828b
--- /dev/null
+++ b/src/utils/debounceFunc.ts
@@ -0,0 +1,9 @@
+let debounce: ReturnType | undefined;
+
+const debounceFunc = (func: () => void) => {
+ if (debounce) {
+ clearTimeout(debounce);
+ }
+ debounce = setTimeout(func, 1000);
+};
+export default debounceFunc;
diff --git a/src/utils/index.ts b/src/utils/index.ts
new file mode 100644
index 000000000..9931931b9
--- /dev/null
+++ b/src/utils/index.ts
@@ -0,0 +1,4 @@
+import createElementWithAttribute from "./createElementWithAttribute";
+import debounceFunc from "./debounceFunc";
+
+export { createElementWithAttribute, debounceFunc };
diff --git a/templates/common.css b/templates/common.css
index b22b31a29..427837a3b 100644
--- a/templates/common.css
+++ b/templates/common.css
@@ -24,12 +24,18 @@ button {
*:focus {
outline: none;
}
+.screen-only {
+ position: absolute;
+ top: -999px;
+ left: -999px;
+}
.item-view,
-.item-test {
+.skeleton-view .item-test {
width: 100%;
}
-.item-view {
+.item-view,
+.skeleton-view {
display: flex;
flex-direction: column;
justify-content: center;
@@ -37,7 +43,7 @@ button {
margin: 0 auto;
}
-.item-view h2 {
+.list-title {
font-size: 2rem;
font-weight: bold;
user-select: none;
@@ -52,7 +58,13 @@ button {
grid-column-gap: 160px;
grid-row-gap: 48px;
}
-
+.item-list.no-item-list {
+ display: block;
+ li {
+ font-size: 24px;
+ text-align: center;
+ }
+}
.item-card {
display: flex;
flex-direction: column;
@@ -62,6 +74,7 @@ button {
border-radius: 8px;
width: 180px;
height: 270px;
+ object-fit: cover;
background-size: contain;
}
@@ -72,6 +85,8 @@ button {
}
.item-score {
+ display: flex;
+ align-items: flex-end;
margin-top: 16px;
font-size: 1.2rem;
}
@@ -79,13 +94,6 @@ button {
.item-score::after {
margin-left: 8px;
}
-
-.item-title.skeleton::after,
-.item-score.skeleton::after {
- font-size: 0;
- content: "loading";
-}
-
.full-width {
width: 100%;
}
@@ -105,6 +113,22 @@ button.primary {
background: #f33f3f;
}
+.more-button {
+ display: none;
+}
+
+.more-button.open {
+ display: block;
+ margin: 0 auto;
+}
+/*skeleton*/
+.skeleton-view {
+ display: none;
+}
+
+.skeleton-view.on {
+ display: grid;
+}
.item-card .skeleton {
background: linear-gradient(-90deg, #aaa, #f0f0f0, #aaa, #f0f0f0);
background-size: 400%;
@@ -112,6 +136,23 @@ button.primary {
border-radius: 8px;
}
+.item-title.skeleton::after,
+.item-score.skeleton::after {
+ font-size: 0;
+ content: "loading";
+}
+
+.error-view {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ height: 100vh;
+ font-size: 1.2rem;
+ font-weight: bold;
+}
+
@keyframes skeleton-animation {
0% {
background-position: 0% 50%;
@@ -146,12 +187,13 @@ header h1 {
}
header > .search-box {
+ display: flex;
background: #fff;
padding: 8px;
border-radius: 4px;
}
-header .search-box > input {
+header .search-box input {
border: 0;
}
@@ -162,3 +204,9 @@ header .search-box > .search-button {
background: url("./search_button.png") transparent no-repeat 0 1px;
background-size: contain;
}
+
+#no-item {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
diff --git a/templates/no_image.svg b/templates/no_image.svg
new file mode 100644
index 000000000..22a2e0a5b
--- /dev/null
+++ b/templates/no_image.svg
@@ -0,0 +1,4 @@
+
diff --git a/tsconfig.json b/tsconfig.json
index 81f029a3d..cd84f0d67 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,103 +1,16 @@
{
"compilerOptions": {
- /* Visit https://aka.ms/tsconfig to read more about this file */
-
- /* Projects */
- // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
- // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
- // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
- // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
- // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
- // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
-
- /* Language and Environment */
- "target": "ES2015", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
- // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
- // "jsx": "preserve", /* Specify what JSX code is generated. */
- // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
- // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
- // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
- // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
- // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
- // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
- // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
- // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
- // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
-
- /* Modules */
- "module": "ESNext", /* Specify what module code is generated. */
- // "rootDir": "./", /* Specify the root folder within your source files. */
- "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
- // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
- // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
- // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
- // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
- // "types": [], /* Specify type package names to be included without being referenced in a source file. */
- // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
- // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
- // "resolveJsonModule": true, /* Enable importing .json files. */
- // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
-
- /* JavaScript Support */
- "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
- // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
- // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
-
- /* Emit */
- // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
- // "declarationMap": true, /* Create sourcemaps for d.ts files. */
- // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
- // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
- // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
- // "outDir": "./", /* Specify an output folder for all emitted files. */
- "removeComments": true, /* Disable emitting comments. */
- // "noEmit": true, /* Disable emitting files from a compilation. */
- // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
- // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
- // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
- // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
- // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
- // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
- // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
- // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
- // "newLine": "crlf", /* Set the newline character for emitting files. */
- // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
- // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
- // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
- // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
- // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
- // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
-
- /* Interop Constraints */
- // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
- // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
- "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
- // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
- "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
-
- /* Type Checking */
- "strict": true, /* Enable all strict type-checking options. */
- "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
- "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
- // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
- // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
- // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
- // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
- // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
- // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
- // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
- // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
- // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
- // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
- // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
- // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
- // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
- // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
- // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
- // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
-
- /* Completeness */
- // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
- "skipLibCheck": true /* Skip type checking all .d.ts files. */
+ "target": "ES2015",
+ "module": "ESNext",
+ "moduleResolution": "node",
+ "allowJs": true,
+ "removeComments": true,
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "strict": true,
+ "noImplicitAny": true,
+ "strictNullChecks": true,
+ "skipLibCheck": true,
+ "outDir": "dist"
}
}
diff --git a/webpack.config.js b/webpack.config.js
index 4a0efabbe..1c2602dec 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,5 +1,5 @@
-const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
+const path = require("path");
const DotEnv = require("dotenv-webpack");
module.exports = {
@@ -14,7 +14,7 @@ module.exports = {
historyApiFallback: true,
},
output: {
- publicPath: "/",
+ // publicPath: "/",
filename: "bundle.js",
path: path.resolve(__dirname, "dist"),
clean: true,