├── .vscode └── extensions.json ├── src ├── vite-env.d.ts ├── coms │ ├── pages │ │ └── ViewPage.vue │ └── DBML │ │ ├── DbGroup.vue │ │ ├── CustomConnectionLine.vue │ │ ├── libs │ │ ├── example.dbml │ │ ├── ace-config.ts │ │ ├── state.ts │ │ ├── css │ │ │ └── styles.css │ │ └── convertor.ts │ │ ├── DbTable.vue │ │ ├── CustomEdge.vue │ │ ├── DbEditor.vue │ │ └── DbChart.vue ├── libs │ ├── type │ │ └── global.ts │ └── utils.ts ├── assets │ └── vue.svg ├── main.ts └── App.vue ├── dist ├── demo.png ├── screenshot-img.png ├── index.html ├── vite.svg └── assets │ ├── theme-dracula-2432079e.js │ ├── mode-sql-7d302412.js │ ├── ViewPage-f805070e.css │ ├── mode-yaml-202fbe23.js │ ├── mode-sqlserver-88765fda.js │ └── worker-base-78504947.js ├── public ├── crud.png ├── demo.png ├── crud-dbml.png ├── crud-form.png ├── crud-gallery.png ├── crud-setting.png ├── screenshot-img.png └── vite.svg ├── .prettierrc.json ├── components.d.ts ├── .gitignore ├── index.html ├── tsconfig.json ├── vite.config.ts ├── package.json ├── README.md └── yarn.lock /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | } 3 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /dist/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rxzcode/vue-dbml/HEAD/dist/demo.png -------------------------------------------------------------------------------- /public/crud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rxzcode/vue-dbml/HEAD/public/crud.png -------------------------------------------------------------------------------- /public/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rxzcode/vue-dbml/HEAD/public/demo.png -------------------------------------------------------------------------------- /public/crud-dbml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rxzcode/vue-dbml/HEAD/public/crud-dbml.png -------------------------------------------------------------------------------- /public/crud-form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rxzcode/vue-dbml/HEAD/public/crud-form.png -------------------------------------------------------------------------------- /dist/screenshot-img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rxzcode/vue-dbml/HEAD/dist/screenshot-img.png -------------------------------------------------------------------------------- /public/crud-gallery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rxzcode/vue-dbml/HEAD/public/crud-gallery.png -------------------------------------------------------------------------------- /public/crud-setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rxzcode/vue-dbml/HEAD/public/crud-setting.png -------------------------------------------------------------------------------- /public/screenshot-img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rxzcode/vue-dbml/HEAD/public/screenshot-img.png -------------------------------------------------------------------------------- /src/coms/pages/ViewPage.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /src/libs/type/global.ts: -------------------------------------------------------------------------------- 1 | declare module '@dbml/core/lib/parse/dbmlParser' { 2 | const parseDBMLToJSON: any; 3 | export default parseDBMLToJSON; 4 | } 5 | 6 | declare module 'dagre' { 7 | const dagre: any; 8 | export default dagre; 9 | } 10 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": false, 3 | "tabWidth": 4, 4 | "trailingComma": "none", 5 | "semi": true, 6 | "singleQuote": true, 7 | "printWidth": 150, 8 | "_vueIndentScriptAndStyle": false, 9 | "_bracketSameLine": false 10 | } -------------------------------------------------------------------------------- /components.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | 3 | declare module 'vue' { 4 | export interface GlobalComponents { 5 | RouterLink: typeof import('vue-router')['RouterLink']; 6 | RouterView: typeof import('vue-router')['RouterView']; 7 | ViewPage: typeof import('./src/components/page/ViewPage.vue')['default']; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | # dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | 26 | Makefile -------------------------------------------------------------------------------- /src/assets/vue.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | DBML 8 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/coms/DBML/DbGroup.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 15 | 16 | 32 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "moduleResolution": "Node", 7 | "strict": true, 8 | "jsx": "preserve", 9 | "resolveJsonModule": true, 10 | "isolatedModules": true, 11 | "esModuleInterop": true, 12 | "types": [], 13 | "lib": ["ESNext", "DOM"], 14 | "skipLibCheck": true, 15 | "noEmit": true, 16 | "paths": { 17 | "@/*": ["./src/*"] 18 | } 19 | }, 20 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], 21 | } 22 | -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | DBML 8 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import vue from '@vitejs/plugin-vue' 3 | import { fileURLToPath, URL } from 'node:url' 4 | 5 | process.env.NODE_ENV = process.env.NODE_ENV || 'development' 6 | export default defineConfig({ 7 | plugins: [vue()], 8 | build: { 9 | sourcemap: true, 10 | }, 11 | css: { 12 | preprocessorOptions: { 13 | scss: { 14 | api: 'modern-compiler', 15 | }, 16 | }, 17 | }, 18 | resolve: { 19 | alias: { 20 | '@': fileURLToPath(new URL('./src', import.meta.url)), 21 | }, 22 | }, 23 | }) 24 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue'; 2 | import { createPinia } from 'pinia'; 3 | import { createRouter, createWebHistory } from 'vue-router'; 4 | 5 | const pinia = createPinia(); 6 | import App from './App.vue'; 7 | 8 | const router = createRouter({ 9 | history: createWebHistory(), 10 | strict: true, 11 | routes: [ 12 | { 13 | name: 'view-page', 14 | path: '/', 15 | component: () => import('@/coms/pages/ViewPage.vue') 16 | }, 17 | { 18 | name: 'otherwise', 19 | path: '/(.*)?', 20 | redirect: { name: 'view-page' } 21 | }, 22 | { 23 | name: 'otherwise', 24 | path: '/', 25 | redirect: { name: 'view-page' } 26 | } 27 | ] 28 | }); 29 | createApp(App).use(pinia).use(router).mount('#app'); 30 | -------------------------------------------------------------------------------- /src/coms/DBML/CustomConnectionLine.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 40 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "erd", 3 | "private": true, 4 | "version": "0.0.1", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview", 10 | "git": "git add . && git commit -m 'chore: polish code' && git push origin" 11 | }, 12 | "dependencies": { 13 | "@vue-flow/background": "1.3.2", 14 | "@vue-flow/controls": "1.1.2", 15 | "@vue-flow/core": "1.21.0", 16 | "@vue-flow/minimap": "1.5.2", 17 | "@dbml/core": "2.5.3", 18 | "@popperjs/core": "^2.11", 19 | "ace-builds": "^1.23", 20 | "dagre": "^0.8.5", 21 | "lodash-es": "4.17.21", 22 | "pinia": "^2.1", 23 | "typescript": "^4.9", 24 | "vue": "^3.3", 25 | "vue-router": "^4.2", 26 | "vue-tsc": "^1.8", 27 | "vue3-ace-editor": "^2.2.2" 28 | }, 29 | "_dep": { 30 | "@vue-flow/background": "1.2.0", 31 | "@vue-flow/controls": "1.1.0", 32 | "@vue-flow/core": "1.21.1", 33 | "@vue-flow/minimap": "1.1.1" 34 | }, 35 | "devDependencies": { 36 | "js-yaml": "^4.1.0", 37 | "@types/js-yaml": "^4.0.9", 38 | "@types/lodash-es": "^4.17.7", 39 | "@types/node": "^20.2", 40 | "@vitejs/plugin-vue": "^4.2", 41 | "unplugin-vue-components": "^0.25", 42 | "vite": "^4.4", 43 | "vite-plugin-compression": "0.5.1", 44 | "vite-plugin-singlefile": "0.13.5" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/coms/DBML/libs/example.dbml: -------------------------------------------------------------------------------- 1 | // This is demo database not use in real project 2 | Table follow { 3 | following_user_id integer 4 | followed_user_id integer 5 | created_at timestamp 6 | updated_at timestamp 7 | } 8 | 9 | Table role { 10 | id integer [primary key] 11 | title varchar 12 | created_at timestamp 13 | updated_at timestamp 14 | } 15 | 16 | Table user { 17 | id integer [primary key] 18 | username varchar 19 | role_id varchar 20 | created_at timestamp 21 | updated_at timestamp 22 | } 23 | 24 | Table post { 25 | id integer [primary key] 26 | title varchar 27 | body text [note: 'Content of the post'] 28 | user_id integer 29 | cate_id integer 30 | tag_id integer 31 | status varchar 32 | created_at timestamp 33 | updated_at timestamp 34 | } 35 | 36 | Table tag { 37 | id integer [primary key] 38 | title varchar 39 | status varchar 40 | created_at timestamp 41 | updated_at timestamp 42 | } 43 | 44 | Table cate { 45 | id integer [primary key] 46 | title varchar 47 | body text [note: 'Content of the cate'] 48 | status varchar 49 | created_at timestamp 50 | updated_at timestamp 51 | } 52 | 53 | Ref: post.user_id > user.id 54 | Ref: user.id < follow.following_user_id 55 | Ref: user.id < follow.followed_user_id 56 | Ref: role.id < user.role_id 57 | Ref: cate.id < post.cate_id 58 | Ref: tag.id < post.tag_id -------------------------------------------------------------------------------- /dist/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/coms/DBML/libs/ace-config.ts: -------------------------------------------------------------------------------- 1 | import ace from 'ace-builds'; 2 | 3 | // Themes 4 | import themeMonokaiUrl from 'ace-builds/src-noconflict/theme-monokai?url'; 5 | ace.config.setModuleUrl('ace/theme/monokai', themeMonokaiUrl); 6 | 7 | import themeDraculaUrl from 'ace-builds/src-noconflict/theme-dracula?url'; 8 | ace.config.setModuleUrl('ace/theme/dracula', themeDraculaUrl); 9 | 10 | // Langs 11 | import langSqlServerUrl from 'ace-builds/src-noconflict/mode-sqlserver?url'; 12 | ace.config.setModuleUrl('ace/mode/sqlserver', langSqlServerUrl); 13 | 14 | import langSqlUrl from 'ace-builds/src-noconflict/mode-sql?url'; 15 | ace.config.setModuleUrl('ace/mode/sql', langSqlUrl); 16 | 17 | import langYaml from 'ace-builds/src-noconflict/mode-yaml?url'; 18 | ace.config.setModuleUrl('ace/mode/yaml', langYaml); 19 | 20 | import themeUrl from 'ace-builds/src-noconflict/theme-clouds?url'; 21 | ace.config.setModuleUrl('ace/theme/clouds', themeUrl); 22 | 23 | import themeChromeUrl from 'ace-builds/src-noconflict/theme-chrome?url'; 24 | ace.config.setModuleUrl('ace/theme/chrome', themeChromeUrl); 25 | 26 | import workerBaseUrl from 'ace-builds/src-noconflict/worker-base?url'; 27 | ace.config.setModuleUrl('ace/mode/base', workerBaseUrl); 28 | 29 | import workerYamlUrl from 'ace-builds/src-noconflict/worker-yaml?url'; 30 | ace.config.setModuleUrl('ace/mode/yaml_worker', workerYamlUrl); 31 | 32 | import 'ace-builds/src-noconflict/ext-language_tools'; 33 | (ace as any).require('ace/ext/language_tools'); 34 | -------------------------------------------------------------------------------- /src/libs/utils.ts: -------------------------------------------------------------------------------- 1 | export const zCopy = (dest: any, src: any) => { 2 | if (Array.isArray(dest) && Array.isArray(src)) { 3 | dest.length = src.length; 4 | for (let i = 0; i < src.length; i++) { 5 | dest[i] = src[i]; 6 | } 7 | return dest; 8 | } 9 | if (typeof dest === 'object' && typeof src === 'object' && dest && src) { 10 | Object.keys(dest).forEach((key) => delete dest[key]); 11 | Object.keys(src).forEach((key) => { 12 | dest[key] = src[key]; 13 | }); 14 | return dest; 15 | } 16 | return dest; 17 | }; 18 | 19 | export function throttle(fn: Function, timeoutMs: number, immediate: boolean = true) { 20 | let timer = 0; 21 | return function perform(...args: any[]) { 22 | if (timer) return; 23 | timer = setTimeout(() => { 24 | clearTimeout(timer); 25 | timer = 0; 26 | !immediate && fn(...args); 27 | }, timeoutMs); 28 | immediate && fn(...args); 29 | }; 30 | } 31 | 32 | export function debounce(fn: Function, timeoutMs: number, immediate: boolean = true, timeoutFn: undefined | Function = undefined) { 33 | let timer = 0; 34 | return function perform(...args: any[]) { 35 | const later = function () { 36 | clearTimeout(timer); 37 | timer = 0; 38 | if (!immediate) { 39 | fn(...args); 40 | } 41 | timeoutFn && timeoutFn(); 42 | }; 43 | !timer && immediate && fn(...args); 44 | clearTimeout(timer); 45 | timer = setTimeout(later, timeoutMs); 46 | }; 47 | } 48 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 32 | 33 | 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DBML VueJS Vue-Flow 2 | This repo is a part of project that use DBML to auto generate model, api for mikro-orm, expressjs 3 | - [Live Demo](https://vue-dbml.devseason.com) 4 | 5 | ![Project Screenshot](./public/screenshot-img.png) 6 | 7 | A simplified and open-source alternative to **dbdiagram.io**, offering powerful features for database modeling: 8 | 9 | - **DBML Editing and Saving**: Easily edit and save your database schema. 10 | - **DBML Rendering**: Visualize schemas with Vue Flow integration. 11 | - **Auto-layout**: Generate layouts automatically using Dagre with LR indexing. 12 | 13 | --- 14 | 15 | ## Todo 16 | - [x] Download: DBML, sqlite, sql 17 | - [x] Save to localstorage 18 | - [x] Load from localstorage 19 | - [ ] Multiple dbml 20 | - [ ] Publish vue-dbml component package 21 | 22 | --- 23 | 24 | ## Tools 25 | - ⚡ **Fast Development**: Built with [Vite](https://vitejs.dev/) for blazing-fast builds and optimized production workflows. 26 | - 🛠️ **Component-Based Architecture**: Modular and reusable Vue components ensure 27 | - 🚀 **State Management**: Seamless state handling using [Pinia](https://pinia.vuejs.org/). 28 | - 📦 **Modern Tooling**: Includes ESLint and Prettier to maintain clean, consistent, and error-free code. 29 | 30 | --- 31 | 32 | ## Installation 33 | 34 | 1. **Clone the Repository** 35 | Run the following commands to clone and set up the project: 36 | ```bash 37 | git clone https://github.com/rxzcode/vue-dbml.git 38 | cd vue-dbml 39 | yarn 40 | ``` 41 | 42 | 2. **Dev, Build and Preview Commands**: 43 | - `yarn dev` for local develop. 44 | - `yarn build` for building the app. 45 | - `yarn preview` for previewing the production build locally. 46 | 47 | 3. **License**: 48 | - This project is licensed under the MIT License. Please provide attribution to @rxzcode. 49 | 50 | # Extra - this repo is a module of project 51 | - ZCODE - DBML - Crud generate and sync code - low code 52 | - This use DBML, AI gen DBML, gen CODE for front end, back end (expressjs, vuejs) 53 | 54 | ![Crud Screenshot](./public/crud-dbml.png) 55 | ![Crud Screenshot](./public/crud.png) 56 | ![Form Screenshot](./public/crud-form.png) 57 | ![Setting Screenshot](./public/crud-setting.png) 58 | ![Gallery Screenshot](./public/crud-gallery.png) -------------------------------------------------------------------------------- /src/coms/DBML/libs/state.ts: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia'; 2 | import { Edge, Node, GraphNode, GraphEdge } from '@vue-flow/core/dist/types'; 3 | import { mergeWith } from 'lodash-es'; 4 | import { exporter } from '@dbml/core'; 5 | import { Sql2Sqlite } from './convertor'; 6 | import dbml from './example.dbml?raw'; 7 | interface ErdState { 8 | tables: GraphNode[]; 9 | edges: GraphEdge[]; 10 | dbmlRaw: string; 11 | extraData: any; 12 | settings: { 13 | editMode: boolean; 14 | vueFlow: { 15 | panOnDrag: boolean; 16 | panOnScroll: boolean; 17 | panOnScrollSpeed: number; 18 | }; 19 | }; 20 | } 21 | 22 | const DBML_STORAGE_KEY = 'erd-dbml-raw'; 23 | export const useErdStore = defineStore('ERD', { 24 | state: (): ErdState => ({ 25 | dbmlRaw: localStorage.getItem(DBML_STORAGE_KEY) || dbml, 26 | extraData: { 27 | nodes: {}, 28 | edges: {} 29 | }, 30 | tables: [], 31 | edges: [], 32 | settings: { 33 | editMode: false, 34 | vueFlow: { 35 | panOnDrag: false, 36 | panOnScroll: true, 37 | panOnScrollSpeed: 1.2 38 | } 39 | } 40 | }), 41 | getters: { 42 | DbmlSql(): string { 43 | const mysql = exporter.export(this.dbmlRaw, 'mysql'); 44 | return mysql; 45 | }, 46 | DbmlSqlite(): string { 47 | const mysql = exporter.export(this.dbmlRaw, 'mysql'); 48 | return Sql2Sqlite(mysql); 49 | } 50 | }, 51 | actions: { 52 | saveDbmlRaw(newDbmlRaw: string): void { 53 | this.dbmlRaw = newDbmlRaw; 54 | localStorage.setItem(DBML_STORAGE_KEY, newDbmlRaw); 55 | }, 56 | applyExtraData(nodes: Node[], edges: Edge[]): void { 57 | nodes.forEach((node: Node) => { 58 | mergeWith(node, this.extraData.nodes?.[node.id], (destValue, sourceValue, key: String, dest, source, stack: Number) => { 59 | if (Array.isArray(destValue) && Array.isArray(sourceValue)) { 60 | return destValue.concat(sourceValue); 61 | } 62 | }); 63 | }); 64 | } 65 | } 66 | }); 67 | -------------------------------------------------------------------------------- /src/coms/DBML/DbTable.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 27 | 28 | 93 | -------------------------------------------------------------------------------- /src/coms/DBML/CustomEdge.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 87 | 96 | -------------------------------------------------------------------------------- /src/coms/DBML/DbEditor.vue: -------------------------------------------------------------------------------- 1 | 66 | 67 | 93 | 94 | 127 | -------------------------------------------------------------------------------- /src/coms/DBML/libs/css/styles.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --left-panel-width: 500px; 3 | } 4 | 5 | .f-col { 6 | display: flex; 7 | flex-direction: column; 8 | } 9 | 10 | .comp-layer { 11 | will-change: transform; 12 | } 13 | 14 | * { 15 | box-sizing: border-box; 16 | } 17 | 18 | html, 19 | body, 20 | #app { 21 | overflow: hidden; 22 | margin: 0px; 23 | } 24 | 25 | #app { 26 | font-family: 'Open Sans', sans-serif; 27 | width: 100vw; 28 | height: 100vh; 29 | display: flex; 30 | flex-direction: column; 31 | } 32 | #app header { 33 | padding: 5px; 34 | background: #3f51b5; 35 | color: #ffffff; 36 | display: flex; 37 | justify-content: start; 38 | font-size: 14px; 39 | font-weight: 100; 40 | gap: 15px; 41 | } 42 | #app header .logo { 43 | color: #fff; 44 | } 45 | #app header a { 46 | color: inherit; 47 | text-decoration: none; 48 | margin: 0 12px; 49 | border-bottom: 2px solid transparent; 50 | } 51 | #app header a:hover { 52 | color: #fff; 53 | border-bottom: 2px solid #fff; 54 | } 55 | #app header .menu { 56 | cursor: pointer; 57 | font-size: 12px; 58 | display: flex; 59 | justify-content: center; 60 | align-items: center; 61 | } 62 | #app header i { 63 | font-size: x-small; 64 | margin-left: 3px; 65 | } 66 | #app .middle { 67 | position: relative; 68 | flex-grow: 1; 69 | display: flex; 70 | flex-direction: row; 71 | } 72 | #app .middle .aside-panel { 73 | width: var(--left-panel-width); 74 | background: #f7f7f7; 75 | border-right: 1px solid #ddd; 76 | color: #999; 77 | position: absolute; 78 | top: 0; 79 | bottom: 0; 80 | left: 0; 81 | overflow: hidden; 82 | } 83 | #app .middle .content { 84 | flex-grow: 1; 85 | left: var(--left-panel-width); 86 | right: 0; 87 | top: 0; 88 | bottom: 0; 89 | overflow-y: scroll; 90 | position: absolute; 91 | } 92 | 93 | button { 94 | background-color: #ffffff; 95 | padding: 10px 15px; 96 | border: none; 97 | border-radius: 5px; 98 | color: #000; 99 | letter-spacing: 1px; 100 | } 101 | .primary { 102 | background-color: #3f51b5; 103 | color: #fff; 104 | } 105 | 106 | .secondary { 107 | background-color: #2196f3; 108 | color: #fff; 109 | } 110 | 111 | body { 112 | display: block; 113 | } 114 | 115 | /* Icons */ 116 | .icon-arrow-down-circle { 117 | --un-icon: url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' width='1.2em' height='1.2em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M12 15.248q-.161 0-.298-.053t-.267-.184l-2.62-2.619q-.146-.146-.152-.344t.152-.363q.166-.166.357-.169q.192-.003.357.163L11.5 13.65V5.5q0-.213.143-.357T12 5t.357.143t.143.357v8.15l1.971-1.971q.146-.146.347-.153t.366.159q.16.165.163.354t-.162.353l-2.62 2.62q-.13.13-.267.183q-.136.053-.298.053M6.616 19q-.691 0-1.153-.462T5 17.384v-1.923q0-.213.143-.356t.357-.144t.357.144t.143.356v1.923q0 .231.192.424t.423.192h10.77q.23 0 .423-.192t.192-.424v-1.923q0-.213.143-.356t.357-.144t.357.144t.143.356v1.923q0 .691-.462 1.153T17.384 19z'/%3E%3C/svg%3E"); 118 | -webkit-mask: var(--un-icon) no-repeat; 119 | mask: var(--un-icon) no-repeat; 120 | -webkit-mask-size: 100% 100%; 121 | mask-size: 100% 100%; 122 | background-color: currentColor; 123 | color: inherit; 124 | width: 1.4em; 125 | height: 1.4em; 126 | display: inline-block; 127 | } 128 | .icon-size-fullscreen { 129 | height: 16px; 130 | width: 16px; 131 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 21 21'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='M18.5 7.5V2.522l-5.5.014m5.5-.014l-6 5.907m.5 10.092l5.5.002l-.013-5.5m.013 5.406l-6-5.907M2.5 7.5v-5H8m.5 5.929l-6-5.907M8 18.516l-5.5.007V13.5m6-1l-6 6'/%3E%3C/svg%3E"); 132 | } 133 | -------------------------------------------------------------------------------- /dist/assets/theme-dracula-2432079e.js: -------------------------------------------------------------------------------- 1 | ace.define("ace/theme/dracula-css",["require","exports","module"], function(require, exports, module){module.exports = "/*\n * Copyright \u00A9 2017 Zeno Rocha \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \u201CSoftware\u201D), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \u201CAS IS\u201D, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n.ace-dracula .ace_gutter {\n background: #282a36;\n color: rgb(144,145,148)\n}\n\n.ace-dracula .ace_print-margin {\n width: 1px;\n background: #44475a\n}\n\n.ace-dracula {\n background-color: #282a36;\n color: #f8f8f2\n}\n\n.ace-dracula .ace_cursor {\n color: #f8f8f0\n}\n\n.ace-dracula .ace_marker-layer .ace_selection {\n background: #44475a\n}\n\n.ace-dracula.ace_multiselect .ace_selection.ace_start {\n box-shadow: 0 0 3px 0px #282a36;\n border-radius: 2px\n}\n\n.ace-dracula .ace_marker-layer .ace_step {\n background: rgb(198, 219, 174)\n}\n\n.ace-dracula .ace_marker-layer .ace_bracket {\n margin: -1px 0 0 -1px;\n border: 1px solid #a29709\n}\n\n.ace-dracula .ace_marker-layer .ace_active-line {\n background: #44475a\n}\n\n.ace-dracula .ace_gutter-active-line {\n background-color: #44475a\n}\n\n.ace-dracula .ace_marker-layer .ace_selected-word {\n box-shadow: 0px 0px 0px 1px #a29709;\n border-radius: 3px;\n}\n\n.ace-dracula .ace_fold {\n background-color: #50fa7b;\n border-color: #f8f8f2\n}\n\n.ace-dracula .ace_keyword {\n color: #ff79c6\n}\n\n.ace-dracula .ace_constant.ace_language {\n color: #bd93f9\n}\n\n.ace-dracula .ace_constant.ace_numeric {\n color: #bd93f9\n}\n\n.ace-dracula .ace_constant.ace_character {\n color: #bd93f9\n}\n\n.ace-dracula .ace_constant.ace_character.ace_escape {\n color: #ff79c6\n}\n\n.ace-dracula .ace_constant.ace_other {\n color: #bd93f9\n}\n\n.ace-dracula .ace_support.ace_function {\n color: #8be9fd\n}\n\n.ace-dracula .ace_support.ace_constant {\n color: #6be5fd\n}\n\n.ace-dracula .ace_support.ace_class {\n font-style: italic;\n color: #66d9ef\n}\n\n.ace-dracula .ace_support.ace_type {\n font-style: italic;\n color: #66d9ef\n}\n\n.ace-dracula .ace_storage {\n color: #ff79c6\n}\n\n.ace-dracula .ace_storage.ace_type {\n font-style: italic;\n color: #8be9fd\n}\n\n.ace-dracula .ace_invalid {\n color: #F8F8F0;\n background-color: #ff79c6\n}\n\n.ace-dracula .ace_invalid.ace_deprecated {\n color: #F8F8F0;\n background-color: #bd93f9\n}\n\n.ace-dracula .ace_string {\n color: #f1fa8c\n}\n\n.ace-dracula .ace_comment {\n color: #6272a4\n}\n\n.ace-dracula .ace_variable {\n color: #50fa7b\n}\n\n.ace-dracula .ace_variable.ace_parameter {\n font-style: italic;\n color: #ffb86c\n}\n\n.ace-dracula .ace_entity.ace_other.ace_attribute-name {\n color: #50fa7b\n}\n\n.ace-dracula .ace_entity.ace_name.ace_function {\n color: #50fa7b\n}\n\n.ace-dracula .ace_entity.ace_name.ace_tag {\n color: #ff79c6\n}\n.ace-dracula .ace_invisible {\n color: #626680;\n}\n\n.ace-dracula .ace_indent-guide {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\n}\n\n.ace-dracula .ace_indent-guide-active {\n background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACAQMAAACjTyRkAAAABlBMVEUAAADCwsK76u2xAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjYGBoAAAAhACBGFbxzQAAAABJRU5ErkJggg==\") right repeat-y;\n}\n"; 2 | 3 | }); 4 | 5 | ace.define("ace/theme/dracula",["require","exports","module","ace/theme/dracula-css","ace/lib/dom"], function(require, exports, module){exports.isDark = true; 6 | exports.cssClass = "ace-dracula"; 7 | exports.cssText = require("./dracula-css"); 8 | exports.$selectionColorConflict = true; 9 | var dom = require("../lib/dom"); 10 | dom.importCssString(exports.cssText, exports.cssClass, false); 11 | 12 | }); (function() { 13 | ace.require(["ace/theme/dracula"], function(m) { 14 | if (typeof module == "object" && typeof exports == "object" && module) { 15 | module.exports = m; 16 | } 17 | }); 18 | })(); 19 | -------------------------------------------------------------------------------- /src/coms/DBML/DbChart.vue: -------------------------------------------------------------------------------- 1 | 98 | 99 | 118 | 119 | 156 | -------------------------------------------------------------------------------- /src/coms/DBML/libs/convertor.ts: -------------------------------------------------------------------------------- 1 | import { Edge, Node } from '@vue-flow/core/dist/types'; 2 | import Table from '@dbml/core/types/model_structure/table'; 3 | import Ref from '@dbml/core/types/model_structure/ref'; 4 | import Endpoint from '@dbml/core/types/model_structure/endpoint'; 5 | import { RawDatabase } from '@dbml/core/types/model_structure/database'; 6 | export { default as parseDBMLToJSON } from '@dbml/core/lib/parse/dbmlParser'; 7 | class ConvertorToVueFlow { 8 | private convertTable(dbmlTable: Table): Node { 9 | const fields = Object.fromEntries( 10 | dbmlTable.fields.map((dbmlField) => { 11 | const field = { ...dbmlField, tags: [] } as any; 12 | field.note = dbmlField.note ? dbmlField.note : ''; 13 | delete field.token; 14 | return [field.name, field]; 15 | }) 16 | ); 17 | 18 | return { 19 | id: this.getFullTableName((dbmlTable as any).schemaName, dbmlTable.name), 20 | label: dbmlTable.name, 21 | type: 'table', 22 | position: { x: 0, y: 0 }, 23 | draggable: true, 24 | expandParent: true, 25 | connectable: true, 26 | data: { 27 | tags: [], 28 | fields: fields, 29 | note: dbmlTable.note || '' 30 | } 31 | }; 32 | } 33 | 34 | private getFullTableName(schema: string, name: string): string { 35 | schema = schema || 'public'; 36 | return schema + '.' + name; 37 | } 38 | 39 | public convertDbmlStructToVueFlow(db: RawDatabase): [Node[], Edge[]] { 40 | this.replaceTableNameFromAlias(db); 41 | const nodes = []; 42 | const edges = []; 43 | for (const table of db.tables) { 44 | nodes.push(this.convertTable(table)); 45 | } 46 | for (let i = 0; i < db.refs.length; i++) { 47 | edges.push(this.convertRefs(db.refs[i], i)); 48 | } 49 | return [nodes, edges]; 50 | } 51 | 52 | public convertDbmlStructToVueFlowObj(db: RawDatabase): { nodes: Node[]; edges: Edge[] } { 53 | this.replaceTableNameFromAlias(db); 54 | const nodes = []; 55 | const edges = []; 56 | try { 57 | for (const table of db.tables) { 58 | nodes.push(this.convertTable(table)); 59 | } 60 | for (let i = 0; i < db.refs.length; i++) { 61 | edges.push(this.convertRefs(db.refs[i], i)); 62 | } 63 | } catch (e) { 64 | } 65 | return { nodes, edges }; 66 | } 67 | 68 | private convertRefs(ref: Ref, index: number): Edge { 69 | const [e0, e1] = ref.endpoints; 70 | return { 71 | id: `ref-${index}`, 72 | source: this.getFullTableName(e0.schemaName, e0.tableName), 73 | sourceHandle: e0.fieldNames[0], 74 | target: this.getFullTableName(e1.schemaName, e1.tableName), 75 | targetHandle: e1.fieldNames[0], 76 | label: `${e0.tableName}.${e0.fieldNames[0]} [${e0.relation}] :: ${e1.tableName}.${e1.fieldNames[0]} [${e1.relation}]`, 77 | data: { 78 | sourceRelation: e0.relation, 79 | targetRelation: e1.relation 80 | } 81 | }; 82 | } 83 | 84 | private replaceTableNameFromAlias(db: RawDatabase): void { 85 | try { 86 | db.refs.map((ref) => { 87 | ref.endpoints.map((endpoint: Endpoint) => { 88 | const name = endpoint.tableName; 89 | const alias = (db as any).aliases.find((item: any) => item.kind === 'table' && item.name === name); 90 | if (alias) { 91 | endpoint.tableName = alias.value.tableName; 92 | } 93 | }); 94 | }); 95 | } catch (e) { 96 | } 97 | } 98 | } 99 | 100 | export default new ConvertorToVueFlow(); 101 | export { ConvertorToVueFlow }; 102 | 103 | export function Sql2Sqlite(mysqlSchema: string): string { 104 | let sqliteSchema = mysqlSchema; 105 | // Replace MySQL-specific data types with SQLite-compatible types 106 | sqliteSchema = sqliteSchema.replace(/`?varchar\(\d+\)`?/gi, 'TEXT'); 107 | sqliteSchema = sqliteSchema.replace(/`?int\(\d+\)`?/gi, 'INTEGER'); 108 | sqliteSchema = sqliteSchema.replace(/`?integer`?/gi, 'INTEGER'); 109 | sqliteSchema = sqliteSchema.replace(/`?text`?/gi, 'TEXT'); 110 | sqliteSchema = sqliteSchema.replace(/`?timestamp`?/gi, 'TIMESTAMP'); 111 | // Remove MySQL-specific comments (e.g., COMMENT '...') 112 | sqliteSchema = sqliteSchema.replace(/COMMENT\s*'[^']*'/gi, ''); 113 | // Remove MySQL-specific column options (e.g., AUTO_INCREMENT, UNSIGNED) 114 | sqliteSchema = sqliteSchema.replace(/AUTO_INCREMENT|UNSIGNED/gi, ''); 115 | // Replace MySQL-specific PRIMARY KEY syntax 116 | sqliteSchema = sqliteSchema.replace(/`?PRIMARY KEY`?\s*\(([^)]+)\)/gi, 'PRIMARY KEY ($1)'); 117 | // Move FOREIGN KEY definitions into CREATE TABLE statements 118 | const foreignKeys: Record = {}; 119 | sqliteSchema = sqliteSchema.replace( 120 | /ALTER TABLE `?([\w_]+)`? ADD FOREIGN KEY \(([^)]+)\) REFERENCES `?([\w_]+)`? \(([^)]+)\);/gi, 121 | (_, table, columns, referencedTable, referencedColumns) => { 122 | if (!foreignKeys[table]) { 123 | foreignKeys[table] = []; 124 | } 125 | foreignKeys[table].push(`FOREIGN KEY (${columns}) REFERENCES ${referencedTable} (${referencedColumns})`); 126 | return ''; 127 | } 128 | ); 129 | // Insert foreign keys into their respective tables 130 | sqliteSchema = sqliteSchema.replace(/CREATE TABLE `?([\w_]+)`? \(([^)]+)\)/gi, (_, table, columns) => { 131 | const fkDefs = foreignKeys[table] ? `, ${foreignKeys[table].join(', ')}` : ''; 132 | return `CREATE TABLE ${table} (${columns}${fkDefs})`; 133 | }); 134 | // Remove any trailing commas from column definitions 135 | sqliteSchema = sqliteSchema.replace(/,\s*\)/g, ')'); 136 | // Normalize table creation syntax 137 | sqliteSchema = sqliteSchema.replace(/`/g, ''); 138 | return sqliteSchema; 139 | } 140 | -------------------------------------------------------------------------------- /dist/assets/mode-sql-7d302412.js: -------------------------------------------------------------------------------- 1 | ace.define("ace/mode/sql_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict"; 2 | var oop = require("../lib/oop"); 3 | var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; 4 | var SqlHighlightRules = function () { 5 | var keywords = ("select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|" + 6 | "when|then|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|" + 7 | "foreign|not|references|default|null|inner|cross|natural|database|drop|grant|distinct|is|in|" + 8 | "all|alter|any|array|at|authorization|between|both|cast|check|collate|column|commit|constraint|" + 9 | "cube|current|current_date|current_time|current_timestamp|current_user|describe|escape|except|" + 10 | "exists|external|extract|fetch|filter|for|full|function|global|grouping|intersect|interval|" + 11 | "into|leading|like|local|no|of|only|out|overlaps|partition|position|range|revoke|rollback|rollup|" + 12 | "row|rows|session_user|set|some|start|tablesample|time|to|trailing|truncate|unique|unknown|" + 13 | "user|using|values|window|with"); 14 | var builtinConstants = ("true|false"); 15 | var builtinFunctions = ("avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|" + 16 | "coalesce|ifnull|isnull|nvl"); 17 | var dataTypes = ("int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|" + 18 | "money|real|number|integer|string"); 19 | var keywordMapper = this.createKeywordMapper({ 20 | "support.function": builtinFunctions, 21 | "keyword": keywords, 22 | "constant.language": builtinConstants, 23 | "storage.type": dataTypes 24 | }, "identifier", true); 25 | this.$rules = { 26 | "start": [{ 27 | token: "comment", 28 | regex: "--.*$" 29 | }, { 30 | token: "comment", 31 | start: "/\\*", 32 | end: "\\*/" 33 | }, { 34 | token: "string", // " string 35 | regex: '".*?"' 36 | }, { 37 | token: "string", // ' string 38 | regex: "'.*?'" 39 | }, { 40 | token: "string", // ` string (apache drill) 41 | regex: "`.*?`" 42 | }, { 43 | token: "constant.numeric", // float 44 | regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" 45 | }, { 46 | token: keywordMapper, 47 | regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" 48 | }, { 49 | token: "keyword.operator", 50 | regex: "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|=" 51 | }, { 52 | token: "paren.lparen", 53 | regex: "[\\(]" 54 | }, { 55 | token: "paren.rparen", 56 | regex: "[\\)]" 57 | }, { 58 | token: "text", 59 | regex: "\\s+" 60 | }] 61 | }; 62 | this.normalizeRules(); 63 | }; 64 | oop.inherits(SqlHighlightRules, TextHighlightRules); 65 | exports.SqlHighlightRules = SqlHighlightRules; 66 | 67 | }); 68 | 69 | ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict"; 70 | var oop = require("../../lib/oop"); 71 | var Range = require("../../range").Range; 72 | var BaseFoldMode = require("./fold_mode").FoldMode; 73 | var FoldMode = exports.FoldMode = function (commentRegex) { 74 | if (commentRegex) { 75 | this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)); 76 | this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)); 77 | } 78 | }; 79 | oop.inherits(FoldMode, BaseFoldMode); 80 | (function () { 81 | this.foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/; 82 | this.foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/; 83 | this.singleLineBlockCommentRe = /^\s*(\/\*).*\*\/\s*$/; 84 | this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; 85 | this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; 86 | this._getFoldWidgetBase = this.getFoldWidget; 87 | this.getFoldWidget = function (session, foldStyle, row) { 88 | var line = session.getLine(row); 89 | if (this.singleLineBlockCommentRe.test(line)) { 90 | if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) 91 | return ""; 92 | } 93 | var fw = this._getFoldWidgetBase(session, foldStyle, row); 94 | if (!fw && this.startRegionRe.test(line)) 95 | return "start"; // lineCommentRegionStart 96 | return fw; 97 | }; 98 | this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) { 99 | var line = session.getLine(row); 100 | if (this.startRegionRe.test(line)) 101 | return this.getCommentRegionBlock(session, line, row); 102 | var match = line.match(this.foldingStartMarker); 103 | if (match) { 104 | var i = match.index; 105 | if (match[1]) 106 | return this.openingBracketBlock(session, match[1], row, i); 107 | var range = session.getCommentFoldRange(row, i + match[0].length, 1); 108 | if (range && !range.isMultiLine()) { 109 | if (forceMultiline) { 110 | range = this.getSectionRange(session, row); 111 | } 112 | else if (foldStyle != "all") 113 | range = null; 114 | } 115 | return range; 116 | } 117 | if (foldStyle === "markbegin") 118 | return; 119 | var match = line.match(this.foldingStopMarker); 120 | if (match) { 121 | var i = match.index + match[0].length; 122 | if (match[1]) 123 | return this.closingBracketBlock(session, match[1], row, i); 124 | return session.getCommentFoldRange(row, i, -1); 125 | } 126 | }; 127 | this.getSectionRange = function (session, row) { 128 | var line = session.getLine(row); 129 | var startIndent = line.search(/\S/); 130 | var startRow = row; 131 | var startColumn = line.length; 132 | row = row + 1; 133 | var endRow = row; 134 | var maxRow = session.getLength(); 135 | while (++row < maxRow) { 136 | line = session.getLine(row); 137 | var indent = line.search(/\S/); 138 | if (indent === -1) 139 | continue; 140 | if (startIndent > indent) 141 | break; 142 | var subRange = this.getFoldWidgetRange(session, "all", row); 143 | if (subRange) { 144 | if (subRange.start.row <= startRow) { 145 | break; 146 | } 147 | else if (subRange.isMultiLine()) { 148 | row = subRange.end.row; 149 | } 150 | else if (startIndent == indent) { 151 | break; 152 | } 153 | } 154 | endRow = row; 155 | } 156 | return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); 157 | }; 158 | this.getCommentRegionBlock = function (session, line, row) { 159 | var startColumn = line.search(/\s*$/); 160 | var maxRow = session.getLength(); 161 | var startRow = row; 162 | var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; 163 | var depth = 1; 164 | while (++row < maxRow) { 165 | line = session.getLine(row); 166 | var m = re.exec(line); 167 | if (!m) 168 | continue; 169 | if (m[1]) 170 | depth--; 171 | else 172 | depth++; 173 | if (!depth) 174 | break; 175 | } 176 | var endRow = row; 177 | if (endRow > startRow) { 178 | return new Range(startRow, startColumn, endRow, line.length); 179 | } 180 | }; 181 | }).call(FoldMode.prototype); 182 | 183 | }); 184 | 185 | ace.define("ace/mode/folding/sql",["require","exports","module","ace/lib/oop","ace/mode/folding/cstyle"], function(require, exports, module){"use strict"; 186 | var oop = require("../../lib/oop"); 187 | var BaseFoldMode = require("./cstyle").FoldMode; 188 | var FoldMode = exports.FoldMode = function () { }; 189 | oop.inherits(FoldMode, BaseFoldMode); 190 | (function () { 191 | }).call(FoldMode.prototype); 192 | 193 | }); 194 | 195 | ace.define("ace/mode/sql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sql_highlight_rules","ace/mode/folding/sql"], function(require, exports, module){"use strict"; 196 | var oop = require("../lib/oop"); 197 | var TextMode = require("./text").Mode; 198 | var SqlHighlightRules = require("./sql_highlight_rules").SqlHighlightRules; 199 | var SqlFoldMode = require("./folding/sql").FoldMode; 200 | var Mode = function () { 201 | this.HighlightRules = SqlHighlightRules; 202 | this.foldingRules = new SqlFoldMode(); 203 | this.$behaviour = this.$defaultBehaviour; 204 | }; 205 | oop.inherits(Mode, TextMode); 206 | (function () { 207 | this.lineCommentStart = "--"; 208 | this.blockComment = { start: "/*", end: "*/" }; 209 | this.$id = "ace/mode/sql"; 210 | this.snippetFileId = "ace/snippets/sql"; 211 | }).call(Mode.prototype); 212 | exports.Mode = Mode; 213 | 214 | }); (function() { 215 | ace.require(["ace/mode/sql"], function(m) { 216 | if (typeof module == "object" && typeof exports == "object" && module) { 217 | module.exports = m; 218 | } 219 | }); 220 | })(); 221 | -------------------------------------------------------------------------------- /dist/assets/ViewPage-f805070e.css: -------------------------------------------------------------------------------- 1 | [data-v-ebd412fc]:root{--vf-handle: #ccc}.vue-flow__handle[data-v-ebd412fc]{opacity:0;width:10px;height:10px;border:4px solid #fff;top:50%;left:50%;transform:translate(-50%,-50%)}.selected>.db-table[data-v-ebd412fc]{outline:1px solid #839fd2}.db-table[data-v-ebd412fc]{color:#6f6f6f;min-width:160px;background:#fcfcfc;font-size:12px;border:1px solid #fff;border-radius:2px}.db-table .title[data-v-ebd412fc]{padding:4px 8px;font-size:14px;background:#3F51B5;color:#f3f3f3;font-weight:700;cursor:move;border-radius:3px 3px 0 0}.db-table:hover .title[data-v-ebd412fc]{color:#fff}.db-table .field[data-v-ebd412fc]{margin:0;padding:4px 8px;position:relative;background:#f2f2f2;border-top:1px solid #fff;display:flex;flex-direction:row;justify-content:space-between;align-items:center}.db-table .field .type[data-v-ebd412fc]{color:#ccc;font-size:10px;padding:0 0 0 8px;margin-left:auto}.db-table .field[data-v-ebd412fc]:hover{color:#555;background:#d8e7f3}.edit-mode .field:hover .vue-flow__handle[data-v-ebd412fc]{opacity:1}vue-flow__node{cursor:default}.vue-flow__node-group{display:flex}.db-group{text-align:center;color:#ccc;background:rgba(98,255,66,.1);flex-grow:1}.vue-flow__controls{box-shadow:0 0 2px 1px #00000014}.vue-flow__controls-button{background:#fefefe;border:none;border-bottom:1px solid #eee;box-sizing:content-box;display:flex;justify-content:center;align-items:center;width:16px;height:16px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:5px}.vue-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.vue-flow__controls-button:hover{background:#f4f4f4}.vue-flow__controls-button:disabled{pointer-events:none}.vue-flow__controls-button:disabled svg{fill-opacity:.4}.control-panel{position:absolute;z-index:1;padding:10px;left:10px;top:10px;border-radius:8px}.control-btn{cursor:pointer;padding:5px 10px;background-color:#fff;box-shadow:0 0 1px 1px #0003;border-radius:5px;font-size:12px;opacity:.8}.vue-flow__edge-path{stroke:#7cadd5}.vue-flow__controls{opacity:.5}.vue-flow__edge-textwrapper{opacity:.3}.isScrollPane .vue-flow__nodes,.isScrollPane .db-table{pointer-events:none!important}.vue-flow{position:relative;width:100%;height:100%;overflow:hidden;z-index:0}.vue-flow__container{position:absolute;height:100%;width:100%;left:0;top:0}.vue-flow__pane{z-index:1}.vue-flow__pane.draggable{cursor:grab}.vue-flow__pane.dragging{cursor:grabbing}.vue-flow__pane.selection{cursor:pointer}.vue-flow__transformationpane{transform-origin:0 0;z-index:2;pointer-events:none}.vue-flow__viewport{z-index:4}.vue-flow__selection{z-index:6}.vue-flow__edge-labels{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible{outline:none}.vue-flow .vue-flow__edges{pointer-events:none;overflow:visible}.vue-flow__edge-path,.vue-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.vue-flow__edge{pointer-events:visibleStroke;cursor:pointer}.vue-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__edge.animated path.vue-flow__edge-interaction{stroke-dasharray:none;animation:none}.vue-flow__edge.inactive{pointer-events:none}.vue-flow__edge.selected,.vue-flow__edge:focus,.vue-flow__edge:focus-visible{outline:none}.vue-flow__edge.selected .vue-flow__edge-path,.vue-flow__edge:focus .vue-flow__edge-path,.vue-flow__edge:focus-visible .vue-flow__edge-path{stroke:#555}.vue-flow__edge-textwrapper{pointer-events:all}.vue-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__connection{pointer-events:none}.vue-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__connectionline{z-index:1001}.vue-flow__nodes{pointer-events:none;transform-origin:0 0}.vue-flow__node-default,.vue-flow__node-input,.vue-flow__node-output{border-width:1px;border-style:solid;border-color:#bbb}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible,.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible,.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid #555}.vue-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:grab}.vue-flow__node.dragging{cursor:grabbing}.vue-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.vue-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.vue-flow__nodesselection-rect.dragging{cursor:grabbing}.vue-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px}.vue-flow__handle.connectable{pointer-events:all;cursor:crosshair}.vue-flow__handle-bottom{top:auto;left:50%;bottom:-4px;transform:translate(-50%)}.vue-flow__handle-top{left:50%;top:-4px;transform:translate(-50%)}.vue-flow__handle-left{top:50%;left:-4px;transform:translateY(-50%)}.vue-flow__handle-right{right:-4px;top:50%;transform:translateY(-50%)}.vue-flow__edgeupdater{cursor:move;pointer-events:all}.vue-flow__panel{position:absolute;z-index:5;margin:15px}.vue-flow__panel.top{top:0}.vue-flow__panel.bottom{bottom:0}.vue-flow__panel.left{left:0}.vue-flow__panel.right{right:0}.vue-flow__panel.center{left:50%;transform:translate(-50%)}@keyframes dashdraw{0%{stroke-dashoffset:10}}:root{--vf-node-bg: #fff;--vf-node-text: #222;--vf-connection-path: #b1b1b7;--vf-handle: #555}.vue-flow__edge.updating .vue-flow__edge-path{stroke:#777}.vue-flow__edge-text{font-size:10px}.vue-flow__edge-textbg{fill:#fff}.vue-flow__connection-path{stroke:var(--vf-connection-path)}.vue-flow__node{cursor:grab}.vue-flow__node.selectable:focus,.vue-flow__node.selectable:focus-visible{outline:none}.vue-flow__node-default,.vue-flow__node-input,.vue-flow__node-output{padding:10px;border-radius:3px;width:150px;font-size:12px;text-align:center;border-width:1px;border-style:solid;color:var(--vf-node-text);background-color:var(--vf-node-bg);border-color:var(--vf-node-color)}.vue-flow__node-default.selected,.vue-flow__node-default.selected:hover,.vue-flow__node-input.selected,.vue-flow__node-input.selected:hover,.vue-flow__node-output.selected,.vue-flow__node-output.selected:hover{box-shadow:0 0 0 .5px var(--vf-box-shadow)}.vue-flow__node-default .vue-flow__handle,.vue-flow__node-input .vue-flow__handle,.vue-flow__node-output .vue-flow__handle{background:var(--vf-handle)}.vue-flow__node-default.selectable:hover,.vue-flow__node-input.selectable:hover,.vue-flow__node-output.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.vue-flow__node-input{--vf-node-color: var(--vf-node-color, #0041d0);--vf-handle: var(--vf-node-color, #0041d0);--vf-box-shadow: var(--vf-node-color, #0041d0);background:var(--vf-node-bg);border-color:var(--vf-node-color, #0041d0)}.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible{outline:none;border:1px solid var(--vf-node-color, #0041d0)}.vue-flow__node-default{--vf-handle: var(--vf-node-color, #1a192b);--vf-box-shadow: var(--vf-node-color, #1a192b);background:var(--vf-node-bg);border-color:var(--vf-node-color, #1a192b)}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible{outline:none;border:1px solid var(--vf-node-color, #1a192b)}.vue-flow__node-output{--vf-handle: var(--vf-node-color, #ff0072);--vf-box-shadow: var(--vf-node-color, #ff0072);background:var(--vf-node-bg);border-color:var(--vf-node-color, #ff0072)}.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid var(--vf-node-color, #ff0072)}.vue-flow__nodesselection-rect,.vue-flow__selection{background:rgba(0,89,220,.08);border:1px dotted rgba(0,89,220,.8)}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible,.vue-flow__selection:focus,.vue-flow__selection:focus-visible{outline:none}.vue-flow__handle{width:6px;height:6px;background:var(--vf-handle);border:1px solid #fff;border-radius:100%}:root{--left-panel-width: 500px}.f-col{display:flex;flex-direction:column}.comp-layer{will-change:transform}*{box-sizing:border-box}html,body,#app{overflow:hidden;margin:0}#app{font-family:Open Sans,sans-serif;width:100vw;height:100vh;display:flex;flex-direction:column}#app header{padding:5px;background:#3f51b5;color:#fff;display:flex;justify-content:start;font-size:14px;font-weight:100;gap:15px}#app header .logo{color:#fff}#app header a{color:inherit;text-decoration:none;margin:0 12px;border-bottom:2px solid transparent}#app header a:hover{color:#fff;border-bottom:2px solid #fff}#app header .menu{cursor:pointer;font-size:12px;display:flex;justify-content:center;align-items:center}#app header i{font-size:x-small;margin-left:3px}#app .middle{position:relative;flex-grow:1;display:flex;flex-direction:row}#app .middle .aside-panel{width:var(--left-panel-width);background:#f7f7f7;border-right:1px solid #ddd;color:#999;position:absolute;top:0;bottom:0;left:0;overflow:hidden}#app .middle .content{flex-grow:1;left:var(--left-panel-width);right:0;top:0;bottom:0;overflow-y:scroll;position:absolute}button{background-color:#fff;padding:10px 15px;border:none;border-radius:5px;color:#000;letter-spacing:1px}.primary{background-color:#3f51b5;color:#fff}.secondary{background-color:#2196f3;color:#fff}body{display:block}.icon-arrow-down-circle{--un-icon: url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' width='1.2em' height='1.2em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M12 15.248q-.161 0-.298-.053t-.267-.184l-2.62-2.619q-.146-.146-.152-.344t.152-.363q.166-.166.357-.169q.192-.003.357.163L11.5 13.65V5.5q0-.213.143-.357T12 5t.357.143t.143.357v8.15l1.971-1.971q.146-.146.347-.153t.366.159q.16.165.163.354t-.162.353l-2.62 2.62q-.13.13-.267.183q-.136.053-.298.053M6.616 19q-.691 0-1.153-.462T5 17.384v-1.923q0-.213.143-.356t.357-.144t.357.144t.143.356v1.923q0 .231.192.424t.423.192h10.77q.23 0 .423-.192t.192-.424v-1.923q0-.213.143-.356t.357-.144t.357.144t.143.356v1.923q0 .691-.462 1.153T17.384 19z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;width:1.4em;height:1.4em;display:inline-block}.icon-size-fullscreen{height:16px;width:16px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 21 21'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='M18.5 7.5V2.522l-5.5.014m5.5-.014l-6 5.907m.5 10.092l5.5.002l-.013-5.5m.013 5.406l-6-5.907M2.5 7.5v-5H8m.5 5.929l-6-5.907M8 18.516l-5.5.007V13.5m6-1l-6 6'/%3E%3C/svg%3E")}.aside-panel{overflow-y:auto}.aside-panel .widget{border-bottom:1px solid #eee;padding:4px}.aside-panel .widget .w-title{cursor:pointer;padding:8px;margin:0;font-size:14px}.panel-btns{display:flex;flex-direction:row;padding:5px;gap:5px;width:100%;background-color:#202020}.dbml-editor,.yaml-editor{width:100%;height:100%}#erd-container{flex-grow:1} 2 | -------------------------------------------------------------------------------- /dist/assets/mode-yaml-202fbe23.js: -------------------------------------------------------------------------------- 1 | ace.define("ace/mode/yaml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict"; 2 | var oop = require("../lib/oop"); 3 | var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; 4 | var YamlHighlightRules = function () { 5 | this.$rules = { 6 | "start": [ 7 | { 8 | token: "comment", 9 | regex: "#.*$" 10 | }, { 11 | token: "list.markup", 12 | regex: /^(?:-{3}|\.{3})\s*(?=#|$)/ 13 | }, { 14 | token: "list.markup", 15 | regex: /^\s*[\-?](?:$|\s)/ 16 | }, { 17 | token: "constant", 18 | regex: "!![\\w//]+" 19 | }, { 20 | token: "constant.language", 21 | regex: "[&\\*][a-zA-Z0-9-_]+" 22 | }, { 23 | token: ["meta.tag", "keyword"], 24 | regex: /^(\s*\w[^\s:]*?)(:(?=\s|$))/ 25 | }, { 26 | token: ["meta.tag", "keyword"], 27 | regex: /(\w[^\s:]*?)(\s*:(?=\s|$))/ 28 | }, { 29 | token: "keyword.operator", 30 | regex: "<<\\w*:\\w*" 31 | }, { 32 | token: "keyword.operator", 33 | regex: "-\\s*(?=[{])" 34 | }, { 35 | token: "string", // single line 36 | regex: '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' 37 | }, { 38 | token: "string", // multi line string start 39 | regex: /[|>][-+\d]*(?:$|\s+(?:$|#))/, 40 | onMatch: function (val, state, stack, line) { 41 | line = line.replace(/ #.*/, ""); 42 | var indent = /^ *((:\s*)?-(\s*[^|>])?)?/.exec(line)[0] 43 | .replace(/\S\s*$/, "").length; 44 | var indentationIndicator = parseInt(/\d+[\s+-]*$/.exec(line)); 45 | if (indentationIndicator) { 46 | indent += indentationIndicator - 1; 47 | this.next = "mlString"; 48 | } 49 | else { 50 | this.next = "mlStringPre"; 51 | } 52 | if (!stack.length) { 53 | stack.push(this.next); 54 | stack.push(indent); 55 | } 56 | else { 57 | stack[0] = this.next; 58 | stack[1] = indent; 59 | } 60 | return this.token; 61 | }, 62 | next: "mlString" 63 | }, { 64 | token: "string", // single quoted string 65 | regex: "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" 66 | }, { 67 | token: "constant.numeric", // float 68 | regex: /(\b|[+\-\.])[\d_]+(?:(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)(?=[^\d-\w]|$)$/ 69 | }, { 70 | token: "constant.numeric", // other number 71 | regex: /[+\-]?\.inf\b|NaN\b|0x[\dA-Fa-f_]+|0b[10_]+/ 72 | }, { 73 | token: "constant.language.boolean", 74 | regex: "\\b(?:true|false|TRUE|FALSE|True|False|yes|no)\\b" 75 | }, { 76 | token: "paren.lparen", 77 | regex: "[[({]" 78 | }, { 79 | token: "paren.rparen", 80 | regex: "[\\])}]" 81 | }, { 82 | token: "text", 83 | regex: /[^\s,:\[\]\{\}]+/ 84 | } 85 | ], 86 | "mlStringPre": [ 87 | { 88 | token: "indent", 89 | regex: /^ *$/ 90 | }, { 91 | token: "indent", 92 | regex: /^ */, 93 | onMatch: function (val, state, stack) { 94 | var curIndent = stack[1]; 95 | if (curIndent >= val.length) { 96 | this.next = "start"; 97 | stack.shift(); 98 | stack.shift(); 99 | } 100 | else { 101 | stack[1] = val.length - 1; 102 | this.next = stack[0] = "mlString"; 103 | } 104 | return this.token; 105 | }, 106 | next: "mlString" 107 | }, { 108 | defaultToken: "string" 109 | } 110 | ], 111 | "mlString": [ 112 | { 113 | token: "indent", 114 | regex: /^ *$/ 115 | }, { 116 | token: "indent", 117 | regex: /^ */, 118 | onMatch: function (val, state, stack) { 119 | var curIndent = stack[1]; 120 | if (curIndent >= val.length) { 121 | this.next = "start"; 122 | stack.splice(0); 123 | } 124 | else { 125 | this.next = "mlString"; 126 | } 127 | return this.token; 128 | }, 129 | next: "mlString" 130 | }, { 131 | token: "string", 132 | regex: '.+' 133 | } 134 | ] 135 | }; 136 | this.normalizeRules(); 137 | }; 138 | oop.inherits(YamlHighlightRules, TextHighlightRules); 139 | exports.YamlHighlightRules = YamlHighlightRules; 140 | 141 | }); 142 | 143 | ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; 144 | var Range = require("../range").Range; 145 | var MatchingBraceOutdent = function () { }; 146 | (function () { 147 | this.checkOutdent = function (line, input) { 148 | if (!/^\s+$/.test(line)) 149 | return false; 150 | return /^\s*\}/.test(input); 151 | }; 152 | this.autoOutdent = function (doc, row) { 153 | var line = doc.getLine(row); 154 | var match = line.match(/^(\s*\})/); 155 | if (!match) 156 | return 0; 157 | var column = match[1].length; 158 | var openBracePos = doc.findMatchingBracket({ row: row, column: column }); 159 | if (!openBracePos || openBracePos.row == row) 160 | return 0; 161 | var indent = this.$getIndent(doc.getLine(openBracePos.row)); 162 | doc.replace(new Range(row, 0, row, column - 1), indent); 163 | }; 164 | this.$getIndent = function (line) { 165 | return line.match(/^\s*/)[0]; 166 | }; 167 | }).call(MatchingBraceOutdent.prototype); 168 | exports.MatchingBraceOutdent = MatchingBraceOutdent; 169 | 170 | }); 171 | 172 | ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module){"use strict"; 173 | var oop = require("../../lib/oop"); 174 | var BaseFoldMode = require("./fold_mode").FoldMode; 175 | var Range = require("../../range").Range; 176 | var FoldMode = exports.FoldMode = function () { }; 177 | oop.inherits(FoldMode, BaseFoldMode); 178 | (function () { 179 | this.commentBlock = function (session, row) { 180 | var re = /\S/; 181 | var line = session.getLine(row); 182 | var startLevel = line.search(re); 183 | if (startLevel == -1 || line[startLevel] != "#") 184 | return; 185 | var startColumn = line.length; 186 | var maxRow = session.getLength(); 187 | var startRow = row; 188 | var endRow = row; 189 | while (++row < maxRow) { 190 | line = session.getLine(row); 191 | var level = line.search(re); 192 | if (level == -1) 193 | continue; 194 | if (line[level] != "#") 195 | break; 196 | endRow = row; 197 | } 198 | if (endRow > startRow) { 199 | var endColumn = session.getLine(endRow).length; 200 | return new Range(startRow, startColumn, endRow, endColumn); 201 | } 202 | }; 203 | this.getFoldWidgetRange = function (session, foldStyle, row) { 204 | var range = this.indentationBlock(session, row); 205 | if (range) 206 | return range; 207 | range = this.commentBlock(session, row); 208 | if (range) 209 | return range; 210 | }; 211 | this.getFoldWidget = function (session, foldStyle, row) { 212 | var line = session.getLine(row); 213 | var indent = line.search(/\S/); 214 | var next = session.getLine(row + 1); 215 | var prev = session.getLine(row - 1); 216 | var prevIndent = prev.search(/\S/); 217 | var nextIndent = next.search(/\S/); 218 | if (indent == -1) { 219 | session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? "start" : ""; 220 | return ""; 221 | } 222 | if (prevIndent == -1) { 223 | if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { 224 | session.foldWidgets[row - 1] = ""; 225 | session.foldWidgets[row + 1] = ""; 226 | return "start"; 227 | } 228 | } 229 | else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { 230 | if (session.getLine(row - 2).search(/\S/) == -1) { 231 | session.foldWidgets[row - 1] = "start"; 232 | session.foldWidgets[row + 1] = ""; 233 | return ""; 234 | } 235 | } 236 | if (prevIndent != -1 && prevIndent < indent) 237 | session.foldWidgets[row - 1] = "start"; 238 | else 239 | session.foldWidgets[row - 1] = ""; 240 | if (indent < nextIndent) 241 | return "start"; 242 | else 243 | return ""; 244 | }; 245 | }).call(FoldMode.prototype); 246 | 247 | }); 248 | 249 | ace.define("ace/mode/folding/yaml",["require","exports","module","ace/lib/oop","ace/mode/folding/coffee","ace/range"], function(require, exports, module){"use strict"; 250 | var oop = require("../../lib/oop"); 251 | var CoffeeFoldMode = require("./coffee").FoldMode; 252 | var Range = require("../../range").Range; 253 | var FoldMode = exports.FoldMode = function () { }; 254 | oop.inherits(FoldMode, CoffeeFoldMode); 255 | (function () { 256 | this.getFoldWidgetRange = function (session, foldStyle, row) { 257 | var re = /\S/; 258 | var line = session.getLine(row); 259 | var startLevel = line.search(re); 260 | var isCommentFold = line[startLevel] === "#"; 261 | var isDashFold = line[startLevel] === "-"; 262 | if (startLevel == -1) 263 | return; 264 | var startColumn = line.length; 265 | var maxRow = session.getLength(); 266 | var startRow = row; 267 | var endRow = row; 268 | if (isCommentFold) { 269 | var range = this.commentBlock(session, row); 270 | if (range) 271 | return range; 272 | } 273 | else if (isDashFold) { 274 | var range = this.indentationBlock(session, row); 275 | if (range) 276 | return range; 277 | } 278 | else { 279 | while (++row < maxRow) { 280 | var line = session.getLine(row); 281 | var level = line.search(re); 282 | if (level == -1) 283 | continue; 284 | if (level <= startLevel && line[startLevel] !== '-') { 285 | var token = session.getTokenAt(row, 0); 286 | if (!token || token.type !== "string") 287 | break; 288 | } 289 | endRow = row; 290 | } 291 | } 292 | if (endRow > startRow) { 293 | var endColumn = session.getLine(endRow).length; 294 | return new Range(startRow, startColumn, endRow, endColumn); 295 | } 296 | }; 297 | this.getFoldWidget = function (session, foldStyle, row) { 298 | var line = session.getLine(row); 299 | var indent = line.search(/\S/); 300 | var next = session.getLine(row + 1); 301 | var prev = session.getLine(row - 1); 302 | var prevIndent = prev.search(/\S/); 303 | var nextIndent = next.search(/\S/); 304 | var lineStartsWithDash = line[indent] === '-'; 305 | if (indent == -1) { 306 | session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? "start" : ""; 307 | return ""; 308 | } 309 | if (prevIndent == -1) { 310 | if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { 311 | session.foldWidgets[row - 1] = ""; 312 | session.foldWidgets[row + 1] = ""; 313 | return "start"; 314 | } 315 | } 316 | else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { 317 | if (session.getLine(row - 2).search(/\S/) == -1) { 318 | session.foldWidgets[row - 1] = "start"; 319 | session.foldWidgets[row + 1] = ""; 320 | return ""; 321 | } 322 | } 323 | if (prevIndent != -1 && prevIndent < indent) { 324 | session.foldWidgets[row - 1] = "start"; 325 | } 326 | else if (prevIndent != -1 && (prevIndent == indent && lineStartsWithDash)) { 327 | session.foldWidgets[row - 1] = "start"; 328 | } 329 | else { 330 | session.foldWidgets[row - 1] = ""; 331 | } 332 | if (indent < nextIndent) 333 | return "start"; 334 | else 335 | return ""; 336 | }; 337 | }).call(FoldMode.prototype); 338 | 339 | }); 340 | 341 | ace.define("ace/mode/yaml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/yaml_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/yaml","ace/worker/worker_client"], function(require, exports, module){"use strict"; 342 | var oop = require("../lib/oop"); 343 | var TextMode = require("./text").Mode; 344 | var YamlHighlightRules = require("./yaml_highlight_rules").YamlHighlightRules; 345 | var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; 346 | var FoldMode = require("./folding/yaml").FoldMode; 347 | var WorkerClient = require("../worker/worker_client").WorkerClient; 348 | var Mode = function () { 349 | this.HighlightRules = YamlHighlightRules; 350 | this.$outdent = new MatchingBraceOutdent(); 351 | this.foldingRules = new FoldMode(); 352 | this.$behaviour = this.$defaultBehaviour; 353 | }; 354 | oop.inherits(Mode, TextMode); 355 | (function () { 356 | this.lineCommentStart = ["#"]; 357 | this.getNextLineIndent = function (state, line, tab) { 358 | var indent = this.$getIndent(line); 359 | if (state == "start") { 360 | var match = line.match(/^.*[\{\(\[]\s*$/); 361 | if (match) { 362 | indent += tab; 363 | } 364 | } 365 | return indent; 366 | }; 367 | this.checkOutdent = function (state, line, input) { 368 | return this.$outdent.checkOutdent(line, input); 369 | }; 370 | this.autoOutdent = function (state, doc, row) { 371 | this.$outdent.autoOutdent(doc, row); 372 | }; 373 | this.createWorker = function (session) { 374 | var worker = new WorkerClient(["ace"], "ace/mode/yaml_worker", "YamlWorker"); 375 | worker.attachToDocument(session.getDocument()); 376 | worker.on("annotate", function (results) { 377 | session.setAnnotations(results.data); 378 | }); 379 | worker.on("terminate", function () { 380 | session.clearAnnotations(); 381 | }); 382 | return worker; 383 | }; 384 | this.$id = "ace/mode/yaml"; 385 | }).call(Mode.prototype); 386 | exports.Mode = Mode; 387 | 388 | }); (function() { 389 | ace.require(["ace/mode/yaml"], function(m) { 390 | if (typeof module == "object" && typeof exports == "object" && module) { 391 | module.exports = m; 392 | } 393 | }); 394 | })(); 395 | -------------------------------------------------------------------------------- /dist/assets/mode-sqlserver-88765fda.js: -------------------------------------------------------------------------------- 1 | ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict"; 2 | var oop = require("../lib/oop"); 3 | var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; 4 | var DocCommentHighlightRules = function () { 5 | this.$rules = { 6 | "start": [ 7 | { 8 | token: "comment.doc.tag", 9 | regex: "@\\w+(?=\\s|$)" 10 | }, DocCommentHighlightRules.getTagRule(), { 11 | defaultToken: "comment.doc.body", 12 | caseInsensitive: true 13 | } 14 | ] 15 | }; 16 | }; 17 | oop.inherits(DocCommentHighlightRules, TextHighlightRules); 18 | DocCommentHighlightRules.getTagRule = function (start) { 19 | return { 20 | token: "comment.doc.tag.storage.type", 21 | regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b" 22 | }; 23 | }; 24 | DocCommentHighlightRules.getStartRule = function (start) { 25 | return { 26 | token: "comment.doc", // doc comment 27 | regex: /\/\*\*(?!\/)/, 28 | next: start 29 | }; 30 | }; 31 | DocCommentHighlightRules.getEndRule = function (start) { 32 | return { 33 | token: "comment.doc", // closing comment 34 | regex: "\\*\\/", 35 | next: start 36 | }; 37 | }; 38 | exports.DocCommentHighlightRules = DocCommentHighlightRules; 39 | 40 | }); 41 | 42 | ace.define("ace/mode/sqlserver_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict"; 43 | var oop = require("../lib/oop"); 44 | var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; 45 | var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; 46 | var SqlServerHighlightRules = function () { 47 | var logicalOperators = "ALL|AND|ANY|BETWEEN|EXISTS|IN|LIKE|NOT|OR|SOME"; 48 | logicalOperators += "|NULL|IS|APPLY|INNER|OUTER|LEFT|RIGHT|JOIN|CROSS"; //SSMS colors these gray too 49 | var builtinFunctions = ( 50 | "OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|" + 51 | "AVG|CHECKSUM_AGG|COUNT|COUNT_BIG|GROUPING|GROUPING_ID|MAX|MIN|STDEV|STDEVP|SUM|VAR|VARP|" + 52 | "DENSE_RANK|NTILE|RANK|ROW_NUMBER" + 53 | "@@DATEFIRST|@@DBTS|@@LANGID|@@LANGUAGE|@@LOCK_TIMEOUT|@@MAX_CONNECTIONS|@@MAX_PRECISION|@@NESTLEVEL|@@OPTIONS|@@REMSERVER|@@SERVERNAME|@@SERVICENAME|@@SPID|@@TEXTSIZE|@@VERSION|" + 54 | "CAST|CONVERT|PARSE|TRY_CAST|TRY_CONVERT|TRY_PARSE" + 55 | "@@CURSOR_ROWS|@@FETCH_STATUS|CURSOR_STATUS|" + 56 | "@@DATEFIRST|@@LANGUAGE|CURRENT_TIMESTAMP|DATEADD|DATEDIFF|DATEFROMPARTS|DATENAME|DATEPART|DATETIME2FROMPARTS|DATETIMEFROMPARTS|DATETIMEOFFSETFROMPARTS|DAY|EOMONTH|GETDATE|GETUTCDATE|ISDATE|MONTH|SET DATEFIRST|SET DATEFORMAT|SET LANGUAGE|SMALLDATETIMEFROMPARTS|SP_HELPLANGUAGE|SWITCHOFFSET|SYSDATETIME|SYSDATETIMEOFFSET|SYSUTCDATETIME|TIMEFROMPARTS|TODATETIMEOFFSET|YEAR|DATETRUNC|" + 57 | "CHOOSE|IIF|" + 58 | "ABS|ACOS|ASIN|ATAN|ATN2|CEILING|COS|COT|DEGREES|EXP|FLOOR|LOG|LOG10|PI|POWER|RADIANS|RAND|ROUND|SIGN|SIN|SQRT|SQUARE|TAN|" + 59 | "@@PROCID|APPLOCK_MODE|APPLOCK_TEST|APP_NAME|ASSEMBLYPROPERTY|COLUMNPROPERTY|COL_LENGTH|COL_NAME|DATABASEPROPERTYEX|DATABASE_PRINCIPAL_ID|DB_ID|DB_NAME|FILEGROUPPROPERTY|FILEGROUP_ID|FILEGROUP_NAME|FILEPROPERTY|FILE_ID|FILE_IDEX|FILE_NAME|FULLTEXTCATALOGPROPERTY|FULLTEXTSERVICEPROPERTY|INDEXKEY_PROPERTY|INDEXPROPERTY|INDEX_COL|OBJECTPROPERTY|OBJECTPROPERTYEX|OBJECT_DEFINITION|OBJECT_ID|OBJECT_NAME|OBJECT_SCHEMA_NAME|ORIGINAL_DB_NAME|PARSENAME|SCHEMA_ID|SCHEMA_NAME|SCOPE_IDENTITY|SERVERPROPERTY|STATS_DATE|TYPEPROPERTY|TYPE_ID|TYPE_NAME|" + 60 | "CERTENCODED|CERTPRIVATEKEY|CURRENT_USER|DATABASE_PRINCIPAL_ID|HAS_PERMS_BY_NAME|IS_MEMBER|IS_ROLEMEMBER|IS_SRVROLEMEMBER|ORIGINAL_LOGIN|PERMISSIONS|PWDCOMPARE|PWDENCRYPT|SCHEMA_ID|SCHEMA_NAME|SESSION_USER|SUSER_ID|SUSER_NAME|SUSER_SID|SUSER_SNAME|SYS.FN_BUILTIN_PERMISSIONS|SYS.FN_GET_AUDIT_FILE|SYS.FN_MY_PERMISSIONS|SYSTEM_USER|USER_ID|USER_NAME|" + 61 | "ASCII|CHAR|CHARINDEX|CONCAT|DIFFERENCE|FORMAT|LEN|LOWER|LTRIM|NCHAR|PATINDEX|QUOTENAME|REPLACE|REPLICATE|REVERSE|RTRIM|SOUNDEX|SPACE|STR|STUFF|SUBSTRING|UNICODE|UPPER|" + 62 | "$PARTITION|@@ERROR|@@IDENTITY|@@PACK_RECEIVED|@@ROWCOUNT|@@TRANCOUNT|BINARY_CHECKSUM|CHECKSUM|CONNECTIONPROPERTY|CONTEXT_INFO|CURRENT_REQUEST_ID|ERROR_LINE|ERROR_MESSAGE|ERROR_NUMBER|ERROR_PROCEDURE|ERROR_SEVERITY|ERROR_STATE|FORMATMESSAGE|GETANSINULL|GET_FILESTREAM_TRANSACTION_CONTEXT|HOST_ID|HOST_NAME|ISNULL|ISNUMERIC|MIN_ACTIVE_ROWVERSION|NEWID|NEWSEQUENTIALID|ROWCOUNT_BIG|XACT_STATE|" + 63 | "@@CONNECTIONS|@@CPU_BUSY|@@IDLE|@@IO_BUSY|@@PACKET_ERRORS|@@PACK_RECEIVED|@@PACK_SENT|@@TIMETICKS|@@TOTAL_ERRORS|@@TOTAL_READ|@@TOTAL_WRITE|FN_VIRTUALFILESTATS|" + 64 | "PATINDEX|TEXTPTR|TEXTVALID|" + 65 | "GREATEST|LEAST|" + 66 | "GENERATE_SERIES|DATE_BUCKET|" + 67 | "JSON_ARRAY|JSON_OBJECT|JSON_PATH_EXISTS|ISJSON|" + 68 | "FIRST_VALUE|LAST_VALUE|" + 69 | "COALESCE|NULLIF"); 70 | var dataTypes = ("BIGINT|BINARY|BIT|CHAR|CURSOR|DATE|DATETIME|DATETIME2|DATETIMEOFFSET|DECIMAL|FLOAT|HIERARCHYID|IMAGE|INTEGER|INT|MONEY|NCHAR|NTEXT|NUMERIC|NVARCHAR|REAL|SMALLDATETIME|SMALLINT|SMALLMONEY|SQL_VARIANT|TABLE|TEXT|TIME|TIMESTAMP|TINYINT|UNIQUEIDENTIFIER|VARBINARY|VARCHAR|XML"); 71 | var builtInStoredProcedures = "sp_addextendedproc|sp_addextendedproperty|sp_addmessage|sp_addtype|sp_addumpdevice|sp_add_data_file_recover_suspect_db|sp_add_log_file_recover_suspect_db|sp_altermessage|sp_attach_db|sp_attach_single_file_db|sp_autostats|sp_bindefault|sp_bindrule|sp_bindsession|sp_certify_removable|sp_clean_db_file_free_space|sp_clean_db_free_space|sp_configure|sp_control_plan_guide|sp_createstats|sp_create_plan_guide|sp_create_plan_guide_from_handle|sp_create_removable|sp_cycle_errorlog|sp_datatype_info|sp_dbcmptlevel|sp_dbmmonitoraddmonitoring|sp_dbmmonitorchangealert|sp_dbmmonitorchangemonitoring|sp_dbmmonitordropalert|sp_dbmmonitordropmonitoring|sp_dbmmonitorhelpalert|sp_dbmmonitorhelpmonitoring|sp_dbmmonitorresults|sp_db_increased_partitions|sp_delete_backuphistory|sp_depends|sp_describe_first_result_set|sp_describe_undeclared_parameters|sp_detach_db|sp_dropdevice|sp_dropextendedproc|sp_dropextendedproperty|sp_dropmessage|sp_droptype|sp_execute|sp_executesql|sp_getapplock|sp_getbindtoken|sp_help|sp_helpconstraint|sp_helpdb|sp_helpdevice|sp_helpextendedproc|sp_helpfile|sp_helpfilegroup|sp_helpindex|sp_helplanguage|sp_helpserver|sp_helpsort|sp_helpstats|sp_helptext|sp_helptrigger|sp_indexoption|sp_invalidate_textptr|sp_lock|sp_monitor|sp_prepare|sp_prepexec|sp_prepexecrpc|sp_procoption|sp_recompile|sp_refreshview|sp_releaseapplock|sp_rename|sp_renamedb|sp_resetstatus|sp_sequence_get_range|sp_serveroption|sp_setnetname|sp_settriggerorder|sp_spaceused|sp_tableoption|sp_unbindefault|sp_unbindrule|sp_unprepare|sp_updateextendedproperty|sp_updatestats|sp_validname|sp_who|sys.sp_merge_xtp_checkpoint_files|sys.sp_xtp_bind_db_resource_pool|sys.sp_xtp_checkpoint_force_garbage_collection|sys.sp_xtp_control_proc_exec_stats|sys.sp_xtp_control_query_exec_stats|sys.sp_xtp_unbind_db_resource_pool"; 72 | var keywords = "ABSOLUTE|ACTION|ADA|ADD|ADMIN|AFTER|AGGREGATE|ALIAS|ALL|ALLOCATE|ALTER|AND|ANY|ARE|ARRAY|AS|ASC|ASENSITIVE|ASSERTION|ASYMMETRIC|AT|ATOMIC|AUTHORIZATION|BACKUP|BEFORE|BEGIN|BETWEEN|BIT_LENGTH|BLOB|BOOLEAN|BOTH|BREADTH|BREAK|BROWSE|BULK|BY|CALL|CALLED|CARDINALITY|CASCADE|CASCADED|CASE|CATALOG|CHARACTER|CHARACTER_LENGTH|CHAR_LENGTH|CHECK|CHECKPOINT|CLASS|CLOB|CLOSE|CLUSTERED|COALESCE|COLLATE|COLLATION|COLLECT|COLUMN|COMMIT|COMPLETION|COMPUTE|CONDITION|CONNECT|CONNECTION|CONSTRAINT|CONSTRAINTS|CONSTRUCTOR|CONTAINS|CONTAINSTABLE|CONTINUE|CORR|CORRESPONDING|COVAR_POP|COVAR_SAMP|CREATE|CROSS|CUBE|CUME_DIST|CURRENT|CURRENT_CATALOG|CURRENT_DATE|CURRENT_DEFAULT_TRANSFORM_GROUP|CURRENT_PATH|CURRENT_ROLE|CURRENT_SCHEMA|CURRENT_TIME|CURRENT_TRANSFORM_GROUP_FOR_TYPE|CYCLE|DATA|DATABASE|DBCC|DEALLOCATE|DEC|DECLARE|DEFAULT|DEFERRABLE|DEFERRED|DELETE|DENY|DEPTH|DEREF|DESC|DESCRIBE|DESCRIPTOR|DESTROY|DESTRUCTOR|DETERMINISTIC|DIAGNOSTICS|DICTIONARY|DISCONNECT|DISK|DISTINCT|DISTRIBUTED|DOMAIN|DOUBLE|DROP|DUMP|DYNAMIC|EACH|ELEMENT|ELSE|END|END-EXEC|EQUALS|ERRLVL|ESCAPE|EVERY|EXCEPT|EXCEPTION|EXEC|EXECUTE|EXISTS|EXIT|EXTERNAL|EXTRACT|FETCH|FILE|FILLFACTOR|FILTER|FIRST|FOR|FOREIGN|FORTRAN|FOUND|FREE|FREETEXT|FREETEXTTABLE|FROM|FULL|FULLTEXTTABLE|FUNCTION|FUSION|GENERAL|GET|GLOBAL|GO|GOTO|GRANT|GROUP|HAVING|HOLD|HOLDLOCK|HOST|HOUR|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IGNORE|IMMEDIATE|IN|INCLUDE|INDEX|INDICATOR|INITIALIZE|INITIALLY|INNER|INOUT|INPUT|INSENSITIVE|INSERT|INTEGER|INTERSECT|INTERSECTION|INTERVAL|INTO|IS|ISOLATION|ITERATE|JOIN|KEY|KILL|LANGUAGE|LARGE|LAST|LATERAL|LEADING|LESS|LEVEL|LIKE|LIKE_REGEX|LIMIT|LINENO|LN|LOAD|LOCAL|LOCALTIME|LOCALTIMESTAMP|LOCATOR|MAP|MATCH|MEMBER|MERGE|METHOD|MINUTE|MOD|MODIFIES|MODIFY|MODULE|MULTISET|NAMES|NATIONAL|NATURAL|NCLOB|NEW|NEXT|NO|NOCHECK|NONCLUSTERED|NONE|NORMALIZE|NOT|NULL|NULLIF|OBJECT|OCCURRENCES_REGEX|OCTET_LENGTH|OF|OFF|OFFSETS|OLD|ON|ONLY|OPEN|OPERATION|OPTION|OR|ORDER|ORDINALITY|OUT|OUTER|OUTPUT|OVER|OVERLAPS|OVERLAY|PAD|PARAMETER|PARAMETERS|PARTIAL|PARTITION|PASCAL|PATH|PERCENT|PERCENTILE_CONT|PERCENTILE_DISC|PERCENT_RANK|PIVOT|PLAN|POSITION|POSITION_REGEX|POSTFIX|PRECISION|PREFIX|PREORDER|PREPARE|PRESERVE|PRIMARY|PRINT|PRIOR|PRIVILEGES|PROC|PROCEDURE|PUBLIC|RAISERROR|RANGE|READ|READS|READTEXT|RECONFIGURE|RECURSIVE|REF|REFERENCES|REFERENCING|REGR_AVGX|REGR_AVGY|REGR_COUNT|REGR_INTERCEPT|REGR_R2|REGR_SLOPE|REGR_SXX|REGR_SXY|REGR_SYY|RELATIVE|RELEASE|REPLICATION|RESTORE|RESTRICT|RESULT|RETURN|RETURNS|REVERT|REVOKE|ROLE|ROLLBACK|ROLLUP|ROUTINE|ROW|ROWCOUNT|ROWGUIDCOL|ROWS|RULE|SAVE|SAVEPOINT|SCHEMA|SCOPE|SCROLL|SEARCH|SECOND|SECTION|SECURITYAUDIT|SELECT|SEMANTICKEYPHRASETABLE|SEMANTICSIMILARITYDETAILSTABLE|SEMANTICSIMILARITYTABLE|SENSITIVE|SEQUENCE|SESSION|SET|SETS|SETUSER|SHUTDOWN|SIMILAR|SIZE|SOME|SPECIFIC|SPECIFICTYPE|SQL|SQLCA|SQLCODE|SQLERROR|SQLEXCEPTION|SQLSTATE|SQLWARNING|START|STATE|STATEMENT|STATIC|STATISTICS|STDDEV_POP|STDDEV_SAMP|STRUCTURE|SUBMULTISET|SUBSTRING_REGEX|STRING_SPLIT|SYMMETRIC|SYSTEM|TABLESAMPLE|TEMPORARY|TERMINATE|TEXTSIZE|THAN|THEN|TIMEZONE_HOUR|TIMEZONE_MINUTE|TO|TOP|TRAILING|TRAN|TRANSACTION|TRANSLATE|TRANSLATE_REGEX|TRANSLATION|TREAT|TRIGGER|TRIM|TRUNCATE|TSEQUAL|UESCAPE|UNDER|UNION|UNIQUE|UNKNOWN|UNNEST|UNPIVOT|UPDATE|UPDATETEXT|USAGE|USE|USER|USING|VALUE|VALUES|VARIABLE|VARYING|VAR_POP|VAR_SAMP|VIEW|WAITFOR|WHEN|WHENEVER|WHERE|WHILE|WIDTH_BUCKET|WINDOW|WITH|WITHIN|WITHIN GROUP|WITHOUT|WORK|WRITE|WRITETEXT|XMLAGG|XMLATTRIBUTES|XMLBINARY|XMLCAST|XMLCOMMENT|XMLCONCAT|XMLDOCUMENT|XMLELEMENT|XMLEXISTS|XMLFOREST|XMLITERATE|XMLNAMESPACES|XMLPARSE|XMLPI|XMLQUERY|XMLSERIALIZE|XMLTABLE|XMLTEXT|XMLVALIDATE|ZONE"; 73 | keywords += "|KEEPIDENTITY|KEEPDEFAULTS|IGNORE_CONSTRAINTS|IGNORE_TRIGGERS|XLOCK|FORCESCAN|FORCESEEK|HOLDLOCK|NOLOCK|NOWAIT|PAGLOCK|READCOMMITTED|READCOMMITTEDLOCK|READPAST|READUNCOMMITTED|REPEATABLEREAD|ROWLOCK|SERIALIZABLE|SNAPSHOT|SPATIAL_WINDOW_MAX_CELLS|TABLOCK|TABLOCKX|UPDLOCK|XLOCK|IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX|EXPAND|VIEWS|FAST|FORCE|KEEP|KEEPFIXED|MAXDOP|MAXRECURSION|OPTIMIZE|PARAMETERIZATION|SIMPLE|FORCED|RECOMPILE|ROBUST|PLAN|SPATIAL_WINDOW_MAX_CELLS|NOEXPAND|HINT"; 74 | keywords += "|LOOP|HASH|MERGE|REMOTE"; 75 | keywords += "|TRY|CATCH|THROW"; 76 | keywords += "|TYPE"; 77 | keywords = keywords.split('|'); 78 | keywords = keywords.filter(function (value, index, self) { 79 | return logicalOperators.split('|').indexOf(value) === -1 && builtinFunctions.split('|').indexOf(value) === -1 && dataTypes.split('|').indexOf(value) === -1; 80 | }); 81 | keywords = keywords.sort().join('|'); 82 | var keywordMapper = this.createKeywordMapper({ 83 | "constant.language": logicalOperators, 84 | "storage.type": dataTypes, 85 | "support.function": builtinFunctions, 86 | "support.storedprocedure": builtInStoredProcedures, 87 | "keyword": keywords 88 | }, "identifier", true); 89 | var setStatements = "SET ANSI_DEFAULTS|SET ANSI_NULLS|SET ANSI_NULL_DFLT_OFF|SET ANSI_NULL_DFLT_ON|SET ANSI_PADDING|SET ANSI_WARNINGS|SET ARITHABORT|SET ARITHIGNORE|SET CONCAT_NULL_YIELDS_NULL|SET CURSOR_CLOSE_ON_COMMIT|SET DATEFIRST|SET DATEFORMAT|SET DEADLOCK_PRIORITY|SET FIPS_FLAGGER|SET FMTONLY|SET FORCEPLAN|SET IDENTITY_INSERT|SET IMPLICIT_TRANSACTIONS|SET LANGUAGE|SET LOCK_TIMEOUT|SET NOCOUNT|SET NOEXEC|SET NUMERIC_ROUNDABORT|SET OFFSETS|SET PARSEONLY|SET QUERY_GOVERNOR_COST_LIMIT|SET QUOTED_IDENTIFIER|SET REMOTE_PROC_TRANSACTIONS|SET ROWCOUNT|SET SHOWPLAN_ALL|SET SHOWPLAN_TEXT|SET SHOWPLAN_XML|SET STATISTICS IO|SET STATISTICS PROFILE|SET STATISTICS TIME|SET STATISTICS XML|SET TEXTSIZE|SET XACT_ABORT".split('|'); 90 | var isolationLevels = "READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SNAPSHOP|SERIALIZABLE".split('|'); 91 | for (var i = 0; i < isolationLevels.length; i++) { 92 | setStatements.push('SET TRANSACTION ISOLATION LEVEL ' + isolationLevels[i]); 93 | } 94 | this.$rules = { 95 | start: [{ 96 | token: "string.start", 97 | regex: "'", 98 | next: [{ 99 | token: "constant.language.escape", 100 | regex: /''/ 101 | }, { 102 | token: "string.end", 103 | next: "start", 104 | regex: "'" 105 | }, { 106 | defaultToken: "string" 107 | }] 108 | }, 109 | DocCommentHighlightRules.getStartRule("doc-start"), { 110 | token: "comment", 111 | regex: "--.*$" 112 | }, { 113 | token: "comment", 114 | start: "/\\*", 115 | end: "\\*/" 116 | }, { 117 | token: "constant.numeric", // float 118 | regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" 119 | }, { 120 | token: keywordMapper, 121 | regex: "@{0,2}[a-zA-Z_$][a-zA-Z0-9_$]*\\b(?!])" //up to 2 @symbols for some built in functions 122 | }, { 123 | token: "constant.class", 124 | regex: "@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\b" 125 | }, { 126 | token: "keyword.operator", 127 | regex: "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|=|\\*" 128 | }, { 129 | token: "paren.lparen", 130 | regex: "[\\(]" 131 | }, { 132 | token: "paren.rparen", 133 | regex: "[\\)]" 134 | }, { 135 | token: "punctuation", 136 | regex: ",|;" 137 | }, { 138 | token: "text", 139 | regex: "\\s+" 140 | }], 141 | comment: [ 142 | DocCommentHighlightRules.getTagRule(), { 143 | token: "comment", 144 | regex: "\\*\\/", 145 | next: "start" 146 | }, { 147 | defaultToken: "comment", 148 | caseInsensitive: true 149 | } 150 | ] 151 | }; 152 | for (var i = 0; i < setStatements.length; i++) { 153 | this.$rules.start.unshift({ 154 | token: "set.statement", 155 | regex: setStatements[i] 156 | }); 157 | } 158 | this.embedRules(DocCommentHighlightRules, "doc-", [DocCommentHighlightRules.getEndRule("start")]); 159 | this.normalizeRules(); 160 | var completions = []; 161 | var addCompletions = function (arr, meta) { 162 | arr.forEach(function (v) { 163 | completions.push({ 164 | name: v, 165 | value: v, 166 | score: 0, 167 | meta: meta 168 | }); 169 | }); 170 | }; 171 | addCompletions(builtInStoredProcedures.split('|'), 'procedure'); 172 | addCompletions(logicalOperators.split('|'), 'operator'); 173 | addCompletions(builtinFunctions.split('|'), 'function'); 174 | addCompletions(dataTypes.split('|'), 'type'); 175 | addCompletions(setStatements, 'statement'); 176 | addCompletions(keywords.split('|'), 'keyword'); 177 | this.completions = completions; 178 | }; 179 | oop.inherits(SqlServerHighlightRules, TextHighlightRules); 180 | exports.SqlHighlightRules = SqlServerHighlightRules; 181 | 182 | }); 183 | 184 | ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict"; 185 | var oop = require("../../lib/oop"); 186 | var Range = require("../../range").Range; 187 | var BaseFoldMode = require("./fold_mode").FoldMode; 188 | var FoldMode = exports.FoldMode = function (commentRegex) { 189 | if (commentRegex) { 190 | this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)); 191 | this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)); 192 | } 193 | }; 194 | oop.inherits(FoldMode, BaseFoldMode); 195 | (function () { 196 | this.foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/; 197 | this.foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/; 198 | this.singleLineBlockCommentRe = /^\s*(\/\*).*\*\/\s*$/; 199 | this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; 200 | this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; 201 | this._getFoldWidgetBase = this.getFoldWidget; 202 | this.getFoldWidget = function (session, foldStyle, row) { 203 | var line = session.getLine(row); 204 | if (this.singleLineBlockCommentRe.test(line)) { 205 | if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) 206 | return ""; 207 | } 208 | var fw = this._getFoldWidgetBase(session, foldStyle, row); 209 | if (!fw && this.startRegionRe.test(line)) 210 | return "start"; // lineCommentRegionStart 211 | return fw; 212 | }; 213 | this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) { 214 | var line = session.getLine(row); 215 | if (this.startRegionRe.test(line)) 216 | return this.getCommentRegionBlock(session, line, row); 217 | var match = line.match(this.foldingStartMarker); 218 | if (match) { 219 | var i = match.index; 220 | if (match[1]) 221 | return this.openingBracketBlock(session, match[1], row, i); 222 | var range = session.getCommentFoldRange(row, i + match[0].length, 1); 223 | if (range && !range.isMultiLine()) { 224 | if (forceMultiline) { 225 | range = this.getSectionRange(session, row); 226 | } 227 | else if (foldStyle != "all") 228 | range = null; 229 | } 230 | return range; 231 | } 232 | if (foldStyle === "markbegin") 233 | return; 234 | var match = line.match(this.foldingStopMarker); 235 | if (match) { 236 | var i = match.index + match[0].length; 237 | if (match[1]) 238 | return this.closingBracketBlock(session, match[1], row, i); 239 | return session.getCommentFoldRange(row, i, -1); 240 | } 241 | }; 242 | this.getSectionRange = function (session, row) { 243 | var line = session.getLine(row); 244 | var startIndent = line.search(/\S/); 245 | var startRow = row; 246 | var startColumn = line.length; 247 | row = row + 1; 248 | var endRow = row; 249 | var maxRow = session.getLength(); 250 | while (++row < maxRow) { 251 | line = session.getLine(row); 252 | var indent = line.search(/\S/); 253 | if (indent === -1) 254 | continue; 255 | if (startIndent > indent) 256 | break; 257 | var subRange = this.getFoldWidgetRange(session, "all", row); 258 | if (subRange) { 259 | if (subRange.start.row <= startRow) { 260 | break; 261 | } 262 | else if (subRange.isMultiLine()) { 263 | row = subRange.end.row; 264 | } 265 | else if (startIndent == indent) { 266 | break; 267 | } 268 | } 269 | endRow = row; 270 | } 271 | return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); 272 | }; 273 | this.getCommentRegionBlock = function (session, line, row) { 274 | var startColumn = line.search(/\s*$/); 275 | var maxRow = session.getLength(); 276 | var startRow = row; 277 | var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; 278 | var depth = 1; 279 | while (++row < maxRow) { 280 | line = session.getLine(row); 281 | var m = re.exec(line); 282 | if (!m) 283 | continue; 284 | if (m[1]) 285 | depth--; 286 | else 287 | depth++; 288 | if (!depth) 289 | break; 290 | } 291 | var endRow = row; 292 | if (endRow > startRow) { 293 | return new Range(startRow, startColumn, endRow, line.length); 294 | } 295 | }; 296 | }).call(FoldMode.prototype); 297 | 298 | }); 299 | 300 | ace.define("ace/mode/folding/sqlserver",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/cstyle"], function(require, exports, module){"use strict"; 301 | var oop = require("../../lib/oop"); 302 | var Range = require("../../range").Range; 303 | var BaseFoldMode = require("./cstyle").FoldMode; 304 | var FoldMode = exports.FoldMode = function () { }; 305 | oop.inherits(FoldMode, BaseFoldMode); 306 | (function () { 307 | this.foldingStartMarker = /(\bCASE\b|\bBEGIN\b)|^\s*(\/\*)/i; 308 | this.startRegionRe = /^\s*(\/\*|--)#?region\b/; 309 | this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) { 310 | var line = session.getLine(row); 311 | if (this.startRegionRe.test(line)) 312 | return this.getCommentRegionBlock(session, line, row); 313 | var match = line.match(this.foldingStartMarker); 314 | if (match) { 315 | var i = match.index; 316 | if (match[1]) 317 | return this.getBeginEndBlock(session, row, i, match[1]); 318 | var range = session.getCommentFoldRange(row, i + match[0].length, 1); 319 | if (range && !range.isMultiLine()) { 320 | if (forceMultiline) { 321 | range = this.getSectionRange(session, row); 322 | } 323 | else if (foldStyle != "all") 324 | range = null; 325 | } 326 | return range; 327 | } 328 | if (foldStyle === "markbegin") 329 | return; 330 | return; 331 | }; 332 | this.getBeginEndBlock = function (session, row, column, matchSequence) { 333 | var start = { 334 | row: row, 335 | column: column + matchSequence.length 336 | }; 337 | var maxRow = session.getLength(); 338 | var line; 339 | var depth = 1; 340 | var re = /(\bCASE\b|\bBEGIN\b)|(\bEND\b)/i; 341 | while (++row < maxRow) { 342 | line = session.getLine(row); 343 | var m = re.exec(line); 344 | if (!m) 345 | continue; 346 | if (m[1]) 347 | depth++; 348 | else 349 | depth--; 350 | if (!depth) 351 | break; 352 | } 353 | var endRow = row; 354 | if (endRow > start.row) { 355 | return new Range(start.row, start.column, endRow, line.length); 356 | } 357 | }; 358 | }).call(FoldMode.prototype); 359 | 360 | }); 361 | 362 | ace.define("ace/mode/sqlserver",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sqlserver_highlight_rules","ace/mode/folding/sqlserver"], function(require, exports, module){"use strict"; 363 | var oop = require("../lib/oop"); 364 | var TextMode = require("./text").Mode; 365 | var SqlServerHighlightRules = require("./sqlserver_highlight_rules").SqlHighlightRules; 366 | var SqlServerFoldMode = require("./folding/sqlserver").FoldMode; 367 | var Mode = function () { 368 | this.HighlightRules = SqlServerHighlightRules; 369 | this.foldingRules = new SqlServerFoldMode(); 370 | this.$behaviour = this.$defaultBehaviour; 371 | }; 372 | oop.inherits(Mode, TextMode); 373 | (function () { 374 | this.lineCommentStart = "--"; 375 | this.blockComment = { start: "/*", end: "*/" }; 376 | this.getCompletions = function (state, session, pos, prefix) { 377 | return session.$mode.$highlightRules.completions; 378 | }; 379 | this.$id = "ace/mode/sqlserver"; 380 | this.snippetFileId = "ace/snippets/sqlserver"; 381 | }).call(Mode.prototype); 382 | exports.Mode = Mode; 383 | 384 | }); (function() { 385 | ace.require(["ace/mode/sqlserver"], function(m) { 386 | if (typeof module == "object" && typeof exports == "object" && module) { 387 | module.exports = m; 388 | } 389 | }); 390 | })(); 391 | -------------------------------------------------------------------------------- /dist/assets/worker-base-78504947.js: -------------------------------------------------------------------------------- 1 | "no use strict"; 2 | !(function(window) { 3 | if (typeof window.window != "undefined" && window.document) 4 | return; 5 | if (window.require && window.define) 6 | return; 7 | 8 | if (!window.console) { 9 | window.console = function() { 10 | var msgs = Array.prototype.slice.call(arguments, 0); 11 | postMessage({type: "log", data: msgs}); 12 | }; 13 | window.console.error = 14 | window.console.warn = 15 | window.console.log = 16 | window.console.trace = window.console; 17 | } 18 | window.window = window; 19 | window.ace = window; 20 | 21 | window.onerror = function(message, file, line, col, err) { 22 | postMessage({type: "error", data: { 23 | message: message, 24 | data: err && err.data, 25 | file: file, 26 | line: line, 27 | col: col, 28 | stack: err && err.stack 29 | }}); 30 | }; 31 | 32 | window.normalizeModule = function(parentId, moduleName) { 33 | // normalize plugin requires 34 | if (moduleName.indexOf("!") !== -1) { 35 | var chunks = moduleName.split("!"); 36 | return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]); 37 | } 38 | // normalize relative requires 39 | if (moduleName.charAt(0) == ".") { 40 | var base = parentId.split("/").slice(0, -1).join("/"); 41 | moduleName = (base ? base + "/" : "") + moduleName; 42 | 43 | while (moduleName.indexOf(".") !== -1 && previous != moduleName) { 44 | var previous = moduleName; 45 | moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); 46 | } 47 | } 48 | 49 | return moduleName; 50 | }; 51 | 52 | window.require = function require(parentId, id) { 53 | if (!id) { 54 | id = parentId; 55 | parentId = null; 56 | } 57 | if (!id.charAt) 58 | throw new Error("worker.js require() accepts only (parentId, id) as arguments"); 59 | 60 | id = window.normalizeModule(parentId, id); 61 | 62 | var module = window.require.modules[id]; 63 | if (module) { 64 | if (!module.initialized) { 65 | module.initialized = true; 66 | module.exports = module.factory().exports; 67 | } 68 | return module.exports; 69 | } 70 | 71 | if (!window.require.tlns) 72 | return console.log("unable to load " + id); 73 | 74 | var path = resolveModuleId(id, window.require.tlns); 75 | if (path.slice(-3) != ".js") path += ".js"; 76 | 77 | window.require.id = id; 78 | window.require.modules[id] = {}; // prevent infinite loop on broken modules 79 | importScripts(path); 80 | return window.require(parentId, id); 81 | }; 82 | function resolveModuleId(id, paths) { 83 | var testPath = id, tail = ""; 84 | while (testPath) { 85 | var alias = paths[testPath]; 86 | if (typeof alias == "string") { 87 | return alias + tail; 88 | } else if (alias) { 89 | return alias.location.replace(/\/*$/, "/") + (tail || alias.main || alias.name); 90 | } else if (alias === false) { 91 | return ""; 92 | } 93 | var i = testPath.lastIndexOf("/"); 94 | if (i === -1) break; 95 | tail = testPath.substr(i) + tail; 96 | testPath = testPath.slice(0, i); 97 | } 98 | return id; 99 | } 100 | window.require.modules = {}; 101 | window.require.tlns = {}; 102 | 103 | window.define = function(id, deps, factory) { 104 | if (arguments.length == 2) { 105 | factory = deps; 106 | if (typeof id != "string") { 107 | deps = id; 108 | id = window.require.id; 109 | } 110 | } else if (arguments.length == 1) { 111 | factory = id; 112 | deps = []; 113 | id = window.require.id; 114 | } 115 | 116 | if (typeof factory != "function") { 117 | window.require.modules[id] = { 118 | exports: factory, 119 | initialized: true 120 | }; 121 | return; 122 | } 123 | 124 | if (!deps.length) 125 | // If there is no dependencies, we inject "require", "exports" and 126 | // "module" as dependencies, to provide CommonJS compatibility. 127 | deps = ["require", "exports", "module"]; 128 | 129 | var req = function(childId) { 130 | return window.require(id, childId); 131 | }; 132 | 133 | window.require.modules[id] = { 134 | exports: {}, 135 | factory: function() { 136 | var module = this; 137 | var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) { 138 | switch (dep) { 139 | // Because "require", "exports" and "module" aren't actual 140 | // dependencies, we must handle them seperately. 141 | case "require": return req; 142 | case "exports": return module.exports; 143 | case "module": return module; 144 | // But for all other dependencies, we can just go ahead and 145 | // require them. 146 | default: return req(dep); 147 | } 148 | })); 149 | if (returnExports) 150 | module.exports = returnExports; 151 | return module; 152 | } 153 | }; 154 | }; 155 | window.define.amd = {}; 156 | window.require.tlns = {}; 157 | window.initBaseUrls = function initBaseUrls(topLevelNamespaces) { 158 | for (var i in topLevelNamespaces) 159 | this.require.tlns[i] = topLevelNamespaces[i]; 160 | }; 161 | 162 | window.initSender = function initSender() { 163 | 164 | var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter; 165 | var oop = window.require("ace/lib/oop"); 166 | 167 | var Sender = function() {}; 168 | 169 | (function() { 170 | 171 | oop.implement(this, EventEmitter); 172 | 173 | this.callback = function(data, callbackId) { 174 | postMessage({ 175 | type: "call", 176 | id: callbackId, 177 | data: data 178 | }); 179 | }; 180 | 181 | this.emit = function(name, data) { 182 | postMessage({ 183 | type: "event", 184 | name: name, 185 | data: data 186 | }); 187 | }; 188 | 189 | }).call(Sender.prototype); 190 | 191 | return new Sender(); 192 | }; 193 | 194 | var main = window.main = null; 195 | var sender = window.sender = null; 196 | 197 | window.onmessage = function(e) { 198 | var msg = e.data; 199 | if (msg.event && sender) { 200 | sender._signal(msg.event, msg.data); 201 | } 202 | else if (msg.command) { 203 | if (main[msg.command]) 204 | main[msg.command].apply(main, msg.args); 205 | else if (window[msg.command]) 206 | window[msg.command].apply(window, msg.args); 207 | else 208 | throw new Error("Unknown command:" + msg.command); 209 | } 210 | else if (msg.init) { 211 | window.initBaseUrls(msg.tlns); 212 | sender = window.sender = window.initSender(); 213 | var clazz = this.require(msg.module)[msg.classname]; 214 | main = window.main = new clazz(sender); 215 | } 216 | }; 217 | })(this); 218 | 219 | ace.define("ace/lib/oop",[], function(require, exports, module){"use strict"; 220 | exports.inherits = function (ctor, superCtor) { 221 | ctor.super_ = superCtor; 222 | ctor.prototype = Object.create(superCtor.prototype, { 223 | constructor: { 224 | value: ctor, 225 | enumerable: false, 226 | writable: true, 227 | configurable: true 228 | } 229 | }); 230 | }; 231 | exports.mixin = function (obj, mixin) { 232 | for (var key in mixin) { 233 | obj[key] = mixin[key]; 234 | } 235 | return obj; 236 | }; 237 | exports.implement = function (proto, mixin) { 238 | exports.mixin(proto, mixin); 239 | }; 240 | 241 | }); 242 | 243 | ace.define("ace/apply_delta",[], function(require, exports, module){"use strict"; 244 | function throwDeltaError(delta, errorText) { 245 | console.log("Invalid Delta:", delta); 246 | throw "Invalid Delta: " + errorText; 247 | } 248 | function positionInDocument(docLines, position) { 249 | return position.row >= 0 && position.row < docLines.length && 250 | position.column >= 0 && position.column <= docLines[position.row].length; 251 | } 252 | function validateDelta(docLines, delta) { 253 | if (delta.action != "insert" && delta.action != "remove") 254 | throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); 255 | if (!(delta.lines instanceof Array)) 256 | throwDeltaError(delta, "delta.lines must be an Array"); 257 | if (!delta.start || !delta.end) 258 | throwDeltaError(delta, "delta.start/end must be an present"); 259 | var start = delta.start; 260 | if (!positionInDocument(docLines, delta.start)) 261 | throwDeltaError(delta, "delta.start must be contained in document"); 262 | var end = delta.end; 263 | if (delta.action == "remove" && !positionInDocument(docLines, end)) 264 | throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); 265 | var numRangeRows = end.row - start.row; 266 | var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); 267 | if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) 268 | throwDeltaError(delta, "delta.range must match delta lines"); 269 | } 270 | exports.applyDelta = function (docLines, delta, doNotValidate) { 271 | var row = delta.start.row; 272 | var startColumn = delta.start.column; 273 | var line = docLines[row] || ""; 274 | switch (delta.action) { 275 | case "insert": 276 | var lines = delta.lines; 277 | if (lines.length === 1) { 278 | docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); 279 | } 280 | else { 281 | var args = [row, 1].concat(delta.lines); 282 | docLines.splice.apply(docLines, args); 283 | docLines[row] = line.substring(0, startColumn) + docLines[row]; 284 | docLines[row + delta.lines.length - 1] += line.substring(startColumn); 285 | } 286 | break; 287 | case "remove": 288 | var endColumn = delta.end.column; 289 | var endRow = delta.end.row; 290 | if (row === endRow) { 291 | docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); 292 | } 293 | else { 294 | docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn)); 295 | } 296 | break; 297 | } 298 | }; 299 | 300 | }); 301 | 302 | ace.define("ace/lib/event_emitter",[], function(require, exports, module){"use strict"; 303 | var EventEmitter = {}; 304 | var stopPropagation = function () { this.propagationStopped = true; }; 305 | var preventDefault = function () { this.defaultPrevented = true; }; 306 | EventEmitter._emit = 307 | EventEmitter._dispatchEvent = function (eventName, e) { 308 | this._eventRegistry || (this._eventRegistry = {}); 309 | this._defaultHandlers || (this._defaultHandlers = {}); 310 | var listeners = this._eventRegistry[eventName] || []; 311 | var defaultHandler = this._defaultHandlers[eventName]; 312 | if (!listeners.length && !defaultHandler) 313 | return; 314 | if (typeof e != "object" || !e) 315 | e = {}; 316 | if (!e.type) 317 | e.type = eventName; 318 | if (!e.stopPropagation) 319 | e.stopPropagation = stopPropagation; 320 | if (!e.preventDefault) 321 | e.preventDefault = preventDefault; 322 | listeners = listeners.slice(); 323 | for (var i = 0; i < listeners.length; i++) { 324 | listeners[i](e, this); 325 | if (e.propagationStopped) 326 | break; 327 | } 328 | if (defaultHandler && !e.defaultPrevented) 329 | return defaultHandler(e, this); 330 | }; 331 | EventEmitter._signal = function (eventName, e) { 332 | var listeners = (this._eventRegistry || {})[eventName]; 333 | if (!listeners) 334 | return; 335 | listeners = listeners.slice(); 336 | for (var i = 0; i < listeners.length; i++) 337 | listeners[i](e, this); 338 | }; 339 | EventEmitter.once = function (eventName, callback) { 340 | var _self = this; 341 | this.on(eventName, function newCallback() { 342 | _self.off(eventName, newCallback); 343 | callback.apply(null, arguments); 344 | }); 345 | if (!callback) { 346 | return new Promise(function (resolve) { 347 | callback = resolve; 348 | }); 349 | } 350 | }; 351 | EventEmitter.setDefaultHandler = function (eventName, callback) { 352 | var handlers = this._defaultHandlers; 353 | if (!handlers) 354 | handlers = this._defaultHandlers = { _disabled_: {} }; 355 | if (handlers[eventName]) { 356 | var old = handlers[eventName]; 357 | var disabled = handlers._disabled_[eventName]; 358 | if (!disabled) 359 | handlers._disabled_[eventName] = disabled = []; 360 | disabled.push(old); 361 | var i = disabled.indexOf(callback); 362 | if (i != -1) 363 | disabled.splice(i, 1); 364 | } 365 | handlers[eventName] = callback; 366 | }; 367 | EventEmitter.removeDefaultHandler = function (eventName, callback) { 368 | var handlers = this._defaultHandlers; 369 | if (!handlers) 370 | return; 371 | var disabled = handlers._disabled_[eventName]; 372 | if (handlers[eventName] == callback) { 373 | if (disabled) 374 | this.setDefaultHandler(eventName, disabled.pop()); 375 | } 376 | else if (disabled) { 377 | var i = disabled.indexOf(callback); 378 | if (i != -1) 379 | disabled.splice(i, 1); 380 | } 381 | }; 382 | EventEmitter.on = 383 | EventEmitter.addEventListener = function (eventName, callback, capturing) { 384 | this._eventRegistry = this._eventRegistry || {}; 385 | var listeners = this._eventRegistry[eventName]; 386 | if (!listeners) 387 | listeners = this._eventRegistry[eventName] = []; 388 | if (listeners.indexOf(callback) == -1) 389 | listeners[capturing ? "unshift" : "push"](callback); 390 | return callback; 391 | }; 392 | EventEmitter.off = 393 | EventEmitter.removeListener = 394 | EventEmitter.removeEventListener = function (eventName, callback) { 395 | this._eventRegistry = this._eventRegistry || {}; 396 | var listeners = this._eventRegistry[eventName]; 397 | if (!listeners) 398 | return; 399 | var index = listeners.indexOf(callback); 400 | if (index !== -1) 401 | listeners.splice(index, 1); 402 | }; 403 | EventEmitter.removeAllListeners = function (eventName) { 404 | if (!eventName) 405 | this._eventRegistry = this._defaultHandlers = undefined; 406 | if (this._eventRegistry) 407 | this._eventRegistry[eventName] = undefined; 408 | if (this._defaultHandlers) 409 | this._defaultHandlers[eventName] = undefined; 410 | }; 411 | exports.EventEmitter = EventEmitter; 412 | 413 | }); 414 | 415 | ace.define("ace/range",[], function(require, exports, module){"use strict"; 416 | var Range = /** @class */ (function () { 417 | function Range(startRow, startColumn, endRow, endColumn) { 418 | this.start = { 419 | row: startRow, 420 | column: startColumn 421 | }; 422 | this.end = { 423 | row: endRow, 424 | column: endColumn 425 | }; 426 | } 427 | Range.prototype.isEqual = function (range) { 428 | return this.start.row === range.start.row && 429 | this.end.row === range.end.row && 430 | this.start.column === range.start.column && 431 | this.end.column === range.end.column; 432 | }; 433 | Range.prototype.toString = function () { 434 | return ("Range: [" + this.start.row + "/" + this.start.column + 435 | "] -> [" + this.end.row + "/" + this.end.column + "]"); 436 | }; 437 | Range.prototype.contains = function (row, column) { 438 | return this.compare(row, column) == 0; 439 | }; 440 | Range.prototype.compareRange = function (range) { 441 | var cmp, end = range.end, start = range.start; 442 | cmp = this.compare(end.row, end.column); 443 | if (cmp == 1) { 444 | cmp = this.compare(start.row, start.column); 445 | if (cmp == 1) { 446 | return 2; 447 | } 448 | else if (cmp == 0) { 449 | return 1; 450 | } 451 | else { 452 | return 0; 453 | } 454 | } 455 | else if (cmp == -1) { 456 | return -2; 457 | } 458 | else { 459 | cmp = this.compare(start.row, start.column); 460 | if (cmp == -1) { 461 | return -1; 462 | } 463 | else if (cmp == 1) { 464 | return 42; 465 | } 466 | else { 467 | return 0; 468 | } 469 | } 470 | }; 471 | Range.prototype.comparePoint = function (p) { 472 | return this.compare(p.row, p.column); 473 | }; 474 | Range.prototype.containsRange = function (range) { 475 | return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; 476 | }; 477 | Range.prototype.intersects = function (range) { 478 | var cmp = this.compareRange(range); 479 | return (cmp == -1 || cmp == 0 || cmp == 1); 480 | }; 481 | Range.prototype.isEnd = function (row, column) { 482 | return this.end.row == row && this.end.column == column; 483 | }; 484 | Range.prototype.isStart = function (row, column) { 485 | return this.start.row == row && this.start.column == column; 486 | }; 487 | Range.prototype.setStart = function (row, column) { 488 | if (typeof row == "object") { 489 | this.start.column = row.column; 490 | this.start.row = row.row; 491 | } 492 | else { 493 | this.start.row = row; 494 | this.start.column = column; 495 | } 496 | }; 497 | Range.prototype.setEnd = function (row, column) { 498 | if (typeof row == "object") { 499 | this.end.column = row.column; 500 | this.end.row = row.row; 501 | } 502 | else { 503 | this.end.row = row; 504 | this.end.column = column; 505 | } 506 | }; 507 | Range.prototype.inside = function (row, column) { 508 | if (this.compare(row, column) == 0) { 509 | if (this.isEnd(row, column) || this.isStart(row, column)) { 510 | return false; 511 | } 512 | else { 513 | return true; 514 | } 515 | } 516 | return false; 517 | }; 518 | Range.prototype.insideStart = function (row, column) { 519 | if (this.compare(row, column) == 0) { 520 | if (this.isEnd(row, column)) { 521 | return false; 522 | } 523 | else { 524 | return true; 525 | } 526 | } 527 | return false; 528 | }; 529 | Range.prototype.insideEnd = function (row, column) { 530 | if (this.compare(row, column) == 0) { 531 | if (this.isStart(row, column)) { 532 | return false; 533 | } 534 | else { 535 | return true; 536 | } 537 | } 538 | return false; 539 | }; 540 | Range.prototype.compare = function (row, column) { 541 | if (!this.isMultiLine()) { 542 | if (row === this.start.row) { 543 | return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); 544 | } 545 | } 546 | if (row < this.start.row) 547 | return -1; 548 | if (row > this.end.row) 549 | return 1; 550 | if (this.start.row === row) 551 | return column >= this.start.column ? 0 : -1; 552 | if (this.end.row === row) 553 | return column <= this.end.column ? 0 : 1; 554 | return 0; 555 | }; 556 | Range.prototype.compareStart = function (row, column) { 557 | if (this.start.row == row && this.start.column == column) { 558 | return -1; 559 | } 560 | else { 561 | return this.compare(row, column); 562 | } 563 | }; 564 | Range.prototype.compareEnd = function (row, column) { 565 | if (this.end.row == row && this.end.column == column) { 566 | return 1; 567 | } 568 | else { 569 | return this.compare(row, column); 570 | } 571 | }; 572 | Range.prototype.compareInside = function (row, column) { 573 | if (this.end.row == row && this.end.column == column) { 574 | return 1; 575 | } 576 | else if (this.start.row == row && this.start.column == column) { 577 | return -1; 578 | } 579 | else { 580 | return this.compare(row, column); 581 | } 582 | }; 583 | Range.prototype.clipRows = function (firstRow, lastRow) { 584 | if (this.end.row > lastRow) 585 | var end = { row: lastRow + 1, column: 0 }; 586 | else if (this.end.row < firstRow) 587 | var end = { row: firstRow, column: 0 }; 588 | if (this.start.row > lastRow) 589 | var start = { row: lastRow + 1, column: 0 }; 590 | else if (this.start.row < firstRow) 591 | var start = { row: firstRow, column: 0 }; 592 | return Range.fromPoints(start || this.start, end || this.end); 593 | }; 594 | Range.prototype.extend = function (row, column) { 595 | var cmp = this.compare(row, column); 596 | if (cmp == 0) 597 | return this; 598 | else if (cmp == -1) 599 | var start = { row: row, column: column }; 600 | else 601 | var end = { row: row, column: column }; 602 | return Range.fromPoints(start || this.start, end || this.end); 603 | }; 604 | Range.prototype.isEmpty = function () { 605 | return (this.start.row === this.end.row && this.start.column === this.end.column); 606 | }; 607 | Range.prototype.isMultiLine = function () { 608 | return (this.start.row !== this.end.row); 609 | }; 610 | Range.prototype.clone = function () { 611 | return Range.fromPoints(this.start, this.end); 612 | }; 613 | Range.prototype.collapseRows = function () { 614 | if (this.end.column == 0) 615 | return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0); 616 | else 617 | return new Range(this.start.row, 0, this.end.row, 0); 618 | }; 619 | Range.prototype.toScreenRange = function (session) { 620 | var screenPosStart = session.documentToScreenPosition(this.start); 621 | var screenPosEnd = session.documentToScreenPosition(this.end); 622 | return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column); 623 | }; 624 | Range.prototype.moveBy = function (row, column) { 625 | this.start.row += row; 626 | this.start.column += column; 627 | this.end.row += row; 628 | this.end.column += column; 629 | }; 630 | return Range; 631 | }()); 632 | Range.fromPoints = function (start, end) { 633 | return new Range(start.row, start.column, end.row, end.column); 634 | }; 635 | Range.comparePoints = function (p1, p2) { 636 | return p1.row - p2.row || p1.column - p2.column; 637 | }; 638 | exports.Range = Range; 639 | 640 | }); 641 | 642 | ace.define("ace/anchor",[], function(require, exports, module){"use strict"; 643 | var oop = require("./lib/oop"); 644 | var EventEmitter = require("./lib/event_emitter").EventEmitter; 645 | var Anchor = /** @class */ (function () { 646 | function Anchor(doc, row, column) { 647 | this.$onChange = this.onChange.bind(this); 648 | this.attach(doc); 649 | if (typeof row != "number") 650 | this.setPosition(row.row, row.column); 651 | else 652 | this.setPosition(row, column); 653 | } 654 | Anchor.prototype.getPosition = function () { 655 | return this.$clipPositionToDocument(this.row, this.column); 656 | }; 657 | Anchor.prototype.getDocument = function () { 658 | return this.document; 659 | }; 660 | Anchor.prototype.onChange = function (delta) { 661 | if (delta.start.row == delta.end.row && delta.start.row != this.row) 662 | return; 663 | if (delta.start.row > this.row) 664 | return; 665 | var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight); 666 | this.setPosition(point.row, point.column, true); 667 | }; 668 | Anchor.prototype.setPosition = function (row, column, noClip) { 669 | var pos; 670 | if (noClip) { 671 | pos = { 672 | row: row, 673 | column: column 674 | }; 675 | } 676 | else { 677 | pos = this.$clipPositionToDocument(row, column); 678 | } 679 | if (this.row == pos.row && this.column == pos.column) 680 | return; 681 | var old = { 682 | row: this.row, 683 | column: this.column 684 | }; 685 | this.row = pos.row; 686 | this.column = pos.column; 687 | this._signal("change", { 688 | old: old, 689 | value: pos 690 | }); 691 | }; 692 | Anchor.prototype.detach = function () { 693 | this.document.off("change", this.$onChange); 694 | }; 695 | Anchor.prototype.attach = function (doc) { 696 | this.document = doc || this.document; 697 | this.document.on("change", this.$onChange); 698 | }; 699 | Anchor.prototype.$clipPositionToDocument = function (row, column) { 700 | var pos = {}; 701 | if (row >= this.document.getLength()) { 702 | pos.row = Math.max(0, this.document.getLength() - 1); 703 | pos.column = this.document.getLine(pos.row).length; 704 | } 705 | else if (row < 0) { 706 | pos.row = 0; 707 | pos.column = 0; 708 | } 709 | else { 710 | pos.row = row; 711 | pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); 712 | } 713 | if (column < 0) 714 | pos.column = 0; 715 | return pos; 716 | }; 717 | return Anchor; 718 | }()); 719 | Anchor.prototype.$insertRight = false; 720 | oop.implement(Anchor.prototype, EventEmitter); 721 | function $pointsInOrder(point1, point2, equalPointsInOrder) { 722 | var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; 723 | return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); 724 | } 725 | function $getTransformedPoint(delta, point, moveIfEqual) { 726 | var deltaIsInsert = delta.action == "insert"; 727 | var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); 728 | var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); 729 | var deltaStart = delta.start; 730 | var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. 731 | if ($pointsInOrder(point, deltaStart, moveIfEqual)) { 732 | return { 733 | row: point.row, 734 | column: point.column 735 | }; 736 | } 737 | if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { 738 | return { 739 | row: point.row + deltaRowShift, 740 | column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) 741 | }; 742 | } 743 | return { 744 | row: deltaStart.row, 745 | column: deltaStart.column 746 | }; 747 | } 748 | exports.Anchor = Anchor; 749 | 750 | }); 751 | 752 | ace.define("ace/document",[], function(require, exports, module){"use strict"; 753 | var oop = require("./lib/oop"); 754 | var applyDelta = require("./apply_delta").applyDelta; 755 | var EventEmitter = require("./lib/event_emitter").EventEmitter; 756 | var Range = require("./range").Range; 757 | var Anchor = require("./anchor").Anchor; 758 | var Document = /** @class */ (function () { 759 | function Document(textOrLines) { 760 | this.$lines = [""]; 761 | if (textOrLines.length === 0) { 762 | this.$lines = [""]; 763 | } 764 | else if (Array.isArray(textOrLines)) { 765 | this.insertMergedLines({ row: 0, column: 0 }, textOrLines); 766 | } 767 | else { 768 | this.insert({ row: 0, column: 0 }, textOrLines); 769 | } 770 | } 771 | Document.prototype.setValue = function (text) { 772 | var len = this.getLength() - 1; 773 | this.remove(new Range(0, 0, len, this.getLine(len).length)); 774 | this.insert({ row: 0, column: 0 }, text || ""); 775 | }; 776 | Document.prototype.getValue = function () { 777 | return this.getAllLines().join(this.getNewLineCharacter()); 778 | }; 779 | Document.prototype.createAnchor = function (row, column) { 780 | return new Anchor(this, row, column); 781 | }; 782 | Document.prototype.$detectNewLine = function (text) { 783 | var match = text.match(/^.*?(\r\n|\r|\n)/m); 784 | this.$autoNewLine = match ? match[1] : "\n"; 785 | this._signal("changeNewLineMode"); 786 | }; 787 | Document.prototype.getNewLineCharacter = function () { 788 | switch (this.$newLineMode) { 789 | case "windows": 790 | return "\r\n"; 791 | case "unix": 792 | return "\n"; 793 | default: 794 | return this.$autoNewLine || "\n"; 795 | } 796 | }; 797 | Document.prototype.setNewLineMode = function (newLineMode) { 798 | if (this.$newLineMode === newLineMode) 799 | return; 800 | this.$newLineMode = newLineMode; 801 | this._signal("changeNewLineMode"); 802 | }; 803 | Document.prototype.getNewLineMode = function () { 804 | return this.$newLineMode; 805 | }; 806 | Document.prototype.isNewLine = function (text) { 807 | return (text == "\r\n" || text == "\r" || text == "\n"); 808 | }; 809 | Document.prototype.getLine = function (row) { 810 | return this.$lines[row] || ""; 811 | }; 812 | Document.prototype.getLines = function (firstRow, lastRow) { 813 | return this.$lines.slice(firstRow, lastRow + 1); 814 | }; 815 | Document.prototype.getAllLines = function () { 816 | return this.getLines(0, this.getLength()); 817 | }; 818 | Document.prototype.getLength = function () { 819 | return this.$lines.length; 820 | }; 821 | Document.prototype.getTextRange = function (range) { 822 | return this.getLinesForRange(range).join(this.getNewLineCharacter()); 823 | }; 824 | Document.prototype.getLinesForRange = function (range) { 825 | var lines; 826 | if (range.start.row === range.end.row) { 827 | lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; 828 | } 829 | else { 830 | lines = this.getLines(range.start.row, range.end.row); 831 | lines[0] = (lines[0] || "").substring(range.start.column); 832 | var l = lines.length - 1; 833 | if (range.end.row - range.start.row == l) 834 | lines[l] = lines[l].substring(0, range.end.column); 835 | } 836 | return lines; 837 | }; 838 | Document.prototype.insertLines = function (row, lines) { 839 | console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); 840 | return this.insertFullLines(row, lines); 841 | }; 842 | Document.prototype.removeLines = function (firstRow, lastRow) { 843 | console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); 844 | return this.removeFullLines(firstRow, lastRow); 845 | }; 846 | Document.prototype.insertNewLine = function (position) { 847 | console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."); 848 | return this.insertMergedLines(position, ["", ""]); 849 | }; 850 | Document.prototype.insert = function (position, text) { 851 | if (this.getLength() <= 1) 852 | this.$detectNewLine(text); 853 | return this.insertMergedLines(position, this.$split(text)); 854 | }; 855 | Document.prototype.insertInLine = function (position, text) { 856 | var start = this.clippedPos(position.row, position.column); 857 | var end = this.pos(position.row, position.column + text.length); 858 | this.applyDelta({ 859 | start: start, 860 | end: end, 861 | action: "insert", 862 | lines: [text] 863 | }, true); 864 | return this.clonePos(end); 865 | }; 866 | Document.prototype.clippedPos = function (row, column) { 867 | var length = this.getLength(); 868 | if (row === undefined) { 869 | row = length; 870 | } 871 | else if (row < 0) { 872 | row = 0; 873 | } 874 | else if (row >= length) { 875 | row = length - 1; 876 | column = undefined; 877 | } 878 | var line = this.getLine(row); 879 | if (column == undefined) 880 | column = line.length; 881 | column = Math.min(Math.max(column, 0), line.length); 882 | return { row: row, column: column }; 883 | }; 884 | Document.prototype.clonePos = function (pos) { 885 | return { row: pos.row, column: pos.column }; 886 | }; 887 | Document.prototype.pos = function (row, column) { 888 | return { row: row, column: column }; 889 | }; 890 | Document.prototype.$clipPosition = function (position) { 891 | var length = this.getLength(); 892 | if (position.row >= length) { 893 | position.row = Math.max(0, length - 1); 894 | position.column = this.getLine(length - 1).length; 895 | } 896 | else { 897 | position.row = Math.max(0, position.row); 898 | position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); 899 | } 900 | return position; 901 | }; 902 | Document.prototype.insertFullLines = function (row, lines) { 903 | row = Math.min(Math.max(row, 0), this.getLength()); 904 | var column = 0; 905 | if (row < this.getLength()) { 906 | lines = lines.concat([""]); 907 | column = 0; 908 | } 909 | else { 910 | lines = [""].concat(lines); 911 | row--; 912 | column = this.$lines[row].length; 913 | } 914 | this.insertMergedLines({ row: row, column: column }, lines); 915 | }; 916 | Document.prototype.insertMergedLines = function (position, lines) { 917 | var start = this.clippedPos(position.row, position.column); 918 | var end = { 919 | row: start.row + lines.length - 1, 920 | column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length 921 | }; 922 | this.applyDelta({ 923 | start: start, 924 | end: end, 925 | action: "insert", 926 | lines: lines 927 | }); 928 | return this.clonePos(end); 929 | }; 930 | Document.prototype.remove = function (range) { 931 | var start = this.clippedPos(range.start.row, range.start.column); 932 | var end = this.clippedPos(range.end.row, range.end.column); 933 | this.applyDelta({ 934 | start: start, 935 | end: end, 936 | action: "remove", 937 | lines: this.getLinesForRange({ start: start, end: end }) 938 | }); 939 | return this.clonePos(start); 940 | }; 941 | Document.prototype.removeInLine = function (row, startColumn, endColumn) { 942 | var start = this.clippedPos(row, startColumn); 943 | var end = this.clippedPos(row, endColumn); 944 | this.applyDelta({ 945 | start: start, 946 | end: end, 947 | action: "remove", 948 | lines: this.getLinesForRange({ start: start, end: end }) 949 | }, true); 950 | return this.clonePos(start); 951 | }; 952 | Document.prototype.removeFullLines = function (firstRow, lastRow) { 953 | firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); 954 | lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1); 955 | var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; 956 | var deleteLastNewLine = lastRow < this.getLength() - 1; 957 | var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow); 958 | var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0); 959 | var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow); 960 | var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length); 961 | var range = new Range(startRow, startCol, endRow, endCol); 962 | var deletedLines = this.$lines.slice(firstRow, lastRow + 1); 963 | this.applyDelta({ 964 | start: range.start, 965 | end: range.end, 966 | action: "remove", 967 | lines: this.getLinesForRange(range) 968 | }); 969 | return deletedLines; 970 | }; 971 | Document.prototype.removeNewLine = function (row) { 972 | if (row < this.getLength() - 1 && row >= 0) { 973 | this.applyDelta({ 974 | start: this.pos(row, this.getLine(row).length), 975 | end: this.pos(row + 1, 0), 976 | action: "remove", 977 | lines: ["", ""] 978 | }); 979 | } 980 | }; 981 | Document.prototype.replace = function (range, text) { 982 | if (!(range instanceof Range)) 983 | range = Range.fromPoints(range.start, range.end); 984 | if (text.length === 0 && range.isEmpty()) 985 | return range.start; 986 | if (text == this.getTextRange(range)) 987 | return range.end; 988 | this.remove(range); 989 | var end; 990 | if (text) { 991 | end = this.insert(range.start, text); 992 | } 993 | else { 994 | end = range.start; 995 | } 996 | return end; 997 | }; 998 | Document.prototype.applyDeltas = function (deltas) { 999 | for (var i = 0; i < deltas.length; i++) { 1000 | this.applyDelta(deltas[i]); 1001 | } 1002 | }; 1003 | Document.prototype.revertDeltas = function (deltas) { 1004 | for (var i = deltas.length - 1; i >= 0; i--) { 1005 | this.revertDelta(deltas[i]); 1006 | } 1007 | }; 1008 | Document.prototype.applyDelta = function (delta, doNotValidate) { 1009 | var isInsert = delta.action == "insert"; 1010 | if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] 1011 | : !Range.comparePoints(delta.start, delta.end)) { 1012 | return; 1013 | } 1014 | if (isInsert && delta.lines.length > 20000) { 1015 | this.$splitAndapplyLargeDelta(delta, 20000); 1016 | } 1017 | else { 1018 | applyDelta(this.$lines, delta, doNotValidate); 1019 | this._signal("change", delta); 1020 | } 1021 | }; 1022 | Document.prototype.$safeApplyDelta = function (delta) { 1023 | var docLength = this.$lines.length; 1024 | if (delta.action == "remove" && delta.start.row < docLength && delta.end.row < docLength 1025 | || delta.action == "insert" && delta.start.row <= docLength) { 1026 | this.applyDelta(delta); 1027 | } 1028 | }; 1029 | Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) { 1030 | var lines = delta.lines; 1031 | var l = lines.length - MAX + 1; 1032 | var row = delta.start.row; 1033 | var column = delta.start.column; 1034 | for (var from = 0, to = 0; from < l; from = to) { 1035 | to += MAX - 1; 1036 | var chunk = lines.slice(from, to); 1037 | chunk.push(""); 1038 | this.applyDelta({ 1039 | start: this.pos(row + from, column), 1040 | end: this.pos(row + to, column = 0), 1041 | action: delta.action, 1042 | lines: chunk 1043 | }, true); 1044 | } 1045 | delta.lines = lines.slice(from); 1046 | delta.start.row = row + from; 1047 | delta.start.column = column; 1048 | this.applyDelta(delta, true); 1049 | }; 1050 | Document.prototype.revertDelta = function (delta) { 1051 | this.$safeApplyDelta({ 1052 | start: this.clonePos(delta.start), 1053 | end: this.clonePos(delta.end), 1054 | action: (delta.action == "insert" ? "remove" : "insert"), 1055 | lines: delta.lines.slice() 1056 | }); 1057 | }; 1058 | Document.prototype.indexToPosition = function (index, startRow) { 1059 | var lines = this.$lines || this.getAllLines(); 1060 | var newlineLength = this.getNewLineCharacter().length; 1061 | for (var i = startRow || 0, l = lines.length; i < l; i++) { 1062 | index -= lines[i].length + newlineLength; 1063 | if (index < 0) 1064 | return { row: i, column: index + lines[i].length + newlineLength }; 1065 | } 1066 | return { row: l - 1, column: index + lines[l - 1].length + newlineLength }; 1067 | }; 1068 | Document.prototype.positionToIndex = function (pos, startRow) { 1069 | var lines = this.$lines || this.getAllLines(); 1070 | var newlineLength = this.getNewLineCharacter().length; 1071 | var index = 0; 1072 | var row = Math.min(pos.row, lines.length); 1073 | for (var i = startRow || 0; i < row; ++i) 1074 | index += lines[i].length + newlineLength; 1075 | return index + pos.column; 1076 | }; 1077 | Document.prototype.$split = function (text) { 1078 | return text.split(/\r\n|\r|\n/); 1079 | }; 1080 | return Document; 1081 | }()); 1082 | Document.prototype.$autoNewLine = ""; 1083 | Document.prototype.$newLineMode = "auto"; 1084 | oop.implement(Document.prototype, EventEmitter); 1085 | exports.Document = Document; 1086 | 1087 | }); 1088 | 1089 | ace.define("ace/lib/deep_copy",[], function(require, exports, module){exports.deepCopy = function deepCopy(obj) { 1090 | if (typeof obj !== "object" || !obj) 1091 | return obj; 1092 | var copy; 1093 | if (Array.isArray(obj)) { 1094 | copy = []; 1095 | for (var key = 0; key < obj.length; key++) { 1096 | copy[key] = deepCopy(obj[key]); 1097 | } 1098 | return copy; 1099 | } 1100 | if (Object.prototype.toString.call(obj) !== "[object Object]") 1101 | return obj; 1102 | copy = {}; 1103 | for (var key in obj) 1104 | copy[key] = deepCopy(obj[key]); 1105 | return copy; 1106 | }; 1107 | 1108 | }); 1109 | 1110 | ace.define("ace/lib/lang",[], function(require, exports, module){"use strict"; 1111 | exports.last = function (a) { 1112 | return a[a.length - 1]; 1113 | }; 1114 | exports.stringReverse = function (string) { 1115 | return string.split("").reverse().join(""); 1116 | }; 1117 | exports.stringRepeat = function (string, count) { 1118 | var result = ''; 1119 | while (count > 0) { 1120 | if (count & 1) 1121 | result += string; 1122 | if (count >>= 1) 1123 | string += string; 1124 | } 1125 | return result; 1126 | }; 1127 | var trimBeginRegexp = /^\s\s*/; 1128 | var trimEndRegexp = /\s\s*$/; 1129 | exports.stringTrimLeft = function (string) { 1130 | return string.replace(trimBeginRegexp, ''); 1131 | }; 1132 | exports.stringTrimRight = function (string) { 1133 | return string.replace(trimEndRegexp, ''); 1134 | }; 1135 | exports.copyObject = function (obj) { 1136 | var copy = {}; 1137 | for (var key in obj) { 1138 | copy[key] = obj[key]; 1139 | } 1140 | return copy; 1141 | }; 1142 | exports.copyArray = function (array) { 1143 | var copy = []; 1144 | for (var i = 0, l = array.length; i < l; i++) { 1145 | if (array[i] && typeof array[i] == "object") 1146 | copy[i] = this.copyObject(array[i]); 1147 | else 1148 | copy[i] = array[i]; 1149 | } 1150 | return copy; 1151 | }; 1152 | exports.deepCopy = require("./deep_copy").deepCopy; 1153 | exports.arrayToMap = function (arr) { 1154 | var map = {}; 1155 | for (var i = 0; i < arr.length; i++) { 1156 | map[arr[i]] = 1; 1157 | } 1158 | return map; 1159 | }; 1160 | exports.createMap = function (props) { 1161 | var map = Object.create(null); 1162 | for (var i in props) { 1163 | map[i] = props[i]; 1164 | } 1165 | return map; 1166 | }; 1167 | exports.arrayRemove = function (array, value) { 1168 | for (var i = 0; i <= array.length; i++) { 1169 | if (value === array[i]) { 1170 | array.splice(i, 1); 1171 | } 1172 | } 1173 | }; 1174 | exports.escapeRegExp = function (str) { 1175 | return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1'); 1176 | }; 1177 | exports.escapeHTML = function (str) { 1178 | return ("" + str).replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/ 0xffff ? 2 : 1; 1256 | }; 1257 | 1258 | }); 1259 | 1260 | ace.define("ace/worker/mirror",[], function(require, exports, module) { 1261 | "use strict"; 1262 | 1263 | var Document = require("../document").Document; 1264 | var lang = require("../lib/lang"); 1265 | 1266 | var Mirror = exports.Mirror = function(sender) { 1267 | this.sender = sender; 1268 | var doc = this.doc = new Document(""); 1269 | 1270 | var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this)); 1271 | 1272 | var _self = this; 1273 | sender.on("change", function(e) { 1274 | var data = e.data; 1275 | if (data[0].start) { 1276 | doc.applyDeltas(data); 1277 | } else { 1278 | for (var i = 0; i < data.length; i += 2) { 1279 | var d, err; 1280 | if (Array.isArray(data[i+1])) { 1281 | d = {action: "insert", start: data[i], lines: data[i+1]}; 1282 | } else { 1283 | d = {action: "remove", start: data[i], end: data[i+1]}; 1284 | } 1285 | 1286 | if ((d.action == "insert" ? d.start : d.end).row >= doc.$lines.length) { 1287 | err = new Error("Invalid delta"); 1288 | err.data = { 1289 | path: _self.$path, 1290 | linesLength: doc.$lines.length, 1291 | start: d.start, 1292 | end: d.end 1293 | }; 1294 | throw err; 1295 | } 1296 | 1297 | doc.applyDelta(d, true); 1298 | } 1299 | } 1300 | if (_self.$timeout) 1301 | return deferredUpdate.schedule(_self.$timeout); 1302 | _self.onUpdate(); 1303 | }); 1304 | }; 1305 | 1306 | (function() { 1307 | 1308 | this.$timeout = 500; 1309 | 1310 | this.setTimeout = function(timeout) { 1311 | this.$timeout = timeout; 1312 | }; 1313 | 1314 | this.setValue = function(value) { 1315 | this.doc.setValue(value); 1316 | this.deferredUpdate.schedule(this.$timeout); 1317 | }; 1318 | 1319 | this.getValue = function(callbackId) { 1320 | this.sender.callback(this.doc.getValue(), callbackId); 1321 | }; 1322 | 1323 | this.onUpdate = function() { 1324 | }; 1325 | 1326 | this.isPending = function() { 1327 | return this.deferredUpdate.isPending(); 1328 | }; 1329 | 1330 | }).call(Mirror.prototype); 1331 | 1332 | }); 1333 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@antfu/utils@^0.7.5": 6 | version "0.7.10" 7 | resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.7.10.tgz#ae829f170158e297a9b6a28f161a8e487d00814d" 8 | integrity sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww== 9 | 10 | "@babel/helper-string-parser@^7.25.9": 11 | version "7.25.9" 12 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" 13 | integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== 14 | 15 | "@babel/helper-validator-identifier@^7.25.9": 16 | version "7.25.9" 17 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" 18 | integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== 19 | 20 | "@babel/parser@^7.25.3": 21 | version "7.26.9" 22 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.9.tgz#d9e78bee6dc80f9efd8f2349dcfbbcdace280fd5" 23 | integrity sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A== 24 | dependencies: 25 | "@babel/types" "^7.26.9" 26 | 27 | "@babel/types@^7.26.9": 28 | version "7.26.9" 29 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.9.tgz#08b43dec79ee8e682c2ac631c010bdcac54a21ce" 30 | integrity sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw== 31 | dependencies: 32 | "@babel/helper-string-parser" "^7.25.9" 33 | "@babel/helper-validator-identifier" "^7.25.9" 34 | 35 | "@dbml/core@2.5.3": 36 | version "2.5.3" 37 | resolved "https://registry.yarnpkg.com/@dbml/core/-/core-2.5.3.tgz#590b66e6a56b4b129048409afcc5b8b5fbaa2914" 38 | integrity sha512-0Y344Ld1eWRu0ypSj0sIoukzszOQa0lLABsagaYGWv7KT1FpqJGu3rh+EV5J1++PK89P/V8dEue6DtCLAqP+JQ== 39 | dependencies: 40 | lodash "^4.17.15" 41 | parsimmon "^1.13.0" 42 | pluralize "^8.0.0" 43 | 44 | "@esbuild/android-arm64@0.18.20": 45 | version "0.18.20" 46 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" 47 | integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== 48 | 49 | "@esbuild/android-arm@0.18.20": 50 | version "0.18.20" 51 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" 52 | integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== 53 | 54 | "@esbuild/android-x64@0.18.20": 55 | version "0.18.20" 56 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" 57 | integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== 58 | 59 | "@esbuild/darwin-arm64@0.18.20": 60 | version "0.18.20" 61 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" 62 | integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== 63 | 64 | "@esbuild/darwin-x64@0.18.20": 65 | version "0.18.20" 66 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" 67 | integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== 68 | 69 | "@esbuild/freebsd-arm64@0.18.20": 70 | version "0.18.20" 71 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" 72 | integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== 73 | 74 | "@esbuild/freebsd-x64@0.18.20": 75 | version "0.18.20" 76 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" 77 | integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== 78 | 79 | "@esbuild/linux-arm64@0.18.20": 80 | version "0.18.20" 81 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" 82 | integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== 83 | 84 | "@esbuild/linux-arm@0.18.20": 85 | version "0.18.20" 86 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" 87 | integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== 88 | 89 | "@esbuild/linux-ia32@0.18.20": 90 | version "0.18.20" 91 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" 92 | integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== 93 | 94 | "@esbuild/linux-loong64@0.18.20": 95 | version "0.18.20" 96 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" 97 | integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== 98 | 99 | "@esbuild/linux-mips64el@0.18.20": 100 | version "0.18.20" 101 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" 102 | integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== 103 | 104 | "@esbuild/linux-ppc64@0.18.20": 105 | version "0.18.20" 106 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" 107 | integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== 108 | 109 | "@esbuild/linux-riscv64@0.18.20": 110 | version "0.18.20" 111 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" 112 | integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== 113 | 114 | "@esbuild/linux-s390x@0.18.20": 115 | version "0.18.20" 116 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" 117 | integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== 118 | 119 | "@esbuild/linux-x64@0.18.20": 120 | version "0.18.20" 121 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" 122 | integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== 123 | 124 | "@esbuild/netbsd-x64@0.18.20": 125 | version "0.18.20" 126 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" 127 | integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== 128 | 129 | "@esbuild/openbsd-x64@0.18.20": 130 | version "0.18.20" 131 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" 132 | integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== 133 | 134 | "@esbuild/sunos-x64@0.18.20": 135 | version "0.18.20" 136 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" 137 | integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== 138 | 139 | "@esbuild/win32-arm64@0.18.20": 140 | version "0.18.20" 141 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" 142 | integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== 143 | 144 | "@esbuild/win32-ia32@0.18.20": 145 | version "0.18.20" 146 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" 147 | integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== 148 | 149 | "@esbuild/win32-x64@0.18.20": 150 | version "0.18.20" 151 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" 152 | integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== 153 | 154 | "@jridgewell/sourcemap-codec@^1.5.0": 155 | version "1.5.0" 156 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" 157 | integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== 158 | 159 | "@nodelib/fs.scandir@2.1.5": 160 | version "2.1.5" 161 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 162 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 163 | dependencies: 164 | "@nodelib/fs.stat" "2.0.5" 165 | run-parallel "^1.1.9" 166 | 167 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 168 | version "2.0.5" 169 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 170 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 171 | 172 | "@nodelib/fs.walk@^1.2.3": 173 | version "1.2.8" 174 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 175 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 176 | dependencies: 177 | "@nodelib/fs.scandir" "2.1.5" 178 | fastq "^1.6.0" 179 | 180 | "@popperjs/core@^2.11": 181 | version "2.11.8" 182 | resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" 183 | integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== 184 | 185 | "@rollup/pluginutils@^5.0.2": 186 | version "5.1.4" 187 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz#bb94f1f9eaaac944da237767cdfee6c5b2262d4a" 188 | integrity sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ== 189 | dependencies: 190 | "@types/estree" "^1.0.0" 191 | estree-walker "^2.0.2" 192 | picomatch "^4.0.2" 193 | 194 | "@types/estree@^1.0.0": 195 | version "1.0.6" 196 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" 197 | integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== 198 | 199 | "@types/js-yaml@^4.0.9": 200 | version "4.0.9" 201 | resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.9.tgz#cd82382c4f902fed9691a2ed79ec68c5898af4c2" 202 | integrity sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg== 203 | 204 | "@types/lodash-es@^4.17.7": 205 | version "4.17.12" 206 | resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b" 207 | integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== 208 | dependencies: 209 | "@types/lodash" "*" 210 | 211 | "@types/lodash@*": 212 | version "4.17.15" 213 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.15.tgz#12d4af0ed17cc7600ce1f9980cec48fc17ad1e89" 214 | integrity sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw== 215 | 216 | "@types/node@^20.2": 217 | version "20.17.19" 218 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.19.tgz#0f2869555719bef266ca6e1827fcdca903c1a697" 219 | integrity sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A== 220 | dependencies: 221 | undici-types "~6.19.2" 222 | 223 | "@types/web-bluetooth@^0.0.20": 224 | version "0.0.20" 225 | resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz#f066abfcd1cbe66267cdbbf0de010d8a41b41597" 226 | integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow== 227 | 228 | "@vitejs/plugin-vue@^4.2": 229 | version "4.6.2" 230 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz#057d2ded94c4e71b94e9814f92dcd9306317aa46" 231 | integrity sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw== 232 | 233 | "@volar/language-core@1.11.1", "@volar/language-core@~1.11.1": 234 | version "1.11.1" 235 | resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.11.1.tgz#ecdf12ea8dc35fb8549e517991abcbf449a5ad4f" 236 | integrity sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw== 237 | dependencies: 238 | "@volar/source-map" "1.11.1" 239 | 240 | "@volar/source-map@1.11.1", "@volar/source-map@~1.11.1": 241 | version "1.11.1" 242 | resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.11.1.tgz#535b0328d9e2b7a91dff846cab4058e191f4452f" 243 | integrity sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg== 244 | dependencies: 245 | muggle-string "^0.3.1" 246 | 247 | "@volar/typescript@~1.11.1": 248 | version "1.11.1" 249 | resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.11.1.tgz#ba86c6f326d88e249c7f5cfe4b765be3946fd627" 250 | integrity sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ== 251 | dependencies: 252 | "@volar/language-core" "1.11.1" 253 | path-browserify "^1.0.1" 254 | 255 | "@vue-flow/background@1.3.2": 256 | version "1.3.2" 257 | resolved "https://registry.yarnpkg.com/@vue-flow/background/-/background-1.3.2.tgz#0c90cd05e5d60da017bbaf5a1c3eb6af7ed9b778" 258 | integrity sha512-eJPhDcLj1wEo45bBoqTXw1uhl0yK2RaQGnEINqvvBsAFKh/camHJd5NPmOdS1w+M9lggc9igUewxaEd3iCQX2w== 259 | 260 | "@vue-flow/controls@1.1.2": 261 | version "1.1.2" 262 | resolved "https://registry.yarnpkg.com/@vue-flow/controls/-/controls-1.1.2.tgz#d71899ed793f741400d043efdd49765a3a94c75f" 263 | integrity sha512-6dtl/JnwDBNau5h3pDBdOCK6tdxiVAOL3cyruRL61gItwq5E97Hmjmj2BIIqX2p7gU1ENg3z80Z4zlu58fGlsg== 264 | 265 | "@vue-flow/core@1.21.0": 266 | version "1.21.0" 267 | resolved "https://registry.yarnpkg.com/@vue-flow/core/-/core-1.21.0.tgz#8d68dd174d22ce08bdf26d7dee2f37fe6ec521e9" 268 | integrity sha512-rnt/ga+Krso66uCyo6bW1/8Gvh9BoDW36i1SNPZU6OEn8NCPE8RqPsaXVNP2cO2eDzJTGcojLjLlqMm9y4ItTA== 269 | dependencies: 270 | "@vueuse/core" "^10.1.2" 271 | d3-drag "^3.0.0" 272 | d3-selection "^3.0.0" 273 | d3-zoom "^3.0.0" 274 | 275 | "@vue-flow/minimap@1.5.2": 276 | version "1.5.2" 277 | resolved "https://registry.yarnpkg.com/@vue-flow/minimap/-/minimap-1.5.2.tgz#8d036800c52ec77bfe1586c74d51c66e017f5ef6" 278 | integrity sha512-XNSpWwwXfCWqJilc2eCW+3ry3r9vhF8HmUw5wrAsUTHiss4R9k5uZLABo7c3T3VdcVRJ8pTfUJ9vjpzb8H+FKg== 279 | dependencies: 280 | d3-selection "^3.0.0" 281 | d3-zoom "^3.0.0" 282 | 283 | "@vue/compiler-core@3.5.13": 284 | version "3.5.13" 285 | resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz#b0ae6c4347f60c03e849a05d34e5bf747c9bda05" 286 | integrity sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q== 287 | dependencies: 288 | "@babel/parser" "^7.25.3" 289 | "@vue/shared" "3.5.13" 290 | entities "^4.5.0" 291 | estree-walker "^2.0.2" 292 | source-map-js "^1.2.0" 293 | 294 | "@vue/compiler-dom@3.5.13", "@vue/compiler-dom@^3.3.0": 295 | version "3.5.13" 296 | resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz#bb1b8758dbc542b3658dda973b98a1c9311a8a58" 297 | integrity sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA== 298 | dependencies: 299 | "@vue/compiler-core" "3.5.13" 300 | "@vue/shared" "3.5.13" 301 | 302 | "@vue/compiler-sfc@3.5.13": 303 | version "3.5.13" 304 | resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz#461f8bd343b5c06fac4189c4fef8af32dea82b46" 305 | integrity sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ== 306 | dependencies: 307 | "@babel/parser" "^7.25.3" 308 | "@vue/compiler-core" "3.5.13" 309 | "@vue/compiler-dom" "3.5.13" 310 | "@vue/compiler-ssr" "3.5.13" 311 | "@vue/shared" "3.5.13" 312 | estree-walker "^2.0.2" 313 | magic-string "^0.30.11" 314 | postcss "^8.4.48" 315 | source-map-js "^1.2.0" 316 | 317 | "@vue/compiler-ssr@3.5.13": 318 | version "3.5.13" 319 | resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz#e771adcca6d3d000f91a4277c972a996d07f43ba" 320 | integrity sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA== 321 | dependencies: 322 | "@vue/compiler-dom" "3.5.13" 323 | "@vue/shared" "3.5.13" 324 | 325 | "@vue/devtools-api@^6.6.3", "@vue/devtools-api@^6.6.4": 326 | version "6.6.4" 327 | resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz#cbe97fe0162b365edc1dba80e173f90492535343" 328 | integrity sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g== 329 | 330 | "@vue/language-core@1.8.27": 331 | version "1.8.27" 332 | resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-1.8.27.tgz#2ca6892cb524e024a44e554e4c55d7a23e72263f" 333 | integrity sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA== 334 | dependencies: 335 | "@volar/language-core" "~1.11.1" 336 | "@volar/source-map" "~1.11.1" 337 | "@vue/compiler-dom" "^3.3.0" 338 | "@vue/shared" "^3.3.0" 339 | computeds "^0.0.1" 340 | minimatch "^9.0.3" 341 | muggle-string "^0.3.1" 342 | path-browserify "^1.0.1" 343 | vue-template-compiler "^2.7.14" 344 | 345 | "@vue/reactivity@3.5.13": 346 | version "3.5.13" 347 | resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.13.tgz#b41ff2bb865e093899a22219f5b25f97b6fe155f" 348 | integrity sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg== 349 | dependencies: 350 | "@vue/shared" "3.5.13" 351 | 352 | "@vue/runtime-core@3.5.13": 353 | version "3.5.13" 354 | resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz#1fafa4bf0b97af0ebdd9dbfe98cd630da363a455" 355 | integrity sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw== 356 | dependencies: 357 | "@vue/reactivity" "3.5.13" 358 | "@vue/shared" "3.5.13" 359 | 360 | "@vue/runtime-dom@3.5.13": 361 | version "3.5.13" 362 | resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz#610fc795de9246300e8ae8865930d534e1246215" 363 | integrity sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog== 364 | dependencies: 365 | "@vue/reactivity" "3.5.13" 366 | "@vue/runtime-core" "3.5.13" 367 | "@vue/shared" "3.5.13" 368 | csstype "^3.1.3" 369 | 370 | "@vue/server-renderer@3.5.13": 371 | version "3.5.13" 372 | resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz#429ead62ee51de789646c22efe908e489aad46f7" 373 | integrity sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA== 374 | dependencies: 375 | "@vue/compiler-ssr" "3.5.13" 376 | "@vue/shared" "3.5.13" 377 | 378 | "@vue/shared@3.5.13", "@vue/shared@^3.3.0": 379 | version "3.5.13" 380 | resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.13.tgz#87b309a6379c22b926e696893237826f64339b6f" 381 | integrity sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ== 382 | 383 | "@vueuse/core@^10.1.2": 384 | version "10.11.1" 385 | resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-10.11.1.tgz#15d2c0b6448d2212235b23a7ba29c27173e0c2c6" 386 | integrity sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww== 387 | dependencies: 388 | "@types/web-bluetooth" "^0.0.20" 389 | "@vueuse/metadata" "10.11.1" 390 | "@vueuse/shared" "10.11.1" 391 | vue-demi ">=0.14.8" 392 | 393 | "@vueuse/metadata@10.11.1": 394 | version "10.11.1" 395 | resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-10.11.1.tgz#209db7bb5915aa172a87510b6de2ca01cadbd2a7" 396 | integrity sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw== 397 | 398 | "@vueuse/shared@10.11.1": 399 | version "10.11.1" 400 | resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-10.11.1.tgz#62b84e3118ae6e1f3ff38f4fbe71b0c5d0f10938" 401 | integrity sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA== 402 | dependencies: 403 | vue-demi ">=0.14.8" 404 | 405 | ace-builds@^1.23: 406 | version "1.38.0" 407 | resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.38.0.tgz#15dd67e3223edfc5ec73c01051ac3d4647e8888a" 408 | integrity sha512-5W3B5/5Rl/dAsp7Fb6xXOc6bCYln+4qOnpQHh4OpxZSoDsp1KFiu5lA3TJBr8/5DQu6+8rlduCGecMSnKuU2MQ== 409 | 410 | acorn@^8.14.0: 411 | version "8.14.0" 412 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" 413 | integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== 414 | 415 | ansi-styles@^4.1.0: 416 | version "4.3.0" 417 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 418 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 419 | dependencies: 420 | color-convert "^2.0.1" 421 | 422 | anymatch@~3.1.2: 423 | version "3.1.3" 424 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 425 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 426 | dependencies: 427 | normalize-path "^3.0.0" 428 | picomatch "^2.0.4" 429 | 430 | argparse@^2.0.1: 431 | version "2.0.1" 432 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 433 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 434 | 435 | balanced-match@^1.0.0: 436 | version "1.0.2" 437 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 438 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 439 | 440 | binary-extensions@^2.0.0: 441 | version "2.3.0" 442 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" 443 | integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== 444 | 445 | brace-expansion@^2.0.1: 446 | version "2.0.1" 447 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 448 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 449 | dependencies: 450 | balanced-match "^1.0.0" 451 | 452 | braces@^3.0.3, braces@~3.0.2: 453 | version "3.0.3" 454 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" 455 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 456 | dependencies: 457 | fill-range "^7.1.1" 458 | 459 | chalk@^4.1.2: 460 | version "4.1.2" 461 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 462 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 463 | dependencies: 464 | ansi-styles "^4.1.0" 465 | supports-color "^7.1.0" 466 | 467 | chokidar@^3.5.3: 468 | version "3.6.0" 469 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" 470 | integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== 471 | dependencies: 472 | anymatch "~3.1.2" 473 | braces "~3.0.2" 474 | glob-parent "~5.1.2" 475 | is-binary-path "~2.1.0" 476 | is-glob "~4.0.1" 477 | normalize-path "~3.0.0" 478 | readdirp "~3.6.0" 479 | optionalDependencies: 480 | fsevents "~2.3.2" 481 | 482 | color-convert@^2.0.1: 483 | version "2.0.1" 484 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 485 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 486 | dependencies: 487 | color-name "~1.1.4" 488 | 489 | color-name@~1.1.4: 490 | version "1.1.4" 491 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 492 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 493 | 494 | computeds@^0.0.1: 495 | version "0.0.1" 496 | resolved "https://registry.yarnpkg.com/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e" 497 | integrity sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q== 498 | 499 | csstype@^3.1.3: 500 | version "3.1.3" 501 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" 502 | integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== 503 | 504 | "d3-color@1 - 3": 505 | version "3.1.0" 506 | resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" 507 | integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== 508 | 509 | "d3-dispatch@1 - 3": 510 | version "3.0.1" 511 | resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e" 512 | integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== 513 | 514 | "d3-drag@2 - 3", d3-drag@^3.0.0: 515 | version "3.0.0" 516 | resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-3.0.0.tgz#994aae9cd23c719f53b5e10e3a0a6108c69607ba" 517 | integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg== 518 | dependencies: 519 | d3-dispatch "1 - 3" 520 | d3-selection "3" 521 | 522 | "d3-ease@1 - 3": 523 | version "3.0.1" 524 | resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4" 525 | integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== 526 | 527 | "d3-interpolate@1 - 3": 528 | version "3.0.1" 529 | resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" 530 | integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== 531 | dependencies: 532 | d3-color "1 - 3" 533 | 534 | "d3-selection@2 - 3", d3-selection@3, d3-selection@^3.0.0: 535 | version "3.0.0" 536 | resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31" 537 | integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ== 538 | 539 | "d3-timer@1 - 3": 540 | version "3.0.1" 541 | resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" 542 | integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== 543 | 544 | "d3-transition@2 - 3": 545 | version "3.0.1" 546 | resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-3.0.1.tgz#6869fdde1448868077fdd5989200cb61b2a1645f" 547 | integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w== 548 | dependencies: 549 | d3-color "1 - 3" 550 | d3-dispatch "1 - 3" 551 | d3-ease "1 - 3" 552 | d3-interpolate "1 - 3" 553 | d3-timer "1 - 3" 554 | 555 | d3-zoom@^3.0.0: 556 | version "3.0.0" 557 | resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-3.0.0.tgz#d13f4165c73217ffeaa54295cd6969b3e7aee8f3" 558 | integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw== 559 | dependencies: 560 | d3-dispatch "1 - 3" 561 | d3-drag "2 - 3" 562 | d3-interpolate "1 - 3" 563 | d3-selection "2 - 3" 564 | d3-transition "2 - 3" 565 | 566 | dagre@^0.8.5: 567 | version "0.8.5" 568 | resolved "https://registry.yarnpkg.com/dagre/-/dagre-0.8.5.tgz#ba30b0055dac12b6c1fcc247817442777d06afee" 569 | integrity sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw== 570 | dependencies: 571 | graphlib "^2.1.8" 572 | lodash "^4.17.15" 573 | 574 | de-indent@^1.0.2: 575 | version "1.0.2" 576 | resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" 577 | integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== 578 | 579 | debug@^4.3.3, debug@^4.3.4: 580 | version "4.4.0" 581 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" 582 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== 583 | dependencies: 584 | ms "^2.1.3" 585 | 586 | entities@^4.5.0: 587 | version "4.5.0" 588 | resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" 589 | integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== 590 | 591 | esbuild@^0.18.10: 592 | version "0.18.20" 593 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" 594 | integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== 595 | optionalDependencies: 596 | "@esbuild/android-arm" "0.18.20" 597 | "@esbuild/android-arm64" "0.18.20" 598 | "@esbuild/android-x64" "0.18.20" 599 | "@esbuild/darwin-arm64" "0.18.20" 600 | "@esbuild/darwin-x64" "0.18.20" 601 | "@esbuild/freebsd-arm64" "0.18.20" 602 | "@esbuild/freebsd-x64" "0.18.20" 603 | "@esbuild/linux-arm" "0.18.20" 604 | "@esbuild/linux-arm64" "0.18.20" 605 | "@esbuild/linux-ia32" "0.18.20" 606 | "@esbuild/linux-loong64" "0.18.20" 607 | "@esbuild/linux-mips64el" "0.18.20" 608 | "@esbuild/linux-ppc64" "0.18.20" 609 | "@esbuild/linux-riscv64" "0.18.20" 610 | "@esbuild/linux-s390x" "0.18.20" 611 | "@esbuild/linux-x64" "0.18.20" 612 | "@esbuild/netbsd-x64" "0.18.20" 613 | "@esbuild/openbsd-x64" "0.18.20" 614 | "@esbuild/sunos-x64" "0.18.20" 615 | "@esbuild/win32-arm64" "0.18.20" 616 | "@esbuild/win32-ia32" "0.18.20" 617 | "@esbuild/win32-x64" "0.18.20" 618 | 619 | estree-walker@^2.0.2: 620 | version "2.0.2" 621 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" 622 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 623 | 624 | fast-glob@^3.3.0: 625 | version "3.3.3" 626 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" 627 | integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== 628 | dependencies: 629 | "@nodelib/fs.stat" "^2.0.2" 630 | "@nodelib/fs.walk" "^1.2.3" 631 | glob-parent "^5.1.2" 632 | merge2 "^1.3.0" 633 | micromatch "^4.0.8" 634 | 635 | fastq@^1.6.0: 636 | version "1.19.0" 637 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.0.tgz#a82c6b7c2bb4e44766d865f07997785fecfdcb89" 638 | integrity sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA== 639 | dependencies: 640 | reusify "^1.0.4" 641 | 642 | fill-range@^7.1.1: 643 | version "7.1.1" 644 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" 645 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 646 | dependencies: 647 | to-regex-range "^5.0.1" 648 | 649 | fs-extra@^10.0.0: 650 | version "10.1.0" 651 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" 652 | integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== 653 | dependencies: 654 | graceful-fs "^4.2.0" 655 | jsonfile "^6.0.1" 656 | universalify "^2.0.0" 657 | 658 | fsevents@~2.3.2: 659 | version "2.3.3" 660 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" 661 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 662 | 663 | function-bind@^1.1.2: 664 | version "1.1.2" 665 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" 666 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 667 | 668 | glob-parent@^5.1.2, glob-parent@~5.1.2: 669 | version "5.1.2" 670 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 671 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 672 | dependencies: 673 | is-glob "^4.0.1" 674 | 675 | graceful-fs@^4.1.6, graceful-fs@^4.2.0: 676 | version "4.2.11" 677 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 678 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 679 | 680 | graphlib@^2.1.8: 681 | version "2.1.8" 682 | resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.8.tgz#5761d414737870084c92ec7b5dbcb0592c9d35da" 683 | integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A== 684 | dependencies: 685 | lodash "^4.17.15" 686 | 687 | has-flag@^4.0.0: 688 | version "4.0.0" 689 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 690 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 691 | 692 | hasown@^2.0.2: 693 | version "2.0.2" 694 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" 695 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== 696 | dependencies: 697 | function-bind "^1.1.2" 698 | 699 | he@^1.2.0: 700 | version "1.2.0" 701 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 702 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 703 | 704 | is-binary-path@~2.1.0: 705 | version "2.1.0" 706 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 707 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 708 | dependencies: 709 | binary-extensions "^2.0.0" 710 | 711 | is-core-module@^2.16.0: 712 | version "2.16.1" 713 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" 714 | integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== 715 | dependencies: 716 | hasown "^2.0.2" 717 | 718 | is-extglob@^2.1.1: 719 | version "2.1.1" 720 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 721 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 722 | 723 | is-glob@^4.0.1, is-glob@~4.0.1: 724 | version "4.0.3" 725 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 726 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 727 | dependencies: 728 | is-extglob "^2.1.1" 729 | 730 | is-number@^7.0.0: 731 | version "7.0.0" 732 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 733 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 734 | 735 | js-yaml@^4.1.0: 736 | version "4.1.0" 737 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 738 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 739 | dependencies: 740 | argparse "^2.0.1" 741 | 742 | jsonfile@^6.0.1: 743 | version "6.1.0" 744 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" 745 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== 746 | dependencies: 747 | universalify "^2.0.0" 748 | optionalDependencies: 749 | graceful-fs "^4.1.6" 750 | 751 | local-pkg@^0.4.3: 752 | version "0.4.3" 753 | resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" 754 | integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== 755 | 756 | lodash-es@4.17.21: 757 | version "4.17.21" 758 | resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" 759 | integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== 760 | 761 | lodash@^4.17.15: 762 | version "4.17.21" 763 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 764 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 765 | 766 | magic-string@^0.30.1, magic-string@^0.30.11: 767 | version "0.30.17" 768 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" 769 | integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== 770 | dependencies: 771 | "@jridgewell/sourcemap-codec" "^1.5.0" 772 | 773 | merge2@^1.3.0: 774 | version "1.4.1" 775 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 776 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 777 | 778 | micromatch@^4.0.5, micromatch@^4.0.8: 779 | version "4.0.8" 780 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" 781 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== 782 | dependencies: 783 | braces "^3.0.3" 784 | picomatch "^2.3.1" 785 | 786 | minimatch@^9.0.3: 787 | version "9.0.5" 788 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" 789 | integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== 790 | dependencies: 791 | brace-expansion "^2.0.1" 792 | 793 | ms@^2.1.3: 794 | version "2.1.3" 795 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 796 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 797 | 798 | muggle-string@^0.3.1: 799 | version "0.3.1" 800 | resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.3.1.tgz#e524312eb1728c63dd0b2ac49e3282e6ed85963a" 801 | integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== 802 | 803 | nanoid@^3.3.8: 804 | version "3.3.8" 805 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" 806 | integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== 807 | 808 | normalize-path@^3.0.0, normalize-path@~3.0.0: 809 | version "3.0.0" 810 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 811 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 812 | 813 | parsimmon@^1.13.0: 814 | version "1.18.1" 815 | resolved "https://registry.yarnpkg.com/parsimmon/-/parsimmon-1.18.1.tgz#d8dd9c28745647d02fc6566f217690897eed7709" 816 | integrity sha512-u7p959wLfGAhJpSDJVYXoyMCXWYwHia78HhRBWqk7AIbxdmlrfdp5wX0l3xv/iTSH5HvhN9K7o26hwwpgS5Nmw== 817 | 818 | path-browserify@^1.0.1: 819 | version "1.0.1" 820 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" 821 | integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== 822 | 823 | path-parse@^1.0.7: 824 | version "1.0.7" 825 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 826 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 827 | 828 | picocolors@^1.1.1: 829 | version "1.1.1" 830 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" 831 | integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== 832 | 833 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 834 | version "2.3.1" 835 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 836 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 837 | 838 | picomatch@^4.0.2: 839 | version "4.0.2" 840 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" 841 | integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== 842 | 843 | pinia@^2.1: 844 | version "2.3.1" 845 | resolved "https://registry.yarnpkg.com/pinia/-/pinia-2.3.1.tgz#54c476675b72f5abcfafa24a7582531ea8c23d94" 846 | integrity sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug== 847 | dependencies: 848 | "@vue/devtools-api" "^6.6.3" 849 | vue-demi "^0.14.10" 850 | 851 | pluralize@^8.0.0: 852 | version "8.0.0" 853 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" 854 | integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== 855 | 856 | postcss@^8.4.27, postcss@^8.4.48: 857 | version "8.5.2" 858 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.2.tgz#e7b99cb9d2ec3e8dd424002e7c16517cb2b846bd" 859 | integrity sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA== 860 | dependencies: 861 | nanoid "^3.3.8" 862 | picocolors "^1.1.1" 863 | source-map-js "^1.2.1" 864 | 865 | queue-microtask@^1.2.2: 866 | version "1.2.3" 867 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 868 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 869 | 870 | readdirp@~3.6.0: 871 | version "3.6.0" 872 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 873 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 874 | dependencies: 875 | picomatch "^2.2.1" 876 | 877 | resize-observer-polyfill@^1.5.1: 878 | version "1.5.1" 879 | resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" 880 | integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== 881 | 882 | resolve@^1.22.2: 883 | version "1.22.10" 884 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" 885 | integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== 886 | dependencies: 887 | is-core-module "^2.16.0" 888 | path-parse "^1.0.7" 889 | supports-preserve-symlinks-flag "^1.0.0" 890 | 891 | reusify@^1.0.4: 892 | version "1.0.4" 893 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 894 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 895 | 896 | rollup@^3.27.1: 897 | version "3.29.5" 898 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.5.tgz#8a2e477a758b520fb78daf04bca4c522c1da8a54" 899 | integrity sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w== 900 | optionalDependencies: 901 | fsevents "~2.3.2" 902 | 903 | run-parallel@^1.1.9: 904 | version "1.2.0" 905 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 906 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 907 | dependencies: 908 | queue-microtask "^1.2.2" 909 | 910 | semver@^7.5.4: 911 | version "7.7.1" 912 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" 913 | integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== 914 | 915 | source-map-js@^1.2.0, source-map-js@^1.2.1: 916 | version "1.2.1" 917 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" 918 | integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== 919 | 920 | supports-color@^7.1.0: 921 | version "7.2.0" 922 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 923 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 924 | dependencies: 925 | has-flag "^4.0.0" 926 | 927 | supports-preserve-symlinks-flag@^1.0.0: 928 | version "1.0.0" 929 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 930 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 931 | 932 | to-regex-range@^5.0.1: 933 | version "5.0.1" 934 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 935 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 936 | dependencies: 937 | is-number "^7.0.0" 938 | 939 | typescript@^4.9: 940 | version "4.9.5" 941 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" 942 | integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== 943 | 944 | undici-types@~6.19.2: 945 | version "6.19.8" 946 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" 947 | integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== 948 | 949 | universalify@^2.0.0: 950 | version "2.0.1" 951 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" 952 | integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== 953 | 954 | unplugin-vue-components@^0.25: 955 | version "0.25.2" 956 | resolved "https://registry.yarnpkg.com/unplugin-vue-components/-/unplugin-vue-components-0.25.2.tgz#99d9d02a4066a24e720edbe74a82a4ee6ff86153" 957 | integrity sha512-OVmLFqILH6w+eM8fyt/d/eoJT9A6WO51NZLf1vC5c1FZ4rmq2bbGxTy8WP2Jm7xwFdukaIdv819+UI7RClPyCA== 958 | dependencies: 959 | "@antfu/utils" "^0.7.5" 960 | "@rollup/pluginutils" "^5.0.2" 961 | chokidar "^3.5.3" 962 | debug "^4.3.4" 963 | fast-glob "^3.3.0" 964 | local-pkg "^0.4.3" 965 | magic-string "^0.30.1" 966 | minimatch "^9.0.3" 967 | resolve "^1.22.2" 968 | unplugin "^1.4.0" 969 | 970 | unplugin@^1.4.0: 971 | version "1.16.1" 972 | resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.16.1.tgz#a844d2e3c3b14a4ac2945c42be80409321b61199" 973 | integrity sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w== 974 | dependencies: 975 | acorn "^8.14.0" 976 | webpack-virtual-modules "^0.6.2" 977 | 978 | vite-plugin-compression@0.5.1: 979 | version "0.5.1" 980 | resolved "https://registry.yarnpkg.com/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz#a75b0d8f48357ebb377b65016da9f20885ef39b6" 981 | integrity sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg== 982 | dependencies: 983 | chalk "^4.1.2" 984 | debug "^4.3.3" 985 | fs-extra "^10.0.0" 986 | 987 | vite-plugin-singlefile@0.13.5: 988 | version "0.13.5" 989 | resolved "https://registry.yarnpkg.com/vite-plugin-singlefile/-/vite-plugin-singlefile-0.13.5.tgz#9465dbb0b06afb2a73600a50fcce4b51c8d10999" 990 | integrity sha512-y/aRGh8qHmw2f1IhaI/C6PJAaov47ESYDvUv1am1YHMhpY+19B5k5Odp8P+tgs+zhfvak6QB1ykrALQErEAo7g== 991 | dependencies: 992 | micromatch "^4.0.5" 993 | 994 | vite@^4.4: 995 | version "4.5.9" 996 | resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.9.tgz#f4dfd4c4295743b50c3e3f90df798d70de699e4f" 997 | integrity sha512-qK9W4xjgD3gXbC0NmdNFFnVFLMWSNiR3swj957yutwzzN16xF/E7nmtAyp1rT9hviDroQANjE4HK3H4WqWdFtw== 998 | dependencies: 999 | esbuild "^0.18.10" 1000 | postcss "^8.4.27" 1001 | rollup "^3.27.1" 1002 | optionalDependencies: 1003 | fsevents "~2.3.2" 1004 | 1005 | vue-demi@>=0.14.8, vue-demi@^0.14.10: 1006 | version "0.14.10" 1007 | resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.10.tgz#afc78de3d6f9e11bf78c55e8510ee12814522f04" 1008 | integrity sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg== 1009 | 1010 | vue-router@^4.2: 1011 | version "4.5.0" 1012 | resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.5.0.tgz#58fc5fe374e10b6018f910328f756c3dae081f14" 1013 | integrity sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w== 1014 | dependencies: 1015 | "@vue/devtools-api" "^6.6.4" 1016 | 1017 | vue-template-compiler@^2.7.14: 1018 | version "2.7.16" 1019 | resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz#c81b2d47753264c77ac03b9966a46637482bb03b" 1020 | integrity sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ== 1021 | dependencies: 1022 | de-indent "^1.0.2" 1023 | he "^1.2.0" 1024 | 1025 | vue-tsc@^1.8: 1026 | version "1.8.27" 1027 | resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.8.27.tgz#feb2bb1eef9be28017bb9e95e2bbd1ebdd48481c" 1028 | integrity sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg== 1029 | dependencies: 1030 | "@volar/typescript" "~1.11.1" 1031 | "@vue/language-core" "1.8.27" 1032 | semver "^7.5.4" 1033 | 1034 | vue3-ace-editor@^2.2.2: 1035 | version "2.2.4" 1036 | resolved "https://registry.yarnpkg.com/vue3-ace-editor/-/vue3-ace-editor-2.2.4.tgz#1f2a787f91cf7979f27fab29e0e0604bb3ee1c17" 1037 | integrity sha512-FZkEyfpbH068BwjhMyNROxfEI8135Sc+x8ouxkMdCNkuj/Tuw83VP/gStFQqZHqljyX9/VfMTCdTqtOnJZGN8g== 1038 | dependencies: 1039 | resize-observer-polyfill "^1.5.1" 1040 | 1041 | vue@^3.3: 1042 | version "3.5.13" 1043 | resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.13.tgz#9f760a1a982b09c0c04a867903fc339c9f29ec0a" 1044 | integrity sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ== 1045 | dependencies: 1046 | "@vue/compiler-dom" "3.5.13" 1047 | "@vue/compiler-sfc" "3.5.13" 1048 | "@vue/runtime-dom" "3.5.13" 1049 | "@vue/server-renderer" "3.5.13" 1050 | "@vue/shared" "3.5.13" 1051 | 1052 | webpack-virtual-modules@^0.6.2: 1053 | version "0.6.2" 1054 | resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz#057faa9065c8acf48f24cb57ac0e77739ab9a7e8" 1055 | integrity sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== 1056 | --------------------------------------------------------------------------------