@mmnto/cli 1.6.1 → 1.6.3
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 +4 -2
- 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 +10 -15
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install-hooks.d.ts +3 -2
- package/dist/commands/install-hooks.d.ts.map +1 -1
- package/dist/commands/install-hooks.js +24 -51
- package/dist/commands/install-hooks.js.map +1 -1
- package/dist/commands/install-hooks.test.js +144 -78
- 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/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.d.ts +4 -2
- package/dist/commands/shield.d.ts.map +1 -1
- package/dist/commands/shield.js +42 -20
- package/dist/commands/shield.js.map +1 -1
- package/dist/commands/shield.test.js +15 -13
- package/dist/commands/shield.test.js.map +1 -1
- 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
|
|
@@ -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,27 @@ if [ "$branch" = "main" ] || [ "$branch" = "master" ]; then
|
|
|
242
244
|
fi
|
|
243
245
|
`;
|
|
244
246
|
}
|
|
245
|
-
const SHIELD_AUTO_REFRESH_MARKER = 'Shield flag stale';
|
|
246
247
|
export function buildPrePushHook(fallbackCmd) {
|
|
247
248
|
return `#!/bin/sh
|
|
248
|
-
# ${TOTEM_PREPUSH_MARKER} —
|
|
249
|
-
# Override with: git push --no-verify
|
|
249
|
+
# ${TOTEM_PREPUSH_MARKER} — stateless enforcement.
|
|
250
250
|
|
|
251
|
-
|
|
252
|
-
# Uses if/fi block so this is safe to append to existing hooks without early termination.
|
|
253
|
-
if [ -f ".totem/compiled-rules.json" ]; then
|
|
254
|
-
${buildResolveBlock(fallbackCmd)}
|
|
251
|
+
${buildResolveBlock(fallbackCmd)}
|
|
255
252
|
|
|
256
|
-
|
|
257
|
-
|
|
253
|
+
if [ -n "$TOTEM_CMD" ]; then
|
|
254
|
+
# Verify compile manifest is current
|
|
255
|
+
if [ -f ".totem/compile-manifest.json" ]; then
|
|
258
256
|
if ! $TOTEM_CMD verify-manifest > /dev/null 2>&1; then
|
|
259
|
-
echo "[totem]
|
|
260
|
-
|
|
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
|
|
257
|
+
echo "[totem] Push blocked: compile manifest is stale. Run 'totem lesson compile'." >&2
|
|
258
|
+
exit 1
|
|
268
259
|
fi
|
|
269
260
|
fi
|
|
270
261
|
|
|
271
|
-
|
|
262
|
+
# Run deterministic lint
|
|
263
|
+
if [ -f ".totem/compiled-rules.json" ]; then
|
|
272
264
|
if ! $TOTEM_CMD lint; then
|
|
273
265
|
exit 1
|
|
274
266
|
fi
|
|
275
267
|
fi
|
|
276
|
-
|
|
277
|
-
# Shield auto-refresh — re-run shield if flag is stale (#1045)
|
|
278
|
-
if [ -f ".totem/cache/.shield-passed" ] && [ -n "$TOTEM_CMD" ]; then
|
|
279
|
-
SHIELD_SHA=$(cat .totem/cache/.shield-passed | tr -d '[:space:]')
|
|
280
|
-
HEAD_SHA=$(git rev-parse HEAD)
|
|
281
|
-
if [ "$SHIELD_SHA" != "$HEAD_SHA" ]; then
|
|
282
|
-
if git merge-base --is-ancestor "$SHIELD_SHA" "$HEAD_SHA" 2>/dev/null; then
|
|
283
|
-
echo "[totem] ${SHIELD_AUTO_REFRESH_MARKER}. Auto-refreshing..."
|
|
284
|
-
else
|
|
285
|
-
echo "[totem] ${SHIELD_AUTO_REFRESH_MARKER} (rebase detected). Auto-refreshing..."
|
|
286
|
-
fi
|
|
287
|
-
# TODO(telemetry): pass execution context (hook vs manual) for friction index (1.8.0)
|
|
288
|
-
if ! $TOTEM_CMD shield; then
|
|
289
|
-
echo "[totem] Shield auto-refresh failed. Fix issues and retry."
|
|
290
|
-
exit 1
|
|
291
|
-
fi
|
|
292
|
-
fi
|
|
293
|
-
fi
|
|
294
268
|
fi
|
|
295
269
|
`;
|
|
296
270
|
}
|
|
@@ -354,8 +328,8 @@ export async function installEnforcementHooks(cwd, rl) {
|
|
|
354
328
|
if (answer.trim().toLowerCase() === 'n' || answer.trim().toLowerCase() === 'no') {
|
|
355
329
|
return skip;
|
|
356
330
|
}
|
|
357
|
-
const hooksDir = path.join(gitRoot, '.git', 'hooks');
|
|
358
331
|
const fallbackCmd = getFallbackCommand(gitRoot);
|
|
332
|
+
const hooksDir = path.join(gitRoot, '.git', 'hooks');
|
|
359
333
|
const preCommit = installGitHook(hooksDir, 'pre-commit', buildPreCommitHook(), TOTEM_PRECOMMIT_MARKER);
|
|
360
334
|
const prePush = installGitHook(hooksDir, 'pre-push', buildPrePushHook(fallbackCmd), TOTEM_PREPUSH_MARKER);
|
|
361
335
|
// Warn about non-shell hooks that Totem cannot safely append to
|
|
@@ -499,8 +473,9 @@ export function hooksCommand(opts) {
|
|
|
499
473
|
}
|
|
500
474
|
// ─── Silent hook upgrade ──────────────────────────────
|
|
501
475
|
/**
|
|
502
|
-
* Silently upgrade the pre-push hook if it was installed by Totem but
|
|
503
|
-
*
|
|
476
|
+
* Silently upgrade the pre-push hook if it was installed by Totem but uses
|
|
477
|
+
* an old format (flag-checking or command-executing) instead of the new
|
|
478
|
+
* stateless format that runs verify-manifest + lint directly.
|
|
504
479
|
*
|
|
505
480
|
* Returns true if the hook was upgraded, false otherwise.
|
|
506
481
|
*/
|
|
@@ -513,19 +488,19 @@ export function upgradePrePushHookIfNeeded(cwd) {
|
|
|
513
488
|
if (!fs.existsSync(hookPath))
|
|
514
489
|
return false;
|
|
515
490
|
const content = fs.readFileSync(hookPath, 'utf-8');
|
|
516
|
-
// Only upgrade hooks that Totem owns (have our marker)
|
|
491
|
+
// Only upgrade hooks that Totem owns (have our marker)
|
|
517
492
|
if (!content.includes(TOTEM_PREPUSH_MARKER))
|
|
518
493
|
return false;
|
|
519
|
-
|
|
494
|
+
// Already on the new stateless format — no upgrade needed
|
|
495
|
+
if (content.includes('verify-manifest'))
|
|
520
496
|
return false;
|
|
521
497
|
// 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
498
|
const markerIdx = content.indexOf(`# ${TOTEM_PREPUSH_MARKER}`);
|
|
524
499
|
if (markerIdx === -1)
|
|
525
500
|
return false;
|
|
526
501
|
// Find the end of the totem block by balancing if/fi depth.
|
|
527
|
-
//
|
|
528
|
-
//
|
|
502
|
+
// Track the LAST balanced fi at depth 0 to handle multi-block hooks
|
|
503
|
+
// (e.g. resolve block + guard block).
|
|
529
504
|
const afterMarker = content.slice(markerIdx);
|
|
530
505
|
const ifFiPattern = /^\s*(if\s|fi\s*$)/gm;
|
|
531
506
|
let depth = 0;
|
|
@@ -551,8 +526,8 @@ export function upgradePrePushHookIfNeeded(cwd) {
|
|
|
551
526
|
if (endOffset === -1)
|
|
552
527
|
return false;
|
|
553
528
|
const blockEnd = markerIdx + endOffset;
|
|
554
|
-
// Build the replacement block (strip shebang — we're splicing into existing file)
|
|
555
529
|
const fallbackCmd = getFallbackCommand(gitRoot);
|
|
530
|
+
// Build the replacement block (strip shebang — we're splicing into existing file)
|
|
556
531
|
const newBlock = buildPrePushHook(fallbackCmd)
|
|
557
532
|
.replace(/^#!\/bin\/sh\n/, '')
|
|
558
533
|
.trimStart();
|
|
@@ -560,8 +535,6 @@ export function upgradePrePushHookIfNeeded(cwd) {
|
|
|
560
535
|
const before = content.slice(0, markerIdx);
|
|
561
536
|
const after = content.slice(blockEnd);
|
|
562
537
|
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
538
|
fs.writeFileSync(hookPath, upgraded);
|
|
566
539
|
try {
|
|
567
540
|
fs.chmodSync(hookPath, 0o755);
|
|
@@ -572,7 +545,7 @@ export function upgradePrePushHookIfNeeded(cwd) {
|
|
|
572
545
|
return true;
|
|
573
546
|
}
|
|
574
547
|
catch {
|
|
575
|
-
// Silent upgrade is best-effort — never crash
|
|
548
|
+
// Silent upgrade is best-effort — never crash review for a hook upgrade failure
|
|
576
549
|
return false;
|
|
577
550
|
}
|
|
578
551
|
}
|
|
@@ -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,CAAC,WAAW,CAAC,CAAC;IAE9C,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,CAAC,WAAmB;IAClD,OAAO;IACL,oBAAoB;;EAEtB,iBAAiB,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;CAkB/B,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,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAChD,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,CAC5B,QAAQ,EACR,UAAU,EACV,gBAAgB,CAAC,WAAW,CAAC,EAC7B,oBAAoB,CACrB,CAAC;IAEF,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,CAC5B,QAAQ,EACR,UAAU,EACV,gBAAgB,CAAC,WAAW,CAAC,EAC7B,oBAAoB,CACrB,CAAC;IAEF,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;;;;;;GAMG;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,0DAA0D;QAC1D,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAAE,OAAO,KAAK,CAAC;QAEtD,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,oEAAoE;QACpE,sCAAsC;QACtC,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,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;QAEvC,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAEhD,kFAAkF;QAClF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC;aAC3C,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,52 @@ describe('buildPreCommitHook', () => {
|
|
|
140
148
|
});
|
|
141
149
|
});
|
|
142
150
|
describe('buildPrePushHook', () => {
|
|
143
|
-
const
|
|
151
|
+
const FALLBACK = 'pnpm dlx @mmnto/cli';
|
|
144
152
|
it('contains the marker for idempotency', () => {
|
|
145
|
-
const hook = buildPrePushHook(
|
|
153
|
+
const hook = buildPrePushHook(FALLBACK);
|
|
146
154
|
expect(hook).toContain(TOTEM_PREPUSH_MARKER);
|
|
147
155
|
});
|
|
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');
|
|
156
|
+
it('starts with a shebang', () => {
|
|
157
|
+
const hook = buildPrePushHook(FALLBACK);
|
|
158
|
+
expect(hook).toMatch(/^#!\/bin\/sh\n/);
|
|
154
159
|
});
|
|
155
|
-
it('
|
|
156
|
-
const hook = buildPrePushHook(
|
|
157
|
-
expect(hook).toContain('
|
|
158
|
-
|
|
160
|
+
it('does not advertise --no-verify escape hatch', () => {
|
|
161
|
+
const hook = buildPrePushHook(FALLBACK);
|
|
162
|
+
expect(hook).not.toContain('--no-verify');
|
|
163
|
+
});
|
|
164
|
+
it('contains verify-manifest check', () => {
|
|
165
|
+
const hook = buildPrePushHook(FALLBACK);
|
|
166
|
+
expect(hook).toContain('verify-manifest');
|
|
167
|
+
expect(hook).toContain('compile manifest is stale');
|
|
159
168
|
});
|
|
160
|
-
it('
|
|
161
|
-
const hook = buildPrePushHook(
|
|
169
|
+
it('contains $TOTEM_CMD lint', () => {
|
|
170
|
+
const hook = buildPrePushHook(FALLBACK);
|
|
162
171
|
expect(hook).toContain('$TOTEM_CMD lint');
|
|
163
172
|
});
|
|
164
|
-
it('
|
|
165
|
-
const hook = buildPrePushHook(
|
|
166
|
-
expect(hook).toContain('
|
|
173
|
+
it('does NOT contain old flag-file references', () => {
|
|
174
|
+
const hook = buildPrePushHook(FALLBACK);
|
|
175
|
+
expect(hook).not.toContain('.lint-passed');
|
|
176
|
+
expect(hook).not.toContain('.shield-passed');
|
|
177
|
+
expect(hook).not.toContain('.target-globs');
|
|
167
178
|
});
|
|
168
|
-
it('
|
|
169
|
-
const hook = buildPrePushHook(
|
|
170
|
-
expect(hook).
|
|
179
|
+
it('does NOT contain merge-base (no ancestry checks)', () => {
|
|
180
|
+
const hook = buildPrePushHook(FALLBACK);
|
|
181
|
+
expect(hook).not.toContain('merge-base');
|
|
171
182
|
});
|
|
172
|
-
it('uses the
|
|
173
|
-
const
|
|
174
|
-
expect(
|
|
175
|
-
|
|
176
|
-
expect(yarnHook).toContain('TOTEM_CMD="yarn dlx @mmnto/cli"');
|
|
183
|
+
it('uses the resolve block', () => {
|
|
184
|
+
const hook = buildPrePushHook(FALLBACK);
|
|
185
|
+
expect(hook).toContain('TOTEM_CMD=');
|
|
186
|
+
expect(hook).toContain('command -v totem');
|
|
177
187
|
});
|
|
178
|
-
it('
|
|
179
|
-
const hook = buildPrePushHook(
|
|
180
|
-
|
|
181
|
-
expect(hook).toContain('
|
|
182
|
-
expect(hook).toContain('
|
|
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');
|
|
188
|
+
it('uses POSIX-compatible syntax only', () => {
|
|
189
|
+
const hook = buildPrePushHook(FALLBACK);
|
|
190
|
+
// Must use [ ] not [[ ]]
|
|
191
|
+
expect(hook).not.toContain('[[');
|
|
192
|
+
expect(hook).not.toContain(']]');
|
|
193
193
|
});
|
|
194
|
-
it('
|
|
195
|
-
const hook = buildPrePushHook(
|
|
196
|
-
expect(hook).toContain(
|
|
197
|
-
});
|
|
198
|
-
it('generates script with shield auto-refresh logic', () => {
|
|
199
|
-
const hook = buildPrePushHook(fallbackCmd);
|
|
200
|
-
expect(hook).toContain('Shield flag stale');
|
|
201
|
-
expect(hook).toContain('.totem/cache/.shield-passed');
|
|
202
|
-
expect(hook).toContain('git rev-parse HEAD');
|
|
203
|
-
expect(hook).toContain('$TOTEM_CMD shield');
|
|
204
|
-
expect(hook).toContain('Shield auto-refresh failed');
|
|
205
|
-
});
|
|
206
|
-
it('places shield auto-refresh after lint block', () => {
|
|
207
|
-
const hook = buildPrePushHook(fallbackCmd);
|
|
208
|
-
const lintIdx = hook.indexOf('$TOTEM_CMD lint');
|
|
209
|
-
const shieldIdx = hook.indexOf('Shield flag stale');
|
|
210
|
-
expect(lintIdx).toBeGreaterThan(-1);
|
|
211
|
-
expect(shieldIdx).toBeGreaterThan(lintIdx);
|
|
212
|
-
});
|
|
213
|
-
it('checks merge-base ancestry for stale flag detection', () => {
|
|
214
|
-
const hook = buildPrePushHook(fallbackCmd);
|
|
215
|
-
expect(hook).toContain('git merge-base --is-ancestor');
|
|
216
|
-
expect(hook).toContain('rebase detected');
|
|
194
|
+
it('embeds the provided fallback command', () => {
|
|
195
|
+
const hook = buildPrePushHook('yarn dlx @mmnto/cli');
|
|
196
|
+
expect(hook).toContain('yarn dlx @mmnto/cli');
|
|
217
197
|
});
|
|
218
198
|
});
|
|
219
199
|
describe('installGitHook', () => {
|
|
@@ -263,13 +243,13 @@ describe('installGitHook', () => {
|
|
|
263
243
|
const hookPath = path.join(hooksDir, 'pre-push');
|
|
264
244
|
const userHook = '#!/bin/sh\nrun_my_tests\n';
|
|
265
245
|
fs.writeFileSync(hookPath, userHook);
|
|
266
|
-
installGitHook(hooksDir, 'pre-push', buildPrePushHook('
|
|
246
|
+
installGitHook(hooksDir, 'pre-push', buildPrePushHook('pnpm dlx @mmnto/cli'), TOTEM_PREPUSH_MARKER);
|
|
267
247
|
const written = fs.readFileSync(hookPath, 'utf-8');
|
|
268
248
|
expect(written).toContain('run_my_tests');
|
|
269
249
|
expect(written).toContain(TOTEM_PREPUSH_MARKER);
|
|
270
250
|
});
|
|
271
251
|
it('is idempotent — double install does not duplicate', () => {
|
|
272
|
-
const content = buildPrePushHook('
|
|
252
|
+
const content = buildPrePushHook('pnpm dlx @mmnto/cli');
|
|
273
253
|
installGitHook(hooksDir, 'pre-push', content, TOTEM_PREPUSH_MARKER);
|
|
274
254
|
installGitHook(hooksDir, 'pre-push', content, TOTEM_PREPUSH_MARKER);
|
|
275
255
|
const written = fs.readFileSync(path.join(hooksDir, 'pre-push'), 'utf-8');
|
|
@@ -291,7 +271,7 @@ describe('installGitHook', () => {
|
|
|
291
271
|
const hookPath = path.join(hooksDir, 'pre-push');
|
|
292
272
|
const pythonHook = '#!/usr/bin/env python3\nimport subprocess\n';
|
|
293
273
|
fs.writeFileSync(hookPath, pythonHook);
|
|
294
|
-
const result = installGitHook(hooksDir, 'pre-push', buildPrePushHook('
|
|
274
|
+
const result = installGitHook(hooksDir, 'pre-push', buildPrePushHook('pnpm dlx @mmnto/cli'), TOTEM_PREPUSH_MARKER);
|
|
295
275
|
expect(result).toBe('skipped-non-shell');
|
|
296
276
|
const written = fs.readFileSync(hookPath, 'utf-8');
|
|
297
277
|
expect(written).toBe(pythonHook); // File untouched
|
|
@@ -354,15 +334,15 @@ describe('generateHookHelpers', () => {
|
|
|
354
334
|
expect(fs.existsSync(path.join(hooksDir, 'pre-commit.sh'))).toBe(true);
|
|
355
335
|
expect(fs.existsSync(path.join(hooksDir, 'pre-push.sh'))).toBe(true);
|
|
356
336
|
});
|
|
357
|
-
it('generated scripts contain
|
|
337
|
+
it('generated scripts contain expected content', () => {
|
|
358
338
|
generateHookHelpers(tmpDir, 'pnpm dlx @mmnto/cli');
|
|
359
339
|
const hooksDir = path.join(tmpDir, '.totem', 'hooks');
|
|
360
340
|
const postMerge = fs.readFileSync(path.join(hooksDir, 'post-merge.sh'), 'utf-8');
|
|
361
341
|
expect(postMerge).toContain('command -v totem');
|
|
362
342
|
expect(postMerge).toContain('$TOTEM_CMD');
|
|
363
343
|
const prePush = fs.readFileSync(path.join(hooksDir, 'pre-push.sh'), 'utf-8');
|
|
364
|
-
expect(prePush).toContain(
|
|
365
|
-
expect(prePush).toContain('
|
|
344
|
+
expect(prePush).toContain(TOTEM_PREPUSH_MARKER);
|
|
345
|
+
expect(prePush).toContain('verify-manifest');
|
|
366
346
|
});
|
|
367
347
|
it('is idempotent — calling twice does not error', () => {
|
|
368
348
|
generateHookHelpers(tmpDir, 'pnpm dlx @mmnto/cli');
|
|
@@ -585,8 +565,12 @@ describe('upgradePrePushHookIfNeeded', () => {
|
|
|
585
565
|
});
|
|
586
566
|
/**
|
|
587
567
|
* Helper: extract the totem block from a hook file and compare it against
|
|
588
|
-
* the canonical output of buildPrePushHook() (shebang stripped, trimmed).
|
|
568
|
+
* the canonical output of buildPrePushHook('pnpm dlx @mmnto/cli') (shebang stripped, trimmed).
|
|
589
569
|
* Catches stale shell fragments or splice boundary bugs that toContain would miss.
|
|
570
|
+
*
|
|
571
|
+
* The new stateless format has TWO top-level if/fi blocks (resolve block +
|
|
572
|
+
* guard block). We track to the second balanced fi at depth 0 to capture both.
|
|
573
|
+
* Old single-block hooks are captured at the first balanced fi.
|
|
590
574
|
*/
|
|
591
575
|
function extractTotemBlock(hookContent) {
|
|
592
576
|
const markerIdx = hookContent.indexOf(`# ${TOTEM_PREPUSH_MARKER}`);
|
|
@@ -597,6 +581,7 @@ describe('upgradePrePushHookIfNeeded', () => {
|
|
|
597
581
|
let depth = 0;
|
|
598
582
|
let endOffset = -1;
|
|
599
583
|
let firstIfFound = false;
|
|
584
|
+
let balancedCount = 0;
|
|
600
585
|
let match;
|
|
601
586
|
while ((match = ifFiPattern.exec(afterMarker)) !== null) {
|
|
602
587
|
const keyword = match[1].trim();
|
|
@@ -609,8 +594,12 @@ describe('upgradePrePushHookIfNeeded', () => {
|
|
|
609
594
|
depth--;
|
|
610
595
|
}
|
|
611
596
|
if (firstIfFound && depth === 0) {
|
|
597
|
+
balancedCount++;
|
|
612
598
|
endOffset = match.index + match[0].length;
|
|
613
|
-
|
|
599
|
+
// New format has 2 top-level blocks; old format has 1.
|
|
600
|
+
// Stop after finding the block count that matches the canonical hook.
|
|
601
|
+
if (balancedCount >= 2)
|
|
602
|
+
break;
|
|
614
603
|
}
|
|
615
604
|
}
|
|
616
605
|
if (endOffset === -1)
|
|
@@ -619,12 +608,12 @@ describe('upgradePrePushHookIfNeeded', () => {
|
|
|
619
608
|
}
|
|
620
609
|
/** Canonical totem block: shebang stripped, trimmed — the expected upgrade output. */
|
|
621
610
|
function expectedTotemBlock() {
|
|
622
|
-
return buildPrePushHook(
|
|
611
|
+
return buildPrePushHook(getFallbackCommand(tmpDir))
|
|
623
612
|
.replace(/^#!\/bin\/sh\n/, '')
|
|
624
613
|
.trim();
|
|
625
614
|
}
|
|
626
|
-
it('upgrades old hook
|
|
627
|
-
// Install an old-style hook that
|
|
615
|
+
it('upgrades old command-executing hook to stateless format', () => {
|
|
616
|
+
// Install an old-style hook that executes $TOTEM_CMD lint
|
|
628
617
|
const hooksDir = path.join(tmpDir, '.git', 'hooks');
|
|
629
618
|
fs.mkdirSync(hooksDir, { recursive: true });
|
|
630
619
|
const oldHook = `#!/bin/sh
|
|
@@ -642,8 +631,11 @@ fi
|
|
|
642
631
|
const upgraded = upgradePrePushHookIfNeeded(tmpDir);
|
|
643
632
|
expect(upgraded).toBe(true);
|
|
644
633
|
const content = fs.readFileSync(path.join(hooksDir, 'pre-push'), 'utf-8');
|
|
645
|
-
expect(content).toContain('
|
|
634
|
+
expect(content).toContain('verify-manifest');
|
|
635
|
+
expect(content).toContain('$TOTEM_CMD lint');
|
|
646
636
|
expect(content).toContain(TOTEM_PREPUSH_MARKER);
|
|
637
|
+
expect(content).not.toContain('.lint-passed');
|
|
638
|
+
expect(content).not.toContain('.target-globs');
|
|
647
639
|
// Full block comparison: extracted totem block must match canonical output
|
|
648
640
|
const actual = extractTotemBlock(content);
|
|
649
641
|
expect(actual).toBe(expectedTotemBlock());
|
|
@@ -658,7 +650,7 @@ fi
|
|
|
658
650
|
const content = fs.readFileSync(path.join(hooksDir, 'pre-push'), 'utf-8');
|
|
659
651
|
expect(content).toBe(userHook); // File untouched
|
|
660
652
|
});
|
|
661
|
-
it('skips hook that already
|
|
653
|
+
it('skips hook that already uses stateless format', () => {
|
|
662
654
|
// Install the current-version hook via non-interactive installer
|
|
663
655
|
installHooksNonInteractive(tmpDir);
|
|
664
656
|
const hooksDir = path.join(tmpDir, '.git', 'hooks');
|
|
@@ -700,8 +692,10 @@ fi
|
|
|
700
692
|
const upgraded = upgradePrePushHookIfNeeded(tmpDir);
|
|
701
693
|
expect(upgraded).toBe(true);
|
|
702
694
|
const content = fs.readFileSync(path.join(hooksDir, 'pre-push'), 'utf-8');
|
|
703
|
-
// New totem block should
|
|
704
|
-
expect(content).toContain('
|
|
695
|
+
// New totem block should use stateless format
|
|
696
|
+
expect(content).toContain('verify-manifest');
|
|
697
|
+
expect(content).toContain('$TOTEM_CMD lint');
|
|
698
|
+
expect(content).not.toContain('.lint-passed');
|
|
705
699
|
// User content should be preserved
|
|
706
700
|
expect(content).toContain('curl -X POST https://hooks.example.com/deploy');
|
|
707
701
|
expect(content).toContain('My custom deploy notification');
|
|
@@ -787,5 +781,77 @@ fi
|
|
|
787
781
|
const actual = extractTotemBlock(content);
|
|
788
782
|
expect(actual).toBe(expectedTotemBlock());
|
|
789
783
|
});
|
|
784
|
+
it('upgrades old flag-checking hook to stateless format', () => {
|
|
785
|
+
const hooksDir = path.join(tmpDir, '.git', 'hooks');
|
|
786
|
+
fs.mkdirSync(hooksDir, { recursive: true });
|
|
787
|
+
// Simulate the previous flag-checking format that used .lint-passed
|
|
788
|
+
const oldHook = `#!/bin/sh
|
|
789
|
+
# ${TOTEM_PREPUSH_MARKER} — fast read-only checkpoint.
|
|
790
|
+
# Override with: git push --no-verify
|
|
791
|
+
|
|
792
|
+
if [ -f ".totem/compiled-rules.json" ]; then
|
|
793
|
+
if [ ! -f ".totem/cache/.lint-passed" ]; then
|
|
794
|
+
echo "[totem] Push blocked: lint has not passed." >&2
|
|
795
|
+
exit 1
|
|
796
|
+
fi
|
|
797
|
+
LINT_SHA=$(cat .totem/cache/.lint-passed 2>/dev/null | tr -d '[:space:]')
|
|
798
|
+
HEAD_SHA=$(git rev-parse HEAD 2>/dev/null)
|
|
799
|
+
if [ "$LINT_SHA" != "$HEAD_SHA" ]; then
|
|
800
|
+
exit 1
|
|
801
|
+
fi
|
|
802
|
+
fi
|
|
803
|
+
`;
|
|
804
|
+
fs.writeFileSync(path.join(hooksDir, 'pre-push'), oldHook);
|
|
805
|
+
const upgraded = upgradePrePushHookIfNeeded(tmpDir);
|
|
806
|
+
expect(upgraded).toBe(true);
|
|
807
|
+
const content = fs.readFileSync(path.join(hooksDir, 'pre-push'), 'utf-8');
|
|
808
|
+
expect(content).toContain('verify-manifest');
|
|
809
|
+
expect(content).toContain('$TOTEM_CMD lint');
|
|
810
|
+
expect(content).not.toContain('.lint-passed');
|
|
811
|
+
// Full block comparison
|
|
812
|
+
const actual = extractTotemBlock(content);
|
|
813
|
+
expect(actual).toBe(expectedTotemBlock());
|
|
814
|
+
});
|
|
815
|
+
it('upgrades hook with auto-refresh and $TOTEM_CMD to stateless format', () => {
|
|
816
|
+
const hooksDir = path.join(tmpDir, '.git', 'hooks');
|
|
817
|
+
fs.mkdirSync(hooksDir, { recursive: true });
|
|
818
|
+
// Simulate a hook with the auto-refresh logic still using $TOTEM_CMD
|
|
819
|
+
const oldHook = `#!/bin/sh
|
|
820
|
+
# ${TOTEM_PREPUSH_MARKER} — run compiled rules before push.
|
|
821
|
+
# Override with: git push --no-verify
|
|
822
|
+
|
|
823
|
+
if [ -f ".totem/compiled-rules.json" ]; then
|
|
824
|
+
TOTEM_CMD="totem"
|
|
825
|
+
if [ -n "$TOTEM_CMD" ]; then
|
|
826
|
+
if ! $TOTEM_CMD lint; then
|
|
827
|
+
exit 1
|
|
828
|
+
fi
|
|
829
|
+
fi
|
|
830
|
+
|
|
831
|
+
if [ -f ".totem/cache/.shield-passed" ] && [ -n "$TOTEM_CMD" ]; then
|
|
832
|
+
SHIELD_SHA=$(cat .totem/cache/.shield-passed | tr -d '[:space:]')
|
|
833
|
+
HEAD_SHA=$(git rev-parse HEAD)
|
|
834
|
+
if [ "$SHIELD_SHA" != "$HEAD_SHA" ]; then
|
|
835
|
+
echo "[totem] Shield flag stale. Auto-refreshing..."
|
|
836
|
+
if ! $TOTEM_CMD review; then
|
|
837
|
+
echo "[totem] Review auto-refresh failed. Fix issues and retry."
|
|
838
|
+
exit 1
|
|
839
|
+
fi
|
|
840
|
+
fi
|
|
841
|
+
fi
|
|
842
|
+
fi
|
|
843
|
+
`;
|
|
844
|
+
fs.writeFileSync(path.join(hooksDir, 'pre-push'), oldHook);
|
|
845
|
+
const upgraded = upgradePrePushHookIfNeeded(tmpDir);
|
|
846
|
+
expect(upgraded).toBe(true);
|
|
847
|
+
const content = fs.readFileSync(path.join(hooksDir, 'pre-push'), 'utf-8');
|
|
848
|
+
expect(content).toContain('verify-manifest');
|
|
849
|
+
expect(content).toContain('$TOTEM_CMD lint');
|
|
850
|
+
expect(content).not.toContain('.lint-passed');
|
|
851
|
+
expect(content).not.toContain('.shield-passed');
|
|
852
|
+
// Full block comparison
|
|
853
|
+
const actual = extractTotemBlock(content);
|
|
854
|
+
expect(actual).toBe(expectedTotemBlock());
|
|
855
|
+
});
|
|
790
856
|
});
|
|
791
857
|
//# sourceMappingURL=install-hooks.test.js.map
|