dsh-claude-design 2.11.0 → 2.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +1 -1
- package/package.json +14 -14
- package/skills/claude-design/SKILL.md +3 -3
- package/skills/claude-design/artifact-type/reference/craft.md +8 -6
- package/skills/claude-design/scripts/artifact.mjs +5 -3
- package/skills/claude-design/scripts/editor/artifact-type/fast-edit-worker.js +33 -62
- package/skills/claude-design/scripts/editor/assets/index-B-Upphbb.css +1 -0
- package/skills/claude-design/scripts/editor/assets/{index-CUg1EZUh.js → index-BCan_JNh.js} +1892 -529
- package/skills/claude-design/scripts/editor/index.html +3 -3
- package/skills/claude-design/scripts/editor/share-ui.js +10 -10
- package/skills/claude-design/scripts/server.mjs +65 -5
- package/skills/claude-design/scripts/editor/assets/index-tSD8GYWj.css +0 -1
package/lib/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// dsh-claude-design 2.
|
|
1
|
+
// dsh-claude-design 2.12.0: built from baoyu-design.
|
|
2
2
|
var define_PLUGIN_default = { name: "claude-design", provider: "dsh-claude-design", skills: [{ name: "claude-design", description: "Make and revise designs in the Design (canvas) artifact format (project/canvas.json plus one .dc.html Design Component file per artboard) as local files, then open them in a local canvas editor where the user can view the artboards side by side, retype copy and adjust tweaks. Use when the user asks for an editable canvas of artboards in this format, names claude-design or the Design (canvas) type, or wants to revise a folder that holds project/canvas.json. Not for a one-off HTML prototype or a design exploration outside this format.", comments: true }] };
|
|
3
3
|
|
|
4
4
|
import { readFile } from "node:fs/promises";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-claude-design",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.12.0",
|
|
4
4
|
"description": "DeepSeek Harness plugin: the claude-design skill from baoyu-design. The agent writes canvases of artboards as files and opens them in a local canvas editor.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dsh",
|
|
@@ -24,6 +24,18 @@
|
|
|
24
24
|
"icon": "./icon.svg",
|
|
25
25
|
"baoyuDesign": {
|
|
26
26
|
"releaseNotes": [
|
|
27
|
+
{
|
|
28
|
+
"version": "2.12.0",
|
|
29
|
+
"date": "2026-11-06",
|
|
30
|
+
"en": "### Features\n- **Comments, in every editor, follow claude.ai's comment layer more closely.** A thread whose pin is out of the window gets a **More comments** tab with its count at that edge instead of a pin, and a click opens the nearest one. Pins on the same spot sit side by side. The **All comments** panel has **Send all to Agent**, which gives the agent every thread at once (`comments --wait` returns them together). An edited message says **edited**, a resolved thread says **Reply to reopen…**, and the panel has an empty state and, when the filter hides everything, **Show N resolved**.\n- **`claude-slides`, `claude-design`, `claude-design-system`, `claude-dashboard` and `claude-motion` follow claude.ai's 2026-11-05 update.** In all five: a button shows that it is working while its action runs, a dialog gives focus back to where it was, toasts can be reached from the keyboard, tabs have an underline style, and the icon set has 34 more icons. Properties can be copied and pasted in slides, design and the dashboard's edit mode.\n- `claude-slides`: speaker notes can be edited in the Canvas view, and the presentation has jump keys (Home, End).\n- `claude-design`: grid cells can be dragged and moved with the keyboard, and a tall artboard's PDF export is split across pages.\n- `claude-design-system`: a system holds up to 4,096 files a version, 4,080 of them its own (1,024 before), and `agent.md` and `gemini.md` are refused as file names, like `claude.md` and `agents.md`.\n- `claude-dashboard`: an attached file can be up to 15 MiB, a document written by the agent carries an `edit` stamp the page reads, and `check` knows the new rules for `dash/look`.\n- `claude-motion`: `check` warns about a module named `scene-…` or `layer-…`, which are the player's own names.\n\n### Documentation\n- Every editor's `SKILL.md` and reference follow the same update. `claude-slides` and `claude-design` choose typefaces from the brief and the subject, Inter with Space Grotesk when it is neutral. `claude-dashboard` has new looks and questions pages and reworked pages on data sources, features, design systems and reading aloud.\n- `claude-motion` is reworked: a new film is asked about before anything is made, a film left half-way is taken up again on a later turn instead of started over, a named design system is read before the first scene, and a few kinds of film are refused (for or against a political party, candidate or ballot measure; a promo for gambling or a crypto coin, token or exchange; a fight or combat scene). New reference pages cover each.",
|
|
31
|
+
"zh": "### 新功能\n- **所有编辑器的评论层更接近 claude.ai 的评论层。** 图钉不在窗口里的评论,不再画图钉,改成在那一侧边缘贴一个带数量的 **More comments** 标签,点一下就打开离得最近的一条。同一个位置的图钉并排排开。**All comments** 面板里有 **Send all to Agent**,一次把所有评论串发给 Agent(`comments --wait` 一起返回)。改过的消息会标 **edited**,已解决的评论串显示 **Reply to reopen…**,面板有了空状态;筛选把评论全藏起来时,显示 **Show N resolved**。\n- **`claude-slides`、`claude-design`、`claude-design-system`、`claude-dashboard` 和 `claude-motion` 跟上了 claude.ai 2026-11-05 的更新。** 五个编辑器都有:按钮在操作进行时显示忙的状态,对话框关闭后把焦点还给原来的位置,提示条可以用键盘切过去,标签页多了下划线样式,图标多了 34 个。幻灯片、设计稿和仪表盘的编辑模式里可以复制、粘贴属性。\n- `claude-slides`:演讲者备注可以在 Canvas 视图里直接编辑,演示时多了跳转键(Home、End)。\n- `claude-design`:网格的单元格可以拖动,也可以用键盘移动;很高的画板导出 PDF 时拆成多页。\n- `claude-design-system`:一个设计系统每个版本最多 4,096 个文件,其中自己的 4,080 个(以前是 1,024);`agent.md` 和 `gemini.md` 和 `claude.md`、`agents.md` 一样,不能用作文件名。\n- `claude-dashboard`:附件最大 15 MiB;Agent 写的文档带 `edit` 戳,页面会读它;`check` 认识 `dash/look` 的新规则。\n- `claude-motion`:`check` 对名字以 `scene-` 或 `layer-` 开头的模块给出警告,这两类是播放器自己的名字。\n\n### 文档\n- 每个编辑器的 `SKILL.md` 和 reference 都跟着这次更新。`claude-slides` 和 `claude-design` 按需求和主题选字体,中性的就用 Inter 搭 Space Grotesk。`claude-dashboard` 新增了 looks 和 questions 两页,数据来源、功能、设计系统和朗读几页重写了。\n- `claude-motion` 重写:新片先问再做,做到一半的影片下一轮会接着做,不重来;指定了设计系统,先读它再画第一场;还有几类片子不做(支持或反对某个政党、公职候选人或公投议案;赌博、加密币、代币或交易所的宣传片;打斗或战斗场面)。各有新的 reference 页。"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"version": "2.11.1",
|
|
35
|
+
"date": "2026-11-05",
|
|
36
|
+
"en": "### Features\n- **DeepSeek Harness: the Artifacts page offers the plugins you haven't installed.** Beside the tiles for the skills you have, each other baoyu-design plugin gets a dimmed tile marked **Not installed**. Click it to see what the plugin makes and install it from there, at the same version as the ones you have, usually without a restart. Once it's in, **Start** opens a session with the skill. In an app that can't install from the page, the tile points you to the Plugins page. A plugin you installed and switched off still gets no tile.\n\n### Fixes\n- With `--agent-hook`, a comment could reach the agent twice: a second send could start the hook again after the first run had finished but before the comment was marked sent.",
|
|
37
|
+
"zh": "### 新功能\n- **DeepSeek Harness:「作品」页会列出你还没装的插件。** 已装技能的入口旁边,其他 baoyu-design 插件也各有一个入口,颜色淡一些,标着 **未安装**。点开会说明这个插件做什么,可以直接在这里安装,版本和你已装的一致,多数情况不用重启。装好后点 **新建** 就用这个技能开一个会话。应用不支持在页面里安装时,会引导你去插件页。装了但被你关掉的插件,仍然没有入口。\n\n### 修复\n- 用 `--agent-hook` 时,一条评论可能发给 agent 两次:第一次运行已经结束、评论还没标成已发送时,第二次发送会再启动一次 hook。"
|
|
38
|
+
},
|
|
27
39
|
{
|
|
28
40
|
"version": "2.11.0",
|
|
29
41
|
"date": "2026-11-05",
|
|
@@ -59,18 +71,6 @@
|
|
|
59
71
|
"date": "2026-11-03",
|
|
60
72
|
"en": "### Features\n- **ChatGPT plugins.** The skills now also come as plugins for the ChatGPT desktop app and Codex: Baoyu Slides, Baoyu Canvas, Baoyu Design System, Baoyu Dashboard, Baoyu Motion (with `motion-director` and `dataviz`) and Baoyu Dataviz. This repository is their marketplace: run `codex plugin marketplace add JimLiu/baoyu-design --sparse .agents/plugins --sparse chatgpt-plugins`, then install the ones you want. [chatgpt-plugins/README.md](chatgpt-plugins/README.md) has the steps.\n- DeepSeek Harness: each deck, canvas, design system, dashboard and film on the **Artifacts** page now has a real thumbnail, taken from its own editor and retaken when its files change. This needs the desktop app; in `dsh web` a card keeps a drawn picture of its type.\n- The **Artifacts** page's tiles and **+** menu start a new session with the input filled in, such as `/claude-slides Make me a slide deck about: `, and sending it loads that skill. Only plugins that are on get a tile.\n- The **Artifacts** page has grid and list views, search, sorting (last opened, last edited, date created, name) and filters (type, date opened, sharing, pinned).\n- Each card on the **Artifacts** page has a menu to pin, rename, copy the link or delete. Rename changes the title in the artifact itself, so its editor shows the new name. Delete moves the folder to `baoyu-design/trash/` in the app's data folder, with an Undo; a folder that also holds other files stays where it is and only leaves the list.\n\n### Fixes\n- In a sandbox that blocks local network, such as Codex's default one, `open` said `PORT_IN_USE`, as if every port were taken. It now says `NETWORK_BLOCKED` and how to run the command, and the skills say which commands need local network.",
|
|
61
73
|
"zh": "### 新功能\n- **ChatGPT 插件。** 这些技能也做成了 ChatGPT 桌面版和 Codex 的插件:Baoyu Slides、Baoyu Canvas、Baoyu Design System、Baoyu Dashboard、Baoyu Motion(带 `motion-director` 和 `dataviz`)和 Baoyu Dataviz。本仓库就是它们的 marketplace:运行 `codex plugin marketplace add JimLiu/baoyu-design --sparse .agents/plugins --sparse chatgpt-plugins`,再装你要的插件。步骤见 [chatgpt-plugins/README.zh-CN.md](chatgpt-plugins/README.zh-CN.md)。\n- DeepSeek Harness:**Artifacts** 页(中文界面是「作品」)上的幻灯片、画布、设计系统、仪表盘和影片现在都有真实的缩略图,从各自的编辑器里截取,文件改过后会重新截。这要在桌面版里;`dsh web` 的卡片仍然是画出来的类型示意图。\n- 作品页顶部的入口和 **+** 菜单会新开一个会话,并填好输入框,比如 `/claude-slides 帮我做一份幻灯片,主题是:`,发送时会加载对应的技能。只有开着的插件才有入口。\n- 作品页可以切换网格和列表,可以搜索、排序(最近打开、最近修改、创建时间、名称)和筛选(类型、打开时间、共享、已固定)。\n- 作品页的每张卡片都有菜单,可以固定、重命名、复制链接和删除。重命名改的是作品本身的标题,编辑器里也会显示新名字。删除会把文件夹移到应用数据目录的 `baoyu-design/trash/`,可以撤销;文件夹里还有别的文件时,文件夹留在原处,只从列表移除。\n\n### 修复\n- 在不允许访问本机网络的沙箱里(比如 Codex 的默认沙箱),`open` 会报 `PORT_IN_USE`,好像所有端口都被占了。现在它报 `NETWORK_BLOCKED`,并说明该怎么运行;技能说明里也写了哪些命令要访问本机网络。"
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
"version": "2.8.2",
|
|
65
|
-
"date": "2026-11-02",
|
|
66
|
-
"en": "### Fixes\n- `claude-slides`: in a PowerPoint export, Chinese, Japanese or Korean text could show as boxes when its East Asian font was missing on the reader's computer or held none of those characters: Arial in the basic-fonts export, a Latin family, or an embedded subset that left characters out of a long deck. That text now names a font Windows and Office have instead (Microsoft YaHei, Microsoft JhengHei, Yu Gothic or Malgun Gothic). Text the embedded font holds, text without these characters and the Google Slides export are unchanged ([#29](https://github.com/JimLiu/baoyu-design/issues/29)).",
|
|
67
|
-
"zh": "### 修复\n- `claude-slides`:导出 PowerPoint 时,如果中日韩文字用的东亚字体在对方电脑上没有,或者这个字体本身不含这些字(basic 字体导出里的 Arial、拉丁字体、长 deck 里漏了字的内嵌子集),文字可能显示成方块。这类文字现在改用 Windows 和 Office 常见的字体(Microsoft YaHei、Microsoft JhengHei、Yu Gothic 或 Malgun Gothic)。内嵌字体装得下的文字、不含这些字的文字和 Google Slides 导出都不变([#29](https://github.com/JimLiu/baoyu-design/issues/29))。"
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
"version": "2.8.1",
|
|
71
|
-
"date": "2026-11-02",
|
|
72
|
-
"en": "### Fixes\n- `claude-slides`, `claude-design`, `claude-design-system`, `claude-dashboard`: their descriptions no longer send one-off HTML work to the `baoyu-design` skill, which is archived and no longer installed. They now only say what each skill is not for. The DeepSeek Harness plugins carry the same descriptions.",
|
|
73
|
-
"zh": "### 修复\n- `claude-slides`、`claude-design`、`claude-design-system`、`claude-dashboard`:说明里不再把一次性的 HTML 产出交给 `baoyu-design` 技能。这个技能已经归档,不再随仓库安装。现在只写各技能不适用于什么。DeepSeek Harness 插件里的说明也一样。"
|
|
74
74
|
}
|
|
75
75
|
]
|
|
76
76
|
},
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"dsh": ">=0.2.0-0"
|
|
97
97
|
},
|
|
98
98
|
"dependencies": {
|
|
99
|
-
"dsh-claude-artifacts": "^2.
|
|
99
|
+
"dsh-claude-artifacts": "^2.12.0"
|
|
100
100
|
},
|
|
101
101
|
"dsh": {
|
|
102
102
|
"bundle": {
|
|
@@ -143,9 +143,9 @@ The reference pages address the appifacts-design skill's files; their FORMAT rul
|
|
|
143
143
|
|
|
144
144
|
## Designing well (full: `artifact-type/reference/craft.md`)
|
|
145
145
|
|
|
146
|
-
- No filler, invented stats or lorem ipsum; missing facts become
|
|
147
|
-
- Rationale and
|
|
148
|
-
- No design system?
|
|
146
|
+
- No filler, invented stats or lorem ipsum; missing facts become [YOUR PRICE] placeholders.
|
|
147
|
+
- Rationale and options go in your reply, not an artboard; design levers are `data-props` tweaks, never widgets.
|
|
148
|
+
- No design system? Make one: type from the subject; if neutral, Inter, Space Grotesk headings in Latin script; a ground, 0–2 accents of like chroma/lightness. Cream, serif display and clay are your habit: only if the brief or brand asks. Branded Anthropic work: Ivory #FAF9F5, Slate #141413, Clay #D97757, serif display over sans body (stacks: `brand-colors.md`, `brand-typography.md`).
|
|
149
149
|
- No AI tropes (gradient washes, left-border cards, emoji). Touch targets ≥44px; print body ≥12pt; no fake status bars; PAGEs work at phone width. Over-tall beats clipped (a PAGE's phone version excepted: it is a phone screen). Recreations are exact only from real source; no other company's proprietary design.
|
|
150
150
|
- Accessible as drawn: real `<button>`, `<a href>`, `<input>` + `<label>` even in a static mockup; never `role`/`onClick` on a div or span (Tab skips it); `aria-label` on icon-only buttons; SVG: decor `aria-hidden="true"`, else `role="img" aria-label`. Text 4.5:1, even 11px grey labels (3:1 at 24px+); 4.3:1 still fails: pick shades that pass. Colors that must be told apart also differ in lightness, not hue alone; prefer blue/orange to red/green.
|
|
151
151
|
|
|
@@ -24,7 +24,10 @@ subject, asset or brand IS input; with nobody to ask, commit to one
|
|
|
24
24
|
nameable direction and say so rather than ending on a question. Once
|
|
25
25
|
settled, a decision stays settled. Then commit to a small system:
|
|
26
26
|
|
|
27
|
-
- A type pairing:
|
|
27
|
+
- A type pairing: for new work in Latin script with no brand or design
|
|
28
|
+
system, type from the brief and subject; if neutral (apps, data), Inter for text and Space Grotesk for headings. Work added to an existing design keeps
|
|
29
|
+
its faces.
|
|
30
|
+
Google Fonts load in the artifact (one
|
|
28
31
|
`fonts.googleapis.com/css2?family=…&display=swap` `<link>` in
|
|
29
32
|
`<helmet>`; no other webfont host does); 1–3 families, each with a
|
|
30
33
|
system fallback of close metrics (shown while the font loads and
|
|
@@ -54,9 +57,8 @@ direction before building:
|
|
|
54
57
|
Bold maximalism and refined minimalism both work — the key is
|
|
55
58
|
intentionality, not intensity. Then execute with precision:
|
|
56
59
|
|
|
57
|
-
- **Typography**:
|
|
58
|
-
|
|
59
|
-
distinctive display font with a refined body font.
|
|
60
|
+
- **Typography**: the default pairing above, unless the brief calls
|
|
61
|
+
for other faces.
|
|
60
62
|
- **Color & theme**: commit to a cohesive aesthetic. Dominant colors
|
|
61
63
|
with sharp accents outperform timid, evenly-distributed palettes.
|
|
62
64
|
- **Motion**: where a design carries animation (CSS in the artboard),
|
|
@@ -70,8 +72,8 @@ intentionality, not intensity. Then execute with precision:
|
|
|
70
72
|
geometric patterns, layered transparencies, dramatic shadows,
|
|
71
73
|
decorative borders, grain overlays.
|
|
72
74
|
|
|
73
|
-
Vary between light and dark themes
|
|
74
|
-
|
|
75
|
+
Vary between light and dark themes and different aesthetics — NEVER
|
|
76
|
+
converge on the same look across generations.
|
|
75
77
|
And match implementation complexity to the aesthetic vision:
|
|
76
78
|
maximalist designs need elaborate effects; minimalist designs need
|
|
77
79
|
restraint, precision, and careful attention to spacing and subtle
|
|
@@ -1226,8 +1226,8 @@ import path7 from "node:path";
|
|
|
1226
1226
|
var DESIGN_SYSTEM_FILE = "design-system.json";
|
|
1227
1227
|
var BLOBS_DIR = "_blobs";
|
|
1228
1228
|
var DESIGN_SYSTEM_LIMITS = {
|
|
1229
|
-
files:
|
|
1230
|
-
ownFiles:
|
|
1229
|
+
files: 4096,
|
|
1230
|
+
ownFiles: 4080,
|
|
1231
1231
|
totalBytes: 256 * 1024 * 1024,
|
|
1232
1232
|
fileBytes: 15 * 1024 * 1024,
|
|
1233
1233
|
publishBytes: 16 * 1024 * 1024,
|
|
@@ -1273,7 +1273,9 @@ var REFUSED_TOOL_FILENAMES = /* @__PURE__ */ new Set([
|
|
|
1273
1273
|
"deno.jsonc",
|
|
1274
1274
|
"claude.md",
|
|
1275
1275
|
"claude.local.md",
|
|
1276
|
-
"agents.md"
|
|
1276
|
+
"agents.md",
|
|
1277
|
+
"agent.md",
|
|
1278
|
+
"gemini.md"
|
|
1277
1279
|
]);
|
|
1278
1280
|
var WINDOWS_SHORT_NAME_PATTERN = /~\d/;
|
|
1279
1281
|
var IMAGE_SLOT_STATE_FILENAME = ".image-slots.state.json";
|
|
@@ -17110,57 +17110,7 @@ Content-Type: ${value2.type || "application/octet-stream"}\r
|
|
|
17110
17110
|
};
|
|
17111
17111
|
|
|
17112
17112
|
// node_modules/happy-dom/lib/fetch/certificate/FetchHTTPSCertificate.js
|
|
17113
|
-
var FetchHTTPSCertificate_default = {
|
|
17114
|
-
cert: `-----BEGIN CERTIFICATE-----
|
|
17115
|
-
MIIDYzCCAkugAwIBAgIUJRKB/H66hpet1VfUlm0CiXqePA4wDQYJKoZIhvcNAQEL
|
|
17116
|
-
BQAwQTELMAkGA1UEBhMCU0UxDjAMBgNVBAgMBVNrYW5lMQ4wDAYDVQQHDAVNYWxt
|
|
17117
|
-
bzESMBAGA1UECgwJSGFwcHkgRE9NMB4XDTIyMTAxMTIyMDM0OVoXDTMyMTAwODIy
|
|
17118
|
-
MDM0OVowQTELMAkGA1UEBhMCU0UxDjAMBgNVBAgMBVNrYW5lMQ4wDAYDVQQHDAVN
|
|
17119
|
-
YWxtbzESMBAGA1UECgwJSGFwcHkgRE9NMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
|
17120
|
-
MIIBCgKCAQEAqerQSQEg/SxVxRiwlItithr5e5EMZo1nsqt/xOxagbmpW3IEmt0j
|
|
17121
|
-
bpbH7iEF4DDEo7KAOwUCOwVWeFxRoag8lG2ax48wrgjlCna45XDn0Xeg1ARajL04
|
|
17122
|
-
gs46HZ0VrzIloVGfln0zgt/Vum5BNqs9Oc5fQoBmoP3cAn3dn4ZVcP0AKthtcyPl
|
|
17123
|
-
q2DuNRN0PV0D2RtMSiAy9l1Ko6N5x+sAeClDyOL+sTDLngZBVeZyOKt9Id15S8Zt
|
|
17124
|
-
XtA6VMgHnnF3jChn7pag77rsd/y5iANAVNZYqRl+Eg7xaDcsvbgH46UBOrBcB39Q
|
|
17125
|
-
tTh5Mtjoxep5e3ZDFG+kQ1HUE+iz5O5n0wIDAQABo1MwUTAdBgNVHQ4EFgQU69s9
|
|
17126
|
-
YSobG/m2SN4L/7zTaF7iDbwwHwYDVR0jBBgwFoAU69s9YSobG/m2SN4L/7zTaF7i
|
|
17127
|
-
DbwwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAi/WUXx2oal8L
|
|
17128
|
-
YnPlIuKfh49n/K18wXSYG//oFYwxfVxqpYH8hUiXVm/GUcXCxS++hUkaKLqXmH9q
|
|
17129
|
-
MKJiCrZr3vS+2nsBKopkICu/TLdROl0sAI9lByfnEbfSAzjxe1IWJdK8NdY0y5m5
|
|
17130
|
-
9pEr/URVIAp/CxrneyASb4q0Jg5To3FR7vYc+2X6wZn0MundKMg6Dp9/A37jiF3l
|
|
17131
|
-
Tt/EJp299YZcsUzh+LnRuggRjnoOVu1aLcLFlaUiwZfy9m8mLG6B/mdW/qNzNMh9
|
|
17132
|
-
Oqvg1zfGdpz/4D/2UUUBn6pq1vbsoAaF3OesoA3mfDcegDf/H9woJlpT0Wql+e68
|
|
17133
|
-
Y3FblSokcA==
|
|
17134
|
-
-----END CERTIFICATE-----`,
|
|
17135
|
-
key: `-----BEGIN PRIVATE KEY-----
|
|
17136
|
-
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCp6tBJASD9LFXF
|
|
17137
|
-
GLCUi2K2Gvl7kQxmjWeyq3/E7FqBualbcgSa3SNulsfuIQXgMMSjsoA7BQI7BVZ4
|
|
17138
|
-
XFGhqDyUbZrHjzCuCOUKdrjlcOfRd6DUBFqMvTiCzjodnRWvMiWhUZ+WfTOC39W6
|
|
17139
|
-
bkE2qz05zl9CgGag/dwCfd2fhlVw/QAq2G1zI+WrYO41E3Q9XQPZG0xKIDL2XUqj
|
|
17140
|
-
o3nH6wB4KUPI4v6xMMueBkFV5nI4q30h3XlLxm1e0DpUyAeecXeMKGfulqDvuux3
|
|
17141
|
-
/LmIA0BU1lipGX4SDvFoNyy9uAfjpQE6sFwHf1C1OHky2OjF6nl7dkMUb6RDUdQT
|
|
17142
|
-
6LPk7mfTAgMBAAECggEAKkwTkTjAt4UjzK56tl+EMQTB+ep/hb/JgoaChci4Nva6
|
|
17143
|
-
m9LkJpDJ0yuhlTuPNOGu8XjrxsVWas7HWarRf0Zb3i7yip6wZYI9Ub+AA015x4DZ
|
|
17144
|
-
/i0fRU2NFbK0cM67qSL4jxG8gj+kZP3HPGNZxHwX/53JxMolwgmvjMc8NgvAlSFd
|
|
17145
|
-
NnV9h4xtbhUh1NGS5zmP3iU2rwnE8JrIEzwy6axLom7nekAgkdcbAr0UoBs8gcgH
|
|
17146
|
-
aYNhU4Gz3tGcZZ0IXAfT/bJIH1Ko8AGv4pssWc3BXcmmNdm/+kzvHIxEIV7Qegmo
|
|
17147
|
-
XG1ZyZCyD/0b4/3e8ySDBEDqwR+HeyTW2isWG2agAQKBgQDp44aTwr3dkIXY30xv
|
|
17148
|
-
FPfUOipg/B49dWnffYJ9MWc1FT9ijNPAngWSk0EIiEQIazICcUBI4Yji6/KeyqLJ
|
|
17149
|
-
GdLpDi1CkKqtyh73mjELinYp3EUQgEa77aQogGa2+nMOVfu+O5CtloUrv/A18jX3
|
|
17150
|
-
+VEyaEASK0fWmnSI0OdlxQHIAQKBgQC5+xOls2F3MlKASvWRLlnW1wHqlDTtVoYg
|
|
17151
|
-
5Nh8syZH4Ci2UH8tON3A5/7SWNM0t1cgV6Cw4zW8Z2spgIT/W0iYYrQ4hHL1xdCu
|
|
17152
|
-
+CxL1km4Gy8Uwpsd+KdFahFqF/XTmLzW0HXLxWSK0fTwmdV0SFrKF3MXfTCU2AeZ
|
|
17153
|
-
jJoMFb6P0wKBgQC3Odw6s0vkYAzLGhuZxfZkVvDOK5RRF0NKpttr0iEFL9EJFkPo
|
|
17154
|
-
2KKK8jr3QTDy229BBJGUxsJi6u6VwS8HlehpVQbV59kd7oKV/EBBx0XMg1fDlopT
|
|
17155
|
-
PNbmN7i/zbIG4AsoOyebJZjL7kBzMn1e9vzKHWtcEHXlw/hZGja8vjooAQKBgAeg
|
|
17156
|
-
xK2HLfg1mCyq5meN/yFQsENu0LzrT5UJzddPgcJw7zqLEqxIKNBAs7Ls8by3yFsL
|
|
17157
|
-
PQwERa/0jfCl1M6kb9XQNpQa2pw6ANUsWKTDpUJn2wZ+9N3F1RaDwzMWyH5lRVmK
|
|
17158
|
-
M0qoTfdjpSg5Jwgd75taWt4bxGJWeflSSv8z5R0BAoGAWL8c527AbeBvx2tOYKkD
|
|
17159
|
-
2TFranvANNcoMrbeviZSkkGvMNDP3p8b6juJwXOIeWNr8q4vFgCzLmq6d1/9gYm2
|
|
17160
|
-
3XJwwyD0LKlqzkBrrKU47qrnmMosUrIRlrAzd3HbShOptxc6Iz2apSaUDKGKXkaw
|
|
17161
|
-
gl5OpEjeliU7Mus0BVS858g=
|
|
17162
|
-
-----END PRIVATE KEY-----`
|
|
17163
|
-
};
|
|
17113
|
+
var FetchHTTPSCertificate_default = { cert: "", key: "" };
|
|
17164
17114
|
|
|
17165
17115
|
// node_modules/happy-dom/lib/fetch/utilities/VirtualServerUtility.js
|
|
17166
17116
|
var NOT_FOUND_HTML = "<html><head><title>Happy DOM Virtual Server - 404 Not Found</title></head><body><h1>Happy DOM Virtual Server - 404 Not Found</h1></body></html>";
|
|
@@ -69087,6 +69037,7 @@ this.Function = globalThis.Function;
|
|
|
69087
69037
|
let templateDepths;
|
|
69088
69038
|
let templateDollar;
|
|
69089
69039
|
let blockComment;
|
|
69040
|
+
let blockCommentJustOpened;
|
|
69090
69041
|
let regex;
|
|
69091
69042
|
let regexCharacterClass;
|
|
69092
69043
|
let escapedRegex;
|
|
@@ -69101,6 +69052,7 @@ this.Function = globalThis.Function;
|
|
|
69101
69052
|
let ended2;
|
|
69102
69053
|
let pendingChain;
|
|
69103
69054
|
let bufferOffset;
|
|
69055
|
+
let stopped;
|
|
69104
69056
|
function reset() {
|
|
69105
69057
|
buffer2 = "";
|
|
69106
69058
|
parenDepth = braceDepth = bracketDepth = 0;
|
|
@@ -69110,8 +69062,9 @@ this.Function = globalThis.Function;
|
|
|
69110
69062
|
statementStart = 0;
|
|
69111
69063
|
templateDepths = [];
|
|
69112
69064
|
templateDollar = false;
|
|
69113
|
-
blockComment = false;
|
|
69065
|
+
blockComment = blockCommentJustOpened = false;
|
|
69114
69066
|
regex = regexCharacterClass = escapedRegex = false;
|
|
69067
|
+
stopped = false;
|
|
69115
69068
|
pendingSlash = false;
|
|
69116
69069
|
lastSignificantChar = "";
|
|
69117
69070
|
arrowBodyPending = false;
|
|
@@ -69223,7 +69176,7 @@ this.Function = globalThis.Function;
|
|
|
69223
69176
|
return;
|
|
69224
69177
|
}
|
|
69225
69178
|
if (input === "*") {
|
|
69226
|
-
blockComment = true;
|
|
69179
|
+
blockComment = blockCommentJustOpened = true;
|
|
69227
69180
|
return;
|
|
69228
69181
|
}
|
|
69229
69182
|
if (lastSignificantChar === "" || "([{,;=!&|?:+-*%^~<>".indexOf(lastSignificantChar) >= 0 || regexAfterKeywords && REGEX_PREFIX_KEYWORDS.test(
|
|
@@ -69233,10 +69186,12 @@ this.Function = globalThis.Function;
|
|
|
69233
69186
|
else lastSignificantChar = "/";
|
|
69234
69187
|
}
|
|
69235
69188
|
if (blockComment) {
|
|
69236
|
-
if (input === "/" && buffer2[buffer2.length - 2] === "*") {
|
|
69189
|
+
if (input === "/" && buffer2[buffer2.length - 2] === "*" && !blockCommentJustOpened) {
|
|
69237
69190
|
if (blockComment = false, controlEnd >= 0 && atTopLevel())
|
|
69238
69191
|
continuationStart = buffer2.length;
|
|
69239
69192
|
}
|
|
69193
|
+
if (blockCommentJustOpened = false, input === "`" && buffer2.endsWith("```") && buffer2.slice(buffer2.lastIndexOf("\n") + 1, -3).trim() === "")
|
|
69194
|
+
stopped = true;
|
|
69240
69195
|
return;
|
|
69241
69196
|
}
|
|
69242
69197
|
if (lineComment) {
|
|
@@ -69252,7 +69207,7 @@ this.Function = globalThis.Function;
|
|
|
69252
69207
|
}
|
|
69253
69208
|
if (quote !== null) {
|
|
69254
69209
|
if (escapedString) {
|
|
69255
|
-
escapedString =
|
|
69210
|
+
escapedString = false;
|
|
69256
69211
|
templateDollar = false;
|
|
69257
69212
|
return;
|
|
69258
69213
|
}
|
|
@@ -69267,6 +69222,7 @@ this.Function = globalThis.Function;
|
|
|
69267
69222
|
templateDepths.push(braceDepth);
|
|
69268
69223
|
braceDepth++;
|
|
69269
69224
|
quote = null;
|
|
69225
|
+
lastSignificantChar = "{";
|
|
69270
69226
|
return;
|
|
69271
69227
|
}
|
|
69272
69228
|
templateDollar = input === "$";
|
|
@@ -69274,10 +69230,15 @@ this.Function = globalThis.Function;
|
|
|
69274
69230
|
if (input === quote) {
|
|
69275
69231
|
lastSignificantChar = input;
|
|
69276
69232
|
quote = null;
|
|
69233
|
+
stopped = input === "`" && buffer2.endsWith("```");
|
|
69277
69234
|
}
|
|
69278
69235
|
return;
|
|
69279
69236
|
}
|
|
69280
69237
|
if (regex) {
|
|
69238
|
+
if (input === "\n" || input === "\r" || input === "\u2028" || input === "\u2029") {
|
|
69239
|
+
stopped = true;
|
|
69240
|
+
return;
|
|
69241
|
+
}
|
|
69281
69242
|
if (escapedRegex) {
|
|
69282
69243
|
escapedRegex = false;
|
|
69283
69244
|
return;
|
|
@@ -69307,6 +69268,7 @@ this.Function = globalThis.Function;
|
|
|
69307
69268
|
case "`":
|
|
69308
69269
|
quote = input;
|
|
69309
69270
|
lastSignificantChar = input;
|
|
69271
|
+
stopped = buffer2.endsWith("```");
|
|
69310
69272
|
return;
|
|
69311
69273
|
case "(":
|
|
69312
69274
|
parenDepth++;
|
|
@@ -69384,7 +69346,7 @@ this.Function = globalThis.Function;
|
|
|
69384
69346
|
return;
|
|
69385
69347
|
}
|
|
69386
69348
|
input = String(input);
|
|
69387
|
-
for (let index = 0; index < input.length; index++) {
|
|
69349
|
+
for (let index = 0; index < input.length && !stopped; index++) {
|
|
69388
69350
|
buffer2 += input[index];
|
|
69389
69351
|
acceptCharacter(input[index]);
|
|
69390
69352
|
}
|
|
@@ -69392,12 +69354,17 @@ this.Function = globalThis.Function;
|
|
|
69392
69354
|
}
|
|
69393
69355
|
function describeOpenSyntax() {
|
|
69394
69356
|
let items2 = [];
|
|
69395
|
-
if (
|
|
69357
|
+
if (stopped && !regex)
|
|
69358
|
+
items2.push("three backticks in a row, like a Markdown fence mark");
|
|
69359
|
+
else if (quote)
|
|
69396
69360
|
items2.push(
|
|
69397
69361
|
quote === "`" ? "a template literal" : "a string (" + quote + ")"
|
|
69398
69362
|
);
|
|
69399
69363
|
if (blockComment) items2.push("a block comment");
|
|
69400
|
-
if (regex)
|
|
69364
|
+
if (regex)
|
|
69365
|
+
items2.push(
|
|
69366
|
+
stopped ? "a regular expression that runs past its line, or a division taken for one" : "a regular expression"
|
|
69367
|
+
);
|
|
69401
69368
|
if (parenDepth) items2.push(parenDepth + " \xD7 (");
|
|
69402
69369
|
if (bracketDepth) items2.push(bracketDepth + " \xD7 [");
|
|
69403
69370
|
if (braceDepth) items2.push(braceDepth + " \xD7 {");
|
|
@@ -69406,7 +69373,7 @@ this.Function = globalThis.Function;
|
|
|
69406
69373
|
function value2() {
|
|
69407
69374
|
if (ended2) return;
|
|
69408
69375
|
ended2 = true;
|
|
69409
|
-
let value22 = quote !== null || blockComment || regex;
|
|
69376
|
+
let value22 = stopped || quote !== null || blockComment || regex;
|
|
69410
69377
|
if (!value22) {
|
|
69411
69378
|
if (pendingSlash) {
|
|
69412
69379
|
pendingSlash = false;
|
|
@@ -69450,6 +69417,10 @@ this.Function = globalThis.Function;
|
|
|
69450
69417
|
end: value2,
|
|
69451
69418
|
reset,
|
|
69452
69419
|
tail: () => buffer2.slice(statementStart),
|
|
69420
|
+
inTextOrComment: () => stopped || quote === "`" || templateDepths.length > 0 && quote === null || blockComment,
|
|
69421
|
+
get stopped() {
|
|
69422
|
+
return stopped;
|
|
69423
|
+
},
|
|
69453
69424
|
get count() {
|
|
69454
69425
|
return statementCount;
|
|
69455
69426
|
}
|
|
@@ -72435,8 +72406,8 @@ this.Function = globalThis.Function;
|
|
|
72435
72406
|
return;
|
|
72436
72407
|
}
|
|
72437
72408
|
let value22 = stream.tail();
|
|
72438
|
-
if (value22.length > limits.maxChars || value22.length > limits.maxLines && value22.split(`
|
|
72439
|
-
`).length > limits.maxLines) {
|
|
72409
|
+
if (!stream.stopped && (value22.length > limits.maxChars || value22.length > limits.maxLines && value22.split(`
|
|
72410
|
+
`).length > limits.maxLines)) {
|
|
72440
72411
|
emitStatementError(
|
|
72441
72412
|
"a statement is over " + limits.maxLines + " lines / " + limits.maxChars + " characters; dropped",
|
|
72442
72413
|
value22
|
|
@@ -72476,7 +72447,7 @@ this.Function = globalThis.Function;
|
|
|
72476
72447
|
if (!value4) continue;
|
|
72477
72448
|
if (consumedLineChars === 0 && !useLineSplitter) {
|
|
72478
72449
|
let value7 = incomingLine.replace(/\r?\n$/, "");
|
|
72479
|
-
if (CODE_FENCE.test(value7) && !insideTemplate()) {
|
|
72450
|
+
if (CODE_FENCE.test(value7) && !insideTemplate() && !stream.inTextOrComment()) {
|
|
72480
72451
|
if (restartStream(), insideCodeFence = insideCodeFence !== true, insideCodeFence)
|
|
72481
72452
|
recognizedCode = true;
|
|
72482
72453
|
} else if (insideCodeFence === false) reportSkippedProse(value7);
|