create-dumb-diagrams 0.1.0 → 0.1.1
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/dist/index.js +3 -2
- package/dist/source/CHANGELOG.md +14 -1
- package/dist/source/docs/RELEASE.md +19 -1
- package/dist/source/packages/brand/package.json +1 -1
- package/dist/source/packages/cli/package.json +1 -1
- package/dist/source/packages/cli/src/index.ts +3 -2
- package/dist/source/packages/editor/package.json +1 -1
- package/dist/source/packages/editor/src/main.tsx +1 -0
- package/dist/source/packages/editor/src/vite-env.d.ts +3 -0
- package/dist/source/packages/editor/vite.config.ts +3 -0
- package/dist/source/packages/runtime/package.json +1 -1
- package/dist/source/packages/website/package.json +1 -1
- package/dist/source/scripts/verify-npm-release.mjs +67 -0
- package/dist/source/scripts/verify-npm-release.test.mjs +66 -0
- package/dist/studio/assets/{ExamplesModal-79ueQERc.js → ExamplesModal-vgMxbCg0.js} +1 -1
- package/dist/studio/assets/{SourceDrawer-DACtx_EG.js → SourceDrawer-DAZyRWzQ.js} +1 -1
- package/dist/studio/assets/{index-BuFGSb_-.js → index-oMOzTYQf.js} +2 -2
- package/dist/studio/index.html +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -10135,9 +10135,10 @@ function dispatchCommand(command, parsed, stdinText) {
|
|
|
10135
10135
|
function printHelp() {
|
|
10136
10136
|
console.log(`${ui.banner()}
|
|
10137
10137
|
|
|
10138
|
-
${ui.brand()}
|
|
10138
|
+
${ui.brand()} ${ui.muted(`v${VERSION}`)}
|
|
10139
10139
|
|
|
10140
10140
|
${ui.heading("Usage")}
|
|
10141
|
+
${ui.command("dumbdiagrams --version")} Show the installed version
|
|
10141
10142
|
${ui.command("dumbdiagrams init")} Create a project folder for agents
|
|
10142
10143
|
${ui.command("dumbdiagrams studio")} Open the local diagram editor
|
|
10143
10144
|
${ui.command("dumbdiagrams validate")} Validate .dgm source files
|
|
@@ -10184,7 +10185,7 @@ function cmdStudio(args) {
|
|
|
10184
10185
|
cause: error.code === "start-failed" ? error.cause : error
|
|
10185
10186
|
})).andThen((handle) => {
|
|
10186
10187
|
console.log(`
|
|
10187
|
-
${ui.brand()}
|
|
10188
|
+
${ui.brand()} ${ui.muted(`v${VERSION}`)}
|
|
10188
10189
|
`);
|
|
10189
10190
|
console.log(ui.heading("Studio is ready"));
|
|
10190
10191
|
console.log(ui.info("local", ui.command(handle.url)));
|
package/dist/source/CHANGELOG.md
CHANGED
|
@@ -3,7 +3,20 @@
|
|
|
3
3
|
All notable changes to DumbDiagrams are documented here. The project follows
|
|
4
4
|
the versioning policy in [docs/RELEASE.md](./docs/RELEASE.md).
|
|
5
5
|
|
|
6
|
-
## [0.1.
|
|
6
|
+
## [0.1.1] - 2026-11-06
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
|
|
10
|
+
- Allow up to 15 minutes for npm registry propagation, with bounded requests,
|
|
11
|
+
clear diagnostics, and verification-only recovery.
|
|
12
|
+
- Fail immediately if the published artifact integrity does not match.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- Display the installed version in CLI help and Studio startup output.
|
|
17
|
+
- Show a discreet version label in the Studio footer.
|
|
18
|
+
|
|
19
|
+
## [0.1.0] - 2026-11-06
|
|
7
20
|
|
|
8
21
|
First public release of the `create-dumb-diagrams` npm package.
|
|
9
22
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Package versions
|
|
4
4
|
|
|
5
|
-
The current workspace version is `0.1.
|
|
5
|
+
The current workspace version is `0.1.1` (release tag `v0.1.1`).
|
|
6
6
|
|
|
7
7
|
All workspace packages share one version, bumped together, so the parser,
|
|
8
8
|
renderer, CLI, and editor are always one compatibility line. Only
|
|
@@ -98,6 +98,24 @@ For a new version, the tag triggers the npm publishing workflow:
|
|
|
98
98
|
matches. The job runs in the protected `npm-production` environment, and no
|
|
99
99
|
npm token is stored.
|
|
100
100
|
|
|
101
|
+
Registry verification polls the public npm registry directly for up to 15 minutes,
|
|
102
|
+
with bounded requests and no local npm metadata cache. It retries propagation
|
|
103
|
+
404s, rate limiting, network errors, and registry outages. A visible version with
|
|
104
|
+
a different artifact integrity fails immediately.
|
|
105
|
+
|
|
106
|
+
If npm accepts publication but verification exhausts that window, do not rerun
|
|
107
|
+
publication or move the tag. Retry only verification from a checkout containing
|
|
108
|
+
the verifier, using the expected SHA-512 integrity printed in the failed step:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
PACKAGE_NAME=create-dumb-diagrams RELEASE_VERSION=0.1.0 \
|
|
112
|
+
EXPECTED_INTEGRITY='sha512-REPLACE_WITH_EXPECTED_VALUE_FROM_RELEASE_LOG' \
|
|
113
|
+
node scripts/verify-npm-release.mjs
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
This is read-only and does not publish anything. Use the integrity from the
|
|
117
|
+
release artifact/log, not an independently rebuilt local tarball.
|
|
118
|
+
|
|
101
119
|
The public landing page and documentation are a separate static Astro build at
|
|
102
120
|
`packages/website/dist`, hosted on Cloudflare Pages. Connect the repository to
|
|
103
121
|
Pages and use `main` as the production branch; website deployments follow branch
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-dumb-diagrams",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"license": "AGPL-3.0-only",
|
|
5
5
|
"description": "LLM-first architecture diagrams that are hard to get wrong: validated .dgm source, deterministic SVG rendering, local CLI, and Studio",
|
|
6
6
|
"type": "module",
|
|
@@ -92,9 +92,10 @@ function dispatchCommand(
|
|
|
92
92
|
function printHelp(): void {
|
|
93
93
|
console.log(`${ui.banner()}
|
|
94
94
|
|
|
95
|
-
${ui.brand()}
|
|
95
|
+
${ui.brand()} ${ui.muted(`v${VERSION}`)}
|
|
96
96
|
|
|
97
97
|
${ui.heading("Usage")}
|
|
98
|
+
${ui.command("dumbdiagrams --version")} Show the installed version
|
|
98
99
|
${ui.command("dumbdiagrams init")} Create a project folder for agents
|
|
99
100
|
${ui.command("dumbdiagrams studio")} Open the local diagram editor
|
|
100
101
|
${ui.command("dumbdiagrams validate")} Validate .dgm source files
|
|
@@ -153,7 +154,7 @@ function cmdStudio(args: ParsedArgs): ResultAsync<number, CliError> {
|
|
|
153
154
|
}),
|
|
154
155
|
)
|
|
155
156
|
.andThen((handle) => {
|
|
156
|
-
console.log(`\n${ui.brand()}\n`);
|
|
157
|
+
console.log(`\n${ui.brand()} ${ui.muted(`v${VERSION}`)}\n`);
|
|
157
158
|
console.log(ui.heading("Studio is ready"));
|
|
158
159
|
console.log(ui.info("local", ui.command(handle.url)));
|
|
159
160
|
console.log(ui.info("file", "Use Open to choose any .dgm file on disk"));
|
|
@@ -2338,6 +2338,7 @@ function App() {
|
|
|
2338
2338
|
title="Your diagrams stay on this device. DumbDiagrams does not upload or store them on our servers."
|
|
2339
2339
|
>
|
|
2340
2340
|
<span className="privacy-footer-brand">© 2026 DumbDiagrams</span>
|
|
2341
|
+
<span aria-label={`Studio version ${__DUMB_DIAGRAMS_VERSION__}`}>v{__DUMB_DIAGRAMS_VERSION__}</span>
|
|
2341
2342
|
<span className="privacy-footer-divider" aria-hidden="true">
|
|
2342
2343
|
|
|
|
2343
2344
|
</span>
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { defineConfig } from "vite";
|
|
2
2
|
import react from "@vitejs/plugin-react";
|
|
3
3
|
import { resolve } from "path";
|
|
4
|
+
import { readFileSync } from "node:fs";
|
|
4
5
|
|
|
5
6
|
const editorDir = import.meta.dirname;
|
|
7
|
+
const { version } = JSON.parse(readFileSync(resolve(editorDir, "../cli/package.json"), "utf8"));
|
|
6
8
|
|
|
7
9
|
export default defineConfig({
|
|
8
10
|
plugins: [react()],
|
|
11
|
+
define: { __DUMB_DIAGRAMS_VERSION__: JSON.stringify(version) },
|
|
9
12
|
// Relative URLs keep the same asset paths on `/` and `/dumb-diagrams/`.
|
|
10
13
|
base: "./",
|
|
11
14
|
publicDir: resolve(editorDir, "public"),
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { pathToFileURL } from "node:url";
|
|
4
|
+
|
|
5
|
+
export async function verifyNpmRelease({
|
|
6
|
+
packageName,
|
|
7
|
+
version,
|
|
8
|
+
integrity,
|
|
9
|
+
fetchImpl = fetch,
|
|
10
|
+
sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
|
|
11
|
+
now = Date.now,
|
|
12
|
+
timeoutMs = 15 * 60_000,
|
|
13
|
+
intervalMs = 15_000,
|
|
14
|
+
log = console.log,
|
|
15
|
+
}) {
|
|
16
|
+
const url = `https://registry.npmjs.org/${encodeURIComponent(packageName)}/${encodeURIComponent(version)}`;
|
|
17
|
+
const deadline = now() + timeoutMs;
|
|
18
|
+
let lastError = "No registry response";
|
|
19
|
+
for (let attempt = 1; now() < deadline; attempt++) {
|
|
20
|
+
let metadata;
|
|
21
|
+
try {
|
|
22
|
+
const response = await fetchImpl(url, {
|
|
23
|
+
headers: { "Cache-Control": "no-cache", Accept: "application/json" },
|
|
24
|
+
signal: AbortSignal.timeout(Math.max(1, Math.min(15_000, deadline - now()))),
|
|
25
|
+
});
|
|
26
|
+
if (response.ok) metadata = await response.json();
|
|
27
|
+
else if (response.status === 404 || response.status === 429 || response.status >= 500) {
|
|
28
|
+
lastError = `Registry returned HTTP ${response.status}`;
|
|
29
|
+
} else {
|
|
30
|
+
throw new Error(`Non-retryable registry response: HTTP ${response.status}`);
|
|
31
|
+
}
|
|
32
|
+
} catch (error) {
|
|
33
|
+
if (error.message.startsWith("Non-retryable")) throw error;
|
|
34
|
+
lastError = error.message;
|
|
35
|
+
}
|
|
36
|
+
if (metadata) {
|
|
37
|
+
if (metadata.name !== packageName || metadata.version !== version || metadata.dist?.integrity !== integrity) {
|
|
38
|
+
throw new Error(
|
|
39
|
+
`Published artifact mismatch for ${packageName}@${version}: expected ${integrity}; ` +
|
|
40
|
+
`received ${metadata.name}@${metadata.version}, integrity ${metadata.dist?.integrity ?? "missing"}`,
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
log(`Verified ${packageName}@${version} and exact artifact integrity on npm`);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
log(`Waiting for ${packageName}@${version} (attempt ${attempt}): ${lastError}`);
|
|
47
|
+
const remaining = deadline - now();
|
|
48
|
+
if (remaining > 0) await sleep(Math.min(intervalMs, remaining));
|
|
49
|
+
}
|
|
50
|
+
throw new Error(
|
|
51
|
+
`npm publication was accepted, but registry verification did not complete within ${timeoutMs / 60_000} minutes. ` +
|
|
52
|
+
`Last error: ${lastError}. Do not republish this version; rerun this verification script with ` +
|
|
53
|
+
`PACKAGE_NAME=${packageName}, RELEASE_VERSION=${version}, EXPECTED_INTEGRITY=${integrity}.`,
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
|
|
58
|
+
const { PACKAGE_NAME: packageName, RELEASE_VERSION: version, ARTIFACT: artifact, EXPECTED_INTEGRITY } = process.env;
|
|
59
|
+
const integrity = artifact
|
|
60
|
+
? `sha512-${createHash("sha512").update(readFileSync(artifact)).digest("base64")}`
|
|
61
|
+
: EXPECTED_INTEGRITY;
|
|
62
|
+
if (!packageName || !version || !/^sha512-[A-Za-z0-9+/]+={0,2}$/.test(integrity ?? "")) {
|
|
63
|
+
throw new Error("Set PACKAGE_NAME, RELEASE_VERSION, and ARTIFACT (or EXPECTED_INTEGRITY)");
|
|
64
|
+
}
|
|
65
|
+
console.log(`Expected integrity: ${integrity}`);
|
|
66
|
+
await verifyNpmRelease({ packageName, version, integrity });
|
|
67
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { test } from "node:test";
|
|
3
|
+
import { verifyNpmRelease } from "./verify-npm-release.mjs";
|
|
4
|
+
|
|
5
|
+
const metadata = { name: "create-dumb-diagrams", version: "0.1.0", dist: { integrity: "sha512-abc=" } };
|
|
6
|
+
function harness(responses, overrides = {}) {
|
|
7
|
+
let elapsed = 0;
|
|
8
|
+
let calls = 0;
|
|
9
|
+
const logs = [];
|
|
10
|
+
return {
|
|
11
|
+
options: {
|
|
12
|
+
packageName: metadata.name,
|
|
13
|
+
version: metadata.version,
|
|
14
|
+
integrity: metadata.dist.integrity,
|
|
15
|
+
now: () => elapsed,
|
|
16
|
+
sleep: async (ms) => {
|
|
17
|
+
elapsed += ms;
|
|
18
|
+
},
|
|
19
|
+
fetchImpl: async (url, options) => {
|
|
20
|
+
assert.equal(url, "https://registry.npmjs.org/create-dumb-diagrams/0.1.0");
|
|
21
|
+
assert.equal(options.headers["Cache-Control"], "no-cache");
|
|
22
|
+
const response = responses[Math.min(calls++, responses.length - 1)];
|
|
23
|
+
if (response instanceof Error) throw response;
|
|
24
|
+
return { ok: response === 200, status: response, json: async () => metadata };
|
|
25
|
+
},
|
|
26
|
+
log: (message) => logs.push(message),
|
|
27
|
+
...overrides,
|
|
28
|
+
},
|
|
29
|
+
calls: () => calls,
|
|
30
|
+
elapsed: () => elapsed,
|
|
31
|
+
logs,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
test("waits through propagation beyond the old two-minute window", async () => {
|
|
36
|
+
const h = harness([...Array(10).fill(404), 200]);
|
|
37
|
+
await verifyNpmRelease(h.options);
|
|
38
|
+
assert.equal(h.elapsed(), 150_000);
|
|
39
|
+
assert.equal(h.calls(), 11);
|
|
40
|
+
assert.match(h.logs.at(-1), /exact artifact integrity/);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test("retries network errors, rate limiting and registry outages", async () => {
|
|
44
|
+
const h = harness([new Error("connection reset"), 429, 503, 200]);
|
|
45
|
+
await verifyNpmRelease(h.options);
|
|
46
|
+
assert.equal(h.calls(), 4);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test("fails immediately on integrity mismatch", async () => {
|
|
50
|
+
const h = harness([200], { integrity: "sha512-other=" });
|
|
51
|
+
await assert.rejects(verifyNpmRelease(h.options), /artifact mismatch/);
|
|
52
|
+
assert.equal(h.calls(), 1);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
test("fails immediately on non-retryable registry errors", async () => {
|
|
56
|
+
const h = harness([403]);
|
|
57
|
+
await assert.rejects(verifyNpmRelease(h.options), /HTTP 403/);
|
|
58
|
+
assert.equal(h.calls(), 1);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test("bounds waiting and reports a verification-only recovery command", async () => {
|
|
62
|
+
const h = harness([404], { timeoutMs: 31_000 });
|
|
63
|
+
await assert.rejects(verifyNpmRelease(h.options), /Do not republish.*EXPECTED_INTEGRITY=sha512-abc=/);
|
|
64
|
+
assert.equal(h.elapsed(), 31_000);
|
|
65
|
+
assert.equal(h.calls(), 3);
|
|
66
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,c as t,i as n,l as r,n as i,o as a,r as o,s,t as c}from"./index-
|
|
1
|
+
import{a as e,c as t,i as n,l as r,n as i,o as a,r as o,s,t as c}from"./index-oMOzTYQf.js";import{t as l}from"./catalog-index-Bp_MPpGK.js";var u=r(t(),1),d="# Architecture brief\n\n## Goal\n\nA simple AWS static website delivery chain: visitor, DNS, CDN, and the S3 bucket holding site files. Provider/grammar: `aws`.\n\n## Explicit requirements\n\n- Show a website visitor, DNS, a content delivery service, and the bucket that stores the website files.\n\n## Relationships and containment\n\n- `visitor` → `dns`: Resolve domain.\n- `dns` → `cdn`: Alias to CDN.\n- `cdn` → `bucket`: Fetch files.\n\n- `visitor` (Website visitor) at root, outside any boundary.\n- `aws` (AWS Cloud) at root, outside any boundary.\n- `dns` (DNS) inside `aws`.\n- `cdn` (CDN) inside `aws`.\n- `bucket` (Website bucket) inside `aws`.\n\n## Inferred decisions and exclusions\n\n- The AWS Cloud boundary is structurally required to place AWS services.\n- Automatic layout, left-to-right; no manual coordinates.\n",f=`dgm 1
|
|
2
2
|
diagram aws-easy-static-website-delivery {
|
|
3
3
|
grammar aws
|
|
4
4
|
flow lr
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as e,l as t,n}from"./index-
|
|
1
|
+
import{c as e,l as t,n}from"./index-oMOzTYQf.js";var r=t(e());function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(null,arguments)}function a(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}var o=[],s=[];(()=>{let e=`lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o`.split(`,`).map(e=>e?parseInt(e,36):1);for(let t=0,n=0;t<e.length;t++)(t%2?s:o).push(n+=e[t])})();function c(e){if(e<768)return!1;for(let t=0,n=o.length;;){let r=t+n>>1;if(e<o[r])n=r;else if(e>=s[r])t=r+1;else return!0;if(t==n)return!1}}function l(e){return e>=127462&&e<=127487}var u=8205;function d(e,t,n=!0,r=!0){return(n?f:p)(e,t,r)}function f(e,t,n){if(t==e.length)return t;t&&h(e.charCodeAt(t))&&g(e.charCodeAt(t-1))&&t--;let r=m(e,t);for(t+=_(r);t<e.length;){let i=m(e,t);if(r==u||i==u||n&&c(i))t+=_(i),r=i;else if(l(i)){let n=0,r=t-2;for(;r>=0&&l(m(e,r));)n++,r-=2;if(n%2==0)break;t+=2}else break}return t}function p(e,t,n){for(;t>1;){let r=f(e,t-2,n);if(r<t)return r;t--}return 0}function m(e,t){let n=e.charCodeAt(t);if(!g(n)||t+1==e.length)return n;let r=e.charCodeAt(t+1);return h(r)?(n-55296<<10)+(r-56320)+65536:n}function h(e){return e>=56320&&e<57344}function g(e){return e>=55296&&e<56320}function _(e){return e<65536?1:2}var v=class e{lineAt(e){if(e<0||e>this.length)throw RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,n){[e,t]=ae(this,e,t);let r=[];return this.decompose(0,e,r,2),n.length&&n.decompose(0,n.length,r,3),this.decompose(t,this.length,r,1),b.from(r,this.length-(t-e)+n.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=ae(this,e,t);let n=[];return this.decompose(e,t,n,0),b.from(n,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),n=this.length-this.scanIdentical(e,-1),r=new te(this),i=new te(e);for(let e=t,a=t;;){if(r.next(e),i.next(e),e=0,r.lineBreak!=i.lineBreak||r.done!=i.done||r.value!=i.value)return!1;if(a+=r.value.length,r.done||a>=n)return!0}}iter(e=1){return new te(this,e)}iterRange(e,t=this.length){return new ne(this,e,t)}iterLines(e,t){let n;if(e==null)n=this.iter();else{t??=this.lines+1;let r=this.line(e).from;n=this.iterRange(r,Math.max(r,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new re(n)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(t){if(t.length==0)throw RangeError(`A document must have at least one line`);return t.length==1&&!t[0]?e.empty:t.length<=32?new y(t):b.from(y.split(t,[]))}},y=class e extends v{constructor(e,t=x(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,n,r){for(let i=0;;i++){let a=this.text[i],o=r+a.length;if((t?n:o)>=e)return new ie(r,o,n,a);r=o+1,n++}}decompose(t,n,r,i){let a=t<=0&&n>=this.length?this:new e(ee(this.text,t,n),Math.min(n,this.length)-Math.max(0,t));if(i&1){let t=r.pop(),n=S(a.text,t.text.slice(),0,a.length);if(n.length<=32)r.push(new e(n,t.length+a.length));else{let t=n.length>>1;r.push(new e(n.slice(0,t)),new e(n.slice(t)))}}else r.push(a)}replace(t,n,r){if(!(r instanceof e))return super.replace(t,n,r);[t,n]=ae(this,t,n);let i=S(this.text,S(r.text,ee(this.text,0,t)),n),a=this.length+r.length-(n-t);return i.length<=32?new e(i,a):b.from(e.split(i,[]),a)}sliceString(e,t=this.length,n=`
|
|
2
2
|
`){[e,t]=ae(this,e,t);let r=``;for(let i=0,a=0;i<=t&&a<this.text.length;a++){let o=this.text[a],s=i+o.length;i>e&&a&&(r+=n),e<s&&t>i&&(r+=o.slice(Math.max(0,e-i),t-i)),i=s+1}return r}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(t,n){let r=[],i=-1;for(let a of t)r.push(a),i+=a.length+1,r.length==32&&(n.push(new e(r,i)),r=[],i=-1);return i>-1&&n.push(new e(r,i)),n}},b=class e extends v{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let t of e)this.lines+=t.lines}lineInner(e,t,n,r){for(let i=0;;i++){let a=this.children[i],o=r+a.length,s=n+a.lines-1;if((t?s:o)>=e)return a.lineInner(e,t,n,r);r=o+1,n=s+1}}decompose(e,t,n,r){for(let i=0,a=0;a<=t&&i<this.children.length;i++){let o=this.children[i],s=a+o.length;if(e<=s&&t>=a){let i=r&(a<=e|(s>=t?2:0));a>=e&&s<=t&&!i?n.push(o):o.decompose(e-a,t-a,n,i)}a=s+1}}replace(t,n,r){if([t,n]=ae(this,t,n),r.lines<this.lines)for(let i=0,a=0;i<this.children.length;i++){let o=this.children[i],s=a+o.length;if(t>=a&&n<=s){let c=o.replace(t-a,n-a,r),l=this.lines-o.lines+c.lines;if(c.lines<l>>4&&c.lines>l>>6){let a=this.children.slice();return a[i]=c,new e(a,this.length-(n-t)+r.length)}return super.replace(a,s,c)}a=s+1}return super.replace(t,n,r)}sliceString(e,t=this.length,n=`
|
|
3
3
|
`){[e,t]=ae(this,e,t);let r=``;for(let i=0,a=0;i<this.children.length&&a<=t;i++){let o=this.children[i],s=a+o.length;a>e&&i&&(r+=n),e<s&&t>a&&(r+=o.sliceString(e-a,t-a,n)),a=s+1}return r}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(t,n){if(!(t instanceof e))return 0;let r=0,[i,a,o,s]=n>0?[0,0,this.children.length,t.children.length]:[this.children.length-1,t.children.length-1,-1,-1];for(;;i+=n,a+=n){if(i==o||a==s)return r;let e=this.children[i],c=t.children[a];if(e!=c)return r+e.scanIdentical(c,n);r+=e.length+1}}static from(t,n=t.reduce((e,t)=>e+t.length+1,-1)){let r=0;for(let e of t)r+=e.lines;if(r<32){let e=[];for(let n of t)n.flatten(e);return new y(e,n)}let i=Math.max(32,r>>5),a=i<<1,o=i>>1,s=[],c=0,l=-1,u=[];function d(t){let n;if(t.lines>a&&t instanceof e)for(let e of t.children)d(e);else t.lines>o&&(c>o||!c)?(f(),s.push(t)):t instanceof y&&c&&(n=u[u.length-1])instanceof y&&t.lines+n.lines<=32?(c+=t.lines,l+=t.length+1,u[u.length-1]=new y(n.text.concat(t.text),n.length+1+t.length)):(c+t.lines>i&&f(),c+=t.lines,l+=t.length+1,u.push(t))}function f(){c!=0&&(s.push(u.length==1?u[0]:e.from(u,l)),l=-1,c=u.length=0)}for(let e of t)d(e);return f(),s.length==1?s[0]:new e(s,n)}};v.empty=new y([``],0);function x(e){let t=-1;for(let n of e)t+=n.length+1;return t}function S(e,t,n=0,r=1e9){for(let i=0,a=0,o=!0;a<e.length&&i<=r;a++){let s=e[a],c=i+s.length;c>=n&&(c>r&&(s=s.slice(0,r-i)),i<n&&(s=s.slice(n-i)),o?(t[t.length-1]+=s,o=!1):t.push(s)),i=c+1}return t}function ee(e,t,n){return S(e,[``],t,n)}var te=class{constructor(e,t=1){this.dir=t,this.done=!1,this.lineBreak=!1,this.value=``,this.nodes=[e],this.offsets=[t>0?1:(e instanceof y?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let n=this.nodes.length-1,r=this.nodes[n],i=this.offsets[n],a=i>>1,o=r instanceof y?r.text.length:r.children.length;if(a==(t>0?o:0)){if(n==0)return this.done=!0,this.value=``,this;t>0&&this.offsets[n-1]++,this.nodes.pop(),this.offsets.pop()}else if((i&1)==(t>0?0:1)){if(this.offsets[n]+=t,e==0)return this.lineBreak=!0,this.value=`
|
|
4
4
|
`,this;e--}else if(r instanceof y){let i=r.text[a+(t<0?-1:0)];if(this.offsets[n]+=t,i.length>Math.max(0,e))return this.value=e==0?i:t>0?i.slice(e):i.slice(0,i.length-e),this;e-=i.length}else{let i=r.children[a+(t<0?-1:0)];e>i.length?(e-=i.length,this.offsets[n]+=t):(t<0&&this.offsets[n]--,this.nodes.push(i),this.offsets.push(t>0?1:(i instanceof y?i.text.length:i.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},ne=class{constructor(e,t,n){this.value=``,this.done=!1,this.cursor=new te(e,t>n?-1:1),this.pos=t>n?e.length:0,this.from=Math.min(t,n),this.to=Math.max(t,n)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value=``,this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let n=t<0?this.pos-this.from:this.to-this.pos;e>n&&(e=n),n-=e;let{value:r}=this.cursor.next(e);return this.pos+=(r.length+e)*t,this.value=r.length<=n?r:t<0?r.slice(r.length-n):r.slice(0,n),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=``}},re=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value=``,this.done=!1}next(e=0){let{done:t,lineBreak:n,value:r}=this.inner.next(e);return t&&this.afterBreak?(this.value=``,this.afterBreak=!1):t?(this.done=!0,this.value=``):n?this.afterBreak?this.value=``:(this.afterBreak=!0,this.next()):(this.value=r,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<`u`&&(v.prototype[Symbol.iterator]=function(){return this.iter()},te.prototype[Symbol.iterator]=ne.prototype[Symbol.iterator]=re.prototype[Symbol.iterator]=function(){return this});var ie=class{constructor(e,t,n,r){this.from=e,this.to=t,this.number=n,this.text=r}get length(){return this.to-this.from}};function ae(e,t,n){return t=Math.max(0,Math.min(e.length,t)),[t,Math.max(t,Math.min(e.length,n))]}function C(e,t,n=!0,r=!0){return d(e,t,n,r)}function oe(e){return e>=56320&&e<57344}function se(e){return e>=55296&&e<56320}function w(e,t){let n=e.charCodeAt(t);if(!se(n)||t+1==e.length)return n;let r=e.charCodeAt(t+1);return oe(r)?(n-55296<<10)+(r-56320)+65536:n}function ce(e){return e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode((e>>10)+55296,(e&1023)+56320))}function le(e){return e<65536?1:2}var ue=/\r\n?|\n/,T=(function(e){return e[e.Simple=0]=`Simple`,e[e.TrackDel=1]=`TrackDel`,e[e.TrackBefore=2]=`TrackBefore`,e[e.TrackAfter=3]=`TrackAfter`,e})(T||={}),de=class e{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;t<this.sections.length;t+=2)e+=this.sections[t];return e}get newLength(){let e=0;for(let t=0;t<this.sections.length;t+=2){let n=this.sections[t+1];e+=n<0?this.sections[t]:n}return e}get empty(){return this.sections.length==0||this.sections.length==2&&this.sections[1]<0}iterGaps(e){for(let t=0,n=0,r=0;t<this.sections.length;){let i=this.sections[t++],a=this.sections[t++];a<0?(e(n,r,i),r+=i):r+=a,n+=i}}iterChangedRanges(e,t=!1){O(this,e,t)}get invertedDesc(){let t=[];for(let e=0;e<this.sections.length;){let n=this.sections[e++],r=this.sections[e++];r<0?t.push(n,r):t.push(r,n)}return new e(t)}composeDesc(e){return this.empty?e:e.empty?this:me(this,e)}mapDesc(e,t=!1){return e.empty?this:pe(this,e,t)}mapPos(e,t=-1,n=T.Simple){let r=0,i=0;for(let a=0;a<this.sections.length;){let o=this.sections[a++],s=this.sections[a++],c=r+o;if(s<0){if(c>e)return i+(e-r);i+=o}else{if(n!=T.Simple&&c>=e&&(n==T.TrackDel&&r<e&&c>e||n==T.TrackBefore&&r<e||n==T.TrackAfter&&c>e))return null;if(c>e||c==e&&t<0&&!o)return e==r||t<0?i:i+s;i+=s}r=c}if(e>r)throw RangeError(`Position ${e} is out of range for changeset of length ${r}`);return i}touchesRange(e,t=e){for(let n=0,r=0;n<this.sections.length&&r<=t;){let i=this.sections[n++],a=this.sections[n++],o=r+i;if(a>=0&&r<=t&&o>=e)return r<e&&o>t?`cover`:!0;r=o}return!1}toString(){let e=``;for(let t=0;t<this.sections.length;){let n=this.sections[t++],r=this.sections[t++];e+=(e?` `:``)+n+(r>=0?`:`+r:``)}return e}toJSON(){return this.sections}static fromJSON(t){if(!Array.isArray(t)||t.length%2||t.some(e=>typeof e!=`number`))throw RangeError(`Invalid JSON representation of ChangeDesc`);return new e(t)}static create(t){return new e(t)}},E=class e extends de{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw RangeError(`Applying change set to a document with the wrong length`);return O(this,(t,n,r,i,a)=>e=e.replace(r,r+(n-t),a),!1),e}mapDesc(e,t=!1){return pe(this,e,t,!0)}invert(t){let n=this.sections.slice(),r=[];for(let e=0,i=0;e<n.length;e+=2){let a=n[e],o=n[e+1];if(o>=0){n[e]=o,n[e+1]=a;let s=e>>1;for(;r.length<s;)r.push(v.empty);r.push(a?t.slice(i,i+a):v.empty)}i+=a}return new e(n,r)}compose(e){return this.empty?e:e.empty?this:me(this,e,!0)}map(e,t=!1){return e.empty?this:pe(this,e,t,!0)}iterChanges(e,t=!1){O(this,e,t)}get desc(){return de.create(this.sections)}filter(t){let n=[],r=[],i=[],a=new he(this);done:for(let e=0,o=0;;){let s=e==t.length?1e9:t[e++];for(;o<s||o==s&&a.len==0;){if(a.done)break done;let e=Math.min(a.len,s-o);D(i,e,-1);let t=a.ins==-1?-1:a.off==0?a.ins:0;D(n,e,t),t>0&&fe(r,n,a.text),a.forward(e),o+=e}let c=t[e++];for(;o<c;){if(a.done)break done;let e=Math.min(a.len,c-o);D(n,e,-1),D(i,e,a.ins==-1?-1:a.off==0?a.ins:0),a.forward(e),o+=e}}return{changes:new e(n,r),filtered:de.create(i)}}toJSON(){let e=[];for(let t=0;t<this.sections.length;t+=2){let n=this.sections[t],r=this.sections[t+1];r<0?e.push(n):r==0?e.push([n]):e.push([n].concat(this.inserted[t>>1].toJSON()))}return e}static of(t,n,r){let i=[],a=[],o=0,s=null;function c(t=!1){if(!t&&!i.length)return;o<n&&D(i,n-o,-1);let r=new e(i,a);s=s?s.compose(r.map(s)):r,i=[],a=[],o=0}function l(t){if(Array.isArray(t))for(let e of t)l(e);else if(t instanceof e){if(t.length!=n)throw RangeError(`Mismatched change set length (got ${t.length}, expected ${n})`);c(),s=s?s.compose(t.map(s)):t}else{let{from:e,to:s=e,insert:l}=t;if(e>s||e<0||s>n)throw RangeError(`Invalid change range ${e} to ${s} (in doc of length ${n})`);let u=l?typeof l==`string`?v.of(l.split(r||ue)):l:v.empty,d=u.length;if(e==s&&d==0)return;e<o&&c(),e>o&&D(i,e-o,-1),D(i,s-e,d),fe(a,i,u),o=s}}return l(t),c(!s),s}static empty(t){return new e(t?[t,-1]:[],[])}static fromJSON(t){if(!Array.isArray(t))throw RangeError(`Invalid JSON representation of ChangeSet`);let n=[],r=[];for(let e=0;e<t.length;e++){let i=t[e];if(typeof i==`number`)n.push(i,-1);else if(!Array.isArray(i)||typeof i[0]!=`number`||i.some((e,t)=>t&&typeof e!=`string`))throw RangeError(`Invalid JSON representation of ChangeSet`);else if(i.length==1)n.push(i[0],0);else{for(;r.length<e;)r.push(v.empty);r[e]=v.of(i.slice(1)),n.push(i[0],r[e].length)}}return new e(n,r)}static createSet(t,n){return new e(t,n)}};function D(e,t,n,r=!1){if(t==0&&n<=0)return;let i=e.length-2;i>=0&&n<=0&&n==e[i+1]?e[i]+=t:i>=0&&t==0&&e[i]==0?e[i+1]+=n:r?(e[i]+=t,e[i+1]+=n):e.push(t,n)}function fe(e,t,n){if(n.length==0)return;let r=t.length-2>>1;if(r<e.length)e[e.length-1]=e[e.length-1].append(n);else{for(;e.length<r;)e.push(v.empty);e.push(n)}}function O(e,t,n){let r=e.inserted;for(let i=0,a=0,o=0;o<e.sections.length;){let s=e.sections[o++],c=e.sections[o++];if(c<0)i+=s,a+=s;else{let l=i,u=a,d=v.empty;for(;l+=s,u+=c,c&&r&&(d=d.append(r[o-2>>1])),!(n||o==e.sections.length||e.sections[o+1]<0);)s=e.sections[o++],c=e.sections[o++];t(i,l,a,u,d),i=l,a=u}}}function pe(e,t,n,r=!1){let i=[],a=r?[]:null,o=new he(e),s=new he(t);for(let e=-1;;)if(o.done&&s.len||s.done&&o.len)throw Error(`Mismatched change set lengths`);else if(o.ins==-1&&s.ins==-1){let e=Math.min(o.len,s.len);D(i,e,-1),o.forward(e),s.forward(e)}else if(s.ins>=0&&(o.ins<0||e==o.i||o.off==0&&(s.len<o.len||s.len==o.len&&!n))){let t=s.len;for(D(i,s.ins,-1);t;){let n=Math.min(o.len,t);o.ins>=0&&e<o.i&&o.len<=n&&(D(i,0,o.ins),a&&fe(a,i,o.text),e=o.i),o.forward(n),t-=n}s.next()}else if(o.ins>=0){let t=0,n=o.len;for(;n;)if(s.ins==-1){let e=Math.min(n,s.len);t+=e,n-=e,s.forward(e)}else if(s.ins==0&&s.len<n)n-=s.len,s.next();else break;D(i,t,e<o.i?o.ins:0),a&&e<o.i&&fe(a,i,o.text),e=o.i,o.forward(o.len-n)}else if(o.done&&s.done)return a?E.createSet(i,a):de.create(i);else throw Error(`Mismatched change set lengths`)}function me(e,t,n=!1){let r=[],i=n?[]:null,a=new he(e),o=new he(t);for(let e=!1;;)if(a.done&&o.done)return i?E.createSet(r,i):de.create(r);else if(a.ins==0)D(r,a.len,0,e),a.next();else if(o.len==0&&!o.done)D(r,0,o.ins,e),i&&fe(i,r,o.text),o.next();else if(a.done||o.done)throw Error(`Mismatched change set lengths`);else{let t=Math.min(a.len2,o.len),n=r.length;if(a.ins==-1){let n=o.ins==-1?-1:o.off?0:o.ins;D(r,t,n,e),i&&n&&fe(i,r,o.text)}else o.ins==-1?(D(r,a.off?0:a.len,t,e),i&&fe(i,r,a.textBit(t))):(D(r,a.off?0:a.len,o.off?0:o.ins,e),i&&!o.off&&fe(i,r,o.text));e=(a.ins>t||o.ins>=0&&o.len>t)&&(e||r.length>n),a.forward2(t),o.forward(t)}}var he=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i<e.length?(this.len=e[this.i++],this.ins=e[this.i++]):(this.len=0,this.ins=-2),this.off=0}get done(){return this.ins==-2}get len2(){return this.ins<0?this.len:this.ins}get text(){let{inserted:e}=this.set,t=this.i-2>>1;return t>=e.length?v.empty:e[t]}textBit(e){let{inserted:t}=this.set,n=this.i-2>>1;return n>=t.length&&!e?v.empty:t[n].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},ge=class e{constructor(e,t,n,r){this.from=e,this.to=t,this.flags=n,this.goalColumn=r}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get undirectional(){return(this.flags&64)>0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}map(t,n=-1){let r,i;return this.empty?r=i=t.mapPos(this.from,n):(r=t.mapPos(this.from,1),i=t.mapPos(this.to,-1)),r==this.from&&i==this.to?this:new e(r,i,this.flags,this.goalColumn)}extend(e,t=e,n=0){if(e<=this.anchor&&t>=this.anchor)return k.range(e,t,void 0,void 0,n);let r=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return k.range(this.anchor,r,void 0,void 0,n)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!=`number`||typeof e.head!=`number`)throw RangeError(`Invalid JSON representation for SelectionRange`);return k.range(e.anchor,e.head)}static create(t,n,r,i){return new e(t,n,r,i)}},k=class e{constructor(e,t){this.ranges=e,this.mainIndex=t}map(t,n=-1){return t.empty?this:e.create(this.ranges.map(e=>e.map(t,n)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let n=0;n<this.ranges.length;n++)if(!this.ranges[n].eq(e.ranges[n],t))return!1;return!0}get main(){return this.ranges[this.mainIndex]}asSingle(){return this.ranges.length==1?this:new e([this.main],0)}addRange(t,n=!0){return e.create([t].concat(this.ranges),n?0:this.mainIndex+1)}replaceRange(t,n=this.mainIndex){let r=this.ranges.slice();return r[n]=t,e.create(r,this.mainIndex)}toJSON(){return{ranges:this.ranges.map(e=>e.toJSON()),main:this.mainIndex}}static fromJSON(t){if(!t||!Array.isArray(t.ranges)||typeof t.main!=`number`||t.main>=t.ranges.length)throw RangeError(`Invalid JSON representation for EditorSelection`);return new e(t.ranges.map(e=>ge.fromJSON(e)),t.main)}static single(t,n=t){return new e([e.range(t,n)],0)}static create(t,n=0){if(t.length==0)throw RangeError(`A selection needs at least one range`);for(let r=0,i=0;i<t.length;i++){let a=t[i];if(a.empty?a.from<=r:a.from<r)return e.normalized(t.slice(),n);r=a.to}return new e(t,n)}static cursor(e,t=0,n,r){return ge.create(e,e,(t==0?0:t<0?8:16)|(n==null?7:Math.min(6,n)),r)}static range(e,t,n,r,i){let a=r==null?7:Math.min(6,r);return!i&&e!=t&&(i=t<e?1:-1),i&&(a|=i<0?8:16),t<e?ge.create(t,e,a|32,n):ge.create(e,t,a,n)}static undirectionalRange(e,t){return ge.create(e,t,64,void 0)}static normalized(t,n=0){let r=t[n];t.sort((e,t)=>e.from-t.from),n=t.indexOf(r);for(let r=1;r<t.length;r++){let i=t[r],a=t[r-1];if(i.empty?i.from<=a.to:i.from<a.to){let o=a.from,s=Math.max(i.to,a.to);r<=n&&n--,t.splice(--r,2,i.anchor>i.head?e.range(s,o):e.range(o,s))}}return new e(t,n)}};function _e(e,t){for(let n of e.ranges)if(n.to>t)throw RangeError(`Selection points outside of document`)}var ve=0,A=class e{constructor(e,t,n,r,i){this.combine=e,this.compareInput=t,this.compare=n,this.isStatic=r,this.id=ve++,this.default=e([]),this.extensions=typeof i==`function`?i(this):i}get reader(){return this}static define(t={}){return new e(t.combine||(e=>e),t.compareInput||((e,t)=>e===t),t.compare||(t.combine?(e,t)=>e===t:ye),!!t.static,t.enables)}of(e){return new be([],this,0,e)}compute(e,t){if(this.isStatic)throw Error(`Can't compute a static facet`);return new be(e,this,1,t)}computeN(e,t){if(this.isStatic)throw Error(`Can't compute a static facet`);return new be(e,this,2,t)}from(e,t){return t||=e=>e,this.compute([e],n=>t(n.field(e)))}};function ye(e,t){return e==t||e.length==t.length&&e.every((e,n)=>e===t[n])}var be=class{constructor(e,t,n,r){this.dependencies=e,this.facet=t,this.type=n,this.value=r,this.id=ve++}dynamicSlot(e){let t=this.value,n=this.facet.compareInput,r=this.id,i=e[r]>>1,a=this.type==2,o=!1,s=!1,c=[];for(let t of this.dependencies)t==`doc`?o=!0:t==`selection`?s=!0:(e[t.id]??1)&1||c.push(e[t.id]);return{create(e){return e.values[i]=t(e),1},update(e,r){if(o&&r.docChanged||s&&(r.docChanged||r.selection)||Se(e,c)){let r=t(e);if(a?!xe(r,e.values[i],n):!n(r,e.values[i]))return e.values[i]=r,1}return 0},reconfigure:(e,o)=>{let s,c=o.config.address[r];if(c!=null){let r=Fe(o,c);if(this.dependencies.every(t=>t instanceof A?o.facet(t)===e.facet(t):t instanceof Te?o.field(t,!1)==e.field(t,!1):!0)||(a?xe(s=t(e),r,n):n(s=t(e),r)))return e.values[i]=r,0}else s=t(e);return e.values[i]=s,1}}}get extension(){return this}};function xe(e,t,n){if(e.length!=t.length)return!1;for(let r=0;r<e.length;r++)if(!n(e[r],t[r]))return!1;return!0}function Se(e,t){let n=!1;for(let r of t)Pe(e,r)&1&&(n=!0);return n}function Ce(e,t,n){let r=n.map(t=>e[t.id]),i=n.map(e=>e.type),a=r.filter(e=>!(e&1)),o=e[t.id]>>1;function s(e){let n=[];for(let t=0;t<r.length;t++){let a=Fe(e,r[t]);if(i[t]==2)for(let e of a)n.push(e);else n.push(a)}return t.combine(n)}return{create(e){for(let t of r)Pe(e,t);return e.values[o]=s(e),1},update(e,n){if(!Se(e,a))return 0;let r=s(e);return t.compare(r,e.values[o])?0:(e.values[o]=r,1)},reconfigure(e,i){let a=Se(e,r),c=i.config.facets[t.id],l=i.facet(t);if(c&&!a&&ye(n,c))return e.values[o]=l,0;let u=s(e);return t.compare(u,l)?(e.values[o]=l,0):(e.values[o]=u,1)}}}var we=A.define({static:!0}),Te=class e{constructor(e,t,n,r,i){this.id=e,this.createF=t,this.updateF=n,this.compareF=r,this.spec=i,this.provides=void 0}static define(t){let n=new e(ve++,t.create,t.update,t.compare||((e,t)=>e===t),t);return t.provide&&(n.provides=t.provide(n)),n}create(e){return(e.facet(we).find(e=>e.field==this)?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:e=>(e.values[t]=this.create(e),1),update:(e,n)=>{let r=e.values[t],i=this.updateF(r,n);return this.compareF(r,i)?0:(e.values[t]=i,1)},reconfigure:(e,n)=>{let r=e.facet(we),i=n.facet(we),a;return(a=r.find(e=>e.field==this))&&a!=i.find(e=>e.field==this)?(e.values[t]=a.create(e),1):n.config.address[this.id]==null?(e.values[t]=this.create(e),1):(e.values[t]=n.field(this),0)}}}init(e){return[this,we.of({field:this,create:e})]}get extension(){return this}},Ee={lowest:4,low:3,default:2,high:1,highest:0};function De(e){return t=>new ke(t,e)}var Oe={highest:De(Ee.highest),high:De(Ee.high),default:De(Ee.default),low:De(Ee.low),lowest:De(Ee.lowest)},ke=class{constructor(e,t){this.inner=e,this.prec=t}get extension(){return this}},Ae=class e{of(e){return new je(this,e)}reconfigure(t){return e.reconfigure.of({compartment:this,extension:t})}get(e){return e.config.compartments.get(this)}},je=class{constructor(e,t){this.compartment=e,this.inner=t}get extension(){return this}},Me=class e{constructor(e,t,n,r,i,a){for(this.base=e,this.compartments=t,this.dynamicSlots=n,this.address=r,this.staticValues=i,this.facets=a,this.statusTemplate=[];this.statusTemplate.length<n.length;)this.statusTemplate.push(0)}staticFacet(e){let t=this.address[e.id];return t==null?e.default:this.staticValues[t>>1]}static resolve(t,n,r){let i=[],a=Object.create(null),o=new Map;for(let e of Ne(t,n,o))e instanceof Te?i.push(e):(a[e.facet.id]||(a[e.facet.id]=[])).push(e);let s=Object.create(null),c=[],l=[];for(let e of i)s[e.id]=l.length<<1,l.push(t=>e.slot(t));let u=r?.config.facets;for(let e in a){let t=a[e],n=t[0].facet,i=u&&u[e]||[];if(t.every(e=>e.type==0)){if(s[n.id]=c.length<<1|1,ye(i,t))c.push(r.facet(n));else{let e=n.combine(t.map(e=>e.value));c.push(r&&n.compare(e,r.facet(n))?r.facet(n):e)}}else{for(let e of t)e.type==0?(s[e.id]=c.length<<1|1,c.push(e.value)):(s[e.id]=l.length<<1,l.push(t=>e.dynamicSlot(t)));s[n.id]=l.length<<1,l.push(e=>Ce(e,n,t))}}let d=l.map(e=>e(s));return new e(t,o,d,s,c,a)}};function Ne(e,t,n){let r=[[],[],[],[],[]],i=new Map;function a(e,o){let s=i.get(e);if(s!=null){if(s<=o)return;let t=r[s].indexOf(e);t>-1&&r[s].splice(t,1),e instanceof je&&n.delete(e.compartment)}if(i.set(e,o),Array.isArray(e))for(let t of e)a(t,o);else if(e instanceof je){if(n.has(e.compartment))throw RangeError(`Duplicate use of compartment in extensions`);let r=t.get(e.compartment)||e.inner;n.set(e.compartment,r),a(r,o)}else if(e instanceof ke)a(e.inner,e.prec);else if(e instanceof Te)r[o].push(e),e.provides&&a(e.provides,o);else if(e instanceof be)r[o].push(e),e.facet.extensions&&a(e.facet.extensions,Ee.default);else{let t=e.extension;if(!t)throw Error(`Unrecognized extension value in extension set (${e}).`);if(t==e)throw Error(`Unrecognized extension value in extension set (${e}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);a(t,o)}}return a(e,Ee.default),r.reduce((e,t)=>e.concat(t))}function Pe(e,t){if(t&1)return 2;let n=t>>1,r=e.status[n];if(r==4)throw Error(`Cyclic dependency between fields and/or facets`);if(r&2)return r;e.status[n]=4;let i=e.computeSlot(e,e.config.dynamicSlots[n]);return e.status[n]=2|i}function Fe(e,t){return t&1?e.config.staticValues[t>>1]:e.values[t>>1]}var Ie=A.define(),Le=A.define({combine:e=>e.some(e=>e),static:!0}),Re=A.define({combine:e=>e.length?e[0]:void 0,static:!0}),ze=A.define(),Be=A.define(),Ve=A.define(),He=A.define({combine:e=>e.length?e[0]:!1}),Ue=class{constructor(e,t){this.type=e,this.value=t}static define(){return new We}},We=class{of(e){return new Ue(this,e)}},Ge=class{constructor(e){this.map=e}of(e){return new j(this,e)}},j=class e{constructor(e,t){this.type=e,this.value=t}map(t){let n=this.type.map(this.value,t);return n===void 0?void 0:n==this.value?this:new e(this.type,n)}is(e){return this.type==e}static define(e={}){return new Ge(e.map||(e=>e))}static mapEffects(e,t){if(!e.length)return e;let n=[];for(let r of e){let e=r.map(t);e&&n.push(e)}return n}};j.reconfigure=j.define(),j.appendConfig=j.define();var Ke=class e{constructor(t,n,r,i,a,o){this.startState=t,this.changes=n,this.selection=r,this.effects=i,this.annotations=a,this.scrollIntoView=o,this._doc=null,this._state=null,r&&_e(r,n.newLength),a.some(t=>t.type==e.time)||(this.annotations=a.concat(e.time.of(Date.now())))}static create(t,n,r,i,a,o){return new e(t,n,r,i,a,o)}get newDoc(){return this._doc||=this.changes.apply(this.startState.doc)}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(t){let n=this.annotation(e.userEvent);return!!(n&&(n==t||n.length>t.length&&n.slice(0,t.length)==t&&n[t.length]==`.`))}};Ke.time=Ue.define(),Ke.userEvent=Ue.define(),Ke.addToHistory=Ue.define(),Ke.remote=Ue.define();function qe(e,t){let n=[];for(let r=0,i=0;;){let a,o;if(r<e.length&&(i==t.length||t[i]>=e[r]))a=e[r++],o=e[r++];else if(i<t.length)a=t[i++],o=t[i++];else return n;!n.length||n[n.length-1]<a?n.push(a,o):n[n.length-1]<o&&(n[n.length-1]=o)}}function Je(e,t,n){let r,i,a;return n?(r=t.changes,i=E.empty(t.changes.length),a=e.changes.compose(t.changes)):(r=t.changes.map(e.changes),i=e.changes.mapDesc(t.changes,!0),a=e.changes.compose(r)),{changes:a,selection:t.selection?t.selection.map(i):e.selection?.map(r),effects:j.mapEffects(e.effects,r).concat(j.mapEffects(t.effects,i)),annotations:e.annotations.length?e.annotations.concat(t.annotations):t.annotations,scrollIntoView:e.scrollIntoView||t.scrollIntoView}}function Ye(e,t,n){let r=t.selection,i=et(t.annotations);return t.userEvent&&(i=i.concat(Ke.userEvent.of(t.userEvent))),{changes:t.changes instanceof E?t.changes:E.of(t.changes||[],n,e.facet(Re)),selection:r&&(r instanceof k?r:k.single(r.anchor,r.head)),effects:et(t.effects),annotations:i,scrollIntoView:!!t.scrollIntoView}}function Xe(e,t,n){let r=Ye(e,t.length?t[0]:{},e.doc.length);t.length&&t[0].filter===!1&&(n=!1);for(let i=1;i<t.length;i++){t[i].filter===!1&&(n=!1);let a=!!t[i].sequential;r=Je(r,Ye(e,t[i],a?r.changes.newLength:e.doc.length),a)}let i=Ke.create(e,r.changes,r.selection,r.effects,r.annotations,r.scrollIntoView);return Qe(n?Ze(i):i)}function Ze(e){let t=e.startState,n=!0;for(let r of t.facet(ze)){let t=r(e);if(t===!1){n=!1;break}Array.isArray(t)&&(n=n===!0?t:qe(n,t))}if(n!==!0){let r,i;if(n===!1)i=e.changes.invertedDesc,r=E.empty(t.doc.length);else{let t=e.changes.filter(n);r=t.changes,i=t.filtered.mapDesc(t.changes).invertedDesc}e=Ke.create(t,r,e.selection&&e.selection.map(i),j.mapEffects(e.effects,i),e.annotations,e.scrollIntoView)}let r=t.facet(Be);for(let n=r.length-1;n>=0;n--){let i=r[n](e);e=i instanceof Ke?i:Array.isArray(i)&&i.length==1&&i[0]instanceof Ke?i[0]:Xe(t,et(i),!1)}return e}function Qe(e){let t=e.startState,n=t.facet(Ve),r=e;for(let i=n.length-1;i>=0;i--){let a=n[i](e);a&&Object.keys(a).length&&(r=Je(r,Ye(t,a,e.changes.newLength),!0))}return r==e?e:Ke.create(t,e.changes,e.selection,r.effects,r.annotations,r.scrollIntoView)}var $e=[];function et(e){return e==null?$e:Array.isArray(e)?e:[e]}var M=(function(e){return e[e.Word=0]=`Word`,e[e.Space=1]=`Space`,e[e.Other=2]=`Other`,e})(M||={}),tt=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,nt;try{nt=RegExp(`[\\p{Alphabetic}\\p{Number}_]`,`u`)}catch{}function rt(e){if(nt)return nt.test(e);for(let t=0;t<e.length;t++){let n=e[t];if(/\w/.test(n)||n>``&&(n.toUpperCase()!=n.toLowerCase()||tt.test(n)))return!0}return!1}function it(e){return t=>{if(!/\S/.test(t))return M.Space;if(rt(t))return M.Word;for(let n=0;n<e.length;n++)if(t.indexOf(e[n])>-1)return M.Word;return M.Other}}var N=class e{constructor(e,t,n,r,i,a){this.config=e,this.doc=t,this.selection=n,this.values=r,this.status=e.statusTemplate.slice(),this.computeSlot=i,a&&(a._state=this);for(let e=0;e<this.config.dynamicSlots.length;e++)Pe(this,e<<1);this.computeSlot=null}field(e,t=!0){let n=this.config.address[e.id];if(n==null){if(t)throw RangeError(`Field is not present in this state`)}else return Pe(this,n),Fe(this,n)}update(...e){return Xe(this,e,!0)}applyTransaction(t){let n=this.config,{base:r,compartments:i}=n;for(let e of t.effects)e.is(Ae.reconfigure)?(n&&=(i=new Map,n.compartments.forEach((e,t)=>i.set(t,e)),null),i.set(e.value.compartment,e.value.extension)):e.is(j.reconfigure)?(n=null,r=e.value):e.is(j.appendConfig)&&(n=null,r=et(r).concat(e.value));let a;n?a=t.startState.values.slice():(n=Me.resolve(r,i,this),a=new e(n,this.doc,this.selection,n.dynamicSlots.map(()=>null),(e,t)=>t.reconfigure(e,this),null).values);let o=t.startState.facet(Le)?t.newSelection:t.newSelection.asSingle();new e(n,t.newDoc,o,a,(e,n)=>n.update(e,t),t)}replaceSelection(e){return typeof e==`string`&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:k.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,n=e(t.ranges[0]),r=this.changes(n.changes),i=[n.range],a=et(n.effects);for(let n=1;n<t.ranges.length;n++){let o=e(t.ranges[n]),s=this.changes(o.changes),c=s.map(r);for(let e=0;e<n;e++)i[e]=i[e].map(c);let l=r.mapDesc(s,!0);i.push(o.range.map(l)),r=r.compose(c),a=j.mapEffects(a,c).concat(j.mapEffects(et(o.effects),l))}return{changes:r,selection:k.create(i,t.mainIndex),effects:a}}changes(t=[]){return t instanceof E?t:E.of(t,this.doc.length,this.facet(e.lineSeparator))}toText(t){return v.of(t.split(this.facet(e.lineSeparator)||ue))}sliceDoc(e=0,t=this.doc.length){return this.doc.sliceString(e,t,this.lineBreak)}facet(e){let t=this.config.address[e.id];return t==null?e.default:(Pe(this,t),Fe(this,t))}toJSON(e){let t={doc:this.sliceDoc(),selection:this.selection.toJSON()};if(e)for(let n in e){let r=e[n];r instanceof Te&&this.config.address[r.id]!=null&&(t[n]=r.spec.toJSON(this.field(e[n]),this))}return t}static fromJSON(t,n={},r){if(!t||typeof t.doc!=`string`)throw RangeError(`Invalid JSON representation for EditorState`);let i=[];if(r){for(let e in r)if(Object.prototype.hasOwnProperty.call(t,e)){let n=r[e],a=t[e];i.push(n.init(e=>n.spec.fromJSON(a,e)))}}return e.create({doc:t.doc,selection:k.fromJSON(t.selection),extensions:n.extensions?i.concat([n.extensions]):i})}static create(t={}){let n=Me.resolve(t.extensions||[],new Map),r=t.doc instanceof v?t.doc:v.of((t.doc||``).split(n.staticFacet(e.lineSeparator)||ue)),i=t.selection?t.selection instanceof k?t.selection:k.single(t.selection.anchor,t.selection.head):k.single(0);return _e(i,r.length),n.staticFacet(Le)||(i=i.asSingle()),new e(n,r,i,n.dynamicSlots.map(()=>null),(e,t)=>t.create(e),null)}get tabSize(){return this.facet(e.tabSize)}get lineBreak(){return this.facet(e.lineSeparator)||`
|