paperlint 6.2.3 → 7.0.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/CONTRIBUTING.md +4 -2
- package/README.md +10 -3
- package/dist/adapters/hotcrp/index.d.ts +7 -0
- package/dist/adapters/hotcrp/index.d.ts.map +1 -0
- package/dist/adapters/hotcrp/index.js +7 -0
- package/dist/adapters/hotcrp/index.js.map +1 -0
- package/dist/adapters/hotcrp/portal.io.d.ts +20 -0
- package/dist/adapters/hotcrp/portal.io.d.ts.map +1 -0
- package/dist/adapters/hotcrp/portal.io.js +90 -0
- package/dist/adapters/hotcrp/portal.io.js.map +1 -0
- package/dist/adapters/hotcrp/response.d.ts +13 -0
- package/dist/adapters/hotcrp/response.d.ts.map +1 -0
- package/dist/adapters/hotcrp/response.js +138 -0
- package/dist/adapters/hotcrp/response.js.map +1 -0
- package/dist/adapters/latex/conditionals.d.ts +21 -0
- package/dist/adapters/latex/conditionals.d.ts.map +1 -0
- package/dist/adapters/latex/conditionals.js +75 -0
- package/dist/adapters/latex/conditionals.js.map +1 -0
- package/dist/adapters/latex/headings.d.ts +10 -0
- package/dist/adapters/latex/headings.d.ts.map +1 -0
- package/dist/adapters/latex/headings.js +129 -0
- package/dist/adapters/latex/headings.js.map +1 -0
- package/dist/adapters/latex/index.d.ts +1 -0
- package/dist/adapters/latex/index.d.ts.map +1 -1
- package/dist/adapters/latex/index.js +3 -0
- package/dist/adapters/latex/index.js.map +1 -1
- package/dist/adapters/latex/parse.d.ts +1 -1
- package/dist/adapters/latex/parse.d.ts.map +1 -1
- package/dist/adapters/latex/parse.js +3 -2
- package/dist/adapters/latex/parse.js.map +1 -1
- package/dist/build.d.ts +1 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +1 -1
- package/dist/build.js.map +1 -1
- package/dist/cli.d.ts +4 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +126 -37
- package/dist/cli.js.map +1 -1
- package/dist/domain/heading-case.d.ts +100 -0
- package/dist/domain/heading-case.d.ts.map +1 -0
- package/dist/domain/heading-case.js +365 -0
- package/dist/domain/heading-case.js.map +1 -0
- package/dist/domain/result.d.ts +4 -0
- package/dist/domain/result.d.ts.map +1 -1
- package/dist/domain/result.js +2 -0
- package/dist/domain/result.js.map +1 -1
- package/dist/domain/submission.d.ts +106 -0
- package/dist/domain/submission.d.ts.map +1 -0
- package/dist/domain/submission.js +39 -0
- package/dist/domain/submission.js.map +1 -0
- package/dist/domain/tex-document.d.ts +32 -0
- package/dist/domain/tex-document.d.ts.map +1 -1
- package/dist/domain/tex-document.js +11 -0
- package/dist/domain/tex-document.js.map +1 -1
- package/dist/domain/venue-name.d.ts +38 -0
- package/dist/domain/venue-name.d.ts.map +1 -0
- package/dist/domain/venue-name.js +71 -0
- package/dist/domain/venue-name.js.map +1 -0
- package/dist/eslint-rules/latex-language.d.ts.map +1 -1
- package/dist/eslint-rules/latex-language.js +16 -3
- package/dist/eslint-rules/latex-language.js.map +1 -1
- package/dist/facts-file.d.ts +3 -3
- package/dist/facts-file.d.ts.map +1 -1
- package/dist/facts-file.js +3 -3
- package/dist/facts-file.js.map +1 -1
- package/dist/folder-venue-rule.d.ts +51 -0
- package/dist/folder-venue-rule.d.ts.map +1 -0
- package/dist/folder-venue-rule.js +96 -0
- package/dist/folder-venue-rule.js.map +1 -0
- package/dist/heading-case.d.ts +48 -0
- package/dist/heading-case.d.ts.map +1 -0
- package/dist/heading-case.js +191 -0
- package/dist/heading-case.js.map +1 -0
- package/dist/init.d.ts +6 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +3 -3
- package/dist/init.js.map +1 -1
- package/dist/lib/paper-config.d.ts.map +1 -1
- package/dist/lib/paper-config.js +5 -1
- package/dist/lib/paper-config.js.map +1 -1
- package/dist/new-paper.d.ts +19 -5
- package/dist/new-paper.d.ts.map +1 -1
- package/dist/new-paper.js +23 -4
- package/dist/new-paper.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 +20 -4
- package/dist/paper-settings.js.map +1 -1
- package/dist/ports/latex.d.ts +7 -1
- package/dist/ports/latex.d.ts.map +1 -1
- package/dist/ports/submission-portal.d.ts +19 -0
- package/dist/ports/submission-portal.d.ts.map +1 -0
- package/dist/ports/submission-portal.js +2 -0
- package/dist/ports/submission-portal.js.map +1 -0
- package/dist/preset-card-rule.d.ts +100 -0
- package/dist/preset-card-rule.d.ts.map +1 -0
- package/dist/preset-card-rule.js +221 -0
- package/dist/preset-card-rule.js.map +1 -0
- package/dist/presets.d.ts +43 -2
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +130 -63
- package/dist/presets.js.map +1 -1
- package/dist/rules-config.js +1 -1
- package/dist/submission.d.ts +61 -0
- package/dist/submission.d.ts.map +1 -0
- package/dist/submission.js +211 -0
- package/dist/submission.js.map +1 -0
- package/dist/tex-requirements.d.ts +36 -3
- package/dist/tex-requirements.d.ts.map +1 -1
- package/dist/tex-requirements.js +30 -2
- package/dist/tex-requirements.js.map +1 -1
- package/dist/tex-venue-rules.d.ts +7 -8
- package/dist/tex-venue-rules.d.ts.map +1 -1
- package/dist/tex-venue-rules.js +10 -14
- package/dist/tex-venue-rules.js.map +1 -1
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/configuration.md +30 -11
- package/docs/optional-rules.md +4 -3
- package/docs/rules/format/page-limit.md +1 -1
- package/docs/rules/paper/folder-venue-leftover.md +104 -0
- package/docs/rules/talk/captions-cover.md +1 -1
- package/docs/rules/talk/duration-floor.md +1 -1
- package/docs/rules/talk/profile.md +1 -1
- package/docs/rules/tex/heading-case.md +424 -0
- package/docs/rules.md +64 -53
- package/docs/skills.md +5 -4
- package/docs/submission.md +64 -0
- package/docs/talk.md +1 -1
- package/eslint-rules/latex-language.test.mjs +12 -0
- package/eslint-rules/latex-language.ts +17 -4
- package/eslint-rules/paper-typography.test.mjs +12 -0
- package/eslint.config.mjs +59 -1
- package/fixtures/build-e2e/acmart/paper.tex +1 -1
- package/fixtures/build-e2e/fallback/expect.json +3 -3
- package/lib/paper-config.ts +6 -1
- package/lib/skill-checks.d.mts +7 -0
- package/lib/skill-checks.mjs +31 -0
- package/lib/skill-trigger-cases.mjs +11 -0
- package/package.json +8 -2
- package/presets/acm-sigconf.jsonc +5 -0
- package/presets/acm-sigconf.md +43 -0
- package/presets/agenticdev.jsonc +27 -6
- package/presets/agenticdev.md +151 -0
- package/presets/aidc.jsonc +12 -0
- package/presets/aidc.md +75 -0
- package/presets/aisec.jsonc +5 -1
- package/presets/aisec.md +117 -0
- package/presets/ieee-conference.jsonc +5 -0
- package/presets/ieee-conference.md +38 -0
- package/presets/realm.jsonc +7 -2
- package/presets/realm.md +166 -0
- package/presets/tex/agenticdev.tex +1 -1
- package/presets/tex-base.jsonc +6 -0
- package/presets/tex-base.md +30 -0
- package/presets/venue-profile.schema.json +57 -2
- package/skills/find-venue/SKILL.md +6 -5
- package/skills/find-venue/SKILL.md.spec.ts +5 -4
- package/skills/paper-pipeline/SKILL.md +5 -6
- package/skills/paper-pipeline/SKILL.md.spec.ts +4 -5
- package/skills/paper-pipeline/paper-pipeline.harness.mjs +4 -0
- package/skills/paper-pipeline/references/acl-venue-rules.md +1 -1
- package/skills/study-accepted-papers/SKILL.md +3 -3
- package/skills/study-accepted-papers/SKILL.md.spec.ts +2 -2
- package/skills/submission-portal/SKILL.md +69 -0
- package/skills/submission-portal/SKILL.md.spec.ts +71 -0
- package/skills/submission-portal/submission-portal.eval.mjs +15 -0
- package/skills/submission-portal/submission-portal.test.ts +81 -0
- package/skills/submit-paper/SKILL.md +27 -22
- package/skills/submit-paper/SKILL.md.spec.ts +26 -21
- package/skills/submit-paper/references/publishers/acm.md +1 -1
- package/src/adapters/hotcrp/cassette/README.md +24 -0
- package/src/adapters/hotcrp/cassette/get-noauth.json +10 -0
- package/src/adapters/hotcrp/cassette/get-paper.json +39 -0
- package/src/adapters/hotcrp/cassette/post-dot.json +21 -0
- package/src/adapters/hotcrp/cassette/post-ok.json +12 -0
- package/src/adapters/hotcrp/index.ts +11 -0
- package/src/adapters/hotcrp/portal.io.ts +130 -0
- package/src/adapters/hotcrp/portal.test.ts +503 -0
- package/src/adapters/hotcrp/response.ts +181 -0
- package/src/adapters/latex/conditionals.ts +130 -0
- package/src/adapters/latex/headings.ts +163 -0
- package/src/adapters/latex/index.test.ts +65 -0
- package/src/adapters/latex/index.ts +3 -0
- package/src/adapters/latex/parse.ts +3 -2
- package/src/build.ts +2 -2
- package/src/cli.test.ts +155 -3
- package/src/cli.ts +161 -25
- package/src/domain/heading-case.test.ts +660 -0
- package/src/domain/heading-case.ts +538 -0
- package/src/domain/result.test.ts +9 -1
- package/src/domain/result.ts +5 -0
- package/src/domain/submission.test.ts +45 -0
- package/src/domain/submission.ts +141 -0
- package/src/domain/tex-document.ts +36 -0
- package/src/domain/venue-name.test.ts +121 -0
- package/src/domain/venue-name.ts +129 -0
- package/src/facts-file.test.ts +4 -4
- package/src/facts-file.ts +6 -6
- package/src/folder-venue-rule.test.ts +182 -0
- package/src/folder-venue-rule.ts +141 -0
- package/src/heading-case.test.ts +500 -0
- package/src/heading-case.ts +275 -0
- package/src/init.test.ts +22 -0
- package/src/init.ts +9 -2
- package/src/new-paper.harness.mjs +11 -9
- package/src/new-paper.test.ts +135 -10
- package/src/new-paper.ts +38 -7
- package/src/paper-settings-commands.test.ts +25 -10
- package/src/paper-settings.test.ts +12 -1
- package/src/paper-settings.ts +25 -5
- package/src/parse-args.test.ts +19 -0
- package/src/ports/latex.ts +7 -0
- package/src/ports/submission-portal.ts +26 -0
- package/src/preset-card-rule.test.ts +266 -0
- package/src/preset-card-rule.ts +384 -0
- package/src/presets.test.ts +212 -37
- package/src/presets.ts +183 -71
- package/src/rule-cases.test.ts +147 -42
- package/src/rules-config.ts +1 -1
- package/src/submission.test.ts +497 -0
- package/src/submission.ts +311 -0
- package/src/talk-rules.test.ts +6 -3
- package/src/tex-requirements.harness.ts +25 -11
- package/src/tex-requirements.test.ts +127 -1
- package/src/tex-requirements.ts +78 -8
- package/src/tex-venue-rules.test.ts +36 -22
- package/src/tex-venue-rules.ts +14 -26
- package/src/types.ts +13 -0
- package/src/venue-rules.test.ts +7 -6
- package/templates/paper/paper.tex +1 -1
- package/skills/submit-paper/references/venues/agenticdev.md +0 -171
- package/skills/submit-paper/references/venues/aisec.md +0 -105
- package/skills/submit-paper/references/venues/realm.md +0 -155
package/dist/presets.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"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"}
|
package/dist/presets.js
CHANGED
|
@@ -12,26 +12,34 @@
|
|
|
12
12
|
* Anything else — an npm package name, a bare name — is refused by name. npm presets are not
|
|
13
13
|
* supported yet; a bare name is almost always a shipped name missing its prefix, and the message says so.
|
|
14
14
|
*
|
|
15
|
+
* ── WHAT EACH FILE IS ─────────────────────────────────────────────────────────────
|
|
16
|
+
* Every preset declares its `type` (`venue-profile.schema.json`): a `venue` names itself and links
|
|
17
|
+
* its call for papers, a template `family` names no venue, and the TeX `base` set is extended by
|
|
18
|
+
* nothing. A chain must read top-down as template → venue: a family extends only a family, and
|
|
19
|
+
* nothing extends the base set. A chain that does not is refused naming both files.
|
|
20
|
+
*
|
|
15
21
|
* ── THE CHAIN ─────────────────────────────────────────────────────────────────────
|
|
16
22
|
* At most `MAX_PRESET_DEPTH` files, root to leaf. A cycle (relative paths can form one) is refused
|
|
17
23
|
* naming the chain. The chain is merged block by block:
|
|
18
24
|
*
|
|
19
25
|
* tex union — a child never removes a package its parent needs
|
|
20
26
|
* format per key, the child wins; `kinds` by kind name, a child's kind replaces that kind
|
|
21
|
-
* rules per rule id, the child wins
|
|
22
|
-
* template the child wins; so does `name`, and `required_sections`, `register
|
|
27
|
+
* rules per rule id, the child wins; `ruleOrigins` keeps which file set each
|
|
28
|
+
* template the child wins; so does `name`, and `required_sections`, `register`, `talk` and
|
|
29
|
+
* `portal` (each whole)
|
|
23
30
|
* aliases union, with every `name` — what the venue is called along the chain
|
|
24
31
|
*
|
|
25
|
-
* ── THE LABEL
|
|
26
|
-
*
|
|
27
|
-
*
|
|
32
|
+
* ── THE ID AND THE LABEL ──────────────────────────────────────────────────────────
|
|
33
|
+
* The facts file and the build plan carry the preset's `id`: the spec's file name without its
|
|
34
|
+
* extension, a stable key consumers match against preset ids. Messages say the `label`: the most
|
|
35
|
+
* derived venue's `name` when the chain has a venue, else the id
|
|
28
36
|
* (`paperlint:agenticdev` → `agenticdev`, `./venues/usenix-sec.jsonc` → `usenix-sec`). Display
|
|
29
37
|
* only: nothing is ever resolved by it.
|
|
30
38
|
*/
|
|
31
39
|
import { basename, dirname, extname, join, resolve } from "node:path";
|
|
32
40
|
import { mergeRequirements, NO_FORMAT, NO_REQUIREMENTS, parsePreset, profileFileOf, venueNames, } from "./tex-requirements.js";
|
|
33
41
|
import { callerPath } from "./caller-path.js";
|
|
34
|
-
import { err, ok } from "./domain/result.js";
|
|
42
|
+
import { err, isOk, ok } from "./domain/result.js";
|
|
35
43
|
import { readPaperSettings, } from "./paper-settings.js";
|
|
36
44
|
import { CONFIG_FILE } from "#lib/paper-config";
|
|
37
45
|
import { messageOf } from "./domain/text.js";
|
|
@@ -81,24 +89,39 @@ function readPreset(spec, from, deps) {
|
|
|
81
89
|
});
|
|
82
90
|
}
|
|
83
91
|
}
|
|
84
|
-
/**
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
92
|
+
/**
|
|
93
|
+
* The chain from `child` up, leaf first: `below` is every file read so far, `child` the last of them.
|
|
94
|
+
* Each parent is refused when it closes a cycle, makes the chain too long, or is of a type `child`
|
|
95
|
+
* may not extend.
|
|
96
|
+
*/
|
|
97
|
+
function chainUp(below, child, deps) {
|
|
98
|
+
const up = child.preset.extends;
|
|
99
|
+
if (up === null)
|
|
100
|
+
return ok(below);
|
|
101
|
+
const r = readPreset(up, child.file, deps);
|
|
102
|
+
if (!r.ok)
|
|
103
|
+
return r;
|
|
104
|
+
const files = below.map((x) => x.file);
|
|
105
|
+
if (files.includes(r.value.file))
|
|
106
|
+
return err({ kind: "cycle", chain: [...files, r.value.file] });
|
|
107
|
+
if (below.length === MAX_PRESET_DEPTH)
|
|
108
|
+
return err({ kind: "too-deep", chain: [...files, r.value.file] });
|
|
109
|
+
const parentType = r.value.preset.identity.type;
|
|
110
|
+
if (parentType === "venue" && child.preset.identity.type === "family")
|
|
111
|
+
return err({
|
|
112
|
+
kind: "wrong-parent",
|
|
113
|
+
file: child.file,
|
|
114
|
+
parent: r.value.file,
|
|
115
|
+
parentType,
|
|
116
|
+
});
|
|
117
|
+
if (parentType === "base")
|
|
118
|
+
return err({
|
|
119
|
+
kind: "wrong-parent",
|
|
120
|
+
file: child.file,
|
|
121
|
+
parent: r.value.file,
|
|
122
|
+
parentType,
|
|
123
|
+
});
|
|
124
|
+
return chainUp([...below, r.value], r.value, deps);
|
|
102
125
|
}
|
|
103
126
|
/** A child's format over its parent's: per key the child wins, kinds by name. Pure. */
|
|
104
127
|
export function mergeFormat(parent, child) {
|
|
@@ -118,42 +141,50 @@ export function mergeFormat(parent, child) {
|
|
|
118
141
|
kinds: new Map([...parent.kinds, ...child.kinds]),
|
|
119
142
|
};
|
|
120
143
|
}
|
|
144
|
+
/** A venue's name; a family and the base set have none. Pure. */
|
|
145
|
+
const nameOf = (i) => i.type === "venue" ? i.name : null;
|
|
146
|
+
/** A venue's name as a list, empty for a family and the base set. Pure. */
|
|
147
|
+
const namesOf = (i) => i.type === "venue" ? [i.name] : [];
|
|
148
|
+
const NOTHING_MERGED = {
|
|
149
|
+
name: null,
|
|
150
|
+
template: null,
|
|
151
|
+
aliases: [],
|
|
152
|
+
blind: false,
|
|
153
|
+
requiredSections: [],
|
|
154
|
+
tex: NO_REQUIREMENTS,
|
|
155
|
+
format: NO_FORMAT,
|
|
156
|
+
rules: {},
|
|
157
|
+
ruleOrigins: {},
|
|
158
|
+
registerAnchors: [],
|
|
159
|
+
talk: null,
|
|
160
|
+
portal: null,
|
|
161
|
+
};
|
|
162
|
+
/** One file of the chain, `file`, merged over what its parents gave. Pure. */
|
|
163
|
+
const mergeOne = (acc, { preset: p, file }) => ({
|
|
164
|
+
name: nameOf(p.identity) ?? acc.name,
|
|
165
|
+
template: p.template === null ? acc.template : { text: p.template, file },
|
|
166
|
+
aliases: [...new Set([...acc.aliases, ...namesOf(p.identity), ...p.aliases])],
|
|
167
|
+
blind: p.blind ?? acc.blind,
|
|
168
|
+
requiredSections: p.requiredSections ?? acc.requiredSections,
|
|
169
|
+
tex: p.tex ? mergeRequirements(acc.tex, p.tex) : acc.tex,
|
|
170
|
+
format: mergeFormat(acc.format, p.format),
|
|
171
|
+
rules: { ...acc.rules, ...p.rules },
|
|
172
|
+
ruleOrigins: {
|
|
173
|
+
...acc.ruleOrigins,
|
|
174
|
+
...Object.fromEntries(Object.keys(p.rules).map((id) => [id, file])),
|
|
175
|
+
},
|
|
176
|
+
registerAnchors: p.registerAnchors ?? acc.registerAnchors,
|
|
177
|
+
talk: p.talk ?? acc.talk,
|
|
178
|
+
portal: p.portal ?? acc.portal,
|
|
179
|
+
});
|
|
121
180
|
/** The chain, root first, merged into one preset. Pure. */
|
|
122
|
-
function merged(spec, rootFirst) {
|
|
123
|
-
const
|
|
124
|
-
name: null,
|
|
125
|
-
template: null,
|
|
126
|
-
aliases: [],
|
|
127
|
-
blind: false,
|
|
128
|
-
requiredSections: [],
|
|
129
|
-
tex: NO_REQUIREMENTS,
|
|
130
|
-
format: NO_FORMAT,
|
|
131
|
-
rules: {},
|
|
132
|
-
registerAnchors: [],
|
|
133
|
-
talk: null,
|
|
134
|
-
};
|
|
135
|
-
const m = rootFirst.reduce((acc, { preset: p, file }) => ({
|
|
136
|
-
name: p.name ?? acc.name,
|
|
137
|
-
template: p.template === null ? acc.template : { text: p.template, file },
|
|
138
|
-
aliases: [
|
|
139
|
-
...new Set([
|
|
140
|
-
...acc.aliases,
|
|
141
|
-
...(p.name === null ? [] : [p.name]),
|
|
142
|
-
...p.aliases,
|
|
143
|
-
]),
|
|
144
|
-
],
|
|
145
|
-
blind: p.blind ?? acc.blind,
|
|
146
|
-
requiredSections: p.requiredSections ?? acc.requiredSections,
|
|
147
|
-
tex: p.tex ? mergeRequirements(acc.tex, p.tex) : acc.tex,
|
|
148
|
-
format: mergeFormat(acc.format, p.format),
|
|
149
|
-
rules: { ...acc.rules, ...p.rules },
|
|
150
|
-
registerAnchors: p.registerAnchors ?? acc.registerAnchors,
|
|
151
|
-
talk: p.talk ?? acc.talk,
|
|
152
|
-
}), base);
|
|
153
|
-
const { name, ...rest } = m;
|
|
181
|
+
function merged(spec, rootFirst, leaf) {
|
|
182
|
+
const { name, ...rest } = rootFirst.reduce(mergeOne, NOTHING_MERGED);
|
|
154
183
|
return {
|
|
184
|
+
id: labelOf(spec),
|
|
155
185
|
label: name ?? labelOf(spec),
|
|
156
186
|
chain: rootFirst.map((x) => x.file),
|
|
187
|
+
identity: leaf.preset.identity,
|
|
157
188
|
...rest,
|
|
158
189
|
};
|
|
159
190
|
}
|
|
@@ -162,23 +193,55 @@ function merged(spec, rootFirst) {
|
|
|
162
193
|
* does not resolve. Reads through `deps.files` only; never throws.
|
|
163
194
|
*/
|
|
164
195
|
export function resolvePreset(spec, fromFile, deps) {
|
|
165
|
-
const
|
|
196
|
+
const refused = (p) => err(p.kind === "not-found"
|
|
197
|
+
? { ...p, shipped: shippedPresets(deps.venuesDir) }
|
|
198
|
+
: p);
|
|
199
|
+
const leaf = readPreset(spec, fromFile, deps);
|
|
200
|
+
if (!leaf.ok)
|
|
201
|
+
return refused(leaf.error);
|
|
202
|
+
const chain = chainUp([leaf.value], leaf.value, deps);
|
|
166
203
|
if (!chain.ok)
|
|
167
|
-
return chain.error
|
|
168
|
-
|
|
169
|
-
: chain;
|
|
170
|
-
const rootFirst = [...chain.value].reverse();
|
|
171
|
-
return ok(merged(spec, rootFirst));
|
|
204
|
+
return refused(chain.error);
|
|
205
|
+
return ok(merged(spec, [...chain.value].reverse(), leaf.value));
|
|
172
206
|
}
|
|
173
207
|
/** The shipped presets' names (each is spelled `paperlint:<name>`). */
|
|
174
208
|
export function shippedPresets(venuesDir) {
|
|
175
209
|
return venueNames(venuesDir);
|
|
176
210
|
}
|
|
211
|
+
/** The spec a paper writes in `extends` for the shipped preset `name`: `paperlint:<name>`. */
|
|
212
|
+
export const shippedSpec = (name) => `${SHIPPED_PREFIX}${name}`;
|
|
213
|
+
/**
|
|
214
|
+
* Every shipped preset that resolves, each read the way a paper extending it would read it. The one
|
|
215
|
+
* piece that reads the presets directory. One that does not resolve is left out: `pdf/profile`
|
|
216
|
+
* owns that.
|
|
217
|
+
*/
|
|
218
|
+
export function resolveShipped(deps) {
|
|
219
|
+
const from = join(deps.venuesDir, CONFIG_FILE);
|
|
220
|
+
return shippedPresets(deps.venuesDir)
|
|
221
|
+
.map((name) => resolvePreset(shippedSpec(name), from, deps))
|
|
222
|
+
.filter(isOk)
|
|
223
|
+
.map((r) => r.value);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* A resolved preset as a name knows it: its label, its aliases, its chain. Pure. (Not Remeda's
|
|
227
|
+
* `pick`: the app layer may not import it — `boundaries/dependencies`, `APP_EXTERNALS`.)
|
|
228
|
+
*/
|
|
229
|
+
export const venueOf = ({ label, aliases, chain }) => ({
|
|
230
|
+
label,
|
|
231
|
+
aliases,
|
|
232
|
+
chain,
|
|
233
|
+
});
|
|
234
|
+
/**
|
|
235
|
+
* THE ONE SOURCE OF VENUE NAMES: every shipped venue's label and `aliases` (with each `name` along
|
|
236
|
+
* its chain). Read by `paperlint new`, which refuses a folder name naming one, and through
|
|
237
|
+
* `otherVenues` by `tex/venue-leftover` and `paper/folder-venue-leftover`.
|
|
238
|
+
*/
|
|
239
|
+
export const shippedVenueNames = (deps) => resolveShipped(deps).map(venueOf);
|
|
177
240
|
/** One line for a problem, naming what to change. Pure. */
|
|
178
241
|
export function presetProblemText(p) {
|
|
179
242
|
switch (p.kind) {
|
|
180
243
|
case "unsupported":
|
|
181
|
-
return `"extends": "${p.spec}" — a preset is \`paperlint:<name>\` (shipped) or a path starting with ./ or ../ (your own); npm presets: not yet supported. Did you mean "${
|
|
244
|
+
return `"extends": "${p.spec}" — a preset is \`paperlint:<name>\` (shipped) or a path starting with ./ or ../ (your own); npm presets: not yet supported. Did you mean "${shippedSpec(p.spec)}"?`;
|
|
182
245
|
case "not-found":
|
|
183
246
|
return `"extends": "${p.spec}" names no preset (${p.file}); shipped presets (${SHIPPED_PREFIX}<name>): ${p.shipped.join(", ")}`;
|
|
184
247
|
case "cycle":
|
|
@@ -187,6 +250,10 @@ export function presetProblemText(p) {
|
|
|
187
250
|
return `the preset chain is longer than ${String(MAX_PRESET_DEPTH)}: ${p.chain.join(" → ")}`;
|
|
188
251
|
case "broken":
|
|
189
252
|
return `the preset ${p.file} does not parse: ${p.why}`;
|
|
253
|
+
case "wrong-parent":
|
|
254
|
+
return p.parentType === "base"
|
|
255
|
+
? `the preset ${p.file} extends ${p.parent}, the TeX base set — every paper gets that set already, and no preset extends it`
|
|
256
|
+
: `the preset ${p.file} is a template family and extends ${p.parent}, a venue — a family builds only on a family; a venue extends a family or another venue`;
|
|
190
257
|
}
|
|
191
258
|
}
|
|
192
259
|
/** A paper directory → its settings and its resolved preset. Reads through `deps.files`; never throws. */
|
package/dist/presets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"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"}
|
package/dist/rules-config.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* A consumer turns an optional rule on, or changes a built-in rule's severity, by writing what they
|
|
7
7
|
* would write in an ESLint flat config — a list of `{ files, ignores, rules }` blocks:
|
|
8
8
|
*
|
|
9
|
-
* "rules": [ { "files": ["papers/
|
|
9
|
+
* "rules": [ { "files": ["papers/rule-drift/**"],
|
|
10
10
|
* "rules": { "pdf/last-page-balance": ["error", { "tolerancePt": 120 }] } } ]
|
|
11
11
|
*
|
|
12
12
|
* The blocks are appended AFTER paperlint's built-in config, so a later block wins, exactly as in ESLint.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type Result } from "./domain/result.ts";
|
|
2
|
+
import { type Sha256 } from "./domain/sha256.ts";
|
|
3
|
+
import { type PortalFailure, type SubmissionView, type SupportedPortal, type UpdateOutcome } from "./domain/submission.ts";
|
|
4
|
+
import type { Files } from "./ports/files.ts";
|
|
5
|
+
import type { SubmissionPortal } from "./ports/submission-portal.ts";
|
|
6
|
+
import { type PresetDeps } from "./presets.ts";
|
|
7
|
+
/** The environment variable each portal kind's token is read from. */
|
|
8
|
+
export declare const TOKEN_ENV: Readonly<Record<SupportedPortal["kind"], string>>;
|
|
9
|
+
export declare const SUBCOMMANDS: readonly ["show", "update"];
|
|
10
|
+
export type Subcommand = (typeof SUBCOMMANDS)[number];
|
|
11
|
+
/** What one `submission` run was asked, after the command line. */
|
|
12
|
+
export interface SubmissionArgs {
|
|
13
|
+
readonly sub: string | undefined;
|
|
14
|
+
readonly paperDir: string;
|
|
15
|
+
/** Positional arguments past the paper directory: refused. */
|
|
16
|
+
readonly extra: readonly string[];
|
|
17
|
+
/** `--pdf <file>`, relative to `cwd`; null: the paper's own PDF. */
|
|
18
|
+
readonly pdf: string | null;
|
|
19
|
+
/** `--abstract <file>`, relative to `cwd`; null: leave the abstract as it is. */
|
|
20
|
+
readonly abstract: string | null;
|
|
21
|
+
readonly submit: boolean;
|
|
22
|
+
readonly save: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface SubmissionDeps {
|
|
25
|
+
readonly files: Files;
|
|
26
|
+
readonly presets: PresetDeps;
|
|
27
|
+
readonly cwd: string;
|
|
28
|
+
/** The value of an environment variable; the root reads the environment. */
|
|
29
|
+
readonly env: (name: string) => string | undefined;
|
|
30
|
+
readonly portalFor: (p: SupportedPortal, token: string) => SubmissionPortal;
|
|
31
|
+
readonly log: (line: string) => void;
|
|
32
|
+
readonly err: (line: string) => void;
|
|
33
|
+
}
|
|
34
|
+
/** A paper's portal, its submission there, and the PDF the paper builds. */
|
|
35
|
+
export interface SubmissionTarget {
|
|
36
|
+
readonly portal: SupportedPortal;
|
|
37
|
+
readonly id: number;
|
|
38
|
+
/** The paper's built PDF, absolute. */
|
|
39
|
+
readonly pdf: string;
|
|
40
|
+
}
|
|
41
|
+
/** The paper directory → its portal and submission, or the line naming the file and key to set. */
|
|
42
|
+
export declare function submissionTarget(paperDir: string, deps: PresetDeps): Result<SubmissionTarget, string>;
|
|
43
|
+
/** The token from the environment, or the line naming the variable and where to get one. */
|
|
44
|
+
export declare function tokenFor(portal: SupportedPortal, env: (name: string) => string | undefined): Result<string, string>;
|
|
45
|
+
/** A failure in words: HTTP status and the portal's own messages. Never the token. */
|
|
46
|
+
export declare function failureText(f: PortalFailure): string;
|
|
47
|
+
/** `show`'s report. Pure. */
|
|
48
|
+
export declare function showLines(t: SubmissionTarget, view: SubmissionView, local: {
|
|
49
|
+
readonly shown: string;
|
|
50
|
+
readonly sha256: Sha256 | null;
|
|
51
|
+
}): readonly string[];
|
|
52
|
+
/** `update`'s report. Pure. */
|
|
53
|
+
export declare function updateLines(o: UpdateOutcome, local: {
|
|
54
|
+
readonly shown: string;
|
|
55
|
+
readonly sha256: Sha256;
|
|
56
|
+
}, save: boolean): readonly string[];
|
|
57
|
+
/** Why the command line cannot be run as asked; null when it can. Pure. */
|
|
58
|
+
export declare function usageProblem(a: SubmissionArgs): string | null;
|
|
59
|
+
/** `paperlint submission <show|update> [paper-dir]` — exit 0, 1 (the portal said no), or 2 (usage). */
|
|
60
|
+
export declare function runSubmission(a: SubmissionArgs, deps: SubmissionDeps): Promise<number>;
|
|
61
|
+
//# sourceMappingURL=submission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submission.d.ts","sourceRoot":"","sources":["../src/submission.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `paperlint submission show|update [paper-dir]` — read and change a paper's submission on the
|
|
3
|
+
* venue's portal, through the portal's API.
|
|
4
|
+
*
|
|
5
|
+
* The command is named by the job, not by the portal: WHERE the submission lives is data. The venue
|
|
6
|
+
* preset declares the portal (`"portal": { "kind": "hotcrp", "url": … }`), the paper's
|
|
7
|
+
* `paperlint.json` declares which submission is its own (`"submission": { "id": 7 }`), and one
|
|
8
|
+
* adapter per portal kind does the talking (`src/adapters/hotcrp/`).
|
|
9
|
+
*
|
|
10
|
+
* show status, id, title, paper type, topics, abstract length, the PDF the portal holds — and
|
|
11
|
+
* whether it is the local `paper.pdf`, by sha256
|
|
12
|
+
* update send the PDF (and, if asked, an abstract, or "submitted"). A DRY RUN unless `--save`:
|
|
13
|
+
* the portal checks the change and keeps nothing
|
|
14
|
+
*
|
|
15
|
+
* 🔴 THE TOKEN IS AN INPUT, AND ONLY AN INPUT. It comes from the environment (the root reads it), is
|
|
16
|
+
* handed to the adapter, and never appears in anything printed here.
|
|
17
|
+
*/
|
|
18
|
+
import { basename, join, resolve } from "node:path";
|
|
19
|
+
import { absolutePath } from "./domain/paths.js";
|
|
20
|
+
import { err, ok } from "./domain/result.js";
|
|
21
|
+
import { sha256Hex } from "./domain/sha256.js";
|
|
22
|
+
import { supportedPortal, wordCount, } from "./domain/submission.js";
|
|
23
|
+
import { paperPreset, paperPresetProblem } from "./presets.js";
|
|
24
|
+
import { CONFIG_FILE } from "#lib/paper-config";
|
|
25
|
+
/** The environment variable each portal kind's token is read from. */
|
|
26
|
+
export const TOKEN_ENV = {
|
|
27
|
+
hotcrp: "HOTCRP_TOKEN",
|
|
28
|
+
};
|
|
29
|
+
/** Where each portal kind lets an author create a token. */
|
|
30
|
+
const TOKEN_HELP = {
|
|
31
|
+
hotcrp: "create one on the HotCRP site under Account settings → Developer, with the scopes submeta:read and document:read (show) and submeta:write and document:write (update)",
|
|
32
|
+
};
|
|
33
|
+
export const SUBCOMMANDS = ["show", "update"];
|
|
34
|
+
const isSubcommand = (s) => SUBCOMMANDS.some((x) => x === s);
|
|
35
|
+
const configOf = (dir) => join(dir, CONFIG_FILE);
|
|
36
|
+
/** The paper directory → its portal and submission, or the line naming the file and key to set. */
|
|
37
|
+
export function submissionTarget(paperDir, deps) {
|
|
38
|
+
const p = paperPreset(paperDir, deps);
|
|
39
|
+
const problem = paperPresetProblem(paperDir, p);
|
|
40
|
+
if (problem !== null)
|
|
41
|
+
return err(problem);
|
|
42
|
+
if (p.kind !== "resolved")
|
|
43
|
+
return err(`${configOf(paperDir)}: no "extends" — the venue preset it names declares the portal ("portal": { "kind": …, "url": … })`);
|
|
44
|
+
const declared = p.preset.portal;
|
|
45
|
+
if (declared === null)
|
|
46
|
+
return err(`the venue preset declares no "portal" (read: ${p.preset.chain.join(", ")}) — add "portal": { "kind": "hotcrp", "url": "<the site>" } to the venue's preset, or upload by hand`);
|
|
47
|
+
const sub = p.settings.submission;
|
|
48
|
+
if (sub === null)
|
|
49
|
+
return err(`${configOf(paperDir)}: no "submission" — add "submission": { "id": <the submission number on ${declared.url}> }`);
|
|
50
|
+
const portal = supportedPortal(declared);
|
|
51
|
+
if (!portal.ok)
|
|
52
|
+
return portal;
|
|
53
|
+
const pdf = join(paperDir, p.settings.pdf ?? "paper.pdf");
|
|
54
|
+
return ok({ portal: portal.value, id: sub.id, pdf });
|
|
55
|
+
}
|
|
56
|
+
/** The token from the environment, or the line naming the variable and where to get one. */
|
|
57
|
+
export function tokenFor(portal, env) {
|
|
58
|
+
const name = TOKEN_ENV[portal.kind];
|
|
59
|
+
const v = env(name)?.trim();
|
|
60
|
+
return v
|
|
61
|
+
? ok(v)
|
|
62
|
+
: err(`${name} is not set — the ${portal.kind} API needs a token: ${TOKEN_HELP[portal.kind]}. Then: export ${name}=…`);
|
|
63
|
+
}
|
|
64
|
+
const iso = (seconds) => seconds === null ? "—" : new Date(seconds * 1000).toISOString();
|
|
65
|
+
const messageLine = (m) => ` portal says: ${m.field === null ? "" : `${m.field}: `}${m.message}`;
|
|
66
|
+
/** A failure in words: HTTP status and the portal's own messages. Never the token. */
|
|
67
|
+
export function failureText(f) {
|
|
68
|
+
switch (f.kind) {
|
|
69
|
+
case "refused": {
|
|
70
|
+
const said = f.messages.map((m) => m.message).filter(Boolean);
|
|
71
|
+
return `the portal refused (HTTP ${String(f.httpStatus)})${said.length ? `: ${said.join("; ")}` : ""}`;
|
|
72
|
+
}
|
|
73
|
+
case "unreachable":
|
|
74
|
+
return `the portal cannot be reached: ${f.detail}`;
|
|
75
|
+
case "malformed":
|
|
76
|
+
return `the portal answered HTTP ${String(f.httpStatus)}, but not as its API does: ${f.detail}`;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** Whether the portal holds the local build, in one line. */
|
|
80
|
+
function matchLine(view, local) {
|
|
81
|
+
if (local === null)
|
|
82
|
+
return "match unknown — no local PDF to compare";
|
|
83
|
+
if (view.pdf === null)
|
|
84
|
+
return "match NO — the portal holds no PDF";
|
|
85
|
+
if (view.pdf.sha256 === null)
|
|
86
|
+
return `match unknown — the portal names a ${view.pdf.hash.replace(/-.*$/s, "")} hash, not a sha256`;
|
|
87
|
+
return view.pdf.sha256 === local
|
|
88
|
+
? "match yes — the portal holds this build"
|
|
89
|
+
: "match NO — the portal holds a different PDF than the local one";
|
|
90
|
+
}
|
|
91
|
+
const pdfLine = (view) => view.pdf === null
|
|
92
|
+
? "portal PDF none"
|
|
93
|
+
: `portal PDF ${view.pdf.hash}, ${view.pdf.size === null ? "?" : String(view.pdf.size)} bytes, uploaded ${iso(view.pdf.uploadedAt)}`;
|
|
94
|
+
/** `show`'s report. Pure. */
|
|
95
|
+
export function showLines(t, view, local) {
|
|
96
|
+
return [
|
|
97
|
+
`submission ${String(view.id)} on ${t.portal.url} (${t.portal.kind})`,
|
|
98
|
+
`status ${view.status}${view.submittedAt === null ? "" : `, submitted ${iso(view.submittedAt)}`}`,
|
|
99
|
+
`title ${view.title ?? "—"}`,
|
|
100
|
+
`paper type ${view.paperType ?? "—"}`,
|
|
101
|
+
`topics ${view.topics.length ? view.topics.join("; ") : "—"}`,
|
|
102
|
+
`abstract ${view.abstract === null ? "—" : `${String(wordCount(view.abstract))} words`}`,
|
|
103
|
+
pdfLine(view),
|
|
104
|
+
`local PDF ${local.shown} ${local.sha256 === null ? "(missing)" : `sha2-${local.sha256}`}`,
|
|
105
|
+
matchLine(view, local.sha256),
|
|
106
|
+
...view.messages.map(messageLine),
|
|
107
|
+
];
|
|
108
|
+
}
|
|
109
|
+
/** `update`'s report. Pure. */
|
|
110
|
+
export function updateLines(o, local, save) {
|
|
111
|
+
const mode = save
|
|
112
|
+
? o.dryRun
|
|
113
|
+
? "SAVE WITHHELD by the portal — nothing changed"
|
|
114
|
+
: "saved"
|
|
115
|
+
: "dry run — the portal checked the change and kept nothing; --save sends it for real";
|
|
116
|
+
return [
|
|
117
|
+
mode,
|
|
118
|
+
`HTTP ${String(o.httpStatus)}`,
|
|
119
|
+
`valid ${o.valid ? "yes" : "NO"}`,
|
|
120
|
+
`changes ${o.changes.length ? o.changes.join(", ") : "—"}`,
|
|
121
|
+
`local PDF ${local.shown} sha2-${local.sha256}`,
|
|
122
|
+
...o.messages.map(messageLine),
|
|
123
|
+
];
|
|
124
|
+
}
|
|
125
|
+
const shownPath = (cwd, p) => p.startsWith(`${cwd}/`) ? p.slice(cwd.length + 1) : p;
|
|
126
|
+
/** The file's bytes, or null when there is none. */
|
|
127
|
+
const bytesAt = (files, p) => files.readBytes(absolutePath(p));
|
|
128
|
+
/** `show`: read the submission and compare its PDF with the local one. */
|
|
129
|
+
async function runShow(t, portal, pdfPath, deps) {
|
|
130
|
+
const view = await portal.show(t.id);
|
|
131
|
+
if (!view.ok)
|
|
132
|
+
return (deps.err(failureText(view.error)), 1);
|
|
133
|
+
const bytes = bytesAt(deps.files, pdfPath);
|
|
134
|
+
const local = {
|
|
135
|
+
shown: shownPath(deps.cwd, pdfPath),
|
|
136
|
+
sha256: bytes === null ? null : sha256Hex(bytes),
|
|
137
|
+
};
|
|
138
|
+
showLines(t, view.value, local).forEach((l) => {
|
|
139
|
+
deps.log(l);
|
|
140
|
+
});
|
|
141
|
+
return 0;
|
|
142
|
+
}
|
|
143
|
+
/** The abstract file's text, or the line saying it is missing; null when none was asked for. */
|
|
144
|
+
function abstractOf(a, deps) {
|
|
145
|
+
if (a.abstract === null)
|
|
146
|
+
return ok(null);
|
|
147
|
+
const p = resolve(deps.cwd, a.abstract);
|
|
148
|
+
const bytes = bytesAt(deps.files, p);
|
|
149
|
+
return bytes === null
|
|
150
|
+
? err(`--abstract: no file at ${shownPath(deps.cwd, p)}`)
|
|
151
|
+
: ok(new TextDecoder().decode(bytes).trim());
|
|
152
|
+
}
|
|
153
|
+
/** `update`: send the PDF (and the abstract, and "submitted" when asked); a dry run unless saving. */
|
|
154
|
+
async function runUpdate(t, portal, a, deps) {
|
|
155
|
+
const bytes = bytesAt(deps.files, a.pdfPath);
|
|
156
|
+
const shown = shownPath(deps.cwd, a.pdfPath);
|
|
157
|
+
if (bytes === null)
|
|
158
|
+
return (deps.err(`no PDF at ${shown} — build the paper, or name one with --pdf`),
|
|
159
|
+
2);
|
|
160
|
+
const abstract = abstractOf(a, deps);
|
|
161
|
+
if (!abstract.ok)
|
|
162
|
+
return (deps.err(abstract.error), 2);
|
|
163
|
+
const change = {
|
|
164
|
+
pdf: { name: basename(a.pdfPath), bytes },
|
|
165
|
+
abstract: abstract.value,
|
|
166
|
+
submit: a.submit,
|
|
167
|
+
};
|
|
168
|
+
const r = await portal.update(t.id, change, { save: a.save });
|
|
169
|
+
if (!r.ok)
|
|
170
|
+
return (deps.err(failureText(r.error)), 1);
|
|
171
|
+
const local = { shown, sha256: sha256Hex(bytes) };
|
|
172
|
+
updateLines(r.value, local, a.save).forEach((l) => {
|
|
173
|
+
deps.log(l);
|
|
174
|
+
});
|
|
175
|
+
const fine = r.value.valid && r.value.httpStatus >= 200 && r.value.httpStatus < 300;
|
|
176
|
+
return fine ? 0 : 1;
|
|
177
|
+
}
|
|
178
|
+
/** Why the command line cannot be run as asked; null when it can. Pure. */
|
|
179
|
+
export function usageProblem(a) {
|
|
180
|
+
if (!isSubcommand(a.sub))
|
|
181
|
+
return `\`submission\` needs a subcommand: ${SUBCOMMANDS.join(" or ")} — got \`${a.sub ?? ""}\``;
|
|
182
|
+
if (a.extra.length > 0)
|
|
183
|
+
return `\`submission ${a.sub}\` takes one paper folder — got also \`${a.extra.join(" ")}\``;
|
|
184
|
+
const updateOnly = [
|
|
185
|
+
a.abstract === null ? null : "--abstract",
|
|
186
|
+
a.submit ? "--submit" : null,
|
|
187
|
+
a.save ? "--save" : null,
|
|
188
|
+
].filter((f) => f !== null);
|
|
189
|
+
return a.sub === "show" && updateOnly.length > 0
|
|
190
|
+
? `${updateOnly.join(", ")}: only \`submission update\` changes anything; \`show\` reads`
|
|
191
|
+
: null;
|
|
192
|
+
}
|
|
193
|
+
/** `paperlint submission <show|update> [paper-dir]` — exit 0, 1 (the portal said no), or 2 (usage). */
|
|
194
|
+
export async function runSubmission(a, deps) {
|
|
195
|
+
const usage = usageProblem(a);
|
|
196
|
+
if (usage !== null)
|
|
197
|
+
return (deps.err(usage), 2);
|
|
198
|
+
const paperDir = resolve(deps.cwd, a.paperDir);
|
|
199
|
+
const t = submissionTarget(paperDir, deps.presets);
|
|
200
|
+
if (!t.ok)
|
|
201
|
+
return (deps.err(t.error), 2);
|
|
202
|
+
const token = tokenFor(t.value.portal, deps.env);
|
|
203
|
+
if (!token.ok)
|
|
204
|
+
return (deps.err(token.error), 2);
|
|
205
|
+
const portal = deps.portalFor(t.value.portal, token.value);
|
|
206
|
+
const pdfPath = a.pdf === null ? t.value.pdf : resolve(deps.cwd, a.pdf);
|
|
207
|
+
return a.sub === "show"
|
|
208
|
+
? runShow(t.value, portal, pdfPath, deps)
|
|
209
|
+
: runUpdate(t.value, portal, { ...a, pdfPath }, deps);
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=submission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submission.js","sourceRoot":"","sources":["../src/submission.ts"],"names":[],"mappings":"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"}
|