@asrunjs/asrun 0.0.0-stage → 0.5.2
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/.claude/commands/explore-case.md +18 -0
- package/.claude/commands/gen-spec.md +16 -0
- package/.claude/commands/heal-spec.md +26 -0
- package/.claude/commands/make-case.md +11 -0
- package/.claude/settings.json +5 -0
- package/.claude/skills/exploring-cases/SKILL.md +146 -0
- package/.claude/skills/exploring-cases/references/assertion-targets.md +103 -0
- package/.claude/skills/exploring-cases/references/handoff-card.js +128 -0
- package/.claude/skills/exploring-cases/references/open-questions.md +116 -0
- package/.claude/skills/exploring-cases/references/readiness.md +146 -0
- package/.claude/skills/exploring-cases/references/user-handoff.md +157 -0
- package/.claude/skills/generating-specs/SKILL.md +219 -0
- package/.claude/skills/generating-specs/references/conventions.md +148 -0
- package/.claude/skills/making-cases/SKILL.md +72 -0
- package/.claude/skills/making-cases/references/gaps.md +36 -0
- package/.claude/skills/making-cases/references/normalizing.md +39 -0
- package/.claude/skills/making-cases/references/splitting.md +28 -0
- package/.claude/skills/making-cases/references/writes-and-email.md +37 -0
- package/AGENTS.md +159 -0
- package/CLAUDE.md +2 -0
- package/LICENSE +21 -0
- package/README.md +511 -2
- package/bin/asrun.mjs +49 -0
- package/dist/lib/account-lock.d.ts +6 -0
- package/dist/lib/account-lock.js +52 -0
- package/dist/lib/assertions.d.ts +14 -0
- package/dist/lib/assertions.js +39 -0
- package/dist/lib/baselines.d.ts +43 -0
- package/dist/lib/baselines.js +108 -0
- package/dist/lib/build-artifacts.d.ts +8 -0
- package/dist/lib/build-artifacts.js +10 -0
- package/dist/lib/case-doc.d.ts +311 -0
- package/dist/lib/case-doc.js +1117 -0
- package/dist/lib/case-id.d.ts +11 -0
- package/dist/lib/case-id.js +17 -0
- package/dist/lib/case-ops.d.ts +26 -0
- package/dist/lib/case-ops.js +110 -0
- package/dist/lib/cases.d.ts +16 -0
- package/dist/lib/cases.js +51 -0
- package/dist/lib/cli.d.ts +10 -0
- package/dist/lib/cli.js +18 -0
- package/dist/lib/command.d.ts +24 -0
- package/dist/lib/command.js +90 -0
- package/dist/lib/downloads.d.ts +42 -0
- package/dist/lib/downloads.js +84 -0
- package/dist/lib/email.d.ts +10 -0
- package/dist/lib/email.js +19 -0
- package/dist/lib/ffmpeg.d.ts +8 -0
- package/dist/lib/ffmpeg.js +50 -0
- package/dist/lib/fixtures.d.ts +40 -0
- package/dist/lib/fixtures.js +149 -0
- package/dist/lib/login-card.d.ts +22 -0
- package/dist/lib/login-card.js +183 -0
- package/dist/lib/node-cli.d.ts +15 -0
- package/dist/lib/node-cli.js +36 -0
- package/dist/lib/paths.d.ts +25 -0
- package/dist/lib/paths.js +88 -0
- package/dist/lib/pdf.d.ts +71 -0
- package/dist/lib/pdf.js +140 -0
- package/dist/lib/profiles.d.ts +62 -0
- package/dist/lib/profiles.js +174 -0
- package/dist/lib/ready.d.ts +36 -0
- package/dist/lib/ready.js +53 -0
- package/dist/lib/records.d.ts +33 -0
- package/dist/lib/records.js +61 -0
- package/dist/lib/run-filters.d.ts +19 -0
- package/dist/lib/run-filters.js +38 -0
- package/dist/lib/run-summary.d.ts +90 -0
- package/dist/lib/run-summary.js +35 -0
- package/dist/lib/session.d.ts +30 -0
- package/dist/lib/session.js +111 -0
- package/dist/lib/summary-reporter.d.ts +16 -0
- package/dist/lib/summary-reporter.js +146 -0
- package/dist/lib/targets.d.ts +19 -0
- package/dist/lib/targets.js +26 -0
- package/dist/lib/ui-build.d.ts +10 -0
- package/dist/lib/ui-build.js +30 -0
- package/dist/lib/values.d.ts +29 -0
- package/dist/lib/values.js +85 -0
- package/dist/lib/write-gate.d.ts +41 -0
- package/dist/lib/write-gate.js +129 -0
- package/dist/playwright.config.d.ts +2 -0
- package/dist/playwright.config.js +92 -0
- package/dist/scripts/build.d.ts +1 -0
- package/dist/scripts/build.js +21 -0
- package/dist/scripts/check-cases.d.ts +1 -0
- package/dist/scripts/check-cases.js +149 -0
- package/dist/scripts/cleanup.d.ts +1 -0
- package/dist/scripts/cleanup.js +25 -0
- package/dist/scripts/cli.d.ts +1 -0
- package/dist/scripts/cli.js +28 -0
- package/dist/scripts/doctor.d.ts +1 -0
- package/dist/scripts/doctor.js +296 -0
- package/dist/scripts/explore.d.ts +1 -0
- package/dist/scripts/explore.js +75 -0
- package/dist/scripts/go.mjs +188 -0
- package/dist/scripts/heal-evidence.mjs +143 -0
- package/dist/scripts/init.d.ts +22 -0
- package/dist/scripts/init.js +332 -0
- package/dist/scripts/lint-specs.d.ts +1 -0
- package/dist/scripts/lint-specs.js +141 -0
- package/dist/scripts/login.d.ts +1 -0
- package/dist/scripts/login.js +75 -0
- package/dist/scripts/new-case.d.ts +1 -0
- package/dist/scripts/new-case.js +19 -0
- package/dist/scripts/render-pdf.d.ts +1 -0
- package/dist/scripts/render-pdf.js +44 -0
- package/dist/scripts/report.d.ts +1 -0
- package/dist/scripts/report.js +14 -0
- package/dist/scripts/review-baselines.d.ts +1 -0
- package/dist/scripts/review-baselines.js +30 -0
- package/dist/scripts/run.d.ts +1 -0
- package/dist/scripts/run.js +423 -0
- package/dist/scripts/status.d.ts +1 -0
- package/dist/scripts/status.js +31 -0
- package/dist/scripts/ui-build.d.ts +1 -0
- package/dist/scripts/ui-build.js +7 -0
- package/dist/scripts/ui-dev.d.ts +1 -0
- package/dist/scripts/ui-dev.js +3 -0
- package/dist/scripts/ui.d.ts +1 -0
- package/dist/scripts/ui.js +13 -0
- package/dist/ui/dev.d.ts +1 -0
- package/dist/ui/dev.js +36 -0
- package/dist/ui/server/actions.d.ts +95 -0
- package/dist/ui/server/actions.js +365 -0
- package/dist/ui/server/ai-models.d.ts +3 -0
- package/dist/ui/server/ai-models.js +347 -0
- package/dist/ui/server/ai-stream.d.ts +66 -0
- package/dist/ui/server/ai-stream.js +408 -0
- package/dist/ui/server/app.d.ts +4 -0
- package/dist/ui/server/app.js +395 -0
- package/dist/ui/server/cases.d.ts +23 -0
- package/dist/ui/server/cases.js +170 -0
- package/dist/ui/server/files.d.ts +5 -0
- package/dist/ui/server/files.js +67 -0
- package/dist/ui/server/index.d.ts +1 -0
- package/dist/ui/server/index.js +33 -0
- package/dist/ui/server/jobs.d.ts +80 -0
- package/dist/ui/server/jobs.js +317 -0
- package/dist/ui/server/profiles.d.ts +35 -0
- package/dist/ui/server/profiles.js +371 -0
- package/dist/ui/server/watch-files.d.ts +4 -0
- package/dist/ui/server/watch-files.js +36 -0
- package/dist/ui/shared/ai-commands.d.ts +88 -0
- package/dist/ui/shared/ai-commands.js +177 -0
- package/dist/ui/shared/case-id.d.ts +1 -0
- package/dist/ui/shared/case-id.js +1 -0
- package/dist/ui/shared/jobs.d.ts +6 -0
- package/dist/ui/shared/jobs.js +7 -0
- package/dist/ui/shared/product.d.ts +3 -0
- package/dist/ui/shared/product.js +3 -0
- package/dist/ui/shared/run-filters.d.ts +1 -0
- package/dist/ui/shared/run-filters.js +1 -0
- package/dist/ui/shared/site-address.d.ts +6 -0
- package/dist/ui/shared/site-address.js +11 -0
- package/dist/ui/shared/types.d.ts +371 -0
- package/dist/ui/shared/types.js +1 -0
- package/docs/agents/framework-dev.md +79 -0
- package/docs/theme-guide.html +922 -0
- package/package.json +109 -3
- package/templates/.claude/commands/explore-case.md +22 -0
- package/templates/.claude/commands/gen-spec.md +21 -0
- package/templates/.claude/commands/heal-spec.md +31 -0
- package/templates/.claude/commands/make-case.md +13 -0
- package/templates/.claude/settings.json +5 -0
- package/templates/.mcp.json +8 -0
- package/templates/AGENTS.md +64 -0
- package/templates/CLAUDE.md +1 -0
- package/templates/cases/_template.md +57 -0
- package/templates/gitignore +13 -0
- package/templates/opencode.jsonc +16 -0
- package/templates/package.json +31 -0
- package/templates/playwright.config.ts +3 -0
- package/templates/pnpm-workspace.yaml +5 -0
- package/templates/profiles.yaml +42 -0
- package/templates/seed.spec.ts +9 -0
- package/templates/tsconfig.json +14 -0
- package/ui/dist/apple-touch-icon.png +0 -0
- package/ui/dist/assets/apl-gfMMiTNf.js +1 -0
- package/ui/dist/assets/asciiarmor-C_eisQCp.js +1 -0
- package/ui/dist/assets/asn1-DCl_8MCW.js +1 -0
- package/ui/dist/assets/asterisk-BEn0Cwpx.js +1 -0
- package/ui/dist/assets/brainfuck-D5EjA2JK.js +1 -0
- package/ui/dist/assets/clike-xvONpD0Z.js +1 -0
- package/ui/dist/assets/clojure-BflJGmDX.js +1 -0
- package/ui/dist/assets/cmake-84nbDH0I.js +1 -0
- package/ui/dist/assets/cobol-DHLQUbN7.js +1 -0
- package/ui/dist/assets/coffeescript-De_zI4J0.js +1 -0
- package/ui/dist/assets/commonlisp-DgAKBe0r.js +1 -0
- package/ui/dist/assets/crystal-Bl6YKCG_.js +1 -0
- package/ui/dist/assets/css-CnaYoQib.js +1 -0
- package/ui/dist/assets/cypher-p9eYesGn.js +1 -0
- package/ui/dist/assets/d-DWkQyNnU.js +1 -0
- package/ui/dist/assets/diff-ChtP43wD.js +1 -0
- package/ui/dist/assets/dist-BGbe0-Aa.js +1 -0
- package/ui/dist/assets/dist-Ba-HC662.js +2 -0
- package/ui/dist/assets/dist-BtMLMthJ.js +1 -0
- package/ui/dist/assets/dist-Bw5-uxs9.js +1 -0
- package/ui/dist/assets/dist-BzulKuec.js +1 -0
- package/ui/dist/assets/dist-C-Oyo1ZT.js +1 -0
- package/ui/dist/assets/dist-C8MdhqgG.js +1 -0
- package/ui/dist/assets/dist-CG1pHn5m.js +1 -0
- package/ui/dist/assets/dist-CgIQYY1o.js +1 -0
- package/ui/dist/assets/dist-CmpteMYY.js +9 -0
- package/ui/dist/assets/dist-DDJNvivM.js +1 -0
- package/ui/dist/assets/dist-DF3F_I8N.js +1 -0
- package/ui/dist/assets/dist-DSy3dVf4.js +11 -0
- package/ui/dist/assets/dist-Dlorc3Sx.js +1 -0
- package/ui/dist/assets/dist-Dq6sW5Ur.js +1 -0
- package/ui/dist/assets/dist-Dr9crbBz.js +13 -0
- package/ui/dist/assets/dist-jjxQutEm.js +1 -0
- package/ui/dist/assets/dockerfile-DJkHQgkl.js +1 -0
- package/ui/dist/assets/dtd-DTF72YNO.js +1 -0
- package/ui/dist/assets/dylan-S7ucR4pR.js +1 -0
- package/ui/dist/assets/ebnf-D4c0_ac3.js +1 -0
- package/ui/dist/assets/ecl-BVIeWmwY.js +1 -0
- package/ui/dist/assets/eiffel-BEjRio4Q.js +1 -0
- package/ui/dist/assets/elm-Cshzl8qu.js +1 -0
- package/ui/dist/assets/erlang-BV0c4Hdn.js +1 -0
- package/ui/dist/assets/factor-LKH5gN8L.js +1 -0
- package/ui/dist/assets/fcl-ClOhbFR7.js +1 -0
- package/ui/dist/assets/forth-D6RzAl64.js +1 -0
- package/ui/dist/assets/fortran-Bt6PBEDR.js +1 -0
- package/ui/dist/assets/gas-BHEdbvp9.js +1 -0
- package/ui/dist/assets/gherkin-oBAE_ms0.js +1 -0
- package/ui/dist/assets/groovy-CUrWKPia.js +1 -0
- package/ui/dist/assets/haskell-BRsoo5mP.js +1 -0
- package/ui/dist/assets/haxe-DjVOVvNP.js +1 -0
- package/ui/dist/assets/http-CLVgA2GD.js +1 -0
- package/ui/dist/assets/idl-BUZw3wgd.js +1 -0
- package/ui/dist/assets/index-CTmnF0Wp.css +2 -0
- package/ui/dist/assets/index-P_Yo0ZZn.js +338 -0
- package/ui/dist/assets/javascript-lS2r2ifg.js +1 -0
- package/ui/dist/assets/julia-CQfgDRfP.js +1 -0
- package/ui/dist/assets/livescript-BXxG0Yva.js +1 -0
- package/ui/dist/assets/lua-DPCEkfD_.js +1 -0
- package/ui/dist/assets/mathematica-u8YMmbU0.js +1 -0
- package/ui/dist/assets/mbox-BEMVcqjs.js +1 -0
- package/ui/dist/assets/mirc-C9zpzAZU.js +1 -0
- package/ui/dist/assets/mllike-B45xgp2S.js +1 -0
- package/ui/dist/assets/modelica-CqHI_q-D.js +1 -0
- package/ui/dist/assets/mscgen-qgSLujhx.js +1 -0
- package/ui/dist/assets/mumps-BSzj6Xyz.js +1 -0
- package/ui/dist/assets/nginx-C-ORUuei.js +1 -0
- package/ui/dist/assets/nsis-viPvXFiq.js +1 -0
- package/ui/dist/assets/ntriples-CzMBulkp.js +1 -0
- package/ui/dist/assets/octave-D2Q8cUp1.js +1 -0
- package/ui/dist/assets/oz-BwTct_5T.js +1 -0
- package/ui/dist/assets/pascal-Dp_KdFgX.js +1 -0
- package/ui/dist/assets/perl-BkSkiI9m.js +1 -0
- package/ui/dist/assets/pig-AF4Hwhju.js +1 -0
- package/ui/dist/assets/powershell-D8WpQPaX.js +1 -0
- package/ui/dist/assets/properties-C357ku5U.js +1 -0
- package/ui/dist/assets/protobuf-D1ij_kNL.js +1 -0
- package/ui/dist/assets/pug-BqCHZ5xT.js +1 -0
- package/ui/dist/assets/puppet-BZyAS7I4.js +1 -0
- package/ui/dist/assets/python-B_1Jd8HM.js +1 -0
- package/ui/dist/assets/q-B9NhS7L_.js +1 -0
- package/ui/dist/assets/r-CxDmU1I4.js +1 -0
- package/ui/dist/assets/rpm-gpDK5sbt.js +1 -0
- package/ui/dist/assets/ruby-ChfNwlCY.js +1 -0
- package/ui/dist/assets/sas-C2OyD2Y6.js +1 -0
- package/ui/dist/assets/scheme-D9qYN0V5.js +1 -0
- package/ui/dist/assets/shell-DwuoZtxw.js +1 -0
- package/ui/dist/assets/sieve-tLWDfEkZ.js +1 -0
- package/ui/dist/assets/simple-mode-DXiLM1-G.js +1 -0
- package/ui/dist/assets/smalltalk-BLp5-jwC.js +1 -0
- package/ui/dist/assets/solr-B78wSQJQ.js +1 -0
- package/ui/dist/assets/sparql-Dz-mlCAC.js +1 -0
- package/ui/dist/assets/spreadsheet-CTIncYxj.js +1 -0
- package/ui/dist/assets/sql-DuQMFDvy.js +1 -0
- package/ui/dist/assets/stex-DNzd62Q_.js +1 -0
- package/ui/dist/assets/stylus-BOVgKnng.js +1 -0
- package/ui/dist/assets/swift-DKB6_1j6.js +1 -0
- package/ui/dist/assets/tcl-BGfruO1u.js +1 -0
- package/ui/dist/assets/textile-C4jVoHG1.js +1 -0
- package/ui/dist/assets/tiddlywiki-VlUiK86J.js +1 -0
- package/ui/dist/assets/tiki-CvUEFusT.js +1 -0
- package/ui/dist/assets/toml-BPTmHmyx.js +1 -0
- package/ui/dist/assets/troff-C2dAgh7P.js +1 -0
- package/ui/dist/assets/ttcn-PPSTk1ow.js +1 -0
- package/ui/dist/assets/ttcn-cfg-2b4Gb5sE.js +1 -0
- package/ui/dist/assets/turtle-Cx3rYX2g.js +1 -0
- package/ui/dist/assets/vb-BthdM_4N.js +1 -0
- package/ui/dist/assets/vbscript-D9f6rSsU.js +1 -0
- package/ui/dist/assets/velocity-CqftRsjg.js +1 -0
- package/ui/dist/assets/verilog-CjI9Y6RI.js +1 -0
- package/ui/dist/assets/vhdl-kS471soi.js +1 -0
- package/ui/dist/assets/webidl-D5jiJvOU.js +1 -0
- package/ui/dist/assets/xquery-BKJx4mf9.js +1 -0
- package/ui/dist/assets/yacas-CXXgtw0p.js +1 -0
- package/ui/dist/assets/z80-Co3PbHdE.js +1 -0
- package/ui/dist/favicon.ico +0 -0
- package/ui/dist/favicon.svg +11 -0
- package/ui/dist/help/ai-tools.png +0 -0
- package/ui/dist/help/case-explore.png +0 -0
- package/ui/dist/help/case-generate.png +0 -0
- package/ui/dist/help/cases-memo.png +0 -0
- package/ui/dist/help/profile-form.png +0 -0
- package/ui/dist/help/profiles-login.png +0 -0
- package/ui/dist/help/reports.png +0 -0
- package/ui/dist/help/run-tests.png +0 -0
- package/ui/dist/index.html +23 -0
- package/ui/dist/logos/claude.svg +1 -0
- package/ui/dist/logos/opencode.svg +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,112 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@asrunjs/asrun",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.5.2",
|
|
4
|
+
"description": "Multi-profile end-to-end test suite: plain-language cases, AI-written Playwright specs, evidence for every run.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Zoro Chen",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"engines": {
|
|
9
|
+
"node": ">=22"
|
|
10
|
+
},
|
|
11
|
+
"bin": {
|
|
12
|
+
"asrun": "./bin/asrun.mjs"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"bin/",
|
|
16
|
+
"dist/",
|
|
17
|
+
"templates/",
|
|
18
|
+
"docs/",
|
|
19
|
+
".claude/",
|
|
20
|
+
"!.claude/settings.local.json",
|
|
21
|
+
"ui/dist/",
|
|
22
|
+
"AGENTS.md",
|
|
23
|
+
"CLAUDE.md",
|
|
24
|
+
"README.md",
|
|
25
|
+
"LICENSE"
|
|
26
|
+
],
|
|
27
|
+
"exports": {
|
|
28
|
+
"./package.json": "./package.json",
|
|
29
|
+
"./*": {
|
|
30
|
+
"types": "./dist/lib/*.d.ts",
|
|
31
|
+
"default": "./dist/lib/*.js"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"publishConfig": {
|
|
35
|
+
"access": "public"
|
|
36
|
+
},
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"@playwright/test": "^1.64.0"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@playwright/test": "1.64.1",
|
|
42
|
+
"@tailwindcss/typography": "^0.5.20",
|
|
43
|
+
"@tailwindcss/vite": "^4.3.3",
|
|
44
|
+
"@types/node": "^22.20.5",
|
|
45
|
+
"@types/react": "^19.3.0",
|
|
46
|
+
"@types/react-dom": "^19.3.0",
|
|
47
|
+
"@vitejs/plugin-react": "^6.1.2",
|
|
48
|
+
"tailwindcss": "^4.3.3",
|
|
49
|
+
"tsx": "^4.23.15",
|
|
50
|
+
"typescript": "^7.0.2",
|
|
51
|
+
"vite": "^8.3.5"
|
|
52
|
+
},
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"@codemirror/lang-markdown": "^6.5.2",
|
|
55
|
+
"@codemirror/lang-yaml": "^6.1.3",
|
|
56
|
+
"@codemirror/language": "^6.13.1",
|
|
57
|
+
"@codemirror/language-data": "^6.5.2",
|
|
58
|
+
"@codemirror/state": "^6.7.6",
|
|
59
|
+
"@codemirror/view": "^6.43.15",
|
|
60
|
+
"@dnd-kit/core": "^6.3.1",
|
|
61
|
+
"@dnd-kit/sortable": "^10.0.0",
|
|
62
|
+
"@dnd-kit/utilities": "^3.2.2",
|
|
63
|
+
"@hono/node-server": "^2.1.5",
|
|
64
|
+
"@lezer/highlight": "^1.2.5",
|
|
65
|
+
"@napi-rs/canvas": "^1.0.13",
|
|
66
|
+
"@tanstack/react-query": "^5.105.0",
|
|
67
|
+
"@uiw/react-codemirror": "^4.25.12",
|
|
68
|
+
"anser": "^2.3.5",
|
|
69
|
+
"hono": "^4.13.14",
|
|
70
|
+
"pdfjs-dist": "^6.4.299",
|
|
71
|
+
"react": "^19.3.1",
|
|
72
|
+
"react-dom": "^19.3.1",
|
|
73
|
+
"react-feather": "^2.0.10",
|
|
74
|
+
"react-markdown": "^10.1.0",
|
|
75
|
+
"react-router": "^8.5.0",
|
|
76
|
+
"remark-gfm": "^4.0.1",
|
|
77
|
+
"tippy.js": "^6.3.7",
|
|
78
|
+
"yaml": "^2.9.1",
|
|
79
|
+
"zod": "^4.6.7"
|
|
80
|
+
},
|
|
81
|
+
"optionalDependencies": {
|
|
82
|
+
"ffmpeg-static": "^5.3.0"
|
|
83
|
+
},
|
|
84
|
+
"scripts": {
|
|
85
|
+
"go": "node scripts/go.mjs",
|
|
86
|
+
"bootstrap": "pnpm install && playwright install chromium",
|
|
87
|
+
"signin": "tsx scripts/login.ts",
|
|
88
|
+
"status": "tsx scripts/status.ts",
|
|
89
|
+
"asrun": "tsx scripts/cli.ts",
|
|
90
|
+
"report": "tsx scripts/report.ts",
|
|
91
|
+
"heal:evidence": "node scripts/heal-evidence.mjs",
|
|
92
|
+
"explore": "tsx scripts/explore.ts",
|
|
93
|
+
"cleanup": "tsx scripts/cleanup.ts",
|
|
94
|
+
"case:new": "tsx scripts/new-case.ts",
|
|
95
|
+
"case:check": "tsx scripts/check-cases.ts",
|
|
96
|
+
"spec:lint": "tsx scripts/lint-specs.ts",
|
|
97
|
+
"baselines:review": "tsx scripts/review-baselines.ts",
|
|
98
|
+
"pdf:render": "tsx scripts/render-pdf.ts",
|
|
99
|
+
"demo:up": "node scripts/demo.mjs up",
|
|
100
|
+
"demo:build": "node scripts/demo.mjs build",
|
|
101
|
+
"demo:seed": "node scripts/demo.mjs seed",
|
|
102
|
+
"demo:reset": "node scripts/demo.mjs reset",
|
|
103
|
+
"demo:down": "node scripts/demo.mjs down",
|
|
104
|
+
"demo:logs": "node scripts/demo.mjs logs",
|
|
105
|
+
"demo:status": "node scripts/demo.mjs status",
|
|
106
|
+
"typecheck": "tsc --noEmit && tsc --noEmit -p ui/tsconfig.json",
|
|
107
|
+
"ui": "tsx scripts/ui.ts",
|
|
108
|
+
"ui:build": "tsx scripts/ui-build.ts",
|
|
109
|
+
"ui:dev": "tsx scripts/ui-dev.ts",
|
|
110
|
+
"build": "tsx scripts/build.ts"
|
|
111
|
+
}
|
|
6
112
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Explore the real pages for one case (optionally attended: you do the steps that write data), before generating the spec
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Load the framework skill `{{framework}}/.claude/skills/exploring-cases/SKILL.md` and explore: $ARGUMENTS
|
|
6
|
+
|
|
7
|
+
Rules combine in this order, and a later one wins where they conflict: the framework baseline
|
|
8
|
+
`{{framework}}/AGENTS.md`, the framework skill, `.claude/skills/exploring-cases.md` if it exists, then the workspace
|
|
9
|
+
`AGENTS.md` §2 (Project rules). F1–F6 always win. Project facts are in `AGENTS.md` §3.
|
|
10
|
+
|
|
11
|
+
Arguments: `<case-id> <env> [--attended]`. The case id is the path below `cases/` without `.md` (it may include a
|
|
12
|
+
group folder, e.g. `documents/landing-page`) and is required. `<env>` is `staging` or `production`; it is required and there
|
|
13
|
+
is no default (without one, stop and say so). With `--attended` I am at the machine and the browser window is
|
|
14
|
+
visible: when a step writes data or needs a choice, hand it to me as the skill describes, wait for me, and record
|
|
15
|
+
what I did as a general recipe under the step it belongs to (`- Recipe:` lines). Without `--attended`, never wait for me.
|
|
16
|
+
|
|
17
|
+
Follow `{{framework}}/.claude/skills/exploring-cases/references/assertion-targets.md` (list the candidates, never
|
|
18
|
+
pick when in doubt, ask for the exact image/text/place/UI) and `readiness.md` (wait for the key requests and the
|
|
19
|
+
content before you read anything) of the skill.
|
|
20
|
+
|
|
21
|
+
This command edits `cases/<case-id>.md` only (plus screenshots under `.explore/targets/`). Do not ask me questions in
|
|
22
|
+
the chat: write open questions into the case file as the skill describes, and end with the `RESULT:` line.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Generate or update tests/<id>.spec.ts from cases/<id>.md (the id may be <group>/<name>)
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Load the framework skill `{{framework}}/.claude/skills/generating-specs/SKILL.md` and generate the spec for:
|
|
6
|
+
$ARGUMENTS
|
|
7
|
+
|
|
8
|
+
Rules combine in this order, and a later one wins where they conflict: the framework baseline
|
|
9
|
+
`{{framework}}/AGENTS.md`, the framework skill, `.claude/skills/generating-specs.md` if it exists, then the workspace
|
|
10
|
+
`AGENTS.md` §2 (Project rules). F1–F6 always win. Project facts are in `AGENTS.md` §3.
|
|
11
|
+
|
|
12
|
+
Arguments: `<case-id> [<env>] [--force]`. The case file is `cases/<case-id>.md` (the id may include one group folder,
|
|
13
|
+
e.g. `documents/landing-page`). `<env>` is the environment to explore in (`staging` or `production`); there is no default. If
|
|
14
|
+
the spec already exists, it is left alone unless `--force` is given; with `--force` it is regenerated and overwritten.
|
|
15
|
+
|
|
16
|
+
Follow the skill's procedure exactly, including its `assertion-targets.md` and `readiness.md`; run
|
|
17
|
+
`pnpm spec:lint <case-id>`. Only generate the spec: do not run `pnpm asrun` (running specs is a separate
|
|
18
|
+
process), and do not create baselines.
|
|
19
|
+
|
|
20
|
+
Do not ask me questions: resolve ambiguity as the skill describes (explore the page, use observed values marked for
|
|
21
|
+
QA, write the remaining questions into the case file), and end with the `RESULT:` line.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Diagnose and fix a failing spec from its last report (without hiding real product regressions)
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Load the framework skill `{{framework}}/.claude/skills/generating-specs/SKILL.md`, section "Healing a failing
|
|
6
|
+
spec", and follow it exactly.
|
|
7
|
+
|
|
8
|
+
Rules combine in this order, and a later one wins where they conflict: the framework baseline
|
|
9
|
+
`{{framework}}/AGENTS.md`, the framework skill, `.claude/skills/generating-specs.md` if it exists, then the workspace
|
|
10
|
+
`AGENTS.md` §2 (Project rules). F1–F6 always win. Project facts are in `AGENTS.md` §3.
|
|
11
|
+
|
|
12
|
+
Arguments: $ARGUMENTS
|
|
13
|
+
Format: `<case-id> <env> [--profiles a,b] [--report <run-id>] [--hints <file>]`, with optional free text after them.
|
|
14
|
+
- `<case-id>` and `<env>` (`staging` or `production`) are required. There is no default environment. Without one,
|
|
15
|
+
stop and say so.
|
|
16
|
+
- `--profiles`: the profiles to heal. Without it, every profile that is logged in in `<env>`.
|
|
17
|
+
- `--report`: the report (folder name under `reports/`) to read first. Without it, the newest report of this case.
|
|
18
|
+
- `--hints <file>`: a file with what the user knows (what to heal, evidence, clues). Read it first. Any free text
|
|
19
|
+
after the arguments is the same kind of clue. Both are optional.
|
|
20
|
+
|
|
21
|
+
Before you decide "product or test", audit the assertion itself (target card, baseline content, readiness): see
|
|
22
|
+
step 4 of the skill's healing section, `assertion-targets.md` and `readiness.md`. Run `pnpm spec:lint <case-id>`.
|
|
23
|
+
Read the existing report first (`pnpm heal:evidence --case <case-id> --env <env>`), and run the case again only when
|
|
24
|
+
the skill says it is needed. Always run with `--logged-in`. Tell me whether it is a test problem or a product
|
|
25
|
+
finding.
|
|
26
|
+
|
|
27
|
+
Run `pnpm asrun ...`, `pnpm heal:evidence ...`, `pnpm spec:lint ...`, `pnpm baselines:review ...` and
|
|
28
|
+
`pnpm status ...` as plain commands, optionally piped to `tail` or `head`, and do not chain other commands with them
|
|
29
|
+
(`;` or `&&`). Only these exact forms run outside Claude Code's sandbox, which tsx and the browser need. If a
|
|
30
|
+
command still fails with `listen EPERM` or a sandbox error, stop and report it. Do not ask to disable the sandbox,
|
|
31
|
+
and never add `--allow-writes` or set `ASRUN_ALLOW_WRITES`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Turn raw test notes (pasted text or a file) into case documents in cases/
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Load the framework skill `{{framework}}/.claude/skills/making-cases/SKILL.md` and turn this input into case
|
|
6
|
+
documents: $ARGUMENTS
|
|
7
|
+
|
|
8
|
+
Rules combine in this order, and a later one wins where they conflict: the framework baseline
|
|
9
|
+
`{{framework}}/AGENTS.md`, the framework skill, `.claude/skills/making-cases.md` if it exists, then the workspace
|
|
10
|
+
`AGENTS.md` §2 (Project rules). F1–F6 always win. Project facts are in `AGENTS.md` §3.
|
|
11
|
+
|
|
12
|
+
The input is either text or a path to a file with the notes. Follow the skill's procedure exactly. Ask me the open
|
|
13
|
+
questions before writing any case file. Do not generate specs; that is `/gen-spec`.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# <project name> — asrun workspace
|
|
2
|
+
|
|
3
|
+
This project uses the asrun framework, which lives in `{{framework}}` as an installed dependency. The framework is
|
|
4
|
+
read-only here: never edit files inside it, and never commit test data into it.
|
|
5
|
+
|
|
6
|
+
Read this file and the framework baseline it points at, before any AI step.
|
|
7
|
+
|
|
8
|
+
## 1. How rules combine
|
|
9
|
+
|
|
10
|
+
Rules are applied in this order, and a later layer wins where they conflict (the framework baseline, "Precedence"):
|
|
11
|
+
|
|
12
|
+
1. `F1`–`F6` of the framework baseline: safety, in every project. Nothing here can change them.
|
|
13
|
+
2. The framework baseline, `{{framework}}/AGENTS.md`.
|
|
14
|
+
3. The framework skill (`{{framework}}/.claude/skills/<skill>/SKILL.md`).
|
|
15
|
+
4. A project skill override, `.claude/skills/<skill>.md` (optional; the command and the skill read it).
|
|
16
|
+
5. This file, §2 below: what this project does differently.
|
|
17
|
+
|
|
18
|
+
The framework skills are loaded by the commands in `.claude/commands/` (Claude Code) and `.opencode/commands/`
|
|
19
|
+
(OpenCode). The skills live in the framework package; §3 holds this project's facts.
|
|
20
|
+
|
|
21
|
+
## 2. Project rules
|
|
22
|
+
|
|
23
|
+
Only what differs from the baseline: name the rule id, and whether it `narrows` (stricter) or `replaces` (a different
|
|
24
|
+
default, for example the artifact language) the baseline rule. `replaces` is refused for `F1`–`F6`. Rows whose first
|
|
25
|
+
cell is not a rule id are ignored, so the placeholder below can stay until you need it.
|
|
26
|
+
|
|
27
|
+
| Rule | Project rule | Effect |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| <rule id, e.g. F10> | <what this project does differently from the baseline> | narrows |
|
|
30
|
+
|
|
31
|
+
Examples (delete what you do not use; the fenced block is an example, not a rule):
|
|
32
|
+
|
|
33
|
+
```markdown
|
|
34
|
+
| F10 | Case prose, report summaries and assertion messages in Simplified Chinese; code and commit messages stay English. | replaces |
|
|
35
|
+
| F9 | Staging writes are limited to accounts named `qa-*` and names starting with `[asrun]`. | narrows |
|
|
36
|
+
| F7 | This project runs production profiles only from a scheduled job; people use `--env staging`. | narrows |
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
`pnpm asrun doctor` fails when this table names a `[non-negotiable]` rule, an unknown rule id, or an `Effect` that is
|
|
40
|
+
not `narrows` or `replaces`.
|
|
41
|
+
|
|
42
|
+
The structural tokens are fixed English whatever the project language: the section headings (`## Values`, `## Targets`,
|
|
43
|
+
...), a step's `- Recipe (phase): ...` lines, `### T<n>`, the `TODO` blocks with their `Answer:` line,
|
|
44
|
+
`[input]`/`[writes]`/`[email]`, `RESULT:`, and the front-matter keys. See "Fixed tokens" in the framework baseline.
|
|
45
|
+
|
|
46
|
+
## 3. Project facts
|
|
47
|
+
|
|
48
|
+
- Profiles and environments: `profiles.yaml`.
|
|
49
|
+
- Areas: one folder per area below `cases/` (for example `cases/<area>/<name>.md`).
|
|
50
|
+
- Expected values: they live in each case's `## Values` block, never here and never in `profiles.yaml`.
|
|
51
|
+
- Who owns a finding, and where findings are reported: <fill in>.
|
|
52
|
+
|
|
53
|
+
## Layout of this workspace
|
|
54
|
+
|
|
55
|
+
- `cases/**/*.md` human-written test cases (committed)
|
|
56
|
+
- `tests/**/*.spec.ts` generated Playwright specs and their `*-snapshots/` baselines (committed)
|
|
57
|
+
- `profiles.yaml` one entry per environment, connection settings only (committed)
|
|
58
|
+
- `.claude/commands/` `/make-case`, `/explore-case`, `/gen-spec`, `/heal-spec` for Claude Code
|
|
59
|
+
- `.opencode/commands/` the same commands for OpenCode (it does not read `.claude/commands`)
|
|
60
|
+
- `.claude/skills/` optional overrides of a framework skill: `<skill>.md`
|
|
61
|
+
- `.auth/` saved logins: never read, never commit
|
|
62
|
+
- `reports/` run reports: never commit
|
|
63
|
+
- `{{framework}}/` the framework (installed package): never edit
|
|
64
|
+
- `.env` local settings (`ASRUN_ROOT`): never commit
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: {{id}}
|
|
3
|
+
title: One-line summary of what this case proves
|
|
4
|
+
login: required # required | none (none = public page, no saved session needed)
|
|
5
|
+
suites: [smoke, regression] # a case may be in several suites; filter with `pnpm asrun --suite <name>`
|
|
6
|
+
# writes: [staging] # omit = read-only. The environments in which the case may create or change data of the test accounts (and cleans it up); elsewhere it is skipped with a notice
|
|
7
|
+
# writes-note: What the case creates or changes, e.g. one draft named "[asrun] ...", deleted at the end. (required when writes is set)
|
|
8
|
+
# envs: [production, staging] # optional: run only in these environments (default: all); must include every environment in `writes`
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Goal
|
|
12
|
+
Why this case exists, in one or two sentences.
|
|
13
|
+
|
|
14
|
+
## Steps
|
|
15
|
+
1. Open <page or path, e.g. /account/>.
|
|
16
|
+
- Ready when: <the one positive signal that what this step loads is really there, e.g. the list shows its first
|
|
17
|
+
row. It says when to look; what must be true afterwards goes under Expected.>
|
|
18
|
+
2. <What to look at or click.>
|
|
19
|
+
3. <A step that needs a person's choice or writes something.> [input] [writes]
|
|
20
|
+
- Recipe (start): <what the person did, recorded by /explore-case --attended: positions, [asrun] names, control
|
|
21
|
+
labels; never selectors or ids. One line per phase.>
|
|
22
|
+
|
|
23
|
+
## Expected
|
|
24
|
+
- <Behaviour that must hold for every profile.>
|
|
25
|
+
|
|
26
|
+
## Values
|
|
27
|
+
The exact values the spec asserts. `default` applies to every profile; an entry named after a profile id is
|
|
28
|
+
deep-merged over it. Put only the literals here (names, labels, options, test data names); the checks themselves stay
|
|
29
|
+
in Steps and Expected, and the selectors come from `## Targets`. The case document is the only place where expected
|
|
30
|
+
values live: `profiles.yaml` holds connection settings only.
|
|
31
|
+
|
|
32
|
+
```yaml
|
|
33
|
+
default:
|
|
34
|
+
exampleKey: Example value
|
|
35
|
+
example-staging:
|
|
36
|
+
exampleKey: Example value on staging
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Visual checks
|
|
40
|
+
- <Which element must match a screenshot baseline, e.g. the header logo.>
|
|
41
|
+
|
|
42
|
+
## Targets
|
|
43
|
+
One card per image, logo, icon, file, PDF or repeated text that a check looks at. Checks above refer to it as `[T1]`.
|
|
44
|
+
Written by `/explore-case`; do not guess: when it is unclear which element is meant, answer the TODO with the exact
|
|
45
|
+
image, text, place or UI. Rules: `{{framework}}/.claude/skills/exploring-cases/references/assertion-targets.md`.
|
|
46
|
+
|
|
47
|
+
### T1 <short name, e.g. Preview logo>
|
|
48
|
+
- What: <the thing itself, and what it is NOT when a look-alike exists>.
|
|
49
|
+
- Where: <region of the page, dialog, tab or file page>.
|
|
50
|
+
- Identified by: <role and name, test id, alt text or title; never a position>.
|
|
51
|
+
- Not: <look-alikes that must not be matched, e.g. a content image>.
|
|
52
|
+
- Ready when: <what shows that the content has loaded>.
|
|
53
|
+
- Reference <profile-id>: .explore/targets/<case-id>/T1-<profile-id>.png
|
|
54
|
+
|
|
55
|
+
## Notes
|
|
56
|
+
Assumptions and constraints for a reviewer. For a case with `writes`, `writes-note` is the one place that says what is
|
|
57
|
+
created, changed and removed; the removal is a step above, and it runs also when a step fails.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# >>> asrun (generated by `pnpm asrun init`; keep these lines)
|
|
2
|
+
# Saved logins are equivalent to passwords: never commit or share them.
|
|
3
|
+
.auth/
|
|
4
|
+
reports/
|
|
5
|
+
.tmp/
|
|
6
|
+
.explore/
|
|
7
|
+
test-results/
|
|
8
|
+
playwright-report/
|
|
9
|
+
.playwright-mcp/
|
|
10
|
+
# Local settings: ASRUN_ROOT and machine-specific values.
|
|
11
|
+
.env
|
|
12
|
+
.env.*
|
|
13
|
+
# <<< asrun
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://opencode.ai/config.json",
|
|
3
|
+
// The model the AI commands run with. Without one, OpenCode falls back to its built-in free model, which has a
|
|
4
|
+
// daily usage limit; the field also decides what `opencode run` uses, since a one-shot run ignores the model the
|
|
5
|
+
// TUI last picked. The AsRun web UI offers the same choice (read from `opencode models`) in its top bar.
|
|
6
|
+
// "model": "openrouter/deepseek/deepseek-v4.1-flash-1017",
|
|
7
|
+
"mcp": {
|
|
8
|
+
// Playwright's test-runner MCP: opens a page through a profile project, so the saved
|
|
9
|
+
// login for that profile is applied automatically (use the `project` argument).
|
|
10
|
+
// OpenCode reads this file only (it does not read `.mcp.json`, which is Claude Code's).
|
|
11
|
+
"playwright-test": {
|
|
12
|
+
"type": "local",
|
|
13
|
+
"command": ["{{playwright}}", "run-test-mcp-server"]
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "my-project",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"engines": {
|
|
6
|
+
"node": ">=22"
|
|
7
|
+
},
|
|
8
|
+
"scripts": {
|
|
9
|
+
"go": "asrun go",
|
|
10
|
+
"asrun": "asrun",
|
|
11
|
+
"signin": "asrun signin",
|
|
12
|
+
"status": "asrun status",
|
|
13
|
+
"report": "asrun report",
|
|
14
|
+
"heal:evidence": "asrun heal:evidence",
|
|
15
|
+
"explore": "asrun explore",
|
|
16
|
+
"cleanup": "asrun cleanup",
|
|
17
|
+
"case:new": "asrun case:new",
|
|
18
|
+
"case:check": "asrun case:check",
|
|
19
|
+
"spec:lint": "asrun spec:lint",
|
|
20
|
+
"baselines:review": "asrun baselines:review",
|
|
21
|
+
"pdf:render": "asrun pdf:render",
|
|
22
|
+
"typecheck": "tsc --noEmit",
|
|
23
|
+
"ui": "asrun ui",
|
|
24
|
+
"ui:dev": "asrun ui:dev"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@playwright/test": "1.64.1",
|
|
28
|
+
"@types/node": "^22.20.5",
|
|
29
|
+
"typescript": "^7.0.2"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Generated by `pnpm asrun init`. The real configuration is `{{framework}}/dist/playwright.config.js`; it resolves the
|
|
2
|
+
// workspace root (this folder) itself, so `pnpm asrun` finds `tests/`, `profiles.yaml` and `reports/` here.
|
|
3
|
+
export {default} from '{{framework}}/dist/playwright.config.js';
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# One entry per environment target. Each profile becomes one Playwright project named after its id,
|
|
2
|
+
# so every test runs once per profile. Connection settings only: expected values live in the case documents.
|
|
3
|
+
#
|
|
4
|
+
# id: lowercase words with single dashes. The Playwright project name, the saved session
|
|
5
|
+
# file (`.auth/<id>.json`) and the screenshot baseline names all use it.
|
|
6
|
+
# name: what people see in the UI and the reports.
|
|
7
|
+
# env: the environment this profile points at (`production`, `staging`, ...). Any environment
|
|
8
|
+
# that is not `staging` is protected: cases that write data need a person's confirmation
|
|
9
|
+
# there. `--env <env>` selects the profiles of one environment.
|
|
10
|
+
# baseURL: the site address, without a path.
|
|
11
|
+
# account: a label for humans (a mailbox or username). Never a password; logins live in .auth/.
|
|
12
|
+
# tags: optional lowercase words, for grouping and `pnpm asrun --tag <tag>`.
|
|
13
|
+
# email: `true` only when a real mailbox is connected, so tests may send email. Never in production.
|
|
14
|
+
# startPath: the page "Visit" on the Profiles page opens after a login, e.g. `/app/home`.
|
|
15
|
+
# Empty (the default) opens the site root; a path on the site, never another host.
|
|
16
|
+
# sessionCheckPath: a page only a signed-in visitor sees, e.g. `/settings`; that is how "Verify" and the
|
|
17
|
+
# pre-run check find out whether the saved login still works.
|
|
18
|
+
# sessionCheck: optional, how that page shows a missing login. The defaults fit the common case (a
|
|
19
|
+
# redirect to /login); name what your site does when it differs:
|
|
20
|
+
# loggedOutUrl: where a signed-out visitor ends up (default `/login`): a path on the
|
|
21
|
+
# site, or a full URL for single sign-on. A 401/403 response counts too.
|
|
22
|
+
# loggedInSelector: a selector that is only there while signed in, e.g.
|
|
23
|
+
# "input[name='username']". Without it, "not redirected to the login
|
|
24
|
+
# page" is taken as signed in, which a single-page app can mislead.
|
|
25
|
+
# loggedOutSelector: a selector that shows the visitor is signed out, e.g. the password
|
|
26
|
+
# field of a login form the site shows at the same address.
|
|
27
|
+
# timeoutMs: how long to wait for one of those signals (default 3000).
|
|
28
|
+
|
|
29
|
+
profiles:
|
|
30
|
+
- id: example-staging
|
|
31
|
+
name: Example (staging)
|
|
32
|
+
env: staging
|
|
33
|
+
baseURL: https://staging.example.com
|
|
34
|
+
tags:
|
|
35
|
+
- core
|
|
36
|
+
email: false
|
|
37
|
+
|
|
38
|
+
# - id: example-production
|
|
39
|
+
# name: Example
|
|
40
|
+
# env: production
|
|
41
|
+
# baseURL: https://www.example.com
|
|
42
|
+
# email: false
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import {test} from '@asrunjs/asrun/fixtures';
|
|
2
|
+
|
|
3
|
+
test.use({mustLogin: false});
|
|
4
|
+
|
|
5
|
+
// Used by the Playwright MCP agents to open a ready-to-use page for the current profile.
|
|
6
|
+
// Not a real test: `pnpm asrun` skips anything tagged @seed.
|
|
7
|
+
test('seed @seed', async ({page}) => {
|
|
8
|
+
await page.goto('/');
|
|
9
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "bundler",
|
|
6
|
+
"strict": true,
|
|
7
|
+
"noEmit": true,
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"resolveJsonModule": true,
|
|
11
|
+
"types": ["node"]
|
|
12
|
+
},
|
|
13
|
+
"include": ["tests", "playwright.config.ts"]
|
|
14
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={"+":[`conjugate`,`add`],"−":[`negate`,`subtract`],"×":[`signOf`,`multiply`],"÷":[`reciprocal`,`divide`],"⌈":[`ceiling`,`greaterOf`],"⌊":[`floor`,`lesserOf`],"∣":[`absolute`,`residue`],"⍳":[`indexGenerate`,`indexOf`],"?":[`roll`,`deal`],"⋆":[`exponentiate`,`toThePowerOf`],"⍟":[`naturalLog`,`logToTheBase`],"○":[`piTimes`,`circularFuncs`],"!":[`factorial`,`binomial`],"⌹":[`matrixInverse`,`matrixDivide`],"<":[null,`lessThan`],"≤":[null,`lessThanOrEqual`],"=":[null,`equals`],">":[null,`greaterThan`],"≥":[null,`greaterThanOrEqual`],"≠":[null,`notEqual`],"≡":[`depth`,`match`],"≢":[null,`notMatch`],"∈":[`enlist`,`membership`],"⍷":[null,`find`],"∪":[`unique`,`union`],"∩":[null,`intersection`],"∼":[`not`,`without`],"∨":[null,`or`],"∧":[null,`and`],"⍱":[null,`nor`],"⍲":[null,`nand`],"⍴":[`shapeOf`,`reshape`],",":[`ravel`,`catenate`],"⍪":[null,`firstAxisCatenate`],"⌽":[`reverse`,`rotate`],"⊖":[`axis1Reverse`,`axis1Rotate`],"⍉":[`transpose`,null],"↑":[`first`,`take`],"↓":[null,`drop`],"⊂":[`enclose`,`partitionWithAxis`],"⊃":[`diclose`,`pick`],"⌷":[null,`index`],"⍋":[`gradeUp`,null],"⍒":[`gradeDown`,null],"⊤":[`encode`,null],"⊥":[`decode`,null],"⍕":[`format`,`formatByExample`],"⍎":[`execute`,null],"⊣":[`stop`,`left`],"⊢":[`pass`,`right`]},t=/[\.\/⌿⍀¨⍣]/,n=/⍬/,r=/[\+−×÷⌈⌊∣⍳\?⋆⍟○!⌹<≤=>≥≠≡≢∈⍷∪∩∼∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢]/,i=/←/,a=/[⍝#].*$/,o=function(e){var t=!1;return function(n){return t=n,n!==e||t===`\\`}},s={name:`apl`,startState:function(){return{prev:!1,func:!1,op:!1,string:!1,escape:!1}},token:function(s,c){var l;return s.eatSpace()?null:(l=s.next(),l===`"`||l===`'`?(s.eatWhile(o(l)),s.next(),c.prev=!0,`string`):/[\[{\(]/.test(l)?(c.prev=!1,null):/[\]}\)]/.test(l)?(c.prev=!0,null):n.test(l)?(c.prev=!1,`atom`):/[¯\d]/.test(l)?(c.func?(c.func=!1,c.prev=!1):c.prev=!0,s.eatWhile(/[\w\.]/),`number`):t.test(l)||i.test(l)?`operator`:r.test(l)?(c.func=!0,c.prev=!1,e[l]?`variableName.function.standard`:`variableName.function`):a.test(l)?(s.skipToEnd(),`comment`):l===`∘`&&s.peek()===`.`?(s.next(),`variableName.function`):(s.eatWhile(/[\w\$_]/),c.prev=!0,`keyword`))}};export{s as apl};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e){var t=e.match(/^\s*\S/);return e.skipToEnd(),t?`error`:null}var t={name:`asciiarmor`,token:function(t,n){var r;if(n.state==`top`)return t.sol()&&(r=t.match(/^-----BEGIN (.*)?-----\s*$/))?(n.state=`headers`,n.type=r[1],`tag`):e(t);if(n.state==`headers`){if(t.sol()&&t.match(/^\w+:/))return n.state=`header`,`atom`;var i=e(t);return i&&(n.state=`body`),i}if(n.state==`header`)return t.skipToEnd(),n.state=`headers`,`string`;if(n.state==`body`)return t.sol()&&(r=t.match(/^-----END (.*)?-----\s*$/))?r[1]==n.type?(n.state=`end`,`tag`):`error`:t.eatWhile(/[A-Za-z0-9+\/=]/)?null:(t.next(),`error`);if(n.state==`end`)return e(t)},blankLine:function(e){e.state==`headers`&&(e.state=`body`)},startState:function(){return{state:`top`,type:null}}};export{t as asciiArmor};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e){for(var t={},n=e.split(` `),r=0;r<n.length;++r)t[n[r]]=!0;return t}var t={keywords:e(`DEFINITIONS OBJECTS IF DERIVED INFORMATION ACTION REPLY ANY NAMED CHARACTERIZED BEHAVIOUR REGISTERED WITH AS IDENTIFIED CONSTRAINED BY PRESENT BEGIN IMPORTS FROM UNITS SYNTAX MIN-ACCESS MAX-ACCESS MINACCESS MAXACCESS REVISION STATUS DESCRIPTION SEQUENCE SET COMPONENTS OF CHOICE DistinguishedName ENUMERATED SIZE MODULE END INDEX AUGMENTS EXTENSIBILITY IMPLIED EXPORTS`),cmipVerbs:e(`ACTIONS ADD GET NOTIFICATIONS REPLACE REMOVE`),compareTypes:e(`OPTIONAL DEFAULT MANAGED MODULE-TYPE MODULE_IDENTITY MODULE-COMPLIANCE OBJECT-TYPE OBJECT-IDENTITY OBJECT-COMPLIANCE MODE CONFIRMED CONDITIONAL SUBORDINATE SUPERIOR CLASS TRUE FALSE NULL TEXTUAL-CONVENTION`),status:e(`current deprecated mandatory obsolete`),tags:e(`APPLICATION AUTOMATIC EXPLICIT IMPLICIT PRIVATE TAGS UNIVERSAL`),storage:e(`BOOLEAN INTEGER OBJECT IDENTIFIER BIT OCTET STRING UTCTime InterfaceIndex IANAifType CMIP-Attribute REAL PACKAGE PACKAGES IpAddress PhysAddress NetworkAddress BITS BMPString TimeStamp TimeTicks TruthValue RowStatus DisplayString GeneralString GraphicString IA5String NumericString PrintableString SnmpAdminString TeletexString UTF8String VideotexString VisibleString StringStore ISO646String T61String UniversalString Unsigned32 Integer32 Gauge Gauge32 Counter Counter32 Counter64`),modifier:e(`ATTRIBUTE ATTRIBUTES MANDATORY-GROUP MANDATORY-GROUPS GROUP GROUPS ELEMENTS EQUALITY ORDERING SUBSTRINGS DEFINED`),accessTypes:e(`not-accessible accessible-for-notify read-only read-create read-write`),multiLineStrings:!0};function n(e){var n=e.keywords||t.keywords,r=e.cmipVerbs||t.cmipVerbs,i=e.compareTypes||t.compareTypes,a=e.status||t.status,o=e.tags||t.tags,s=e.storage||t.storage,c=e.modifier||t.modifier,l=e.accessTypes||t.accessTypes,u=e.multiLineStrings||t.multiLineStrings,d=e.indentStatements!==!1,f=/[\|\^]/,p;function m(e,t){var u=e.next();if(u==`"`||u==`'`)return t.tokenize=h(u),t.tokenize(e,t);if(/[\[\]\(\){}:=,;]/.test(u))return p=u,`punctuation`;if(u==`-`&&e.eat(`-`))return e.skipToEnd(),`comment`;if(/\d/.test(u))return e.eatWhile(/[\w\.]/),`number`;if(f.test(u))return e.eatWhile(f),`operator`;e.eatWhile(/[\w\-]/);var d=e.current();return n.propertyIsEnumerable(d)?`keyword`:r.propertyIsEnumerable(d)?`variableName`:i.propertyIsEnumerable(d)?`atom`:a.propertyIsEnumerable(d)?`comment`:o.propertyIsEnumerable(d)?`typeName`:s.propertyIsEnumerable(d)||c.propertyIsEnumerable(d)||l.propertyIsEnumerable(d)?`modifier`:`variableName`}function h(e){return function(t,n){for(var r=!1,i,a=!1;(i=t.next())!=null;){if(i==e&&!r){var o=t.peek();o&&(o=o.toLowerCase(),(o==`b`||o==`h`||o==`o`)&&t.next()),a=!0;break}r=!r&&i==`\\`}return(a||!(r||u))&&(n.tokenize=null),`string`}}function g(e,t,n,r,i){this.indented=e,this.column=t,this.type=n,this.align=r,this.prev=i}function _(e,t,n){var r=e.indented;return e.context&&e.context.type==`statement`&&(r=e.context.indented),e.context=new g(r,t,n,null,e.context)}function v(e){var t=e.context.type;return(t==`)`||t==`]`||t==`}`)&&(e.indented=e.context.indented),e.context=e.context.prev}return{name:`asn1`,startState:function(){return{tokenize:null,context:new g(-2,0,`top`,!1),indented:0,startOfLine:!0}},token:function(e,t){var n=t.context;if(e.sol()&&(n.align??(n.align=!1),t.indented=e.indentation(),t.startOfLine=!0),e.eatSpace())return null;p=null;var r=(t.tokenize||m)(e,t);if(r==`comment`)return r;if(n.align??(n.align=!0),(p==`;`||p==`:`||p==`,`)&&n.type==`statement`)v(t);else if(p==`{`)_(t,e.column(),`}`);else if(p==`[`)_(t,e.column(),`]`);else if(p==`(`)_(t,e.column(),`)`);else if(p==`}`){for(;n.type==`statement`;)n=v(t);for(n.type==`}`&&(n=v(t));n.type==`statement`;)n=v(t)}else p==n.type?v(t):d&&((n.type==`}`||n.type==`top`)&&p!=`;`||n.type==`statement`&&p==`newstatement`)&&_(t,e.column(),`statement`);return t.startOfLine=!1,r},languageData:{indentOnInput:/^\s*[{}]$/,commentTokens:{line:`--`}}}}export{n as asn1};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=[`exten`,`same`,`include`,`ignorepat`,`switch`],t=[`#include`,`#exec`],n=`addqueuemember.adsiprog.aelsub.agentlogin.agentmonitoroutgoing.agi.alarmreceiver.amd.answer.authenticate.background.backgrounddetect.bridge.busy.callcompletioncancel.callcompletionrequest.celgenuserevent.changemonitor.chanisavail.channelredirect.chanspy.clearhash.confbridge.congestion.continuewhile.controlplayback.dahdiacceptr2call.dahdibarge.dahdiras.dahdiscan.dahdisendcallreroutingfacility.dahdisendkeypadfacility.datetime.dbdel.dbdeltree.deadagi.dial.dictate.directory.disa.dumpchan.eagi.echo.endwhile.exec.execif.execiftime.exitwhile.extenspy.externalivr.festival.flash.followme.forkcdr.getcpeid.gosub.gosubif.goto.gotoif.gotoiftime.hangup.iax2provision.ices.importvar.incomplete.ivrdemo.jabberjoin.jabberleave.jabbersend.jabbersendgroup.jabberstatus.jack.log.macro.macroexclusive.macroexit.macroif.mailboxexists.meetme.meetmeadmin.meetmechanneladmin.meetmecount.milliwatt.minivmaccmess.minivmdelete.minivmgreet.minivmmwi.minivmnotify.minivmrecord.mixmonitor.monitor.morsecode.mp3player.mset.musiconhold.nbscat.nocdr.noop.odbc.odbc.odbcfinish.originate.ospauth.ospfinish.osplookup.ospnext.page.park.parkandannounce.parkedcall.pausemonitor.pausequeuemember.pickup.pickupchan.playback.playtones.privacymanager.proceeding.progress.queue.queuelog.raiseexception.read.readexten.readfile.receivefax.receivefax.receivefax.record.removequeuemember.resetcdr.retrydial.return.ringing.sayalpha.saycountedadj.saycountednoun.saycountpl.saydigits.saynumber.sayphonetic.sayunixtime.senddtmf.sendfax.sendfax.sendfax.sendimage.sendtext.sendurl.set.setamaflags.setcallerpres.setmusiconhold.sipaddheader.sipdtmfmode.sipremoveheader.skel.slastation.slatrunk.sms.softhangup.speechactivategrammar.speechbackground.speechcreate.speechdeactivategrammar.speechdestroy.speechloadgrammar.speechprocessingsound.speechstart.speechunloadgrammar.stackpop.startmusiconhold.stopmixmonitor.stopmonitor.stopmusiconhold.stopplaytones.system.testclient.testserver.transfer.tryexec.trysystem.unpausemonitor.unpausequeuemember.userevent.verbose.vmauthenticate.vmsayname.voicemail.voicemailmain.wait.waitexten.waitfornoise.waitforring.waitforsilence.waitmusiconhold.waituntil.while.zapateller`.split(`.`);function r(n,r){var i=``,a=n.next();if(r.blockComment)return a==`-`&&n.match(`-;`,!0)?r.blockComment=!1:n.skipTo(`--;`)?(n.next(),n.next(),n.next(),r.blockComment=!1):n.skipToEnd(),`comment`;if(a==`;`)return n.match(`--`,!0)&&!n.match(`-`,!1)?(r.blockComment=!0,`comment`):(n.skipToEnd(),`comment`);if(a==`[`)return n.skipTo(`]`),n.eat(`]`),`header`;if(a==`"`)return n.skipTo(`"`),`string`;if(a==`'`)return n.skipTo(`'`),`string.special`;if(a==`#`&&(n.eatWhile(/\w/),i=n.current(),t.indexOf(i)!==-1))return n.skipToEnd(),`strong`;if(a==`$`&&n.peek()==`{`)return n.skipTo(`}`),n.eat(`}`),`variableName.special`;if(n.eatWhile(/\w/),i=n.current(),e.indexOf(i)!==-1){switch(r.extenStart=!0,i){case`same`:r.extenSame=!0;break;case`include`:case`switch`:case`ignorepat`:r.extenInclude=!0}return`atom`}}var i={name:`asterisk`,startState:function(){return{blockComment:!1,extenStart:!1,extenSame:!1,extenInclude:!1,extenExten:!1,extenPriority:!1,extenApplication:!1}},token:function(e,t){var i=``;if(e.eatSpace())return null;if(t.extenStart)return e.eatWhile(/[^\s]/),i=e.current(),/^=>?$/.test(i)?(t.extenExten=!0,t.extenStart=!1,`strong`):(t.extenStart=!1,e.skipToEnd(),`error`);if(t.extenExten)return t.extenExten=!1,t.extenPriority=!0,e.eatWhile(/[^,]/),t.extenInclude&&=(e.skipToEnd(),t.extenPriority=!1,!1),t.extenSame&&(t.extenPriority=!1,t.extenSame=!1,t.extenApplication=!0),`tag`;if(t.extenPriority)return t.extenPriority=!1,t.extenApplication=!0,e.next(),t.extenSame?null:(e.eatWhile(/[^,]/),`number`);if(t.extenApplication){if(e.eatWhile(/,/),i=e.current(),i===`,`)return null;if(e.eatWhile(/\w/),i=e.current().toLowerCase(),t.extenApplication=!1,n.indexOf(i)!==-1)return`def`}else return r(e,t);return null},languageData:{commentTokens:{line:`;`,block:{open:`;--`,close:`--;`}}}};export{i as asterisk};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`><+-.,[]`.split(``),t={name:`brainfuck`,startState:function(){return{commentLine:!1,left:0,right:0,commentLoop:!1}},token:function(t,n){if(t.eatSpace())return null;t.sol()&&(n.commentLine=!1);var r=t.next().toString();if(e.indexOf(r)!==-1){if(n.commentLine===!0)return t.eol()&&(n.commentLine=!1),`comment`;if(r===`]`||r===`[`)return r===`[`?n.left++:n.right++,`bracket`;if(r===`+`||r===`-`)return`keyword`;if(r===`<`||r===`>`)return`atom`;if(r===`.`||r===`,`)return`def`}else return n.commentLine=!0,t.eol()&&(n.commentLine=!1),`comment`;t.eol()&&(n.commentLine=!1)}};export{t as brainfuck};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e,t,n,r,i,a){this.indented=e,this.column=t,this.type=n,this.info=r,this.align=i,this.prev=a}function t(t,n,r,i){var a=t.indented;return t.context&&t.context.type==`statement`&&r!=`statement`&&(a=t.context.indented),t.context=new e(a,n,r,i,null,t.context)}function n(e){var t=e.context.type;return(t==`)`||t==`]`||t==`}`)&&(e.indented=e.context.indented),e.context=e.context.prev}function r(e,t,n){if(t.prevToken==`variable`||t.prevToken==`type`||/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(e.string.slice(0,n))||t.typeAtEndOfLine&&e.column()==e.indentation())return!0}function i(e){for(;;){if(!e||e.type==`top`)return!0;if(e.type==`}`&&e.prev.info!=`namespace`)return!1;e=e.prev}}function a(a){var o=a.statementIndentUnit,c=a.dontAlignCalls,l=a.keywords||{},u=a.types||{},d=a.builtin||{},f=a.blockKeywords||{},p=a.defKeywords||{},m=a.atoms||{},h=a.hooks||{},g=a.multiLineStrings,_=a.indentStatements!==!1,v=a.indentSwitch!==!1,y=a.namespaceSeparator,b=a.isPunctuationChar||/[\[\]{}\(\),;\:\.]/,x=a.numberStart||/[\d\.]/,S=a.number||/^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i,C=a.isOperatorChar||/[+\-*&%=<>!?|\/]/,w=a.isIdentifierChar||/[\w\$_\xa1-\uffff]/,T=a.isReservedIdentifier||!1,E,D;function O(e,t){var n=e.next();if(h[n]){var r=h[n](e,t);if(r!==!1)return r}if(n==`"`||n==`'`)return t.tokenize=k(n),t.tokenize(e,t);if(x.test(n)){if(e.backUp(1),e.match(S))return`number`;e.next()}if(b.test(n))return E=n,null;if(n==`/`){if(e.eat(`*`))return t.tokenize=A,A(e,t);if(e.eat(`/`))return e.skipToEnd(),`comment`}if(C.test(n)){for(;!e.match(/^\/[\/*]/,!1)&&e.eat(C););return`operator`}if(e.eatWhile(w),y)for(;e.match(y);)e.eatWhile(w);var i=e.current();return s(l,i)?(s(f,i)&&(E=`newstatement`),s(p,i)&&(D=!0),`keyword`):s(u,i)?`type`:s(d,i)||T&&T(i)?(s(f,i)&&(E=`newstatement`),`builtin`):s(m,i)?`atom`:`variable`}function k(e){return function(t,n){for(var r=!1,i,a=!1;(i=t.next())!=null;){if(i==e&&!r){a=!0;break}r=!r&&i==`\\`}return(a||!(r||g))&&(n.tokenize=null),`string`}}function A(e,t){for(var n=!1,r;r=e.next();){if(r==`/`&&n){t.tokenize=null;break}n=r==`*`}return`comment`}function j(e,t){a.typeFirstDefinitions&&e.eol()&&i(t.context)&&(t.typeAtEndOfLine=r(e,t,e.pos))}return{name:a.name,startState:function(t){return{tokenize:null,context:new e(-t,0,`top`,null,!1),indented:0,startOfLine:!0,prevToken:null}},token:function(e,o){var s=o.context;if(e.sol()&&(s.align??(s.align=!1),o.indented=e.indentation(),o.startOfLine=!0),e.eatSpace())return j(e,o),null;E=D=null;var c=(o.tokenize||O)(e,o);if(c==`comment`||c==`meta`)return c;if(s.align??(s.align=!0),E==`;`||E==`:`||E==`,`&&e.match(/^\s*(?:\/\/.*)?$/,!1))for(;o.context.type==`statement`;)n(o);else if(E==`{`)t(o,e.column(),`}`);else if(E==`[`)t(o,e.column(),`]`);else if(E==`(`)t(o,e.column(),`)`);else if(E==`}`){for(;s.type==`statement`;)s=n(o);for(s.type==`}`&&(s=n(o));s.type==`statement`;)s=n(o)}else E==s.type?n(o):_&&((s.type==`}`||s.type==`top`)&&E!=`;`||s.type==`statement`&&E==`newstatement`)&&t(o,e.column(),`statement`,e.current());if(c==`variable`&&(o.prevToken==`def`||a.typeFirstDefinitions&&r(e,o,e.start)&&i(o.context)&&e.match(/^\s*\(/,!1))&&(c=`def`),h.token){var l=h.token(e,o,c);l!==void 0&&(c=l)}return c==`def`&&a.styleDefs===!1&&(c=`variable`),o.startOfLine=!1,o.prevToken=D?`def`:c||E,j(e,o),c},indent:function(e,t,n){if(e.tokenize!=O&&e.tokenize!=null||e.typeAtEndOfLine&&i(e.context))return null;var r=e.context,s=t&&t.charAt(0),l=s==r.type;if(r.type==`statement`&&s==`}`&&(r=r.prev),a.dontIndentStatements)for(;r.type==`statement`&&a.dontIndentStatements.test(r.info);)r=r.prev;if(h.indent){var u=h.indent(e,r,t,n.unit);if(typeof u==`number`)return u}var d=r.prev&&r.prev.info==`switch`;if(a.allmanIndentation&&/[{(]/.test(s)){for(;r.type!=`top`&&r.type!=`}`;)r=r.prev;return r.indented}return r.type==`statement`?r.indented+(s==`{`?0:o||n.unit):r.align&&(!c||r.type!=`)`)?r.column+ +!l:r.type==`)`&&!l?r.indented+(o||n.unit):r.indented+(l?0:n.unit)+(!l&&d&&!/^(?:case|default)\b/.test(t)?n.unit:0)},languageData:{indentOnInput:v?/^\s*(?:case .*?:|default:|\{\}?|\})$/:/^\s*[{}]$/,commentTokens:{line:`//`,block:{open:`/*`,close:`*/`}},autocomplete:Object.keys(l).concat(Object.keys(u)).concat(Object.keys(d)).concat(Object.keys(m)),...a.languageData}}}function o(e){for(var t={},n=e.split(` `),r=0;r<n.length;++r)t[n[r]]=!0;return t}function s(e,t){return typeof e==`function`?e(t):e.propertyIsEnumerable(t)}var c=`auto if break case register continue return default do sizeof static else struct switch extern typedef union for goto while enum const volatile inline restrict asm fortran`,l=`alignas alignof and and_eq audit axiom bitand bitor catch class compl concept constexpr const_cast decltype delete dynamic_cast explicit export final friend import module mutable namespace new noexcept not not_eq operator or or_eq override private protected public reinterpret_cast requires static_assert static_cast template this thread_local throw try typeid typename using virtual xor xor_eq`,u=`bycopy byref in inout oneway out self super atomic nonatomic retain copy readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd @interface @implementation @end @protocol @encode @property @synthesize @dynamic @class @public @package @private @protected @required @optional @try @catch @finally @import @selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available`,d=`FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION NS_RETURNS_RETAINEDNS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER NS_DESIGNATED_INITIALIZER NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT`,f=o(`int long char short double float unsigned signed void bool`),p=o(`SEL instancetype id Class Protocol BOOL`);function m(e){return s(f,e)||/.+_t$/.test(e)}function h(e){return m(e)||s(p,e)}var g=`case do else for if switch while struct enum union`,_=`struct enum union`;function v(e,t){if(!t.startOfLine)return!1;for(var n,r=null;n=e.peek();){if(n==`\\`&&e.match(/^.$/)){r=v;break}if(n==`/`&&e.match(/^\/[\/\*]/,!1))break;e.next()}return t.tokenize=r,`meta`}function y(e,t){return t.prevToken==`type`&&`type`}function b(e){return!e||e.length<2||e[0]!=`_`?!1:e[1]==`_`||e[1]!==e[1].toLowerCase()}function x(e){return e.eatWhile(/[\w\.']/),`number`}function S(e,t){if(e.backUp(1),e.match(/^(?:R|u8R|uR|UR|LR)/)){var n=e.match(/^"([^\s\\()]{0,16})\(/);return n?(t.cpp11RawStringDelim=n[1],t.tokenize=T,T(e,t)):!1}return e.match(/^(?:u8|u|U|L)/)?e.match(/^["']/,!1)?`string`:!1:(e.next(),!1)}function C(e){var t=/(\w+)::~?(\w+)$/.exec(e);return t&&t[1]==t[2]}function w(e,t){for(var n;(n=e.next())!=null;)if(n==`"`&&!e.eat(`"`)){t.tokenize=null;break}return`string`}function T(e,t){var n=t.cpp11RawStringDelim.replace(/[^\w\s]/g,`\\$&`);return e.match(RegExp(`.*?\\)`+n+`"`))?t.tokenize=null:e.skipToEnd(),`string`}a({name:`c`,keywords:o(c),types:m,blockKeywords:o(g),defKeywords:o(_),typeFirstDefinitions:!0,atoms:o(`NULL true false`),isReservedIdentifier:b,hooks:{"#":v,"*":y}}),a({name:`cpp`,keywords:o(c+` `+l),types:m,blockKeywords:o(g+` class try catch`),defKeywords:o(_+` class namespace`),typeFirstDefinitions:!0,atoms:o(`true false NULL nullptr`),dontIndentStatements:/^template$/,isIdentifierChar:/[\w\$_~\xa1-\uffff]/,isReservedIdentifier:b,hooks:{"#":v,"*":y,u:S,U:S,L:S,R:S,0:x,1:x,2:x,3:x,4:x,5:x,6:x,7:x,8:x,9:x,token:function(e,t,n){if(n==`variable`&&e.peek()==`(`&&(t.prevToken==`;`||t.prevToken==null||t.prevToken==`}`)&&C(e.current()))return`def`}},namespaceSeparator:`::`}),a({name:`java`,keywords:o(`abstract assert break case catch class const continue default do else enum extends final finally for goto if implements import instanceof interface native new package private protected public return static strictfp super switch synchronized this throw throws transient try volatile while @interface`),types:o(`var byte short int long float double boolean char void Boolean Byte Character Double Float Integer Long Number Object Short String StringBuffer StringBuilder Void`),blockKeywords:o(`catch class do else finally for if switch try while`),defKeywords:o(`class interface enum @interface`),typeFirstDefinitions:!0,atoms:o(`true false null`),number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+\.?\d*|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i,hooks:{"@":function(e){return!e.match(`interface`,!1)&&(e.eatWhile(/[\w\$_]/),`meta`)},'"':function(e,t){return e.match(/""$/)?(t.tokenize=D,t.tokenize(e,t)):!1}}});var E=a({name:`csharp`,keywords:o(`abstract as async await base break case catch checked class const continue default delegate do else enum event explicit extern finally fixed for foreach goto if implicit in init interface internal is lock namespace new operator out override params private protected public readonly record ref required return sealed sizeof stackalloc static struct switch this throw try typeof unchecked unsafe using virtual void volatile while add alias ascending descending dynamic from get global group into join let orderby partial remove select set value var yield`),types:o(`Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32 UInt64 bool byte char decimal double short int long object sbyte float string ushort uint ulong`),blockKeywords:o(`catch class do else finally for foreach if struct switch try while`),defKeywords:o(`class interface namespace record struct var`),typeFirstDefinitions:!0,atoms:o(`true false null`),hooks:{"@":function(e,t){return e.eat(`"`)?(t.tokenize=w,w(e,t)):(e.eatWhile(/[\w\$_]/),`meta`)}}});function D(e,t){for(var n=!1;!e.eol();){if(!n&&e.match(`"""`)){t.tokenize=null;break}n=e.next()==`\\`&&!n}return`string`}function O(e){return function(t,n){for(var r;r=t.next();)if(r==`*`&&t.eat(`/`)){if(e==1){n.tokenize=null;break}return n.tokenize=O(e-1),n.tokenize(t,n)}else if(r==`/`&&t.eat(`*`))return n.tokenize=O(e+1),n.tokenize(t,n);return`comment`}}var k=a({name:`scala`,keywords:o(`abstract case catch class def do else extends final finally for forSome if implicit import lazy match new null object override package private protected return sealed super this throw trait try type val var while with yield _ assert assume require print println printf readLine readBoolean readByte readShort readChar readInt readLong readFloat readDouble`),types:o(`AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void`),multiLineStrings:!0,blockKeywords:o(`catch class enum do else finally for forSome if match switch try while`),defKeywords:o(`class enum def object package trait type val var`),atoms:o(`true false null`),indentStatements:!1,indentSwitch:!1,isOperatorChar:/[+\-*&%=<>!?|\/#:@]/,hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),`meta`},'"':function(e,t){return e.match(`""`)?(t.tokenize=D,t.tokenize(e,t)):!1},"'":function(e){return e.match(/^(\\[^'\s]+|[^\\'])'/)?`character`:(e.eatWhile(/[\w\$_\xa1-\uffff]/),`atom`)},"=":function(t,n){var r=n.context;return r.type==`}`&&r.align&&t.eat(`>`)?(n.context=new e(r.indented,r.column,r.type,r.info,null,r.prev),`operator`):!1},"/":function(e,t){return e.eat(`*`)?(t.tokenize=O(1),t.tokenize(e,t)):!1}},languageData:{closeBrackets:{brackets:[`(`,`[`,`{`,`'`,`"`,`"""`]}}});function A(e){return function(t,n){for(var r=!1,i,a=!1;!t.eol();){if(!e&&!r&&t.match(`"`)||e&&t.match(`"""`)){a=!0;break}i=t.next(),!r&&i==`$`&&t.match(`{`)&&t.skipTo(`}`),r=!r&&i==`\\`&&!e}return(a||!e)&&(n.tokenize=null),`string`}}var j=a({name:`kotlin`,keywords:o(`package as typealias class interface this super val operator var fun for is in This throw return annotation break continue object if else while do try when !in !is as? file import where by get set abstract enum open inner override private public internal protected catch finally out final vararg reified dynamic companion constructor init sealed field property receiver param sparam lateinit data inline noinline tailrec external annotation crossinline const operator infix suspend actual expect setparam`),types:o(`Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy LazyThreadSafetyMode LongArray Nothing ShortArray Unit`),intendSwitch:!1,indentStatements:!1,multiLineStrings:!0,number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+(\.\d+)?|\.\d+)(?:e[-+]?[\d_]+)?)(ul?|l|f)?/i,blockKeywords:o(`catch class do else finally for if where try while enum`),defKeywords:o(`class val var object interface fun`),atoms:o(`true false null this`),hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),`meta`},"*":function(e,t){return t.prevToken==`.`?`variable`:`operator`},'"':function(e,t){return t.tokenize=A(e.match(`""`)),t.tokenize(e,t)},"/":function(e,t){return e.eat(`*`)?(t.tokenize=O(1),t.tokenize(e,t)):!1},indent:function(e,t,n,r){var i=n&&n.charAt(0);if((e.prevToken==`}`||e.prevToken==`)`)&&n==``)return e.indented;if(e.prevToken==`operator`&&n!=`}`&&e.context.type!=`}`||e.prevToken==`variable`&&i==`.`||(e.prevToken==`}`||e.prevToken==`)`)&&i==`.`)return r*2+t.indented;if(t.align&&t.type==`}`)return t.indented+(e.context.type==(n||``).charAt(0)?0:r)}},languageData:{closeBrackets:{brackets:[`(`,`[`,`{`,`'`,`"`,`"""`]}}});a({name:`shader`,keywords:o(`sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow const attribute uniform varying break continue discard return for while do if else struct in out inout`),types:o(`float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4`),blockKeywords:o(`for while do if else struct`),builtin:o(`radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smoothstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4`),atoms:o(`true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_PointCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers`),indentSwitch:!1,hooks:{"#":v}}),a({name:`nesc`,keywords:o(c+` as atomic async call command component components configuration event generic implementation includes interface module new norace nx_struct nx_union post provides signal task uses abstract extends`),types:m,blockKeywords:o(g),atoms:o(`null true false`),hooks:{"#":v}});var M=a({name:`objectivec`,keywords:o(c+` `+u),types:h,builtin:o(d),blockKeywords:o(g+` @synthesize @try @catch @finally @autoreleasepool @synchronized`),defKeywords:o(_+` @interface @implementation @protocol @class`),dontIndentStatements:/^@.*$/,typeFirstDefinitions:!0,atoms:o(`YES NO NULL Nil nil true false nullptr`),isReservedIdentifier:b,hooks:{"#":v,"*":y}}),N=a({name:`objectivecpp`,keywords:o(c+` `+u+` `+l),types:h,builtin:o(d),blockKeywords:o(g+` @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch`),defKeywords:o(_+` @interface @implementation @protocol @class class namespace`),dontIndentStatements:/^@.*$|^template$/,typeFirstDefinitions:!0,atoms:o(`YES NO NULL Nil nil true false nullptr`),isReservedIdentifier:b,hooks:{"#":v,"*":y,u:S,U:S,L:S,R:S,0:x,1:x,2:x,3:x,4:x,5:x,6:x,7:x,8:x,9:x,token:function(e,t,n){if(n==`variable`&&e.peek()==`(`&&(t.prevToken==`;`||t.prevToken==null||t.prevToken==`}`)&&C(e.current()))return`def`}},namespaceSeparator:`::`}),P=a({name:`squirrel`,keywords:o(`base break clone continue const default delete enum extends function in class foreach local resume return this throw typeof yield constructor instanceof static`),types:m,blockKeywords:o(`case catch class else for foreach if switch try while`),defKeywords:o(`function local class`),typeFirstDefinitions:!0,atoms:o(`true false null`),hooks:{"#":v}}),F=null;function I(e){return function(t,n){for(var r=!1,i,a=!1;!t.eol();){if(!r&&t.match(`"`)&&(e==`single`||t.match(`""`))){a=!0;break}if(!r&&t.match("``")){F=I(e),a=!0;break}i=t.next(),r=e==`single`&&!r&&i==`\\`}return a&&(n.tokenize=null),`string`}}a({name:`ceylon`,keywords:o(`abstracts alias assembly assert assign break case catch class continue dynamic else exists extends finally for function given if import in interface is let module new nonempty object of out outer package return satisfies super switch then this throw try value void while`),types:function(e){var t=e.charAt(0);return t===t.toUpperCase()&&t!==t.toLowerCase()},blockKeywords:o(`case catch class dynamic else finally for function if interface module new object switch try while`),defKeywords:o(`class dynamic function interface module object package value`),builtin:o(`abstract actual aliased annotation by default deprecated doc final formal late license native optional sealed see serializable shared suppressWarnings tagged throws variable`),isPunctuationChar:/[\[\]{}\(\),;\:\.`]/,isOperatorChar:/[+\-*&%=<>!?|^~:\/]/,numberStart:/[\d#$]/,number:/^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i,multiLineStrings:!0,typeFirstDefinitions:!0,atoms:o(`true false null larger smaller equal empty finished`),indentSwitch:!1,styleDefs:!1,hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),`meta`},'"':function(e,t){return t.tokenize=I(e.match(`""`)?`triple`:`single`),t.tokenize(e,t)},"`":function(e,t){return!F||!e.match("`")?!1:(t.tokenize=F,F=null,t.tokenize(e,t))},"'":function(e){return e.match(/^(\\[^'\s]+|[^\\'])'/)?`string.special`:(e.eatWhile(/[\w\$_\xa1-\uffff]/),`atom`)},token:function(e,t,n){if((n==`variable`||n==`type`)&&t.prevToken==`.`)return`variableName.special`}},languageData:{closeBrackets:{brackets:[`(`,`[`,`{`,`'`,`"`,`"""`]}}});function L(e){(e.interpolationStack||=[]).push(e.tokenize)}function R(e){return(e.interpolationStack||=[]).pop()}function z(e){return e.interpolationStack?e.interpolationStack.length:0}function B(e,t,n,r){var i=!1;if(t.eat(e)){if(t.eat(e))i=!0;else return`string`}function a(t,n){for(var a=!1;!t.eol();){if(!r&&!a&&t.peek()==`$`)return L(n),n.tokenize=V,`string`;var o=t.next();if(o==e&&!a&&(!i||t.match(e+e))){n.tokenize=null;break}a=!r&&!a&&o==`\\`}return`string`}return n.tokenize=a,a(t,n)}function V(e,t){return e.eat(`$`),t.tokenize=e.eat(`{`)?null:H,null}function H(e,t){return e.eatWhile(/[\w_]/),t.tokenize=R(t),`variable`}var U=a({name:`dart`,keywords:o(`this super static final const abstract class extends external factory implements mixin get native set typedef with enum throw rethrow assert break case continue default in return new deferred async await covariant try catch finally do else for if switch while import library export part of show hide is as extension on yield late required sealed base interface when inline`),blockKeywords:o(`try catch finally do else for if switch while`),builtin:o(`void bool num int double dynamic var String Null Never`),atoms:o(`true false null`),number:/^(?:0x[a-f\d_]+|(?:[\d_]+\.?[\d_]*|\.[\d_]+)(?:e[-+]?[\d_]+)?)/i,hooks:{"@":function(e){return e.eatWhile(/[\w\$_\.]/),`meta`},"'":function(e,t){return B(`'`,e,t,!1)},'"':function(e,t){return B(`"`,e,t,!1)},r:function(e,t){var n=e.peek();return n==`'`||n==`"`?B(e.next(),e,t,!0):!1},"}":function(e,t){return z(t)>0&&(t.tokenize=R(t),null)},"/":function(e,t){return e.eat(`*`)?(t.tokenize=O(1),t.tokenize(e,t)):!1},token:function(e,t,n){if(n==`variable`&&RegExp(`^[_$]*[A-Z][a-zA-Z0-9_$]*$`,`g`).test(e.current()))return`type`}}});export{E as csharp,U as dart,j as kotlin,M as objectiveC,N as objectiveCpp,k as scala,P as squirrel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=[`false`,`nil`,`true`],t=[`.`,`catch`,`def`,`do`,`if`,`monitor-enter`,`monitor-exit`,`new`,`quote`,`recur`,`set!`,`throw`,`try`,`var`],n=`*,*',*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(`,`),r=`->.->>.as->.binding.bound-fn.case.catch.comment.cond.cond->.cond->>.condp.def.definterface.defmethod.defn.defmacro.defprotocol.defrecord.defstruct.deftype.do.doseq.dotimes.doto.extend.extend-protocol.extend-type.fn.for.future.if.if-let.if-not.if-some.let.letfn.locking.loop.ns.proxy.reify.struct-map.some->.some->>.try.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`.split(`.`),i=h(e),a=h(t),o=h(n),s=h(r),c=/^(?:[\\\[\]\s"(),;@^`{}~]|$)/,l=/^(?:[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\[\]\s"#'(),;@^`{}~]|$))/,u=/^(?:\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\[\]\s"(),;@^`{}~]|$))/,d=/^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~.][^\\\[\]\s"(),;@^`{}~.\/]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~.][^\\\[\]\s"(),;@^`{}~.\/]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/;function f(e,t){if(e.eatSpace()||e.eat(`,`))return[`space`,null];if(e.match(l))return[null,`number`];if(e.match(u))return[null,`string.special`];if(e.eat(/^"/))return(t.tokenize=p)(e,t);if(e.eat(/^[(\[{]/))return[`open`,`bracket`];if(e.eat(/^[)\]}]/))return[`close`,`bracket`];if(e.eat(/^;/))return e.skipToEnd(),[`space`,`comment`];if(e.eat(/^[#'@^`~]/))return[null,`meta`];var n=e.match(d),r=n&&n[0];return r?r===`comment`&&t.lastToken===`(`?(t.tokenize=m)(e,t):g(r,i)||r.charAt(0)===`:`?[`symbol`,`atom`]:g(r,a)||g(r,o)?[`symbol`,`keyword`]:t.lastToken===`(`?[`symbol`,`builtin`]:[`symbol`,`variable`]:(e.next(),e.eatWhile(function(e){return!g(e,c)}),[null,`error`])}function p(e,t){for(var n=!1,r;r=e.next();){if(r===`"`&&!n){t.tokenize=f;break}n=!n&&r===`\\`}return[null,`string`]}function m(e,t){for(var n=1,r;r=e.next();)if(r===`)`&&n--,r===`(`&&n++,n===0){e.backUp(1),t.tokenize=f;break}return[`space`,`comment`]}function h(e){for(var t={},n=0;n<e.length;++n)t[e[n]]=!0;return t}function g(e,t){if(t instanceof RegExp)return t.test(e);if(t instanceof Object)return t.propertyIsEnumerable(e)}var _={name:`clojure`,startState:function(){return{ctx:{prev:null,start:0,indentTo:0},lastToken:null,tokenize:f}},token:function(e,t){e.sol()&&typeof t.ctx.indentTo!=`number`&&(t.ctx.indentTo=t.ctx.start+1);var n=t.tokenize(e,t),r=n[0],i=n[1],a=e.current();return r!==`space`&&(t.lastToken===`(`&&t.ctx.indentTo===null?r===`symbol`&&g(a,s)?t.ctx.indentTo=t.ctx.start+e.indentUnit:t.ctx.indentTo=`next`:t.ctx.indentTo===`next`&&(t.ctx.indentTo=e.column()),t.lastToken=a),r===`open`?t.ctx={prev:t.ctx,start:e.column(),indentTo:null}:r===`close`&&(t.ctx=t.ctx.prev||t.ctx),i},indent:function(e){var t=e.ctx.indentTo;return typeof t==`number`?t:e.ctx.start+1},languageData:{closeBrackets:{brackets:[`(`,`[`,`{`,`"`]},commentTokens:{line:`;;`},autocomplete:[].concat(e,t,n)}};export{_ as clojure};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=/({)?[a-zA-Z0-9_]+(})?/;function t(e,t){for(var n,r,i=!1;!e.eol()&&(n=e.next())!=t.pending;){if(n===`$`&&r!=`\\`&&t.pending==`"`){i=!0;break}r=n}return i&&e.backUp(1),t.continueString=n!=t.pending,`string`}function n(n,r){var i=n.next();return i===`$`?n.match(e)?`variableName.special`:`variable`:r.continueString?(n.backUp(1),t(n,r)):n.match(/(\s+)?\w+\(/)||n.match(/(\s+)?\w+\ \(/)?(n.backUp(1),`def`):i==`#`?(n.skipToEnd(),`comment`):i==`'`||i==`"`?(r.pending=i,t(n,r)):i==`(`||i==`)`?`bracket`:i.match(/[0-9]/)?`number`:(n.eatWhile(/[\w-]/),null)}var r={name:`cmake`,startState:function(){var e={};return e.inDefinition=!1,e.inInclude=!1,e.continueString=!1,e.pending=!1,e},token:function(e,t){return e.eatSpace()?null:n(e,t)}};export{r as cmake};
|