paperlint 6.0.0 → 6.2.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/dist/adapters/latex/index.d.ts +1 -1
- package/dist/adapters/latex/index.d.ts.map +1 -1
- package/dist/adapters/latex/index.js +3 -2
- package/dist/adapters/latex/index.js.map +1 -1
- package/dist/adapters/latex/prose.d.ts +6 -1
- package/dist/adapters/latex/prose.d.ts.map +1 -1
- package/dist/adapters/latex/prose.js +142 -31
- package/dist/adapters/latex/prose.js.map +1 -1
- package/dist/adapters/mp4box/index.d.ts +4 -0
- package/dist/adapters/mp4box/index.d.ts.map +1 -0
- package/dist/adapters/mp4box/index.js +46 -0
- package/dist/adapters/mp4box/index.js.map +1 -0
- package/dist/adapters/node/index.d.ts +1 -0
- package/dist/adapters/node/index.d.ts.map +1 -1
- package/dist/adapters/node/index.js +1 -0
- package/dist/adapters/node/index.js.map +1 -1
- package/dist/adapters/node/list-dir.io.d.ts +3 -0
- package/dist/adapters/node/list-dir.io.d.ts.map +1 -0
- package/dist/adapters/node/list-dir.io.js +15 -0
- package/dist/adapters/node/list-dir.io.js.map +1 -0
- package/dist/adapters/png/index.d.ts +11 -0
- package/dist/adapters/png/index.d.ts.map +1 -0
- package/dist/adapters/png/index.js +21 -0
- package/dist/adapters/png/index.js.map +1 -0
- package/dist/adapters/srt/index.d.ts +4 -0
- package/dist/adapters/srt/index.d.ts.map +1 -0
- package/dist/adapters/srt/index.js +12 -0
- package/dist/adapters/srt/index.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +40 -22
- package/dist/cli.js.map +1 -1
- package/dist/domain/register.d.ts +96 -0
- package/dist/domain/register.d.ts.map +1 -0
- package/dist/domain/register.js +136 -0
- package/dist/domain/register.js.map +1 -0
- package/dist/domain/talk.d.ts +121 -0
- package/dist/domain/talk.d.ts.map +1 -0
- package/dist/domain/talk.js +121 -0
- package/dist/domain/talk.js.map +1 -0
- package/dist/domain/tex-document.d.ts +19 -0
- package/dist/domain/tex-document.d.ts.map +1 -1
- package/dist/domain/tex-document.js +8 -3
- package/dist/domain/tex-document.js.map +1 -1
- package/dist/lib/paper-config.d.ts +2 -0
- package/dist/lib/paper-config.d.ts.map +1 -1
- package/dist/lib/paper-config.js +3 -0
- package/dist/lib/paper-config.js.map +1 -1
- package/dist/paper-settings.d.ts +3 -0
- package/dist/paper-settings.d.ts.map +1 -1
- package/dist/paper-settings.js +15 -9
- package/dist/paper-settings.js.map +1 -1
- package/dist/ports/latex.d.ts +6 -1
- package/dist/ports/latex.d.ts.map +1 -1
- package/dist/ports/talk-media.d.ts +18 -0
- package/dist/ports/talk-media.d.ts.map +1 -0
- package/dist/ports/talk-media.js +2 -0
- package/dist/ports/talk-media.js.map +1 -0
- package/dist/presets.d.ts +6 -0
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +8 -9
- package/dist/presets.js.map +1 -1
- package/dist/register-bands.d.ts +37 -0
- package/dist/register-bands.d.ts.map +1 -0
- package/dist/register-bands.js +196 -0
- package/dist/register-bands.js.map +1 -0
- package/dist/register.d.ts +4 -2
- package/dist/register.d.ts.map +1 -1
- package/dist/register.js +6 -45
- package/dist/register.js.map +1 -1
- package/dist/talk-rules.d.ts +65 -0
- package/dist/talk-rules.d.ts.map +1 -0
- package/dist/talk-rules.js +451 -0
- package/dist/talk-rules.js.map +1 -0
- package/dist/tex-requirements.d.ts +9 -0
- package/dist/tex-requirements.d.ts.map +1 -1
- package/dist/tex-requirements.js +28 -6
- package/dist/tex-requirements.js.map +1 -1
- package/dist/tex-venue-rules.d.ts +1 -1
- package/dist/tex-venue-rules.d.ts.map +1 -1
- package/dist/tex-venue-rules.js.map +1 -1
- package/docs/configuration.md +2 -1
- package/docs/rules/talk/captions-cover.md +47 -0
- package/docs/rules/talk/duration-floor.md +38 -0
- package/docs/rules/talk/duration.md +43 -0
- package/docs/rules/talk/one-slide-size.md +38 -0
- package/docs/rules/talk/profile.md +64 -0
- package/docs/rules/talk/required-files.md +39 -0
- package/docs/rules/talk/undeclared.md +35 -0
- package/docs/rules/talk/video-format.md +43 -0
- package/docs/rules/tex/claim-emphasis.md +71 -0
- package/docs/rules/tex/contrast-frames.md +100 -0
- package/docs/rules/tex/relation-markers.md +72 -0
- package/docs/rules.md +57 -42
- package/docs/talk.md +94 -0
- package/fixtures/talk/audio-only.mp4 +0 -0
- package/fixtures/talk/one-slide.png +0 -0
- package/fixtures/talk/short-audio.mp4 +0 -0
- package/fixtures/talk/talk.mov +0 -0
- package/fixtures/talk/talk.mp4 +0 -0
- package/fixtures/talk/talk.srt +7 -0
- package/lib/paper-config.harness.mjs +5 -2
- package/lib/paper-config.ts +4 -0
- package/package.json +3 -1
- package/presets/agenticdev.jsonc +29 -0
- package/presets/aidc.jsonc +50 -0
- package/presets/venue-profile.schema.json +180 -1
- package/skills/grade-paper-writing/SKILL.md +59 -27
- package/skills/grade-paper-writing/SKILL.md.spec.ts +58 -26
- package/src/adapters/latex/index.test.ts +91 -0
- package/src/adapters/latex/index.ts +3 -2
- package/src/adapters/latex/prose.ts +188 -58
- package/src/adapters/mp4box/index.test.ts +63 -0
- package/src/adapters/mp4box/index.ts +50 -0
- package/src/adapters/node/index.ts +1 -0
- package/src/adapters/node/list-dir.io.ts +15 -0
- package/src/adapters/node/list-dir.test.ts +30 -0
- package/src/adapters/png/index.test.ts +43 -0
- package/src/adapters/png/index.ts +29 -0
- package/src/adapters/srt/index.test.ts +24 -0
- package/src/adapters/srt/index.ts +13 -0
- package/src/cli.test.ts +12 -0
- package/src/cli.ts +50 -21
- package/src/domain/register.test.ts +153 -0
- package/src/domain/register.ts +261 -0
- package/src/domain/talk.test.ts +125 -0
- package/src/domain/talk.ts +274 -0
- package/src/domain/tex-document.ts +37 -3
- package/src/new-paper.test.ts +1 -0
- package/src/paper-settings.test.ts +18 -1
- package/src/paper-settings.ts +21 -11
- package/src/ports/latex.ts +6 -0
- package/src/ports/talk-media.ts +19 -0
- package/src/presets.ts +14 -9
- package/src/register-bands.test.ts +327 -0
- package/src/register-bands.ts +291 -0
- package/src/register.ts +7 -37
- package/src/rule-cases.test.ts +177 -20
- package/src/talk-rules.test.ts +459 -0
- package/src/talk-rules.ts +672 -0
- package/src/tex-requirements.ts +56 -8
- package/src/tex-venue-rules.ts +7 -1
package/src/tex-requirements.ts
CHANGED
|
@@ -28,6 +28,12 @@ import Ajv from "ajv";
|
|
|
28
28
|
import { presetsDir } from "./package-dirs.ts";
|
|
29
29
|
import { CONFIG_FILE } from "#lib/paper-config";
|
|
30
30
|
import { fieldOf } from "./domain/record.ts";
|
|
31
|
+
import type { RegisterAnchor, RegisterMeasureName } from "./domain/register.ts";
|
|
32
|
+
import {
|
|
33
|
+
venueTalkOf,
|
|
34
|
+
type VenueTalk,
|
|
35
|
+
type VenueTalkJson,
|
|
36
|
+
} from "./domain/talk.ts";
|
|
31
37
|
|
|
32
38
|
/** CTAN package name → the names that prove it is installed. */
|
|
33
39
|
export type PackageProofs = Readonly<Record<string, readonly string[]>>;
|
|
@@ -180,6 +186,13 @@ export interface PresetFile {
|
|
|
180
186
|
readonly format: VenueFormat;
|
|
181
187
|
/** rule id → ESLint entry, checked against the shipped rules where a config is built. */
|
|
182
188
|
readonly rules: Readonly<Record<string, unknown>>;
|
|
189
|
+
/**
|
|
190
|
+
* The accepted papers the register rules measure a body against; null when the file names none
|
|
191
|
+
* (a child's list replaces its parent's).
|
|
192
|
+
*/
|
|
193
|
+
readonly registerAnchors: readonly RegisterAnchor[] | null;
|
|
194
|
+
/** What the venue asks a presenter to send; null when the file has no `talk` block. */
|
|
195
|
+
readonly talk: VenueTalk | null;
|
|
183
196
|
}
|
|
184
197
|
|
|
185
198
|
type KindsJson = Readonly<
|
|
@@ -217,6 +230,13 @@ interface PresetJson {
|
|
|
217
230
|
Partial<Pick<TexRequirements, "tools">>;
|
|
218
231
|
readonly format?: FormatJson;
|
|
219
232
|
readonly rules?: Readonly<Record<string, unknown>>;
|
|
233
|
+
readonly register?: {
|
|
234
|
+
readonly anchors: readonly ({
|
|
235
|
+
readonly paper: string;
|
|
236
|
+
readonly words: number;
|
|
237
|
+
} & Readonly<Record<RegisterMeasureName, number>>)[];
|
|
238
|
+
};
|
|
239
|
+
readonly talk?: VenueTalkJson;
|
|
220
240
|
}
|
|
221
241
|
|
|
222
242
|
/** An optional field as the typed preset holds it: absent is null. */
|
|
@@ -258,6 +278,38 @@ const sectionsOf = (
|
|
|
258
278
|
? null
|
|
259
279
|
: r.map((x) => ({ title: x.title, position: orNull(x.position) }));
|
|
260
280
|
|
|
281
|
+
/** A preset's JSONC text → its value, or an Error naming the syntax problem. */
|
|
282
|
+
function jsoncOf(text: string, file: string): unknown {
|
|
283
|
+
const parsed = typescript().parseConfigFileTextToJson(file, text);
|
|
284
|
+
const config: unknown = parsed.config;
|
|
285
|
+
const error = parsed.error;
|
|
286
|
+
if (error)
|
|
287
|
+
throw new Error(
|
|
288
|
+
`${file}: not valid JSONC — ${typescript().flattenDiagnosticMessageText(error.messageText, " ")}`,
|
|
289
|
+
);
|
|
290
|
+
return config;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/** A preset's `tex` block, `tools` defaulted; null when the file declares none. */
|
|
294
|
+
const texOf = (t: PresetJson["tex"]): TexRequirements | null =>
|
|
295
|
+
t ? { packages: t.packages, tools: t.tools ?? {} } : null;
|
|
296
|
+
|
|
297
|
+
/** A preset's `register.anchors`, each with its counts; null when the file names none. */
|
|
298
|
+
const anchorsOf = (
|
|
299
|
+
r: PresetJson["register"],
|
|
300
|
+
): readonly RegisterAnchor[] | null =>
|
|
301
|
+
r === undefined
|
|
302
|
+
? null
|
|
303
|
+
: r.anchors.map((a) => ({
|
|
304
|
+
paper: a.paper,
|
|
305
|
+
words: a.words,
|
|
306
|
+
counts: {
|
|
307
|
+
contrast_frames: a.contrast_frames,
|
|
308
|
+
claim_emphasis: a.claim_emphasis,
|
|
309
|
+
relation_markers: a.relation_markers,
|
|
310
|
+
},
|
|
311
|
+
}));
|
|
312
|
+
|
|
261
313
|
/**
|
|
262
314
|
* The text of one preset file → the typed file, or an Error naming every problem. The ONE parser
|
|
263
315
|
* of a preset: the toolchain reads its `tex`, the venue rules its `format`, the config its `rules`.
|
|
@@ -271,13 +323,7 @@ export function parsePreset(
|
|
|
271
323
|
file: string,
|
|
272
324
|
dir: string = presetsDir(),
|
|
273
325
|
): PresetFile {
|
|
274
|
-
const
|
|
275
|
-
const config: unknown = parsed.config;
|
|
276
|
-
const error = parsed.error;
|
|
277
|
-
if (error)
|
|
278
|
-
throw new Error(
|
|
279
|
-
`${file}: not valid JSONC — ${typescript().flattenDiagnosticMessageText(error.messageText, " ")}`,
|
|
280
|
-
);
|
|
326
|
+
const config = jsoncOf(text, file);
|
|
281
327
|
const validate = validatorFor(dir);
|
|
282
328
|
if (!matchesSchema(config, validate))
|
|
283
329
|
throw new Error(
|
|
@@ -291,9 +337,11 @@ export function parsePreset(
|
|
|
291
337
|
aliases: j.aliases ?? [],
|
|
292
338
|
blind: orNull(j.blind),
|
|
293
339
|
requiredSections: sectionsOf(j.required_sections),
|
|
294
|
-
tex: j.tex
|
|
340
|
+
tex: texOf(j.tex),
|
|
295
341
|
format: formatOf(j.format),
|
|
296
342
|
rules: j.rules ?? {},
|
|
343
|
+
registerAnchors: anchorsOf(j.register),
|
|
344
|
+
talk: j.talk === undefined ? null : venueTalkOf(j.talk),
|
|
297
345
|
};
|
|
298
346
|
}
|
|
299
347
|
|
package/src/tex-venue-rules.ts
CHANGED
|
@@ -298,7 +298,13 @@ export function judgeLeftover(
|
|
|
298
298
|
|
|
299
299
|
/** Where a rule's page lives: `docs/rules/tex/<name>.md` on the default branch. */
|
|
300
300
|
export const ruleDocsUrl = (
|
|
301
|
-
name:
|
|
301
|
+
name:
|
|
302
|
+
| TexVenueRuleName
|
|
303
|
+
| "claim-provenance"
|
|
304
|
+
| "register"
|
|
305
|
+
| "contrast-frames"
|
|
306
|
+
| "claim-emphasis"
|
|
307
|
+
| "relation-markers",
|
|
302
308
|
): string =>
|
|
303
309
|
`https://github.com/zernie/paperlint/blob/main/docs/rules/tex/${name}.md`;
|
|
304
310
|
|