@mmnto/cli 1.6.1 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/check.js +2 -2
- package/dist/commands/check.test.js +9 -8
- package/dist/commands/check.test.js.map +1 -1
- package/dist/commands/config-drift.test.js +5 -4
- package/dist/commands/config-drift.test.js.map +1 -1
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +39 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/config.test.d.ts +2 -0
- package/dist/commands/config.test.d.ts.map +1 -0
- package/dist/commands/config.test.js +117 -0
- package/dist/commands/config.test.js.map +1 -0
- package/dist/commands/docs.d.ts +1 -1
- package/dist/commands/docs.js +2 -2
- package/dist/commands/eject.d.ts.map +1 -1
- package/dist/commands/eject.js +1 -1
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/exemption.d.ts +7 -0
- package/dist/commands/exemption.d.ts.map +1 -0
- package/dist/commands/exemption.js +166 -0
- package/dist/commands/exemption.js.map +1 -0
- package/dist/commands/exemption.test.d.ts +2 -0
- package/dist/commands/exemption.test.d.ts.map +1 -0
- package/dist/commands/exemption.test.js +258 -0
- package/dist/commands/exemption.test.js.map +1 -0
- package/dist/commands/init-templates.d.ts +4 -4
- package/dist/commands/init-templates.js +5 -5
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +5 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install-hooks.d.ts +3 -3
- package/dist/commands/install-hooks.d.ts.map +1 -1
- package/dist/commands/install-hooks.js +55 -56
- package/dist/commands/install-hooks.js.map +1 -1
- package/dist/commands/install-hooks.test.js +134 -77
- package/dist/commands/install-hooks.test.js.map +1 -1
- package/dist/commands/lesson.d.ts +3 -0
- package/dist/commands/lesson.d.ts.map +1 -0
- package/dist/commands/lesson.js +90 -0
- package/dist/commands/lesson.js.map +1 -0
- package/dist/commands/lesson.test.d.ts +2 -0
- package/dist/commands/lesson.test.d.ts.map +1 -0
- package/dist/commands/lesson.test.js +187 -0
- package/dist/commands/lesson.test.js.map +1 -0
- package/dist/commands/lint.d.ts.map +1 -1
- package/dist/commands/lint.js +52 -0
- package/dist/commands/lint.js.map +1 -1
- package/dist/commands/review-alias.test.d.ts +2 -0
- package/dist/commands/review-alias.test.d.ts.map +1 -0
- package/dist/commands/review-alias.test.js +49 -0
- package/dist/commands/review-alias.test.js.map +1 -0
- package/dist/commands/rule.d.ts +4 -0
- package/dist/commands/rule.d.ts.map +1 -0
- package/dist/commands/rule.js +154 -0
- package/dist/commands/rule.js.map +1 -0
- package/dist/commands/rule.test.d.ts +2 -0
- package/dist/commands/rule.test.d.ts.map +1 -0
- package/dist/commands/rule.test.js +315 -0
- package/dist/commands/rule.test.js.map +1 -0
- package/dist/commands/shield.js +5 -5
- package/dist/commands/spec-templates.d.ts +1 -1
- package/dist/commands/spec-templates.js +1 -1
- package/dist/index.js +226 -37
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -43,9 +43,11 @@ export function detectTotemPrefix(cwd) {
|
|
|
43
43
|
* Never exits early to avoid killing chained user hooks.
|
|
44
44
|
*/
|
|
45
45
|
export function buildResolveBlock(fallbackCmd) {
|
|
46
|
-
return `# Resolve totem command
|
|
46
|
+
return `# Resolve totem command — prefer local workspace build over published package
|
|
47
47
|
if command -v totem >/dev/null 2>&1; then
|
|
48
48
|
TOTEM_CMD="totem"
|
|
49
|
+
elif [ -f pnpm-workspace.yaml ] && pnpm exec totem --version >/dev/null 2>&1; then
|
|
50
|
+
TOTEM_CMD="pnpm exec totem"
|
|
49
51
|
elif [ -f package.json ]; then
|
|
50
52
|
TOTEM_CMD="${fallbackCmd}"
|
|
51
53
|
else
|
|
@@ -104,7 +106,7 @@ export function generateHookHelpers(gitRoot, fallbackCmd) {
|
|
|
104
106
|
const postMerge = buildHookContent(fallbackCmd);
|
|
105
107
|
const postCheckout = buildPostCheckoutHookContent(fallbackCmd);
|
|
106
108
|
const preCommit = buildPreCommitHook();
|
|
107
|
-
const prePush = buildPrePushHook(
|
|
109
|
+
const prePush = buildPrePushHook();
|
|
108
110
|
fs.writeFileSync(path.join(hooksDir, 'post-merge.sh'), postMerge, { mode: 0o755 });
|
|
109
111
|
fs.writeFileSync(path.join(hooksDir, 'post-checkout.sh'), postCheckout, { mode: 0o755 });
|
|
110
112
|
fs.writeFileSync(path.join(hooksDir, 'pre-commit.sh'), preCommit, { mode: 0o755 });
|
|
@@ -157,7 +159,7 @@ function printHookManagerGuidance(manager) {
|
|
|
157
159
|
console.error(' run: sh .totem/hooks/pre-commit.sh');
|
|
158
160
|
console.error(' pre-push:');
|
|
159
161
|
console.error(' commands:');
|
|
160
|
-
console.error(' totem-
|
|
162
|
+
console.error(' totem-review:');
|
|
161
163
|
console.error(' run: sh .totem/hooks/pre-push.sh');
|
|
162
164
|
console.error(' post-merge:');
|
|
163
165
|
console.error(' commands:');
|
|
@@ -242,55 +244,57 @@ if [ "$branch" = "main" ] || [ "$branch" = "master" ]; then
|
|
|
242
244
|
fi
|
|
243
245
|
`;
|
|
244
246
|
}
|
|
245
|
-
|
|
246
|
-
export function buildPrePushHook(fallbackCmd) {
|
|
247
|
+
export function buildPrePushHook() {
|
|
247
248
|
return `#!/bin/sh
|
|
248
|
-
# ${TOTEM_PREPUSH_MARKER} —
|
|
249
|
+
# ${TOTEM_PREPUSH_MARKER} — fast read-only checkpoint.
|
|
249
250
|
# Override with: git push --no-verify
|
|
250
251
|
|
|
251
|
-
# Only
|
|
252
|
-
# Uses if/fi block so this is safe to append to existing hooks without early termination.
|
|
252
|
+
# Only gate when compiled rules exist (totem is configured)
|
|
253
253
|
if [ -f ".totem/compiled-rules.json" ]; then
|
|
254
|
-
${buildResolveBlock(fallbackCmd)}
|
|
255
254
|
|
|
256
|
-
#
|
|
257
|
-
if [
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
if $TOTEM_CMD compile; then
|
|
261
|
-
echo "[totem] Push aborted: compile manifest was updated."
|
|
262
|
-
echo "[totem] Please commit the updated .totem/ files and push again."
|
|
263
|
-
exit 1
|
|
264
|
-
else
|
|
265
|
-
echo "[totem] Push aborted: auto-compile failed. Run 'totem compile' manually."
|
|
266
|
-
exit 1
|
|
267
|
-
fi
|
|
268
|
-
fi
|
|
255
|
+
# Lint must have passed for current HEAD (core gate)
|
|
256
|
+
if [ ! -f ".totem/cache/.lint-passed" ]; then
|
|
257
|
+
echo "[totem] Push blocked: lint has not passed. Run 'totem lint' or /prepush." >&2
|
|
258
|
+
exit 1
|
|
269
259
|
fi
|
|
270
|
-
|
|
271
|
-
if [ -
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
fi
|
|
260
|
+
LINT_SHA=$(cat .totem/cache/.lint-passed 2>/dev/null | tr -d '[:space:]')
|
|
261
|
+
if [ -z "$LINT_SHA" ]; then
|
|
262
|
+
echo "[totem] Push blocked: lint flag is empty or unreadable. Run 'totem lint' or /prepush." >&2
|
|
263
|
+
exit 1
|
|
275
264
|
fi
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
265
|
+
HEAD_SHA=$(git rev-parse HEAD 2>/dev/null)
|
|
266
|
+
if [ "$LINT_SHA" != "$HEAD_SHA" ]; then
|
|
267
|
+
# Ancestry check: lint may still be valid if only non-target files changed
|
|
268
|
+
if git merge-base --is-ancestor "$LINT_SHA" "$HEAD_SHA" 2>/dev/null; then
|
|
269
|
+
# Read target globs from cache, fall back to common source extensions
|
|
270
|
+
if [ -f ".totem/cache/.target-globs" ]; then
|
|
271
|
+
TARGET_GLOBS=$(cat .totem/cache/.target-globs 2>/dev/null | xargs)
|
|
272
|
+
fi
|
|
273
|
+
if [ -z "$TARGET_GLOBS" ]; then
|
|
274
|
+
TARGET_GLOBS="*.ts *.tsx *.js *.jsx"
|
|
286
275
|
fi
|
|
287
|
-
#
|
|
288
|
-
|
|
289
|
-
|
|
276
|
+
# Check if any target files changed since lint passed
|
|
277
|
+
# shellcheck disable=SC2086
|
|
278
|
+
set -f # disable globbing so *.ts is passed as pathspec, not expanded
|
|
279
|
+
SRC_CHANGES=$(git diff --name-only "$LINT_SHA" "$HEAD_SHA" -- $TARGET_GLOBS 2>/dev/null)
|
|
280
|
+
set +f
|
|
281
|
+
if [ -n "$SRC_CHANGES" ]; then
|
|
282
|
+
echo "[totem] Push blocked: source files changed since lint passed." >&2
|
|
283
|
+
echo "[totem] Changed files:" >&2
|
|
284
|
+
echo "$SRC_CHANGES" | while read -r f; do echo "[totem] $f" >&2; done
|
|
285
|
+
echo "[totem] Run 'totem lint' or /prepush to re-validate." >&2
|
|
290
286
|
exit 1
|
|
291
287
|
fi
|
|
288
|
+
# Non-target changes only (docs, tests, config) — lint still valid
|
|
289
|
+
else
|
|
290
|
+
echo "[totem] Push blocked: lint passed for a non-ancestor commit (rebase?)." >&2
|
|
291
|
+
echo "[totem] lint SHA: $LINT_SHA" >&2
|
|
292
|
+
echo "[totem] HEAD SHA: $HEAD_SHA" >&2
|
|
293
|
+
echo "[totem] Run 'totem lint' or /prepush to re-validate." >&2
|
|
294
|
+
exit 1
|
|
292
295
|
fi
|
|
293
296
|
fi
|
|
297
|
+
|
|
294
298
|
fi
|
|
295
299
|
`;
|
|
296
300
|
}
|
|
@@ -355,9 +359,8 @@ export async function installEnforcementHooks(cwd, rl) {
|
|
|
355
359
|
return skip;
|
|
356
360
|
}
|
|
357
361
|
const hooksDir = path.join(gitRoot, '.git', 'hooks');
|
|
358
|
-
const fallbackCmd = getFallbackCommand(gitRoot);
|
|
359
362
|
const preCommit = installGitHook(hooksDir, 'pre-commit', buildPreCommitHook(), TOTEM_PRECOMMIT_MARKER);
|
|
360
|
-
const prePush = installGitHook(hooksDir, 'pre-push', buildPrePushHook(
|
|
363
|
+
const prePush = installGitHook(hooksDir, 'pre-push', buildPrePushHook(), TOTEM_PREPUSH_MARKER);
|
|
361
364
|
// Warn about non-shell hooks that Totem cannot safely append to
|
|
362
365
|
if (preCommit === 'skipped-non-shell') {
|
|
363
366
|
console.error('[Totem] Warning: pre-commit hook uses a non-shell interpreter. Manually integrate branch protection into your existing hook.');
|
|
@@ -409,7 +412,7 @@ export function installHooksNonInteractive(cwd) {
|
|
|
409
412
|
}
|
|
410
413
|
const hooksDir = path.join(gitRoot, '.git', 'hooks');
|
|
411
414
|
const preCommit = installGitHook(hooksDir, 'pre-commit', buildPreCommitHook(), TOTEM_PRECOMMIT_MARKER);
|
|
412
|
-
const prePush = installGitHook(hooksDir, 'pre-push', buildPrePushHook(
|
|
415
|
+
const prePush = installGitHook(hooksDir, 'pre-push', buildPrePushHook(), TOTEM_PREPUSH_MARKER);
|
|
413
416
|
const postMergeContent = buildHookContent(fallbackCmd);
|
|
414
417
|
const postMerge = installGitHook(hooksDir, 'post-merge', postMergeContent, TOTEM_HOOK_MARKER);
|
|
415
418
|
const postCheckoutContent = buildPostCheckoutHookContent(fallbackCmd);
|
|
@@ -499,8 +502,8 @@ export function hooksCommand(opts) {
|
|
|
499
502
|
}
|
|
500
503
|
// ─── Silent hook upgrade ──────────────────────────────
|
|
501
504
|
/**
|
|
502
|
-
* Silently upgrade the pre-push hook if it was installed by Totem but
|
|
503
|
-
* the
|
|
505
|
+
* Silently upgrade the pre-push hook if it was installed by Totem but uses
|
|
506
|
+
* the old command-executing format instead of the new flag-checking format.
|
|
504
507
|
*
|
|
505
508
|
* Returns true if the hook was upgraded, false otherwise.
|
|
506
509
|
*/
|
|
@@ -513,19 +516,14 @@ export function upgradePrePushHookIfNeeded(cwd) {
|
|
|
513
516
|
if (!fs.existsSync(hookPath))
|
|
514
517
|
return false;
|
|
515
518
|
const content = fs.readFileSync(hookPath, 'utf-8');
|
|
516
|
-
// Only upgrade hooks that Totem owns (have our marker)
|
|
519
|
+
// Only upgrade hooks that Totem owns (have our marker)
|
|
517
520
|
if (!content.includes(TOTEM_PREPUSH_MARKER))
|
|
518
521
|
return false;
|
|
519
|
-
if (content.includes(SHIELD_AUTO_REFRESH_MARKER))
|
|
520
|
-
return false;
|
|
521
522
|
// Splice only the totem-managed block, preserving any user-appended content.
|
|
522
|
-
// The totem block starts at the marker comment and ends at the matching top-level `fi`.
|
|
523
523
|
const markerIdx = content.indexOf(`# ${TOTEM_PREPUSH_MARKER}`);
|
|
524
524
|
if (markerIdx === -1)
|
|
525
525
|
return false;
|
|
526
526
|
// Find the end of the totem block by balancing if/fi depth.
|
|
527
|
-
// Can't use first or last `fi` — the block has nested if/fi pairs,
|
|
528
|
-
// and user content after the block may also contain if/fi.
|
|
529
527
|
const afterMarker = content.slice(markerIdx);
|
|
530
528
|
const ifFiPattern = /^\s*(if\s|fi\s*$)/gm;
|
|
531
529
|
let depth = 0;
|
|
@@ -550,18 +548,19 @@ export function upgradePrePushHookIfNeeded(cwd) {
|
|
|
550
548
|
}
|
|
551
549
|
if (endOffset === -1)
|
|
552
550
|
return false;
|
|
551
|
+
// Upgrade if: totem-managed block already uses new format (check block only, not user content)
|
|
552
|
+
const existingTotemBlock = afterMarker.slice(0, endOffset);
|
|
553
|
+
if (existingTotemBlock.includes('.lint-passed'))
|
|
554
|
+
return false;
|
|
553
555
|
const blockEnd = markerIdx + endOffset;
|
|
554
556
|
// Build the replacement block (strip shebang — we're splicing into existing file)
|
|
555
|
-
const
|
|
556
|
-
const newBlock = buildPrePushHook(fallbackCmd)
|
|
557
|
+
const newBlock = buildPrePushHook()
|
|
557
558
|
.replace(/^#!\/bin\/sh\n/, '')
|
|
558
559
|
.trimStart();
|
|
559
560
|
// Splice: preserve everything before and after the totem block
|
|
560
561
|
const before = content.slice(0, markerIdx);
|
|
561
562
|
const after = content.slice(blockEnd);
|
|
562
563
|
const upgraded = before + newBlock.trimEnd() + after;
|
|
563
|
-
// TODO(telemetry): when the Workflow Friction Index (1.8.0) is built,
|
|
564
|
-
// pass execution context (hook-triggered vs manual) here for measurement
|
|
565
564
|
fs.writeFileSync(hookPath, upgraded);
|
|
566
565
|
try {
|
|
567
566
|
fs.chmodSync(hookPath, 0o755);
|
|
@@ -572,7 +571,7 @@ export function upgradePrePushHookIfNeeded(cwd) {
|
|
|
572
571
|
return true;
|
|
573
572
|
}
|
|
574
573
|
catch {
|
|
575
|
-
// Silent upgrade is best-effort — never crash
|
|
574
|
+
// Silent upgrade is best-effort — never crash review for a hook upgrade failure
|
|
576
575
|
return false;
|
|
577
576
|
}
|
|
578
577
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-hooks.js","sourceRoot":"","sources":["../../src/commands/install-hooks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"install-hooks.js","sourceRoot":"","sources":["../../src/commands/install-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;AACpD,MAAM,cAAc,GAAG,wBAAwB,CAAC;AAChD,MAAM,qBAAqB,GAAG,4BAA4B,CAAC;AAC3D,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;AACvD,MAAM,CAAC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAI5D;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAAE,OAAO,qBAAqB,CAAC;IAClF,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,qBAAqB,CAAC;IAC7E,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzF,OAAO,iBAAiB,CAAC;IAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAC3E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAAE,OAAO,iBAAiB,CAAC;IAC9E,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IACpE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzF,OAAO,YAAY,CAAC;IACtB,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,OAAO;;;;;;eAMM,WAAW;;;;GAIvB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAmB;IAC3C,OAAO;IACL,iBAAiB;;EAEnB,iBAAiB,CAAC,WAAW,CAAC;;;;;;IAM5B,cAAc;CACjB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,WAAmB;IAC9D,OAAO;IACL,qBAAqB;;;;;;;;EAQvB,iBAAiB,CAAC,WAAW,CAAC;;;;;;;;;;;;;;IAc5B,kBAAkB;CACrB,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,WAAmB;IACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,4BAA4B,CAAC,WAAW,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IAEnC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IACE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC7C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,EAC9C,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAqC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAC5F,IAAI,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC5B,OAAO,kBAAkB,CAAC;YAC5B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAoB;IACpD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;YAC/E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC/C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACpD,MAAM;QACR,KAAK,UAAU;YACb,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC5D,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC1D,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC5D,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAC/D,MAAM;QACR,KAAK,kBAAkB;YACrB,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;YAC9E,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAChE,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;YACzE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,MAAM;IACV,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAW,EAAE,EAAsB;IAC5E,iEAAiE;IACjE,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE3C,IAAI,OAAO,EAAE,CAAC;QACZ,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC1C,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAC9B,0EAA0E,CAC3E,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;QACjF,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEnD,0CAA0C;IAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,kEAAkE;QAClE,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACtD,MAAM,WAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC;aAC9C,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;aAC7B,SAAS,EAAE,CAAC;QACf,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,GAAG,WAAW,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IAED,kBAAkB;IAClB,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;IAE1D,0DAA0D;IAC1D,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;AACpD,CAAC;AAED,2DAA2D;AAE3D,MAAM,UAAU,kBAAkB;IAChC,OAAO;IACL,sBAAsB;;;;;;;;;;CAUzB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;IACL,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDvB,CAAC;AACF,CAAC;AAED,MAAM,gBAAgB,GAAG,gDAAgD,CAAC;AAE1E;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAgB,EAChB,QAAgB,EAChB,WAAmB,EACnB,MAAc;IAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE/C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,2EAA2E;QAC3E,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACpE,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QAED,2DAA2D;QAC3D,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1D,MAAM,WAAW,GAAG,WAAW;aAC5B,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,+BAA+B;aAC7D,SAAS,EAAE,CAAC;QACf,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;QACrD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,kBAAkB;IAClB,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAExC,0DAA0D;IAC1D,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAOD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,GAAW,EACX,EAAsB;IAEtB,MAAM,IAAI,GAA0B,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAEjF,iEAAiE;IACjE,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oEAAoE;IACpE,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,OAAO,EAAE,CAAC;QACZ,8DAA8D;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uCAAuC;IACvC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAC9B,4EAA4E,CAC7E,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;QAChF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAErD,MAAM,SAAS,GAAG,cAAc,CAC9B,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAAE,EACpB,sBAAsB,CACvB,CAAC;IAEF,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAE/F,gEAAgE;IAChE,IAAI,SAAS,KAAK,mBAAmB,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CACX,8HAA8H,CAC/H,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,mBAAmB,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CACX,uFAAuF,CACxF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAEvD,IAAI,CAAC;QACH,MAAM,uBAAuB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACvC,MAAM,oBAAoB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAEpC,qGAAqG;QACrG,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACpD,MAAM,YAAY,GAChB,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;YAC9F,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAChD,cAAc,CACZ,QAAQ,EACR,eAAe,EACf,4BAA4B,CAAC,WAAW,CAAC,EACzC,qBAAqB,CACtB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAWD;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,GAAW;IACpD,iEAAiE;IACjE,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEhD,yFAAyF;IACzF,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,OAAO,EAAE,CAAC;QACZ,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC1C,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAErD,MAAM,SAAS,GAAG,cAAc,CAC9B,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAAE,EACpB,sBAAsB,CACvB,CAAC;IAEF,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAE/F,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;IAE9F,MAAM,mBAAmB,GAAG,4BAA4B,CAAC,WAAW,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,cAAc,CACjC,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,qBAAqB,CACtB,CAAC;IAEF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAErD,MAAM,OAAO,GAAG;QACd,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,sBAAsB,EAAE;QACtD,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE;QAClD,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE;QACjD,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,qBAAqB,EAAE;KACzD,CAAC;IAEF,IAAI,UAAU,GAAG,IAAI,CAAC;IACtB,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;YAC/C,UAAU,GAAG,KAAK,CAAC;YACnB,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,gBAAgB,IAAI,kCAAkC,CAAC,CAAC;YACtE,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAyB;IACpD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,gEAAgE;IAChE,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,EAAE,EAAE,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAE/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,iFAAiF;QACjF,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG;QACd,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE;QAChD,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE;QAC5C,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE;QAChD,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE;KACvD,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACvC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,WAAW;gBACd,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,QAAQ,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,UAAU;gBACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,IAAI,QAAQ,CAAC,CAAC;gBAClE,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,0BAA0B,CAAC,CAAC;gBACzD,MAAM;YACR,KAAK,mBAAmB;gBACtB,OAAO,CAAC,KAAK,CACX,oBAAoB,IAAI,yDAAyD,CAClF,CAAC;gBACF,MAAM;QACV,CAAC;IACH,CAAC;AACH,CAAC;AAED,yDAAyD;AAEzD;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,GAAW;IACpD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QACjE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAE3C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEnD,uDAAuD;QACvD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAAE,OAAO,KAAK,CAAC;QAE1D,6EAA6E;QAC7E,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,oBAAoB,EAAE,CAAC,CAAC;QAC/D,IAAI,SAAS,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAEnC,4DAA4D;QAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,qBAAqB,CAAC;QAC1C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,KAAK,CAAC;QAEV,gDAAgD;QAChD,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACxD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,YAAY;oBAAE,YAAY,GAAG,IAAI,CAAC;gBACvC,KAAK,EAAE,CAAC;YACV,CAAC;iBAAM,IAAI,OAAO,KAAK,IAAI,IAAI,YAAY,EAAE,CAAC;gBAC5C,KAAK,EAAE,CAAC;YACV,CAAC;YACD,IAAI,YAAY,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChC,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC1C,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,SAAS,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAEnC,+FAA+F;QAC/F,MAAM,kBAAkB,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC3D,IAAI,kBAAkB,CAAC,QAAQ,CAAC,cAAc,CAAC;YAAE,OAAO,KAAK,CAAC;QAE9D,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;QAEvC,kFAAkF;QAClF,MAAM,QAAQ,GAAG,gBAAgB,EAAE;aAChC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;aAC7B,SAAS,EAAE,CAAC;QAEf,+DAA+D;QAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC;QAErD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAErC,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;QAC9D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,gFAAgF;QAChF,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -114,6 +114,14 @@ describe('buildResolveBlock', () => {
|
|
|
114
114
|
const block = buildResolveBlock('pnpm dlx @mmnto/cli');
|
|
115
115
|
expect(block).toContain('[ -f package.json ]');
|
|
116
116
|
});
|
|
117
|
+
it('prefers pnpm exec totem in workspace before dlx fallback', () => {
|
|
118
|
+
const block = buildResolveBlock('pnpm dlx @mmnto/cli');
|
|
119
|
+
expect(block).toContain('pnpm-workspace.yaml');
|
|
120
|
+
expect(block).toContain('TOTEM_CMD="pnpm exec totem"');
|
|
121
|
+
const workspaceIdx = block.indexOf('pnpm-workspace.yaml');
|
|
122
|
+
const dlxIdx = block.indexOf('pnpm dlx @mmnto/cli');
|
|
123
|
+
expect(workspaceIdx).toBeLessThan(dlxIdx);
|
|
124
|
+
});
|
|
117
125
|
});
|
|
118
126
|
describe('buildPreCommitHook', () => {
|
|
119
127
|
it('contains the marker for idempotency', () => {
|
|
@@ -140,80 +148,87 @@ describe('buildPreCommitHook', () => {
|
|
|
140
148
|
});
|
|
141
149
|
});
|
|
142
150
|
describe('buildPrePushHook', () => {
|
|
143
|
-
const fallbackCmd = 'pnpm dlx @mmnto/cli';
|
|
144
151
|
it('contains the marker for idempotency', () => {
|
|
145
|
-
const hook = buildPrePushHook(
|
|
152
|
+
const hook = buildPrePushHook();
|
|
146
153
|
expect(hook).toContain(TOTEM_PREPUSH_MARKER);
|
|
147
154
|
});
|
|
148
|
-
it('
|
|
149
|
-
const hook = buildPrePushHook(
|
|
150
|
-
expect(hook).
|
|
151
|
-
expect(hook).toContain('fi');
|
|
152
|
-
// Must use if/fi guard, NOT `&& exit 0` which would terminate appended hooks early
|
|
153
|
-
expect(hook).not.toContain('&& exit 0');
|
|
154
|
-
});
|
|
155
|
-
it('includes the resolve block for dynamic command resolution', () => {
|
|
156
|
-
const hook = buildPrePushHook(fallbackCmd);
|
|
157
|
-
expect(hook).toContain('command -v totem');
|
|
158
|
-
expect(hook).toContain('TOTEM_CMD=');
|
|
159
|
-
});
|
|
160
|
-
it('runs lint via $TOTEM_CMD', () => {
|
|
161
|
-
const hook = buildPrePushHook(fallbackCmd);
|
|
162
|
-
expect(hook).toContain('$TOTEM_CMD lint');
|
|
155
|
+
it('starts with a shebang', () => {
|
|
156
|
+
const hook = buildPrePushHook();
|
|
157
|
+
expect(hook).toMatch(/^#!\/bin\/sh\n/);
|
|
163
158
|
});
|
|
164
159
|
it('mentions --no-verify override', () => {
|
|
165
|
-
const hook = buildPrePushHook(
|
|
160
|
+
const hook = buildPrePushHook();
|
|
166
161
|
expect(hook).toContain('git push --no-verify');
|
|
167
162
|
});
|
|
168
|
-
it('
|
|
169
|
-
const hook = buildPrePushHook(
|
|
170
|
-
expect(hook).
|
|
171
|
-
});
|
|
172
|
-
it('uses the provided fallback command in the resolve block', () => {
|
|
173
|
-
const npxHook = buildPrePushHook('npx @mmnto/cli');
|
|
174
|
-
expect(npxHook).toContain('TOTEM_CMD="npx @mmnto/cli"');
|
|
175
|
-
const yarnHook = buildPrePushHook('yarn dlx @mmnto/cli');
|
|
176
|
-
expect(yarnHook).toContain('TOTEM_CMD="yarn dlx @mmnto/cli"');
|
|
177
|
-
});
|
|
178
|
-
it('includes verify-manifest block before lint', () => {
|
|
179
|
-
const hook = buildPrePushHook(fallbackCmd);
|
|
180
|
-
expect(hook).toContain('verify-manifest');
|
|
181
|
-
expect(hook).toContain('compile-manifest.json');
|
|
182
|
-
expect(hook).toContain('$TOTEM_CMD compile');
|
|
183
|
-
// verify-manifest block must appear before lint
|
|
184
|
-
const verifyIdx = hook.indexOf('verify-manifest');
|
|
185
|
-
const lintIdx = hook.indexOf('$TOTEM_CMD lint');
|
|
186
|
-
expect(verifyIdx).toBeLessThan(lintIdx);
|
|
187
|
-
});
|
|
188
|
-
it('aborts push after auto-compile so updated files can be committed', () => {
|
|
189
|
-
const hook = buildPrePushHook(fallbackCmd);
|
|
190
|
-
expect(hook).toContain('Push aborted: compile manifest was updated');
|
|
191
|
-
expect(hook).toContain('Please commit the updated .totem/ files and push again');
|
|
192
|
-
expect(hook).toContain('exit 1');
|
|
163
|
+
it('only gates when compiled-rules.json exists', () => {
|
|
164
|
+
const hook = buildPrePushHook();
|
|
165
|
+
expect(hook).toContain('if [ -f ".totem/compiled-rules.json" ]; then');
|
|
193
166
|
});
|
|
194
|
-
it('
|
|
195
|
-
const hook = buildPrePushHook(
|
|
196
|
-
expect(hook).toContain(
|
|
167
|
+
it('checks .lint-passed flag', () => {
|
|
168
|
+
const hook = buildPrePushHook();
|
|
169
|
+
expect(hook).toContain('.totem/cache/.lint-passed');
|
|
197
170
|
});
|
|
198
|
-
it('
|
|
199
|
-
const hook = buildPrePushHook(
|
|
200
|
-
expect(hook).toContain('Shield flag stale');
|
|
201
|
-
expect(hook).toContain('.totem/cache/.shield-passed');
|
|
171
|
+
it('validates lint flag SHA against HEAD', () => {
|
|
172
|
+
const hook = buildPrePushHook();
|
|
202
173
|
expect(hook).toContain('git rev-parse HEAD');
|
|
203
|
-
expect(hook).toContain('
|
|
204
|
-
expect(hook).toContain('
|
|
205
|
-
});
|
|
206
|
-
it('
|
|
207
|
-
const hook = buildPrePushHook(
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
expect(
|
|
211
|
-
expect(
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
174
|
+
expect(hook).toContain('LINT_SHA');
|
|
175
|
+
expect(hook).toContain('HEAD_SHA');
|
|
176
|
+
});
|
|
177
|
+
it('does not execute any totem commands', () => {
|
|
178
|
+
const hook = buildPrePushHook();
|
|
179
|
+
expect(hook).not.toContain('$TOTEM_CMD');
|
|
180
|
+
// "totem lint" appears in error messages but not as a command invocation
|
|
181
|
+
expect(hook).not.toMatch(/^\s+totem\s+(lint|review|shield|compile)\b/m);
|
|
182
|
+
expect(hook).not.toContain('pnpm');
|
|
183
|
+
expect(hook).not.toContain('node ');
|
|
184
|
+
});
|
|
185
|
+
it('does not include resolve block', () => {
|
|
186
|
+
const hook = buildPrePushHook();
|
|
187
|
+
expect(hook).not.toContain('command -v totem');
|
|
188
|
+
expect(hook).not.toContain('TOTEM_CMD=');
|
|
189
|
+
});
|
|
190
|
+
it('uses POSIX-compatible syntax only', () => {
|
|
191
|
+
const hook = buildPrePushHook();
|
|
192
|
+
// Must use [ ] not [[ ]]
|
|
193
|
+
expect(hook).not.toContain('[[');
|
|
194
|
+
expect(hook).not.toContain(']]');
|
|
195
|
+
});
|
|
196
|
+
it('prints actionable error messages when blocking', () => {
|
|
197
|
+
const hook = buildPrePushHook();
|
|
198
|
+
expect(hook).toContain('Push blocked');
|
|
199
|
+
expect(hook).toContain('/prepush');
|
|
200
|
+
});
|
|
201
|
+
it('prints diagnostic details when source files changed', () => {
|
|
202
|
+
const hook = buildPrePushHook();
|
|
203
|
+
expect(hook).toContain('Changed files');
|
|
204
|
+
});
|
|
205
|
+
it('prints SHA mismatch details on non-ancestor block', () => {
|
|
206
|
+
const hook = buildPrePushHook();
|
|
207
|
+
expect(hook).toContain('lint SHA');
|
|
208
|
+
expect(hook).toContain('HEAD SHA');
|
|
209
|
+
});
|
|
210
|
+
it('includes ancestry-aware lint validation', () => {
|
|
211
|
+
const hook = buildPrePushHook();
|
|
215
212
|
expect(hook).toContain('git merge-base --is-ancestor');
|
|
216
|
-
expect(hook).toContain('
|
|
213
|
+
expect(hook).toContain('LINT_SHA');
|
|
214
|
+
});
|
|
215
|
+
it('reads target globs from cache file', () => {
|
|
216
|
+
const hook = buildPrePushHook();
|
|
217
|
+
expect(hook).toContain('.totem/cache/.target-globs');
|
|
218
|
+
expect(hook).toContain('TARGET_GLOBS');
|
|
219
|
+
});
|
|
220
|
+
it('falls back to common source extensions when no target-globs cache', () => {
|
|
221
|
+
const hook = buildPrePushHook();
|
|
222
|
+
expect(hook).toContain('*.ts *.tsx *.js *.jsx');
|
|
223
|
+
});
|
|
224
|
+
it('uses git diff to check for source file changes', () => {
|
|
225
|
+
const hook = buildPrePushHook();
|
|
226
|
+
expect(hook).toContain('git diff --name-only');
|
|
227
|
+
expect(hook).toContain('SRC_CHANGES');
|
|
228
|
+
});
|
|
229
|
+
it('handles non-ancestor commits (rebase)', () => {
|
|
230
|
+
const hook = buildPrePushHook();
|
|
231
|
+
expect(hook).toContain('non-ancestor');
|
|
217
232
|
});
|
|
218
233
|
});
|
|
219
234
|
describe('installGitHook', () => {
|
|
@@ -263,13 +278,13 @@ describe('installGitHook', () => {
|
|
|
263
278
|
const hookPath = path.join(hooksDir, 'pre-push');
|
|
264
279
|
const userHook = '#!/bin/sh\nrun_my_tests\n';
|
|
265
280
|
fs.writeFileSync(hookPath, userHook);
|
|
266
|
-
installGitHook(hooksDir, 'pre-push', buildPrePushHook(
|
|
281
|
+
installGitHook(hooksDir, 'pre-push', buildPrePushHook(), TOTEM_PREPUSH_MARKER);
|
|
267
282
|
const written = fs.readFileSync(hookPath, 'utf-8');
|
|
268
283
|
expect(written).toContain('run_my_tests');
|
|
269
284
|
expect(written).toContain(TOTEM_PREPUSH_MARKER);
|
|
270
285
|
});
|
|
271
286
|
it('is idempotent — double install does not duplicate', () => {
|
|
272
|
-
const content = buildPrePushHook(
|
|
287
|
+
const content = buildPrePushHook();
|
|
273
288
|
installGitHook(hooksDir, 'pre-push', content, TOTEM_PREPUSH_MARKER);
|
|
274
289
|
installGitHook(hooksDir, 'pre-push', content, TOTEM_PREPUSH_MARKER);
|
|
275
290
|
const written = fs.readFileSync(path.join(hooksDir, 'pre-push'), 'utf-8');
|
|
@@ -291,7 +306,7 @@ describe('installGitHook', () => {
|
|
|
291
306
|
const hookPath = path.join(hooksDir, 'pre-push');
|
|
292
307
|
const pythonHook = '#!/usr/bin/env python3\nimport subprocess\n';
|
|
293
308
|
fs.writeFileSync(hookPath, pythonHook);
|
|
294
|
-
const result = installGitHook(hooksDir, 'pre-push', buildPrePushHook(
|
|
309
|
+
const result = installGitHook(hooksDir, 'pre-push', buildPrePushHook(), TOTEM_PREPUSH_MARKER);
|
|
295
310
|
expect(result).toBe('skipped-non-shell');
|
|
296
311
|
const written = fs.readFileSync(hookPath, 'utf-8');
|
|
297
312
|
expect(written).toBe(pythonHook); // File untouched
|
|
@@ -326,7 +341,7 @@ describe('installGitHook', () => {
|
|
|
326
341
|
});
|
|
327
342
|
it('handles pre-commit and pre-push independently', () => {
|
|
328
343
|
installGitHook(hooksDir, 'pre-commit', buildPreCommitHook(), TOTEM_PRECOMMIT_MARKER);
|
|
329
|
-
installGitHook(hooksDir, 'pre-push', buildPrePushHook(
|
|
344
|
+
installGitHook(hooksDir, 'pre-push', buildPrePushHook(), TOTEM_PREPUSH_MARKER);
|
|
330
345
|
expect(fs.existsSync(path.join(hooksDir, 'pre-commit'))).toBe(true);
|
|
331
346
|
expect(fs.existsSync(path.join(hooksDir, 'pre-push'))).toBe(true);
|
|
332
347
|
const preCommit = fs.readFileSync(path.join(hooksDir, 'pre-commit'), 'utf-8');
|
|
@@ -354,15 +369,15 @@ describe('generateHookHelpers', () => {
|
|
|
354
369
|
expect(fs.existsSync(path.join(hooksDir, 'pre-commit.sh'))).toBe(true);
|
|
355
370
|
expect(fs.existsSync(path.join(hooksDir, 'pre-push.sh'))).toBe(true);
|
|
356
371
|
});
|
|
357
|
-
it('generated scripts contain
|
|
372
|
+
it('generated scripts contain expected content', () => {
|
|
358
373
|
generateHookHelpers(tmpDir, 'pnpm dlx @mmnto/cli');
|
|
359
374
|
const hooksDir = path.join(tmpDir, '.totem', 'hooks');
|
|
360
375
|
const postMerge = fs.readFileSync(path.join(hooksDir, 'post-merge.sh'), 'utf-8');
|
|
361
376
|
expect(postMerge).toContain('command -v totem');
|
|
362
377
|
expect(postMerge).toContain('$TOTEM_CMD');
|
|
363
378
|
const prePush = fs.readFileSync(path.join(hooksDir, 'pre-push.sh'), 'utf-8');
|
|
364
|
-
expect(prePush).toContain(
|
|
365
|
-
expect(prePush).toContain('
|
|
379
|
+
expect(prePush).toContain(TOTEM_PREPUSH_MARKER);
|
|
380
|
+
expect(prePush).toContain('.lint-passed');
|
|
366
381
|
});
|
|
367
382
|
it('is idempotent — calling twice does not error', () => {
|
|
368
383
|
generateHookHelpers(tmpDir, 'pnpm dlx @mmnto/cli');
|
|
@@ -619,12 +634,12 @@ describe('upgradePrePushHookIfNeeded', () => {
|
|
|
619
634
|
}
|
|
620
635
|
/** Canonical totem block: shebang stripped, trimmed — the expected upgrade output. */
|
|
621
636
|
function expectedTotemBlock() {
|
|
622
|
-
return buildPrePushHook(
|
|
637
|
+
return buildPrePushHook()
|
|
623
638
|
.replace(/^#!\/bin\/sh\n/, '')
|
|
624
639
|
.trim();
|
|
625
640
|
}
|
|
626
|
-
it('upgrades old hook
|
|
627
|
-
// Install an old-style hook that
|
|
641
|
+
it('upgrades old command-executing hook to flag-checking format', () => {
|
|
642
|
+
// Install an old-style hook that executes $TOTEM_CMD lint
|
|
628
643
|
const hooksDir = path.join(tmpDir, '.git', 'hooks');
|
|
629
644
|
fs.mkdirSync(hooksDir, { recursive: true });
|
|
630
645
|
const oldHook = `#!/bin/sh
|
|
@@ -642,7 +657,8 @@ fi
|
|
|
642
657
|
const upgraded = upgradePrePushHookIfNeeded(tmpDir);
|
|
643
658
|
expect(upgraded).toBe(true);
|
|
644
659
|
const content = fs.readFileSync(path.join(hooksDir, 'pre-push'), 'utf-8');
|
|
645
|
-
expect(content).toContain('
|
|
660
|
+
expect(content).toContain('.lint-passed');
|
|
661
|
+
expect(content).not.toContain('$TOTEM_CMD');
|
|
646
662
|
expect(content).toContain(TOTEM_PREPUSH_MARKER);
|
|
647
663
|
// Full block comparison: extracted totem block must match canonical output
|
|
648
664
|
const actual = extractTotemBlock(content);
|
|
@@ -658,7 +674,7 @@ fi
|
|
|
658
674
|
const content = fs.readFileSync(path.join(hooksDir, 'pre-push'), 'utf-8');
|
|
659
675
|
expect(content).toBe(userHook); // File untouched
|
|
660
676
|
});
|
|
661
|
-
it('skips hook that already
|
|
677
|
+
it('skips hook that already uses flag-checking format', () => {
|
|
662
678
|
// Install the current-version hook via non-interactive installer
|
|
663
679
|
installHooksNonInteractive(tmpDir);
|
|
664
680
|
const hooksDir = path.join(tmpDir, '.git', 'hooks');
|
|
@@ -700,8 +716,9 @@ fi
|
|
|
700
716
|
const upgraded = upgradePrePushHookIfNeeded(tmpDir);
|
|
701
717
|
expect(upgraded).toBe(true);
|
|
702
718
|
const content = fs.readFileSync(path.join(hooksDir, 'pre-push'), 'utf-8');
|
|
703
|
-
// New totem block should
|
|
704
|
-
expect(content).toContain('
|
|
719
|
+
// New totem block should use flag-checking format
|
|
720
|
+
expect(content).toContain('.lint-passed');
|
|
721
|
+
expect(content).not.toContain('$TOTEM_CMD');
|
|
705
722
|
// User content should be preserved
|
|
706
723
|
expect(content).toContain('curl -X POST https://hooks.example.com/deploy');
|
|
707
724
|
expect(content).toContain('My custom deploy notification');
|
|
@@ -787,5 +804,45 @@ fi
|
|
|
787
804
|
const actual = extractTotemBlock(content);
|
|
788
805
|
expect(actual).toBe(expectedTotemBlock());
|
|
789
806
|
});
|
|
807
|
+
it('upgrades hook with auto-refresh and $TOTEM_CMD to flag-checking format', () => {
|
|
808
|
+
const hooksDir = path.join(tmpDir, '.git', 'hooks');
|
|
809
|
+
fs.mkdirSync(hooksDir, { recursive: true });
|
|
810
|
+
// Simulate a hook with the auto-refresh logic still using $TOTEM_CMD
|
|
811
|
+
const oldHook = `#!/bin/sh
|
|
812
|
+
# ${TOTEM_PREPUSH_MARKER} — run compiled rules before push.
|
|
813
|
+
# Override with: git push --no-verify
|
|
814
|
+
|
|
815
|
+
if [ -f ".totem/compiled-rules.json" ]; then
|
|
816
|
+
TOTEM_CMD="totem"
|
|
817
|
+
if [ -n "$TOTEM_CMD" ]; then
|
|
818
|
+
if ! $TOTEM_CMD lint; then
|
|
819
|
+
exit 1
|
|
820
|
+
fi
|
|
821
|
+
fi
|
|
822
|
+
|
|
823
|
+
if [ -f ".totem/cache/.shield-passed" ] && [ -n "$TOTEM_CMD" ]; then
|
|
824
|
+
SHIELD_SHA=$(cat .totem/cache/.shield-passed | tr -d '[:space:]')
|
|
825
|
+
HEAD_SHA=$(git rev-parse HEAD)
|
|
826
|
+
if [ "$SHIELD_SHA" != "$HEAD_SHA" ]; then
|
|
827
|
+
echo "[totem] Shield flag stale. Auto-refreshing..."
|
|
828
|
+
if ! $TOTEM_CMD review; then
|
|
829
|
+
echo "[totem] Review auto-refresh failed. Fix issues and retry."
|
|
830
|
+
exit 1
|
|
831
|
+
fi
|
|
832
|
+
fi
|
|
833
|
+
fi
|
|
834
|
+
fi
|
|
835
|
+
`;
|
|
836
|
+
fs.writeFileSync(path.join(hooksDir, 'pre-push'), oldHook);
|
|
837
|
+
const upgraded = upgradePrePushHookIfNeeded(tmpDir);
|
|
838
|
+
expect(upgraded).toBe(true);
|
|
839
|
+
const content = fs.readFileSync(path.join(hooksDir, 'pre-push'), 'utf-8');
|
|
840
|
+
// Must not contain any $TOTEM_CMD — new format is read-only
|
|
841
|
+
expect(content).not.toContain('$TOTEM_CMD');
|
|
842
|
+
expect(content).toContain('.lint-passed');
|
|
843
|
+
// Full block comparison
|
|
844
|
+
const actual = extractTotemBlock(content);
|
|
845
|
+
expect(actual).toBe(expectedTotemBlock());
|
|
846
|
+
});
|
|
790
847
|
});
|
|
791
848
|
//# sourceMappingURL=install-hooks.test.js.map
|