ramulus 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/lib/git.js +121 -38
- package/lib/server.js +62 -18
- package/package.json +1 -1
- package/ui/assets/abap-08VXUWAP.js +1 -0
- package/ui/assets/apex-BWPQTe0t.js +1 -0
- package/ui/assets/azcli-Bc_sGQ0U.js +1 -0
- package/ui/assets/bat-i0X4ZdIN.js +1 -0
- package/ui/assets/bicep-B5-_aFwp.js +2 -0
- package/ui/assets/cameligo-DMUM7wLl.js +1 -0
- package/ui/assets/clojure-Cm7r79vr.js +1 -0
- package/ui/assets/codicon-CMYWzYni.ttf +0 -0
- package/ui/assets/coffee-Ba7i2nA0.js +1 -0
- package/ui/assets/cpp-C7h46wYY.js +1 -0
- package/ui/assets/csharp-BKxtCVv1.js +1 -0
- package/ui/assets/csp-bTuwJoIa.js +1 -0
- package/ui/assets/css-DIMkf-bt.js +3 -0
- package/ui/assets/cypher-CVaqCwHa.js +1 -0
- package/ui/assets/dart-onAF5SnQ.js +1 -0
- package/ui/assets/dockerfile-DZFCIeNp.js +1 -0
- package/ui/assets/ecl-94qehhXe.js +1 -0
- package/ui/assets/editor.worker-CRz__AKW.js +33 -0
- package/ui/assets/elixir-6RTg0lbw.js +1 -0
- package/ui/assets/flow9-C5_-GSwl.js +1 -0
- package/ui/assets/freemarker2-BlGXrA-A.js +3 -0
- package/ui/assets/fsharp-C8Ef5oNN.js +1 -0
- package/ui/assets/go-C-y9NEjX.js +1 -0
- package/ui/assets/graphql-fmXr3nnJ.js +1 -0
- package/ui/assets/handlebars-LPEBxqHA.js +1 -0
- package/ui/assets/hcl-CpzslTdj.js +1 -0
- package/ui/assets/html-YG0QzO_T.js +1 -0
- package/ui/assets/index-C3J2ZtyL.css +1 -0
- package/ui/assets/index-DGyYZKip.js +94 -0
- package/ui/assets/ini-sBoK_t0W.js +1 -0
- package/ui/assets/java-BEtHBSE6.js +1 -0
- package/ui/assets/javascript-qsd2ARJx.js +1 -0
- package/ui/assets/julia-Bri6UV-V.js +1 -0
- package/ui/assets/kotlin-BOotOW0E.js +1 -0
- package/ui/assets/less-B9JPFI3C.js +2 -0
- package/ui/assets/lexon-CfSJPG6W.js +1 -0
- package/ui/assets/liquid-CBEitul5.js +1 -0
- package/ui/assets/lua-CsQS60Ue.js +1 -0
- package/ui/assets/m3-D-oSqn_W.js +1 -0
- package/ui/assets/markdown-Cimd5fb3.js +1 -0
- package/ui/assets/mdx-981CEmH4.js +1 -0
- package/ui/assets/mips-CIPQ_RoX.js +1 -0
- package/ui/assets/monaco-B8SpYXrn.js +936 -0
- package/ui/assets/monaco-VgaQCy5f.css +1 -0
- package/ui/assets/msdax-DauUninz.js +1 -0
- package/ui/assets/mysql-SOo6toE5.js +1 -0
- package/ui/assets/objective-c-FvmIjYaQ.js +1 -0
- package/ui/assets/pascal-DrH0SRf2.js +1 -0
- package/ui/assets/pascaligo-D-ptJ9y-.js +1 -0
- package/ui/assets/perl-oz_6vUea.js +1 -0
- package/ui/assets/pgsql-DTj74zXo.js +1 -0
- package/ui/assets/php-nr791fC2.js +1 -0
- package/ui/assets/pla-CopQ2nXW.js +1 -0
- package/ui/assets/postiats-43DmfD33.js +1 -0
- package/ui/assets/powerquery-D3hlyOfw.js +1 -0
- package/ui/assets/powershell-DmHpPYUd.js +1 -0
- package/ui/assets/protobuf-C531GsRP.js +2 -0
- package/ui/assets/pug-Z5eAx3Zn.js +1 -0
- package/ui/assets/python-79OaDx-C.js +1 -0
- package/ui/assets/qsharp-DkqhCAOL.js +1 -0
- package/ui/assets/r-BwWrilGY.js +1 -0
- package/ui/assets/razor-DEouJLck.js +1 -0
- package/ui/assets/redis-ClamHrr6.js +1 -0
- package/ui/assets/redshift-DT7zqm-g.js +1 -0
- package/ui/assets/restructuredtext-BYgofb2h.js +1 -0
- package/ui/assets/ruby-DezsRK8O.js +1 -0
- package/ui/assets/rust-DdL9SqIa.js +1 -0
- package/ui/assets/sb-CcwsVR0C.js +1 -0
- package/ui/assets/scala-DHpiXF5c.js +1 -0
- package/ui/assets/scheme-BeGwcela.js +1 -0
- package/ui/assets/scss-gp-XZpBa.js +3 -0
- package/ui/assets/shell-CC2rA5mh.js +1 -0
- package/ui/assets/solidity-BEEn4gHE.js +1 -0
- package/ui/assets/sophia-CRfGWb83.js +1 -0
- package/ui/assets/sparql-D_Lu-MrJ.js +1 -0
- package/ui/assets/sql-NEE52Syq.js +1 -0
- package/ui/assets/st-DbInun42.js +1 -0
- package/ui/assets/swift-Bxkupp3x.js +1 -0
- package/ui/assets/systemverilog-Bz4Y3fRF.js +1 -0
- package/ui/assets/tcl-DISqw1ZD.js +1 -0
- package/ui/assets/twig-De2hgUGE.js +1 -0
- package/ui/assets/typescript-BP2ty2iA.js +1 -0
- package/ui/assets/typespec-B8J7ngcE.js +1 -0
- package/ui/assets/vb-DV3o63ZY.js +1 -0
- package/ui/assets/wgsl-DpFanUEy.js +298 -0
- package/ui/assets/xml-C6T7H_2u.js +1 -0
- package/ui/assets/yaml-DN3MdYQq.js +1 -0
- package/ui/index.html +2 -2
- package/ui/assets/index-ArxayBFH.css +0 -1
- package/ui/assets/index-D3gOH5eP.js +0 -101
package/README.md
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
# Ramulus
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A local-first Git GUI. Every branch in one graph, editor-grade diffs, and your repositories in tabs. No account, no cloud, no telemetry.
|
|
4
4
|
|
|
5
5
|
```sh
|
|
6
6
|
npx ramulus # in a repository
|
|
7
7
|
npx ramulus ~/code/app # or point it at one
|
|
8
8
|
```
|
|
9
9
|
|
|
10
|
+

