Compare commits
3 Commits
b159597559
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 941578ff29 | |||
| 1e9cc8877f | |||
| 04323d7d01 |
+24
@@ -0,0 +1,24 @@
|
|||||||
|
node_modules/
|
||||||
|
.venv/
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
*.db
|
||||||
|
.env
|
||||||
|
.trae/
|
||||||
|
.vite/
|
||||||
|
dist/
|
||||||
|
|
||||||
|
# Java / Maven
|
||||||
|
target/
|
||||||
|
*.class
|
||||||
|
*.jar
|
||||||
|
*.war
|
||||||
|
*.log
|
||||||
|
.settings/
|
||||||
|
.project
|
||||||
|
.classpath
|
||||||
|
*.iml
|
||||||
|
.idea/
|
||||||
|
*.gradle
|
||||||
|
build/
|
||||||
|
|
||||||
@@ -98,20 +98,20 @@ skillDesk/
|
|||||||
|
|
||||||
- [docs/test-scenarios.md](./docs/test-scenarios.md)
|
- [docs/test-scenarios.md](./docs/test-scenarios.md)
|
||||||
|
|
||||||
## SQLite + FastAPI + Vue CRUD 예제 실행
|
## SQLite + Micronaut + MyBatis + Vue CRUD 예제 실행
|
||||||
|
|
||||||
현재 저장소에는 SQLite의 `messages` 테이블 데이터를 FastAPI가 읽고 쓰며, Vue 화면에서 조회, 추가, 수정, 삭제할 수 있는 최소 CRUD 예제가 포함되어 있습니다.
|
현재 저장소에는 SQLite의 `messages` 테이블 데이터를 Micronaut + MyBatis 가 읽고 쓰며, Vue 화면에서 조회, 추가, 수정, 삭제할 수 있는 최소 CRUD 예제가 포함되어 있습니다.
|
||||||
|
|
||||||
### 1. 백엔드 실행
|
### 1. 백엔드 실행
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 -m venv .venv
|
# backend 디렉토리에서 실행
|
||||||
source .venv/bin/activate
|
cd backend
|
||||||
pip install -r backend/requirements.txt
|
mvn exec:java -Dexec.mainClass=skilldesk.Application -Dmicronaut.server.port=8000
|
||||||
python backend/init_db.py
|
|
||||||
uvicorn backend.main:app --host 127.0.0.1 --port 8000 --reload
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
DB와 테이블, 초기 데이터(`hello world`)는 최초 실행 시 자동 생성됩니다.
|
||||||
|
|
||||||
### 2. 프론트엔드 실행
|
### 2. 프론트엔드 실행
|
||||||
|
|
||||||
새 터미널에서 아래 명령을 실행합니다.
|
새 터미널에서 아래 명령을 실행합니다.
|
||||||
@@ -135,7 +135,7 @@ python3 -m http.server 5173 -d frontend
|
|||||||
#### 백엔드 대체 포트 예시
|
#### 백엔드 대체 포트 예시
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uvicorn backend.main:app --host 127.0.0.1 --port 8001 --reload
|
mvn exec:java -Dexec.mainClass=skilldesk.Application -Dmicronaut.server.port=8001
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 프론트엔드 대체 포트 예시
|
#### 프론트엔드 대체 포트 예시
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 665 B |
Binary file not shown.
|
After Width: | Height: | Size: 628 B |
@@ -0,0 +1,16 @@
|
|||||||
|
html {
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow: -moz-scrollbars-vertical;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
*,
|
||||||
|
*:before,
|
||||||
|
*:after {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
background: #fafafa;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<!-- HTML for static distribution bundle build -->
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Swagger UI</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="index.css" />
|
||||||
|
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
|
||||||
|
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="swagger-ui"></div>
|
||||||
|
<script src="./swagger-ui-bundle.js" charset="UTF-8"> </script>
|
||||||
|
<script src="./swagger-ui-standalone-preset.js" charset="UTF-8"> </script>
|
||||||
|
<script src="./swagger-initializer.js" charset="UTF-8"> </script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
import sqlite3 # SQLite 데이터베이스를 다루기 위한 모듈을 가져온다.
|
|
||||||
from pathlib import Path # 파일 경로를 안전하게 계산하기 위한 모듈을 가져온다.
|
|
||||||
|
|
||||||
DB_PATH = Path(__file__).resolve().parent / "app.db" # 현재 파일 기준으로 데이터베이스 파일 경로를 정한다.
|
|
||||||
|
|
||||||
|
|
||||||
def main() -> None: # 데이터베이스를 초기화하는 메인 함수를 정의한다.
|
|
||||||
connection = sqlite3.connect(DB_PATH) # SQLite 데이터베이스에 연결한다.
|
|
||||||
cursor = connection.cursor() # SQL 실행을 위한 커서를 만든다.
|
|
||||||
cursor.execute("CREATE TABLE IF NOT EXISTS messages (id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT NOT NULL)") # 메시지 테이블이 없으면 생성한다.
|
|
||||||
cursor.execute("DELETE FROM messages") # 예제를 단순하게 유지하기 위해 기존 메시지를 모두 지운다.
|
|
||||||
cursor.execute("INSERT INTO messages (content) VALUES (?)", ("hello world",)) # hello world 예제 데이터를 한 건 추가한다.
|
|
||||||
connection.commit() # 변경 내용을 데이터베이스에 저장한다.
|
|
||||||
connection.close() # 데이터베이스 연결을 닫는다.
|
|
||||||
print(f"Database initialized at: {DB_PATH}") # 초기화된 데이터베이스 경로를 출력한다.
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__": # 현재 파일을 직접 실행했을 때만 초기화 함수를 호출한다.
|
|
||||||
main() # 데이터베이스 초기화를 수행한다.
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
import sqlite3 # SQLite 데이터베이스를 읽고 쓰기 위한 모듈을 가져온다.
|
|
||||||
from pathlib import Path # 데이터베이스 파일 경로를 계산하기 위한 모듈을 가져온다.
|
|
||||||
|
|
||||||
from fastapi import FastAPI, HTTPException # FastAPI 앱과 예외 응답 도구를 가져온다.
|
|
||||||
from fastapi.middleware.cors import CORSMiddleware # 프론트엔드 연동을 위한 CORS 미들웨어를 가져온다.
|
|
||||||
from pydantic import BaseModel # 요청 본문을 검증하기 위한 기본 모델 클래스를 가져온다.
|
|
||||||
|
|
||||||
DB_PATH = Path(__file__).resolve().parent / "app.db" # 현재 파일 기준으로 데이터베이스 파일 경로를 정한다.
|
|
||||||
app = FastAPI(title="SQLite CRUD API") # FastAPI 애플리케이션 인스턴스를 만든다.
|
|
||||||
app.add_middleware(CORSMiddleware, allow_origins=["http://127.0.0.1:5173", "http://localhost:5173"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"]) # Vue 개발 서버에서 API를 호출할 수 있도록 CORS를 허용한다.
|
|
||||||
|
|
||||||
|
|
||||||
class MessagePayload(BaseModel): # 메시지 생성과 수정을 위한 요청 모델을 정의한다.
|
|
||||||
content: str # 요청 본문에서 메시지 내용을 문자열로 받는다.
|
|
||||||
|
|
||||||
|
|
||||||
def ensure_database_exists() -> None: # 데이터베이스 파일 존재 여부를 확인하는 함수를 정의한다.
|
|
||||||
if not DB_PATH.exists(): # 데이터베이스 파일이 아직 생성되지 않았는지 확인한다.
|
|
||||||
raise HTTPException(status_code=500, detail="Database file does not exist. Run backend/init_db.py first.") # 초기화 스크립트 실행이 필요하다는 오류를 반환한다.
|
|
||||||
|
|
||||||
|
|
||||||
def get_connection() -> sqlite3.Connection: # SQLite 연결 객체를 공통으로 만드는 함수를 정의한다.
|
|
||||||
ensure_database_exists() # 데이터베이스 파일이 존재하는지 먼저 확인한다.
|
|
||||||
connection = sqlite3.connect(DB_PATH) # SQLite 데이터베이스에 연결한다.
|
|
||||||
connection.row_factory = sqlite3.Row # 컬럼 이름으로 접근할 수 있도록 Row 팩토리를 지정한다.
|
|
||||||
return connection # 설정이 끝난 연결 객체를 반환한다.
|
|
||||||
|
|
||||||
|
|
||||||
def normalize_content(content: str) -> str: # 메시지 내용을 공통 규칙으로 정리하는 함수를 정의한다.
|
|
||||||
normalized_content = content.strip() # 앞뒤 공백을 제거해 실제 입력값만 남긴다.
|
|
||||||
if not normalized_content: # 공백만 있거나 빈 문자열인 경우를 확인한다.
|
|
||||||
raise HTTPException(status_code=400, detail="Content must not be empty") # 빈 메시지는 허용하지 않는다는 오류를 반환한다.
|
|
||||||
return normalized_content # 검증을 통과한 메시지 내용을 반환한다.
|
|
||||||
|
|
||||||
|
|
||||||
def serialize_message(row: sqlite3.Row) -> dict[str, int | str]: # SQLite 행 데이터를 JSON 응답용 딕셔너리로 바꾸는 함수를 정의한다.
|
|
||||||
return {"id": row["id"], "content": row["content"]} # id와 content만 꺼내서 반환한다.
|
|
||||||
|
|
||||||
|
|
||||||
def read_first_message() -> str: # 데이터베이스에서 첫 번째 메시지를 읽는 함수를 정의한다.
|
|
||||||
with get_connection() as connection: # 데이터베이스 연결을 열고 자동으로 닫히게 한다.
|
|
||||||
row = connection.execute("SELECT content FROM messages ORDER BY id ASC LIMIT 1").fetchone() # 가장 먼저 저장된 메시지 한 건을 조회한다.
|
|
||||||
if row is None: # 조회된 메시지가 없는 경우를 확인한다.
|
|
||||||
raise HTTPException(status_code=404, detail="Message not found") # 메시지가 없다는 404 오류를 반환한다.
|
|
||||||
return row["content"] # 조회한 메시지 내용을 반환한다.
|
|
||||||
|
|
||||||
|
|
||||||
@app.get("/api/message") # 기존 예제와 호환되도록 첫 번째 메시지를 반환하는 GET 엔드포인트를 유지한다.
|
|
||||||
def get_message() -> dict[str, str]: # JSON 응답 형태의 딕셔너리를 반환하는 함수를 정의한다.
|
|
||||||
return {"message": read_first_message()} # 데이터베이스에서 읽은 첫 번째 메시지를 JSON으로 반환한다.
|
|
||||||
|
|
||||||
|
|
||||||
@app.get("/api/messages") # 전체 메시지 목록을 반환하는 GET 엔드포인트를 정의한다.
|
|
||||||
def list_messages() -> list[dict[str, int | str]]: # 메시지 목록을 JSON 배열 형태로 반환하는 함수를 정의한다.
|
|
||||||
with get_connection() as connection: # 데이터베이스 연결을 열고 자동으로 닫히게 한다.
|
|
||||||
rows = connection.execute("SELECT id, content FROM messages ORDER BY id ASC").fetchall() # 저장된 메시지를 id 오름차순으로 모두 조회한다.
|
|
||||||
return [serialize_message(row) for row in rows] # 조회된 모든 행을 직렬화해 반환한다.
|
|
||||||
|
|
||||||
|
|
||||||
@app.post("/api/messages", status_code=201) # 새 메시지를 저장하는 POST 엔드포인트를 정의한다.
|
|
||||||
def create_message(payload: MessagePayload) -> dict[str, int | str]: # 생성된 메시지 정보를 반환하는 함수를 정의한다.
|
|
||||||
normalized_content = normalize_content(payload.content) # 요청 본문의 메시지 내용을 공통 규칙으로 정리한다.
|
|
||||||
with get_connection() as connection: # 데이터베이스 연결을 열고 자동으로 닫히게 한다.
|
|
||||||
cursor = connection.execute("INSERT INTO messages (content) VALUES (?)", (normalized_content,)) # 정리된 메시지 내용을 테이블에 저장한다.
|
|
||||||
connection.commit() # INSERT 결과를 데이터베이스에 반영한다.
|
|
||||||
return {"id": int(cursor.lastrowid), "content": normalized_content} # 생성된 id와 메시지 내용을 응답으로 반환한다.
|
|
||||||
|
|
||||||
|
|
||||||
@app.put("/api/messages/{message_id}") # 기존 메시지를 수정하는 PUT 엔드포인트를 정의한다.
|
|
||||||
def update_message(message_id: int, payload: MessagePayload) -> dict[str, int | str]: # 수정된 메시지 정보를 반환하는 함수를 정의한다.
|
|
||||||
normalized_content = normalize_content(payload.content) # 요청 본문의 메시지 내용을 공통 규칙으로 정리한다.
|
|
||||||
with get_connection() as connection: # 데이터베이스 연결을 열고 자동으로 닫히게 한다.
|
|
||||||
cursor = connection.execute("UPDATE messages SET content = ? WHERE id = ?", (normalized_content, message_id)) # 지정한 id의 메시지 내용을 새 값으로 수정한다.
|
|
||||||
connection.commit() # UPDATE 결과를 데이터베이스에 반영한다.
|
|
||||||
if cursor.rowcount == 0: # 실제로 수정된 행이 없는 경우를 확인한다.
|
|
||||||
raise HTTPException(status_code=404, detail="Message not found") # 없는 메시지라는 404 오류를 반환한다.
|
|
||||||
return {"id": message_id, "content": normalized_content} # 수정된 id와 메시지 내용을 응답으로 반환한다.
|
|
||||||
|
|
||||||
|
|
||||||
@app.delete("/api/messages/{message_id}") # 기존 메시지를 삭제하는 DELETE 엔드포인트를 정의한다.
|
|
||||||
def delete_message(message_id: int) -> dict[str, bool]: # 삭제 성공 여부를 반환하는 함수를 정의한다.
|
|
||||||
with get_connection() as connection: # 데이터베이스 연결을 열고 자동으로 닫히게 한다.
|
|
||||||
cursor = connection.execute("DELETE FROM messages WHERE id = ?", (message_id,)) # 지정한 id의 메시지를 테이블에서 삭제한다.
|
|
||||||
connection.commit() # DELETE 결과를 데이터베이스에 반영한다.
|
|
||||||
if cursor.rowcount == 0: # 실제로 삭제된 행이 없는 경우를 확인한다.
|
|
||||||
raise HTTPException(status_code=404, detail="Message not found") # 없는 메시지라는 404 오류를 반환한다.
|
|
||||||
return {"success": True} # 삭제가 성공했음을 JSON으로 반환한다.
|
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en-US">
|
||||||
|
<head>
|
||||||
|
<title>Swagger UI: OAuth2 Redirect</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
function run () {
|
||||||
|
var oauth2 = window.opener.swaggerUIRedirectOauth2;
|
||||||
|
var sentState = oauth2.state;
|
||||||
|
var redirectUrl = oauth2.redirectUrl;
|
||||||
|
var isValid, qp, arr;
|
||||||
|
|
||||||
|
if (/code|token|error/.test(window.location.hash)) {
|
||||||
|
qp = window.location.hash.substring(1).replace('?', '&');
|
||||||
|
} else {
|
||||||
|
qp = location.search.substring(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
arr = qp.split("&");
|
||||||
|
arr.forEach(function (v,i,_arr) { _arr[i] = '"' + v.replace('=', '":"') + '"';});
|
||||||
|
qp = qp ? JSON.parse('{' + arr.join() + '}',
|
||||||
|
function (key, value) {
|
||||||
|
return key === "" ? value : decodeURIComponent(value);
|
||||||
|
}
|
||||||
|
) : {};
|
||||||
|
|
||||||
|
isValid = qp.state === sentState;
|
||||||
|
|
||||||
|
if ((
|
||||||
|
oauth2.auth.schema.get("flow") === "accessCode" ||
|
||||||
|
oauth2.auth.schema.get("flow") === "authorizationCode" ||
|
||||||
|
oauth2.auth.schema.get("flow") === "authorization_code"
|
||||||
|
) && !oauth2.auth.code) {
|
||||||
|
if (!isValid) {
|
||||||
|
oauth2.errCb({
|
||||||
|
authId: oauth2.auth.name,
|
||||||
|
source: "auth",
|
||||||
|
level: "warning",
|
||||||
|
message: "Authorization may be unsafe, passed state was changed in server. The passed state wasn't returned from auth server."
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (qp.code) {
|
||||||
|
delete oauth2.state;
|
||||||
|
oauth2.auth.code = qp.code;
|
||||||
|
oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl});
|
||||||
|
} else {
|
||||||
|
let oauthErrorMsg;
|
||||||
|
if (qp.error) {
|
||||||
|
oauthErrorMsg = "["+qp.error+"]: " +
|
||||||
|
(qp.error_description ? qp.error_description+ ". " : "no accessCode received from the server. ") +
|
||||||
|
(qp.error_uri ? "More info: "+qp.error_uri : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
oauth2.errCb({
|
||||||
|
authId: oauth2.auth.name,
|
||||||
|
source: "auth",
|
||||||
|
level: "error",
|
||||||
|
message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server."
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl});
|
||||||
|
}
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (document.readyState !== 'loading') {
|
||||||
|
run();
|
||||||
|
} else {
|
||||||
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
run();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+146
@@ -0,0 +1,146 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>skilldesk</groupId>
|
||||||
|
<artifactId>skilldesk-backend</artifactId>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<java.version>21</java.version>
|
||||||
|
<maven.compiler.release>21</maven.compiler.release>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<micronaut.version>4.6.3</micronaut.version>
|
||||||
|
<micronaut.openapi.version>6.12.3</micronaut.openapi.version>
|
||||||
|
<swagger.version>2.2.28</swagger.version>
|
||||||
|
<mybatis.version>3.5.16</mybatis.version>
|
||||||
|
<sqlite.version>3.45.3.0</sqlite.version>
|
||||||
|
<exec.mainClass>skilldesk.Application</exec.mainClass>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micronaut.platform</groupId>
|
||||||
|
<artifactId>micronaut-platform</artifactId>
|
||||||
|
<version>${micronaut.version}</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micronaut</groupId>
|
||||||
|
<artifactId>micronaut-inject</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micronaut</groupId>
|
||||||
|
<artifactId>micronaut-http-server-netty</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micronaut</groupId>
|
||||||
|
<artifactId>micronaut-http-server</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micronaut</groupId>
|
||||||
|
<artifactId>micronaut-jackson-databind</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micronaut</groupId>
|
||||||
|
<artifactId>micronaut-context</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-dbcp2</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>ch.qos.logback</groupId>
|
||||||
|
<artifactId>logback-classic</artifactId>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mybatis</groupId>
|
||||||
|
<artifactId>mybatis</artifactId>
|
||||||
|
<version>${mybatis.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micronaut.openapi</groupId>
|
||||||
|
<artifactId>micronaut-openapi-annotations</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.micronaut.openapi</groupId>
|
||||||
|
<artifactId>micronaut-openapi</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.swagger.core.v3</groupId>
|
||||||
|
<artifactId>swagger-annotations</artifactId>
|
||||||
|
<version>${swagger.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.xerial</groupId>
|
||||||
|
<artifactId>sqlite-jdbc</artifactId>
|
||||||
|
<version>${sqlite.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>io.micronaut.maven</groupId>
|
||||||
|
<artifactId>micronaut-maven-plugin</artifactId>
|
||||||
|
<version>4.7.2</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>exec-maven-plugin</artifactId>
|
||||||
|
<version>3.6.3</version>
|
||||||
|
<configuration>
|
||||||
|
<mainClass>${exec.mainClass}</mainClass>
|
||||||
|
<includePluginDependencies>true</includePluginDependencies>
|
||||||
|
<includeProjectDependencies>true</includeProjectDependencies>
|
||||||
|
<classpathScope>runtime</classpathScope>
|
||||||
|
<systemProperties>
|
||||||
|
<systemProperty>
|
||||||
|
<key>micronaut.server.port</key>
|
||||||
|
<value>8000</value>
|
||||||
|
</systemProperty>
|
||||||
|
</systemProperties>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.13.0</version>
|
||||||
|
<configuration>
|
||||||
|
<annotationProcessorPaths>
|
||||||
|
<path>
|
||||||
|
<groupId>io.micronaut</groupId>
|
||||||
|
<artifactId>micronaut-inject-java</artifactId>
|
||||||
|
<version>${micronaut.version}</version>
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<groupId>io.micronaut</groupId>
|
||||||
|
<artifactId>micronaut-http-validation</artifactId>
|
||||||
|
<version>${micronaut.version}</version>
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<groupId>io.micronaut.openapi</groupId>
|
||||||
|
<artifactId>micronaut-openapi-annotations</artifactId>
|
||||||
|
<version>${micronaut.openapi.version}</version>
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<groupId>io.micronaut.openapi</groupId>
|
||||||
|
<artifactId>micronaut-openapi</artifactId>
|
||||||
|
<version>${micronaut.openapi.version}</version>
|
||||||
|
</path>
|
||||||
|
</annotationProcessorPaths>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
fastapi
|
|
||||||
uvicorn
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package skilldesk;
|
||||||
|
|
||||||
|
import io.micronaut.runtime.Micronaut;
|
||||||
|
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
|
||||||
|
import io.swagger.v3.oas.annotations.info.Contact;
|
||||||
|
import io.swagger.v3.oas.annotations.info.Info;
|
||||||
|
|
||||||
|
@OpenAPIDefinition(
|
||||||
|
info = @Info(
|
||||||
|
title = "skillDesk API",
|
||||||
|
version = "1.0.0",
|
||||||
|
description = "SQLite + Micronaut + MyBatis CRUD API",
|
||||||
|
contact = @Contact(name = "skillDesk")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
public class Application {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Micronaut.run(Application.class, args);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package skilldesk.config;
|
||||||
|
|
||||||
|
import io.micronaut.context.event.ApplicationEventListener;
|
||||||
|
import io.micronaut.context.event.StartupEvent;
|
||||||
|
import jakarta.inject.Singleton;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.Statement;
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public class DataInitializer implements ApplicationEventListener<StartupEvent> {
|
||||||
|
|
||||||
|
private final DataSource dataSource;
|
||||||
|
|
||||||
|
public DataInitializer(DataSource dataSource) {
|
||||||
|
this.dataSource = dataSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onApplicationEvent(StartupEvent event) {
|
||||||
|
try (Connection conn = dataSource.getConnection();
|
||||||
|
Statement stmt = conn.createStatement()) {
|
||||||
|
|
||||||
|
stmt.executeUpdate(
|
||||||
|
"CREATE TABLE IF NOT EXISTS messages (" +
|
||||||
|
"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
|
||||||
|
"content TEXT NOT NULL)"
|
||||||
|
);
|
||||||
|
|
||||||
|
java.sql.ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM messages");
|
||||||
|
rs.next();
|
||||||
|
if (rs.getInt(1) == 0) {
|
||||||
|
stmt.executeUpdate("INSERT INTO messages (content) VALUES ('hello world')");
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("Failed to initialize database", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package skilldesk.config;
|
||||||
|
|
||||||
|
import io.micronaut.context.annotation.Bean;
|
||||||
|
import io.micronaut.context.annotation.Factory;
|
||||||
|
import jakarta.inject.Singleton;
|
||||||
|
import org.apache.commons.dbcp2.BasicDataSource;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
@Factory
|
||||||
|
public class DataSourceConfig {
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public DataSource dataSource() {
|
||||||
|
BasicDataSource ds = new BasicDataSource();
|
||||||
|
ds.setUrl("jdbc:sqlite:app.db");
|
||||||
|
ds.setDriverClassName("org.sqlite.JDBC");
|
||||||
|
return ds;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package skilldesk.config;
|
||||||
|
|
||||||
|
import io.micronaut.context.annotation.Bean;
|
||||||
|
import io.micronaut.context.annotation.Factory;
|
||||||
|
import jakarta.inject.Singleton;
|
||||||
|
import org.apache.ibatis.mapping.Environment;
|
||||||
|
import org.apache.ibatis.session.Configuration;
|
||||||
|
import org.apache.ibatis.session.SqlSessionFactory;
|
||||||
|
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
|
||||||
|
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
|
||||||
|
import skilldesk.mapper.MessageMapper;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
@Factory
|
||||||
|
public class MyBatisConfig {
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) {
|
||||||
|
Environment environment = new Environment("skilldesk", new JdbcTransactionFactory(), dataSource);
|
||||||
|
Configuration configuration = new Configuration(environment);
|
||||||
|
configuration.addMapper(MessageMapper.class);
|
||||||
|
return new SqlSessionFactoryBuilder().build(configuration);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package skilldesk.config;
|
||||||
|
|
||||||
|
import io.micronaut.http.MutableHttpResponse;
|
||||||
|
import io.micronaut.http.server.exceptions.response.Error;
|
||||||
|
import io.micronaut.http.server.exceptions.response.ErrorContext;
|
||||||
|
import io.micronaut.http.server.exceptions.response.ErrorResponseProcessor;
|
||||||
|
import jakarta.inject.Singleton;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public class SimpleErrorResponseProcessor implements ErrorResponseProcessor<Object> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MutableHttpResponse<Object> processResponse(ErrorContext errorContext, MutableHttpResponse<?> response) {
|
||||||
|
Optional<Error> error = errorContext.getErrors().stream().findFirst();
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
MutableHttpResponse<Object> resp = (MutableHttpResponse<Object>) response;
|
||||||
|
if (error.isPresent()) {
|
||||||
|
resp.body(Map.of("detail", error.get().getMessage()));
|
||||||
|
}
|
||||||
|
return resp;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
package skilldesk.controller;
|
||||||
|
|
||||||
|
import io.micronaut.http.HttpStatus;
|
||||||
|
import io.micronaut.http.annotation.Body;
|
||||||
|
import io.micronaut.http.annotation.Controller;
|
||||||
|
import io.micronaut.http.annotation.Delete;
|
||||||
|
import io.micronaut.http.annotation.Get;
|
||||||
|
import io.micronaut.http.annotation.Post;
|
||||||
|
import io.micronaut.http.annotation.Put;
|
||||||
|
import io.micronaut.http.annotation.Status;
|
||||||
|
import io.micronaut.http.exceptions.HttpStatusException;
|
||||||
|
import skilldesk.entity.Message;
|
||||||
|
import skilldesk.mapper.MessageRepository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Controller("/api")
|
||||||
|
public class MessageController {
|
||||||
|
|
||||||
|
private final MessageRepository messageRepository;
|
||||||
|
|
||||||
|
public MessageController(MessageRepository messageRepository) {
|
||||||
|
this.messageRepository = messageRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get("/message")
|
||||||
|
public Map<String, String> getMessage() {
|
||||||
|
Message message = messageRepository.findFirst();
|
||||||
|
if (message == null) {
|
||||||
|
throw new HttpStatusException(HttpStatus.NOT_FOUND, "Message not found");
|
||||||
|
}
|
||||||
|
return Map.of("message", message.getContent());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get("/messages")
|
||||||
|
public List<Message> listMessages() {
|
||||||
|
return messageRepository.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post("/messages")
|
||||||
|
@Status(HttpStatus.CREATED)
|
||||||
|
public Message createMessage(@Body Map<String, String> body) {
|
||||||
|
String content = body.get("content");
|
||||||
|
if (content == null || content.strip().isEmpty()) {
|
||||||
|
throw new HttpStatusException(HttpStatus.BAD_REQUEST, "Content must not be empty");
|
||||||
|
}
|
||||||
|
Message message = new Message(content.strip());
|
||||||
|
messageRepository.insert(message);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Put("/messages/{id}")
|
||||||
|
public Message updateMessage(Integer id, @Body Map<String, String> body) {
|
||||||
|
String content = body.get("content");
|
||||||
|
if (content == null || content.strip().isEmpty()) {
|
||||||
|
throw new HttpStatusException(HttpStatus.BAD_REQUEST, "Content must not be empty");
|
||||||
|
}
|
||||||
|
int updated = messageRepository.update(id, content.strip());
|
||||||
|
if (updated == 0) {
|
||||||
|
throw new HttpStatusException(HttpStatus.NOT_FOUND, "Message not found");
|
||||||
|
}
|
||||||
|
return new Message(id, content.strip());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Delete("/messages/{id}")
|
||||||
|
public Map<String, Boolean> deleteMessage(Integer id) {
|
||||||
|
int deleted = messageRepository.deleteById(id);
|
||||||
|
if (deleted == 0) {
|
||||||
|
throw new HttpStatusException(HttpStatus.NOT_FOUND, "Message not found");
|
||||||
|
}
|
||||||
|
return Map.of("success", true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package skilldesk.controller;
|
||||||
|
|
||||||
|
import io.micronaut.http.HttpRequest;
|
||||||
|
import io.micronaut.http.MediaType;
|
||||||
|
import io.micronaut.http.annotation.Controller;
|
||||||
|
import io.micronaut.http.annotation.Get;
|
||||||
|
import io.micronaut.http.annotation.Produces;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Controller("/")
|
||||||
|
public class RootController {
|
||||||
|
|
||||||
|
@Get
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
public Map<String, Object> index(HttpRequest<?> request) {
|
||||||
|
String host = request.getHeaders().get("Host");
|
||||||
|
String base = "http://" + host;
|
||||||
|
return Map.of(
|
||||||
|
"service", "skillDesk API",
|
||||||
|
"endpoints", List.of(
|
||||||
|
Map.of("method", "GET", "url", base + "/api/message", "description", "첫 번째 메시지 조회"),
|
||||||
|
Map.of("method", "GET", "url", base + "/api/messages", "description", "전체 메시지 목록 조회"),
|
||||||
|
Map.of("method", "POST", "url", base + "/api/messages", "description", "새 메시지 생성"),
|
||||||
|
Map.of("method", "PUT", "url", base + "/api/messages/{id}", "description", "메시지 수정"),
|
||||||
|
Map.of("method", "DELETE", "url", base + "/api/messages/{id}", "description", "메시지 삭제")
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package skilldesk.entity;
|
||||||
|
|
||||||
|
public class Message {
|
||||||
|
private Integer id;
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
public Message() {}
|
||||||
|
|
||||||
|
public Message(String content) {
|
||||||
|
this.content = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Message(Integer id, String content) {
|
||||||
|
this.id = id;
|
||||||
|
this.content = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContent(String content) {
|
||||||
|
this.content = content;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package skilldesk.mapper;
|
||||||
|
|
||||||
|
import org.apache.ibatis.annotations.Delete;
|
||||||
|
import org.apache.ibatis.annotations.Insert;
|
||||||
|
import org.apache.ibatis.annotations.Options;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Result;
|
||||||
|
import org.apache.ibatis.annotations.Results;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
import org.apache.ibatis.annotations.Update;
|
||||||
|
import skilldesk.entity.Message;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface MessageMapper {
|
||||||
|
|
||||||
|
@Select("SELECT id, content FROM messages ORDER BY id ASC LIMIT 1")
|
||||||
|
@Results({
|
||||||
|
@Result(property = "id", column = "id"),
|
||||||
|
@Result(property = "content", column = "content")
|
||||||
|
})
|
||||||
|
Message findFirst();
|
||||||
|
|
||||||
|
@Select("SELECT id, content FROM messages ORDER BY id ASC")
|
||||||
|
@Results({
|
||||||
|
@Result(property = "id", column = "id"),
|
||||||
|
@Result(property = "content", column = "content")
|
||||||
|
})
|
||||||
|
List<Message> findAll();
|
||||||
|
|
||||||
|
@Insert("INSERT INTO messages (content) VALUES (#{content})")
|
||||||
|
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
|
||||||
|
void insert(Message message);
|
||||||
|
|
||||||
|
@Update("UPDATE messages SET content = #{content} WHERE id = #{id}")
|
||||||
|
int update(@Param("id") Integer id, @Param("content") String content);
|
||||||
|
|
||||||
|
@Delete("DELETE FROM messages WHERE id = #{id}")
|
||||||
|
int deleteById(Integer id);
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package skilldesk.mapper;
|
||||||
|
|
||||||
|
import jakarta.inject.Singleton;
|
||||||
|
import org.apache.ibatis.session.SqlSession;
|
||||||
|
import org.apache.ibatis.session.SqlSessionFactory;
|
||||||
|
import skilldesk.entity.Message;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public class MessageRepository {
|
||||||
|
|
||||||
|
private final SqlSessionFactory sqlSessionFactory;
|
||||||
|
|
||||||
|
public MessageRepository(SqlSessionFactory sqlSessionFactory) {
|
||||||
|
this.sqlSessionFactory = sqlSessionFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Message findFirst() {
|
||||||
|
try (SqlSession session = sqlSessionFactory.openSession()) {
|
||||||
|
return session.getMapper(MessageMapper.class).findFirst();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Message> findAll() {
|
||||||
|
try (SqlSession session = sqlSessionFactory.openSession()) {
|
||||||
|
return session.getMapper(MessageMapper.class).findAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void insert(Message message) {
|
||||||
|
try (SqlSession session = sqlSessionFactory.openSession(true)) {
|
||||||
|
session.getMapper(MessageMapper.class).insert(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int update(Integer id, String content) {
|
||||||
|
try (SqlSession session = sqlSessionFactory.openSession(true)) {
|
||||||
|
return session.getMapper(MessageMapper.class).update(id, content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int deleteById(Integer id) {
|
||||||
|
try (SqlSession session = sqlSessionFactory.openSession(true)) {
|
||||||
|
return session.getMapper(MessageMapper.class).deleteById(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
micronaut:
|
||||||
|
application:
|
||||||
|
name: skilldesk-backend
|
||||||
|
server:
|
||||||
|
port: 8000
|
||||||
|
cors:
|
||||||
|
enabled: true
|
||||||
|
configurations:
|
||||||
|
all:
|
||||||
|
allowedOrigins:
|
||||||
|
- http://127.0.0.1:5173
|
||||||
|
- http://localhost:5173
|
||||||
|
allowedMethods:
|
||||||
|
- GET
|
||||||
|
- POST
|
||||||
|
- PUT
|
||||||
|
- DELETE
|
||||||
|
- OPTIONS
|
||||||
|
allowedHeaders:
|
||||||
|
- Content-Type
|
||||||
|
router:
|
||||||
|
static-resources:
|
||||||
|
swagger:
|
||||||
|
paths: classpath:META-INF/swagger
|
||||||
|
mapping: /swagger/**
|
||||||
|
swagger-ui:
|
||||||
|
paths: classpath:swagger-ui
|
||||||
|
mapping: /swagger-ui/**
|
||||||
|
|
||||||
|
openapi:
|
||||||
|
micronaut:
|
||||||
|
enabled: true
|
||||||
|
server:
|
||||||
|
url: http://127.0.0.1:8000
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
<root level="info">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 665 B |
Binary file not shown.
|
After Width: | Height: | Size: 628 B |
@@ -0,0 +1,16 @@
|
|||||||
|
html {
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow: -moz-scrollbars-vertical;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
*,
|
||||||
|
*:before,
|
||||||
|
*:after {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
background: #fafafa;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<!-- HTML for static distribution bundle build -->
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Swagger UI</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="index.css" />
|
||||||
|
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
|
||||||
|
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="swagger-ui"></div>
|
||||||
|
<script src="./swagger-ui-bundle.js" charset="UTF-8"> </script>
|
||||||
|
<script src="./swagger-ui-standalone-preset.js" charset="UTF-8"> </script>
|
||||||
|
<script src="./swagger-initializer.js" charset="UTF-8"> </script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en-US">
|
||||||
|
<head>
|
||||||
|
<title>Swagger UI: OAuth2 Redirect</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
function run () {
|
||||||
|
var oauth2 = window.opener.swaggerUIRedirectOauth2;
|
||||||
|
var sentState = oauth2.state;
|
||||||
|
var redirectUrl = oauth2.redirectUrl;
|
||||||
|
var isValid, qp, arr;
|
||||||
|
|
||||||
|
if (/code|token|error/.test(window.location.hash)) {
|
||||||
|
qp = window.location.hash.substring(1).replace('?', '&');
|
||||||
|
} else {
|
||||||
|
qp = location.search.substring(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
arr = qp.split("&");
|
||||||
|
arr.forEach(function (v,i,_arr) { _arr[i] = '"' + v.replace('=', '":"') + '"';});
|
||||||
|
qp = qp ? JSON.parse('{' + arr.join() + '}',
|
||||||
|
function (key, value) {
|
||||||
|
return key === "" ? value : decodeURIComponent(value);
|
||||||
|
}
|
||||||
|
) : {};
|
||||||
|
|
||||||
|
isValid = qp.state === sentState;
|
||||||
|
|
||||||
|
if ((
|
||||||
|
oauth2.auth.schema.get("flow") === "accessCode" ||
|
||||||
|
oauth2.auth.schema.get("flow") === "authorizationCode" ||
|
||||||
|
oauth2.auth.schema.get("flow") === "authorization_code"
|
||||||
|
) && !oauth2.auth.code) {
|
||||||
|
if (!isValid) {
|
||||||
|
oauth2.errCb({
|
||||||
|
authId: oauth2.auth.name,
|
||||||
|
source: "auth",
|
||||||
|
level: "warning",
|
||||||
|
message: "Authorization may be unsafe, passed state was changed in server. The passed state wasn't returned from auth server."
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (qp.code) {
|
||||||
|
delete oauth2.state;
|
||||||
|
oauth2.auth.code = qp.code;
|
||||||
|
oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl});
|
||||||
|
} else {
|
||||||
|
let oauthErrorMsg;
|
||||||
|
if (qp.error) {
|
||||||
|
oauthErrorMsg = "["+qp.error+"]: " +
|
||||||
|
(qp.error_description ? qp.error_description+ ". " : "no accessCode received from the server. ") +
|
||||||
|
(qp.error_uri ? "More info: "+qp.error_uri : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
oauth2.errCb({
|
||||||
|
authId: oauth2.auth.name,
|
||||||
|
source: "auth",
|
||||||
|
level: "error",
|
||||||
|
message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server."
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl});
|
||||||
|
}
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (document.readyState !== 'loading') {
|
||||||
|
run();
|
||||||
|
} else {
|
||||||
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
run();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
window.onload = function() {
|
||||||
|
//<editor-fold desc="Changeable Configuration Block">
|
||||||
|
|
||||||
|
// the following lines will be replaced by docker/configurator, when it runs in a docker-container
|
||||||
|
window.ui = SwaggerUIBundle({
|
||||||
|
url: "/swagger/skilldesk-api-1.0.0.yml",
|
||||||
|
dom_id: '#swagger-ui',
|
||||||
|
deepLinking: true,
|
||||||
|
presets: [
|
||||||
|
SwaggerUIBundle.presets.apis,
|
||||||
|
SwaggerUIStandalonePreset
|
||||||
|
],
|
||||||
|
plugins: [
|
||||||
|
SwaggerUIBundle.plugins.DownloadUrl
|
||||||
|
],
|
||||||
|
layout: "StandaloneLayout"
|
||||||
|
});
|
||||||
|
|
||||||
|
//</editor-fold>
|
||||||
|
};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,20 @@
|
|||||||
|
window.onload = function() {
|
||||||
|
//<editor-fold desc="Changeable Configuration Block">
|
||||||
|
|
||||||
|
// the following lines will be replaced by docker/configurator, when it runs in a docker-container
|
||||||
|
window.ui = SwaggerUIBundle({
|
||||||
|
url: "https://petstore.swagger.io/v2/swagger.json",
|
||||||
|
dom_id: '#swagger-ui',
|
||||||
|
deepLinking: true,
|
||||||
|
presets: [
|
||||||
|
SwaggerUIBundle.presets.apis,
|
||||||
|
SwaggerUIStandalonePreset
|
||||||
|
],
|
||||||
|
plugins: [
|
||||||
|
SwaggerUIBundle.plugins.DownloadUrl
|
||||||
|
],
|
||||||
|
layout: "StandaloneLayout"
|
||||||
|
});
|
||||||
|
|
||||||
|
//</editor-fold>
|
||||||
|
};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
@@ -1 +0,0 @@
|
|||||||
../esbuild/bin/esbuild
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
../nanoid/bin/nanoid.cjs
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
../@babel/parser/bin/babel-parser.js
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
../rollup/dist/bin/rollup
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
../vite/bin/vite.js
|
|
||||||
-443
@@ -1,443 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "sqlite-fastapi-vue-hello",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"lockfileVersion": 3,
|
|
||||||
"requires": true,
|
|
||||||
"packages": {
|
|
||||||
"node_modules/@babel/helper-string-parser": {
|
|
||||||
"version": "7.29.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
|
|
||||||
"integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6.9.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@babel/helper-validator-identifier": {
|
|
||||||
"version": "7.29.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
|
|
||||||
"integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6.9.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@babel/parser": {
|
|
||||||
"version": "7.29.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz",
|
|
||||||
"integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@babel/types": "^7.29.7"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"parser": "bin/babel-parser.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@babel/types": {
|
|
||||||
"version": "7.29.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz",
|
|
||||||
"integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@babel/helper-string-parser": "^7.29.7",
|
|
||||||
"@babel/helper-validator-identifier": "^7.29.7"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6.9.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@esbuild/darwin-x64": {
|
|
||||||
"version": "0.21.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
|
|
||||||
"integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"darwin"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@jridgewell/sourcemap-codec": {
|
|
||||||
"version": "1.5.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
|
|
||||||
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/@types/estree": {
|
|
||||||
"version": "1.0.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
|
|
||||||
"integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/@vue/compiler-core": {
|
|
||||||
"version": "3.5.35",
|
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.35.tgz",
|
|
||||||
"integrity": "sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@babel/parser": "^7.29.3",
|
|
||||||
"@vue/shared": "3.5.35",
|
|
||||||
"entities": "^7.0.1",
|
|
||||||
"estree-walker": "^2.0.2",
|
|
||||||
"source-map-js": "^1.2.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@vue/compiler-dom": {
|
|
||||||
"version": "3.5.35",
|
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.35.tgz",
|
|
||||||
"integrity": "sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@vue/compiler-core": "3.5.35",
|
|
||||||
"@vue/shared": "3.5.35"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@vue/compiler-sfc": {
|
|
||||||
"version": "3.5.35",
|
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.35.tgz",
|
|
||||||
"integrity": "sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@babel/parser": "^7.29.3",
|
|
||||||
"@vue/compiler-core": "3.5.35",
|
|
||||||
"@vue/compiler-dom": "3.5.35",
|
|
||||||
"@vue/compiler-ssr": "3.5.35",
|
|
||||||
"@vue/shared": "3.5.35",
|
|
||||||
"estree-walker": "^2.0.2",
|
|
||||||
"magic-string": "^0.30.21",
|
|
||||||
"postcss": "^8.5.15",
|
|
||||||
"source-map-js": "^1.2.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@vue/compiler-ssr": {
|
|
||||||
"version": "3.5.35",
|
|
||||||
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.35.tgz",
|
|
||||||
"integrity": "sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@vue/compiler-dom": "3.5.35",
|
|
||||||
"@vue/shared": "3.5.35"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@vue/reactivity": {
|
|
||||||
"version": "3.5.35",
|
|
||||||
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.35.tgz",
|
|
||||||
"integrity": "sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@vue/shared": "3.5.35"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@vue/runtime-core": {
|
|
||||||
"version": "3.5.35",
|
|
||||||
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.35.tgz",
|
|
||||||
"integrity": "sha512-A/xFNX9loIcWDygeQuNCfKuh0CoYBzxhqEMNah5TSFg9Z53DrFYEN2qi5CU9necjM1OWYegYREUTHmXTmhfXtg==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@vue/reactivity": "3.5.35",
|
|
||||||
"@vue/shared": "3.5.35"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@vue/runtime-dom": {
|
|
||||||
"version": "3.5.35",
|
|
||||||
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.35.tgz",
|
|
||||||
"integrity": "sha512-odrJ1C391dbGnyDRh8U+rnP7J2amIEzfmRk5vXy7xi3aZhEXofTvpi0T4HJb6jlNqQZTNPR5MPHSB3RHNkIORA==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@vue/reactivity": "3.5.35",
|
|
||||||
"@vue/runtime-core": "3.5.35",
|
|
||||||
"@vue/shared": "3.5.35",
|
|
||||||
"csstype": "^3.2.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@vue/server-renderer": {
|
|
||||||
"version": "3.5.35",
|
|
||||||
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.35.tgz",
|
|
||||||
"integrity": "sha512-NkebSOYdB97wi8OQcO3HqzZSlymJi/aWsN/7h74OSVhRTm6qGs3Jp3e0rCXynmWwSlKeRrnlIug+ilYoHBmQDA==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@vue/compiler-ssr": "3.5.35",
|
|
||||||
"@vue/shared": "3.5.35"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"vue": "3.5.35"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@vue/shared": {
|
|
||||||
"version": "3.5.35",
|
|
||||||
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.35.tgz",
|
|
||||||
"integrity": "sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/csstype": {
|
|
||||||
"version": "3.2.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
|
|
||||||
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/entities": {
|
|
||||||
"version": "7.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
|
|
||||||
"integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
|
|
||||||
"license": "BSD-2-Clause",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.12"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/fb55/entities?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/esbuild": {
|
|
||||||
"version": "0.21.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
|
|
||||||
"integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
|
|
||||||
"dev": true,
|
|
||||||
"hasInstallScript": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"bin": {
|
|
||||||
"esbuild": "bin/esbuild"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"@esbuild/aix-ppc64": "0.21.5",
|
|
||||||
"@esbuild/android-arm": "0.21.5",
|
|
||||||
"@esbuild/android-arm64": "0.21.5",
|
|
||||||
"@esbuild/android-x64": "0.21.5",
|
|
||||||
"@esbuild/darwin-arm64": "0.21.5",
|
|
||||||
"@esbuild/darwin-x64": "0.21.5",
|
|
||||||
"@esbuild/freebsd-arm64": "0.21.5",
|
|
||||||
"@esbuild/freebsd-x64": "0.21.5",
|
|
||||||
"@esbuild/linux-arm": "0.21.5",
|
|
||||||
"@esbuild/linux-arm64": "0.21.5",
|
|
||||||
"@esbuild/linux-ia32": "0.21.5",
|
|
||||||
"@esbuild/linux-loong64": "0.21.5",
|
|
||||||
"@esbuild/linux-mips64el": "0.21.5",
|
|
||||||
"@esbuild/linux-ppc64": "0.21.5",
|
|
||||||
"@esbuild/linux-riscv64": "0.21.5",
|
|
||||||
"@esbuild/linux-s390x": "0.21.5",
|
|
||||||
"@esbuild/linux-x64": "0.21.5",
|
|
||||||
"@esbuild/netbsd-x64": "0.21.5",
|
|
||||||
"@esbuild/openbsd-x64": "0.21.5",
|
|
||||||
"@esbuild/sunos-x64": "0.21.5",
|
|
||||||
"@esbuild/win32-arm64": "0.21.5",
|
|
||||||
"@esbuild/win32-ia32": "0.21.5",
|
|
||||||
"@esbuild/win32-x64": "0.21.5"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/estree-walker": {
|
|
||||||
"version": "2.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
|
|
||||||
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/magic-string": {
|
|
||||||
"version": "0.30.21",
|
|
||||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
|
|
||||||
"integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@jridgewell/sourcemap-codec": "^1.5.5"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/nanoid": {
|
|
||||||
"version": "3.3.12",
|
|
||||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz",
|
|
||||||
"integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==",
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"type": "github",
|
|
||||||
"url": "https://github.com/sponsors/ai"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"bin": {
|
|
||||||
"nanoid": "bin/nanoid.cjs"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/picocolors": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
|
||||||
"license": "ISC"
|
|
||||||
},
|
|
||||||
"node_modules/postcss": {
|
|
||||||
"version": "8.5.15",
|
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz",
|
|
||||||
"integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==",
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"type": "opencollective",
|
|
||||||
"url": "https://opencollective.com/postcss/"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "tidelift",
|
|
||||||
"url": "https://tidelift.com/funding/github/npm/postcss"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "github",
|
|
||||||
"url": "https://github.com/sponsors/ai"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"nanoid": "^3.3.12",
|
|
||||||
"picocolors": "^1.1.1",
|
|
||||||
"source-map-js": "^1.2.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^10 || ^12 || >=14"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/rollup": {
|
|
||||||
"version": "4.61.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.61.1.tgz",
|
|
||||||
"integrity": "sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@types/estree": "1.0.9"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"rollup": "dist/bin/rollup"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18.0.0",
|
|
||||||
"npm": ">=8.0.0"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"@rollup/rollup-android-arm-eabi": "4.61.1",
|
|
||||||
"@rollup/rollup-android-arm64": "4.61.1",
|
|
||||||
"@rollup/rollup-darwin-arm64": "4.61.1",
|
|
||||||
"@rollup/rollup-darwin-x64": "4.61.1",
|
|
||||||
"@rollup/rollup-freebsd-arm64": "4.61.1",
|
|
||||||
"@rollup/rollup-freebsd-x64": "4.61.1",
|
|
||||||
"@rollup/rollup-linux-arm-gnueabihf": "4.61.1",
|
|
||||||
"@rollup/rollup-linux-arm-musleabihf": "4.61.1",
|
|
||||||
"@rollup/rollup-linux-arm64-gnu": "4.61.1",
|
|
||||||
"@rollup/rollup-linux-arm64-musl": "4.61.1",
|
|
||||||
"@rollup/rollup-linux-loong64-gnu": "4.61.1",
|
|
||||||
"@rollup/rollup-linux-loong64-musl": "4.61.1",
|
|
||||||
"@rollup/rollup-linux-ppc64-gnu": "4.61.1",
|
|
||||||
"@rollup/rollup-linux-ppc64-musl": "4.61.1",
|
|
||||||
"@rollup/rollup-linux-riscv64-gnu": "4.61.1",
|
|
||||||
"@rollup/rollup-linux-riscv64-musl": "4.61.1",
|
|
||||||
"@rollup/rollup-linux-s390x-gnu": "4.61.1",
|
|
||||||
"@rollup/rollup-linux-x64-gnu": "4.61.1",
|
|
||||||
"@rollup/rollup-linux-x64-musl": "4.61.1",
|
|
||||||
"@rollup/rollup-openbsd-x64": "4.61.1",
|
|
||||||
"@rollup/rollup-openharmony-arm64": "4.61.1",
|
|
||||||
"@rollup/rollup-win32-arm64-msvc": "4.61.1",
|
|
||||||
"@rollup/rollup-win32-ia32-msvc": "4.61.1",
|
|
||||||
"@rollup/rollup-win32-x64-gnu": "4.61.1",
|
|
||||||
"@rollup/rollup-win32-x64-msvc": "4.61.1",
|
|
||||||
"fsevents": "~2.3.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/source-map-js": {
|
|
||||||
"version": "1.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
|
|
||||||
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
|
|
||||||
"license": "BSD-3-Clause",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/vite": {
|
|
||||||
"version": "5.4.21",
|
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz",
|
|
||||||
"integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"esbuild": "^0.21.3",
|
|
||||||
"postcss": "^8.4.43",
|
|
||||||
"rollup": "^4.20.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"vite": "bin/vite.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.0.0 || >=20.0.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/vitejs/vite?sponsor=1"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"fsevents": "~2.3.3"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"@types/node": "^18.0.0 || >=20.0.0",
|
|
||||||
"less": "*",
|
|
||||||
"lightningcss": "^1.21.0",
|
|
||||||
"sass": "*",
|
|
||||||
"sass-embedded": "*",
|
|
||||||
"stylus": "*",
|
|
||||||
"sugarss": "*",
|
|
||||||
"terser": "^5.4.0"
|
|
||||||
},
|
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"@types/node": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"less": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"lightningcss": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"sass": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"sass-embedded": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"stylus": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"sugarss": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"terser": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/vue": {
|
|
||||||
"version": "3.5.35",
|
|
||||||
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.35.tgz",
|
|
||||||
"integrity": "sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@vue/compiler-dom": "3.5.35",
|
|
||||||
"@vue/compiler-sfc": "3.5.35",
|
|
||||||
"@vue/runtime-dom": "3.5.35",
|
|
||||||
"@vue/server-renderer": "3.5.35",
|
|
||||||
"@vue/shared": "3.5.35"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"typescript": "*"
|
|
||||||
},
|
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"typescript": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-22
@@ -1,22 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2014-present Sebastian McKenzie and other contributors
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
-19
@@ -1,19 +0,0 @@
|
|||||||
# @babel/helper-string-parser
|
|
||||||
|
|
||||||
> A utility package to parse strings
|
|
||||||
|
|
||||||
See our website [@babel/helper-string-parser](https://babeljs.io/docs/babel-helper-string-parser) for more information.
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
Using npm:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
npm install --save @babel/helper-string-parser
|
|
||||||
```
|
|
||||||
|
|
||||||
or using yarn:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
yarn add @babel/helper-string-parser
|
|
||||||
```
|
|
||||||
-295
@@ -1,295 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.readCodePoint = readCodePoint;
|
|
||||||
exports.readInt = readInt;
|
|
||||||
exports.readStringContents = readStringContents;
|
|
||||||
var _isDigit = function isDigit(code) {
|
|
||||||
return code >= 48 && code <= 57;
|
|
||||||
};
|
|
||||||
const forbiddenNumericSeparatorSiblings = {
|
|
||||||
decBinOct: new Set([46, 66, 69, 79, 95, 98, 101, 111]),
|
|
||||||
hex: new Set([46, 88, 95, 120])
|
|
||||||
};
|
|
||||||
const isAllowedNumericSeparatorSibling = {
|
|
||||||
bin: ch => ch === 48 || ch === 49,
|
|
||||||
oct: ch => ch >= 48 && ch <= 55,
|
|
||||||
dec: ch => ch >= 48 && ch <= 57,
|
|
||||||
hex: ch => ch >= 48 && ch <= 57 || ch >= 65 && ch <= 70 || ch >= 97 && ch <= 102
|
|
||||||
};
|
|
||||||
function readStringContents(type, input, pos, lineStart, curLine, errors) {
|
|
||||||
const initialPos = pos;
|
|
||||||
const initialLineStart = lineStart;
|
|
||||||
const initialCurLine = curLine;
|
|
||||||
let out = "";
|
|
||||||
let firstInvalidLoc = null;
|
|
||||||
let chunkStart = pos;
|
|
||||||
const {
|
|
||||||
length
|
|
||||||
} = input;
|
|
||||||
for (;;) {
|
|
||||||
if (pos >= length) {
|
|
||||||
errors.unterminated(initialPos, initialLineStart, initialCurLine);
|
|
||||||
out += input.slice(chunkStart, pos);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
const ch = input.charCodeAt(pos);
|
|
||||||
if (isStringEnd(type, ch, input, pos)) {
|
|
||||||
out += input.slice(chunkStart, pos);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (ch === 92) {
|
|
||||||
out += input.slice(chunkStart, pos);
|
|
||||||
const res = readEscapedChar(input, pos, lineStart, curLine, type === "template", errors);
|
|
||||||
if (res.ch === null && !firstInvalidLoc) {
|
|
||||||
firstInvalidLoc = {
|
|
||||||
pos,
|
|
||||||
lineStart,
|
|
||||||
curLine
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
out += res.ch;
|
|
||||||
}
|
|
||||||
({
|
|
||||||
pos,
|
|
||||||
lineStart,
|
|
||||||
curLine
|
|
||||||
} = res);
|
|
||||||
chunkStart = pos;
|
|
||||||
} else if (ch === 8232 || ch === 8233) {
|
|
||||||
++pos;
|
|
||||||
++curLine;
|
|
||||||
lineStart = pos;
|
|
||||||
} else if (ch === 10 || ch === 13) {
|
|
||||||
if (type === "template") {
|
|
||||||
out += input.slice(chunkStart, pos) + "\n";
|
|
||||||
++pos;
|
|
||||||
if (ch === 13 && input.charCodeAt(pos) === 10) {
|
|
||||||
++pos;
|
|
||||||
}
|
|
||||||
++curLine;
|
|
||||||
chunkStart = lineStart = pos;
|
|
||||||
} else {
|
|
||||||
errors.unterminated(initialPos, initialLineStart, initialCurLine);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
++pos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
pos,
|
|
||||||
str: out,
|
|
||||||
firstInvalidLoc,
|
|
||||||
lineStart,
|
|
||||||
curLine,
|
|
||||||
containsInvalid: !!firstInvalidLoc
|
|
||||||
};
|
|
||||||
}
|
|
||||||
function isStringEnd(type, ch, input, pos) {
|
|
||||||
if (type === "template") {
|
|
||||||
return ch === 96 || ch === 36 && input.charCodeAt(pos + 1) === 123;
|
|
||||||
}
|
|
||||||
return ch === (type === "double" ? 34 : 39);
|
|
||||||
}
|
|
||||||
function readEscapedChar(input, pos, lineStart, curLine, inTemplate, errors) {
|
|
||||||
const throwOnInvalid = !inTemplate;
|
|
||||||
pos++;
|
|
||||||
const res = ch => ({
|
|
||||||
pos,
|
|
||||||
ch,
|
|
||||||
lineStart,
|
|
||||||
curLine
|
|
||||||
});
|
|
||||||
const ch = input.charCodeAt(pos++);
|
|
||||||
switch (ch) {
|
|
||||||
case 110:
|
|
||||||
return res("\n");
|
|
||||||
case 114:
|
|
||||||
return res("\r");
|
|
||||||
case 120:
|
|
||||||
{
|
|
||||||
let code;
|
|
||||||
({
|
|
||||||
code,
|
|
||||||
pos
|
|
||||||
} = readHexChar(input, pos, lineStart, curLine, 2, false, throwOnInvalid, errors));
|
|
||||||
return res(code === null ? null : String.fromCharCode(code));
|
|
||||||
}
|
|
||||||
case 117:
|
|
||||||
{
|
|
||||||
let code;
|
|
||||||
({
|
|
||||||
code,
|
|
||||||
pos
|
|
||||||
} = readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors));
|
|
||||||
return res(code === null ? null : String.fromCodePoint(code));
|
|
||||||
}
|
|
||||||
case 116:
|
|
||||||
return res("\t");
|
|
||||||
case 98:
|
|
||||||
return res("\b");
|
|
||||||
case 118:
|
|
||||||
return res("\u000b");
|
|
||||||
case 102:
|
|
||||||
return res("\f");
|
|
||||||
case 13:
|
|
||||||
if (input.charCodeAt(pos) === 10) {
|
|
||||||
++pos;
|
|
||||||
}
|
|
||||||
case 10:
|
|
||||||
lineStart = pos;
|
|
||||||
++curLine;
|
|
||||||
case 8232:
|
|
||||||
case 8233:
|
|
||||||
return res("");
|
|
||||||
case 56:
|
|
||||||
case 57:
|
|
||||||
if (inTemplate) {
|
|
||||||
return res(null);
|
|
||||||
} else {
|
|
||||||
errors.strictNumericEscape(pos - 1, lineStart, curLine);
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
if (ch >= 48 && ch <= 55) {
|
|
||||||
const startPos = pos - 1;
|
|
||||||
const match = /^[0-7]+/.exec(input.slice(startPos, pos + 2));
|
|
||||||
let octalStr = match[0];
|
|
||||||
let octal = parseInt(octalStr, 8);
|
|
||||||
if (octal > 255) {
|
|
||||||
octalStr = octalStr.slice(0, -1);
|
|
||||||
octal = parseInt(octalStr, 8);
|
|
||||||
}
|
|
||||||
pos += octalStr.length - 1;
|
|
||||||
const next = input.charCodeAt(pos);
|
|
||||||
if (octalStr !== "0" || next === 56 || next === 57) {
|
|
||||||
if (inTemplate) {
|
|
||||||
return res(null);
|
|
||||||
} else {
|
|
||||||
errors.strictNumericEscape(startPos, lineStart, curLine);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return res(String.fromCharCode(octal));
|
|
||||||
}
|
|
||||||
return res(String.fromCharCode(ch));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function readHexChar(input, pos, lineStart, curLine, len, forceLen, throwOnInvalid, errors) {
|
|
||||||
const initialPos = pos;
|
|
||||||
let n;
|
|
||||||
({
|
|
||||||
n,
|
|
||||||
pos
|
|
||||||
} = readInt(input, pos, lineStart, curLine, 16, len, forceLen, false, errors, !throwOnInvalid));
|
|
||||||
if (n === null) {
|
|
||||||
if (throwOnInvalid) {
|
|
||||||
errors.invalidEscapeSequence(initialPos, lineStart, curLine);
|
|
||||||
} else {
|
|
||||||
pos = initialPos - 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
code: n,
|
|
||||||
pos
|
|
||||||
};
|
|
||||||
}
|
|
||||||
function readInt(input, pos, lineStart, curLine, radix, len, forceLen, allowNumSeparator, errors, bailOnError) {
|
|
||||||
const start = pos;
|
|
||||||
const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct;
|
|
||||||
const isAllowedSibling = radix === 16 ? isAllowedNumericSeparatorSibling.hex : radix === 10 ? isAllowedNumericSeparatorSibling.dec : radix === 8 ? isAllowedNumericSeparatorSibling.oct : isAllowedNumericSeparatorSibling.bin;
|
|
||||||
let invalid = false;
|
|
||||||
let total = 0;
|
|
||||||
for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {
|
|
||||||
const code = input.charCodeAt(pos);
|
|
||||||
let val;
|
|
||||||
if (code === 95 && allowNumSeparator !== "bail") {
|
|
||||||
const prev = input.charCodeAt(pos - 1);
|
|
||||||
const next = input.charCodeAt(pos + 1);
|
|
||||||
if (!allowNumSeparator) {
|
|
||||||
if (bailOnError) return {
|
|
||||||
n: null,
|
|
||||||
pos
|
|
||||||
};
|
|
||||||
errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);
|
|
||||||
} else if (Number.isNaN(next) || !isAllowedSibling(next) || forbiddenSiblings.has(prev) || forbiddenSiblings.has(next)) {
|
|
||||||
if (bailOnError) return {
|
|
||||||
n: null,
|
|
||||||
pos
|
|
||||||
};
|
|
||||||
errors.unexpectedNumericSeparator(pos, lineStart, curLine);
|
|
||||||
}
|
|
||||||
++pos;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (code >= 97) {
|
|
||||||
val = code - 97 + 10;
|
|
||||||
} else if (code >= 65) {
|
|
||||||
val = code - 65 + 10;
|
|
||||||
} else if (_isDigit(code)) {
|
|
||||||
val = code - 48;
|
|
||||||
} else {
|
|
||||||
val = Infinity;
|
|
||||||
}
|
|
||||||
if (val >= radix) {
|
|
||||||
if (val <= 9 && bailOnError) {
|
|
||||||
return {
|
|
||||||
n: null,
|
|
||||||
pos
|
|
||||||
};
|
|
||||||
} else if (val <= 9 && errors.invalidDigit(pos, lineStart, curLine, radix)) {
|
|
||||||
val = 0;
|
|
||||||
} else if (forceLen) {
|
|
||||||
val = 0;
|
|
||||||
invalid = true;
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
++pos;
|
|
||||||
total = total * radix + val;
|
|
||||||
}
|
|
||||||
if (pos === start || len != null && pos - start !== len || invalid) {
|
|
||||||
return {
|
|
||||||
n: null,
|
|
||||||
pos
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
n: total,
|
|
||||||
pos
|
|
||||||
};
|
|
||||||
}
|
|
||||||
function readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors) {
|
|
||||||
const ch = input.charCodeAt(pos);
|
|
||||||
let code;
|
|
||||||
if (ch === 123) {
|
|
||||||
++pos;
|
|
||||||
({
|
|
||||||
code,
|
|
||||||
pos
|
|
||||||
} = readHexChar(input, pos, lineStart, curLine, input.indexOf("}", pos) - pos, true, throwOnInvalid, errors));
|
|
||||||
++pos;
|
|
||||||
if (code !== null && code > 0x10ffff) {
|
|
||||||
if (throwOnInvalid) {
|
|
||||||
errors.invalidCodePoint(pos, lineStart, curLine);
|
|
||||||
} else {
|
|
||||||
return {
|
|
||||||
code: null,
|
|
||||||
pos
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
({
|
|
||||||
code,
|
|
||||||
pos
|
|
||||||
} = readHexChar(input, pos, lineStart, curLine, 4, false, throwOnInvalid, errors));
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
code,
|
|
||||||
pos
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
//# sourceMappingURL=index.js.map
|
|
||||||
-1
File diff suppressed because one or more lines are too long
-31
@@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@babel/helper-string-parser",
|
|
||||||
"version": "7.29.7",
|
|
||||||
"description": "A utility package to parse strings",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/babel/babel.git",
|
|
||||||
"directory": "packages/babel-helper-string-parser"
|
|
||||||
},
|
|
||||||
"homepage": "https://babel.dev/docs/en/next/babel-helper-string-parser",
|
|
||||||
"license": "MIT",
|
|
||||||
"publishConfig": {
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"main": "./lib/index.js",
|
|
||||||
"devDependencies": {
|
|
||||||
"charcodes": "^0.2.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6.9.0"
|
|
||||||
},
|
|
||||||
"author": "The Babel Team (https://babel.dev/team)",
|
|
||||||
"exports": {
|
|
||||||
".": {
|
|
||||||
"types": "./lib/index.d.ts",
|
|
||||||
"default": "./lib/index.js"
|
|
||||||
},
|
|
||||||
"./package.json": "./package.json"
|
|
||||||
},
|
|
||||||
"type": "commonjs"
|
|
||||||
}
|
|
||||||
-22
@@ -1,22 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2014-present Sebastian McKenzie and other contributors
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
-19
@@ -1,19 +0,0 @@
|
|||||||
# @babel/helper-validator-identifier
|
|
||||||
|
|
||||||
> Validate identifier/keywords name
|
|
||||||
|
|
||||||
See our website [@babel/helper-validator-identifier](https://babeljs.io/docs/babel-helper-validator-identifier) for more information.
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
Using npm:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
npm install --save @babel/helper-validator-identifier
|
|
||||||
```
|
|
||||||
|
|
||||||
or using yarn:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
yarn add @babel/helper-validator-identifier
|
|
||||||
```
|
|
||||||
-70
@@ -1,70 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.isIdentifierChar = isIdentifierChar;
|
|
||||||
exports.isIdentifierName = isIdentifierName;
|
|
||||||
exports.isIdentifierStart = isIdentifierStart;
|
|
||||||
let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088f\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5c\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdc-\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c8a\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7dc\ua7f1-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
|
|
||||||
let nonASCIIidentifierChars = "\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0897-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0cf3\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ece\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1add\u1ae0-\u1aeb\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\u30fb\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f\uff65";
|
|
||||||
const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
|
|
||||||
const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
|
|
||||||
nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
|
|
||||||
const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 4, 51, 13, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 7, 25, 39, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 39, 27, 10, 22, 251, 41, 7, 1, 17, 5, 57, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 31, 9, 2, 0, 3, 0, 2, 37, 2, 0, 26, 0, 2, 0, 45, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 200, 32, 32, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 24, 43, 261, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 26, 3994, 6, 582, 6842, 29, 1763, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 433, 44, 212, 63, 33, 24, 3, 24, 45, 74, 6, 0, 67, 12, 65, 1, 2, 0, 15, 4, 10, 7381, 42, 31, 98, 114, 8702, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 229, 29, 3, 0, 208, 30, 2, 2, 2, 1, 2, 6, 3, 4, 10, 1, 225, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4381, 3, 5773, 3, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 8489];
|
|
||||||
const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 78, 5, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 199, 7, 137, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 55, 9, 266, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 233, 0, 3, 0, 8, 1, 6, 0, 475, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
|
|
||||||
function isInAstralSet(code, set) {
|
|
||||||
let pos = 0x10000;
|
|
||||||
for (let i = 0, length = set.length; i < length; i += 2) {
|
|
||||||
pos += set[i];
|
|
||||||
if (pos > code) return false;
|
|
||||||
pos += set[i + 1];
|
|
||||||
if (pos >= code) return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
function isIdentifierStart(code) {
|
|
||||||
if (code < 65) return code === 36;
|
|
||||||
if (code <= 90) return true;
|
|
||||||
if (code < 97) return code === 95;
|
|
||||||
if (code <= 122) return true;
|
|
||||||
if (code <= 0xffff) {
|
|
||||||
return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));
|
|
||||||
}
|
|
||||||
return isInAstralSet(code, astralIdentifierStartCodes);
|
|
||||||
}
|
|
||||||
function isIdentifierChar(code) {
|
|
||||||
if (code < 48) return code === 36;
|
|
||||||
if (code < 58) return true;
|
|
||||||
if (code < 65) return false;
|
|
||||||
if (code <= 90) return true;
|
|
||||||
if (code < 97) return code === 95;
|
|
||||||
if (code <= 122) return true;
|
|
||||||
if (code <= 0xffff) {
|
|
||||||
return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));
|
|
||||||
}
|
|
||||||
return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);
|
|
||||||
}
|
|
||||||
function isIdentifierName(name) {
|
|
||||||
let isFirst = true;
|
|
||||||
for (let i = 0; i < name.length; i++) {
|
|
||||||
let cp = name.charCodeAt(i);
|
|
||||||
if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {
|
|
||||||
const trail = name.charCodeAt(++i);
|
|
||||||
if ((trail & 0xfc00) === 0xdc00) {
|
|
||||||
cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isFirst) {
|
|
||||||
isFirst = false;
|
|
||||||
if (!isIdentifierStart(cp)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else if (!isIdentifierChar(cp)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return !isFirst;
|
|
||||||
}
|
|
||||||
|
|
||||||
//# sourceMappingURL=identifier.js.map
|
|
||||||
-1
File diff suppressed because one or more lines are too long
-57
@@ -1,57 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "isIdentifierChar", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _identifier.isIdentifierChar;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "isIdentifierName", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _identifier.isIdentifierName;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "isIdentifierStart", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _identifier.isIdentifierStart;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "isKeyword", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _keyword.isKeyword;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "isReservedWord", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _keyword.isReservedWord;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "isStrictBindOnlyReservedWord", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _keyword.isStrictBindOnlyReservedWord;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "isStrictBindReservedWord", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _keyword.isStrictBindReservedWord;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Object.defineProperty(exports, "isStrictReservedWord", {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _keyword.isStrictReservedWord;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
var _identifier = require("./identifier.js");
|
|
||||||
var _keyword = require("./keyword.js");
|
|
||||||
|
|
||||||
//# sourceMappingURL=index.js.map
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"names":["_identifier","require","_keyword"],"sources":["../src/index.ts"],"sourcesContent":["export {\n isIdentifierName,\n isIdentifierChar,\n isIdentifierStart,\n} from \"./identifier.ts\";\nexport {\n isReservedWord,\n isStrictBindOnlyReservedWord,\n isStrictBindReservedWord,\n isStrictReservedWord,\n isKeyword,\n} from \"./keyword.ts\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAKA,IAAAC,QAAA,GAAAD,OAAA","ignoreList":[]}
|
|
||||||
-35
@@ -1,35 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.isKeyword = isKeyword;
|
|
||||||
exports.isReservedWord = isReservedWord;
|
|
||||||
exports.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord;
|
|
||||||
exports.isStrictBindReservedWord = isStrictBindReservedWord;
|
|
||||||
exports.isStrictReservedWord = isStrictReservedWord;
|
|
||||||
const reservedWords = {
|
|
||||||
keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"],
|
|
||||||
strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"],
|
|
||||||
strictBind: ["eval", "arguments"]
|
|
||||||
};
|
|
||||||
const keywords = new Set(reservedWords.keyword);
|
|
||||||
const reservedWordsStrictSet = new Set(reservedWords.strict);
|
|
||||||
const reservedWordsStrictBindSet = new Set(reservedWords.strictBind);
|
|
||||||
function isReservedWord(word, inModule) {
|
|
||||||
return inModule && word === "await" || word === "enum";
|
|
||||||
}
|
|
||||||
function isStrictReservedWord(word, inModule) {
|
|
||||||
return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);
|
|
||||||
}
|
|
||||||
function isStrictBindOnlyReservedWord(word) {
|
|
||||||
return reservedWordsStrictBindSet.has(word);
|
|
||||||
}
|
|
||||||
function isStrictBindReservedWord(word, inModule) {
|
|
||||||
return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);
|
|
||||||
}
|
|
||||||
function isKeyword(word) {
|
|
||||||
return keywords.has(word);
|
|
||||||
}
|
|
||||||
|
|
||||||
//# sourceMappingURL=keyword.js.map
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"names":["reservedWords","keyword","strict","strictBind","keywords","Set","reservedWordsStrictSet","reservedWordsStrictBindSet","isReservedWord","word","inModule","isStrictReservedWord","has","isStrictBindOnlyReservedWord","isStrictBindReservedWord","isKeyword"],"sources":["../src/keyword.ts"],"sourcesContent":["const reservedWords = {\n keyword: [\n \"break\",\n \"case\",\n \"catch\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"do\",\n \"else\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"return\",\n \"switch\",\n \"throw\",\n \"try\",\n \"var\",\n \"const\",\n \"while\",\n \"with\",\n \"new\",\n \"this\",\n \"super\",\n \"class\",\n \"extends\",\n \"export\",\n \"import\",\n \"null\",\n \"true\",\n \"false\",\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"void\",\n \"delete\",\n ],\n strict: [\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\",\n ],\n strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n word: string,\n inModule: boolean,\n): boolean {\n return (\n isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n );\n}\n\nexport function isKeyword(word: string): boolean {\n return keywords.has(word);\n}\n"],"mappings":";;;;;;;;;;AAAA,MAAMA,aAAa,GAAG;EACpBC,OAAO,EAAE,CACP,OAAO,EACP,MAAM,EACN,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,QAAQ,CACT;EACDC,MAAM,EAAE,CACN,YAAY,EACZ,WAAW,EACX,KAAK,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,OAAO,CACR;EACDC,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW;AAClC,CAAC;AACD,MAAMC,QAAQ,GAAG,IAAIC,GAAG,CAACL,aAAa,CAACC,OAAO,CAAC;AAC/C,MAAMK,sBAAsB,GAAG,IAAID,GAAG,CAACL,aAAa,CAACE,MAAM,CAAC;AAC5D,MAAMK,0BAA0B,GAAG,IAAIF,GAAG,CAACL,aAAa,CAACG,UAAU,CAAC;AAK7D,SAASK,cAAcA,CAACC,IAAY,EAAEC,QAAiB,EAAW;EACvE,OAAQA,QAAQ,IAAID,IAAI,KAAK,OAAO,IAAKA,IAAI,KAAK,MAAM;AAC1D;AAOO,SAASE,oBAAoBA,CAACF,IAAY,EAAEC,QAAiB,EAAW;EAC7E,OAAOF,cAAc,CAACC,IAAI,EAAEC,QAAQ,CAAC,IAAIJ,sBAAsB,CAACM,GAAG,CAACH,IAAI,CAAC;AAC3E;AAMO,SAASI,4BAA4BA,CAACJ,IAAY,EAAW;EAClE,OAAOF,0BAA0B,CAACK,GAAG,CAACH,IAAI,CAAC;AAC7C;AAOO,SAASK,wBAAwBA,CACtCL,IAAY,EACZC,QAAiB,EACR;EACT,OACEC,oBAAoB,CAACF,IAAI,EAAEC,QAAQ,CAAC,IAAIG,4BAA4B,CAACJ,IAAI,CAAC;AAE9E;AAEO,SAASM,SAASA,CAACN,IAAY,EAAW;EAC/C,OAAOL,QAAQ,CAACQ,GAAG,CAACH,IAAI,CAAC;AAC3B","ignoreList":[]}
|
|
||||||
-31
@@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@babel/helper-validator-identifier",
|
|
||||||
"version": "7.29.7",
|
|
||||||
"description": "Validate identifier/keywords name",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/babel/babel.git",
|
|
||||||
"directory": "packages/babel-helper-validator-identifier"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"publishConfig": {
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"main": "./lib/index.js",
|
|
||||||
"exports": {
|
|
||||||
".": {
|
|
||||||
"types": "./lib/index.d.ts",
|
|
||||||
"default": "./lib/index.js"
|
|
||||||
},
|
|
||||||
"./package.json": "./package.json"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@unicode/unicode-17.0.0": "^1.6.10",
|
|
||||||
"charcodes": "^0.2.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6.9.0"
|
|
||||||
},
|
|
||||||
"author": "The Babel Team (https://babel.dev/team)",
|
|
||||||
"type": "commonjs"
|
|
||||||
}
|
|
||||||
-1073
File diff suppressed because it is too large
Load Diff
-19
@@ -1,19 +0,0 @@
|
|||||||
Copyright (C) 2012-2014 by various contributors (see AUTHORS)
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
-19
@@ -1,19 +0,0 @@
|
|||||||
# @babel/parser
|
|
||||||
|
|
||||||
> A JavaScript parser
|
|
||||||
|
|
||||||
See our website [@babel/parser](https://babeljs.io/docs/babel-parser) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20parser%22+is%3Aopen) associated with this package.
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
Using npm:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
npm install --save-dev @babel/parser
|
|
||||||
```
|
|
||||||
|
|
||||||
or using yarn:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
yarn add @babel/parser --dev
|
|
||||||
```
|
|
||||||
-15
@@ -1,15 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
/* eslint-disable no-var, unicorn/prefer-node-protocol */
|
|
||||||
|
|
||||||
var parser = require("..");
|
|
||||||
var fs = require("fs");
|
|
||||||
|
|
||||||
var filename = process.argv[2];
|
|
||||||
if (!filename) {
|
|
||||||
console.error("no filename specified");
|
|
||||||
} else {
|
|
||||||
var file = fs.readFileSync(filename, "utf8");
|
|
||||||
var ast = parser.parse(file);
|
|
||||||
|
|
||||||
console.log(JSON.stringify(ast, null, " "));
|
|
||||||
}
|
|
||||||
-14599
File diff suppressed because it is too large
Load Diff
-1
File diff suppressed because one or more lines are too long
-50
@@ -1,50 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@babel/parser",
|
|
||||||
"version": "7.29.7",
|
|
||||||
"description": "A JavaScript parser",
|
|
||||||
"author": "The Babel Team (https://babel.dev/team)",
|
|
||||||
"homepage": "https://babel.dev/docs/en/next/babel-parser",
|
|
||||||
"bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A+parser+%28babylon%29%22+is%3Aopen",
|
|
||||||
"license": "MIT",
|
|
||||||
"publishConfig": {
|
|
||||||
"access": "public"
|
|
||||||
},
|
|
||||||
"keywords": [
|
|
||||||
"babel",
|
|
||||||
"javascript",
|
|
||||||
"parser",
|
|
||||||
"tc39",
|
|
||||||
"ecmascript",
|
|
||||||
"@babel/parser"
|
|
||||||
],
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/babel/babel.git",
|
|
||||||
"directory": "packages/babel-parser"
|
|
||||||
},
|
|
||||||
"main": "./lib/index.js",
|
|
||||||
"types": "./typings/babel-parser.d.ts",
|
|
||||||
"files": [
|
|
||||||
"bin",
|
|
||||||
"lib",
|
|
||||||
"typings/babel-parser.d.ts",
|
|
||||||
"index.cjs"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6.0.0"
|
|
||||||
},
|
|
||||||
"# dependencies": "This package doesn't actually have runtime dependencies. @babel/types is only needed for type definitions.",
|
|
||||||
"dependencies": {
|
|
||||||
"@babel/types": "^7.29.7"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@babel/code-frame": "^7.29.7",
|
|
||||||
"@babel/helper-check-duplicate-nodes": "^7.29.7",
|
|
||||||
"@babel/helper-fixtures": "^7.29.7",
|
|
||||||
"@babel/helper-string-parser": "^7.29.7",
|
|
||||||
"@babel/helper-validator-identifier": "^7.29.7",
|
|
||||||
"charcodes": "^0.2.0"
|
|
||||||
},
|
|
||||||
"bin": "./bin/babel-parser.js",
|
|
||||||
"type": "commonjs"
|
|
||||||
}
|
|
||||||
-262
@@ -1,262 +0,0 @@
|
|||||||
// This file is auto-generated! Do not modify it directly.
|
|
||||||
// Run `yarn gulp bundle-dts` to re-generate it.
|
|
||||||
/* eslint-disable @typescript-eslint/consistent-type-imports, @typescript-eslint/no-redundant-type-constituents */
|
|
||||||
import { File, Expression } from '@babel/types';
|
|
||||||
|
|
||||||
declare class Position {
|
|
||||||
line: number;
|
|
||||||
column: number;
|
|
||||||
index: number;
|
|
||||||
constructor(line: number, col: number, index: number);
|
|
||||||
}
|
|
||||||
|
|
||||||
type SyntaxPlugin = "flow" | "typescript" | "jsx" | "pipelineOperator" | "placeholders";
|
|
||||||
type ParseErrorCode = "BABEL_PARSER_SYNTAX_ERROR" | "BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED";
|
|
||||||
interface ParseErrorSpecification<ErrorDetails> {
|
|
||||||
code: ParseErrorCode;
|
|
||||||
reasonCode: string;
|
|
||||||
syntaxPlugin?: SyntaxPlugin;
|
|
||||||
missingPlugin?: string | string[];
|
|
||||||
loc: Position;
|
|
||||||
details: ErrorDetails;
|
|
||||||
pos: number;
|
|
||||||
}
|
|
||||||
type ParseError$1<ErrorDetails> = SyntaxError & ParseErrorSpecification<ErrorDetails>;
|
|
||||||
|
|
||||||
type BABEL_8_BREAKING = false;
|
|
||||||
type IF_BABEL_7<V> = false extends BABEL_8_BREAKING ? V : never;
|
|
||||||
|
|
||||||
type Plugin$1 =
|
|
||||||
| "asyncDoExpressions"
|
|
||||||
| IF_BABEL_7<"asyncGenerators">
|
|
||||||
| IF_BABEL_7<"bigInt">
|
|
||||||
| IF_BABEL_7<"classPrivateMethods">
|
|
||||||
| IF_BABEL_7<"classPrivateProperties">
|
|
||||||
| IF_BABEL_7<"classProperties">
|
|
||||||
| IF_BABEL_7<"classStaticBlock">
|
|
||||||
| IF_BABEL_7<"decimal">
|
|
||||||
| "decorators-legacy"
|
|
||||||
| "deferredImportEvaluation"
|
|
||||||
| "decoratorAutoAccessors"
|
|
||||||
| "destructuringPrivate"
|
|
||||||
| IF_BABEL_7<"deprecatedImportAssert">
|
|
||||||
| "doExpressions"
|
|
||||||
| IF_BABEL_7<"dynamicImport">
|
|
||||||
| IF_BABEL_7<"explicitResourceManagement">
|
|
||||||
| "exportDefaultFrom"
|
|
||||||
| IF_BABEL_7<"exportNamespaceFrom">
|
|
||||||
| "flow"
|
|
||||||
| "flowComments"
|
|
||||||
| "functionBind"
|
|
||||||
| "functionSent"
|
|
||||||
| "importMeta"
|
|
||||||
| "jsx"
|
|
||||||
| IF_BABEL_7<"jsonStrings">
|
|
||||||
| IF_BABEL_7<"logicalAssignment">
|
|
||||||
| IF_BABEL_7<"importAssertions">
|
|
||||||
| IF_BABEL_7<"importReflection">
|
|
||||||
| "moduleBlocks"
|
|
||||||
| IF_BABEL_7<"moduleStringNames">
|
|
||||||
| IF_BABEL_7<"nullishCoalescingOperator">
|
|
||||||
| IF_BABEL_7<"numericSeparator">
|
|
||||||
| IF_BABEL_7<"objectRestSpread">
|
|
||||||
| IF_BABEL_7<"optionalCatchBinding">
|
|
||||||
| IF_BABEL_7<"optionalChaining">
|
|
||||||
| "partialApplication"
|
|
||||||
| "placeholders"
|
|
||||||
| IF_BABEL_7<"privateIn">
|
|
||||||
| IF_BABEL_7<"regexpUnicodeSets">
|
|
||||||
| "sourcePhaseImports"
|
|
||||||
| "throwExpressions"
|
|
||||||
| IF_BABEL_7<"topLevelAwait">
|
|
||||||
| "v8intrinsic"
|
|
||||||
| ParserPluginWithOptions[0];
|
|
||||||
|
|
||||||
type ParserPluginWithOptions =
|
|
||||||
| ["decorators", DecoratorsPluginOptions]
|
|
||||||
| ["discardBinding", { syntaxType: "void" }]
|
|
||||||
| ["estree", { classFeatures?: boolean }]
|
|
||||||
| IF_BABEL_7<["importAttributes", { deprecatedAssertSyntax: boolean }]>
|
|
||||||
| IF_BABEL_7<["moduleAttributes", { version: "may-2020" }]>
|
|
||||||
| ["optionalChainingAssign", { version: "2023-07" }]
|
|
||||||
| ["pipelineOperator", PipelineOperatorPluginOptions]
|
|
||||||
| ["recordAndTuple", RecordAndTuplePluginOptions]
|
|
||||||
| ["flow", FlowPluginOptions]
|
|
||||||
| ["typescript", TypeScriptPluginOptions];
|
|
||||||
|
|
||||||
type PluginConfig = Plugin$1 | ParserPluginWithOptions;
|
|
||||||
|
|
||||||
interface DecoratorsPluginOptions {
|
|
||||||
decoratorsBeforeExport?: boolean;
|
|
||||||
allowCallParenthesized?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface PipelineOperatorPluginOptions {
|
|
||||||
proposal: BABEL_8_BREAKING extends false
|
|
||||||
? "minimal" | "fsharp" | "hack" | "smart"
|
|
||||||
: "fsharp" | "hack";
|
|
||||||
topicToken?: "%" | "#" | "@@" | "^^" | "^";
|
|
||||||
}
|
|
||||||
|
|
||||||
interface RecordAndTuplePluginOptions {
|
|
||||||
syntaxType: "bar" | "hash";
|
|
||||||
}
|
|
||||||
|
|
||||||
type FlowPluginOptions = BABEL_8_BREAKING extends true
|
|
||||||
? {
|
|
||||||
all?: boolean;
|
|
||||||
enums?: boolean;
|
|
||||||
}
|
|
||||||
: {
|
|
||||||
all?: boolean;
|
|
||||||
};
|
|
||||||
|
|
||||||
interface TypeScriptPluginOptions {
|
|
||||||
dts?: boolean;
|
|
||||||
disallowAmbiguousJSXLike?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
type Plugin = PluginConfig;
|
|
||||||
|
|
||||||
type SourceType = "script" | "commonjs" | "module" | "unambiguous";
|
|
||||||
interface Options {
|
|
||||||
/**
|
|
||||||
* By default, import and export declarations can only appear at a program's top level.
|
|
||||||
* Setting this option to true allows them anywhere where a statement is allowed.
|
|
||||||
*/
|
|
||||||
allowImportExportEverywhere?: boolean;
|
|
||||||
/**
|
|
||||||
* By default, await use is not allowed outside of an async function.
|
|
||||||
* Set this to true to accept such code.
|
|
||||||
*/
|
|
||||||
allowAwaitOutsideFunction?: boolean;
|
|
||||||
/**
|
|
||||||
* By default, a return statement at the top level raises an error.
|
|
||||||
* Set this to true to accept such code.
|
|
||||||
*/
|
|
||||||
allowReturnOutsideFunction?: boolean;
|
|
||||||
/**
|
|
||||||
* By default, new.target use is not allowed outside of a function or class.
|
|
||||||
* Set this to true to accept such code.
|
|
||||||
*/
|
|
||||||
allowNewTargetOutsideFunction?: boolean;
|
|
||||||
/**
|
|
||||||
* By default, super calls are not allowed outside of a method.
|
|
||||||
* Set this to true to accept such code.
|
|
||||||
*/
|
|
||||||
allowSuperOutsideMethod?: boolean;
|
|
||||||
/**
|
|
||||||
* By default, exported identifiers must refer to a declared variable.
|
|
||||||
* Set this to true to allow export statements to reference undeclared variables.
|
|
||||||
*/
|
|
||||||
allowUndeclaredExports?: boolean;
|
|
||||||
/**
|
|
||||||
* By default, yield use is not allowed outside of a generator function.
|
|
||||||
* Set this to true to accept such code.
|
|
||||||
*/
|
|
||||||
allowYieldOutsideFunction?: boolean;
|
|
||||||
/**
|
|
||||||
* By default, Babel parser JavaScript code according to Annex B syntax.
|
|
||||||
* Set this to `false` to disable such behavior.
|
|
||||||
*/
|
|
||||||
annexB?: boolean;
|
|
||||||
/**
|
|
||||||
* By default, Babel attaches comments to adjacent AST nodes.
|
|
||||||
* When this option is set to false, comments are not attached.
|
|
||||||
* It can provide up to 30% performance improvement when the input code has many comments.
|
|
||||||
* @babel/eslint-parser will set it for you.
|
|
||||||
* It is not recommended to use attachComment: false with Babel transform,
|
|
||||||
* as doing so removes all the comments in output code, and renders annotations such as
|
|
||||||
* /* istanbul ignore next *\/ nonfunctional.
|
|
||||||
*/
|
|
||||||
attachComment?: boolean;
|
|
||||||
/**
|
|
||||||
* By default, Babel always throws an error when it finds some invalid code.
|
|
||||||
* When this option is set to true, it will store the parsing error and
|
|
||||||
* try to continue parsing the invalid input file.
|
|
||||||
*/
|
|
||||||
errorRecovery?: boolean;
|
|
||||||
/**
|
|
||||||
* Indicate the mode the code should be parsed in.
|
|
||||||
* Can be one of "script", "commonjs", "module", or "unambiguous". Defaults to "script".
|
|
||||||
* "unambiguous" will make @babel/parser attempt to guess, based on the presence
|
|
||||||
* of ES6 import or export statements.
|
|
||||||
* Files with ES6 imports and exports are considered "module" and are otherwise "script".
|
|
||||||
*
|
|
||||||
* Use "commonjs" to parse code that is intended to be run in a CommonJS environment such as Node.js.
|
|
||||||
*/
|
|
||||||
sourceType?: SourceType;
|
|
||||||
/**
|
|
||||||
* Correlate output AST nodes with their source filename.
|
|
||||||
* Useful when generating code and source maps from the ASTs of multiple input files.
|
|
||||||
*/
|
|
||||||
sourceFilename?: string;
|
|
||||||
/**
|
|
||||||
* By default, all source indexes start from 0.
|
|
||||||
* You can provide a start index to alternatively start with.
|
|
||||||
* Useful for integration with other source tools.
|
|
||||||
*/
|
|
||||||
startIndex?: number;
|
|
||||||
/**
|
|
||||||
* By default, the first line of code parsed is treated as line 1.
|
|
||||||
* You can provide a line number to alternatively start with.
|
|
||||||
* Useful for integration with other source tools.
|
|
||||||
*/
|
|
||||||
startLine?: number;
|
|
||||||
/**
|
|
||||||
* By default, the parsed code is treated as if it starts from line 1, column 0.
|
|
||||||
* You can provide a column number to alternatively start with.
|
|
||||||
* Useful for integration with other source tools.
|
|
||||||
*/
|
|
||||||
startColumn?: number;
|
|
||||||
/**
|
|
||||||
* Array containing the plugins that you want to enable.
|
|
||||||
*/
|
|
||||||
plugins?: Plugin[];
|
|
||||||
/**
|
|
||||||
* Should the parser work in strict mode.
|
|
||||||
* Defaults to true if sourceType === 'module'. Otherwise, false.
|
|
||||||
*/
|
|
||||||
strictMode?: boolean;
|
|
||||||
/**
|
|
||||||
* Adds a ranges property to each node: [node.start, node.end]
|
|
||||||
*/
|
|
||||||
ranges?: boolean;
|
|
||||||
/**
|
|
||||||
* Adds all parsed tokens to a tokens property on the File node.
|
|
||||||
*/
|
|
||||||
tokens?: boolean;
|
|
||||||
/**
|
|
||||||
* By default, the parser adds information about parentheses by setting
|
|
||||||
* `extra.parenthesized` to `true` as needed.
|
|
||||||
* When this option is `true` the parser creates `ParenthesizedExpression`
|
|
||||||
* AST nodes instead of using the `extra` property.
|
|
||||||
*/
|
|
||||||
createParenthesizedExpressions?: boolean;
|
|
||||||
/**
|
|
||||||
* The default is false in Babel 7 and true in Babel 8
|
|
||||||
* Set this to true to parse it as an `ImportExpression` node.
|
|
||||||
* Otherwise `import(foo)` is parsed as `CallExpression(Import, [Identifier(foo)])`.
|
|
||||||
*/
|
|
||||||
createImportExpressions?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
type ParserOptions = Partial<Options>;
|
|
||||||
type ParseError = ParseError$1<object>;
|
|
||||||
type ParseResult<Result extends File | Expression = File> = Result & {
|
|
||||||
comments: File["comments"];
|
|
||||||
errors: null | ParseError[];
|
|
||||||
tokens?: File["tokens"];
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
* Parse the provided code as an entire ECMAScript program.
|
|
||||||
*/
|
|
||||||
declare function parse(input: string, options?: ParserOptions): ParseResult<File>;
|
|
||||||
declare function parseExpression(input: string, options?: ParserOptions): ParseResult<Expression>;
|
|
||||||
|
|
||||||
declare const tokTypes: {
|
|
||||||
// todo(flow->ts) real token type
|
|
||||||
[name: string]: any;
|
|
||||||
};
|
|
||||||
|
|
||||||
export { DecoratorsPluginOptions, FlowPluginOptions, ParseError, ParseResult, ParserOptions, PluginConfig as ParserPlugin, ParserPluginWithOptions, PipelineOperatorPluginOptions, RecordAndTuplePluginOptions, TypeScriptPluginOptions, parse, parseExpression, tokTypes };
|
|
||||||
-22
@@ -1,22 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2014-present Sebastian McKenzie and other contributors
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
-19
@@ -1,19 +0,0 @@
|
|||||||
# @babel/types
|
|
||||||
|
|
||||||
> Babel Types is a Lodash-esque utility library for AST nodes
|
|
||||||
|
|
||||||
See our website [@babel/types](https://babeljs.io/docs/babel-types) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20types%22+is%3Aopen) associated with this package.
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
Using npm:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
npm install --save-dev @babel/types
|
|
||||||
```
|
|
||||||
|
|
||||||
or using yarn:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
yarn add @babel/types --dev
|
|
||||||
```
|
|
||||||
-16
@@ -1,16 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = assertNode;
|
|
||||||
var _isNode = require("../validators/isNode.js");
|
|
||||||
function assertNode(node) {
|
|
||||||
if (!(0, _isNode.default)(node)) {
|
|
||||||
var _node$type;
|
|
||||||
const type = (_node$type = node == null ? void 0 : node.type) != null ? _node$type : JSON.stringify(node);
|
|
||||||
throw new TypeError(`Not a valid node of type "${type}"`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//# sourceMappingURL=assertNode.js.map
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"names":["_isNode","require","assertNode","node","isNode","_node$type","type","JSON","stringify","TypeError"],"sources":["../../src/asserts/assertNode.ts"],"sourcesContent":["import isNode from \"../validators/isNode.ts\";\nimport type * as t from \"../index.ts\";\n\nexport default function assertNode(node?: any): asserts node is t.Node {\n if (!isNode(node)) {\n const type = node?.type ?? JSON.stringify(node);\n throw new TypeError(`Not a valid node of type \"${type}\"`);\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAGe,SAASC,UAAUA,CAACC,IAAU,EAA0B;EACrE,IAAI,CAAC,IAAAC,eAAM,EAACD,IAAI,CAAC,EAAE;IAAA,IAAAE,UAAA;IACjB,MAAMC,IAAI,IAAAD,UAAA,GAAGF,IAAI,oBAAJA,IAAI,CAAEG,IAAI,YAAAD,UAAA,GAAIE,IAAI,CAACC,SAAS,CAACL,IAAI,CAAC;IAC/C,MAAM,IAAIM,SAAS,CAAC,6BAA6BH,IAAI,GAAG,CAAC;EAC3D;AACF","ignoreList":[]}
|
|
||||||
-1251
File diff suppressed because it is too large
Load Diff
-1
File diff suppressed because one or more lines are too long
-3
@@ -1,3 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
//# sourceMappingURL=index.js.map
|
|
||||||
-1
File diff suppressed because one or more lines are too long
-18
@@ -1,18 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = createFlowUnionType;
|
|
||||||
var _index = require("../generated/index.js");
|
|
||||||
var _removeTypeDuplicates = require("../../modifications/flow/removeTypeDuplicates.js");
|
|
||||||
function createFlowUnionType(types) {
|
|
||||||
const flattened = (0, _removeTypeDuplicates.default)(types);
|
|
||||||
if (flattened.length === 1) {
|
|
||||||
return flattened[0];
|
|
||||||
} else {
|
|
||||||
return (0, _index.unionTypeAnnotation)(flattened);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//# sourceMappingURL=createFlowUnionType.js.map
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"names":["_index","require","_removeTypeDuplicates","createFlowUnionType","types","flattened","removeTypeDuplicates","length","unionTypeAnnotation"],"sources":["../../../src/builders/flow/createFlowUnionType.ts"],"sourcesContent":["import { unionTypeAnnotation } from \"../generated/index.ts\";\nimport removeTypeDuplicates from \"../../modifications/flow/removeTypeDuplicates.ts\";\nimport type * as t from \"../../index.ts\";\n\n/**\n * Takes an array of `types` and flattens them, removing duplicates and\n * returns a `UnionTypeAnnotation` node containing them.\n */\nexport default function createFlowUnionType<T extends t.FlowType>(\n types: [T] | T[],\n): T | t.UnionTypeAnnotation {\n const flattened = removeTypeDuplicates(types);\n\n if (flattened.length === 1) {\n return flattened[0] as T;\n } else {\n return unionTypeAnnotation(flattened);\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,qBAAA,GAAAD,OAAA;AAOe,SAASE,mBAAmBA,CACzCC,KAAgB,EACW;EAC3B,MAAMC,SAAS,GAAG,IAAAC,6BAAoB,EAACF,KAAK,CAAC;EAE7C,IAAIC,SAAS,CAACE,MAAM,KAAK,CAAC,EAAE;IAC1B,OAAOF,SAAS,CAAC,CAAC,CAAC;EACrB,CAAC,MAAM;IACL,OAAO,IAAAG,0BAAmB,EAACH,SAAS,CAAC;EACvC;AACF","ignoreList":[]}
|
|
||||||
Generated
Vendored
-31
@@ -1,31 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
exports.default = void 0;
|
|
||||||
var _index = require("../generated/index.js");
|
|
||||||
var _default = exports.default = createTypeAnnotationBasedOnTypeof;
|
|
||||||
function createTypeAnnotationBasedOnTypeof(type) {
|
|
||||||
switch (type) {
|
|
||||||
case "string":
|
|
||||||
return (0, _index.stringTypeAnnotation)();
|
|
||||||
case "number":
|
|
||||||
return (0, _index.numberTypeAnnotation)();
|
|
||||||
case "undefined":
|
|
||||||
return (0, _index.voidTypeAnnotation)();
|
|
||||||
case "boolean":
|
|
||||||
return (0, _index.booleanTypeAnnotation)();
|
|
||||||
case "function":
|
|
||||||
return (0, _index.genericTypeAnnotation)((0, _index.identifier)("Function"));
|
|
||||||
case "object":
|
|
||||||
return (0, _index.genericTypeAnnotation)((0, _index.identifier)("Object"));
|
|
||||||
case "symbol":
|
|
||||||
return (0, _index.genericTypeAnnotation)((0, _index.identifier)("Symbol"));
|
|
||||||
case "bigint":
|
|
||||||
return (0, _index.anyTypeAnnotation)();
|
|
||||||
}
|
|
||||||
throw new Error("Invalid typeof value: " + type);
|
|
||||||
}
|
|
||||||
|
|
||||||
//# sourceMappingURL=createTypeAnnotationBasedOnTypeof.js.map
|
|
||||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"names":["_index","require","_default","exports","default","createTypeAnnotationBasedOnTypeof","type","stringTypeAnnotation","numberTypeAnnotation","voidTypeAnnotation","booleanTypeAnnotation","genericTypeAnnotation","identifier","anyTypeAnnotation","Error"],"sources":["../../../src/builders/flow/createTypeAnnotationBasedOnTypeof.ts"],"sourcesContent":["import {\n anyTypeAnnotation,\n stringTypeAnnotation,\n numberTypeAnnotation,\n voidTypeAnnotation,\n booleanTypeAnnotation,\n genericTypeAnnotation,\n identifier,\n} from \"../generated/index.ts\";\nimport type * as t from \"../../index.ts\";\n\nexport default createTypeAnnotationBasedOnTypeof as {\n (type: \"string\"): t.StringTypeAnnotation;\n (type: \"number\"): t.NumberTypeAnnotation;\n (type: \"undefined\"): t.VoidTypeAnnotation;\n (type: \"boolean\"): t.BooleanTypeAnnotation;\n (type: \"function\"): t.GenericTypeAnnotation;\n (type: \"object\"): t.GenericTypeAnnotation;\n (type: \"symbol\"): t.GenericTypeAnnotation;\n (type: \"bigint\"): t.AnyTypeAnnotation;\n};\n\n/**\n * Create a type annotation based on typeof expression.\n */\nfunction createTypeAnnotationBasedOnTypeof(type: string): t.FlowType {\n switch (type) {\n case \"string\":\n return stringTypeAnnotation();\n case \"number\":\n return numberTypeAnnotation();\n case \"undefined\":\n return voidTypeAnnotation();\n case \"boolean\":\n return booleanTypeAnnotation();\n case \"function\":\n return genericTypeAnnotation(identifier(\"Function\"));\n case \"object\":\n return genericTypeAnnotation(identifier(\"Object\"));\n case \"symbol\":\n return genericTypeAnnotation(identifier(\"Symbol\"));\n case \"bigint\":\n // todo: use BigInt annotation when Flow supports BigInt\n // https://github.com/facebook/flow/issues/6639\n return anyTypeAnnotation();\n }\n throw new Error(\"Invalid typeof value: \" + type);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAQ+B,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAGhBC,iCAAiC;AAchD,SAASA,iCAAiCA,CAACC,IAAY,EAAc;EACnE,QAAQA,IAAI;IACV,KAAK,QAAQ;MACX,OAAO,IAAAC,2BAAoB,EAAC,CAAC;IAC/B,KAAK,QAAQ;MACX,OAAO,IAAAC,2BAAoB,EAAC,CAAC;IAC/B,KAAK,WAAW;MACd,OAAO,IAAAC,yBAAkB,EAAC,CAAC;IAC7B,KAAK,SAAS;MACZ,OAAO,IAAAC,4BAAqB,EAAC,CAAC;IAChC,KAAK,UAAU;MACb,OAAO,IAAAC,4BAAqB,EAAC,IAAAC,iBAAU,EAAC,UAAU,CAAC,CAAC;IACtD,KAAK,QAAQ;MACX,OAAO,IAAAD,4BAAqB,EAAC,IAAAC,iBAAU,EAAC,QAAQ,CAAC,CAAC;IACpD,KAAK,QAAQ;MACX,OAAO,IAAAD,4BAAqB,EAAC,IAAAC,iBAAU,EAAC,QAAQ,CAAC,CAAC;IACpD,KAAK,QAAQ;MAGX,OAAO,IAAAC,wBAAiB,EAAC,CAAC;EAC9B;EACA,MAAM,IAAIC,KAAK,CAAC,wBAAwB,GAAGR,IAAI,CAAC;AAClD","ignoreList":[]}
|
|
||||||
-29
@@ -1,29 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", {
|
|
||||||
value: true
|
|
||||||
});
|
|
||||||
var _lowercase = require("./lowercase.js");
|
|
||||||
Object.keys(_lowercase).forEach(function (key) {
|
|
||||||
if (key === "default" || key === "__esModule") return;
|
|
||||||
if (key in exports && exports[key] === _lowercase[key]) return;
|
|
||||||
Object.defineProperty(exports, key, {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _lowercase[key];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
var _uppercase = require("./uppercase.js");
|
|
||||||
Object.keys(_uppercase).forEach(function (key) {
|
|
||||||
if (key === "default" || key === "__esModule") return;
|
|
||||||
if (key in exports && exports[key] === _uppercase[key]) return;
|
|
||||||
Object.defineProperty(exports, key, {
|
|
||||||
enumerable: true,
|
|
||||||
get: function () {
|
|
||||||
return _uppercase[key];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
//# sourceMappingURL=index.js.map
|
|
||||||
-1
File diff suppressed because one or more lines are too long
-2902
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user