@takagaki/cortex-decisions-viewer 0.12.52 → 0.12.54
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/figma-guide-images.js +32 -0
- package/dist/render.js +78 -74
- package/package.json +2 -2
package/dist/render.js
CHANGED
|
@@ -55,6 +55,7 @@ exports.renderConnectionMap = renderConnectionMap;
|
|
|
55
55
|
const node_crypto_1 = require("node:crypto");
|
|
56
56
|
const google_chat_guide_images_1 = require("./google-chat-guide-images");
|
|
57
57
|
const meet_guide_images_1 = require("./meet-guide-images");
|
|
58
|
+
const figma_guide_images_1 = require("./figma-guide-images");
|
|
58
59
|
// 操作タブの仮置き(#388)。判定の実体はあちら——ここは流し込みと配線だけ
|
|
59
60
|
const pending_ops_1 = require("./pending-ops");
|
|
60
61
|
/**
|
|
@@ -2168,19 +2169,17 @@ function calendarStateRow(rows) {
|
|
|
2168
2169
|
* 接続状態ストアの行から、案件カレンダーの ID を引く(#428・#452)。
|
|
2169
2170
|
*
|
|
2170
2171
|
* 🔴 **ID は「最新の行」ではなく「ID を持つ最新の行」から引く。** 状態を運ぶ行
|
|
2171
|
-
* (`calendarStateRow
|
|
2172
|
-
*
|
|
2173
|
-
*
|
|
2174
|
-
*
|
|
2172
|
+
* (`calendarStateRow`)と別に引く理由は、**カレンダーが出来ている案件にも
|
|
2173
|
+
* `requested` の行が立つ**から——受け口(`?op=calendar-request`)は共有の是正にも
|
|
2174
|
+
* 使われ、裏の経路が番兵(`ref = "calendar"`)の `requested` を書いてそれが最新になる。
|
|
2175
|
+
* 最新の1行だけから ID を引くと、**既にあるカレンダーのリンクとコピー欄が
|
|
2176
|
+
* 最長20分ぶん画面から消え**、さらに待つと「作成が終わっていません」まで出る。
|
|
2175
2177
|
* **一度できたカレンダーは消えない**ので、ID は落とさないのが正しい。
|
|
2176
2178
|
*
|
|
2177
|
-
*
|
|
2178
|
-
*
|
|
2179
|
-
*
|
|
2180
|
-
*
|
|
2181
|
-
* intake は**カレンダーが出来ている案件の依頼にだけ ID を載せる**(#427)。
|
|
2182
|
-
* 判定を2枚に割ると片方だけ直り、**一括作成の直後に「共有を更新しています」**が
|
|
2183
|
-
* 出る形へ静かに戻る。
|
|
2179
|
+
* ⚠ かつては `calendarPhase` が**「作成の依頼が処理中」と「共有の更新が処理中」を
|
|
2180
|
+
* 分ける唯一の材料**としてもこれを呼んでいた(#452)。その出し分けは
|
|
2181
|
+
* **#544 で画面から「共有を更新」を外したときに無くなった**(出す先が消えたため)。
|
|
2182
|
+
* ここが残っているのは ID を落とさないためだけ。
|
|
2184
2183
|
*
|
|
2185
2184
|
* **クロージャを持たない純関数に保つこと**(`.toString()` でクライアントへ渡す)。
|
|
2186
2185
|
*/
|
|
@@ -2266,8 +2265,8 @@ function calendarRowCount(raw) {
|
|
|
2266
2265
|
* - `none` … まだ無い(行が 1 本も無い)→ 「この案件のカレンダーを作る」
|
|
2267
2266
|
* - `pending` … 依頼が立っている → 「作成中(最長 N 分)」
|
|
2268
2267
|
* - `stale` … 約束の 3 倍を過ぎた → 「作成が終わっていません(依頼は届いています)」
|
|
2269
|
-
* - `ready` … ID がある → 手順の画像/Google カレンダーに追加/ID
|
|
2270
|
-
* この案件のミーティングを作成(#452
|
|
2268
|
+
* - `ready` … ID がある → 手順の画像/Google カレンダーに追加/ID のコピー/
|
|
2269
|
+
* この案件のミーティングを作成(#452 の並び。「共有を更新」は #544 で外した)
|
|
2271
2270
|
* - `failed` … 作れなかった → 理由の1行+もう一度
|
|
2272
2271
|
*
|
|
2273
2272
|
* 🔴 **`none` は「行が 1 本も無い」ときだけ。** 契約(裏の経路 #427)は
|
|
@@ -2301,28 +2300,18 @@ function calendarPhase(s, rows, ctx, nowMs) {
|
|
|
2301
2300
|
var unclear = { phase: "unclear", calendarId: "", detail: "", note: "", at: at };
|
|
2302
2301
|
// ---- ID があれば必ず ready(最新の行が何であっても降ろさない) ----
|
|
2303
2302
|
if (id) {
|
|
2304
|
-
//
|
|
2303
|
+
// 失敗は**添える1行**として渡す。「作れませんでした」とは言わない
|
|
2305
2304
|
//(出来ているので嘘になり、押し直すと 2 本目が作られる)
|
|
2306
2305
|
//
|
|
2307
|
-
// 🔴
|
|
2308
|
-
//
|
|
2309
|
-
//
|
|
2310
|
-
//
|
|
2311
|
-
//
|
|
2312
|
-
//
|
|
2313
|
-
//
|
|
2314
|
-
// `existing.calendarId` を返すため)
|
|
2315
|
-
// - 一括作成がまだ閉じていない案件は `calendarId` が空なので**番兵のまま**で、
|
|
2316
|
-
// ID は夜間の集計(fleet)からしか引けない
|
|
2317
|
-
// ⚠ 行は「増える」のではなく**同じ SK に上書き**される(接続状態ストアの SK は `ref` を
|
|
2318
|
-
// 含むので、番兵の行と ID の行は別の SK)。だから「作成時の行が残っているから分かる」
|
|
2319
|
-
// ではなく、**押した依頼そのものが ID を載せて書かれるから分かる**。
|
|
2320
|
-
// ここを見ないと、**一括作成の直後に「共有を更新しています(最長 20 分)。」が出る**
|
|
2321
|
-
//(#452 の実機確認)。押してもいない人には、できることの無い1行になる。
|
|
2306
|
+
// 🔴 **`requested`(依頼が立っている)は note にしない(#544)。**
|
|
2307
|
+
// かつては「共有を更新しています(最長 20 分)。」を出すための材料で、
|
|
2308
|
+
// 「押した人にだけ出す」ために **その行が ID を載せているか**を見ていた(#452)。
|
|
2309
|
+
// **その画面のボタンは #544 で外した**ので、出す先が無い——残すと
|
|
2310
|
+
// 「誰も読まない値を計算し続ける」ことになり、次に触る人が使えると誤解する。
|
|
2311
|
+
// ⚠ **失敗の枝は残す。** これは「共有を更新」由来とは限らず、
|
|
2312
|
+
// **作成の書き戻し失敗**(カレンダーは出来ているのに報告が書けなかった回)でも立つ
|
|
2322
2313
|
var note = "";
|
|
2323
|
-
if (
|
|
2324
|
-
note = "requested";
|
|
2325
|
-
else if ((BAD_STATE_STATUSES.calendar || []).indexOf(status) >= 0)
|
|
2314
|
+
if ((BAD_STATE_STATUSES.calendar || []).indexOf(status) >= 0)
|
|
2326
2315
|
note = detail || "failed";
|
|
2327
2316
|
return { phase: "ready", calendarId: id, detail: "", note: note, at: at };
|
|
2328
2317
|
}
|
|
@@ -4097,7 +4086,8 @@ a.ds-tile:hover { text-decoration: none; }
|
|
|
4097
4086
|
見分けられなかったので、下の2規則(主ボタンと控えめな文字リンク)に格を分けてある */
|
|
4098
4087
|
/* 必ず 1 回押す主ボタン(#452)。見た目は .ds-toggle-btn から借りるので、ここは
|
|
4099
4088
|
リンク固有の分だけ——値を写すと色と枠が 2 枚になる。**太さも足さない**
|
|
4100
|
-
|
|
4089
|
+
(借り元の .ds-toggle-btn が既定の太さなので、ここだけ太いと「同じ見た目」から外れる。
|
|
4090
|
+
隣に並んでいた「共有を更新」は #544 で外した) */
|
|
4101
4091
|
.mt-cal-primary { display: inline-block; margin: 8px 0 0; text-decoration: none; }
|
|
4102
4092
|
/* 素の a:hover が下線を引く。**ボタンの見た目に下線が出ると壊れて見える**ので打ち消す。
|
|
4103
4093
|
⚠ この CSS はテンプレート文字列の中なので、コメントにバッククォートを書かないこと */
|
|
@@ -4542,10 +4532,9 @@ ${deriveCapTile.toString()}
|
|
|
4542
4532
|
// (語を2枚持たないため)ので、宣言の前に呼ぶと undefined を読む
|
|
4543
4533
|
${isCalendarId.toString()}
|
|
4544
4534
|
${calendarStateRow.toString()}
|
|
4545
|
-
// calendarIdOf
|
|
4546
|
-
//
|
|
4547
|
-
//
|
|
4548
|
-
// 順序そのものは効かない
|
|
4535
|
+
// calendarIdOf が呼ぶ(#452。#544 で calendarPhase 側の呼び出しは無くなった)。
|
|
4536
|
+
// **読みやすさのために呼ぶ側より前に置いてあるだけ**——関数宣言は巻き上がるので、
|
|
4537
|
+
// 上の BAD_STATE_STATUSES(var)と違って順序そのものは効かない
|
|
4549
4538
|
${calendarIdFromRows.toString()}
|
|
4550
4539
|
${calendarIdOf.toString()}
|
|
4551
4540
|
${calendarRowCount.toString()}
|
|
@@ -4675,6 +4664,10 @@ ${calendarAddUrl.toString()}
|
|
|
4675
4664
|
var GCHAT_SHOT_STEP2 = "${google_chat_guide_images_1.GCHAT_APP_STEP2}";
|
|
4676
4665
|
// 案件カレンダーに予定を作る手順の画像(#452)。理由は src/meet-guide-images.ts
|
|
4677
4666
|
var MEET_SHOT_CREATE_EVENT = "${meet_guide_images_1.MEET_GUIDE_CREATE_EVENT}";
|
|
4667
|
+
// Figma の「発行のしかた」に載せる手順の画像(#547)。理由は src/figma-guide-images.ts
|
|
4668
|
+
var FIGMA_SHOT_STEP1 = "${figma_guide_images_1.FIGMA_GUIDE_STEP1}";
|
|
4669
|
+
var FIGMA_SHOT_STEP2 = "${figma_guide_images_1.FIGMA_GUIDE_STEP2}";
|
|
4670
|
+
var FIGMA_SHOT_STEP3 = "${figma_guide_images_1.FIGMA_GUIDE_STEP3}";
|
|
4678
4671
|
|
|
4679
4672
|
function copyRow(text) {
|
|
4680
4673
|
// **input と button を使わない。** 追加フォームの中に置くので、input を足すと
|
|
@@ -6983,23 +6976,9 @@ ${calendarAddUrl.toString()}
|
|
|
6983
6976
|
function calendarCanRequest() { return !CALENDAR_DENIED && !!actorTicket(); }
|
|
6984
6977
|
|
|
6985
6978
|
/**
|
|
6986
|
-
* この画面で「共有を更新」を押したか(#452)。
|
|
6987
|
-
*
|
|
6988
|
-
* 🔴 **押した手応えを消さないために要る。** 「共有を更新しています(最長 N 分)。」は
|
|
6989
|
-
* ストアの行が ID を載せているときだけ出す(calendarPhase の項)が、**一括作成が
|
|
6990
|
-
* まだ閉じていない案件では、押しても番兵の行しか書かれない**。押すと行の時刻が変わって
|
|
6991
|
-
* meetingCalendarSig が変わり、liveList が箱を作り直す——ボタン脇の
|
|
6992
|
-
* 「✓ 依頼しました」ごと消えるので、**押した人の画面が押す前と 1 文字も変わらない**。
|
|
6993
|
-
*
|
|
6994
|
-
* 判定を 2 枚にはしていない(calendarPhase は純関数のまま)。ここが持っているのは
|
|
6995
|
-
* 「サーバが何を知っているか」ではなく **「この人が押したか」**で、これは
|
|
6996
|
-
* サーバの行から復元できない——CALENDAR_DENIED を画面が覚えているのと同じ事情。
|
|
6997
|
-
* 画面を開き直せば消える(そのときは行が答えを持っている)。
|
|
6998
|
-
*
|
|
6999
6979
|
* ⚠ ここから下は CLIENT_JS のテンプレート文字列の中。**コメントにバッククォートを
|
|
7000
6980
|
* 書かないこと**(文字列がそこで終わり、ビルドが丸ごと壊れる)。
|
|
7001
6981
|
*/
|
|
7002
|
-
var CALENDAR_SHARE_PRESSED = false;
|
|
7003
6982
|
|
|
7004
6983
|
/**
|
|
7005
6984
|
* 案件カレンダーの行(#428・設計は #418 の §6)。
|
|
@@ -7083,26 +7062,20 @@ ${calendarAddUrl.toString()}
|
|
|
7083
7062
|
// 色は**見る人ごとの設定**で、仕組みでは揃えられない(#418 の調査4)。
|
|
7084
7063
|
// 質問にはせず、事実として1行だけ置く(オーナー決定 A-5: 画面に計器は出さない)
|
|
7085
7064
|
box.appendChild(el("p", { class: "mt-cal-note", text: "色はご自身のカレンダーで変えられます。" }));
|
|
7086
|
-
// 🔴
|
|
7087
|
-
//
|
|
7088
|
-
//
|
|
7089
|
-
|
|
7090
|
-
|
|
7091
|
-
|
|
7092
|
-
box.appendChild(el("p", { class: "mt-cal-note", text: "案件にメンバーを足したら押してください。その人もこのカレンダーを見られるようになります(1 時間ごとに自動でも更新されます)" }));
|
|
7093
|
-
}
|
|
7094
|
-
// 作成済みのまま進行中・失敗の報告が最新なら、その1行だけ添える。
|
|
7095
|
-
// **「作れませんでした」とは言わない**(出来ているので嘘になり、押し直すと 2 本目が作られる)
|
|
7065
|
+
// 🔴 **「共有を更新」のボタンと説明はここに在った(#452)。#544 で外した。**
|
|
7066
|
+
// ポータル側が**メンバーの増減のたびに**共有を直させるようになったので、
|
|
7067
|
+
// 押す理由が無くなった(取りこぼしは毎時の便が最長 1 時間で埋める)。
|
|
7068
|
+
// ⚠ 押す場所が無い画面に「共有を更新しています」「終わっていません」だけを出さない
|
|
7069
|
+
// ——利用者にできることが無い 1 行になる。**受け口(?op=calendar-request)は残っている**
|
|
7070
|
+
// ので、運用が直接叩いて是正できる(docs/calendar-provisioning-runbook.md)。
|
|
7096
7071
|
//
|
|
7097
|
-
//
|
|
7098
|
-
//
|
|
7099
|
-
//
|
|
7100
|
-
|
|
7101
|
-
|
|
7102
|
-
} else if (cal.note) {
|
|
7072
|
+
// 作成済みのまま失敗の報告が最新なら、その1行だけ添える。
|
|
7073
|
+
// ⚠ **これは「共有を更新」由来とは限らない**(作成の書き戻し失敗でも立つ。#452)ので、
|
|
7074
|
+
// ボタンと一緒に消さない。**「作れませんでした」とは言わない**
|
|
7075
|
+
//(出来ているので嘘になり、押し直すと 2 本目が作られる)
|
|
7076
|
+
if (cal.note) {
|
|
7103
7077
|
box.appendChild(el("p", { class: "mt-cal-warn", text: "共有の更新が終わっていません(" + cal.note + ")。" }));
|
|
7104
7078
|
}
|
|
7105
|
-
box.appendChild(calendarRequestButton("共有を更新", "share"));
|
|
7106
7079
|
// 🔴 **主ボタンと格を分ける(#452)。** 同じ大きさ・同じ色で2本並ぶと、
|
|
7107
7080
|
// 必ず押すもの(Google カレンダーに追加)がどれか分からない。予定を作るのは
|
|
7108
7081
|
// たまにしかしないので、一番下に小さく薄い文字リンクで出す
|
|
@@ -7149,10 +7122,11 @@ ${calendarAddUrl.toString()}
|
|
|
7149
7122
|
}
|
|
7150
7123
|
|
|
7151
7124
|
/**
|
|
7152
|
-
* 依頼を出すボタン。**
|
|
7125
|
+
* 依頼を出すボタン。**2つ(作る・もう一度)とも同じ1本の経路**で、
|
|
7153
7126
|
* 押した直後の見え方だけが違う(裏の経路は冪等・#427)。
|
|
7127
|
+
* ⚠ 3 つ目の「共有を更新」は #544 で外した(受け口はそのまま残っている)。
|
|
7154
7128
|
*
|
|
7155
|
-
* **確認を出すのは「作る」だけ。**
|
|
7129
|
+
* **確認を出すのは「作る」だけ。** 「もう一度」は取り返しがつく
|
|
7156
7130
|
* (同じ依頼が立ち直るだけ)ので、確認を挟むと押す手が増えるだけになる。
|
|
7157
7131
|
*
|
|
7158
7132
|
* 🔴 **本文は空**(projectKey だけ)。共有先のメールをブラウザから受け取らない——
|
|
@@ -7205,9 +7179,6 @@ ${calendarAddUrl.toString()}
|
|
|
7205
7179
|
// 待ちの言い方は行から描く 1 行(pending)と揃える(#540)。
|
|
7206
7180
|
// 片方だけ「最長 20 分」だと、同じ待ちが 2 通りに見える
|
|
7207
7181
|
msg.textContent = "✓ 依頼しました。作成中です(数分〜十数分)。";
|
|
7208
|
-
// **押したことを覚える(#452)。** 下の取り直しで箱ごと作り直されると
|
|
7209
|
-
// この 1 行は消えるので、消えない側(行から描く 1 行)に引き継ぐ
|
|
7210
|
-
if (kind === "share") CALENDAR_SHARE_PRESSED = true;
|
|
7211
7182
|
// pending-ops(#388)は使わない。**あれは registeredNow のキーで live 判定する
|
|
7212
7183
|
// 仕組みで、カレンダーは stateNow 由来**。fresh で取り直せば「作成中」が出る
|
|
7213
7184
|
loadLiveFleet(true);
|
|
@@ -13690,12 +13661,36 @@ ${calendarAddUrl.toString()}
|
|
|
13690
13661
|
// 特に file_comments:read の欠落は「同期は緑なのに指摘だけ増えない」という
|
|
13691
13662
|
// 気づきにくい壊れ方をする(コメント同期は後から足した機能で、この案内が追随していなかった)。
|
|
13692
13663
|
// 書き込み権限は1つも要らない。files:read(非推奨・広範)は選ばせないこと。
|
|
13693
|
-
|
|
13664
|
+
// **画像内の番号(①〜⑧・下の shots)と、この文の言い回しの向きを揃える。**
|
|
13665
|
+
// 文の側には数字を振らない——振ると画像の丸数字と二重に採番することになり、
|
|
13666
|
+
// 「文の1番」と「画像の①」がずれたときに矛盾して見える(#547)
|
|
13667
|
+
how: "Figma の左上の名前 → Settings → Security タブ → Personal access tokens の Generate new token で発行します。名前は任意(例: cortex token)、期限は90日などにし、スコープは file_content:read と file_comments:read の2つだけにチェックを入れてください(どちらも読み取りのみ・書き込み権限は要りません)。",
|
|
13694
13668
|
// **スコープが正しくても、招待が無いと読めない。** トークンは「そのアカウントが
|
|
13695
13669
|
// 見られるファイル」しか読めないので、招待漏れは 404 になる。権限の問題に見えないため
|
|
13696
13670
|
// 現場で切り分けに時間がかかる(実際に踏んだ)。入力欄の隣に書いておく。
|
|
13697
13671
|
note: "発行したアカウントを、対象の Figma ファイルに閲覧者として招待しておいてください(招待が無いとトークンが正しくても読めません)。"
|
|
13698
13672
|
+ "発行するのは、対象ファイルのあるチームで Dev または Full の席を持つ方にしてください。閲覧席(View/Collab)のトークンは取得回数が月 20 回までで、夜間同期が数日で止まります。",
|
|
13673
|
+
// **手順の画像3枚(#547)。** Google Meet・Google Chat と同じ guideShot を通す
|
|
13674
|
+
// (幅の上限・クリックで原寸に戻る振る舞いを1か所に揃える)。見出しは画像の並び順
|
|
13675
|
+
// (1〜3枚目)、画像の中の丸数字(①〜⑧)は1枚の中の細かい手順——役割が別なので、
|
|
13676
|
+
// 見出し側に丸数字を混ぜない
|
|
13677
|
+
shots: [
|
|
13678
|
+
{
|
|
13679
|
+
src: FIGMA_SHOT_STEP1, width: "1000", height: "1114",
|
|
13680
|
+
heading: "1. 左上の名前 → Settings",
|
|
13681
|
+
alt: "Figma左上の自分の名前を押すとメニューが開き、その中のSettingsが赤枠で示されている。",
|
|
13682
|
+
},
|
|
13683
|
+
{
|
|
13684
|
+
src: FIGMA_SHOT_STEP2, width: "1200", height: "1145",
|
|
13685
|
+
heading: "2. Security タブ → Generate new token を押す",
|
|
13686
|
+
alt: "Settings画面のSecurityタブが赤枠で示され、下のPersonal access tokensにあるGenerate new tokenのリンクも赤枠で示されている。",
|
|
13687
|
+
},
|
|
13688
|
+
{
|
|
13689
|
+
src: FIGMA_SHOT_STEP3, width: "1100", height: "1428",
|
|
13690
|
+
heading: "3. 名前・期限・スコープを決めて発行する",
|
|
13691
|
+
alt: "Generate new tokenダイアログ。Token name欄・Expiration(90日)・file_comments:readとfile_content:readのチェックボックス・Generate tokenボタンが、それぞれ赤枠で示されている。",
|
|
13692
|
+
},
|
|
13693
|
+
],
|
|
13699
13694
|
},
|
|
13700
13695
|
"backlog": {
|
|
13701
13696
|
icon: "📋",
|
|
@@ -13899,6 +13894,15 @@ ${calendarAddUrl.toString()}
|
|
|
13899
13894
|
// 発行のしかたを探している人がここを開く手掛かりを持てない(rt カードと同じ流儀)
|
|
13900
13895
|
var guidanceBox = el("details", { class: "sec-fold" }, [el("summary", { text: "発行のしかた" })]);
|
|
13901
13896
|
for (var gi = 0; gi < guidance.length; gi++) guidanceBox.appendChild(guidance[gi]);
|
|
13897
|
+
// **手順の画像(#547)。** 文章(guidance)の下に、見出し→画像の対を並びの順に足す。
|
|
13898
|
+
// shots を持たない種別(Backlog)ではこの節は素通りする
|
|
13899
|
+
if (meta.shots) {
|
|
13900
|
+
for (var si = 0; si < meta.shots.length; si++) {
|
|
13901
|
+
var shot = meta.shots[si];
|
|
13902
|
+
guidanceBox.appendChild(el("p", { class: "sec-how", text: shot.heading }));
|
|
13903
|
+
guidanceBox.appendChild(guideShot({ src: shot.src, width: shot.width, height: shot.height, alt: shot.alt }));
|
|
13904
|
+
}
|
|
13905
|
+
}
|
|
13902
13906
|
|
|
13903
13907
|
// **押すまで入力欄を出さない(2026-08-21・オーナー指摘)。**
|
|
13904
13908
|
// 「今のAPIキーのセクション、欄があると思うんだけど…押すとフォームだけ出てくる」。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@takagaki/cortex-decisions-viewer",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.54",
|
|
4
4
|
"description": "Cortexの意思決定記録(Decisions/*.md)を静的サイトにビルドして閲覧する。各レコードに「Edit on GitHub」リンクを付与する。",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"private": false,
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"build": "tsc -p tsconfig.json",
|
|
22
22
|
"prepublishOnly": "npm run build",
|
|
23
23
|
"demo": "npm run build && node dist/cli.js build ../../aidd-project-cortex/Cortex/Decisions/records --out .demo-site",
|
|
24
|
-
"test": "npm run test:syntax && npm run build && node --test test/*.test.mjs",
|
|
24
|
+
"test": "npm run test:syntax && npm run build && node --test --test-concurrency=4 test/*.test.mjs",
|
|
25
25
|
"test:syntax": "node --test test/embedded-js-syntax.test.mjs"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|