);
+ /**
+ * override base path
+ *
+ * @type {string}
+ * @memberof Configuration
+ */
+ basePath?: string;
+ /**
+ * override server index
+ *
+ * @type {number}
+ * @memberof Configuration
+ */
+ serverIndex?: number;
+ /**
+ * base options for axios calls
+ *
+ * @type {any}
+ * @memberof Configuration
+ */
+ baseOptions?: any;
+ /**
+ * The FormData constructor that will be used to create multipart form data
+ * requests. You can inject this here so that execution environments that
+ * do not support the FormData class can still run the generated client.
+ *
+ * @type {new () => FormData}
+ */
+ formDataCtor?: new () => any;
+
+ constructor(param: ConfigurationParameters = {}) {
+ this.apiKey = param.apiKey;
+ this.username = param.username;
+ this.password = param.password;
+ this.accessToken = param.accessToken;
+ this.basePath = param.basePath;
+ this.serverIndex = param.serverIndex;
+ this.baseOptions = param.baseOptions;
+ this.formDataCtor = param.formDataCtor;
+ }
+
+ /**
+ * Check if the given MIME is a JSON MIME.
+ * JSON MIME examples:
+ * application/json
+ * application/json; charset=UTF8
+ * APPLICATION/JSON
+ * application/vnd.company+json
+ * @param mime - MIME (Multipurpose Internet Mail Extensions)
+ * @return True if the given MIME is JSON, false otherwise.
+ */
+ public isJsonMime(mime: string): boolean {
+ const jsonMime: RegExp = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
+ return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
+ }
+}
diff --git a/data_migration_tools/client/src/api/git_push.sh b/data_migration_tools/client/src/api/git_push.sh
new file mode 100644
index 0000000..f53a75d
--- /dev/null
+++ b/data_migration_tools/client/src/api/git_push.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
+#
+# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com"
+
+git_user_id=$1
+git_repo_id=$2
+release_note=$3
+git_host=$4
+
+if [ "$git_host" = "" ]; then
+ git_host="github.com"
+ echo "[INFO] No command line input provided. Set \$git_host to $git_host"
+fi
+
+if [ "$git_user_id" = "" ]; then
+ git_user_id="GIT_USER_ID"
+ echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
+fi
+
+if [ "$git_repo_id" = "" ]; then
+ git_repo_id="GIT_REPO_ID"
+ echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
+fi
+
+if [ "$release_note" = "" ]; then
+ release_note="Minor update"
+ echo "[INFO] No command line input provided. Set \$release_note to $release_note"
+fi
+
+# Initialize the local directory as a Git repository
+git init
+
+# Adds the files in the local repository and stages them for commit.
+git add .
+
+# Commits the tracked changes and prepares them to be pushed to a remote repository.
+git commit -m "$release_note"
+
+# Sets the new remote
+git_remote=$(git remote)
+if [ "$git_remote" = "" ]; then # git remote not defined
+
+ if [ "$GIT_TOKEN" = "" ]; then
+ echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
+ git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
+ else
+ git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
+ fi
+
+fi
+
+git pull origin master
+
+# Pushes (Forces) the changes in the local repository up to the remote repository
+echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
+git push origin master 2>&1 | grep -v 'To https'
diff --git a/data_migration_tools/client/src/api/index.ts b/data_migration_tools/client/src/api/index.ts
new file mode 100644
index 0000000..c982723
--- /dev/null
+++ b/data_migration_tools/client/src/api/index.ts
@@ -0,0 +1,18 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * ODMSOpenAPI
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+export * from "./api";
+export * from "./configuration";
+
diff --git a/data_migration_tools/client/src/app/store.ts b/data_migration_tools/client/src/app/store.ts
index 7727f4a..d34f6a0 100644
--- a/data_migration_tools/client/src/app/store.ts
+++ b/data_migration_tools/client/src/app/store.ts
@@ -1,7 +1,11 @@
import { configureStore, ThunkAction, Action } from "@reduxjs/toolkit";
+import auth from "features/auth/authSlice";
+import ui from "features/ui/uiSlice";
export const store = configureStore({
reducer: {
+ auth,
+ ui,
},
});
diff --git a/data_migration_tools/client/src/common/errors/code.ts b/data_migration_tools/client/src/common/errors/code.ts
new file mode 100644
index 0000000..6237762
--- /dev/null
+++ b/data_migration_tools/client/src/common/errors/code.ts
@@ -0,0 +1,17 @@
+/*
+エラーコード作成方針
+E+6桁(数字)で構成する。
+- 1~2桁目の値は種類(業務エラー、システムエラー...)
+- 3~4桁目の値は原因箇所(トークン、DB、...)
+- 5~6桁目の値は任意の重複しない値
+ex)
+E00XXXX : システムエラー(通信エラーやDB接続失敗など)
+E01XXXX : 業務エラー
+EXX00XX : 内部エラー(内部プログラムのエラー)
+EXX01XX : トークンエラー(トークン認証関連)
+EXX02XX : DBエラー(DB関連)
+EXX03XX : ADB2Cエラー(DB関連)
+*/
+export const errorCodes = [
+ "E009999", // 汎用エラー
+] as const;
diff --git a/data_migration_tools/client/src/common/errors/index.ts b/data_migration_tools/client/src/common/errors/index.ts
new file mode 100644
index 0000000..1543e4c
--- /dev/null
+++ b/data_migration_tools/client/src/common/errors/index.ts
@@ -0,0 +1,3 @@
+export * from "./code";
+export * from "./types";
+export * from "./utils";
diff --git a/data_migration_tools/client/src/common/errors/types.ts b/data_migration_tools/client/src/common/errors/types.ts
new file mode 100644
index 0000000..f4a42b4
--- /dev/null
+++ b/data_migration_tools/client/src/common/errors/types.ts
@@ -0,0 +1,9 @@
+import { errorCodes } from "./code";
+
+export type ErrorObject = {
+ message: string;
+ code: ErrorCodeType;
+ statusCode?: number;
+};
+
+export type ErrorCodeType = (typeof errorCodes)[number];
diff --git a/data_migration_tools/client/src/common/errors/utils.ts b/data_migration_tools/client/src/common/errors/utils.ts
new file mode 100644
index 0000000..3dd2410
--- /dev/null
+++ b/data_migration_tools/client/src/common/errors/utils.ts
@@ -0,0 +1,101 @@
+import { AxiosError } from "axios";
+import { isError } from "lodash";
+import { ErrorResponse } from "../../api";
+import { errorCodes } from "./code";
+import { ErrorCodeType, ErrorObject } from "./types";
+
+export const createErrorObject = (error: unknown): ErrorObject => {
+ // 最低限通常のエラーかを判定
+ // Error以外のものがthrowされた場合
+ // 基本的にないはずだがプログラム上あるので拾う
+ if (!isError(error)) {
+ return {
+ message: "not error type.",
+ code: "E009999",
+ };
+ }
+
+ // Axiosエラー 通信してのエラーであるかを判定
+ if (!isAxiosError(error)) {
+ return {
+ message: "not axios error.",
+ code: "E009999",
+ };
+ }
+
+ const errorResponse = error.response;
+ if (!errorResponse) {
+ return {
+ message: error.message,
+ code: "E009999",
+ statusCode: errorResponse,
+ };
+ }
+
+ const { data } = errorResponse;
+
+ // 想定しているエラーレスポンスの型か判定
+ if (!isErrorResponse(data)) {
+ return {
+ message: error.message,
+ code: "E009999",
+ statusCode: errorResponse.status,
+ };
+ }
+
+ const { message, code } = data;
+
+ // 想定しているエラーコードかを判定
+ if (!isErrorCode(code)) {
+ return {
+ message,
+ code: "E009999",
+ statusCode: errorResponse.status,
+ };
+ }
+
+ return {
+ message,
+ code,
+ statusCode: errorResponse.status,
+ };
+};
+
+const isAxiosError = (e: unknown): e is AxiosError => {
+ const error = e as AxiosError;
+ return error?.isAxiosError ?? false;
+};
+
+const isErrorResponse = (error: unknown): error is ErrorResponse => {
+ const errorResponse = error as ErrorResponse;
+ if (
+ errorResponse === undefined ||
+ errorResponse.message === undefined ||
+ errorResponse.code === undefined
+ ) {
+ return false;
+ }
+
+ return true;
+};
+
+const isErrorCode = (errorCode: string): errorCode is ErrorCodeType =>
+ errorCodes.includes(errorCode as ErrorCodeType);
+
+export const isErrorObject = (
+ data: unknown
+): data is { error: ErrorObject } => {
+ if (
+ data &&
+ typeof data === "object" &&
+ "error" in data &&
+ typeof (data as { error: ErrorObject }).error === "object" &&
+ typeof (data as { error: ErrorObject }).error.message === "string" &&
+ typeof (data as { error: ErrorObject }).error.code === "string" &&
+ (typeof (data as { error: ErrorObject }).error.statusCode === "number" ||
+ (data as { error: ErrorObject }).error.statusCode === undefined)
+ ) {
+ return true;
+ }
+ return false;
+};
diff --git a/data_migration_tools/client/src/common/getBasePath.ts b/data_migration_tools/client/src/common/getBasePath.ts
index f1053d4..f94fdff 100644
--- a/data_migration_tools/client/src/common/getBasePath.ts
+++ b/data_migration_tools/client/src/common/getBasePath.ts
@@ -1,6 +1,6 @@
export const getBasePath = () => {
if (import.meta.env.VITE_STAGE === "local") {
- return "http://localhost:8180";
+ return "http://localhost:8280";
}
return window.location.origin;
};
diff --git a/data_migration_tools/client/src/features/auth/authSlice.ts b/data_migration_tools/client/src/features/auth/authSlice.ts
new file mode 100644
index 0000000..cb014fa
--- /dev/null
+++ b/data_migration_tools/client/src/features/auth/authSlice.ts
@@ -0,0 +1,15 @@
+import { createSlice } from "@reduxjs/toolkit";
+import type { AuthState } from "./state";
+import { initialConfig } from "./utils";
+
+const initialState: AuthState = {
+ configuration: initialConfig(),
+};
+
+export const authSlice = createSlice({
+ name: "auth",
+ initialState,
+ reducers: {},
+});
+
+export default authSlice.reducer;
diff --git a/data_migration_tools/client/src/features/auth/index.ts b/data_migration_tools/client/src/features/auth/index.ts
new file mode 100644
index 0000000..9dcef78
--- /dev/null
+++ b/data_migration_tools/client/src/features/auth/index.ts
@@ -0,0 +1,3 @@
+export * from "./authSlice";
+export * from "./state";
+export * from "./utils";
diff --git a/data_migration_tools/client/src/features/auth/state.ts b/data_migration_tools/client/src/features/auth/state.ts
new file mode 100644
index 0000000..e95c05f
--- /dev/null
+++ b/data_migration_tools/client/src/features/auth/state.ts
@@ -0,0 +1,5 @@
+import { ConfigurationParameters } from "../../api";
+
+export interface AuthState {
+ configuration: ConfigurationParameters;
+}
diff --git a/data_migration_tools/client/src/features/auth/utils.ts b/data_migration_tools/client/src/features/auth/utils.ts
new file mode 100644
index 0000000..764dbb1
--- /dev/null
+++ b/data_migration_tools/client/src/features/auth/utils.ts
@@ -0,0 +1,13 @@
+import { ConfigurationParameters } from "../../api";
+
+// 初期状態のAPI Config
+export const initialConfig = (): ConfigurationParameters => {
+ const config: ConfigurationParameters = {};
+ if (import.meta.env.VITE_STAGE === "local") {
+ config.basePath = "http://localhost:8280";
+ } else {
+ config.basePath = `${window.location.origin}/dictation/api`;
+ }
+
+ return config;
+};
diff --git a/data_migration_tools/client/src/features/delete/deleteSlice.ts b/data_migration_tools/client/src/features/delete/deleteSlice.ts
new file mode 100644
index 0000000..c89eac9
--- /dev/null
+++ b/data_migration_tools/client/src/features/delete/deleteSlice.ts
@@ -0,0 +1,25 @@
+import { createSlice } from "@reduxjs/toolkit";
+import { DeleteState } from "./state";
+import { deleteDataAsync } from "./operations";
+
+// eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars
+const initialState: DeleteState = {};
+
+export const deleteSlice = createSlice({
+ name: "detete",
+ initialState,
+ reducers: {},
+ extraReducers: (builder) => {
+ builder.addCase(deleteDataAsync.pending, () => {
+ /* Empty Object */
+ });
+ builder.addCase(deleteDataAsync.fulfilled, () => {
+ /* Empty Object */
+ });
+ builder.addCase(deleteDataAsync.rejected, () => {
+ /* Empty Object */
+ });
+ },
+});
+
+export default deleteSlice.reducer;
diff --git a/data_migration_tools/client/src/features/delete/index.ts b/data_migration_tools/client/src/features/delete/index.ts
new file mode 100644
index 0000000..b705514
--- /dev/null
+++ b/data_migration_tools/client/src/features/delete/index.ts
@@ -0,0 +1,3 @@
+export * from "./state";
+export * from "./deleteSlice";
+export * from "./operations";
diff --git a/data_migration_tools/client/src/features/delete/operations.ts b/data_migration_tools/client/src/features/delete/operations.ts
new file mode 100644
index 0000000..7c275cc
--- /dev/null
+++ b/data_migration_tools/client/src/features/delete/operations.ts
@@ -0,0 +1,47 @@
+import { createAsyncThunk } from "@reduxjs/toolkit";
+import { openSnackbar } from "../ui/uiSlice";
+import type { RootState } from "../../app/store";
+import { ErrorObject, createErrorObject } from "../../common/errors";
+import { DeleteApi } from "../../api/api";
+import { Configuration } from "../../api/configuration";
+
+export const deleteDataAsync = createAsyncThunk<
+ {
+ /* Empty Object */
+ },
+ void,
+ {
+ // rejectした時の返却値の型
+ rejectValue: {
+ error: ErrorObject;
+ };
+ }
+>("delete/deleteDataAsync", async (args, thunkApi) => {
+ // apiのConfigurationを取得する
+ const { getState } = thunkApi;
+ const state = getState() as RootState;
+ const { configuration } = state.auth;
+ const config = new Configuration(configuration);
+ const deleteApi = new DeleteApi(config);
+
+ try {
+ await deleteApi.deleteData();
+ thunkApi.dispatch(
+ openSnackbar({
+ level: "info",
+ message: "削除しました。",
+ })
+ );
+ return {};
+ } catch (e) {
+ const error = createErrorObject(e);
+ thunkApi.dispatch(
+ openSnackbar({
+ level: "error",
+ message: "削除に失敗しました。",
+ })
+ );
+
+ return thunkApi.rejectWithValue({ error });
+ }
+});
diff --git a/data_migration_tools/client/src/features/delete/state.ts b/data_migration_tools/client/src/features/delete/state.ts
new file mode 100644
index 0000000..3ac9dbd
--- /dev/null
+++ b/data_migration_tools/client/src/features/delete/state.ts
@@ -0,0 +1,2 @@
+// eslint-disable-next-line @typescript-eslint/no-empty-interface
+export interface DeleteState {}
diff --git a/data_migration_tools/client/src/features/ui/constants.ts b/data_migration_tools/client/src/features/ui/constants.ts
new file mode 100644
index 0000000..9374dea
--- /dev/null
+++ b/data_migration_tools/client/src/features/ui/constants.ts
@@ -0,0 +1,2 @@
+// 標準のスナックバー表示時間(ミリ秒)
+export const DEFAULT_SNACKBAR_DURATION = 3000;
diff --git a/data_migration_tools/client/src/features/ui/index.ts b/data_migration_tools/client/src/features/ui/index.ts
new file mode 100644
index 0000000..464ecc2
--- /dev/null
+++ b/data_migration_tools/client/src/features/ui/index.ts
@@ -0,0 +1,5 @@
+export * from "./constants";
+export * from "./selectors";
+export * from "./state";
+export * from "./uiSlice";
+export * from "./types";
diff --git a/data_migration_tools/client/src/features/ui/selectors.ts b/data_migration_tools/client/src/features/ui/selectors.ts
new file mode 100644
index 0000000..3fa47c0
--- /dev/null
+++ b/data_migration_tools/client/src/features/ui/selectors.ts
@@ -0,0 +1,15 @@
+import type { RootState } from "app/store";
+import { SnackbarLevel } from "./types";
+
+export const selectSnackber = (
+ state: RootState
+): {
+ isOpen: boolean;
+ level: SnackbarLevel;
+ message: string;
+ duration?: number;
+} => {
+ const { isOpen, level, message, duration } = state.ui;
+
+ return { isOpen, level, message, duration };
+};
diff --git a/data_migration_tools/client/src/features/ui/state.ts b/data_migration_tools/client/src/features/ui/state.ts
new file mode 100644
index 0000000..c9bb660
--- /dev/null
+++ b/data_migration_tools/client/src/features/ui/state.ts
@@ -0,0 +1,8 @@
+import { SnackbarLevel } from "./types";
+
+export interface UIState {
+ isOpen: boolean;
+ level: SnackbarLevel;
+ message: string;
+ duration?: number;
+}
diff --git a/data_migration_tools/client/src/features/ui/types.ts b/data_migration_tools/client/src/features/ui/types.ts
new file mode 100644
index 0000000..cacf182
--- /dev/null
+++ b/data_migration_tools/client/src/features/ui/types.ts
@@ -0,0 +1 @@
+export type SnackbarLevel = "info" | "error";
diff --git a/data_migration_tools/client/src/features/ui/uiSlice.ts b/data_migration_tools/client/src/features/ui/uiSlice.ts
new file mode 100644
index 0000000..dd84534
--- /dev/null
+++ b/data_migration_tools/client/src/features/ui/uiSlice.ts
@@ -0,0 +1,38 @@
+import { createSlice, PayloadAction } from "@reduxjs/toolkit";
+import { SnackbarLevel } from "./types";
+import { UIState } from "./state";
+import { DEFAULT_SNACKBAR_DURATION } from "./constants";
+
+const initialState: UIState = {
+ isOpen: false,
+ level: "error",
+ message: "",
+};
+
+export const uiSlice = createSlice({
+ name: "ui",
+ initialState,
+ reducers: {
+ openSnackbar: (
+ state,
+ action: PayloadAction<{
+ level: SnackbarLevel;
+ message: string;
+ duration?: number;
+ }>
+ ) => {
+ const { level, message, duration } = action.payload;
+ state.isOpen = true;
+ state.level = level;
+ state.message = message;
+ state.duration =
+ level === "error" ? undefined : duration ?? DEFAULT_SNACKBAR_DURATION;
+ },
+ closeSnackbar: (state) => {
+ state.isOpen = false;
+ },
+ },
+});
+export const { openSnackbar, closeSnackbar } = uiSlice.actions;
+
+export default uiSlice.reducer;
diff --git a/data_migration_tools/client/src/pages/deletePage/index.tsx b/data_migration_tools/client/src/pages/deletePage/index.tsx
new file mode 100644
index 0000000..2643d87
--- /dev/null
+++ b/data_migration_tools/client/src/pages/deletePage/index.tsx
@@ -0,0 +1,32 @@
+import { AppDispatch } from "app/store";
+import { deleteDataAsync } from "features/delete";
+import React, { useCallback } from "react";
+import { useDispatch } from "react-redux";
+import { Link } from "react-router-dom";
+
+const DeletePage = (): JSX.Element => {
+ const dispatch: AppDispatch = useDispatch();
+
+ const onDelete = useCallback(() => {
+ if (
+ /* eslint-disable-next-line no-alert */
+ !window.confirm("本当に削除しますか?")
+ ) {
+ return;
+ }
+ dispatch(deleteDataAsync());
+ }, [dispatch]);
+
+ return (
+
+
データ削除ツール
+
+
+
return to TopPage
+
+ );
+};
+
+export default DeletePage;
diff --git a/data_migration_tools/client/src/pages/topPage/index.tsx b/data_migration_tools/client/src/pages/topPage/index.tsx
new file mode 100644
index 0000000..9d244b0
--- /dev/null
+++ b/data_migration_tools/client/src/pages/topPage/index.tsx
@@ -0,0 +1,15 @@
+import React from "react";
+import { Link } from "react-router-dom";
+
+const TopPage = (): JSX.Element => {
+ console.log("DeletePage");
+ return (
+
+ データ削除ツール
+
+ return to TopPage
+
+ );
+};
+
+export default TopPage;
diff --git a/data_migration_tools/server/.devcontainer/docker-compose.yml b/data_migration_tools/server/.devcontainer/docker-compose.yml
index 547e6db..9842f96 100644
--- a/data_migration_tools/server/.devcontainer/docker-compose.yml
+++ b/data_migration_tools/server/.devcontainer/docker-compose.yml
@@ -14,5 +14,11 @@ services:
- "8280"
environment:
- CHOKIDAR_USEPOLLING=true
+ networks:
+ - external
+networks:
+ external:
+ name: omds_network
+ external: true
volumes:
data_migration_tools_server_node_modules:
diff --git a/data_migration_tools/server/.env b/data_migration_tools/server/.env
index e69de29..c104e29 100644
--- a/data_migration_tools/server/.env
+++ b/data_migration_tools/server/.env
@@ -0,0 +1,5 @@
+DB_HOST=omds-mysql
+DB_PORT=3306
+DB_NAME=omds
+DB_USERNAME=omdsdbuser
+DB_PASSWORD=omdsdbpass
diff --git a/data_migration_tools/server/package-lock.json b/data_migration_tools/server/package-lock.json
index bc5a253..50d9f33 100644
--- a/data_migration_tools/server/package-lock.json
+++ b/data_migration_tools/server/package-lock.json
@@ -1,15 +1,17 @@
{
- "name": "server",
+ "name": "data_migration_tool",
"version": "0.0.1",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
- "name": "server",
+ "name": "data_migration_tool",
"version": "0.0.1",
"license": "UNLICENSED",
"dependencies": {
+ "@azure/identity": "^4.0.1",
"@azure/storage-blob": "^12.14.0",
+ "@microsoft/microsoft-graph-client": "^3.0.7",
"@nestjs/common": "^9.3.9",
"@nestjs/config": "^2.3.1",
"@nestjs/core": "^9.3.9",
@@ -17,6 +19,7 @@
"@nestjs/serve-static": "^3.0.1",
"@nestjs/swagger": "^6.2.1",
"@nestjs/testing": "^9.3.9",
+ "@nestjs/typeorm": "^10.0.2",
"@openapitools/openapi-generator-cli": "^2.5.2",
"@vercel/ncc": "^0.36.1",
"axios": "^1.3.4",
@@ -24,6 +27,7 @@
"class-validator": "^0.14.0",
"cookie-parser": "^1.4.6",
"multer": "^1.4.5-lts.1",
+ "mysql2": "^3.9.1",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.8.0",
"swagger-cli": "^4.0.4"
@@ -48,6 +52,15 @@
"typescript": "^4.3.5"
}
},
+ "node_modules/@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/@ampproject/remapping": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
@@ -239,11 +252,62 @@
}
},
"node_modules/@azure/core-auth": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.4.0.tgz",
- "integrity": "sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.6.0.tgz",
+ "integrity": "sha512-3X9wzaaGgRaBCwhLQZDtFp5uLIXCPrGbwJNWPPugvL4xbIGgScv77YzzxToKGLAKvG9amDoofMoP+9hsH1vs1w==",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-util": "^1.1.0",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.0.0.tgz",
+ "integrity": "sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==",
+ "dependencies": {
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-client": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.8.0.tgz",
+ "integrity": "sha512-+gHS3gEzPlhyQBMoqVPOTeNH031R5DM/xpCvz72y38C09rg4Hui/1sJS/ujoisDZbbSHyuRLVWdFlwL0pIFwbg==",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.4.0",
+ "@azure/core-rest-pipeline": "^1.9.1",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/core-util": "^1.0.0",
+ "@azure/logger": "^1.0.0",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-client/node_modules/@azure/abort-controller": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.0.0.tgz",
+ "integrity": "sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==",
+ "dependencies": {
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-client/node_modules/@azure/core-tracing": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz",
+ "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==",
"dependencies": {
- "@azure/abort-controller": "^1.0.0",
"tslib": "^2.2.0"
},
"engines": {
@@ -307,6 +371,46 @@
"node": ">=14.0.0"
}
},
+ "node_modules/@azure/core-rest-pipeline": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.14.0.tgz",
+ "integrity": "sha512-Tp4M6NsjCmn9L5p7HsW98eSOS7A0ibl3e5ntZglozT0XuD/0y6i36iW829ZbBq0qihlGgfaeFpkLjZ418KDm1Q==",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.4.0",
+ "@azure/core-tracing": "^1.0.1",
+ "@azure/core-util": "^1.3.0",
+ "@azure/logger": "^1.0.0",
+ "http-proxy-agent": "^5.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.0.0.tgz",
+ "integrity": "sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==",
+ "dependencies": {
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-rest-pipeline/node_modules/@azure/core-tracing": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz",
+ "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==",
+ "dependencies": {
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/@azure/core-tracing": {
"version": "1.0.0-preview.13",
"resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz",
@@ -331,6 +435,41 @@
"node": ">=14.0.0"
}
},
+ "node_modules/@azure/identity": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.0.1.tgz",
+ "integrity": "sha512-yRdgF03SFLqUMZZ1gKWt0cs0fvrDIkq2bJ6Oidqcoo5uM85YMBnXWMzYKK30XqIT76lkFyAaoAAy5knXhrG4Lw==",
+ "dependencies": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-auth": "^1.5.0",
+ "@azure/core-client": "^1.4.0",
+ "@azure/core-rest-pipeline": "^1.1.0",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/core-util": "^1.3.0",
+ "@azure/logger": "^1.0.0",
+ "@azure/msal-browser": "^3.5.0",
+ "@azure/msal-node": "^2.5.1",
+ "events": "^3.0.0",
+ "jws": "^4.0.0",
+ "open": "^8.0.0",
+ "stoppable": "^1.1.0",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/identity/node_modules/@azure/core-tracing": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz",
+ "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==",
+ "dependencies": {
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/@azure/logger": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.4.tgz",
@@ -342,6 +481,46 @@
"node": ">=14.0.0"
}
},
+ "node_modules/@azure/msal-browser": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.10.0.tgz",
+ "integrity": "sha512-mnmi8dCXVNZI+AGRq0jKQ3YiodlIC4W9npr6FCB9WN6NQT+6rq+cIlxgUb//BjLyzKsnYo+i4LROGeMyU+6v1A==",
+ "dependencies": {
+ "@azure/msal-common": "14.7.1"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@azure/msal-common": {
+ "version": "14.7.1",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.7.1.tgz",
+ "integrity": "sha512-v96btzjM7KrAu4NSEdOkhQSTGOuNUIIsUdB8wlyB9cdgl5KqEKnTonHUZ8+khvZ6Ap542FCErbnTyDWl8lZ2rA==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@azure/msal-node": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.6.4.tgz",
+ "integrity": "sha512-nNvEPx009/80UATCToF+29NZYocn01uKrB91xtFr7bSqkqO1PuQGXRyYwryWRztUrYZ1YsSbw9A+LmwOhpVvcg==",
+ "dependencies": {
+ "@azure/msal-common": "14.7.1",
+ "jsonwebtoken": "^9.0.0",
+ "uuid": "^8.3.0"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@azure/msal-node/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/@azure/storage-blob": {
"version": "12.14.0",
"resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.14.0.tgz",
@@ -1026,7 +1205,7 @@
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"@jridgewell/trace-mapping": "0.3.9"
},
@@ -1038,16 +1217,16 @@
"version": "0.3.9",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz",
- "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
"dev": true,
"dependencies": {
"eslint-visitor-keys": "^3.3.0"
@@ -1060,23 +1239,23 @@
}
},
"node_modules/@eslint-community/regexpp": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz",
- "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==",
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
"dev": true,
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
"node_modules/@eslint/eslintrc": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz",
- "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.5.0",
+ "espree": "^9.6.0",
"globals": "^13.19.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
@@ -1132,22 +1311,22 @@
"dev": true
},
"node_modules/@eslint/js": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz",
- "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz",
+ "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.11.8",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
- "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
"dev": true,
"dependencies": {
- "@humanwhocodes/object-schema": "^1.2.1",
- "debug": "^4.1.1",
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
"minimatch": "^3.0.5"
},
"engines": {
@@ -1168,11 +1347,107 @@
}
},
"node_modules/@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
- "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
"dev": true
},
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "peer": true,
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "peer": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "peer": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "peer": true
+ },
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "peer": true,
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
"node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -1588,7 +1863,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
"integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
- "dev": true,
+ "devOptional": true,
"engines": {
"node": ">=6.0.0"
}
@@ -1632,7 +1907,7 @@
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
"integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
- "dev": true
+ "devOptional": true
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.17",
@@ -1657,6 +1932,32 @@
"node": ">=8"
}
},
+ "node_modules/@microsoft/microsoft-graph-client": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-client/-/microsoft-graph-client-3.0.7.tgz",
+ "integrity": "sha512-/AazAV/F+HK4LIywF9C+NYHcJo038zEnWkteilcxC1FM/uK/4NVGDKGrxx7nNq1ybspAroRKT4I1FHfxQzxkUw==",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@azure/identity": {
+ "optional": true
+ },
+ "@azure/msal-browser": {
+ "optional": true
+ },
+ "buffer": {
+ "optional": true
+ },
+ "stream-browserify": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@nestjs/axios": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-3.0.1.tgz",
@@ -1968,6 +2269,33 @@
}
}
},
+ "node_modules/@nestjs/typeorm": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-10.0.2.tgz",
+ "integrity": "sha512-H738bJyydK4SQkRCTeh1aFBxoO1E9xdL/HaLGThwrqN95os5mEyAtK7BLADOS+vldP4jDZ2VQPLj4epWwRqCeQ==",
+ "dependencies": {
+ "uuid": "9.0.1"
+ },
+ "peerDependencies": {
+ "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0",
+ "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0",
+ "reflect-metadata": "^0.1.13 || ^0.2.0",
+ "rxjs": "^7.2.0",
+ "typeorm": "^0.3.0"
+ }
+ },
+ "node_modules/@nestjs/typeorm/node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -2243,6 +2571,16 @@
"node": ">=8.0.0"
}
},
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/@sinclair/typebox": {
"version": "0.24.51",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz",
@@ -2267,29 +2605,43 @@
"@sinonjs/commons": "^1.7.0"
}
},
+ "node_modules/@sqltools/formatter": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz",
+ "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==",
+ "peer": true
+ },
+ "node_modules/@tootallnate/once": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/@tsconfig/node10": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
"integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
- "dev": true
+ "devOptional": true
},
"node_modules/@tsconfig/node12": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
- "dev": true
+ "devOptional": true
},
"node_modules/@tsconfig/node14": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
- "dev": true
+ "devOptional": true
},
"node_modules/@tsconfig/node16": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz",
"integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==",
- "dev": true
+ "devOptional": true
},
"node_modules/@types/babel__core": {
"version": "7.20.0",
@@ -2450,9 +2802,9 @@
}
},
"node_modules/@types/json-schema": {
- "version": "7.0.11",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
- "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true,
"peer": true
},
@@ -2570,6 +2922,12 @@
"integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
"dev": true
},
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
+ },
"node_modules/@vercel/ncc": {
"version": "0.36.1",
"resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.36.1.tgz",
@@ -2772,10 +3130,10 @@
}
},
"node_modules/acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
- "dev": true,
+ "version": "8.11.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+ "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+ "devOptional": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -2806,11 +3164,22 @@
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
"integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
- "dev": true,
+ "devOptional": true,
"engines": {
"node": ">=0.4.0"
}
},
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
"node_modules/ajv": {
"version": "8.12.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
@@ -2886,6 +3255,12 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "peer": true
+ },
"node_modules/anymatch": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
@@ -2899,6 +3274,15 @@
"node": ">= 8"
}
},
+ "node_modules/app-root-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz",
+ "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==",
+ "peer": true,
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
"node_modules/append-field": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
@@ -2908,7 +3292,7 @@
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
- "dev": true
+ "devOptional": true
},
"node_modules/argparse": {
"version": "1.0.10",
@@ -3220,6 +3604,11 @@
"ieee754": "^1.1.13"
}
},
+ "node_modules/buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
+ },
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -3380,6 +3769,27 @@
"node": ">=8"
}
},
+ "node_modules/cli-highlight": {
+ "version": "2.1.11",
+ "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz",
+ "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==",
+ "peer": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "highlight.js": "^10.7.1",
+ "mz": "^2.4.0",
+ "parse5": "^5.1.1",
+ "parse5-htmlparser2-tree-adapter": "^6.0.0",
+ "yargs": "^16.0.0"
+ },
+ "bin": {
+ "highlight": "bin/highlight"
+ },
+ "engines": {
+ "node": ">=8.0.0",
+ "npm": ">=5.0.0"
+ }
+ },
"node_modules/cli-spinners": {
"version": "2.9.2",
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
@@ -3650,13 +4060,12 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
- "dev": true
+ "devOptional": true
},
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -3681,11 +4090,16 @@
"url": "https://opencollective.com/date-fns"
}
},
+ "node_modules/dayjs": {
+ "version": "1.11.10",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
+ "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==",
+ "peer": true
+ },
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
"dependencies": {
"ms": "2.1.2"
},
@@ -3747,6 +4161,14 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -3755,6 +4177,14 @@
"node": ">=0.4.0"
}
},
+ "node_modules/denque": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
+ "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -3795,7 +4225,7 @@
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true,
+ "devOptional": true,
"engines": {
"node": ">=0.3.1"
}
@@ -3839,6 +4269,12 @@
"node": ">=12"
}
},
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "peer": true
+ },
"node_modules/easy-table": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz",
@@ -3847,6 +4283,14 @@
"wcwidth": ">=1.0.1"
}
},
+ "node_modules/ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -3938,27 +4382,28 @@
}
},
"node_modules/eslint": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz",
- "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz",
+ "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.4.0",
- "@eslint/eslintrc": "^2.0.1",
- "@eslint/js": "8.36.0",
- "@humanwhocodes/config-array": "^0.11.8",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.56.0",
+ "@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
- "ajv": "^6.10.0",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
"debug": "^4.3.2",
"doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.1.1",
- "eslint-visitor-keys": "^3.3.0",
- "espree": "^9.5.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
"esquery": "^1.4.2",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -3966,22 +4411,19 @@
"find-up": "^5.0.0",
"glob-parent": "^6.0.2",
"globals": "^13.19.0",
- "grapheme-splitter": "^1.0.4",
+ "graphemer": "^1.4.0",
"ignore": "^5.2.0",
- "import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"is-path-inside": "^3.0.3",
- "js-sdsl": "^4.1.4",
"js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
+ "optionator": "^0.9.3",
"strip-ansi": "^6.0.1",
- "strip-json-comments": "^3.1.0",
"text-table": "^0.2.0"
},
"bin": {
@@ -4042,12 +4484,15 @@
}
},
"node_modules/eslint-visitor-keys": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
- "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint/node_modules/ajv": {
@@ -4073,9 +4518,9 @@
"dev": true
},
"node_modules/eslint/node_modules/eslint-scope": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
- "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
"dev": true,
"dependencies": {
"esrecurse": "^4.3.0",
@@ -4083,6 +4528,9 @@
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint/node_modules/estraverse": {
@@ -4125,14 +4573,14 @@
"dev": true
},
"node_modules/espree": {
- "version": "9.5.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz",
- "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==",
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
"dev": true,
"dependencies": {
- "acorn": "^8.8.0",
+ "acorn": "^8.9.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.3.0"
+ "eslint-visitor-keys": "^3.4.1"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -4598,6 +5046,34 @@
}
}
},
+ "node_modules/foreground-child": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
+ "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+ "peer": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/foreground-child/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "peer": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
@@ -4680,6 +5156,14 @@
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
+ "node_modules/generate-function": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
+ "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
+ "dependencies": {
+ "is-property": "^1.0.2"
+ }
+ },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -4758,9 +5242,9 @@
"peer": true
},
"node_modules/globals": {
- "version": "13.20.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
- "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -4777,10 +5261,10 @@
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
},
- "node_modules/grapheme-splitter": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
- "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true
},
"node_modules/has": {
@@ -4822,6 +5306,15 @@
"node": ">=8"
}
},
+ "node_modules/highlight.js": {
+ "version": "10.7.3",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
+ "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
+ "peer": true,
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/hosted-git-info": {
"version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
@@ -4849,6 +5342,31 @@
"node": ">= 0.8"
}
},
+ "node_modules/http-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+ "dependencies": {
+ "@tootallnate/once": "2",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
@@ -5019,6 +5537,20 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -5083,6 +5615,11 @@
"node": ">=8"
}
},
+ "node_modules/is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
+ },
"node_modules/is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@@ -5106,6 +5643,17 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dependencies": {
+ "is-docker": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -5114,8 +5662,7 @@
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
},
"node_modules/istanbul-lib-coverage": {
"version": "3.2.0",
@@ -5209,6 +5756,24 @@
"node": ">=6"
}
},
+ "node_modules/jackspeak": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
+ "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "peer": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
"node_modules/jest": {
"version": "28.0.3",
"resolved": "https://registry.npmjs.org/jest/-/jest-28.0.3.tgz",
@@ -6158,16 +6723,6 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
- "node_modules/js-sdsl": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
- "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/js-sdsl"
- }
- },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -6238,6 +6793,65 @@
"graceful-fs": "^4.1.6"
}
},
+ "node_modules/jsonwebtoken": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
+ "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
+ "dependencies": {
+ "jws": "^3.2.2",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/jsonwebtoken/node_modules/jwa": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+ "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+ "dependencies": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jsonwebtoken/node_modules/jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+ "dependencies": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jwa": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
+ "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
+ "dependencies": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jws": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
+ "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
+ "dependencies": {
+ "jwa": "^2.0.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
"node_modules/kleur": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
@@ -6420,6 +7034,36 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
+ "node_modules/lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+ "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
+ },
+ "node_modules/lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
+ },
+ "node_modules/lodash.isinteger": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+ "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
+ },
+ "node_modules/lodash.isnumber": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
+ },
+ "node_modules/lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
+ },
"node_modules/lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -6432,6 +7076,11 @@
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
+ "node_modules/lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
+ },
"node_modules/log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -6447,6 +7096,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/long": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
+ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
+ },
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -6484,7 +7138,7 @@
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
- "dev": true
+ "devOptional": true
},
"node_modules/makeerror": {
"version": "1.0.12",
@@ -6589,6 +7243,15 @@
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
},
+ "node_modules/minipass": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+ "peer": true,
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
"node_modules/mkdirp": {
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
@@ -6603,8 +7266,7 @@
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/multer": {
"version": "1.4.5-lts.1",
@@ -6628,6 +7290,73 @@
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
},
+ "node_modules/mysql2": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.1.tgz",
+ "integrity": "sha512-3njoWAAhGBYy0tWBabqUQcLtczZUxrmmtc2vszQUekg3kTJyZ5/IeLC3Fo04u6y6Iy5Sba7pIIa2P/gs8D3ZeQ==",
+ "dependencies": {
+ "denque": "^2.1.0",
+ "generate-function": "^2.3.1",
+ "iconv-lite": "^0.6.3",
+ "long": "^5.2.1",
+ "lru-cache": "^8.0.0",
+ "named-placeholders": "^1.1.3",
+ "seq-queue": "^0.0.5",
+ "sqlstring": "^2.3.2"
+ },
+ "engines": {
+ "node": ">= 8.0"
+ }
+ },
+ "node_modules/mysql2/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mysql2/node_modules/lru-cache": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz",
+ "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==",
+ "engines": {
+ "node": ">=16.14"
+ }
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "peer": true,
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/named-placeholders": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz",
+ "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
+ "dependencies": {
+ "lru-cache": "^7.14.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/named-placeholders/node_modules/lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -6790,6 +7519,22 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/open": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+ "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+ "dependencies": {
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/openapi-types": {
"version": "12.1.0",
"resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.0.tgz",
@@ -6797,17 +7542,17 @@
"peer": true
},
"node_modules/optionator": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
- "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
"dev": true,
"dependencies": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
+ "type-check": "^0.4.0"
},
"engines": {
"node": ">= 0.8.0"
@@ -6930,6 +7675,27 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/parse5": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
+ "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
+ "peer": true
+ },
+ "node_modules/parse5-htmlparser2-tree-adapter": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
+ "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
+ "peer": true,
+ "dependencies": {
+ "parse5": "^6.0.1"
+ }
+ },
+ "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+ "peer": true
+ },
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -6958,7 +7724,6 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -6969,6 +7734,31 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
+ "node_modules/path-scurry": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
+ "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+ "peer": true,
+ "dependencies": {
+ "lru-cache": "^9.1.1 || ^10.0.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-scurry/node_modules/lru-cache": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
+ "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
+ "peer": true,
+ "engines": {
+ "node": "14 || >=16.14"
+ }
+ },
"node_modules/path-to-regexp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz",
@@ -7575,7 +8365,6 @@
"version": "7.6.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
- "dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -7590,7 +8379,6 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
"dependencies": {
"yallist": "^4.0.0"
},
@@ -7601,8 +8389,7 @@
"node_modules/semver/node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"node_modules/send": {
"version": "0.18.0",
@@ -7645,6 +8432,11 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
+ "node_modules/seq-queue": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
+ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
+ },
"node_modules/serialize-javascript": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
@@ -7679,11 +8471,23 @@
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
+ "node_modules/sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "peer": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "bin": {
+ "sha.js": "bin.js"
+ }
+ },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
"dependencies": {
"shebang-regex": "^3.0.0"
},
@@ -7695,7 +8499,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -7831,6 +8634,14 @@
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
},
+ "node_modules/sqlstring": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
+ "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/stack-utils": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
@@ -7860,6 +8671,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/stoppable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
+ "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
+ "engines": {
+ "node": ">=4",
+ "npm": ">=6"
+ }
+ },
"node_modules/streamsearch": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
@@ -7907,6 +8727,21 @@
"node": ">=8"
}
},
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "peer": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -7918,6 +8753,19 @@
"node": ">=8"
}
},
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "peer": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/strip-bom": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
@@ -8217,6 +9065,27 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "peer": true,
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "peer": true,
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -8356,7 +9225,7 @@
"version": "10.9.1",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
"integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
@@ -8478,11 +9347,249 @@
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
},
+ "node_modules/typeorm": {
+ "version": "0.3.20",
+ "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.20.tgz",
+ "integrity": "sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==",
+ "peer": true,
+ "dependencies": {
+ "@sqltools/formatter": "^1.2.5",
+ "app-root-path": "^3.1.0",
+ "buffer": "^6.0.3",
+ "chalk": "^4.1.2",
+ "cli-highlight": "^2.1.11",
+ "dayjs": "^1.11.9",
+ "debug": "^4.3.4",
+ "dotenv": "^16.0.3",
+ "glob": "^10.3.10",
+ "mkdirp": "^2.1.3",
+ "reflect-metadata": "^0.2.1",
+ "sha.js": "^2.4.11",
+ "tslib": "^2.5.0",
+ "uuid": "^9.0.0",
+ "yargs": "^17.6.2"
+ },
+ "bin": {
+ "typeorm": "cli.js",
+ "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js",
+ "typeorm-ts-node-esm": "cli-ts-node-esm.js"
+ },
+ "engines": {
+ "node": ">=16.13.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/typeorm"
+ },
+ "peerDependencies": {
+ "@google-cloud/spanner": "^5.18.0",
+ "@sap/hana-client": "^2.12.25",
+ "better-sqlite3": "^7.1.2 || ^8.0.0 || ^9.0.0",
+ "hdb-pool": "^0.1.6",
+ "ioredis": "^5.0.4",
+ "mongodb": "^5.8.0",
+ "mssql": "^9.1.1 || ^10.0.1",
+ "mysql2": "^2.2.5 || ^3.0.1",
+ "oracledb": "^6.3.0",
+ "pg": "^8.5.1",
+ "pg-native": "^3.0.0",
+ "pg-query-stream": "^4.0.0",
+ "redis": "^3.1.1 || ^4.0.0",
+ "sql.js": "^1.4.0",
+ "sqlite3": "^5.0.3",
+ "ts-node": "^10.7.0",
+ "typeorm-aurora-data-api-driver": "^2.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@google-cloud/spanner": {
+ "optional": true
+ },
+ "@sap/hana-client": {
+ "optional": true
+ },
+ "better-sqlite3": {
+ "optional": true
+ },
+ "hdb-pool": {
+ "optional": true
+ },
+ "ioredis": {
+ "optional": true
+ },
+ "mongodb": {
+ "optional": true
+ },
+ "mssql": {
+ "optional": true
+ },
+ "mysql2": {
+ "optional": true
+ },
+ "oracledb": {
+ "optional": true
+ },
+ "pg": {
+ "optional": true
+ },
+ "pg-native": {
+ "optional": true
+ },
+ "pg-query-stream": {
+ "optional": true
+ },
+ "redis": {
+ "optional": true
+ },
+ "sql.js": {
+ "optional": true
+ },
+ "sqlite3": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ },
+ "typeorm-aurora-data-api-driver": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/typeorm/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "peer": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/typeorm/node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "peer": true,
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "node_modules/typeorm/node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "peer": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/typeorm/node_modules/glob": {
+ "version": "10.3.10",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
+ "peer": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^2.3.5",
+ "minimatch": "^9.0.1",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+ "path-scurry": "^1.10.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/typeorm/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "peer": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/typeorm/node_modules/mkdirp": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz",
+ "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==",
+ "peer": true,
+ "bin": {
+ "mkdirp": "dist/cjs/src/bin.js"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/typeorm/node_modules/reflect-metadata": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.1.tgz",
+ "integrity": "sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==",
+ "peer": true
+ },
+ "node_modules/typeorm/node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "peer": true,
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/typeorm/node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "peer": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/typescript": {
"version": "4.9.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
- "dev": true,
+ "devOptional": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -8583,7 +9690,7 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
- "dev": true
+ "devOptional": true
},
"node_modules/v8-to-istanbul": {
"version": "9.1.0",
@@ -8732,7 +9839,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
"dependencies": {
"isexe": "^2.0.0"
},
@@ -8748,15 +9854,6 @@
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
"integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q=="
},
- "node_modules/word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -8773,6 +9870,24 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -8862,7 +9977,7 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
- "dev": true,
+ "devOptional": true,
"engines": {
"node": ">=6"
}
@@ -8881,6 +9996,12 @@
}
},
"dependencies": {
+ "@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true
+ },
"@ampproject/remapping": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
@@ -9032,12 +10153,55 @@
}
},
"@azure/core-auth": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.4.0.tgz",
- "integrity": "sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.6.0.tgz",
+ "integrity": "sha512-3X9wzaaGgRaBCwhLQZDtFp5uLIXCPrGbwJNWPPugvL4xbIGgScv77YzzxToKGLAKvG9amDoofMoP+9hsH1vs1w==",
"requires": {
- "@azure/abort-controller": "^1.0.0",
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-util": "^1.1.0",
"tslib": "^2.2.0"
+ },
+ "dependencies": {
+ "@azure/abort-controller": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.0.0.tgz",
+ "integrity": "sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==",
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ }
+ }
+ },
+ "@azure/core-client": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.8.0.tgz",
+ "integrity": "sha512-+gHS3gEzPlhyQBMoqVPOTeNH031R5DM/xpCvz72y38C09rg4Hui/1sJS/ujoisDZbbSHyuRLVWdFlwL0pIFwbg==",
+ "requires": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.4.0",
+ "@azure/core-rest-pipeline": "^1.9.1",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/core-util": "^1.0.0",
+ "@azure/logger": "^1.0.0",
+ "tslib": "^2.2.0"
+ },
+ "dependencies": {
+ "@azure/abort-controller": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.0.0.tgz",
+ "integrity": "sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==",
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ },
+ "@azure/core-tracing": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz",
+ "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==",
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ }
}
},
"@azure/core-http": {
@@ -9087,6 +10251,39 @@
"tslib": "^2.2.0"
}
},
+ "@azure/core-rest-pipeline": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.14.0.tgz",
+ "integrity": "sha512-Tp4M6NsjCmn9L5p7HsW98eSOS7A0ibl3e5ntZglozT0XuD/0y6i36iW829ZbBq0qihlGgfaeFpkLjZ418KDm1Q==",
+ "requires": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.4.0",
+ "@azure/core-tracing": "^1.0.1",
+ "@azure/core-util": "^1.3.0",
+ "@azure/logger": "^1.0.0",
+ "http-proxy-agent": "^5.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "tslib": "^2.2.0"
+ },
+ "dependencies": {
+ "@azure/abort-controller": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.0.0.tgz",
+ "integrity": "sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==",
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ },
+ "@azure/core-tracing": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz",
+ "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==",
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ }
+ }
+ },
"@azure/core-tracing": {
"version": "1.0.0-preview.13",
"resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz",
@@ -9105,6 +10302,37 @@
"tslib": "^2.2.0"
}
},
+ "@azure/identity": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.0.1.tgz",
+ "integrity": "sha512-yRdgF03SFLqUMZZ1gKWt0cs0fvrDIkq2bJ6Oidqcoo5uM85YMBnXWMzYKK30XqIT76lkFyAaoAAy5knXhrG4Lw==",
+ "requires": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-auth": "^1.5.0",
+ "@azure/core-client": "^1.4.0",
+ "@azure/core-rest-pipeline": "^1.1.0",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/core-util": "^1.3.0",
+ "@azure/logger": "^1.0.0",
+ "@azure/msal-browser": "^3.5.0",
+ "@azure/msal-node": "^2.5.1",
+ "events": "^3.0.0",
+ "jws": "^4.0.0",
+ "open": "^8.0.0",
+ "stoppable": "^1.1.0",
+ "tslib": "^2.2.0"
+ },
+ "dependencies": {
+ "@azure/core-tracing": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz",
+ "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==",
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ }
+ }
+ },
"@azure/logger": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.4.tgz",
@@ -9113,6 +10341,36 @@
"tslib": "^2.2.0"
}
},
+ "@azure/msal-browser": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.10.0.tgz",
+ "integrity": "sha512-mnmi8dCXVNZI+AGRq0jKQ3YiodlIC4W9npr6FCB9WN6NQT+6rq+cIlxgUb//BjLyzKsnYo+i4LROGeMyU+6v1A==",
+ "requires": {
+ "@azure/msal-common": "14.7.1"
+ }
+ },
+ "@azure/msal-common": {
+ "version": "14.7.1",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.7.1.tgz",
+ "integrity": "sha512-v96btzjM7KrAu4NSEdOkhQSTGOuNUIIsUdB8wlyB9cdgl5KqEKnTonHUZ8+khvZ6Ap542FCErbnTyDWl8lZ2rA=="
+ },
+ "@azure/msal-node": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.6.4.tgz",
+ "integrity": "sha512-nNvEPx009/80UATCToF+29NZYocn01uKrB91xtFr7bSqkqO1PuQGXRyYwryWRztUrYZ1YsSbw9A+LmwOhpVvcg==",
+ "requires": {
+ "@azure/msal-common": "14.7.1",
+ "jsonwebtoken": "^9.0.0",
+ "uuid": "^8.3.0"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ }
+ }
+ },
"@azure/storage-blob": {
"version": "12.14.0",
"resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.14.0.tgz",
@@ -9640,7 +10898,7 @@
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
- "dev": true,
+ "devOptional": true,
"requires": {
"@jridgewell/trace-mapping": "0.3.9"
},
@@ -9649,7 +10907,7 @@
"version": "0.3.9",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
- "dev": true,
+ "devOptional": true,
"requires": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
@@ -9658,29 +10916,29 @@
}
},
"@eslint-community/eslint-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz",
- "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
"dev": true,
"requires": {
"eslint-visitor-keys": "^3.3.0"
}
},
"@eslint-community/regexpp": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz",
- "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==",
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
"dev": true
},
"@eslint/eslintrc": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz",
- "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.5.0",
+ "espree": "^9.6.0",
"globals": "^13.19.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
@@ -9725,19 +10983,19 @@
}
},
"@eslint/js": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz",
- "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz",
+ "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==",
"dev": true
},
"@humanwhocodes/config-array": {
- "version": "0.11.8",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
- "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
"dev": true,
"requires": {
- "@humanwhocodes/object-schema": "^1.2.1",
- "debug": "^4.1.1",
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
"minimatch": "^3.0.5"
}
},
@@ -9748,11 +11006,76 @@
"dev": true
},
"@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
- "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
"dev": true
},
+ "@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "peer": true,
+ "requires": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "peer": true
+ },
+ "ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "peer": true
+ },
+ "emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "peer": true
+ },
+ "string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "peer": true,
+ "requires": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "peer": true,
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ },
+ "wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "peer": true,
+ "requires": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ }
+ }
+ }
+ },
"@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -10078,7 +11401,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
"integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
- "dev": true
+ "devOptional": true
},
"@jridgewell/set-array": {
"version": "1.1.2",
@@ -10115,7 +11438,7 @@
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
"integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
- "dev": true
+ "devOptional": true
},
"@jridgewell/trace-mapping": {
"version": "0.3.17",
@@ -10137,6 +11460,15 @@
"resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.1.tgz",
"integrity": "sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g=="
},
+ "@microsoft/microsoft-graph-client": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-client/-/microsoft-graph-client-3.0.7.tgz",
+ "integrity": "sha512-/AazAV/F+HK4LIywF9C+NYHcJo038zEnWkteilcxC1FM/uK/4NVGDKGrxx7nNq1ybspAroRKT4I1FHfxQzxkUw==",
+ "requires": {
+ "@babel/runtime": "^7.12.5",
+ "tslib": "^2.2.0"
+ }
+ },
"@nestjs/axios": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-3.0.1.tgz",
@@ -10309,6 +11641,21 @@
"tslib": "2.5.0"
}
},
+ "@nestjs/typeorm": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-10.0.2.tgz",
+ "integrity": "sha512-H738bJyydK4SQkRCTeh1aFBxoO1E9xdL/HaLGThwrqN95os5mEyAtK7BLADOS+vldP4jDZ2VQPLj4epWwRqCeQ==",
+ "requires": {
+ "uuid": "9.0.1"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="
+ }
+ }
+ },
"@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -10493,6 +11840,13 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.1.tgz",
"integrity": "sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA=="
},
+ "@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "optional": true,
+ "peer": true
+ },
"@sinclair/typebox": {
"version": "0.24.51",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz",
@@ -10517,29 +11871,40 @@
"@sinonjs/commons": "^1.7.0"
}
},
+ "@sqltools/formatter": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz",
+ "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==",
+ "peer": true
+ },
+ "@tootallnate/once": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A=="
+ },
"@tsconfig/node10": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
"integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
- "dev": true
+ "devOptional": true
},
"@tsconfig/node12": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
- "dev": true
+ "devOptional": true
},
"@tsconfig/node14": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
- "dev": true
+ "devOptional": true
},
"@tsconfig/node16": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz",
"integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==",
- "dev": true
+ "devOptional": true
},
"@types/babel__core": {
"version": "7.20.0",
@@ -10700,9 +12065,9 @@
}
},
"@types/json-schema": {
- "version": "7.0.11",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
- "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true,
"peer": true
},
@@ -10819,6 +12184,12 @@
"integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
"dev": true
},
+ "@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
+ },
"@vercel/ncc": {
"version": "0.36.1",
"resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.36.1.tgz",
@@ -11015,10 +12386,10 @@
}
},
"acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
- "dev": true
+ "version": "8.11.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+ "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+ "devOptional": true
},
"acorn-import-assertions": {
"version": "1.8.0",
@@ -11039,7 +12410,15 @@
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
"integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
- "dev": true
+ "devOptional": true
+ },
+ "agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "requires": {
+ "debug": "4"
+ }
},
"ajv": {
"version": "8.12.0",
@@ -11086,6 +12465,12 @@
"color-convert": "^2.0.1"
}
},
+ "any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "peer": true
+ },
"anymatch": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
@@ -11096,6 +12481,12 @@
"picomatch": "^2.0.4"
}
},
+ "app-root-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz",
+ "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==",
+ "peer": true
+ },
"append-field": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
@@ -11105,7 +12496,7 @@
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
- "dev": true
+ "devOptional": true
},
"argparse": {
"version": "1.0.10",
@@ -11340,6 +12731,11 @@
"ieee754": "^1.1.13"
}
},
+ "buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
+ },
"buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -11451,6 +12847,20 @@
"restore-cursor": "^3.1.0"
}
},
+ "cli-highlight": {
+ "version": "2.1.11",
+ "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz",
+ "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==",
+ "peer": true,
+ "requires": {
+ "chalk": "^4.0.0",
+ "highlight.js": "^10.7.1",
+ "mz": "^2.4.0",
+ "parse5": "^5.1.1",
+ "parse5-htmlparser2-tree-adapter": "^6.0.0",
+ "yargs": "^16.0.0"
+ }
+ },
"cli-spinners": {
"version": "2.9.2",
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
@@ -11661,13 +13071,12 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
- "dev": true
+ "devOptional": true
},
"cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
"requires": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -11682,11 +13091,16 @@
"@babel/runtime": "^7.21.0"
}
},
+ "dayjs": {
+ "version": "1.11.10",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
+ "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==",
+ "peer": true
+ },
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
"requires": {
"ms": "2.1.2"
}
@@ -11728,11 +13142,21 @@
"clone": "^1.0.2"
}
},
+ "define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="
+ },
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
+ "denque": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
+ "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="
+ },
"depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -11763,7 +13187,7 @@
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true
+ "devOptional": true
},
"diff-sequences": {
"version": "27.5.1",
@@ -11792,6 +13216,12 @@
"resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz",
"integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A=="
},
+ "eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "peer": true
+ },
"easy-table": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz",
@@ -11800,6 +13230,14 @@
"wcwidth": ">=1.0.1"
}
},
+ "ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -11870,27 +13308,28 @@
"dev": true
},
"eslint": {
- "version": "8.36.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz",
- "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz",
+ "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==",
"dev": true,
"requires": {
"@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.4.0",
- "@eslint/eslintrc": "^2.0.1",
- "@eslint/js": "8.36.0",
- "@humanwhocodes/config-array": "^0.11.8",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.56.0",
+ "@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
- "ajv": "^6.10.0",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
"debug": "^4.3.2",
"doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.1.1",
- "eslint-visitor-keys": "^3.3.0",
- "espree": "^9.5.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
"esquery": "^1.4.2",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -11898,22 +13337,19 @@
"find-up": "^5.0.0",
"glob-parent": "^6.0.2",
"globals": "^13.19.0",
- "grapheme-splitter": "^1.0.4",
+ "graphemer": "^1.4.0",
"ignore": "^5.2.0",
- "import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"is-path-inside": "^3.0.3",
- "js-sdsl": "^4.1.4",
"js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
+ "optionator": "^0.9.3",
"strip-ansi": "^6.0.1",
- "strip-json-comments": "^3.1.0",
"text-table": "^0.2.0"
},
"dependencies": {
@@ -11936,9 +13372,9 @@
"dev": true
},
"eslint-scope": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
- "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
"dev": true,
"requires": {
"esrecurse": "^4.3.0",
@@ -12005,20 +13441,20 @@
}
},
"eslint-visitor-keys": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
- "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true
},
"espree": {
- "version": "9.5.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz",
- "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==",
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
"dev": true,
"requires": {
- "acorn": "^8.8.0",
+ "acorn": "^8.9.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.3.0"
+ "eslint-visitor-keys": "^3.4.1"
}
},
"esprima": {
@@ -12382,6 +13818,24 @@
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
"integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw=="
},
+ "foreground-child": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
+ "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+ "peer": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "dependencies": {
+ "signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "peer": true
+ }
+ }
+ },
"form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
@@ -12445,6 +13899,14 @@
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
+ "generate-function": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
+ "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
+ "requires": {
+ "is-property": "^1.0.2"
+ }
+ },
"gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -12499,9 +13961,9 @@
"peer": true
},
"globals": {
- "version": "13.20.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
- "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
@@ -12512,10 +13974,10 @@
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
},
- "grapheme-splitter": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
- "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true
},
"has": {
@@ -12542,6 +14004,12 @@
"integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
"dev": true
},
+ "highlight.js": {
+ "version": "10.7.3",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
+ "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
+ "peer": true
+ },
"hosted-git-info": {
"version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
@@ -12566,6 +14034,25 @@
"toidentifier": "1.0.1"
}
},
+ "http-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+ "requires": {
+ "@tootallnate/once": "2",
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "requires": {
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
"human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
@@ -12685,6 +14172,11 @@
"has": "^1.0.3"
}
},
+ "is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="
+ },
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -12728,6 +14220,11 @@
"integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
"dev": true
},
+ "is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
+ },
"is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@@ -12739,6 +14236,14 @@
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="
},
+ "is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "requires": {
+ "is-docker": "^2.0.0"
+ }
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -12747,8 +14252,7 @@
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
},
"istanbul-lib-coverage": {
"version": "3.2.0",
@@ -12822,6 +14326,16 @@
"resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz",
"integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q=="
},
+ "jackspeak": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
+ "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "peer": true,
+ "requires": {
+ "@isaacs/cliui": "^8.0.2",
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
"jest": {
"version": "28.0.3",
"resolved": "https://registry.npmjs.org/jest/-/jest-28.0.3.tgz",
@@ -13563,12 +15077,6 @@
}
}
},
- "js-sdsl": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
- "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
- "dev": true
- },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -13622,6 +15130,63 @@
"universalify": "^2.0.0"
}
},
+ "jsonwebtoken": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
+ "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
+ "requires": {
+ "jws": "^3.2.2",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "semver": "^7.5.4"
+ },
+ "dependencies": {
+ "jwa": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+ "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+ "requires": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+ "requires": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ }
+ }
+ },
+ "jwa": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
+ "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
+ "requires": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "jws": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
+ "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
+ "requires": {
+ "jwa": "^2.0.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
"kleur": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
@@ -13767,6 +15332,36 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
+ "lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+ "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
+ },
+ "lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
+ },
+ "lodash.isinteger": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+ "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
+ },
+ "lodash.isnumber": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
+ },
+ "lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
+ },
"lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -13779,6 +15374,11 @@
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
+ "lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
+ },
"log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -13788,6 +15388,11 @@
"is-unicode-supported": "^0.1.0"
}
},
+ "long": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
+ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
+ },
"lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -13818,7 +15423,7 @@
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
- "dev": true
+ "devOptional": true
},
"makeerror": {
"version": "1.0.12",
@@ -13896,6 +15501,12 @@
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
},
+ "minipass": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+ "peer": true
+ },
"mkdirp": {
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
@@ -13907,8 +15518,7 @@
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"multer": {
"version": "1.4.5-lts.1",
@@ -13929,6 +15539,62 @@
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
},
+ "mysql2": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.1.tgz",
+ "integrity": "sha512-3njoWAAhGBYy0tWBabqUQcLtczZUxrmmtc2vszQUekg3kTJyZ5/IeLC3Fo04u6y6Iy5Sba7pIIa2P/gs8D3ZeQ==",
+ "requires": {
+ "denque": "^2.1.0",
+ "generate-function": "^2.3.1",
+ "iconv-lite": "^0.6.3",
+ "long": "^5.2.1",
+ "lru-cache": "^8.0.0",
+ "named-placeholders": "^1.1.3",
+ "seq-queue": "^0.0.5",
+ "sqlstring": "^2.3.2"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz",
+ "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA=="
+ }
+ }
+ },
+ "mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "peer": true,
+ "requires": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "named-placeholders": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz",
+ "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
+ "requires": {
+ "lru-cache": "^7.14.1"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="
+ }
+ }
+ },
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -14052,6 +15718,16 @@
"mimic-fn": "^2.1.0"
}
},
+ "open": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+ "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+ "requires": {
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
+ }
+ },
"openapi-types": {
"version": "12.1.0",
"resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.0.tgz",
@@ -14059,17 +15735,17 @@
"peer": true
},
"optionator": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
- "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
"dev": true,
"requires": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
+ "type-check": "^0.4.0"
}
},
"ora": {
@@ -14153,6 +15829,29 @@
"lines-and-columns": "^1.1.6"
}
},
+ "parse5": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
+ "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
+ "peer": true
+ },
+ "parse5-htmlparser2-tree-adapter": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
+ "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
+ "peer": true,
+ "requires": {
+ "parse5": "^6.0.1"
+ },
+ "dependencies": {
+ "parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+ "peer": true
+ }
+ }
+ },
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -14171,8 +15870,7 @@
"path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
},
"path-parse": {
"version": "1.0.7",
@@ -14180,6 +15878,24 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
+ "path-scurry": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
+ "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+ "peer": true,
+ "requires": {
+ "lru-cache": "^9.1.1 || ^10.0.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
+ "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
+ "peer": true
+ }
+ }
+ },
"path-to-regexp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz",
@@ -14622,7 +16338,6 @@
"version": "7.6.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
- "dev": true,
"requires": {
"lru-cache": "^6.0.0"
},
@@ -14631,7 +16346,6 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
"requires": {
"yallist": "^4.0.0"
}
@@ -14639,8 +16353,7 @@
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
},
@@ -14686,6 +16399,11 @@
}
}
},
+ "seq-queue": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
+ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
+ },
"serialize-javascript": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
@@ -14717,11 +16435,20 @@
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "peer": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
"requires": {
"shebang-regex": "^3.0.0"
}
@@ -14729,8 +16456,7 @@
"shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
},
"side-channel": {
"version": "1.0.4",
@@ -14853,6 +16579,11 @@
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
},
+ "sqlstring": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
+ "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg=="
+ },
"stack-utils": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
@@ -14875,6 +16606,11 @@
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
},
+ "stoppable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
+ "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw=="
+ },
"streamsearch": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
@@ -14915,6 +16651,17 @@
"strip-ansi": "^6.0.1"
}
},
+ "string-width-cjs": {
+ "version": "npm:string-width@4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "peer": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
"strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -14923,6 +16670,15 @@
"ansi-regex": "^5.0.1"
}
},
+ "strip-ansi-cjs": {
+ "version": "npm:strip-ansi@6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "peer": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
"strip-bom": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
@@ -15126,6 +16882,24 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
+ "thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "peer": true,
+ "requires": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "peer": true,
+ "requires": {
+ "thenify": ">= 3.1.0 < 4"
+ }
+ },
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -15213,7 +16987,7 @@
"version": "10.9.1",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
"integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
- "dev": true,
+ "devOptional": true,
"requires": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
@@ -15294,11 +17068,121 @@
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
},
+ "typeorm": {
+ "version": "0.3.20",
+ "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.20.tgz",
+ "integrity": "sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==",
+ "peer": true,
+ "requires": {
+ "@sqltools/formatter": "^1.2.5",
+ "app-root-path": "^3.1.0",
+ "buffer": "^6.0.3",
+ "chalk": "^4.1.2",
+ "cli-highlight": "^2.1.11",
+ "dayjs": "^1.11.9",
+ "debug": "^4.3.4",
+ "dotenv": "^16.0.3",
+ "glob": "^10.3.10",
+ "mkdirp": "^2.1.3",
+ "reflect-metadata": "^0.2.1",
+ "sha.js": "^2.4.11",
+ "tslib": "^2.5.0",
+ "uuid": "^9.0.0",
+ "yargs": "^17.6.2"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "peer": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "peer": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "peer": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "glob": {
+ "version": "10.3.10",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
+ "peer": true,
+ "requires": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^2.3.5",
+ "minimatch": "^9.0.1",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+ "path-scurry": "^1.10.1"
+ }
+ },
+ "minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "peer": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ },
+ "mkdirp": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz",
+ "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==",
+ "peer": true
+ },
+ "reflect-metadata": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.1.tgz",
+ "integrity": "sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==",
+ "peer": true
+ },
+ "yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "peer": true,
+ "requires": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "peer": true
+ }
+ }
+ },
"typescript": {
"version": "4.9.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
- "dev": true
+ "devOptional": true
},
"uid": {
"version": "2.0.1",
@@ -15361,7 +17245,7 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
- "dev": true
+ "devOptional": true
},
"v8-to-istanbul": {
"version": "9.1.0",
@@ -15480,7 +17364,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
"requires": {
"isexe": "^2.0.0"
}
@@ -15490,12 +17373,6 @@
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
"integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q=="
},
- "word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true
- },
"wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -15506,6 +17383,17 @@
"strip-ansi": "^6.0.0"
}
},
+ "wrap-ansi-cjs": {
+ "version": "npm:wrap-ansi@7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "peer": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -15574,7 +17462,7 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
- "dev": true
+ "devOptional": true
},
"yocto-queue": {
"version": "0.1.0",
diff --git a/data_migration_tools/server/package.json b/data_migration_tools/server/package.json
index 6135ae6..fee15e8 100644
--- a/data_migration_tools/server/package.json
+++ b/data_migration_tools/server/package.json
@@ -19,10 +19,13 @@
"test": "jest",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
- "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand"
+ "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
+ "apigen": "ts-node src/api/generate.ts && prettier --write \"src/api/odms/*.json\""
},
"dependencies": {
+ "@azure/identity": "^4.0.1",
"@azure/storage-blob": "^12.14.0",
+ "@microsoft/microsoft-graph-client": "^3.0.7",
"@nestjs/common": "^9.3.9",
"@nestjs/config": "^2.3.1",
"@nestjs/core": "^9.3.9",
@@ -30,6 +33,7 @@
"@nestjs/serve-static": "^3.0.1",
"@nestjs/swagger": "^6.2.1",
"@nestjs/testing": "^9.3.9",
+ "@nestjs/typeorm": "^10.0.2",
"@openapitools/openapi-generator-cli": "^2.5.2",
"@vercel/ncc": "^0.36.1",
"axios": "^1.3.4",
@@ -37,6 +41,7 @@
"class-validator": "^0.14.0",
"cookie-parser": "^1.4.6",
"multer": "^1.4.5-lts.1",
+ "mysql2": "^3.9.1",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.8.0",
"swagger-cli": "^4.0.4"
diff --git a/data_migration_tools/server/src/api/generate.ts b/data_migration_tools/server/src/api/generate.ts
new file mode 100644
index 0000000..5482a98
--- /dev/null
+++ b/data_migration_tools/server/src/api/generate.ts
@@ -0,0 +1,25 @@
+import { SwaggerModule, DocumentBuilder } from "@nestjs/swagger";
+import { AppModule } from "../app.module";
+import { promises as fs } from "fs";
+import { NestFactory } from "@nestjs/core";
+async function bootstrap(): Promise {
+ const app = await NestFactory.create(AppModule, {
+ preview: true,
+ });
+
+ const options = new DocumentBuilder()
+ .setTitle("ODMSOpenAPI")
+ .setVersion("1.0.0")
+ .addBearerAuth({
+ type: "http",
+ scheme: "bearer",
+ bearerFormat: "JWT",
+ })
+ .build();
+ const document = SwaggerModule.createDocument(app, options);
+ await fs.writeFile(
+ "src/api/odms/openapi.json",
+ JSON.stringify(document, null, 0)
+ );
+}
+bootstrap();
diff --git a/data_migration_tools/server/src/api/odms/openapi.json b/data_migration_tools/server/src/api/odms/openapi.json
new file mode 100644
index 0000000..b783c09
--- /dev/null
+++ b/data_migration_tools/server/src/api/odms/openapi.json
@@ -0,0 +1,56 @@
+{
+ "openapi": "3.0.0",
+ "paths": {
+ "/delete": {
+ "post": {
+ "operationId": "deleteData",
+ "summary": "",
+ "description": "すべてのデータを削除します",
+ "parameters": [],
+ "responses": {
+ "200": {
+ "description": "成功時のレスポンス",
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/DeleteResponse" }
+ }
+ }
+ },
+ "500": {
+ "description": "想定外のサーバーエラー",
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/ErrorResponse" }
+ }
+ }
+ }
+ },
+ "tags": ["delete"]
+ }
+ }
+ },
+ "info": {
+ "title": "ODMSOpenAPI",
+ "description": "",
+ "version": "1.0.0",
+ "contact": {}
+ },
+ "tags": [],
+ "servers": [],
+ "components": {
+ "securitySchemes": {
+ "bearer": { "scheme": "bearer", "bearerFormat": "JWT", "type": "http" }
+ },
+ "schemas": {
+ "DeleteResponse": { "type": "object", "properties": {} },
+ "ErrorResponse": {
+ "type": "object",
+ "properties": {
+ "message": { "type": "string" },
+ "code": { "type": "string" }
+ },
+ "required": ["message", "code"]
+ }
+ }
+ }
+}
diff --git a/data_migration_tools/server/src/app.module.ts b/data_migration_tools/server/src/app.module.ts
index 9e2dfe3..23a4c76 100644
--- a/data_migration_tools/server/src/app.module.ts
+++ b/data_migration_tools/server/src/app.module.ts
@@ -1,8 +1,15 @@
import { MiddlewareConsumer, Module } from "@nestjs/common";
import { ServeStaticModule } from "@nestjs/serve-static";
-import { ConfigModule } from "@nestjs/config";
+import { ConfigModule, ConfigService } from "@nestjs/config";
import { join } from "path";
import { LoggerMiddleware } from "./common/loggerMiddleware";
+import { TypeOrmModule } from "@nestjs/typeorm";
+import { DeleteModule } from "./features/delete/delete.module";
+import { AdB2cModule } from "./gateways/adb2c/adb2c.module";
+import { DeleteRepositoryModule } from "./repositories/delete/delete.repository.module";
+import { DeleteController } from "./features/delete/delete.controller";
+import { DeleteService } from "./features/delete/delete.service";
+import { BlobstorageModule } from "./gateways/blobstorage/blobstorage.module";
@Module({
imports: [
@@ -13,9 +20,27 @@ import { LoggerMiddleware } from "./common/loggerMiddleware";
envFilePath: [".env.local", ".env"],
isGlobal: true,
}),
+ TypeOrmModule.forRootAsync({
+ imports: [ConfigModule],
+ useFactory: async (configService: ConfigService) => ({
+ type: "mysql",
+ host: configService.get("DB_HOST"),
+ port: configService.get("DB_PORT"),
+ username: configService.get("DB_USERNAME"),
+ password: configService.get("DB_PASSWORD"),
+ database: configService.get("DB_NAME"),
+ autoLoadEntities: true, // forFeature()で登録されたEntityを自動的にロード
+ synchronize: false, // trueにすると自動的にmigrationが行われるため注意
+ }),
+ inject: [ConfigService],
+ }),
+ DeleteModule,
+ AdB2cModule,
+ BlobstorageModule,
+ DeleteRepositoryModule,
],
- controllers: [],
- providers: [],
+ controllers: [DeleteController],
+ providers: [DeleteService],
})
export class AppModule {
configure(consumer: MiddlewareConsumer) {
diff --git a/data_migration_tools/server/src/common/entity/bigintTransformer.spec.ts b/data_migration_tools/server/src/common/entity/bigintTransformer.spec.ts
new file mode 100644
index 0000000..48c20d0
--- /dev/null
+++ b/data_migration_tools/server/src/common/entity/bigintTransformer.spec.ts
@@ -0,0 +1,61 @@
+import { bigintTransformer } from '.';
+
+describe('bigintTransformer', () => {
+ describe('to', () => {
+ it('number型を整数を表す文字列に変換できる', () => {
+ expect(bigintTransformer.to(0)).toBe('0');
+ expect(bigintTransformer.to(1)).toBe('1');
+ expect(bigintTransformer.to(1234567890)).toBe('1234567890');
+ expect(bigintTransformer.to(9007199254740991)).toBe('9007199254740991');
+ expect(bigintTransformer.to(-1)).toBe('-1');
+ });
+ it('少数点以下がある場合はエラーとなる', () => {
+ expect(() => bigintTransformer.to(1.1)).toThrowError(
+ '1.1 is not integer.',
+ );
+ });
+ it('Number.MAX_SAFE_INTEGERを超える値を変換しようとするとエラーになる', () => {
+ expect(() => bigintTransformer.to(9007199254740992)).toThrowError(
+ 'value is greater than 9007199254740991.',
+ );
+ expect(() => bigintTransformer.to(9223372036854775807)).toThrowError(
+ 'value is greater than 9007199254740991.',
+ );
+ });
+ });
+ describe('from', () => {
+ it('bigint型の文字列をnumber型に変換できる', () => {
+ expect(bigintTransformer.from('0')).toBe(0);
+ expect(bigintTransformer.from('1')).toBe(1);
+ expect(bigintTransformer.from('1234567890')).toBe(1234567890);
+ expect(bigintTransformer.from('-1')).toBe(-1);
+ });
+ it('Number.MAX_SAFE_INTEGERを超える値を変換しようとするとエラーになる', () => {
+ expect(() => bigintTransformer.from('9007199254740992')).toThrowError(
+ '9007199254740992 is greater than 9007199254740991.',
+ );
+ expect(() => bigintTransformer.from('9223372036854775807')).toThrowError(
+ '9223372036854775807 is greater than 9007199254740991.',
+ );
+ });
+ it('number型の場合はそのまま返す', () => {
+ expect(bigintTransformer.from(0)).toBe(0);
+ expect(bigintTransformer.from(1)).toBe(1);
+ expect(bigintTransformer.from(1234567890)).toBe(1234567890);
+ expect(bigintTransformer.from(-1)).toBe(-1);
+ });
+ it('nullの場合はそのまま返す', () => {
+ expect(bigintTransformer.from(null)).toBe(null);
+ });
+ it('number型に変換できない場合はエラーとなる', () => {
+ expect(() => bigintTransformer.from('a')).toThrowError('a is not int.');
+ expect(() => bigintTransformer.from('')).toThrowError(' is not int.');
+ expect(() => bigintTransformer.from(undefined)).toThrowError(
+ 'undefined is not string.',
+ );
+ expect(() => bigintTransformer.from({})).toThrowError(
+ '[object Object] is not string.',
+ );
+ });
+ });
+});
diff --git a/data_migration_tools/server/src/common/entity/index.ts b/data_migration_tools/server/src/common/entity/index.ts
new file mode 100644
index 0000000..26f5d5b
--- /dev/null
+++ b/data_migration_tools/server/src/common/entity/index.ts
@@ -0,0 +1,57 @@
+import { ValueTransformer } from 'typeorm';
+
+// DBのbigint型をnumber型に変換するためのtransformer
+// DBのBigInt型をそのまま扱うと、JSのNumber型の最大値を超えると誤差が発生するため、本来はNumber型に変換すべきではないが、
+// 影響範囲を最小限に抑えるため、Number型に変換する。使用するのはAutoIncrementされるIDのみの想定のため、
+// Number.MAX_SAFE_INTEGERより大きい値は現実的には発生しない想定で変換する。
+export const bigintTransformer: ValueTransformer = {
+ from: (value: any): number | null => {
+ // valueがnullであればそのまま返す
+ if (value === null) {
+ return value;
+ }
+ // valueがnumber型かどうかを判定
+ // 利用DBによってはbigint型であってもnumber型で返ってくる場合があるため、number型の場合はそのまま返す(sqliteの場合)
+ if (typeof value === 'number') {
+ return value;
+ }
+ // valueが文字列かどうかを判定
+ if (typeof value !== 'string') {
+ throw new Error(`${value} is not string.`);
+ }
+ // 数値に変換可能な文字列かどうかを判定
+ if (Number.isNaN(parseInt(value))) {
+ throw new Error(`${value} is not int.`);
+ }
+
+ // 文字列ならbigintに変換
+ // valueが整数でない場合は値が丸められてしまうが、TypeORMのEntityの定義上、整数を表す文字列以外はありえないため、少数点は考慮しない
+ const bigIntValue = BigInt(value);
+ // bigIntValueがNumber.MAX_SAFE_INTEGERより大きいかどうかを判定
+ if (bigIntValue > Number.MAX_SAFE_INTEGER) {
+ throw new Error(`${value} is greater than ${Number.MAX_SAFE_INTEGER}.`);
+ }
+ // number型で表現できる整数であればnumber型に変換して返す
+ return Number(bigIntValue);
+ },
+ to: (value: any): string | null | undefined => {
+ // valueがnullまたはundefinedであればそのまま返す
+ if (value === null || value === undefined) {
+ return value;
+ }
+ // valueがnumber型かどうかを判定
+ if (typeof value !== 'number') {
+ throw new Error(`${value} is not number.`);
+ }
+
+ // valueがNumber.MAX_SAFE_INTEGERより大きいかどうかを判定
+ if (value > Number.MAX_SAFE_INTEGER) {
+ throw new Error(`value is greater than ${Number.MAX_SAFE_INTEGER}.`);
+ }
+ // valueが整数かどうかを判定
+ if (!Number.isInteger(value)) {
+ throw new Error(`${value} is not integer.`);
+ }
+ return value.toString();
+ },
+};
diff --git a/data_migration_tools/server/src/common/errors/code.ts b/data_migration_tools/server/src/common/errors/code.ts
new file mode 100644
index 0000000..f16dd2a
--- /dev/null
+++ b/data_migration_tools/server/src/common/errors/code.ts
@@ -0,0 +1,17 @@
+/*
+エラーコード作成方針
+E+6桁(数字)で構成する。
+- 1~2桁目の値は種類(業務エラー、システムエラー...)
+- 3~4桁目の値は原因箇所(トークン、DB、...)
+- 5~6桁目の値は任意の重複しない値
+ex)
+E00XXXX : システムエラー(通信エラーやDB接続失敗など)
+E01XXXX : 業務エラー
+EXX00XX : 内部エラー(内部プログラムのエラー)
+EXX01XX : トークンエラー(トークン認証関連)
+EXX02XX : DBエラー(DB関連)
+EXX03XX : ADB2Cエラー(DB関連)
+*/
+export const ErrorCodes = [
+ "E009999", // 汎用エラー
+] as const;
diff --git a/data_migration_tools/server/src/common/errors/makeErrorResponse.ts b/data_migration_tools/server/src/common/errors/makeErrorResponse.ts
new file mode 100644
index 0000000..cd83472
--- /dev/null
+++ b/data_migration_tools/server/src/common/errors/makeErrorResponse.ts
@@ -0,0 +1,10 @@
+import { errors } from "./message";
+import { ErrorCodeType, ErrorResponse } from "./types/types";
+
+export const makeErrorResponse = (errorcode: ErrorCodeType): ErrorResponse => {
+ const msg = errors[errorcode];
+ return {
+ code: errorcode,
+ message: msg,
+ };
+};
diff --git a/data_migration_tools/server/src/common/errors/message.ts b/data_migration_tools/server/src/common/errors/message.ts
new file mode 100644
index 0000000..f3d2fc1
--- /dev/null
+++ b/data_migration_tools/server/src/common/errors/message.ts
@@ -0,0 +1,6 @@
+import { Errors } from "./types/types";
+
+// エラーコードとメッセージ対応表
+export const errors: Errors = {
+ E009999: "Internal Server Error.",
+};
diff --git a/data_migration_tools/server/src/common/errors/types/types.ts b/data_migration_tools/server/src/common/errors/types/types.ts
new file mode 100644
index 0000000..8746924
--- /dev/null
+++ b/data_migration_tools/server/src/common/errors/types/types.ts
@@ -0,0 +1,15 @@
+import { ApiProperty } from '@nestjs/swagger';
+import { ErrorCodes } from '../code';
+
+export class ErrorResponse {
+ @ApiProperty()
+ message: string;
+ @ApiProperty()
+ code: string;
+}
+
+export type ErrorCodeType = (typeof ErrorCodes)[number];
+
+export type Errors = {
+ [P in ErrorCodeType]: string;
+};
diff --git a/data_migration_tools/server/src/constants/index.ts b/data_migration_tools/server/src/constants/index.ts
new file mode 100644
index 0000000..e363afc
--- /dev/null
+++ b/data_migration_tools/server/src/constants/index.ts
@@ -0,0 +1,67 @@
+/**
+ * 音声ファイルをEast USに保存する国リスト
+ * @const {number}
+ */
+export const BLOB_STORAGE_REGION_US = ["CA", "KY", "US"];
+
+/**
+ * 音声ファイルをAustralia Eastに保存する国リスト
+ * @const {number}
+ */
+export const BLOB_STORAGE_REGION_AU = ["AU", "NZ"];
+
+/**
+ * 音声ファイルをNorth Europeに保存する国リスト
+ * @const {number}
+ */
+export const BLOB_STORAGE_REGION_EU = [
+ "AT",
+ "BE",
+ "BG",
+ "HR",
+ "CY",
+ "CZ",
+ "DK",
+ "EE",
+ "FI",
+ "FR",
+ "DE",
+ "GR",
+ "HU",
+ "IS",
+ "IE",
+ "IT",
+ "LV",
+ "LI",
+ "LT",
+ "LU",
+ "MT",
+ "NL",
+ "NO",
+ "PL",
+ "PT",
+ "RO",
+ "RS",
+ "SK",
+ "SI",
+ "ZA",
+ "ES",
+ "SE",
+ "CH",
+ "TR",
+ "GB",
+];
+
+/**
+ * ADB2Cユーザのidentity.signInType
+ * @const {string[]}
+ */
+export const ADB2C_SIGN_IN_TYPE = {
+ EMAILADDRESS: "emailAddress",
+} as const;
+
+/**
+ * AutoIncrementの初期値
+ * @const {number}
+ */
+export const AUTO_INCREMENT_START = 853211;
diff --git a/data_migration_tools/server/src/features/delete/delete.controller.spec.ts b/data_migration_tools/server/src/features/delete/delete.controller.spec.ts
new file mode 100644
index 0000000..ad763f0
--- /dev/null
+++ b/data_migration_tools/server/src/features/delete/delete.controller.spec.ts
@@ -0,0 +1,30 @@
+import { Test, TestingModule } from "@nestjs/testing";
+import { ConfigModule } from "@nestjs/config";
+import { DeleteService } from "./delete.service";
+import { DeleteController } from "./delete.controller";
+
+describe("DeleteController", () => {
+ let controller: DeleteController;
+ const mockTemplatesService = {};
+ beforeEach(async () => {
+ const module: TestingModule = await Test.createTestingModule({
+ imports: [
+ ConfigModule.forRoot({
+ envFilePath: [".env.test", ".env"],
+ isGlobal: true,
+ }),
+ ],
+ controllers: [DeleteController],
+ providers: [DeleteService],
+ })
+ .overrideProvider(DeleteService)
+ .useValue(mockTemplatesService)
+ .compile();
+
+ controller = module.get(DeleteController);
+ });
+
+ it("should be defined", () => {
+ expect(controller).toBeDefined();
+ });
+});
diff --git a/data_migration_tools/server/src/features/delete/delete.controller.ts b/data_migration_tools/server/src/features/delete/delete.controller.ts
new file mode 100644
index 0000000..94567ca
--- /dev/null
+++ b/data_migration_tools/server/src/features/delete/delete.controller.ts
@@ -0,0 +1,39 @@
+import {
+ Controller,
+ HttpException,
+ HttpStatus,
+ Logger,
+ Post,
+ Req,
+} from "@nestjs/common";
+import { ErrorResponse } from "../../common/errors/types/types";
+import { ApiOperation, ApiResponse, ApiTags } from "@nestjs/swagger";
+import { Request } from "express";
+import { DeleteService } from "./delete.service";
+import { DeleteResponse } from "./types/types";
+
+@ApiTags("delete")
+@Controller("delete")
+export class DeleteController {
+ constructor(private readonly deleteService: DeleteService) {}
+
+ @ApiResponse({
+ status: HttpStatus.OK,
+ type: DeleteResponse,
+ description: "成功時のレスポンス",
+ })
+ @ApiResponse({
+ status: HttpStatus.INTERNAL_SERVER_ERROR,
+ description: "想定外のサーバーエラー",
+ type: ErrorResponse,
+ })
+ @ApiOperation({
+ operationId: "deleteData",
+ description: "すべてのデータを削除します",
+ })
+ @Post()
+ async deleteData(): Promise<{}> {
+ await this.deleteService.deleteData();
+ return {};
+ }
+}
diff --git a/data_migration_tools/server/src/features/delete/delete.module.ts b/data_migration_tools/server/src/features/delete/delete.module.ts
new file mode 100644
index 0000000..ce27643
--- /dev/null
+++ b/data_migration_tools/server/src/features/delete/delete.module.ts
@@ -0,0 +1,13 @@
+import { Module } from "@nestjs/common";
+import { DeleteRepositoryModule } from "../../repositories/delete/delete.repository.module";
+import { DeleteController } from "./delete.controller";
+import { DeleteService } from "./delete.service";
+import { AdB2cModule } from "../../gateways/adb2c/adb2c.module";
+import { BlobstorageModule } from "../../gateways/blobstorage/blobstorage.module";
+
+@Module({
+ imports: [DeleteRepositoryModule, AdB2cModule, BlobstorageModule],
+ providers: [DeleteService],
+ controllers: [DeleteController],
+})
+export class DeleteModule {}
diff --git a/data_migration_tools/server/src/features/delete/delete.service.spec.ts b/data_migration_tools/server/src/features/delete/delete.service.spec.ts
new file mode 100644
index 0000000..3257293
--- /dev/null
+++ b/data_migration_tools/server/src/features/delete/delete.service.spec.ts
@@ -0,0 +1,29 @@
+import { DataSource } from "typeorm";
+import { ConfigModule } from "@nestjs/config";
+import { DeleteService } from "./delete.service";
+import { Test, TestingModule } from "@nestjs/testing";
+
+describe("DeleteController", () => {
+ let service: DeleteService;
+ const mockTemplatesService = {};
+ beforeEach(async () => {
+ const module: TestingModule = await Test.createTestingModule({
+ imports: [
+ ConfigModule.forRoot({
+ envFilePath: [".env.test", ".env"],
+ isGlobal: true,
+ }),
+ ],
+ providers: [DeleteService],
+ })
+ .overrideProvider(DeleteService)
+ .useValue(mockTemplatesService)
+ .compile();
+
+ service = module.get(DeleteService);
+ });
+
+ it("should be defined", () => {
+ expect(service).toBeDefined();
+ });
+});
diff --git a/data_migration_tools/server/src/features/delete/delete.service.ts b/data_migration_tools/server/src/features/delete/delete.service.ts
new file mode 100644
index 0000000..9ade573
--- /dev/null
+++ b/data_migration_tools/server/src/features/delete/delete.service.ts
@@ -0,0 +1,54 @@
+import { HttpException, HttpStatus, Injectable, Logger } from "@nestjs/common";
+import { DeleteRepositoryService } from "../../repositories/delete/delete.repository.service";
+import { makeErrorResponse } from "../../common/errors/makeErrorResponse";
+import { AdB2cService } from "../../gateways/adb2c/adb2c.service";
+import { BlobstorageService } from "../../gateways/blobstorage/blobstorage.service";
+
+@Injectable()
+export class DeleteService {
+ private readonly logger = new Logger(DeleteService.name);
+ constructor(
+ private readonly deleteRepositoryService: DeleteRepositoryService,
+ private readonly blobstorageService: BlobstorageService,
+ private readonly adB2cService: AdB2cService
+ ) {}
+
+ /**
+ * データを削除する
+ * @returns data
+ */
+ async deleteData(): Promise {
+ this.logger.log(`[IN] ${this.deleteData.name}`);
+ try {
+ // BlobStorageからデータを削除する
+ await this.blobstorageService.deleteContainers();
+
+ // ADB2Cからユーザ情報を取得する
+ const users = await this.adB2cService.getUsers();
+ const externalIds = users.map((user) => user.id);
+ await this.adB2cService.deleteUsers(externalIds);
+
+ // データベースからデータを削除する
+ await this.deleteRepositoryService.deleteData();
+ // AutoIncrementの値をリセットする
+ await this.deleteRepositoryService.resetAutoIncrement();
+ } catch (e) {
+ this.logger.error(`error=${e}`);
+ if (e instanceof Error) {
+ switch (e.constructor) {
+ default:
+ throw new HttpException(
+ makeErrorResponse("E009999"),
+ HttpStatus.INTERNAL_SERVER_ERROR
+ );
+ }
+ }
+ throw new HttpException(
+ makeErrorResponse("E009999"),
+ HttpStatus.INTERNAL_SERVER_ERROR
+ );
+ } finally {
+ this.logger.log(`[OUT] ${this.deleteData.name}`);
+ }
+ }
+}
diff --git a/data_migration_tools/server/src/features/delete/test/utility.ts b/data_migration_tools/server/src/features/delete/test/utility.ts
new file mode 100644
index 0000000..e185d27
--- /dev/null
+++ b/data_migration_tools/server/src/features/delete/test/utility.ts
@@ -0,0 +1 @@
+import { DataSource } from "typeorm";
diff --git a/data_migration_tools/server/src/features/delete/types/types.ts b/data_migration_tools/server/src/features/delete/types/types.ts
new file mode 100644
index 0000000..1042758
--- /dev/null
+++ b/data_migration_tools/server/src/features/delete/types/types.ts
@@ -0,0 +1 @@
+export class DeleteResponse {}
diff --git a/data_migration_tools/server/src/gateways/adb2c/adb2c.module.ts b/data_migration_tools/server/src/gateways/adb2c/adb2c.module.ts
new file mode 100644
index 0000000..f54582b
--- /dev/null
+++ b/data_migration_tools/server/src/gateways/adb2c/adb2c.module.ts
@@ -0,0 +1,10 @@
+import { Module } from "@nestjs/common";
+import { ConfigModule } from "@nestjs/config";
+import { AdB2cService } from "./adb2c.service";
+
+@Module({
+ imports: [ConfigModule],
+ exports: [AdB2cService],
+ providers: [AdB2cService],
+})
+export class AdB2cModule {}
diff --git a/data_migration_tools/server/src/gateways/adb2c/adb2c.service.ts b/data_migration_tools/server/src/gateways/adb2c/adb2c.service.ts
new file mode 100644
index 0000000..743fbf8
--- /dev/null
+++ b/data_migration_tools/server/src/gateways/adb2c/adb2c.service.ts
@@ -0,0 +1,116 @@
+import { ClientSecretCredential } from "@azure/identity";
+import { Client } from "@microsoft/microsoft-graph-client";
+import { TokenCredentialAuthenticationProvider } from "@microsoft/microsoft-graph-client/authProviders/azureTokenCredentials";
+import { Injectable, Logger } from "@nestjs/common";
+import { ConfigService } from "@nestjs/config";
+import { AdB2cResponse, AdB2cUser } from "./types/types";
+import { isPromiseRejectedResult } from "./utils/utils";
+
+export type ConflictError = {
+ reason: "email";
+ message: string;
+};
+
+export class Adb2cTooManyRequestsError extends Error {}
+
+export const isConflictError = (arg: unknown): arg is ConflictError => {
+ const value = arg as ConflictError;
+ if (value.message === undefined) {
+ return false;
+ }
+ if (value.reason === "email") {
+ return true;
+ }
+ return false;
+};
+
+@Injectable()
+export class AdB2cService {
+ private readonly logger = new Logger(AdB2cService.name);
+ private graphClient: Client;
+
+ constructor(private readonly configService: ConfigService) {
+ // ADB2Cへの認証情報
+ const credential = new ClientSecretCredential(
+ this.configService.getOrThrow("ADB2C_TENANT_ID"),
+ this.configService.getOrThrow("ADB2C_CLIENT_ID"),
+ this.configService.getOrThrow("ADB2C_CLIENT_SECRET")
+ );
+ const authProvider = new TokenCredentialAuthenticationProvider(credential, {
+ scopes: ["https://graph.microsoft.com/.default"],
+ });
+
+ this.graphClient = Client.initWithMiddleware({ authProvider });
+ }
+ /**
+ * Gets users
+ * @param externalIds
+ * @returns users
+ */
+ async getUsers(): Promise {
+ this.logger.log(`[IN] ${this.getUsers.name}`);
+
+ try {
+ const res: AdB2cResponse = await this.graphClient
+ .api(`users/`)
+ .select(["id", "displayName", "identities"])
+ .filter(`creationType eq 'LocalAccount'`)
+ .get();
+
+ return res.value;
+ } catch (e) {
+ this.logger.error(`error=${e}`);
+ const { statusCode } = e;
+ if (statusCode === 429) {
+ throw new Adb2cTooManyRequestsError();
+ }
+
+ throw e;
+ } finally {
+ this.logger.log(`[OUT] ${this.getUsers.name}`);
+ }
+ }
+
+ /**
+ * Azure AD B2Cからユーザ情報を削除する(複数)
+ * @param externalIds 外部ユーザーID
+ */
+ async deleteUsers(externalIds: string[]): Promise {
+ this.logger.log(
+ `[IN]${this.deleteUsers.name} | params: { externalIds: ${externalIds} };`
+ );
+
+ try {
+ // 複数ユーザーを一括削除する方法がないため、1人ずつで削除を行う
+ const results = await Promise.allSettled(
+ externalIds.map(async (externalId) => {
+ await this.graphClient.api(`users/${externalId}`).delete();
+ await new Promise((resolve) => setTimeout(resolve, 15)); // 15ms待つ
+ this.logger.log(`[[ADB2C DELETE] externalId: ${externalId}`);
+ })
+ );
+
+ // 失敗したプロミスのエラーをログに記録
+ results.forEach((result, index) => {
+ // statusがrejectedでない場合は、エラーが発生していないためログに記録しない
+ if (result.status !== "rejected") {
+ return;
+ }
+
+ const failedId = externalIds[index];
+ if (isPromiseRejectedResult(result)) {
+ const error = result.reason.toString();
+
+ this.logger.error(`Failed to delete user ${failedId}: ${error}`);
+ } else {
+ this.logger.error(`Failed to delete user ${failedId}`);
+ }
+ });
+ } catch (e) {
+ this.logger.error(`error=${e}`);
+ throw e;
+ } finally {
+ this.logger.log(`[OUT] ${this.deleteUsers.name}`);
+ }
+ }
+}
diff --git a/data_migration_tools/server/src/gateways/adb2c/types/types.ts b/data_migration_tools/server/src/gateways/adb2c/types/types.ts
new file mode 100644
index 0000000..a7261ef
--- /dev/null
+++ b/data_migration_tools/server/src/gateways/adb2c/types/types.ts
@@ -0,0 +1,15 @@
+export type AdB2cResponse = {
+ '@odata.context': string;
+ value: AdB2cUser[];
+};
+export type AdB2cUser = {
+ id: string;
+ displayName: string;
+ identities?: UserIdentity[];
+};
+
+export type UserIdentity = {
+ signInType: string;
+ issuer: string;
+ issuerAssignedId: string;
+};
diff --git a/data_migration_tools/server/src/gateways/adb2c/utils/utils.ts b/data_migration_tools/server/src/gateways/adb2c/utils/utils.ts
new file mode 100644
index 0000000..e1b640e
--- /dev/null
+++ b/data_migration_tools/server/src/gateways/adb2c/utils/utils.ts
@@ -0,0 +1,22 @@
+import { ADB2C_SIGN_IN_TYPE } from '../../../constants';
+import { AdB2cUser } from '../types/types';
+
+export const isPromiseRejectedResult = (
+ data: unknown,
+): data is PromiseRejectedResult => {
+ return (
+ data !== null &&
+ typeof data === 'object' &&
+ 'status' in data &&
+ 'reason' in data
+ );
+};
+
+// 生のAdB2cUserのレスポンスから表示名とメールアドレスを取得する
+export const getUserNameAndMailAddress = (user: AdB2cUser) => {
+ const { displayName, identities } = user;
+ const emailAddress = identities?.find(
+ (identity) => identity.signInType === ADB2C_SIGN_IN_TYPE.EMAILADDRESS,
+ )?.issuerAssignedId;
+ return { displayName, emailAddress };
+};
diff --git a/data_migration_tools/server/src/gateways/blobstorage/blobstorage.module.ts b/data_migration_tools/server/src/gateways/blobstorage/blobstorage.module.ts
new file mode 100644
index 0000000..bc4f4a7
--- /dev/null
+++ b/data_migration_tools/server/src/gateways/blobstorage/blobstorage.module.ts
@@ -0,0 +1,10 @@
+import { Module } from '@nestjs/common';
+import { BlobstorageService } from './blobstorage.service';
+import { ConfigModule } from '@nestjs/config';
+
+@Module({
+ exports: [BlobstorageService],
+ imports: [ConfigModule],
+ providers: [BlobstorageService],
+})
+export class BlobstorageModule {}
diff --git a/data_migration_tools/server/src/gateways/blobstorage/blobstorage.service.ts b/data_migration_tools/server/src/gateways/blobstorage/blobstorage.service.ts
new file mode 100644
index 0000000..68e5a80
--- /dev/null
+++ b/data_migration_tools/server/src/gateways/blobstorage/blobstorage.service.ts
@@ -0,0 +1,83 @@
+import { Injectable, Logger } from "@nestjs/common";
+import {
+ BlobServiceClient,
+ StorageSharedKeyCredential,
+} from "@azure/storage-blob";
+import { ConfigService } from "@nestjs/config";
+
+@Injectable()
+export class BlobstorageService {
+ private readonly logger = new Logger(BlobstorageService.name);
+ private readonly blobServiceClientUS: BlobServiceClient;
+ private readonly blobServiceClientEU: BlobServiceClient;
+ private readonly blobServiceClientAU: BlobServiceClient;
+ private readonly sharedKeyCredentialUS: StorageSharedKeyCredential;
+ private readonly sharedKeyCredentialAU: StorageSharedKeyCredential;
+ private readonly sharedKeyCredentialEU: StorageSharedKeyCredential;
+ constructor(private readonly configService: ConfigService) {
+ this.sharedKeyCredentialUS = new StorageSharedKeyCredential(
+ this.configService.getOrThrow("STORAGE_ACCOUNT_NAME_US"),
+ this.configService.getOrThrow("STORAGE_ACCOUNT_KEY_US")
+ );
+ this.sharedKeyCredentialAU = new StorageSharedKeyCredential(
+ this.configService.getOrThrow("STORAGE_ACCOUNT_NAME_AU"),
+ this.configService.getOrThrow("STORAGE_ACCOUNT_KEY_AU")
+ );
+ this.sharedKeyCredentialEU = new StorageSharedKeyCredential(
+ this.configService.getOrThrow("STORAGE_ACCOUNT_NAME_EU"),
+ this.configService.getOrThrow("STORAGE_ACCOUNT_KEY_EU")
+ );
+ this.blobServiceClientUS = new BlobServiceClient(
+ this.configService.getOrThrow("STORAGE_ACCOUNT_ENDPOINT_US"),
+ this.sharedKeyCredentialUS
+ );
+ this.blobServiceClientAU = new BlobServiceClient(
+ this.configService.getOrThrow("STORAGE_ACCOUNT_ENDPOINT_AU"),
+ this.sharedKeyCredentialAU
+ );
+ this.blobServiceClientEU = new BlobServiceClient(
+ this.configService.getOrThrow("STORAGE_ACCOUNT_ENDPOINT_EU"),
+ this.sharedKeyCredentialEU
+ );
+ }
+
+ /**
+ * すべてのコンテナを削除します。
+ * @returns containers
+ */
+ async deleteContainers(): Promise {
+ this.logger.log(`[IN] ${this.deleteContainers.name}`);
+
+ try {
+ for await (const container of this.blobServiceClientAU.listContainers({
+ prefix: "account-",
+ })) {
+ const client = this.blobServiceClientAU.getContainerClient(
+ container.name
+ );
+ await client.deleteIfExists();
+ }
+ for await (const container of this.blobServiceClientEU.listContainers({
+ prefix: "account-",
+ })) {
+ const client = this.blobServiceClientEU.getContainerClient(
+ container.name
+ );
+ await client.deleteIfExists();
+ }
+ for await (const container of this.blobServiceClientUS.listContainers({
+ prefix: "account-",
+ })) {
+ const client = this.blobServiceClientUS.getContainerClient(
+ container.name
+ );
+ await client.deleteIfExists();
+ }
+ } catch (e) {
+ this.logger.error(`error=${e}`);
+ throw e;
+ } finally {
+ this.logger.log(`[OUT] ${this.deleteContainers.name}`);
+ }
+ }
+}
diff --git a/data_migration_tools/server/src/main.ts b/data_migration_tools/server/src/main.ts
index 39d5e39..218ab27 100644
--- a/data_migration_tools/server/src/main.ts
+++ b/data_migration_tools/server/src/main.ts
@@ -1,35 +1,35 @@
-import { NestFactory } from "@nestjs/core";
-import { SwaggerModule, DocumentBuilder } from "@nestjs/swagger";
-import { AppModule } from "./app.module";
-import { ValidationPipe } from "@nestjs/common";
-import { LoggerMiddleware } from "./common/loggerMiddleware";
-import cookieParser from "cookie-parser";
+import { NestFactory } from '@nestjs/core';
+import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
+import { AppModule } from './app.module';
+import { ValidationPipe } from '@nestjs/common';
+import { LoggerMiddleware } from './common/loggerMiddleware';
+import cookieParser from 'cookie-parser';
async function bootstrap() {
const app = await NestFactory.create(AppModule, {
- cors: process.env.CORS === "TRUE",
+ cors: process.env.CORS === 'TRUE',
});
app.use(new LoggerMiddleware(), cookieParser());
// バリデーター(+型の自動変換機能)を適用
app.useGlobalPipes(
- new ValidationPipe({ transform: true, forbidUnknownValues: false })
+ new ValidationPipe({ transform: true, forbidUnknownValues: false }),
);
- if (process.env.STAGE === "local") {
+ if (process.env.STAGE === 'local') {
const options = new DocumentBuilder()
- .setTitle("data_migration_toolsOpenAPI")
- .setVersion("1.0.0")
+ .setTitle('data_migration_toolsOpenAPI')
+ .setVersion('1.0.0')
.addBearerAuth({
- type: "http",
- scheme: "bearer",
- bearerFormat: "JWT",
+ type: 'http',
+ scheme: 'bearer',
+ bearerFormat: 'JWT',
})
.build();
const document = SwaggerModule.createDocument(app, options);
- SwaggerModule.setup("api", app, document);
+ SwaggerModule.setup('api', app, document);
}
- await app.listen(process.env.PORT || 8180);
+ await app.listen(process.env.PORT || 8280);
}
bootstrap();
diff --git a/data_migration_tools/server/src/repositories/delete/delete.repository.module.ts b/data_migration_tools/server/src/repositories/delete/delete.repository.module.ts
new file mode 100644
index 0000000..e1797fc
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/delete.repository.module.ts
@@ -0,0 +1,60 @@
+import { Module } from "@nestjs/common";
+import { TypeOrmModule } from "@nestjs/typeorm";
+import { DeleteRepositoryService } from "./delete.repository.service";
+import { Account } from "./entity/account.entity";
+import { AudioFile } from "./entity/audio_file.entity";
+import { AudioOptionItem } from "./entity/audio_option_item.entity";
+import { CheckoutPermission } from "./entity/checkout_permission.entity";
+import {
+ CardLicense,
+ CardLicenseIssue,
+ License,
+ LicenseAllocationHistory,
+ LicenseAllocationHistoryArchive,
+ LicenseArchive,
+ LicenseOrder,
+} from "./entity/license.entity";
+import { OptionItem } from "./entity/option_item.entity";
+import { SortCriteria } from "./entity/sort_criteria.entity";
+import { Task } from "./entity/task.entity";
+import { TemplateFile } from "./entity/template_file.entity";
+import { Term } from "./entity/term.entity";
+import { UserGroupMember } from "./entity/user_group_member.entity";
+import { UserGroup } from "./entity/user_group.entity";
+import { User, UserArchive } from "./entity/user.entity";
+import { WorkflowTypist } from "./entity/workflow_typists.entity";
+import { Workflow } from "./entity/workflow.entity";
+import { Worktype } from "./entity/worktype.entity";
+
+@Module({
+ imports: [
+ TypeOrmModule.forFeature([
+ Account,
+ AudioFile,
+ AudioOptionItem,
+ CheckoutPermission,
+ License,
+ LicenseOrder,
+ CardLicense,
+ CardLicenseIssue,
+ LicenseArchive,
+ LicenseAllocationHistory,
+ LicenseAllocationHistoryArchive,
+ OptionItem,
+ SortCriteria,
+ Task,
+ TemplateFile,
+ Term,
+ UserGroupMember,
+ UserGroup,
+ User,
+ UserArchive,
+ WorkflowTypist,
+ Workflow,
+ Worktype,
+ ]),
+ ],
+ providers: [DeleteRepositoryService],
+ exports: [DeleteRepositoryService],
+})
+export class DeleteRepositoryModule {}
diff --git a/data_migration_tools/server/src/repositories/delete/delete.repository.service.ts b/data_migration_tools/server/src/repositories/delete/delete.repository.service.ts
new file mode 100644
index 0000000..52539c0
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/delete.repository.service.ts
@@ -0,0 +1,57 @@
+import { Injectable } from "@nestjs/common";
+import { DataSource } from "typeorm";
+import { logger } from "@azure/identity";
+import { Account } from "./entity/account.entity";
+import { AUTO_INCREMENT_START } from "../../constants";
+
+@Injectable()
+export class DeleteRepositoryService {
+ constructor(private dataSource: DataSource) {}
+
+ /**
+ * 全テーブルをTrancateする
+ * @returns data
+ */
+ async deleteData(): Promise {
+ const entities = this.dataSource.entityMetadatas;
+ const queryRunner = this.dataSource.createQueryRunner();
+
+ try {
+ await queryRunner.startTransaction();
+ await queryRunner.query("SET FOREIGN_KEY_CHECKS=0");
+ for (const entity of entities) {
+ await queryRunner.query(`TRUNCATE TABLE \`${entity.tableName}\``);
+ }
+ await queryRunner.query("SET FOREIGN_KEY_CHECKS=1");
+ await queryRunner.commitTransaction();
+ } catch (err) {
+ await queryRunner.rollbackTransaction();
+ logger.error(err);
+ throw err;
+ } finally {
+ await queryRunner.release();
+ }
+ }
+
+ /**
+ * AutoIncrementの値をリセットする
+ * @returns data
+ */
+ async resetAutoIncrement(): Promise {
+ const queryRunner = this.dataSource.createQueryRunner();
+
+ try {
+ await queryRunner.startTransaction();
+ await queryRunner.query(
+ `ALTER TABLE accounts AUTO_INCREMENT = ${AUTO_INCREMENT_START}`
+ );
+ await queryRunner.commitTransaction();
+ } catch (err) {
+ await queryRunner.rollbackTransaction();
+ logger.error(err);
+ throw err;
+ } finally {
+ await queryRunner.release();
+ }
+ }
+}
diff --git a/data_migration_tools/server/src/repositories/delete/entity/account.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/account.entity.ts
new file mode 100644
index 0000000..de92919
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/account.entity.ts
@@ -0,0 +1,70 @@
+import { bigintTransformer } from "../../../common/entity";
+import { User } from "./user.entity";
+import {
+ Entity,
+ Column,
+ PrimaryGeneratedColumn,
+ CreateDateColumn,
+ UpdateDateColumn,
+ OneToMany,
+} from "typeorm";
+
+@Entity({ name: "accounts" })
+export class Account {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ parent_account_id: number | null;
+
+ @Column()
+ tier: number;
+
+ @Column()
+ country: string;
+
+ @Column({ default: false })
+ delegation_permission: boolean;
+
+ @Column({ default: false })
+ locked: boolean;
+
+ @Column()
+ company_name: string;
+
+ @Column({ default: false })
+ verified: boolean;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ primary_admin_user_id: number | null;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ secondary_admin_user_id: number | null;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ active_worktype_id: number | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ deleted_at: Date | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ created_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+
+ @UpdateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ updated_at: Date;
+
+ @OneToMany(() => User, (user) => user.id)
+ user: User[] | null;
+}
diff --git a/data_migration_tools/server/src/repositories/delete/entity/audio_file.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/audio_file.entity.ts
new file mode 100644
index 0000000..e606af1
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/audio_file.entity.ts
@@ -0,0 +1,43 @@
+import { Task } from "./task.entity";
+import { Entity, Column, PrimaryGeneratedColumn, OneToOne } from "typeorm";
+
+@Entity({ name: "audio_files" })
+export class AudioFile {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column()
+ account_id: number;
+ @Column()
+ owner_user_id: number;
+ @Column()
+ url: string;
+ @Column()
+ file_name: string;
+ @Column()
+ author_id: string;
+ @Column()
+ work_type_id: string;
+ @Column()
+ started_at: Date;
+ @Column({ type: "time" })
+ duration: string;
+ @Column()
+ finished_at: Date;
+ @Column()
+ uploaded_at: Date;
+ @Column()
+ file_size: number;
+ @Column()
+ priority: string;
+ @Column()
+ audio_format: string;
+ @Column({ nullable: true, type: "varchar" })
+ comment: string | null;
+ @Column({ nullable: true, type: "datetime" })
+ deleted_at: Date | null;
+ @Column()
+ is_encrypted: boolean;
+ @OneToOne(() => Task, (task) => task.file)
+ task: Task | null;
+}
diff --git a/data_migration_tools/server/src/repositories/delete/entity/audio_option_item.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/audio_option_item.entity.ts
new file mode 100644
index 0000000..51e65ff
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/audio_option_item.entity.ts
@@ -0,0 +1,23 @@
+import { Task } from "./task.entity";
+import {
+ Entity,
+ Column,
+ PrimaryGeneratedColumn,
+ ManyToOne,
+ JoinColumn,
+} from "typeorm";
+
+@Entity({ name: "audio_option_items" })
+export class AudioOptionItem {
+ @PrimaryGeneratedColumn()
+ id: number;
+ @Column()
+ audio_file_id: number;
+ @Column()
+ label: string;
+ @Column()
+ value: string;
+ @ManyToOne(() => Task, (task) => task.audio_file_id)
+ @JoinColumn({ name: "audio_file_id", referencedColumnName: "audio_file_id" })
+ task: Task | null;
+}
diff --git a/data_migration_tools/server/src/repositories/delete/entity/checkout_permission.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/checkout_permission.entity.ts
new file mode 100644
index 0000000..ecd0781
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/checkout_permission.entity.ts
@@ -0,0 +1,38 @@
+import { bigintTransformer } from "../../../common/entity";
+import { Task } from "./task.entity";
+import { UserGroup } from "./user_group.entity";
+import { User } from "./user.entity";
+import {
+ Entity,
+ Column,
+ PrimaryGeneratedColumn,
+ JoinColumn,
+ ManyToOne,
+} from "typeorm";
+
+@Entity({ name: "checkout_permission" })
+export class CheckoutPermission {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column({})
+ task_id: number;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ user_id: number | null;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ user_group_id: number | null;
+
+ @ManyToOne(() => User, (user) => user.id)
+ @JoinColumn({ name: "user_id" })
+ user: User | null;
+
+ @ManyToOne(() => UserGroup, (group) => group.id)
+ @JoinColumn({ name: "user_group_id" })
+ user_group: UserGroup | null;
+
+ @ManyToOne(() => Task, (task) => task.id)
+ @JoinColumn({ name: "task_id" })
+ task: Task | null;
+}
diff --git a/data_migration_tools/server/src/repositories/delete/entity/license.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/license.entity.ts
new file mode 100644
index 0000000..2ce6edf
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/license.entity.ts
@@ -0,0 +1,322 @@
+import {
+ Entity,
+ Column,
+ PrimaryGeneratedColumn,
+ CreateDateColumn,
+ UpdateDateColumn,
+ OneToOne,
+ JoinColumn,
+ ManyToOne,
+ PrimaryColumn,
+} from "typeorm";
+import { User } from "./user.entity";
+import { bigintTransformer } from "../../../common/entity";
+
+@Entity({ name: "license_orders" })
+export class LicenseOrder {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column()
+ po_number: string;
+
+ @Column()
+ from_account_id: number;
+
+ @Column()
+ to_account_id: number;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ })
+ ordered_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ issued_at: Date | null;
+
+ @Column()
+ quantity: number;
+
+ @Column()
+ status: string;
+
+ @Column({ nullable: true, type: "datetime" })
+ canceled_at: Date | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ })
+ created_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+
+ @UpdateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ })
+ updated_at: Date;
+}
+
+@Entity({ name: "licenses" })
+export class License {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column({ nullable: true, type: "datetime" })
+ expiry_date: Date | null;
+
+ @Column()
+ account_id: number;
+
+ @Column()
+ type: string;
+
+ @Column()
+ status: string;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ allocated_user_id: number | null;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ order_id: number | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ deleted_at: Date | null;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ delete_order_id: number | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ })
+ created_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+
+ @UpdateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ })
+ updated_at: Date;
+
+ @OneToOne(() => User, (user) => user.license, {
+ createForeignKeyConstraints: false,
+ }) // createForeignKeyConstraintsはSQLite用設定値.本番用は別途migrationで設定
+ @JoinColumn({ name: "allocated_user_id" })
+ user: User | null;
+}
+
+@Entity({ name: "card_license_issue" })
+export class CardLicenseIssue {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column()
+ issued_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ })
+ created_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+
+ @UpdateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ })
+ updated_at: Date;
+}
+
+@Entity({ name: "card_licenses" })
+export class CardLicense {
+ @PrimaryGeneratedColumn()
+ license_id: number;
+
+ @Column()
+ issue_id: number;
+
+ @Column()
+ card_license_key: string;
+
+ @Column({ nullable: true, type: "datetime" })
+ activated_at: Date | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ })
+ created_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+
+ @UpdateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ })
+ updated_at: Date;
+}
+
+@Entity({ name: "license_allocation_history" })
+export class LicenseAllocationHistory {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column()
+ user_id: number;
+
+ @Column()
+ license_id: number;
+
+ @Column()
+ is_allocated: boolean;
+
+ @Column()
+ account_id: number;
+
+ @Column()
+ executed_at: Date;
+
+ @Column()
+ switch_from_type: string;
+
+ @Column({ nullable: true, type: "datetime" })
+ deleted_at: Date | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ })
+ created_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+
+ @UpdateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ })
+ updated_at: Date;
+
+ @ManyToOne(() => License, (licenses) => licenses.id, {
+ createForeignKeyConstraints: false,
+ }) // createForeignKeyConstraintsはSQLite用設定値.本番用は別途migrationで設定
+ @JoinColumn({ name: "license_id" })
+ license: License | null;
+}
+
+@Entity({ name: "licenses_archive" })
+export class LicenseArchive {
+ @PrimaryColumn()
+ id: number;
+
+ @Column({ nullable: true, type: "datetime" })
+ expiry_date: Date | null;
+
+ @Column()
+ account_id: number;
+
+ @Column()
+ type: string;
+
+ @Column()
+ status: string;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ allocated_user_id: number | null;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ order_id: number | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ deleted_at: Date | null;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ delete_order_id: number | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+
+ @Column()
+ created_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+
+ @Column()
+ updated_at: Date;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ })
+ archived_at: Date;
+}
+
+@Entity({ name: "license_allocation_history_archive" })
+export class LicenseAllocationHistoryArchive {
+ @PrimaryColumn()
+ id: number;
+
+ @Column()
+ user_id: number;
+
+ @Column()
+ license_id: number;
+
+ @Column()
+ is_allocated: boolean;
+
+ @Column()
+ account_id: number;
+
+ @Column()
+ executed_at: Date;
+
+ @Column()
+ switch_from_type: string;
+
+ @Column({ nullable: true, type: "datetime" })
+ deleted_at: Date | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+
+ @Column()
+ created_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+
+ @Column()
+ updated_at: Date;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ })
+ archived_at: Date;
+}
diff --git a/data_migration_tools/server/src/repositories/delete/entity/option_item.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/option_item.entity.ts
new file mode 100644
index 0000000..f9e7ac4
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/option_item.entity.ts
@@ -0,0 +1,42 @@
+import {
+ Entity,
+ Column,
+ PrimaryGeneratedColumn,
+ UpdateDateColumn,
+ CreateDateColumn,
+ ManyToOne,
+ JoinColumn,
+} from 'typeorm';
+import { Worktype } from './worktype.entity';
+
+@Entity({ name: 'option_items' })
+export class OptionItem {
+ @PrimaryGeneratedColumn()
+ id: number;
+ @Column()
+ worktype_id: number;
+ @Column()
+ item_label: string;
+ @Column()
+ default_value_type: string;
+ @Column()
+ initial_value: string;
+ @Column({ nullable: true, type: 'datetime' })
+ created_by: string | null;
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: 'datetime',
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ created_at: Date | null;
+ @Column({ nullable: true, type: 'datetime' })
+ updated_by: string | null;
+ @UpdateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: 'datetime',
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ updated_at: Date | null;
+
+ @ManyToOne(() => Worktype, (worktype) => worktype.id)
+ @JoinColumn({ name: 'worktype_id' })
+ worktype: Worktype;
+}
diff --git a/data_migration_tools/server/src/repositories/delete/entity/sort_criteria.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/sort_criteria.entity.ts
new file mode 100644
index 0000000..260c9a9
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/sort_criteria.entity.ts
@@ -0,0 +1,16 @@
+import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
+
+@Entity({ name: 'sort_criteria' })
+export class SortCriteria {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column()
+ user_id: number;
+
+ @Column()
+ parameter: string;
+
+ @Column()
+ direction: string;
+}
diff --git a/data_migration_tools/server/src/repositories/delete/entity/task.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/task.entity.ts
new file mode 100644
index 0000000..1daca02
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/task.entity.ts
@@ -0,0 +1,71 @@
+import { AudioOptionItem } from "./audio_option_item.entity";
+import { AudioFile } from "./audio_file.entity";
+import { User } from "./user.entity";
+import { TemplateFile } from "./template_file.entity";
+import {
+ Entity,
+ Column,
+ PrimaryGeneratedColumn,
+ OneToOne,
+ JoinColumn,
+ OneToMany,
+ ManyToOne,
+ CreateDateColumn,
+ UpdateDateColumn,
+} from "typeorm";
+import { bigintTransformer } from "../../../common/entity";
+
+@Entity({ name: "tasks" })
+export class Task {
+ @PrimaryGeneratedColumn()
+ id: number;
+ @Column()
+ job_number: string;
+ @Column()
+ account_id: number;
+ @Column({ nullable: true, type: "boolean" })
+ is_job_number_enabled: boolean | null;
+ @Column()
+ audio_file_id: number;
+ @Column()
+ status: string;
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ typist_user_id: number | null;
+ @Column()
+ priority: string;
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ template_file_id: number | null;
+ @Column({ nullable: true, type: "datetime" })
+ started_at: Date | null;
+ @Column({ nullable: true, type: "datetime" })
+ finished_at: Date | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ created_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+
+ @UpdateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ updated_at: Date;
+ @OneToOne(() => AudioFile, (audiofile) => audiofile.task)
+ @JoinColumn({ name: "audio_file_id" })
+ file: AudioFile | null;
+ @OneToMany(() => AudioOptionItem, (option) => option.task)
+ option_items: AudioOptionItem[] | null;
+ @OneToOne(() => User, (user) => user.id)
+ @JoinColumn({ name: "typist_user_id" })
+ typist_user: User | null;
+ @ManyToOne(() => TemplateFile, (templateFile) => templateFile.id)
+ @JoinColumn({ name: "template_file_id" })
+ template_file: TemplateFile | null;
+}
diff --git a/data_migration_tools/server/src/repositories/delete/entity/template_file.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/template_file.entity.ts
new file mode 100644
index 0000000..79c14f5
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/template_file.entity.ts
@@ -0,0 +1,31 @@
+import {
+ Entity,
+ Column,
+ PrimaryGeneratedColumn,
+ CreateDateColumn,
+ UpdateDateColumn,
+ OneToMany,
+} from "typeorm";
+import { Task } from "./task.entity";
+
+@Entity({ name: "template_files" })
+export class TemplateFile {
+ @PrimaryGeneratedColumn()
+ id: number;
+ @Column()
+ account_id: number;
+ @Column()
+ url: string;
+ @Column()
+ file_name: string;
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+ @CreateDateColumn()
+ created_at: Date;
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+ @UpdateDateColumn()
+ updated_at: Date;
+ @OneToMany(() => Task, (task) => task.template_file)
+ tasks: Task[] | null;
+}
diff --git a/data_migration_tools/server/src/repositories/delete/entity/term.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/term.entity.ts
new file mode 100644
index 0000000..7a2097b
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/term.entity.ts
@@ -0,0 +1,37 @@
+import {
+ Entity,
+ Column,
+ PrimaryGeneratedColumn,
+ CreateDateColumn,
+ UpdateDateColumn,
+} from 'typeorm';
+
+@Entity({ name: 'terms' })
+export class Term {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column()
+ document_type: string;
+
+ @Column()
+ version: string;
+
+ @Column({ nullable: true, type: 'datetime' })
+ created_by: string | null;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: 'datetime',
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ created_at: Date;
+
+ @Column({ nullable: true, type: 'varchar' })
+ updated_by: string | null;
+
+ @UpdateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: 'datetime',
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ updated_at: Date;
+}
diff --git a/data_migration_tools/server/src/repositories/delete/entity/user.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/user.entity.ts
new file mode 100644
index 0000000..f7fa3d7
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/user.entity.ts
@@ -0,0 +1,170 @@
+import { Account } from "./account.entity";
+import {
+ Entity,
+ Column,
+ PrimaryGeneratedColumn,
+ CreateDateColumn,
+ UpdateDateColumn,
+ ManyToOne,
+ JoinColumn,
+ OneToOne,
+ OneToMany,
+ PrimaryColumn,
+} from "typeorm";
+import { License } from "./license.entity";
+import { UserGroupMember } from "./user_group_member.entity";
+
+@Entity({ name: "users" })
+export class User {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column()
+ external_id: string;
+
+ @Column()
+ account_id: number;
+
+ @Column()
+ role: string;
+
+ @Column({ nullable: true, type: "varchar" })
+ author_id: string | null;
+
+ @Column({ nullable: true, type: "varchar" })
+ accepted_eula_version: string | null;
+
+ @Column({ nullable: true, type: "varchar" })
+ accepted_privacy_notice_version: string | null;
+
+ @Column({ nullable: true, type: "varchar" })
+ accepted_dpa_version: string | null;
+
+ @Column({ default: false })
+ email_verified: boolean;
+
+ @Column({ default: true })
+ auto_renew: boolean;
+
+ @Column({ default: true })
+ notification: boolean;
+
+ @Column({ default: false })
+ encryption: boolean;
+
+ @Column({ nullable: true, type: "varchar" })
+ encryption_password: string | null;
+
+ @Column({ default: false })
+ prompt: boolean;
+
+ @Column({ nullable: true, type: "datetime" })
+ deleted_at: Date | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ created_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+
+ @UpdateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ updated_at: Date;
+
+ @ManyToOne(() => Account, (account) => account.user, {
+ createForeignKeyConstraints: false,
+ }) // createForeignKeyConstraintsはSQLite用設定値.本番用は別途migrationで設定
+ @JoinColumn({ name: "account_id" })
+ account: Account | null;
+
+ @OneToOne(() => License, (license) => license.user)
+ license: License | null;
+
+ @OneToMany(() => UserGroupMember, (userGroupMember) => userGroupMember.user)
+ userGroupMembers: UserGroupMember[] | null;
+}
+
+@Entity({ name: "users_archive" })
+export class UserArchive {
+ @PrimaryColumn()
+ id: number;
+
+ @Column()
+ external_id: string;
+
+ @Column()
+ account_id: number;
+
+ @Column()
+ role: string;
+
+ @Column({ nullable: true, type: "varchar" })
+ author_id: string | null;
+
+ @Column({ nullable: true, type: "varchar" })
+ accepted_eula_version: string | null;
+
+ @Column({ nullable: true, type: "varchar" })
+ accepted_privacy_notice_version: string | null;
+
+ @Column({ nullable: true, type: "varchar" })
+ accepted_dpa_version: string | null;
+
+ @Column()
+ email_verified: boolean;
+
+ @Column()
+ auto_renew: boolean;
+
+ @Column()
+ notification: boolean;
+
+ @Column()
+ encryption: boolean;
+
+ @Column()
+ prompt: boolean;
+
+ @Column({ nullable: true, type: "datetime" })
+ deleted_at: Date | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+
+ @Column()
+ created_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+
+ @Column()
+ updated_at: Date;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ archived_at: Date;
+}
+
+export type newUser = Omit<
+ User,
+ | "id"
+ | "deleted_at"
+ | "created_at"
+ | "updated_at"
+ | "updated_by"
+ | "created_by"
+ | "account"
+ | "license"
+ | "userGroupMembers"
+ | "email_verified"
+>;
diff --git a/data_migration_tools/server/src/repositories/delete/entity/user_group.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/user_group.entity.ts
new file mode 100644
index 0000000..2a1fbce
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/user_group.entity.ts
@@ -0,0 +1,48 @@
+import {
+ Entity,
+ Column,
+ PrimaryGeneratedColumn,
+ OneToMany,
+ CreateDateColumn,
+ UpdateDateColumn,
+} from 'typeorm';
+import { UserGroupMember } from './user_group_member.entity';
+
+@Entity({ name: 'user_group' })
+export class UserGroup {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column()
+ account_id: number;
+
+ @Column()
+ name: string;
+
+ @Column({ nullable: true, type: 'datetime' })
+ deleted_at: Date | null;
+
+ @Column({ nullable: true, type: 'datetime' })
+ created_by: string | null;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: 'datetime',
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ created_at: Date | null;
+
+ @Column({ nullable: true, type: 'datetime' })
+ updated_by: string | null;
+
+ @UpdateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: 'datetime',
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ updated_at: Date | null;
+
+ @OneToMany(
+ () => UserGroupMember,
+ (userGroupMember) => userGroupMember.userGroup,
+ )
+ userGroupMembers: UserGroupMember[] | null;
+}
diff --git a/data_migration_tools/server/src/repositories/delete/entity/user_group_member.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/user_group_member.entity.ts
new file mode 100644
index 0000000..1afa807
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/user_group_member.entity.ts
@@ -0,0 +1,52 @@
+import { User } from "./user.entity";
+import {
+ Entity,
+ Column,
+ PrimaryGeneratedColumn,
+ JoinColumn,
+ ManyToOne,
+ CreateDateColumn,
+ UpdateDateColumn,
+} from "typeorm";
+import { UserGroup } from "./user_group.entity";
+
+@Entity({ name: "user_group_member" })
+export class UserGroupMember {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column()
+ user_group_id: number;
+
+ @Column()
+ user_id: number;
+
+ @Column({ nullable: true, type: "datetime" })
+ deleted_at: Date | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ created_at: Date | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+
+ @UpdateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ updated_at: Date | null;
+
+ @ManyToOne(() => User, (user) => user.id)
+ @JoinColumn({ name: "user_id" })
+ user: User | null;
+
+ @ManyToOne(() => UserGroup, (userGroup) => userGroup.id)
+ @JoinColumn({ name: "user_group_id" })
+ userGroup: UserGroup | null;
+}
diff --git a/data_migration_tools/server/src/repositories/delete/entity/workflow.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/workflow.entity.ts
new file mode 100644
index 0000000..83cdaae
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/workflow.entity.ts
@@ -0,0 +1,66 @@
+import {
+ Entity,
+ Column,
+ PrimaryGeneratedColumn,
+ CreateDateColumn,
+ UpdateDateColumn,
+ OneToMany,
+ JoinColumn,
+ ManyToOne,
+} from "typeorm";
+import { WorkflowTypist } from "./workflow_typists.entity";
+import { Worktype } from "./worktype.entity";
+import { TemplateFile } from "./template_file.entity";
+import { User } from "./user.entity";
+import { bigintTransformer } from "../../../common/entity";
+
+@Entity({ name: "workflows" })
+export class Workflow {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column()
+ account_id: number;
+
+ @Column()
+ author_id: number;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ worktype_id: number | null;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ template_id: number | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ created_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+
+ @UpdateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ updated_at: Date;
+
+ @ManyToOne(() => User, (user) => user.id)
+ @JoinColumn({ name: "author_id" })
+ author: User | null;
+
+ @ManyToOne(() => Worktype, (worktype) => worktype.id)
+ @JoinColumn({ name: "worktype_id" })
+ worktype: Worktype | null;
+
+ @ManyToOne(() => TemplateFile, (templateFile) => templateFile.id)
+ @JoinColumn({ name: "template_id" })
+ template: TemplateFile | null;
+
+ @OneToMany(() => WorkflowTypist, (workflowTypist) => workflowTypist.workflow)
+ workflowTypists: WorkflowTypist[] | null;
+}
diff --git a/data_migration_tools/server/src/repositories/delete/entity/workflow_typists.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/workflow_typists.entity.ts
new file mode 100644
index 0000000..e404ba0
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/workflow_typists.entity.ts
@@ -0,0 +1,58 @@
+import {
+ Entity,
+ Column,
+ PrimaryGeneratedColumn,
+ CreateDateColumn,
+ UpdateDateColumn,
+ ManyToOne,
+ JoinColumn,
+} from "typeorm";
+import { Workflow } from "./workflow.entity";
+import { User } from "./user.entity";
+import { UserGroup } from "./user_group.entity";
+import { bigintTransformer } from "../../../common/entity";
+
+@Entity({ name: "workflow_typists" })
+export class WorkflowTypist {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column()
+ workflow_id: number;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ typist_id: number | null;
+
+ @Column({ nullable: true, type: "bigint", transformer: bigintTransformer })
+ typist_group_id: number | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ created_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+
+ @UpdateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ updated_at: Date;
+
+ @ManyToOne(() => Workflow, (workflow) => workflow.id)
+ @JoinColumn({ name: "workflow_id" })
+ workflow: Workflow | null;
+
+ @ManyToOne(() => User, (user) => user.id)
+ @JoinColumn({ name: "typist_id" })
+ typist: User | null;
+
+ @ManyToOne(() => UserGroup, (userGroup) => userGroup.id)
+ @JoinColumn({ name: "typist_group_id" })
+ typistGroup: UserGroup | null;
+}
diff --git a/data_migration_tools/server/src/repositories/delete/entity/worktype.entity.ts b/data_migration_tools/server/src/repositories/delete/entity/worktype.entity.ts
new file mode 100644
index 0000000..d444a00
--- /dev/null
+++ b/data_migration_tools/server/src/repositories/delete/entity/worktype.entity.ts
@@ -0,0 +1,49 @@
+import { Account } from "./account.entity";
+import {
+ Entity,
+ Column,
+ PrimaryGeneratedColumn,
+ CreateDateColumn,
+ UpdateDateColumn,
+ OneToMany,
+} from "typeorm";
+import { OptionItem } from "./option_item.entity";
+
+@Entity({ name: "worktypes" })
+export class Worktype {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column()
+ account_id: number;
+
+ @Column()
+ custom_worktype_id: string;
+
+ @Column({ nullable: true, type: "varchar" })
+ description: string | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ deleted_at: Date | null;
+
+ @Column({ nullable: true, type: "datetime" })
+ created_by: string | null;
+
+ @CreateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ created_at: Date;
+
+ @Column({ nullable: true, type: "datetime" })
+ updated_by: string | null;
+
+ @UpdateDateColumn({
+ default: () => "datetime('now', 'localtime')",
+ type: "datetime",
+ }) // defaultはSQLite用設定値.本番用は別途migrationで設定
+ updated_at: Date;
+
+ @OneToMany(() => OptionItem, (optionItem) => optionItem.worktype)
+ option_items: OptionItem[];
+}
diff --git a/data_migration_tools/server/src/repositories/delete/errors/types.ts b/data_migration_tools/server/src/repositories/delete/errors/types.ts
new file mode 100644
index 0000000..e69de29