|
|
11
|
+
|
|
10
12
|
Options: `--port N` to pick a port, `--no-open` to only print the URL.
|
|
11
13
|
|
|
12
14
|
- Needs Node 20 or newer and `git` on your PATH. Works on macOS, Windows and Linux.
|
|
13
15
|
- Everything runs through your installed git, so SSH keys, credential helpers, hooks and LFS behave exactly as on the command line.
|
|
14
16
|
- The server listens on 127.0.0.1 only and every request carries a per-run token, so other pages and other machines cannot reach your repository.
|
|
15
17
|
- Commit graph with lanes, branches, tags, stashes, staging with diffs, commit and amend, merge, rebase, cherry-pick, revert, reset, fetch, pull, push, and a banner with Continue and Abort when a merge or rebase stops on conflicts.
|
|
18
|
+
- Open several repositories side by side in tabs, from recent repositories, the system folder picker or a typed path.
|
|
19
|
+
- A movable, resizable diff window on Monaco where every opened file is a tab, with side-by-side or inline layout, hidden-region folds, an editable working-tree side saved with ⌘S, and block-level stage, unstage and discard; drag a branch label onto a commit to merge or rebase; solo branches; command palette (⌘⇧P); shortcuts list (?); tree or flat file lists with +/− counts; resizable panels; status bar; light and dark themes.
|
|
16
20
|
|
|
17
21
|
Source and the native desktop app: https://github.com/a-ahandani/ramulus
|
package/lib/git.js
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
|
-
import { execFile } from 'node:child_process'
|
|
1
|
+
import { execFile, spawn } from 'node:child_process'
|
|
2
2
|
import { existsSync, statSync } from 'node:fs'
|
|
3
|
-
import {
|
|
3
|
+
import { lstat, readFile, writeFile } from 'node:fs/promises'
|
|
4
|
+
import { join, resolve, sep } from 'node:path'
|
|
4
5
|
|
|
5
6
|
const NUL = '\0'
|
|
6
7
|
const RS = '\x1e'
|
|
7
8
|
|
|
8
|
-
export function run(dir, args, { input, allowFail = false } = {}) {
|
|
9
|
+
export function run(dir, args, { input, allowFail = false, buffer = false } = {}) {
|
|
9
10
|
return new Promise((resolve, reject) => {
|
|
10
11
|
const child = execFile(
|
|
11
12
|
'git',
|
|
12
13
|
args,
|
|
13
|
-
{ cwd: dir, maxBuffer: 256 * 1024 * 1024, env: { ...process.env, GIT_TERMINAL_PROMPT: '0', GIT_OPTIONAL_LOCKS: '0', LC_ALL: 'C' } },
|
|
14
|
+
{ cwd: dir, maxBuffer: 256 * 1024 * 1024, encoding: buffer ? 'buffer' : 'utf8', env: { ...process.env, GIT_TERMINAL_PROMPT: '0', GIT_OPTIONAL_LOCKS: '0', LC_ALL: 'C' } },
|
|
14
15
|
(err, stdout, stderr) => {
|
|
15
16
|
if (err && !allowFail) {
|
|
16
17
|
const msg = (stderr || stdout || err.message).toString().trim()
|
|
17
18
|
reject(new Error(msg || `git ${args[0]} failed`))
|
|
18
19
|
} else {
|
|
19
|
-
resolve({ ok: !err, stdout: stdout.toString(), stderr: stderr.toString() })
|
|
20
|
+
resolve({ ok: !err, stdout: buffer ? stdout : stdout.toString(), stderr: stderr.toString() })
|
|
20
21
|
}
|
|
21
22
|
},
|
|
22
23
|
)
|
|
@@ -78,9 +79,35 @@ export function parseStatus(porcelainZ) {
|
|
|
78
79
|
return out
|
|
79
80
|
}
|
|
80
81
|
|
|
82
|
+
function parseNumstat(text) {
|
|
83
|
+
const out = new Map()
|
|
84
|
+
for (const line of text.split('\n')) {
|
|
85
|
+
const [a, d, ...rest] = line.split('\t')
|
|
86
|
+
const path = rest.join('\t')
|
|
87
|
+
if (!path) continue
|
|
88
|
+
out.set(path.includes(' => ') ? path.split(' => ').pop().replace(/\}$/, '') : path, { added: a === '-' ? 0 : Number(a), deleted: d === '-' ? 0 : Number(d) })
|
|
89
|
+
}
|
|
90
|
+
return out
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function withStats(files, stats) {
|
|
94
|
+
for (const f of files) {
|
|
95
|
+
const s = stats.get(f.path)
|
|
96
|
+
if (s) Object.assign(f, s)
|
|
97
|
+
}
|
|
98
|
+
return files
|
|
99
|
+
}
|
|
100
|
+
|
|
81
101
|
export async function status(dir) {
|
|
82
|
-
const
|
|
83
|
-
|
|
102
|
+
const [st, unstagedStats, stagedStats] = await Promise.all([
|
|
103
|
+
run(dir, ['status', '--porcelain=v1', '-z', '--untracked-files=all']),
|
|
104
|
+
run(dir, ['diff', '--numstat', '-M'], { allowFail: true }),
|
|
105
|
+
run(dir, ['diff', '--numstat', '-M', '--cached'], { allowFail: true }),
|
|
106
|
+
])
|
|
107
|
+
const parsed = parseStatus(st.stdout)
|
|
108
|
+
withStats(parsed.unstaged, parseNumstat(unstagedStats.stdout))
|
|
109
|
+
withStats(parsed.staged, parseNumstat(stagedStats.stdout))
|
|
110
|
+
return { ...parsed, state: await stateOf(dir) }
|
|
84
111
|
}
|
|
85
112
|
|
|
86
113
|
export function parseLog(text, stashInfo) {
|
|
@@ -115,15 +142,17 @@ export async function load(dir, limit = 2000) {
|
|
|
115
142
|
const local = []
|
|
116
143
|
const remote = []
|
|
117
144
|
const tags = []
|
|
118
|
-
const refs = await run(dir, ['for-each-ref', '--format=%(refname)%00%(objectname)%00%(*objectname)%00%(symref)', 'refs/heads', 'refs/remotes', 'refs/tags'])
|
|
145
|
+
const refs = await run(dir, ['for-each-ref', '--format=%(refname)%00%(objectname)%00%(*objectname)%00%(symref)%00%(upstream:short)%00%(upstream:track)', 'refs/heads', 'refs/remotes', 'refs/tags'])
|
|
119
146
|
for (const line of refs.stdout.split('\n')) {
|
|
120
147
|
if (!line) continue
|
|
121
|
-
const [refname, objectname, peeled, symref] = line.split(NUL)
|
|
148
|
+
const [refname, objectname, peeled, symref, upstream, track] = line.split(NUL)
|
|
122
149
|
if (symref) continue
|
|
123
150
|
const oid = peeled || objectname
|
|
124
151
|
if (refname.startsWith('refs/heads/')) {
|
|
125
152
|
const name = refname.slice(11)
|
|
126
|
-
|
|
153
|
+
const ahead = Number(/ahead (\d+)/.exec(track ?? '')?.[1] ?? 0)
|
|
154
|
+
const behind = Number(/behind (\d+)/.exec(track ?? '')?.[1] ?? 0)
|
|
155
|
+
local.push({ name, oid, isHead: name === headBranch, upstream: upstream || undefined, ahead, behind, gone: /gone/.test(track ?? '') })
|
|
127
156
|
addRef(oid, { name, kind: 'head', current: name === headBranch })
|
|
128
157
|
} else if (refname.startsWith('refs/remotes/')) {
|
|
129
158
|
const name = refname.slice(13)
|
|
@@ -181,8 +210,8 @@ async function parentOf(dir, oid) {
|
|
|
181
210
|
|
|
182
211
|
export async function commitFiles(dir, oid) {
|
|
183
212
|
const parent = await parentOf(dir, oid)
|
|
184
|
-
const args = parent ? ['diff-tree', '-r', '-z', '-M', '--name-status', parent, oid] : ['diff-tree', '--root', '-r', '-z', '-M', '--name-status', oid]
|
|
185
|
-
const { stdout } = await run(dir, args)
|
|
213
|
+
const args = parent ? ['diff-tree', '-r', '-z', '-M', '--name-status', parent, oid] : ['diff-tree', '--root', '--no-commit-id', '-r', '-z', '-M', '--name-status', oid]
|
|
214
|
+
const [{ stdout }, stats] = await Promise.all([run(dir, args), run(dir, args.map((a) => (a === '--name-status' ? '--numstat' : a)).filter((a) => a !== '-z'), { allowFail: true })])
|
|
186
215
|
const parts = stdout.split(NUL)
|
|
187
216
|
const out = []
|
|
188
217
|
for (let i = 0; i < parts.length - 1; i += 2) {
|
|
@@ -195,42 +224,96 @@ export async function commitFiles(dir, oid) {
|
|
|
195
224
|
if (!path) continue
|
|
196
225
|
out.push({ path, kind: code === 'A' ? 'A' : code === 'D' ? 'D' : 'M' })
|
|
197
226
|
}
|
|
198
|
-
return out
|
|
227
|
+
return withStats(out, parseNumstat(stats.stdout))
|
|
199
228
|
}
|
|
200
229
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
lines.push({ type: 'hunk', text: raw })
|
|
208
|
-
} else if (raw.startsWith('Binary files')) {
|
|
209
|
-
lines.push({ type: 'note', text: 'Binary file' })
|
|
210
|
-
} else if (!inHunk) {
|
|
211
|
-
continue
|
|
212
|
-
} else if (raw.startsWith('+')) lines.push({ type: 'add', text: raw.slice(1) })
|
|
213
|
-
else if (raw.startsWith('-')) lines.push({ type: 'del', text: raw.slice(1) })
|
|
214
|
-
else if (raw.startsWith(' ')) lines.push({ type: 'ctx', text: raw.slice(1) })
|
|
215
|
-
else if (raw.startsWith('\\')) lines.push({ type: 'note', text: raw })
|
|
216
|
-
}
|
|
217
|
-
return lines
|
|
230
|
+
const MAX_TEXT = 2_000_000
|
|
231
|
+
|
|
232
|
+
function isBinary(buf) {
|
|
233
|
+
const n = Math.min(buf.length, 8000)
|
|
234
|
+
for (let i = 0; i < n; i++) if (buf[i] === 0) return true
|
|
235
|
+
return false
|
|
218
236
|
}
|
|
219
237
|
|
|
220
|
-
|
|
238
|
+
async function showBytes(dir, spec) {
|
|
239
|
+
const size = await run(dir, ['cat-file', '-s', spec], { allowFail: true })
|
|
240
|
+
if (!size.ok) return undefined
|
|
241
|
+
if (Number(size.stdout) > MAX_TEXT) return 'big'
|
|
242
|
+
const r = await run(dir, ['cat-file', '--filters', spec], { allowFail: true, buffer: true })
|
|
243
|
+
return r.ok ? r.stdout : undefined
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
export async function fileVersions(dir, area, path) {
|
|
221
247
|
safePaths([path])
|
|
222
|
-
let
|
|
248
|
+
let oldData
|
|
249
|
+
let newData
|
|
223
250
|
if (area.kind === 'commit') {
|
|
224
251
|
const parent = await parentOf(dir, area.oid)
|
|
225
|
-
|
|
252
|
+
oldData = parent ? await showBytes(dir, `${parent}:${path}`) : undefined
|
|
253
|
+
newData = await showBytes(dir, `${safeName(area.oid)}:${path}`)
|
|
226
254
|
} else if (area.kind === 'staged') {
|
|
227
|
-
|
|
255
|
+
oldData = await showBytes(dir, `HEAD:${path}`)
|
|
256
|
+
newData = await showBytes(dir, `:${path}`)
|
|
228
257
|
} else {
|
|
229
|
-
|
|
230
|
-
|
|
258
|
+
oldData = (await showBytes(dir, `:${path}`)) ?? (await showBytes(dir, `HEAD:${path}`))
|
|
259
|
+
const full = insideRepo(dir, path)
|
|
260
|
+
const st = await lstat(full).catch(() => undefined)
|
|
261
|
+
newData = !st ? undefined : st.isSymbolicLink() || st.size > MAX_TEXT ? 'big' : await readFile(full)
|
|
231
262
|
}
|
|
232
|
-
const
|
|
233
|
-
return
|
|
263
|
+
const binary = [oldData, newData].some((b) => b === 'big' || (b && isBinary(b)))
|
|
264
|
+
return { old: binary || !oldData ? '' : oldData.toString('utf8'), new: binary || !newData ? '' : newData.toString('utf8'), binary }
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
const CHANGED = 'The file changed since this diff was loaded. Look at it again and retry.'
|
|
268
|
+
|
|
269
|
+
export async function writeIndex(dir, path, content, expected) {
|
|
270
|
+
safePaths([path])
|
|
271
|
+
if (expected !== undefined) {
|
|
272
|
+
const cur = await showBytes(dir, `:${path}`)
|
|
273
|
+
if ((cur && cur !== 'big' ? cur.toString('utf8') : '') !== expected) throw new Error(CHANGED)
|
|
274
|
+
}
|
|
275
|
+
const oid = (await run(dir, ['hash-object', '-w', '--stdin', `--path=${path}`], { input: content })).stdout.trim()
|
|
276
|
+
const entry = (await run(dir, ['ls-files', '-s', '--', path], { allowFail: true })).stdout.trim()
|
|
277
|
+
const mode = entry ? entry.split(' ')[0] : '100644'
|
|
278
|
+
await run(dir, ['update-index', '--add', '--cacheinfo', `${mode},${oid},${path}`])
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
function insideRepo(dir, path) {
|
|
282
|
+
const full = resolve(dir, path)
|
|
283
|
+
if (!full.startsWith(resolve(dir) + sep)) throw new Error('Path is outside the repository')
|
|
284
|
+
return full
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
export async function writeWorkdir(dir, path, content, expected) {
|
|
288
|
+
safePaths([path])
|
|
289
|
+
const full = insideRepo(dir, path)
|
|
290
|
+
if (await lstat(full).then((s) => s.isSymbolicLink(), () => false)) throw new Error('That path is a symbolic link')
|
|
291
|
+
if (expected !== undefined && (await readFile(full).then((b) => b.toString('utf8'), () => '')) !== expected) throw new Error(CHANGED)
|
|
292
|
+
await writeFile(full, content)
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
const PICKERS = {
|
|
296
|
+
darwin: ['osascript', ['-e', 'POSIX path of (choose folder with prompt "Open a repository")']],
|
|
297
|
+
win32: ['powershell', ['-NoProfile', '-Command', "Add-Type -AssemblyName System.Windows.Forms; $d = New-Object System.Windows.Forms.FolderBrowserDialog; if ($d.ShowDialog() -eq 'OK') { $d.SelectedPath }"]],
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export function pickFolder() {
|
|
301
|
+
const [cmd, args] = PICKERS[process.platform] ?? ['zenity', ['--file-selection', '--directory', '--title=Open a repository']]
|
|
302
|
+
return new Promise((done, fail) =>
|
|
303
|
+
execFile(cmd, args, (err, stdout) => {
|
|
304
|
+
if (err?.code === 'ENOENT') fail(new Error('No folder picker is available here. Type the path instead.'))
|
|
305
|
+
else done(err ? null : stdout.trim() || null)
|
|
306
|
+
}),
|
|
307
|
+
)
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
export function openPath(dir, path) {
|
|
311
|
+
safePaths([path])
|
|
312
|
+
const full = insideRepo(dir, path)
|
|
313
|
+
if (!existsSync(full)) throw new Error('That file no longer exists')
|
|
314
|
+
const cmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'cmd' : 'xdg-open'
|
|
315
|
+
const args = process.platform === 'win32' ? ['/c', 'start', '', full] : [full]
|
|
316
|
+
spawn(cmd, args, { stdio: 'ignore', detached: true }).on('error', () => {}).unref()
|
|
234
317
|
}
|
|
235
318
|
|
|
236
319
|
export async function stage(dir, paths) {
|
package/lib/server.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { createReadStream, existsSync, statSync, watch } from 'node:fs'
|
|
2
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises'
|
|
2
3
|
import http from 'node:http'
|
|
3
|
-
import {
|
|
4
|
+
import { homedir } from 'node:os'
|
|
5
|
+
import { basename, dirname, extname, join, normalize, resolve } from 'node:path'
|
|
4
6
|
import * as git from './git.js'
|
|
5
7
|
|
|
6
8
|
const TYPES = { '.html': 'text/html; charset=utf-8', '.js': 'text/javascript', '.css': 'text/css', '.svg': 'image/svg+xml', '.png': 'image/png', '.json': 'application/json' }
|
|
@@ -9,7 +11,10 @@ const OPS = {
|
|
|
9
11
|
load: (dir, b) => git.load(dir, b.limit),
|
|
10
12
|
status: (dir) => git.status(dir),
|
|
11
13
|
commitFiles: (dir, b) => git.commitFiles(dir, b.oid),
|
|
12
|
-
|
|
14
|
+
fileVersions: (dir, b) => git.fileVersions(dir, b.area, b.path),
|
|
15
|
+
writeIndex: (dir, b) => git.writeIndex(dir, b.path, b.content, b.expected),
|
|
16
|
+
writeWorkdir: (dir, b) => git.writeWorkdir(dir, b.path, b.content, b.expected),
|
|
17
|
+
openPath: (dir, b) => git.openPath(dir, b.path),
|
|
13
18
|
stage: (dir, b) => git.stage(dir, b.paths),
|
|
14
19
|
unstage: (dir, b) => git.unstage(dir, b.paths),
|
|
15
20
|
discard: (dir, b) => git.discard(dir, b.files),
|
|
@@ -57,23 +62,49 @@ function sendJson(res, status, data) {
|
|
|
57
62
|
res.end(JSON.stringify(data ?? null))
|
|
58
63
|
}
|
|
59
64
|
|
|
60
|
-
|
|
65
|
+
const STATE = join(process.env.XDG_CONFIG_HOME || join(homedir(), '.config'), 'ramulus', 'recent.json')
|
|
66
|
+
|
|
67
|
+
function watchRepo(dir) {
|
|
61
68
|
const clients = new Set()
|
|
62
69
|
let timer
|
|
63
|
-
|
|
64
|
-
clearTimeout(timer)
|
|
65
|
-
timer = setTimeout(() => {
|
|
66
|
-
for (const res of clients) res.write('data: changed\n\n')
|
|
67
|
-
}, 400)
|
|
68
|
-
}
|
|
70
|
+
let watcher
|
|
69
71
|
try {
|
|
70
|
-
watch(dir, { recursive: true }, (_, file) => {
|
|
72
|
+
watcher = watch(dir, { recursive: true }, (_, file) => {
|
|
71
73
|
const f = (file ?? '').toString().replaceAll('\\', '/')
|
|
72
74
|
if (f.includes('.git/objects') || f.endsWith('.lock') || f.includes('node_modules')) return
|
|
73
|
-
|
|
75
|
+
clearTimeout(timer)
|
|
76
|
+
timer = setTimeout(() => {
|
|
77
|
+
for (const res of clients) res.write('data: changed\n\n')
|
|
78
|
+
}, 400)
|
|
74
79
|
})
|
|
75
80
|
} catch {
|
|
76
|
-
|
|
81
|
+
watcher = undefined
|
|
82
|
+
}
|
|
83
|
+
return { clients, close: () => (clearTimeout(timer), watcher?.close()) }
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function createServer({ dir, uiDir, token, stateFile = STATE }) {
|
|
87
|
+
const known = new Set([dir])
|
|
88
|
+
const watchers = new Map()
|
|
89
|
+
const readRecent = () => readFile(stateFile, 'utf8').then(JSON.parse, () => [])
|
|
90
|
+
const remember = async (repo) => {
|
|
91
|
+
const list = [repo, ...(await readRecent()).filter((d) => d !== repo)].slice(0, 12)
|
|
92
|
+
await mkdir(dirname(stateFile), { recursive: true })
|
|
93
|
+
await writeFile(stateFile, JSON.stringify(list))
|
|
94
|
+
}
|
|
95
|
+
remember(dir).catch(() => {})
|
|
96
|
+
const info = (repo) => ({ dir: repo, name: basename(repo) })
|
|
97
|
+
const SHELL = {
|
|
98
|
+
repos: async () => ({ current: info(dir), recent: (await readRecent()).filter((d) => existsSync(d)).map(info) }),
|
|
99
|
+
pickFolder: () => git.pickFolder(),
|
|
100
|
+
openRepo: async (b) => {
|
|
101
|
+
const path = resolve(dir, String(b.path ?? '').trim().replace(/^~(?=$|[/\\])/, homedir()))
|
|
102
|
+
if (!existsSync(path) || !statSync(path).isDirectory()) throw new Error('That folder does not exist')
|
|
103
|
+
const top = await git.toplevel(path)
|
|
104
|
+
known.add(top)
|
|
105
|
+
await remember(top).catch(() => {})
|
|
106
|
+
return info(top)
|
|
107
|
+
},
|
|
77
108
|
}
|
|
78
109
|
|
|
79
110
|
const server = http.createServer(async (req, res) => {
|
|
@@ -84,14 +115,23 @@ export function createServer({ dir, uiDir, token }) {
|
|
|
84
115
|
}
|
|
85
116
|
const url = new URL(req.url, 'http://localhost')
|
|
86
117
|
if (url.pathname === '/api/events') {
|
|
87
|
-
|
|
118
|
+
const repo = url.searchParams.get('repo') || dir
|
|
119
|
+
if (url.searchParams.get('token') !== token || !known.has(repo)) {
|
|
88
120
|
res.writeHead(401).end()
|
|
89
121
|
return
|
|
90
122
|
}
|
|
91
123
|
res.writeHead(200, { 'content-type': 'text/event-stream', 'cache-control': 'no-store', connection: 'keep-alive' })
|
|
92
124
|
res.write(': connected\n\n')
|
|
93
|
-
|
|
94
|
-
|
|
125
|
+
let w = watchers.get(repo)
|
|
126
|
+
if (!w) watchers.set(repo, (w = watchRepo(repo)))
|
|
127
|
+
w.clients.add(res)
|
|
128
|
+
req.on('close', () => {
|
|
129
|
+
w.clients.delete(res)
|
|
130
|
+
if (w.clients.size === 0 && watchers.get(repo) === w) {
|
|
131
|
+
w.close()
|
|
132
|
+
watchers.delete(repo)
|
|
133
|
+
}
|
|
134
|
+
})
|
|
95
135
|
return
|
|
96
136
|
}
|
|
97
137
|
if (url.pathname.startsWith('/api/')) {
|
|
@@ -99,14 +139,18 @@ export function createServer({ dir, uiDir, token }) {
|
|
|
99
139
|
sendJson(res, 401, { error: 'bad token' })
|
|
100
140
|
return
|
|
101
141
|
}
|
|
102
|
-
const
|
|
103
|
-
|
|
142
|
+
const name = url.pathname.slice(5)
|
|
143
|
+
const shell = Object.hasOwn(SHELL, name) ? SHELL[name] : undefined
|
|
144
|
+
const op = Object.hasOwn(OPS, name) ? OPS[name] : undefined
|
|
145
|
+
if ((!op && !shell) || req.method !== 'POST') {
|
|
104
146
|
sendJson(res, 404, { error: 'unknown operation' })
|
|
105
147
|
return
|
|
106
148
|
}
|
|
107
149
|
try {
|
|
108
150
|
const body = await readBody(req)
|
|
109
|
-
|
|
151
|
+
const repo = body.repo ?? dir
|
|
152
|
+
if (!shell && !known.has(repo)) throw new Error('Open that repository first')
|
|
153
|
+
sendJson(res, 200, { result: (await (shell ? shell(body) : op(repo, body))) ?? null })
|
|
110
154
|
} catch (e) {
|
|
111
155
|
sendJson(res, 400, { error: e instanceof Error ? e.message : String(e) })
|
|
112
156
|
}
|
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={comments:{lineComment:`*`},brackets:[[`[`,`]`],[`(`,`)`]]},t={defaultToken:`invalid`,ignoreCase:!0,tokenPostfix:`.abap`,keywords:`abap-source.abbreviated.abstract.accept.accepting.according.activation.actual.add.add-corresponding.adjacent.after.alias.aliases.align.all.allocate.alpha.analysis.analyzer.and.append.appendage.appending.application.archive.area.arithmetic.as.ascending.aspect.assert.assign.assigned.assigning.association.asynchronous.at.attributes.authority.authority-check.avg.back.background.backup.backward.badi.base.before.begin.between.big.binary.bintohex.bit.black.blank.blanks.blob.block.blocks.blue.bound.boundaries.bounds.boxed.break-point.buffer.by.bypassing.byte.byte-order.call.calling.case.cast.casting.catch.center.centered.chain.chain-input.chain-request.change.changing.channels.character.char-to-hex.check.checkbox.ci_.circular.class.class-coding.class-data.class-events.class-methods.class-pool.cleanup.clear.client.clob.clock.close.coalesce.code.coding.col_background.col_group.col_heading.col_key.col_negative.col_normal.col_positive.col_total.collect.color.column.columns.comment.comments.commit.common.communication.comparing.component.components.compression.compute.concat.concat_with_space.concatenate.cond.condense.condition.connect.connection.constants.context.contexts.continue.control.controls.conv.conversion.convert.copies.copy.corresponding.country.cover.cpi.create.creating.critical.currency.currency_conversion.current.cursor.cursor-selection.customer.customer-function.dangerous.data.database.datainfo.dataset.date.dats_add_days.dats_add_months.dats_days_between.dats_is_valid.daylight.dd/mm/yy.dd/mm/yyyy.ddmmyy.deallocate.decimal_shift.decimals.declarations.deep.default.deferred.define.defining.definition.delete.deleting.demand.department.descending.describe.destination.detail.dialog.directory.disconnect.display.display-mode.distinct.divide.divide-corresponding.division.do.dummy.duplicate.duplicates.duration.during.dynamic.dynpro.edit.editor-call.else.elseif.empty.enabled.enabling.encoding.end.endat.endcase.endcatch.endchain.endclass.enddo.endenhancement.end-enhancement-section.endexec.endform.endfunction.endian.endif.ending.endinterface.end-lines.endloop.endmethod.endmodule.end-of-definition.end-of-editing.end-of-file.end-of-page.end-of-selection.endon.endprovide.endselect.end-test-injection.end-test-seam.endtry.endwhile.endwith.engineering.enhancement.enhancement-point.enhancements.enhancement-section.entries.entry.enum.environment.equiv.errormessage.errors.escaping.event.events.exact.except.exception.exceptions.exception-table.exclude.excluding.exec.execute.exists.exit.exit-command.expand.expanding.expiration.explicit.exponent.export.exporting.extend.extended.extension.extract.fail.fetch.field.field-groups.fields.field-symbol.field-symbols.file.filter.filters.filter-table.final.find.first.first-line.fixed-point.fkeq.fkge.flush.font.for.form.format.forward.found.frame.frames.free.friends.from.function.functionality.function-pool.further.gaps.generate.get.giving.gkeq.gkge.global.grant.green.group.groups.handle.handler.harmless.hashed.having.hdb.header.headers.heading.head-lines.help-id.help-request.hextobin.hide.high.hint.hold.hotspot.icon.id.identification.identifier.ids.if.ignore.ignoring.immediately.implementation.implementations.implemented.implicit.import.importing.in.inactive.incl.include.includes.including.increment.index.index-line.infotypes.inheriting.init.initial.initialization.inner.inout.input.insert.instance.instances.instr.intensified.interface.interface-pool.interfaces.internal.intervals.into.inverse.inverted-date.is.iso.job.join.keep.keeping.kernel.key.keys.keywords.kind.language.last.late.layout.leading.leave.left.left-justified.leftplus.leftspace.legacy.length.let.level.levels.like.line.lines.line-count.linefeed.line-selection.line-size.list.listbox.list-processing.little.llang.load.load-of-program.lob.local.locale.locator.logfile.logical.log-point.long.loop.low.lower.lpad.lpi.ltrim.mail.main.major-id.mapping.margin.mark.mask.match.matchcode.max.maximum.medium.members.memory.mesh.message.message-id.messages.messaging.method.methods.min.minimum.minor-id.mm/dd/yy.mm/dd/yyyy.mmddyy.mode.modif.modifier.modify.module.move.move-corresponding.multiply.multiply-corresponding.name.nametab.native.nested.nesting.new.new-line.new-page.new-section.next.no.no-display.no-extension.no-gap.no-gaps.no-grouping.no-heading.no-scrolling.no-sign.no-title.no-topofpage.no-zero.node.nodes.non-unicode.non-unique.not.null.number.object.objects.obligatory.occurrence.occurrences.occurs.of.off.offset.ole.on.only.open.option.optional.options.or.order.other.others.out.outer.output.output-length.overflow.overlay.pack.package.pad.padding.page.pages.parameter.parameters.parameter-table.part.partially.pattern.percentage.perform.performing.person.pf1.pf10.pf11.pf12.pf13.pf14.pf15.pf2.pf3.pf4.pf5.pf6.pf7.pf8.pf9.pf-status.pink.places.pool.pos_high.pos_low.position.pragmas.precompiled.preferred.preserving.primary.print.print-control.priority.private.procedure.process.program.property.protected.provide.public.push.pushbutton.put.queue-only.quickinfo.radiobutton.raise.raising.range.ranges.read.reader.read-only.receive.received.receiver.receiving.red.redefinition.reduce.reduced.ref.reference.refresh.regex.reject.remote.renaming.replace.replacement.replacing.report.request.requested.reserve.reset.resolution.respecting.responsible.result.results.resumable.resume.retry.return.returncode.returning.returns.right.right-justified.rightplus.rightspace.risk.rmc_communication_failure.rmc_invalid_status.rmc_system_failure.role.rollback.rows.rpad.rtrim.run.sap.sap-spool.saving.scale_preserving.scale_preserving_scientific.scan.scientific.scientific_with_leading_zero.scroll.scroll-boundary.scrolling.search.secondary.seconds.section.select.selection.selections.selection-screen.selection-set.selection-sets.selection-table.select-options.send.separate.separated.set.shared.shift.short.shortdump-id.sign_as_postfix.single.size.skip.skipping.smart.some.sort.sortable.sorted.source.specified.split.spool.spots.sql.sqlscript.stable.stamp.standard.starting.start-of-editing.start-of-selection.state.statement.statements.static.statics.statusinfo.step-loop.stop.structure.structures.style.subkey.submatches.submit.subroutine.subscreen.subtract.subtract-corresponding.suffix.sum.summary.summing.supplied.supply.suppress.switch.switchstates.symbol.syncpoints.syntax.syntax-check.syntax-trace.system-call.system-exceptions.system-exit.tab.tabbed.table.tables.tableview.tabstrip.target.task.tasks.test.testing.test-injection.test-seam.text.textpool.then.throw.time.times.timestamp.timezone.tims_is_valid.title.titlebar.title-lines.to.tokenization.tokens.top-lines.top-of-page.trace-file.trace-table.trailing.transaction.transfer.transformation.translate.transporting.trmac.truncate.truncation.try.tstmp_add_seconds.tstmp_current_utctimestamp.tstmp_is_valid.tstmp_seconds_between.type.type-pool.type-pools.types.uline.unassign.under.unicode.union.unique.unit_conversion.unix.unpack.until.unwind.up.update.upper.user.user-command.using.utf-8.valid.value.value-request.values.vary.varying.verification-message.version.via.view.visible.wait.warning.when.whenever.where.while.width.window.windows.with.with-heading.without.with-title.word.work.write.writer.xml.xsd.yellow.yes.yymmdd.zero.zone.abap_system_timezone.abap_user_timezone.access.action.adabas.adjust_numbers.allow_precision_loss.allowed.amdp.applicationuser.as_geo_json.as400.associations.balance.behavior.breakup.bulk.cds.cds_client.check_before_save.child.clients.corr.corr_spearman.cross.cycles.datn_add_days.datn_add_months.datn_days_between.dats_from_datn.dats_tims_to_tstmp.dats_to_datn.db2.db6.ddl.dense_rank.depth.deterministic.discarding.entities.entity.error.failed.finalize.first_value.fltp_to_dec.following.fractional.full.graph.grouping.hierarchy.hierarchy_ancestors.hierarchy_ancestors_aggregate.hierarchy_descendants.hierarchy_descendants_aggregate.hierarchy_siblings.incremental.indicators.lag.last_value.lead.leaves.like_regexpr.link.locale_sap.lock.locks.many.mapped.matched.measures.median.mssqlnt.multiple.nodetype.ntile.nulls.occurrences_regexpr.one.operations.oracle.orphans.over.parent.parents.partition.pcre.period.pfcg_mapping.preceding.privileged.product.projection.rank.redirected.replace_regexpr.reported.response.responses.root.row.row_number.sap_system_date.save.schema.session.sets.shortdump.siblings.spantree.start.stddev.string_agg.subtotal.sybase.tims_from_timn.tims_to_timn.to_blob.to_clob.total.trace-entry.tstmp_to_dats.tstmp_to_dst.tstmp_to_tims.tstmpl_from_utcl.tstmpl_to_utcl.unbounded.utcl_add_seconds.utcl_current.utcl_seconds_between.uuid.var.verbatim`.split(`.`),builtinFunctions:`abs.acos.asin.atan.bit-set.boolc.boolx.ceil.char_off.charlen.cmax.cmin.concat_lines_of.contains.contains_any_not_of.contains_any_of.cos.cosh.count.count_any_not_of.count_any_of.dbmaxlen.distance.escape.exp.find_any_not_of.find_any_of.find_end.floor.frac.from_mixed.ipow.line_exists.line_index.log.log10.matches.nmax.nmin.numofchar.repeat.rescale.reverse.round.segment.shift_left.shift_right.sign.sin.sinh.sqrt.strlen.substring.substring_after.substring_before.substring_from.substring_to.tan.tanh.to_lower.to_mixed.to_upper.trunc.utclong_add.utclong_current.utclong_diff.xsdbool.xstrlen`.split(`.`),typeKeywords:`b.c.d.decfloat16.decfloat34.f.i.int8.n.p.s.string.t.utclong.x.xstring.any.clike.csequence.decfloat.numeric.simple.xsequence.accp.char.clnt.cuky.curr.datn.dats.d16d.d16n.d16r.d34d.d34n.d34r.dec.df16_dec.df16_raw.df34_dec.df34_raw.fltp.geom_ewkb.int1.int2.int4.lang.lchr.lraw.numc.quan.raw.rawstring.sstring.timn.tims.unit.utcl.df16_scl.df34_scl.prec.varc.abap_bool.abap_false.abap_true.abap_undefined.me.screen.space.super.sy.syst.table_line.*sys*`.split(`.`),builtinMethods:[`class_constructor`,`constructor`],derivedTypes:[`%CID`,`%CID_REF`,`%CONTROL`,`%DATA`,`%ELEMENT`,`%FAIL`,`%KEY`,`%MSG`,`%PARAM`,`%PID`,`%PID_ASSOC`,`%PID_PARENT`,`%_HINTS`],cdsLanguage:[`@AbapAnnotation`,`@AbapCatalog`,`@AccessControl`,`@API`,`@ClientDependent`,`@ClientHandling`,`@CompatibilityContract`,`@DataAging`,`@EndUserText`,`@Environment`,`@LanguageDependency`,`@MappingRole`,`@Metadata`,`@MetadataExtension`,`@ObjectModel`,`@Scope`,`@Semantics`,`$EXTENSION`,`$SELF`],selectors:[`->`,`->*`,`=>`,`~`,`~*`],operators:` +. -./.*.**.div.mod.=.#.@.+=.-=.*=./=.**=.&&=.?=.&.&&.bit-and.bit-not.bit-or.bit-xor.m.o.z.<. >.<=.>=.<>.><.=<.=>.bt.byte-ca.byte-cn.byte-co.byte-cs.byte-na.byte-ns.ca.cn.co.cp.cs.eq.ge.gt.le.lt.na.nb.ne.np.ns.*/.*:.--./*.//`.split(`.`),symbols:/[=><!~?&+\-*\/\^%#@]+/,tokenizer:{root:[[/[a-z_\/$%@]([\w\/$%]|-(?!>))*/,{cases:{"@typeKeywords":`type`,"@keywords":`keyword`,"@cdsLanguage":`annotation`,"@derivedTypes":`type`,"@builtinFunctions":`type`,"@builtinMethods":`type`,"@operators":`key`,"@default":`identifier`}}],[/<[\w]+>/,`identifier`],[/##[\w|_]+/,`comment`],{include:`@whitespace`},[/[:,.]/,`delimiter`],[/[{}()\[\]]/,`@brackets`],[/@symbols/,{cases:{"@selectors":`tag`,"@operators":`key`,"@default":``}}],[/'/,{token:`string`,bracket:`@open`,next:`@stringquote`}],[/`/,{token:`string`,bracket:`@open`,next:`@stringping`}],[/\|/,{token:`string`,bracket:`@open`,next:`@stringtemplate`}],[/\d+/,`number`]],stringtemplate:[[/[^\\\|]+/,`string`],[/\\\|/,`string`],[/\|/,{token:`string`,bracket:`@close`,next:`@pop`}]],stringping:[[/[^\\`]+/,`string`],[/`/,{token:`string`,bracket:`@close`,next:`@pop`}]],stringquote:[[/[^\\']+/,`string`],[/'/,{token:`string`,bracket:`@close`,next:`@pop`}]],whitespace:[[/[ \t\r\n]+/,``],[/^\*.*$/,`comment`],[/\".*$/,`comment`]]}};export{e as conf,t as language};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:`//`,blockComment:[`/*`,`*/`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`},{open:`<`,close:`>`}],folding:{markers:{start:RegExp(`^\\s*//\\s*(?:(?:#?region\\b)|(?:<editor-fold\\b))`),end:RegExp(`^\\s*//\\s*(?:(?:#?endregion\\b)|(?:</editor-fold>))`)}}},t=`abstract.activate.and.any.array.as.asc.assert.autonomous.begin.bigdecimal.blob.boolean.break.bulk.by.case.cast.catch.char.class.collect.commit.const.continue.convertcurrency.decimal.default.delete.desc.do.double.else.end.enum.exception.exit.export.extends.false.final.finally.float.for.from.future.get.global.goto.group.having.hint.if.implements.import.in.inner.insert.instanceof.int.interface.into.join.last_90_days.last_month.last_n_days.last_week.like.limit.list.long.loop.map.merge.native.new.next_90_days.next_month.next_n_days.next_week.not.null.nulls.number.object.of.on.or.outer.override.package.parallel.pragma.private.protected.public.retrieve.return.returning.rollback.savepoint.search.select.set.short.sort.stat.static.strictfp.super.switch.synchronized.system.testmethod.then.this.this_month.this_week.throw.throws.today.tolabel.tomorrow.transaction.transient.trigger.true.try.type.undelete.update.upsert.using.virtual.void.volatile.webservice.when.where.while.yesterday`.split(`.`),n=e=>e.charAt(0).toUpperCase()+e.substr(1),r=[];t.forEach(e=>{r.push(e),r.push(e.toUpperCase()),r.push(n(e))});var i={defaultToken:``,tokenPostfix:`.apex`,keywords:r,operators:`=.>.<.!.~.?.:.==.<=.>=.!=.&&.||.++.--.+.-.*./.&.|.^.%.<<.>>.>>>.+=.-=.*=./=.&=.|=.^=.%=.<<=.>>=.>>>=`.split(`.`),symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+(_+\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,tokenizer:{root:[[/[a-z_$][\w$]*/,{cases:{"@keywords":{token:`keyword.$0`},"@default":`identifier`}}],[/[A-Z][\w\$]*/,{cases:{"@keywords":{token:`keyword.$0`},"@default":`type.identifier`}}],{include:`@whitespace`},[/[{}()\[\]]/,`@brackets`],[/[<>](?!@symbols)/,`@brackets`],[/@symbols/,{cases:{"@operators":`delimiter`,"@default":``}}],[/@\s*[a-zA-Z_\$][\w\$]*/,`annotation`],[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/,`number.float`],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/,`number.float`],[/(@digits)[fFdD]/,`number.float`],[/(@digits)[lL]?/,`number`],[/[;,.]/,`delimiter`],[/"([^"\\]|\\.)*$/,`string.invalid`],[/'([^'\\]|\\.)*$/,`string.invalid`],[/"/,`string`,`@string."`],[/'/,`string`,`@string.'`],[/'[^\\']'/,`string`],[/(')(@escapes)(')/,[`string`,`string.escape`,`string`]],[/'/,`string.invalid`]],whitespace:[[/[ \t\r\n]+/,``],[/\/\*\*(?!\/)/,`comment.doc`,`@apexdoc`],[/\/\*/,`comment`,`@comment`],[/\/\/.*$/,`comment`]],comment:[[/[^\/*]+/,`comment`],[/\*\//,`comment`,`@pop`],[/[\/*]/,`comment`]],apexdoc:[[/[^\/*]+/,`comment.doc`],[/\*\//,`comment.doc`,`@pop`],[/[\/*]/,`comment.doc`]],string:[[/[^\\"']+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/["']/,{cases:{"$#==$S2":{token:`string`,next:`@pop`},"@default":`string`}}]]}};export{e as conf,i as language};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={comments:{lineComment:`#`}},t={defaultToken:`keyword`,ignoreCase:!0,tokenPostfix:`.azcli`,str:/[^#\s]/,tokenizer:{root:[{include:`@comment`},[/\s-+@str*\s*/,{cases:{"@eos":{token:`key.identifier`,next:`@popall`},"@default":{token:`key.identifier`,next:`@type`}}}],[/^-+@str*\s*/,{cases:{"@eos":{token:`key.identifier`,next:`@popall`},"@default":{token:`key.identifier`,next:`@type`}}}]],type:[{include:`@comment`},[/-+@str*\s*/,{cases:{"@eos":{token:`key.identifier`,next:`@popall`},"@default":`key.identifier`}}],[/@str+\s*/,{cases:{"@eos":{token:`string`,next:`@popall`},"@default":`string`}}]],comment:[[/#.*$/,{cases:{"@eos":{token:`comment`,next:`@popall`}}}]]}};export{e as conf,t as language};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={comments:{lineComment:`REM`},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`}],surroundingPairs:[{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`}],folding:{markers:{start:RegExp(`^\\s*(::\\s*|REM\\s+)#region`),end:RegExp(`^\\s*(::\\s*|REM\\s+)#endregion`)}}},t={defaultToken:``,ignoreCase:!0,tokenPostfix:`.bat`,brackets:[{token:`delimiter.bracket`,open:`{`,close:`}`},{token:`delimiter.parenthesis`,open:`(`,close:`)`},{token:`delimiter.square`,open:`[`,close:`]`}],keywords:/call|defined|echo|errorlevel|exist|for|goto|if|pause|set|shift|start|title|not|pushd|popd/,symbols:/[=><!~?&|+\-*\/\^;\.,]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/^(\s*)(rem(?:\s.*|))$/,[``,`comment`]],[/(\@?)(@keywords)(?!\w)/,[{token:`keyword`},{token:`keyword.$2`}]],[/[ \t\r\n]+/,``],[/setlocal(?!\w)/,`keyword.tag-setlocal`],[/endlocal(?!\w)/,`keyword.tag-setlocal`],[/[a-zA-Z_]\w*/,``],[/:\w*/,`metatag`],[/%[^%]+%/,`variable`],[/%%[\w]+(?!\w)/,`variable`],[/[{}()\[\]]/,`@brackets`],[/@symbols/,`delimiter`],[/\d*\.\d+([eE][\-+]?\d+)?/,`number.float`],[/0[xX][0-9a-fA-F_]*[0-9a-fA-F]/,`number.hex`],[/\d+/,`number`],[/[;,.]/,`delimiter`],[/"/,`string`,`@string."`],[/'/,`string`,`@string.'`]],string:[[/[^\\"'%]+/,{cases:{"@eos":{token:`string`,next:`@popall`},"@default":`string`}}],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/%[\w ]+%/,`variable`],[/%%[\w]+(?!\w)/,`variable`],[/["']/,{cases:{"$#==$S2":{token:`string`,next:`@pop`},"@default":`string`}}],[/$/,`string`,`@popall`]]}};export{e as conf,t as language};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=(e=>`\\b${e}\\b`)(`[_a-zA-Z][_a-zA-Z0-9]*`),t=[`targetScope`,`resource`,`module`,`param`,`var`,`output`,`for`,`in`,`if`,`existing`],n=[`true`,`false`,`null`],r=`[ \\t\\r\\n]`,i=`[0-9]+`,a={comments:{lineComment:`//`,blockComment:[`/*`,`*/`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`'`,close:`'`},{open:`'''`,close:`'''`}],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`'`,close:`'`,notIn:[`string`,`comment`]},{open:`'''`,close:`'''`,notIn:[`string`,`comment`]}],autoCloseBefore:`:.,=}])'
|
|
2
|
+
`,indentationRules:{increaseIndentPattern:RegExp(`^((?!\\/\\/).)*(\\{[^}"'\`]*|\\([^)"'\`]*|\\[[^\\]"'\`]*)$`),decreaseIndentPattern:RegExp(`^((?!.*?\\/\\*).*\\*/)?\\s*[\\}\\]].*$`)}},o={defaultToken:``,tokenPostfix:`.bicep`,brackets:[{open:`{`,close:`}`,token:`delimiter.curly`},{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`}],symbols:/[=><!~?:&|+\-*/^%]+/,keywords:t,namedLiterals:n,escapes:"\\\\(u{[0-9A-Fa-f]+}|n|r|t|\\\\|'|\\${)",tokenizer:{root:[{include:`@expression`},{include:`@whitespace`}],stringVerbatim:[{regex:`(|'|'')[^']`,action:{token:`string`}},{regex:`'''`,action:{token:`string.quote`,next:`@pop`}}],stringLiteral:[{regex:"\\${",action:{token:`delimiter.bracket`,next:`@bracketCounting`}},{regex:`[^\\\\'$]+`,action:{token:`string`}},{regex:`@escapes`,action:{token:`string.escape`}},{regex:`\\\\.`,action:{token:`string.escape.invalid`}},{regex:`'`,action:{token:`string`,next:`@pop`}}],bracketCounting:[{regex:`{`,action:{token:`delimiter.bracket`,next:`@bracketCounting`}},{regex:`}`,action:{token:`delimiter.bracket`,next:`@pop`}},{include:`expression`}],comment:[{regex:`[^\\*]+`,action:{token:`comment`}},{regex:`\\*\\/`,action:{token:`comment`,next:`@pop`}},{regex:`[\\/*]`,action:{token:`comment`}}],whitespace:[{regex:r},{regex:`\\/\\*`,action:{token:`comment`,next:`@comment`}},{regex:`\\/\\/.*$`,action:{token:`comment`}}],expression:[{regex:`'''`,action:{token:`string.quote`,next:`@stringVerbatim`}},{regex:`'`,action:{token:`string.quote`,next:`@stringLiteral`}},{regex:i,action:{token:`number`}},{regex:e,action:{cases:{"@keywords":{token:`keyword`},"@namedLiterals":{token:`keyword`},"@default":{token:`identifier`}}}}]}};export{a as conf,o as language};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={comments:{lineComment:`//`,blockComment:[`(*`,`*)`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`],[`<`,`>`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`<`,close:`>`},{open:`'`,close:`'`},{open:`"`,close:`"`},{open:`(*`,close:`*)`}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`<`,close:`>`},{open:`'`,close:`'`},{open:`"`,close:`"`},{open:`(*`,close:`*)`}]},t={defaultToken:``,tokenPostfix:`.cameligo`,ignoreCase:!0,brackets:[{open:`{`,close:`}`,token:`delimiter.curly`},{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`},{open:`<`,close:`>`,token:`delimiter.angle`}],keywords:`abs.assert.block.Bytes.case.Crypto.Current.else.failwith.false.for.fun.if.in.let.let%entry.let%init.List.list.Map.map.match.match%nat.mod.not.operation.Operation.of.record.Set.set.sender.skip.source.String.then.to.true.type.with`.split(`.`),typeKeywords:[`int`,`unit`,`string`,`tz`,`nat`,`bool`],operators:[`=`,`>`,`<`,`<=`,`>=`,`<>`,`:`,`:=`,`and`,`mod`,`or`,`+`,`-`,`*`,`/`,`@`,`&`,`^`,`%`,`->`,`<-`,`&&`,`||`],symbols:/[=><:@\^&|+\-*\/\^%]+/,tokenizer:{root:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:`keyword.$0`},"@default":`identifier`}}],{include:`@whitespace`},[/[{}()\[\]]/,`@brackets`],[/[<>](?!@symbols)/,`@brackets`],[/@symbols/,{cases:{"@operators":`delimiter`,"@default":``}}],[/\d*\.\d+([eE][\-+]?\d+)?/,`number.float`],[/\$[0-9a-fA-F]{1,16}/,`number.hex`],[/\d+/,`number`],[/[;,.]/,`delimiter`],[/'([^'\\]|\\.)*$/,`string.invalid`],[/'/,`string`,`@string`],[/'[^\\']'/,`string`],[/'/,`string.invalid`],[/\#\d+/,`string`]],comment:[[/[^\(\*]+/,`comment`],[/\*\)/,`comment`,`@pop`],[/\(\*/,`comment`]],string:[[/[^\\']+/,`string`],[/\\./,`string.escape.invalid`],[/'/,{token:`string.quote`,bracket:`@close`,next:`@pop`}]],whitespace:[[/[ \t\r\n]+/,`white`],[/\(\*/,`comment`,`@comment`],[/\/\/.*$/,`comment`]]}};export{e as conf,t as language};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={comments:{lineComment:`;;`},brackets:[[`[`,`]`],[`(`,`)`],[`{`,`}`]],autoClosingPairs:[{open:`[`,close:`]`},{open:`"`,close:`"`},{open:`(`,close:`)`},{open:`{`,close:`}`}],surroundingPairs:[{open:`[`,close:`]`},{open:`"`,close:`"`},{open:`(`,close:`)`},{open:`{`,close:`}`}]},t={defaultToken:``,ignoreCase:!0,tokenPostfix:`.clj`,brackets:[{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`},{open:`{`,close:`}`,token:`delimiter.curly`}],constants:[`true`,`false`,`nil`],numbers:/^(?:[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\[\]\s"#'(),;@^`{}~]|$))/,characters:/^(?:\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\[\]\s"(),;@^`{}~]|$))/,escapes:/^\\(?:["'\\bfnrt]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,qualifiedSymbols:/^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/,specialForms:[`.`,`catch`,`def`,`do`,`if`,`monitor-enter`,`monitor-exit`,`new`,`quote`,`recur`,`set!`,`throw`,`try`,`var`],coreSymbols:`*,*',*1,*2,*3,*agent*,*allow-unresolved-vars*,*assert*,*clojure-version*,*command-line-args*,*compile-files*,*compile-path*,*compiler-options*,*data-readers*,*default-data-reader-fn*,*e,*err*,*file*,*flush-on-newline*,*fn-loader*,*in*,*math-context*,*ns*,*out*,*print-dup*,*print-length*,*print-level*,*print-meta*,*print-namespace-maps*,*print-readably*,*read-eval*,*reader-resolver*,*source-path*,*suppress-read*,*unchecked-math*,*use-context-classloader*,*verbose-defrecords*,*warn-on-reflection*,+,+',-,-',->,->>,->ArrayChunk,->Eduction,->Vec,->VecNode,->VecSeq,-cache-protocol-fn,-reset-methods,..,/,<,<=,=,==,>,>=,EMPTY-NODE,Inst,StackTraceElement->vec,Throwable->map,accessor,aclone,add-classpath,add-watch,agent,agent-error,agent-errors,aget,alength,alias,all-ns,alter,alter-meta!,alter-var-root,amap,ancestors,and,any?,apply,areduce,array-map,as->,aset,aset-boolean,aset-byte,aset-char,aset-double,aset-float,aset-int,aset-long,aset-short,assert,assoc,assoc!,assoc-in,associative?,atom,await,await-for,await1,bases,bean,bigdec,bigint,biginteger,binding,bit-and,bit-and-not,bit-clear,bit-flip,bit-not,bit-or,bit-set,bit-shift-left,bit-shift-right,bit-test,bit-xor,boolean,boolean-array,boolean?,booleans,bound-fn,bound-fn*,bound?,bounded-count,butlast,byte,byte-array,bytes,bytes?,case,cast,cat,char,char-array,char-escape-string,char-name-string,char?,chars,chunk,chunk-append,chunk-buffer,chunk-cons,chunk-first,chunk-next,chunk-rest,chunked-seq?,class,class?,clear-agent-errors,clojure-version,coll?,comment,commute,comp,comparator,compare,compare-and-set!,compile,complement,completing,concat,cond,cond->,cond->>,condp,conj,conj!,cons,constantly,construct-proxy,contains?,count,counted?,create-ns,create-struct,cycle,dec,dec',decimal?,declare,dedupe,default-data-readers,definline,definterface,defmacro,defmethod,defmulti,defn,defn-,defonce,defprotocol,defrecord,defstruct,deftype,delay,delay?,deliver,denominator,deref,derive,descendants,destructure,disj,disj!,dissoc,dissoc!,distinct,distinct?,doall,dorun,doseq,dosync,dotimes,doto,double,double-array,double?,doubles,drop,drop-last,drop-while,eduction,empty,empty?,ensure,ensure-reduced,enumeration-seq,error-handler,error-mode,eval,even?,every-pred,every?,ex-data,ex-info,extend,extend-protocol,extend-type,extenders,extends?,false?,ffirst,file-seq,filter,filterv,find,find-keyword,find-ns,find-protocol-impl,find-protocol-method,find-var,first,flatten,float,float-array,float?,floats,flush,fn,fn?,fnext,fnil,for,force,format,frequencies,future,future-call,future-cancel,future-cancelled?,future-done?,future?,gen-class,gen-interface,gensym,get,get-in,get-method,get-proxy-class,get-thread-bindings,get-validator,group-by,halt-when,hash,hash-combine,hash-map,hash-ordered-coll,hash-set,hash-unordered-coll,ident?,identical?,identity,if-let,if-not,if-some,ifn?,import,in-ns,inc,inc',indexed?,init-proxy,inst-ms,inst-ms*,inst?,instance?,int,int-array,int?,integer?,interleave,intern,interpose,into,into-array,ints,io!,isa?,iterate,iterator-seq,juxt,keep,keep-indexed,key,keys,keyword,keyword?,last,lazy-cat,lazy-seq,let,letfn,line-seq,list,list*,list?,load,load-file,load-reader,load-string,loaded-libs,locking,long,long-array,longs,loop,macroexpand,macroexpand-1,make-array,make-hierarchy,map,map-entry?,map-indexed,map?,mapcat,mapv,max,max-key,memfn,memoize,merge,merge-with,meta,method-sig,methods,min,min-key,mix-collection-hash,mod,munge,name,namespace,namespace-munge,nat-int?,neg-int?,neg?,newline,next,nfirst,nil?,nnext,not,not-any?,not-empty,not-every?,not=,ns,ns-aliases,ns-imports,ns-interns,ns-map,ns-name,ns-publics,ns-refers,ns-resolve,ns-unalias,ns-unmap,nth,nthnext,nthrest,num,number?,numerator,object-array,odd?,or,parents,partial,partition,partition-all,partition-by,pcalls,peek,persistent!,pmap,pop,pop!,pop-thread-bindings,pos-int?,pos?,pr,pr-str,prefer-method,prefers,primitives-classnames,print,print-ctor,print-dup,print-method,print-simple,print-str,printf,println,println-str,prn,prn-str,promise,proxy,proxy-call-with-super,proxy-mappings,proxy-name,proxy-super,push-thread-bindings,pvalues,qualified-ident?,qualified-keyword?,qualified-symbol?,quot,rand,rand-int,rand-nth,random-sample,range,ratio?,rational?,rationalize,re-find,re-groups,re-matcher,re-matches,re-pattern,re-seq,read,read-line,read-string,reader-conditional,reader-conditional?,realized?,record?,reduce,reduce-kv,reduced,reduced?,reductions,ref,ref-history-count,ref-max-history,ref-min-history,ref-set,refer,refer-clojure,reify,release-pending-sends,rem,remove,remove-all-methods,remove-method,remove-ns,remove-watch,repeat,repeatedly,replace,replicate,require,reset!,reset-meta!,reset-vals!,resolve,rest,restart-agent,resultset-seq,reverse,reversible?,rseq,rsubseq,run!,satisfies?,second,select-keys,send,send-off,send-via,seq,seq?,seqable?,seque,sequence,sequential?,set,set-agent-send-executor!,set-agent-send-off-executor!,set-error-handler!,set-error-mode!,set-validator!,set?,short,short-array,shorts,shuffle,shutdown-agents,simple-ident?,simple-keyword?,simple-symbol?,slurp,some,some->,some->>,some-fn,some?,sort,sort-by,sorted-map,sorted-map-by,sorted-set,sorted-set-by,sorted?,special-symbol?,spit,split-at,split-with,str,string?,struct,struct-map,subs,subseq,subvec,supers,swap!,swap-vals!,symbol,symbol?,sync,tagged-literal,tagged-literal?,take,take-last,take-nth,take-while,test,the-ns,thread-bound?,time,to-array,to-array-2d,trampoline,transduce,transient,tree-seq,true?,type,unchecked-add,unchecked-add-int,unchecked-byte,unchecked-char,unchecked-dec,unchecked-dec-int,unchecked-divide-int,unchecked-double,unchecked-float,unchecked-inc,unchecked-inc-int,unchecked-int,unchecked-long,unchecked-multiply,unchecked-multiply-int,unchecked-negate,unchecked-negate-int,unchecked-remainder-int,unchecked-short,unchecked-subtract,unchecked-subtract-int,underive,unquote,unquote-splicing,unreduced,unsigned-bit-shift-right,update,update-in,update-proxy,uri?,use,uuid?,val,vals,var-get,var-set,var?,vary-meta,vec,vector,vector-of,vector?,volatile!,volatile?,vreset!,vswap!,when,when-first,when-let,when-not,when-some,while,with-bindings,with-bindings*,with-in-str,with-loading-context,with-local-vars,with-meta,with-open,with-out-str,with-precision,with-redefs,with-redefs-fn,xml-seq,zero?,zipmap`.split(`,`),tokenizer:{root:[{include:`@whitespace`},[/@numbers/,`number`],[/@characters/,`string`],{include:`@string`},[/[()\[\]{}]/,`@brackets`],[/\/#"(?:\.|(?:")|[^"\n])*"\/g/,`regexp`],[/[#'@^`~]/,`meta`],[/@qualifiedSymbols/,{cases:{"^:.+$":`constant`,"@specialForms":`keyword`,"@coreSymbols":`keyword`,"@constants":`constant`,"@default":`identifier`}}]],whitespace:[[/[\s,]+/,`white`],[/;.*$/,`comment`],[/\(comment\b/,`comment`,`@comment`]],comment:[[/\(/,`comment`,`@push`],[/\)/,`comment`,`@pop`],[/[^()]/,`comment`]],string:[[/"/,`string`,`@multiLineString`]],multiLineString:[[/"/,`string`,`@popall`],[/@escapes/,`string.escape`],[/./,`string`]]}};export{e as conf,t as language};
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#%\^\&\*\(\)\=\$\-\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{blockComment:[`###`,`###`],lineComment:`#`},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],folding:{markers:{start:RegExp(`^\\s*#region\\b`),end:RegExp(`^\\s*#endregion\\b`)}}},t={defaultToken:``,ignoreCase:!0,tokenPostfix:`.coffee`,brackets:[{open:`{`,close:`}`,token:`delimiter.curly`},{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`}],regEx:/\/(?!\/\/)(?:[^\/\\]|\\.)*\/[igm]*/,keywords:`and.or.is.isnt.not.on.yes.@.no.off.true.false.null.this.new.delete.typeof.in.instanceof.return.throw.break.continue.debugger.if.else.switch.for.while.do.try.catch.finally.class.extends.super.undefined.then.unless.until.loop.of.by.when`.split(`.`),symbols:/[=><!~?&%|+\-*\/\^\.,\:]+/,escapes:/\\(?:[abfnrtv\\"'$]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/\@[a-zA-Z_]\w*/,`variable.predefined`],[/[a-zA-Z_]\w*/,{cases:{this:`variable.predefined`,"@keywords":{token:`keyword.$0`},"@default":``}}],[/[ \t\r\n]+/,``],[/###/,`comment`,`@comment`],[/#.*$/,`comment`],[`///`,{token:`regexp`,next:`@hereregexp`}],[/^(\s*)(@regEx)/,[``,`regexp`]],[/(\()(\s*)(@regEx)/,[`@brackets`,``,`regexp`]],[/(\,)(\s*)(@regEx)/,[`delimiter`,``,`regexp`]],[/(\=)(\s*)(@regEx)/,[`delimiter`,``,`regexp`]],[/(\:)(\s*)(@regEx)/,[`delimiter`,``,`regexp`]],[/(\[)(\s*)(@regEx)/,[`@brackets`,``,`regexp`]],[/(\!)(\s*)(@regEx)/,[`delimiter`,``,`regexp`]],[/(\&)(\s*)(@regEx)/,[`delimiter`,``,`regexp`]],[/(\|)(\s*)(@regEx)/,[`delimiter`,``,`regexp`]],[/(\?)(\s*)(@regEx)/,[`delimiter`,``,`regexp`]],[/(\{)(\s*)(@regEx)/,[`@brackets`,``,`regexp`]],[/(\;)(\s*)(@regEx)/,[``,``,`regexp`]],[/}/,{cases:{"$S2==interpolatedstring":{token:`string`,next:`@pop`},"@default":`@brackets`}}],[/[{}()\[\]]/,`@brackets`],[/@symbols/,`delimiter`],[/\d+[eE]([\-+]?\d+)?/,`number.float`],[/\d+\.\d+([eE][\-+]?\d+)?/,`number.float`],[/0[xX][0-9a-fA-F]+/,`number.hex`],[/0[0-7]+(?!\d)/,`number.octal`],[/\d+/,`number`],[/[,.]/,`delimiter`],[/"""/,`string`,`@herestring."""`],[/'''/,`string`,`@herestring.'''`],[/"/,{cases:{"@eos":`string`,"@default":{token:`string`,next:`@string."`}}}],[/'/,{cases:{"@eos":`string`,"@default":{token:`string`,next:`@string.'`}}}]],string:[[/[^"'\#\\]+/,`string`],[/@escapes/,`string.escape`],[/\./,`string.escape.invalid`],[/\./,`string.escape.invalid`],[/#{/,{cases:{'$S2=="':{token:`string`,next:`root.interpolatedstring`},"@default":`string`}}],[/["']/,{cases:{"$#==$S2":{token:`string`,next:`@pop`},"@default":`string`}}],[/#/,`string`]],herestring:[[/("""|''')/,{cases:{"$1==$S2":{token:`string`,next:`@pop`},"@default":`string`}}],[/[^#\\'"]+/,`string`],[/['"]+/,`string`],[/@escapes/,`string.escape`],[/\./,`string.escape.invalid`],[/#{/,{token:`string.quote`,next:`root.interpolatedstring`}],[/#/,`string`]],comment:[[/[^#]+/,`comment`],[/###/,`comment`,`@pop`],[/#/,`comment`]],hereregexp:[[/[^\\\/#]+/,`regexp`],[/\\./,`regexp`],[/#.*$/,`comment`],[`///[igm]*`,{token:`regexp`,next:`@pop`}],[/\//,`regexp`]]}};export{e as conf,t as language};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={comments:{lineComment:`//`,blockComment:[`/*`,`*/`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`[`,close:`]`},{open:`{`,close:`}`},{open:`(`,close:`)`},{open:`'`,close:`'`,notIn:[`string`,`comment`]},{open:`"`,close:`"`,notIn:[`string`]}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],folding:{markers:{start:RegExp(`^\\s*#pragma\\s+region\\b`),end:RegExp(`^\\s*#pragma\\s+endregion\\b`)}}},t={defaultToken:``,tokenPostfix:`.cpp`,brackets:[{token:`delimiter.curly`,open:`{`,close:`}`},{token:`delimiter.parenthesis`,open:`(`,close:`)`},{token:`delimiter.square`,open:`[`,close:`]`},{token:`delimiter.angle`,open:`<`,close:`>`}],keywords:`abstract.amp.array.auto.bool.break.case.catch.char.class.const.constexpr.const_cast.continue.cpu.decltype.default.delegate.delete.do.double.dynamic_cast.each.else.enum.event.explicit.export.extern.false.final.finally.float.for.friend.gcnew.generic.goto.if.in.initonly.inline.int.interface.interior_ptr.internal.literal.long.mutable.namespace.new.noexcept.nullptr.__nullptr.operator.override.partial.pascal.pin_ptr.private.property.protected.public.ref.register.reinterpret_cast.restrict.return.safe_cast.sealed.short.signed.sizeof.static.static_assert.static_cast.struct.switch.template.this.thread_local.throw.tile_static.true.try.typedef.typeid.typename.union.unsigned.using.virtual.void.volatile.wchar_t.where.while._asm._based._cdecl._declspec._fastcall._if_exists._if_not_exists._inline._multiple_inheritance._pascal._single_inheritance._stdcall._virtual_inheritance._w64.__abstract.__alignof.__asm.__assume.__based.__box.__builtin_alignof.__cdecl.__clrcall.__declspec.__delegate.__event.__except.__fastcall.__finally.__forceinline.__gc.__hook.__identifier.__if_exists.__if_not_exists.__inline.__int128.__int16.__int32.__int64.__int8.__interface.__leave.__m128.__m128d.__m128i.__m256.__m256d.__m256i.__m512.__m512d.__m512i.__m64.__multiple_inheritance.__newslot.__nogc.__noop.__nounwind.__novtordisp.__pascal.__pin.__pragma.__property.__ptr32.__ptr64.__raise.__restrict.__resume.__sealed.__single_inheritance.__stdcall.__super.__thiscall.__try.__try_cast.__typeof.__unaligned.__unhook.__uuidof.__value.__virtual_inheritance.__w64.__wchar_t`.split(`.`),operators:`=.>.<.!.~.?.:.==.<=.>=.!=.&&.||.++.--.+.-.*./.&.|.^.%.<<.>>.+=.-=.*=./=.&=.|=.^=.%=.<<=.>>=`.split(`.`),symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[0abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,integersuffix:/([uU](ll|LL|l|L)|(ll|LL|l|L)?[uU]?)/,floatsuffix:/[fFlL]?/,encoding:/u|u8|U|L/,tokenizer:{root:[[/@encoding?R\"(?:([^ ()\\\t]*))\(/,{token:`string.raw.begin`,next:`@raw.$1`}],[/[a-zA-Z_]\w*/,{cases:{"@keywords":{token:`keyword.$0`},"@default":`identifier`}}],[/^\s*#\s*include/,{token:`keyword.directive.include`,next:`@include`}],[/^\s*#\s*\w+/,`keyword.directive`],{include:`@whitespace`},[/\[\s*\[/,{token:`annotation`,next:`@annotation`}],[/[{}()<>\[\]]/,`@brackets`],[/@symbols/,{cases:{"@operators":`delimiter`,"@default":``}}],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,`number.float`],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,`number.float`],[/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/,`number.hex`],[/0[0-7']*[0-7](@integersuffix)/,`number.octal`],[/0[bB][0-1']*[0-1](@integersuffix)/,`number.binary`],[/\d[\d']*\d(@integersuffix)/,`number`],[/\d(@integersuffix)/,`number`],[/[;,.]/,`delimiter`],[/"([^"\\]|\\.)*$/,`string.invalid`],[/"/,`string`,`@string`],[/'[^\\']'/,`string`],[/(')(@escapes)(')/,[`string`,`string.escape`,`string`]],[/'/,`string.invalid`]],whitespace:[[/[ \t\r\n]+/,``],[/\/\*\*(?!\/)/,`comment.doc`,`@doccomment`],[/\/\*/,`comment`,`@comment`],[/\/\/.*\\$/,`comment`,`@linecomment`],[/\/\/.*$/,`comment`]],comment:[[/[^\/*]+/,`comment`],[/\*\//,`comment`,`@pop`],[/[\/*]/,`comment`]],linecomment:[[/.*[^\\]$/,`comment`,`@pop`],[/[^]+/,`comment`]],doccomment:[[/[^\/*]+/,`comment.doc`],[/\*\//,`comment.doc`,`@pop`],[/[\/*]/,`comment.doc`]],string:[[/[^\\"]+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/"/,`string`,`@pop`]],raw:[[/[^)]+/,`string.raw`],[/\)$S2\"/,{token:`string.raw.end`,next:`@pop`}],[/\)/,`string.raw`]],annotation:[{include:`@whitespace`},[/using|alignas/,`keyword`],[/[a-zA-Z0-9_]+/,`annotation`],[/[,:]/,`delimiter`],[/[()]/,`@brackets`],[/\]\s*\]/,{token:`annotation`,next:`@pop`}]],include:[[/(\s*)(<)([^<>]*)(>)/,[``,`keyword.directive.include.begin`,`string.include.identifier`,{token:`keyword.directive.include.end`,next:`@pop`}]],[/(\s*)(")([^"]*)(")/,[``,`keyword.directive.include.begin`,`string.include.identifier`,{token:`keyword.directive.include.end`,next:`@pop`}]]]}};export{e as conf,t as language};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\$\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:`//`,blockComment:[`/*`,`*/`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`'`,close:`'`,notIn:[`string`,`comment`]},{open:`"`,close:`"`,notIn:[`string`,`comment`]}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`<`,close:`>`},{open:`'`,close:`'`},{open:`"`,close:`"`}],folding:{markers:{start:RegExp(`^\\s*#region\\b`),end:RegExp(`^\\s*#endregion\\b`)}}},t={defaultToken:``,tokenPostfix:`.cs`,brackets:[{open:`{`,close:`}`,token:`delimiter.curly`},{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`},{open:`<`,close:`>`,token:`delimiter.angle`}],keywords:`extern.alias.using.bool.decimal.sbyte.byte.short.ushort.int.uint.long.ulong.char.float.double.object.dynamic.string.assembly.is.as.ref.out.this.base.new.typeof.void.checked.unchecked.default.delegate.var.const.if.else.switch.case.while.do.for.foreach.in.break.continue.goto.return.throw.try.catch.finally.lock.yield.from.let.where.join.on.equals.into.orderby.ascending.descending.select.group.by.namespace.partial.class.field.event.method.param.public.protected.internal.private.abstract.sealed.static.struct.readonly.volatile.virtual.override.params.get.set.add.remove.operator.true.false.implicit.explicit.interface.enum.null.async.await.fixed.sizeof.stackalloc.unsafe.nameof.when`.split(`.`),namespaceFollows:[`namespace`,`using`],parenFollows:[`if`,`for`,`while`,`switch`,`foreach`,`using`,`catch`,`when`],operators:`=.??.||.&&.|.^.&.==.!=.<=.>=.<<.+.-.*./.%.!.~.++.--.+=.-=.*=./=.%=.&=.|=.^=.<<=.>>=.>>.=>`.split(`.`),symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/\@?[a-zA-Z_]\w*/,{cases:{"@namespaceFollows":{token:`keyword.$0`,next:`@namespace`},"@keywords":{token:`keyword.$0`,next:`@qualified`},"@default":{token:`identifier`,next:`@qualified`}}}],{include:`@whitespace`},[/}/,{cases:{"$S2==interpolatedstring":{token:`string.quote`,next:`@pop`},"$S2==litinterpstring":{token:`string.quote`,next:`@pop`},"@default":`@brackets`}}],[/[{}()\[\]]/,`@brackets`],[/[<>](?!@symbols)/,`@brackets`],[/@symbols/,{cases:{"@operators":`delimiter`,"@default":``}}],[/[0-9_]*\.[0-9_]+([eE][\-+]?\d+)?[fFdD]?/,`number.float`],[/0[xX][0-9a-fA-F_]+/,`number.hex`],[/0[bB][01_]+/,`number.hex`],[/[0-9_]+/,`number`],[/[;,.]/,`delimiter`],[/"([^"\\]|\\.)*$/,`string.invalid`],[/"/,{token:`string.quote`,next:`@string`}],[/\$\@"/,{token:`string.quote`,next:`@litinterpstring`}],[/\@"/,{token:`string.quote`,next:`@litstring`}],[/\$"/,{token:`string.quote`,next:`@interpolatedstring`}],[/'[^\\']'/,`string`],[/(')(@escapes)(')/,[`string`,`string.escape`,`string`]],[/'/,`string.invalid`]],qualified:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:`keyword.$0`},"@default":`identifier`}}],[/\./,`delimiter`],[``,``,`@pop`]],namespace:[{include:`@whitespace`},[/[A-Z]\w*/,`namespace`],[/[\.=]/,`delimiter`],[``,``,`@pop`]],comment:[[/[^\/*]+/,`comment`],[`\\*/`,`comment`,`@pop`],[/[\/*]/,`comment`]],string:[[/[^\\"]+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/"/,{token:`string.quote`,next:`@pop`}]],litstring:[[/[^"]+/,`string`],[/""/,`string.escape`],[/"/,{token:`string.quote`,next:`@pop`}]],litinterpstring:[[/[^"{]+/,`string`],[/""/,`string.escape`],[/{{/,`string.escape`],[/}}/,`string.escape`],[/{/,{token:`string.quote`,next:`root.litinterpstring`}],[/"/,{token:`string.quote`,next:`@pop`}]],interpolatedstring:[[/[^\\"{]+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/{{/,`string.escape`],[/}}/,`string.escape`],[/{/,{token:`string.quote`,next:`root.interpolatedstring`}],[/"/,{token:`string.quote`,next:`@pop`}]],whitespace:[[/^[ \t\v\f]*#((r)|(load))(?=\s)/,`directive.csx`],[/^[ \t\v\f]*#\w.*$/,`namespace.cpp`],[/[ \t\v\f\r\n]+/,``],[/\/\*/,`comment`,`@comment`],[/\/\/.*$/,`comment`]]}};export{e as conf,t as language};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={brackets:[],autoClosingPairs:[],surroundingPairs:[]},t={keywords:[],typeKeywords:[],tokenPostfix:`.csp`,operators:[],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/child-src/,`string.quote`],[/connect-src/,`string.quote`],[/default-src/,`string.quote`],[/font-src/,`string.quote`],[/frame-src/,`string.quote`],[/img-src/,`string.quote`],[/manifest-src/,`string.quote`],[/media-src/,`string.quote`],[/object-src/,`string.quote`],[/script-src/,`string.quote`],[/style-src/,`string.quote`],[/worker-src/,`string.quote`],[/base-uri/,`string.quote`],[/plugin-types/,`string.quote`],[/sandbox/,`string.quote`],[/disown-opener/,`string.quote`],[/form-action/,`string.quote`],[/frame-ancestors/,`string.quote`],[/report-uri/,`string.quote`],[/report-to/,`string.quote`],[/upgrade-insecure-requests/,`string.quote`],[/block-all-mixed-content/,`string.quote`],[/require-sri-for/,`string.quote`],[/reflected-xss/,`string.quote`],[/referrer/,`string.quote`],[/policy-uri/,`string.quote`],[/'self'/,`string.quote`],[/'unsafe-inline'/,`string.quote`],[/'unsafe-eval'/,`string.quote`],[/'strict-dynamic'/,`string.quote`],[/'unsafe-hashed-attributes'/,`string.quote`]]}};export{e as conf,t as language};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
var e={wordPattern:/(#?-?\d*\.\d\w*%?)|((::|[@#.!:])?[\w-?]+%?)|::|[@#.!:]/g,comments:{blockComment:[`/*`,`*/`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`,notIn:[`string`,`comment`]},{open:`[`,close:`]`,notIn:[`string`,`comment`]},{open:`(`,close:`)`,notIn:[`string`,`comment`]},{open:`"`,close:`"`,notIn:[`string`,`comment`]},{open:`'`,close:`'`,notIn:[`string`,`comment`]}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],folding:{markers:{start:RegExp(`^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/`),end:RegExp(`^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/`)}}},t={defaultToken:``,tokenPostfix:`.css`,ws:`[
|
|
2
|
+
\r\f]*`,identifier:`-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*`,brackets:[{open:`{`,close:`}`,token:`delimiter.bracket`},{open:`[`,close:`]`,token:`delimiter.bracket`},{open:`(`,close:`)`,token:`delimiter.parenthesis`},{open:`<`,close:`>`,token:`delimiter.angle`}],tokenizer:{root:[{include:`@selector`}],selector:[{include:`@comments`},{include:`@import`},{include:`@strings`},[`[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)`,{token:`keyword`,next:`@keyframedeclaration`}],[`[@](page|content|font-face|-moz-document)`,{token:`keyword`}],[`[@](charset|namespace)`,{token:`keyword`,next:`@declarationbody`}],[`(url-prefix)(\\()`,[`attribute.value`,{token:`delimiter.parenthesis`,next:`@urldeclaration`}]],[`(url)(\\()`,[`attribute.value`,{token:`delimiter.parenthesis`,next:`@urldeclaration`}]],{include:`@selectorname`},[`[\\*]`,`tag`],[`[>\\+,]`,`delimiter`],[`\\[`,{token:`delimiter.bracket`,next:`@selectorattribute`}],[`{`,{token:`delimiter.bracket`,next:`@selectorbody`}]],selectorbody:[{include:`@comments`},[`[*_]?@identifier@ws:(?=(\\s|\\d|[^{;}]*[;}]))`,`attribute.name`,`@rulevalue`],[`}`,{token:`delimiter.bracket`,next:`@pop`}]],selectorname:[[`(\\.|#(?=[^{])|%|(@identifier)|:)+`,`tag`]],selectorattribute:[{include:`@term`},[`]`,{token:`delimiter.bracket`,next:`@pop`}]],term:[{include:`@comments`},[`(url-prefix)(\\()`,[`attribute.value`,{token:`delimiter.parenthesis`,next:`@urldeclaration`}]],[`(url)(\\()`,[`attribute.value`,{token:`delimiter.parenthesis`,next:`@urldeclaration`}]],{include:`@functioninvocation`},{include:`@numbers`},{include:`@name`},{include:`@strings`},[`([<>=\\+\\-\\*\\/\\^\\|\\~,])`,`delimiter`],[`,`,`delimiter`]],rulevalue:[{include:`@comments`},{include:`@strings`},{include:`@term`},[`!important`,`keyword`],[`;`,`delimiter`,`@pop`],[`(?=})`,{token:``,next:`@pop`}]],warndebug:[[`[@](warn|debug)`,{token:`keyword`,next:`@declarationbody`}]],import:[[`[@](import)`,{token:`keyword`,next:`@declarationbody`}]],urldeclaration:[{include:`@strings`},[`[^)\r
|
|
3
|
+
]+`,`string`],[`\\)`,{token:`delimiter.parenthesis`,next:`@pop`}]],parenthizedterm:[{include:`@term`},[`\\)`,{token:`delimiter.parenthesis`,next:`@pop`}]],declarationbody:[{include:`@term`},[`;`,`delimiter`,`@pop`],[`(?=})`,{token:``,next:`@pop`}]],comments:[[`\\/\\*`,`comment`,`@comment`],[`\\/\\/+.*`,`comment`]],comment:[[`\\*\\/`,`comment`,`@pop`],[/[^*/]+/,`comment`],[/./,`comment`]],name:[[`@identifier`,`attribute.value`]],numbers:[[`-?(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?`,{token:`attribute.value.number`,next:`@units`}],[`#[0-9a-fA-F_]+(?!\\w)`,`attribute.value.hex`]],units:[[`(em|ex|ch|rem|fr|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?`,`attribute.value.unit`,`@pop`]],keyframedeclaration:[[`@identifier`,`attribute.value`],[`{`,{token:`delimiter.bracket`,switchTo:`@keyframebody`}]],keyframebody:[{include:`@term`},[`{`,{token:`delimiter.bracket`,next:`@selectorbody`}],[`}`,{token:`delimiter.bracket`,next:`@pop`}]],functioninvocation:[[`@identifier\\(`,{token:`attribute.value`,next:`@functionarguments`}]],functionarguments:[[`\\$@identifier@ws:`,`attribute.name`],[`[,]`,`delimiter`],{include:`@term`},[`\\)`,{token:`attribute.value`,next:`@pop`}]],strings:[[`~?"`,{token:`string`,next:`@stringenddoublequote`}],[`~?'`,{token:`string`,next:`@stringendquote`}]],stringenddoublequote:[[`\\\\.`,`string`],[`"`,{token:`string`,next:`@pop`}],[/[^\\"]+/,`string`],[`.`,`string`]],stringendquote:[[`\\\\.`,`string`],[`'`,{token:`string`,next:`@pop`}],[/[^\\']+/,`string`],[`.`,`string`]]}};export{e as conf,t as language};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={comments:{lineComment:`//`,blockComment:[`/*`,`*/`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`},{open:"`",close:"`"}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`},{open:"`",close:"`"}]},t={defaultToken:``,tokenPostfix:`.cypher`,ignoreCase:!0,brackets:[{open:`{`,close:`}`,token:`delimiter.curly`},{open:`[`,close:`]`,token:`delimiter.bracket`},{open:`(`,close:`)`,token:`delimiter.parenthesis`}],keywords:`ALL.AND.AS.ASC.ASCENDING.BY.CALL.CASE.CONTAINS.CREATE.DELETE.DESC.DESCENDING.DETACH.DISTINCT.ELSE.END.ENDS.EXISTS.IN.IS.LIMIT.MANDATORY.MATCH.MERGE.NOT.ON.ON.OPTIONAL.OR.ORDER.REMOVE.RETURN.SET.SKIP.STARTS.THEN.UNION.UNWIND.WHEN.WHERE.WITH.XOR.YIELD`.split(`.`),builtinLiterals:[`true`,`TRUE`,`false`,`FALSE`,`null`,`NULL`],builtinFunctions:`abs.acos.asin.atan.atan2.avg.ceil.coalesce.collect.cos.cot.count.degrees.e.endNode.exists.exp.floor.head.id.keys.labels.last.left.length.log.log10.lTrim.max.min.nodes.percentileCont.percentileDisc.pi.properties.radians.rand.range.relationships.replace.reverse.right.round.rTrim.sign.sin.size.split.sqrt.startNode.stDev.stDevP.substring.sum.tail.tan.timestamp.toBoolean.toFloat.toInteger.toLower.toString.toUpper.trim.type`.split(`.`),operators:[`+`,`-`,`*`,`/`,`%`,`^`,`=`,`<>`,`<`,`>`,`<=`,`>=`,`->`,`<-`,`-->`,`<--`],escapes:/\\(?:[tbnrf\\"'`]|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+/,octaldigits:/[0-7]+/,hexdigits:/[0-9a-fA-F]+/,tokenizer:{root:[[/[{}[\]()]/,`@brackets`],{include:`common`}],common:[{include:`@whitespace`},{include:`@numbers`},{include:`@strings`},[/:[a-zA-Z_][\w]*/,`type.identifier`],[/[a-zA-Z_][\w]*(?=\()/,{cases:{"@builtinFunctions":`predefined.function`}}],[/[a-zA-Z_$][\w$]*/,{cases:{"@keywords":`keyword`,"@builtinLiterals":`predefined.literal`,"@default":`identifier`}}],[/`/,`identifier.escape`,`@identifierBacktick`],[/[;,.:|]/,`delimiter`],[/[<>=%+\-*/^]+/,{cases:{"@operators":`delimiter`,"@default":``}}]],numbers:[[/-?(@digits)[eE](-?(@digits))?/,`number.float`],[/-?(@digits)?\.(@digits)([eE]-?(@digits))?/,`number.float`],[/-?0x(@hexdigits)/,`number.hex`],[/-?0(@octaldigits)/,`number.octal`],[/-?(@digits)/,`number`]],strings:[[/"([^"\\]|\\.)*$/,`string.invalid`],[/'([^'\\]|\\.)*$/,`string.invalid`],[/"/,`string`,`@stringDouble`],[/'/,`string`,`@stringSingle`]],whitespace:[[/[ \t\r\n]+/,`white`],[/\/\*/,`comment`,`@comment`],[/\/\/.*$/,`comment`]],comment:[[/\/\/.*/,`comment`],[/[^/*]+/,`comment`],[/\*\//,`comment`,`@pop`],[/[/*]/,`comment`]],stringDouble:[[/[^\\"]+/,`string`],[/@escapes/,`string`],[/\\./,`string.invalid`],[/"/,`string`,`@pop`]],stringSingle:[[/[^\\']+/,`string`],[/@escapes/,`string`],[/\\./,`string.invalid`],[/'/,`string`,`@pop`]],identifierBacktick:[[/[^\\`]+/,`identifier.escape`],[/@escapes/,`identifier.escape`],[/\\./,`identifier.escape.invalid`],[/`/,`identifier.escape`,`@pop`]]}};export{e as conf,t as language};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={comments:{lineComment:`//`,blockComment:[`/*`,`*/`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`'`,close:`'`,notIn:[`string`,`comment`]},{open:`"`,close:`"`,notIn:[`string`]},{open:"`",close:"`",notIn:[`string`,`comment`]},{open:`/**`,close:` */`,notIn:[`string`]}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`<`,close:`>`},{open:`'`,close:`'`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:"`",close:"`"}],folding:{markers:{start:/^\s*\s*#?region\b/,end:/^\s*\s*#?endregion\b/}}},t={defaultToken:`invalid`,tokenPostfix:`.dart`,keywords:`abstract.dynamic.implements.show.as.else.import.static.assert.enum.in.super.async.export.interface.switch.await.extends.is.sync.break.external.library.this.case.factory.mixin.throw.catch.false.new.true.class.final.null.try.const.finally.on.typedef.continue.for.operator.var.covariant.Function.part.void.default.get.rethrow.while.deferred.hide.return.with.do.if.set.yield`.split(`.`),typeKeywords:[`int`,`double`,`String`,`bool`],operators:`+.-.*./.~/.%.++.--.==.!=.>.<.>=.<=.=.-=./=.%=.>>=.^=.+=.*=.~/=.<<=.&=.!=.||.&&.&.|.^.~.<<.>>.!.>>>.??.?.:.|=`.split(`.`),symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+(_+\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,regexpctl:/[(){}\[\]\$\^|\-*+?\.]/,regexpesc:/\\(?:[bBdDfnrstvwWn0\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,tokenizer:{root:[[/[{}]/,`delimiter.bracket`],{include:`common`}],common:[[/[a-z_$][\w$]*/,{cases:{"@typeKeywords":`type.identifier`,"@keywords":`keyword`,"@default":`identifier`}}],[/[A-Z_$][\w\$]*/,`type.identifier`],{include:`@whitespace`},[/\/(?=([^\\\/]|\\.)+\/([gimsuy]*)(\s*)(\.|;|,|\)|\]|\}|$))/,{token:`regexp`,bracket:`@open`,next:`@regexp`}],[/@[a-zA-Z]+/,`annotation`],[/[()\[\]]/,`@brackets`],[/[<>](?!@symbols)/,`@brackets`],[/!(?=([^=]|$))/,`delimiter`],[/@symbols/,{cases:{"@operators":`delimiter`,"@default":``}}],[/(@digits)[eE]([\-+]?(@digits))?/,`number.float`],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?/,`number.float`],[/0[xX](@hexdigits)n?/,`number.hex`],[/0[oO]?(@octaldigits)n?/,`number.octal`],[/0[bB](@binarydigits)n?/,`number.binary`],[/(@digits)n?/,`number`],[/[;,.]/,`delimiter`],[/"([^"\\]|\\.)*$/,`string.invalid`],[/'([^'\\]|\\.)*$/,`string.invalid`],[/"/,`string`,`@string_double`],[/'/,`string`,`@string_single`]],whitespace:[[/[ \t\r\n]+/,``],[/\/\*\*(?!\/)/,`comment.doc`,`@jsdoc`],[/\/\*/,`comment`,`@comment`],[/\/\/\/.*$/,`comment.doc`],[/\/\/.*$/,`comment`]],comment:[[/[^\/*]+/,`comment`],[/\*\//,`comment`,`@pop`],[/[\/*]/,`comment`]],jsdoc:[[/[^\/*]+/,`comment.doc`],[/\*\//,`comment.doc`,`@pop`],[/[\/*]/,`comment.doc`]],regexp:[[/(\{)(\d+(?:,\d*)?)(\})/,[`regexp.escape.control`,`regexp.escape.control`,`regexp.escape.control`]],[/(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/,[`regexp.escape.control`,{token:`regexp.escape.control`,next:`@regexrange`}]],[/(\()(\?:|\?=|\?!)/,[`regexp.escape.control`,`regexp.escape.control`]],[/[()]/,`regexp.escape.control`],[/@regexpctl/,`regexp.escape.control`],[/[^\\\/]/,`regexp`],[/@regexpesc/,`regexp.escape`],[/\\\./,`regexp.invalid`],[/(\/)([gimsuy]*)/,[{token:`regexp`,bracket:`@close`,next:`@pop`},`keyword.other`]]],regexrange:[[/-/,`regexp.escape.control`],[/\^/,`regexp.invalid`],[/@regexpesc/,`regexp.escape`],[/[^\]]/,`regexp`],[/\]/,{token:`regexp.escape.control`,next:`@pop`,bracket:`@close`}]],string_double:[[/[^\\"\$]+/,`string`],[/[^\\"]+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/"/,`string`,`@pop`],[/\$\w+/,`identifier`]],string_single:[[/[^\\'\$]+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/'/,`string`,`@pop`],[/\$\w+/,`identifier`]]}};export{e as conf,t as language};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}]},t={defaultToken:``,tokenPostfix:`.dockerfile`,variable:/\${?[\w]+}?/,tokenizer:{root:[{include:`@whitespace`},{include:`@comment`},[/(ONBUILD)(\s+)/,[`keyword`,``]],[/(ENV)(\s+)([\w]+)/,[`keyword`,``,{token:`variable`,next:`@arguments`}]],[/(FROM|MAINTAINER|RUN|EXPOSE|ENV|ADD|ARG|VOLUME|LABEL|USER|WORKDIR|COPY|CMD|STOPSIGNAL|SHELL|HEALTHCHECK|ENTRYPOINT)/,{token:`keyword`,next:`@arguments`}]],arguments:[{include:`@whitespace`},{include:`@strings`},[/(@variable)/,{cases:{"@eos":{token:`variable`,next:`@popall`},"@default":`variable`}}],[/\\/,{cases:{"@eos":``,"@default":``}}],[/./,{cases:{"@eos":{token:``,next:`@popall`},"@default":``}}]],whitespace:[[/\s+/,{cases:{"@eos":{token:``,next:`@popall`},"@default":``}}]],comment:[[/(^#.*$)/,`comment`,`@popall`]],strings:[[/\\'$/,``,`@popall`],[/\\'/,``],[/'$/,`string`,`@popall`],[/'/,`string`,`@stringBody`],[/"$/,`string`,`@popall`],[/"/,`string`,`@dblStringBody`]],stringBody:[[/[^\\\$']/,{cases:{"@eos":{token:`string`,next:`@popall`},"@default":`string`}}],[/\\./,`string.escape`],[/'$/,`string`,`@popall`],[/'/,`string`,`@pop`],[/(@variable)/,`variable`],[/\\$/,`string`],[/$/,`string`,`@popall`]],dblStringBody:[[/[^\\\$"]/,{cases:{"@eos":{token:`string`,next:`@popall`},"@default":`string`}}],[/\\./,`string.escape`],[/"$/,`string`,`@popall`],[/"/,`string`,`@pop`],[/(@variable)/,`variable`],[/\\$/,`string`],[/$/,`string`,`@popall`]]}};export{e as conf,t as language};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={comments:{lineComment:`//`,blockComment:[`/*`,`*/`]},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`'`,close:`'`,notIn:[`string`,`comment`]},{open:`"`,close:`"`,notIn:[`string`,`comment`]}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`<`,close:`>`},{open:`'`,close:`'`},{open:`"`,close:`"`}]},t={defaultToken:``,tokenPostfix:`.ecl`,ignoreCase:!0,brackets:[{open:`{`,close:`}`,token:`delimiter.curly`},{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`},{open:`<`,close:`>`,token:`delimiter.angle`}],pounds:`append|break|declare|demangle|end|for|getdatatype|if|inmodule|loop|mangle|onwarning|option|set|stored|uniquename`,keywords:`__compressed__.after.all.and.any.as.atmost.before.beginc.best.between.case.cluster.compressed.compression.const.counter.csv.default.descend.embed.encoding.encrypt.end.endc.endembed.endmacro.enum.escape.except.exclusive.expire.export.extend.fail.few.fileposition.first.flat.forward.from.full.function.functionmacro.group.grouped.heading.hole.ifblock.import.in.inner.interface.internal.joined.keep.keyed.last.left.limit.linkcounted.literal.little_endian.load.local.locale.lookup.lzw.macro.many.maxcount.maxlength.min skew.module.mofn.multiple.named.namespace.nocase.noroot.noscan.nosort.not.noxpath.of.onfail.only.opt.or.outer.overwrite.packed.partition.penalty.physicallength.pipe.prefetch.quote.record.repeat.retry.return.right.right1.right2.rows.rowset.scan.scope.self.separator.service.shared.skew.skip.smart.soapaction.sql.stable.store.terminator.thor.threshold.timelimit.timeout.token.transform.trim.type.unicodeorder.unordered.unsorted.unstable.update.use.validate.virtual.whole.width.wild.within.wnotrim.xml.xpath`.split(`.`),functions:`abs.acos.aggregate.allnodes.apply.ascii.asin.assert.asstring.atan.atan2.ave.build.buildindex.case.catch.choose.choosen.choosesets.clustersize.combine.correlation.cos.cosh.count.covariance.cron.dataset.dedup.define.denormalize.dictionary.distribute.distributed.distribution.ebcdic.enth.error.evaluate.event.eventextra.eventname.exists.exp.fail.failcode.failmessage.fetch.fromunicode.fromxml.getenv.getisvalid.global.graph.group.hash.hash32.hash64.hashcrc.hashmd5.having.httpcall.httpheader.if.iff.index.intformat.isvalid.iterate.join.keydiff.keypatch.keyunicode.length.library.limit.ln.loadxml.local.log.loop.map.matched.matchlength.matchposition.matchtext.matchunicode.max.merge.mergejoin.min.nofold.nolocal.nonempty.normalize.nothor.notify.output.parallel.parse.pipe.power.preload.process.project.pull.random.range.rank.ranked.realformat.recordof.regexfind.regexreplace.regroup.rejected.rollup.round.roundup.row.rowdiff.sample.sequential.set.sin.sinh.sizeof.soapcall.sort.sorted.sqrt.stepped.stored.sum.table.tan.tanh.thisnode.topn.tounicode.toxml.transfer.transform.trim.truncate.typeof.ungroup.unicodeorder.variance.wait.which.workunit.xmldecode.xmlencode.xmltext.xmlunicode`.split(`.`),typesint:`integer|unsigned`,typesnum:[`data`,`qstring`,`string`,`unicode`,`utf8`,`varstring`,`varunicode`],typesone:`ascii|big_endian|boolean|data|decimal|ebcdic|grouped|integer|linkcounted|pattern|qstring|real|record|rule|set of|streamed|string|token|udecimal|unicode|unsigned|utf8|varstring|varunicode`,operators:[`+`,`-`,`/`,`:=`,`<`,`<>`,`=`,`>`,`\\`,`and`,`in`,`not`,`or`],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/@typesint[4|8]/,`type`],[/#(@pounds)/,`type`],[/@typesone/,`type`],[/[a-zA-Z_$][\w-$]*/,{cases:{"@functions":`keyword.function`,"@keywords":`keyword`,"@operators":`operator`}}],{include:`@whitespace`},[/[{}()\[\]]/,`@brackets`],[/[<>](?!@symbols)/,`@brackets`],[/@symbols/,{cases:{"@operators":`delimiter`,"@default":``}}],[/[0-9_]*\.[0-9_]+([eE][\-+]?\d+)?/,`number.float`],[/0[xX][0-9a-fA-F_]+/,`number.hex`],[/0[bB][01]+/,`number.hex`],[/[0-9_]+/,`number`],[/[;,.]/,`delimiter`],[/"([^"\\]|\\.)*$/,`string.invalid`],[/"/,`string`,`@string`],[/'[^\\']'/,`string`],[/(')(@escapes)(')/,[`string`,`string.escape`,`string`]],[/'/,`string.invalid`]],whitespace:[[/[ \t\v\f\r\n]+/,``],[/\/\*/,`comment`,`@comment`],[/\/\/.*$/,`comment`]],comment:[[/[^\/*]+/,`comment`],[/\*\//,`comment`,`@pop`],[/[\/*]/,`comment`]],string:[[/[^\\']+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/'/,`string`,`@pop`]]}};export{e as conf,t as language};
|