@domandigital/craft 0.22.1 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/CHARACTER.md +5 -3
- package/COPY.md +25 -6
- package/dist/{audit-CDMZ6JHT.js → audit-CRTC7JSF.js} +3 -3
- package/dist/audit.cjs +108 -6
- package/dist/audit.js +108 -6
- package/dist/{chunk-MLYHSPF7.js → chunk-3LCBLDAO.js} +7 -2
- package/dist/{chunk-KH56TEFK.js → chunk-3LHIKF5L.js} +5 -5
- package/dist/{chunk-IAU4ZAIU.js → chunk-4NON4PVK.js} +2 -2
- package/dist/{chunk-D6TAYXOS.js → chunk-A7KUKNX6.js} +1 -1
- package/dist/{chunk-WTR77PEM.js → chunk-KGEJ2TGT.js} +14 -14
- package/dist/{chunk-NV6FKMID.js → chunk-KIBDFRHT.js} +102 -5
- package/dist/{chunk-JT2NLOQI.js → chunk-OTQQTXXK.js} +4 -4
- package/dist/{chunk-ICEG4S56.js → chunk-Y2LGYHJ5.js} +5 -5
- package/dist/{cli-IQ5U76AZ.js → cli-E2CFVIGZ.js} +5 -5
- package/dist/{cli-4PXDNTZX.js → cli-HWGSNSDD.js} +4 -4
- package/dist/{cli-3QV4FKM4.js → cli-IYRJZWMN.js} +6 -6
- package/dist/{cli-FKWJF4V4.js → cli-RHU3MAZY.js} +3 -3
- package/dist/{cli-7PPDBN6N.js → cli-ROVZDHVR.js} +5 -5
- package/dist/{cli-223CUNU3.js → cli-TPV2EIIN.js} +9 -9
- package/dist/{cli-CQUORKMC.js → cli-X3RZE4GM.js} +6 -6
- package/dist/{cli-6SMNHOCJ.js → cli-YRRBBU27.js} +1 -1
- package/dist/cli.js +3 -3
- package/dist/index.cjs +108 -6
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +108 -6
- package/dist/{viewports-cli-H6UIUMBC.js → viewports-cli-EAUVLHFJ.js} +3 -3
- package/package.json +1 -1
- package/word-lists.json +1 -1
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
holdHouseBlocks,
|
|
11
11
|
houseRule,
|
|
12
12
|
scanSource
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-3LCBLDAO.js";
|
|
14
14
|
import {
|
|
15
15
|
compareCompetitor,
|
|
16
16
|
compareFacts,
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
pageCopy,
|
|
22
22
|
protectedFacts,
|
|
23
23
|
visibleText
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-KIBDFRHT.js";
|
|
25
25
|
|
|
26
26
|
// src/character/config.ts
|
|
27
27
|
var DEFAULT_IGNORE = [".claude", ".agents", ".cursor"];
|
|
@@ -622,7 +622,7 @@ async function pageSnapshot(target, cwd) {
|
|
|
622
622
|
return readSnapshot(JSON.parse(readFileSync(local, "utf8")), target);
|
|
623
623
|
}
|
|
624
624
|
if (!/^https?:\/\//.test(target)) throw new Error(`${target} is neither a URL nor a snapshot file`);
|
|
625
|
-
const { snapshotUrl } = await import("./audit-
|
|
625
|
+
const { snapshotUrl } = await import("./audit-CRTC7JSF.js");
|
|
626
626
|
return snapshotUrl(target);
|
|
627
627
|
}
|
|
628
628
|
async function briefFor(flags, cwd) {
|
|
@@ -633,7 +633,7 @@ async function briefFor(flags, cwd) {
|
|
|
633
633
|
if (typeof brief === "string" && brief.trim()) return brief;
|
|
634
634
|
} else if (flags.direction) throw new Error(`no such file: ${flags.direction}`);
|
|
635
635
|
if (flags.null) {
|
|
636
|
-
const { loadNull } = await import("./cli-
|
|
636
|
+
const { loadNull } = await import("./cli-HWGSNSDD.js");
|
|
637
637
|
return loadNull(flags.null, cwd).brief;
|
|
638
638
|
}
|
|
639
639
|
return void 0;
|
|
@@ -659,37 +659,37 @@ async function compareWithCompetitor(flags, io) {
|
|
|
659
659
|
function run(argv, io) {
|
|
660
660
|
const [command, ...rest] = argv;
|
|
661
661
|
if (command === "direction") {
|
|
662
|
-
return import("./cli-
|
|
662
|
+
return import("./cli-E2CFVIGZ.js").then((m) => m.runDirection(rest, io));
|
|
663
663
|
}
|
|
664
664
|
if (command === "report" || command === "retrofit") {
|
|
665
|
-
return import("./cli-
|
|
665
|
+
return import("./cli-TPV2EIIN.js").then((m) => m.runReport(command, rest, io));
|
|
666
666
|
}
|
|
667
667
|
if (command === "register") {
|
|
668
|
-
return import("./cli-
|
|
668
|
+
return import("./cli-YRRBBU27.js").then((m) => m.runRegister(rest, io));
|
|
669
669
|
}
|
|
670
670
|
if (command === "estate") {
|
|
671
|
-
return import("./cli-
|
|
671
|
+
return import("./cli-X3RZE4GM.js").then((m) => m.runEstate(rest, io));
|
|
672
672
|
}
|
|
673
673
|
if (command === "null") {
|
|
674
|
-
return import("./cli-
|
|
674
|
+
return import("./cli-HWGSNSDD.js").then((m) => m.runNull(rest, io));
|
|
675
675
|
}
|
|
676
676
|
if (command === "calibrate") {
|
|
677
|
-
return import("./cli-
|
|
677
|
+
return import("./cli-ROVZDHVR.js").then((m) => m.runCalibrate(rest, io));
|
|
678
678
|
}
|
|
679
679
|
if (command === "tells" && rest[0] === "harvest") {
|
|
680
|
-
return import("./cli-
|
|
680
|
+
return import("./cli-HWGSNSDD.js").then((m) => m.runHarvest(rest, io)).catch((error) => {
|
|
681
681
|
io.err(`craft: ${error.message}`);
|
|
682
682
|
return 2;
|
|
683
683
|
});
|
|
684
684
|
}
|
|
685
685
|
if (command === "phone-first") {
|
|
686
|
-
return import("./cli-
|
|
686
|
+
return import("./cli-RHU3MAZY.js").then((m) => m.runPhoneFirst(rest, io));
|
|
687
687
|
}
|
|
688
688
|
if (command === "viewports") {
|
|
689
|
-
return import("./viewports-cli-
|
|
689
|
+
return import("./viewports-cli-EAUVLHFJ.js").then((m) => m.runViewports(rest, io));
|
|
690
690
|
}
|
|
691
691
|
if (command === "snapshot" || command === "audit") {
|
|
692
|
-
return import("./cli-
|
|
692
|
+
return import("./cli-IYRJZWMN.js").then((m) => m.runAudit(command, rest, io));
|
|
693
693
|
}
|
|
694
694
|
if (!command || command === "help" || command === "--help" || command === "-h") {
|
|
695
695
|
io.out(HELP);
|
|
@@ -723,8 +723,33 @@ var NEGATION = [
|
|
|
723
723
|
/\b(?:is|are|was|were)(?:n’t|n't)\b[^.;]{2,60},\s*(?:it|they|that|this)(?:’s|'s|’re|'re)\b/i,
|
|
724
724
|
/\bless\s+about\b[^.;]{2,50}\bmore\s+about\b/i,
|
|
725
725
|
// parallel participle, no repeated subject: "dispatched from here, not shipped in from Seoul"
|
|
726
|
-
/\b\w{3,}ed\b[^,.;:]{0,40},\s*not\s+\w{3,}ed\b/i
|
|
726
|
+
/\b\w{3,}ed\b[^,.;:]{0,40},\s*not\s+\w{3,}ed\b/i,
|
|
727
|
+
// parallel gerund: "renting Microsoft's services, not running servers". The
|
|
728
|
+
// -thing pronouns and the -ing prepositions are not verbs.
|
|
729
|
+
/\b(?!(?:some|no|any|every)thing\b)\w{3,}ing\b[^,.;:]{0,40},\s*not\s+(?!(?:some|no|any|every)thing\b|(?:during|according|including|regarding|morning|evening)\b)\w{3,}ing\b/i
|
|
727
730
|
];
|
|
731
|
+
var SOFT_CONTRAST = [
|
|
732
|
+
// ", not registration." closing the sentence. Not when "not" negates what follows.
|
|
733
|
+
/,\s*not\s+(?!(?:yet|least|only|just|merely|simply|to|all|always|even|ever|necessarily|really|quite|exactly|enough|sure|that|because|so|much|many|once|often|every|including|counting|unlike|until|if|when|unless|though|although|or|and|but)\b)(?:(?:a|an|the|your|our|their|its|his|her|my|any)\s+)?[\w'’-]+(?:\s+[\w'’-]+){0,3}(?=\s*(?:[.!?)"”]|$))/im,
|
|
734
|
+
// "the league's own threshold, not a legal one"
|
|
735
|
+
/,\s*not\s+(?:a|an|the)\s+(?:[\w'’-]+\s+)?one\b/i,
|
|
736
|
+
// "renting computing over the internet instead of owning it"
|
|
737
|
+
/\b(?!(?:some|no|any|every)thing\b)\w{3,}ing\b[^.;:!?]{0,60}?\binstead\s+of\s+(?!(?:some|no|any|every)thing\b)\w{3,}ing\b/i
|
|
738
|
+
];
|
|
739
|
+
var PAIR_TOKEN = String.raw`(?:[£$€]?\d[\d,.]*%?|[\w'’£$€-]+)`;
|
|
740
|
+
var PAIR_NUMBER = String.raw`(?:one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|\d[\d,]*)`;
|
|
741
|
+
var PARALLEL_PAIR = [
|
|
742
|
+
// anaphora: "same site, same £8,000", "per user, per month". "No X, no Y" is no-x-no-y's.
|
|
743
|
+
new RegExp(String.raw`\b(?!no\b)(\w+)[ \t]+${PAIR_TOKEN},[ \t]+\1[ \t]+${PAIR_TOKEN}(?=[ \t]*(?:[.!?]|$))`, "im"),
|
|
744
|
+
// isocolon on its own line: "One form, seven workflows"
|
|
745
|
+
new RegExp(String.raw`^[ \t]*(?:#{1,6}[ \t]+)?${PAIR_NUMBER}[ \t]+[\w'’-]+,[ \t]+${PAIR_NUMBER}[ \t]+[\w'’-]+[.!]?[ \t]*$`, "im"),
|
|
746
|
+
// a verbless list as a tagline: "Service account, match-day reminders, analytics."
|
|
747
|
+
/^[ \t]*(?:#{1,6}[ \t]+)?[A-Z][\w'’-]*(?:[ \t]+(?!(?:and|or)\b)[\w'’-]+){0,2}(?:,[ \t]+(?!(?:and|or)\b)[\w'’-]+(?:[ \t]+(?!(?:and|or)\b)[\w'’-]+){0,2}){2,3}\.[ \t]*$/m
|
|
748
|
+
];
|
|
749
|
+
var alreadyBlocked = (block, match, index) => {
|
|
750
|
+
const sentence = block.text.slice(Math.max(0, index - 80), index + match.length);
|
|
751
|
+
return NEGATION.some((pattern) => pattern.test(sentence));
|
|
752
|
+
};
|
|
728
753
|
var DATA_ABSENCE = /\b(?:yet|found|available|configured|selected|assigned|scheduled|recorded|on file|to show|to display|results|match|matches|matching|data|in this period)\b/i;
|
|
729
754
|
var SIGNED_IN = /(?:^|\/)(?:admin|portal|dashboard|embedded)\//;
|
|
730
755
|
function lineAround(text, index) {
|
|
@@ -1105,7 +1130,7 @@ var COPY_TELLS = [
|
|
|
1105
1130
|
generation: 2,
|
|
1106
1131
|
severity: "warn",
|
|
1107
1132
|
surface: "copy",
|
|
1108
|
-
why: "'It's not just a haircut, it's an experience', 'dispatched from here, not shipped in': the contrast-and-reveal template is the most recognisable construction in generated copy.",
|
|
1133
|
+
why: "'It's not just a haircut, it's an experience', 'dispatched from here, not shipped in': the contrast-and-reveal template (correctio, antithesis: see COPY.md) is the most recognisable construction in generated copy.",
|
|
1109
1134
|
fix: "Say the positive claim and drop the contrast.",
|
|
1110
1135
|
detect: phrases(NEGATION, quoted, allText),
|
|
1111
1136
|
fixtures: {
|
|
@@ -1116,12 +1141,54 @@ var COPY_TELLS = [
|
|
|
1116
1141
|
f("content/home.md", "Hairdressing isn't a job, it's art."),
|
|
1117
1142
|
f("content/home.md", "It is less about the tools and more about the eye."),
|
|
1118
1143
|
f("content/home.md", "Order today and it's dispatched from here, not shipped in from Seoul."),
|
|
1119
|
-
f("app/offer.tsx", `export const outcome = "The whole path, not just the ads.";`)
|
|
1144
|
+
f("app/offer.tsx", `export const outcome = "The whole path, not just the ads.";`),
|
|
1145
|
+
// From a 92EL report that passed the gate, October 2026.
|
|
1146
|
+
f("content/report.md", "These are reported, not assumed to pass."),
|
|
1147
|
+
f("content/report.md", "The deletion is proposed, not automated."),
|
|
1148
|
+
f("content/report.md", "For 92EL, that means renting Microsoft's services, not running servers."),
|
|
1149
|
+
f("content/home.md", "Your team should spend time delivering services, not managing bookings.")
|
|
1120
1150
|
],
|
|
1121
1151
|
pass: [
|
|
1122
1152
|
f("content/home.md", "A haircut, a hot towel and a straight-razor finish."),
|
|
1123
1153
|
f("content/home.md", "They are cosmetics, not medicines."),
|
|
1124
|
-
f("content/home.md", "The box arrived red, not led astray by a dented corner.")
|
|
1154
|
+
f("content/home.md", "The box arrived red, not led astray by a dented corner."),
|
|
1155
|
+
f("content/home.md", "We fix boilers in the morning, not in the evening."),
|
|
1156
|
+
f("content/report.md", "Players never open the lists."),
|
|
1157
|
+
f("content/report.md", "It is not tested at national scale."),
|
|
1158
|
+
f("content/report.md", "Do not invent anything."),
|
|
1159
|
+
f("content/report.md", "Nothing is copied by hand."),
|
|
1160
|
+
f("content/report.md", "Results are checked by a person and not yet automated.")
|
|
1161
|
+
]
|
|
1162
|
+
}
|
|
1163
|
+
},
|
|
1164
|
+
{
|
|
1165
|
+
id: "trailing-contrast",
|
|
1166
|
+
name: "Trailing contrast",
|
|
1167
|
+
generation: 2,
|
|
1168
|
+
severity: "warn",
|
|
1169
|
+
surface: "copy",
|
|
1170
|
+
why: "'Edge matters for game servers, not registration', 'the league's own threshold, not a legal one', 'renting computing instead of owning it': the contrast template (correctio, antithesis: see COPY.md) in its softer forms. A genuine disclaimer has the same shape, so a person decides.",
|
|
1171
|
+
fix: "Say the positive claim on its own: 'Edge matters for game servers.' Keep the contrast only where the reader would otherwise assume the other thing, such as a legal disclaimer.",
|
|
1172
|
+
detect: phrases(SOFT_CONTRAST, quoted, allText, alreadyBlocked),
|
|
1173
|
+
fixtures: {
|
|
1174
|
+
flag: [
|
|
1175
|
+
// From a 92EL report that passed the gate, October 2026.
|
|
1176
|
+
f("content/report.md", "Edge matters for game servers, not registration."),
|
|
1177
|
+
f("content/report.md", "Age 18 is the league's own threshold, not a legal one."),
|
|
1178
|
+
f("content/report.md", "Cloud computing means renting computing over the internet instead of owning it."),
|
|
1179
|
+
f("content/home.md", "Real Square data, not a vanity metric.")
|
|
1180
|
+
],
|
|
1181
|
+
pass: [
|
|
1182
|
+
f("content/home.md", "Rewire, retile and replumb a bathroom in five days."),
|
|
1183
|
+
f("content/report.md", "Players never open the lists."),
|
|
1184
|
+
f("content/report.md", "It is not tested at national scale."),
|
|
1185
|
+
f("content/report.md", "Do not invent anything."),
|
|
1186
|
+
f("content/report.md", "Nothing is copied by hand."),
|
|
1187
|
+
f("content/report.md", "Results are checked by a person and not yet automated."),
|
|
1188
|
+
f("content/home.md", "Pay by card, not to mention Apple Pay."),
|
|
1189
|
+
f("content/home.md", "Card instead of cash is fine."),
|
|
1190
|
+
// The blocking rule reports this one; it is not reported twice.
|
|
1191
|
+
f("content/report.md", "The deletion is proposed, not automated.")
|
|
1125
1192
|
]
|
|
1126
1193
|
}
|
|
1127
1194
|
},
|
|
@@ -1171,7 +1238,7 @@ var COPY_TELLS = [
|
|
|
1171
1238
|
generation: 2,
|
|
1172
1239
|
severity: "warn",
|
|
1173
1240
|
surface: "copy",
|
|
1174
|
-
why: "Three fragments in a row ('Fast. Friendly. Local.' or 'No fuss. No jargon. Just results.') is the second wave's favourite rhythm.",
|
|
1241
|
+
why: "Three fragments in a row ('Fast. Friendly. Local.' or 'No fuss. No jargon. Just results.') (a tricolon in asyndeton: see COPY.md) is the second wave's favourite rhythm.",
|
|
1175
1242
|
fix: "Write one sentence that says which of the three is true, and how you know.",
|
|
1176
1243
|
// The fragments share one paragraph: "You don't. Again.", a blank line, then "It's frustrating." is two beats, not three.
|
|
1177
1244
|
detect: phrases([/(?:\b[A-Z][\w'’-]*(?:[ \t]+[\w'’-]+){0,2}[.!](?:[ \t]+|[ \t]*\n(?![ \t]*\n)[ \t]*)){2}[A-Z][\w'’-]*(?:[ \t]+[\w'’-]+){0,2}[.!](?=\s|$)/], quoted),
|
|
@@ -1183,6 +1250,36 @@ var COPY_TELLS = [
|
|
|
1183
1250
|
]
|
|
1184
1251
|
}
|
|
1185
1252
|
},
|
|
1253
|
+
{
|
|
1254
|
+
id: "parallel-pair",
|
|
1255
|
+
name: "Verbless parallel pair",
|
|
1256
|
+
generation: 2,
|
|
1257
|
+
severity: "warn",
|
|
1258
|
+
surface: "copy",
|
|
1259
|
+
why: "'One form, seven workflows', 'Same site, same \xA38,000': two matched fragments with no verb (isocolon, often with anaphora or asyndeton: see COPY.md), the staccato triplet's two-part cousin. It sounds decided and says less than a sentence would.",
|
|
1260
|
+
fix: "Write the sentence the pair stands for: 'One form and seven workflows replace the spreadsheets.' A short label on a slide can stay if a person reads it and it earns its place.",
|
|
1261
|
+
detect: phrases(PARALLEL_PAIR, quoted),
|
|
1262
|
+
fixtures: {
|
|
1263
|
+
flag: [
|
|
1264
|
+
// From 92EL deliverables, October 2026.
|
|
1265
|
+
f("content/deck.md", "# One form, seven workflows"),
|
|
1266
|
+
f("content/deck.md", "One form, seven workflows."),
|
|
1267
|
+
f("content/deck.md", "Same site, same \xA38,000."),
|
|
1268
|
+
f("content/deck.md", "Pay per user, per month"),
|
|
1269
|
+
f("content/deck.md", "Service account, match-day reminders, analytics.")
|
|
1270
|
+
],
|
|
1271
|
+
pass: [
|
|
1272
|
+
f("content/deck.md", "Forms, SharePoint, Outlook and Teams"),
|
|
1273
|
+
f("content/deck.md", "One form and seven workflows replace 92EL's spreadsheets and email chains."),
|
|
1274
|
+
f("content/deck.md", "PulseCloud Technologies, for 92EL senior management"),
|
|
1275
|
+
f("content/deck.md", "41 of 50 passed, 12 after a fix."),
|
|
1276
|
+
f("content/deck.md", "Pay monthly for each user"),
|
|
1277
|
+
f("content/home.md", "We fix boilers the same day, and we tell you the price before we start."),
|
|
1278
|
+
// The blocking no-x-no-y reports this one.
|
|
1279
|
+
f("content/home.md", "We reply within a day. No obligation, no spam.")
|
|
1280
|
+
]
|
|
1281
|
+
}
|
|
1282
|
+
},
|
|
1186
1283
|
{
|
|
1187
1284
|
id: "where-x-meets-y",
|
|
1188
1285
|
name: "'Where X meets Y'",
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
snapshotUrl,
|
|
3
3
|
snapshotUrls
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-A7KUKNX6.js";
|
|
5
5
|
import {
|
|
6
6
|
describeTypicality,
|
|
7
7
|
loadNull
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-3LHIKF5L.js";
|
|
9
9
|
import {
|
|
10
10
|
SOURCE_FILE,
|
|
11
11
|
finish,
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
parseFlags,
|
|
15
15
|
prepareReport,
|
|
16
16
|
readPaths
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-KGEJ2TGT.js";
|
|
18
18
|
import {
|
|
19
19
|
toJson
|
|
20
20
|
} from "./chunk-QIEDBL4J.js";
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
rhythmOf,
|
|
29
29
|
scanSource,
|
|
30
30
|
typicality
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-3LCBLDAO.js";
|
|
32
32
|
|
|
33
33
|
// src/audit/cli.ts
|
|
34
34
|
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
formatDirectionMatches,
|
|
5
5
|
summariseDirection,
|
|
6
6
|
validateDirection
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-4NON4PVK.js";
|
|
8
8
|
import {
|
|
9
9
|
loadNull
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-3LHIKF5L.js";
|
|
11
11
|
import {
|
|
12
12
|
parseFlags
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-KGEJ2TGT.js";
|
|
14
14
|
import {
|
|
15
15
|
toJson
|
|
16
16
|
} from "./chunk-QIEDBL4J.js";
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
rhythmOf,
|
|
31
31
|
shapeName,
|
|
32
32
|
temperatureName
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-3LCBLDAO.js";
|
|
34
34
|
|
|
35
35
|
// src/estate/cli.ts
|
|
36
36
|
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
@@ -133,7 +133,7 @@ async function snapshotOf(target, cwd) {
|
|
|
133
133
|
return snap;
|
|
134
134
|
}
|
|
135
135
|
if (!/^https?:\/\//.test(target)) throw new Error(`${target} is neither a URL, a snapshot file, nor a site in the register`);
|
|
136
|
-
const { snapshotUrl } = await import("./audit-
|
|
136
|
+
const { snapshotUrl } = await import("./audit-CRTC7JSF.js");
|
|
137
137
|
return snapshotUrl(target);
|
|
138
138
|
}
|
|
139
139
|
var line = (distance, sibling, shared) => `${distance.toFixed(2)}${sibling ? " SIBLING" : ""}${shared.length ? ` shares ${shared.join(", ")}` : ""}`;
|
|
@@ -19,10 +19,10 @@ import {
|
|
|
19
19
|
checkReason,
|
|
20
20
|
researchPrompt,
|
|
21
21
|
validateDirection
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-4NON4PVK.js";
|
|
23
23
|
import {
|
|
24
24
|
parseFlags
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-KGEJ2TGT.js";
|
|
26
26
|
import {
|
|
27
27
|
toJson
|
|
28
28
|
} from "./chunk-QIEDBL4J.js";
|
|
@@ -38,8 +38,8 @@ import {
|
|
|
38
38
|
isCream,
|
|
39
39
|
oklchToRgb,
|
|
40
40
|
parseColour
|
|
41
|
-
} from "./chunk-
|
|
42
|
-
import "./chunk-
|
|
41
|
+
} from "./chunk-3LCBLDAO.js";
|
|
42
|
+
import "./chunk-KIBDFRHT.js";
|
|
43
43
|
import "./chunk-QYBAVU3P.js";
|
|
44
44
|
|
|
45
45
|
// src/direction/cli.ts
|
|
@@ -484,7 +484,7 @@ var readJson = (path) => JSON.parse(readFileSync(path, "utf8"));
|
|
|
484
484
|
async function snapshotFrom(target, cwd) {
|
|
485
485
|
if (!target) return void 0;
|
|
486
486
|
if (/^https?:\/\//.test(target)) {
|
|
487
|
-
const { snapshotUrl } = await import("./audit-
|
|
487
|
+
const { snapshotUrl } = await import("./audit-CRTC7JSF.js");
|
|
488
488
|
return snapshotUrl(target);
|
|
489
489
|
}
|
|
490
490
|
return readSnapshot(readJson(resolve(cwd, target)), target);
|
|
@@ -9,13 +9,13 @@ import {
|
|
|
9
9
|
runHarvest,
|
|
10
10
|
runNull,
|
|
11
11
|
serveDir
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-3LHIKF5L.js";
|
|
13
13
|
import "./chunk-OQXTQQAU.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-KGEJ2TGT.js";
|
|
15
15
|
import "./chunk-QIEDBL4J.js";
|
|
16
16
|
import "./chunk-WUACK2HX.js";
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-3LCBLDAO.js";
|
|
18
|
+
import "./chunk-KIBDFRHT.js";
|
|
19
19
|
import "./chunk-QYBAVU3P.js";
|
|
20
20
|
export {
|
|
21
21
|
describeTypicality,
|
|
@@ -4,16 +4,16 @@ import {
|
|
|
4
4
|
merge,
|
|
5
5
|
resolvePages,
|
|
6
6
|
runAudit
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-OTQQTXXK.js";
|
|
8
|
+
import "./chunk-A7KUKNX6.js";
|
|
9
9
|
import "./chunk-JYNXGCYZ.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-3LHIKF5L.js";
|
|
11
11
|
import "./chunk-OQXTQQAU.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-KGEJ2TGT.js";
|
|
13
13
|
import "./chunk-QIEDBL4J.js";
|
|
14
14
|
import "./chunk-WUACK2HX.js";
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-3LCBLDAO.js";
|
|
16
|
+
import "./chunk-KIBDFRHT.js";
|
|
17
17
|
import "./chunk-QYBAVU3P.js";
|
|
18
18
|
export {
|
|
19
19
|
describeComponents,
|
|
@@ -16,12 +16,12 @@ import {
|
|
|
16
16
|
import {
|
|
17
17
|
SOURCE_FILE,
|
|
18
18
|
readPaths
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-KGEJ2TGT.js";
|
|
20
20
|
import {
|
|
21
21
|
toJson
|
|
22
22
|
} from "./chunk-QIEDBL4J.js";
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-3LCBLDAO.js";
|
|
24
|
+
import "./chunk-KIBDFRHT.js";
|
|
25
25
|
import "./chunk-QYBAVU3P.js";
|
|
26
26
|
|
|
27
27
|
// src/phone/cli.ts
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
expandNullTargets,
|
|
6
6
|
loadNull
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-3LHIKF5L.js";
|
|
8
8
|
import "./chunk-OQXTQQAU.js";
|
|
9
9
|
import {
|
|
10
10
|
parseFlags
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-KGEJ2TGT.js";
|
|
12
12
|
import {
|
|
13
13
|
toJson
|
|
14
14
|
} from "./chunk-QIEDBL4J.js";
|
|
@@ -21,8 +21,8 @@ import {
|
|
|
21
21
|
fingerprint,
|
|
22
22
|
scanSource,
|
|
23
23
|
typicality
|
|
24
|
-
} from "./chunk-
|
|
25
|
-
import "./chunk-
|
|
24
|
+
} from "./chunk-3LCBLDAO.js";
|
|
25
|
+
import "./chunk-KIBDFRHT.js";
|
|
26
26
|
import {
|
|
27
27
|
SNAPSHOT_VERSION
|
|
28
28
|
} from "./chunk-QYBAVU3P.js";
|
|
@@ -188,7 +188,7 @@ async function runCalibrate(args, io) {
|
|
|
188
188
|
if (toTake.length) {
|
|
189
189
|
io.err(`craft calibrate: taking ${toTake.length} snapshot${toTake.length === 1 ? "" : "s"}`);
|
|
190
190
|
try {
|
|
191
|
-
const { snapshotUrls } = await import("./audit-
|
|
191
|
+
const { snapshotUrls } = await import("./audit-CRTC7JSF.js");
|
|
192
192
|
const results = await snapshotUrls(toTake.map((t) => t.url));
|
|
193
193
|
results.forEach((r, i) => {
|
|
194
194
|
const { entry, keep } = toTake[i];
|
|
@@ -3,21 +3,21 @@ import {
|
|
|
3
3
|
} from "./chunk-OKVHWXYV.js";
|
|
4
4
|
import {
|
|
5
5
|
merge
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-OTQQTXXK.js";
|
|
7
|
+
import "./chunk-A7KUKNX6.js";
|
|
8
8
|
import "./chunk-JYNXGCYZ.js";
|
|
9
9
|
import {
|
|
10
10
|
SIBLING_AT,
|
|
11
11
|
compareToEstate,
|
|
12
12
|
loadEstate
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-Y2LGYHJ5.js";
|
|
14
14
|
import {
|
|
15
15
|
PAGE_TYPES,
|
|
16
16
|
validateDirection
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-4NON4PVK.js";
|
|
18
18
|
import {
|
|
19
19
|
loadNull
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-3LHIKF5L.js";
|
|
21
21
|
import "./chunk-OQXTQQAU.js";
|
|
22
22
|
import {
|
|
23
23
|
COPY_FILE,
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
loadExceptions,
|
|
29
29
|
parseFlags,
|
|
30
30
|
readPaths
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-KGEJ2TGT.js";
|
|
32
32
|
import {
|
|
33
33
|
toJson
|
|
34
34
|
} from "./chunk-QIEDBL4J.js";
|
|
@@ -42,8 +42,8 @@ import {
|
|
|
42
42
|
fingerprint,
|
|
43
43
|
scanSource,
|
|
44
44
|
typicality
|
|
45
|
-
} from "./chunk-
|
|
46
|
-
import "./chunk-
|
|
45
|
+
} from "./chunk-3LCBLDAO.js";
|
|
46
|
+
import "./chunk-KIBDFRHT.js";
|
|
47
47
|
import "./chunk-QYBAVU3P.js";
|
|
48
48
|
|
|
49
49
|
// src/report/cli.ts
|
|
@@ -126,7 +126,7 @@ async function runReport(command, args, io) {
|
|
|
126
126
|
if (/\.json$/i.test(target2) && existsSync(local)) {
|
|
127
127
|
snap = readSnapshot(JSON.parse(readFileSync(local, "utf8")), target2);
|
|
128
128
|
} else {
|
|
129
|
-
const { snapshotUrl } = await import("./audit-
|
|
129
|
+
const { snapshotUrl } = await import("./audit-CRTC7JSF.js");
|
|
130
130
|
snap = await snapshotUrl(target2);
|
|
131
131
|
}
|
|
132
132
|
const fp = fingerprint(snap);
|
|
@@ -4,15 +4,15 @@ import {
|
|
|
4
4
|
formatPairs,
|
|
5
5
|
loadEstate,
|
|
6
6
|
runEstate
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-Y2LGYHJ5.js";
|
|
8
|
+
import "./chunk-4NON4PVK.js";
|
|
9
|
+
import "./chunk-3LHIKF5L.js";
|
|
10
10
|
import "./chunk-OQXTQQAU.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-KGEJ2TGT.js";
|
|
12
12
|
import "./chunk-QIEDBL4J.js";
|
|
13
13
|
import "./chunk-WUACK2HX.js";
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-3LCBLDAO.js";
|
|
15
|
+
import "./chunk-KIBDFRHT.js";
|
|
16
16
|
import "./chunk-QYBAVU3P.js";
|
|
17
17
|
export {
|
|
18
18
|
formatComponentPairs,
|
package/dist/cli.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
run
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-KGEJ2TGT.js";
|
|
5
5
|
import "./chunk-QIEDBL4J.js";
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-3LCBLDAO.js";
|
|
7
|
+
import "./chunk-KIBDFRHT.js";
|
|
8
8
|
import "./chunk-QYBAVU3P.js";
|
|
9
9
|
|
|
10
10
|
// src/cli.ts
|