podlite 0.0.53 → 0.0.55

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.podlite CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  =head1 Upcoming
4
4
 
5
+ =head1 0.0.55
6
+
7
+ =item add C<< podlite query <selector> <files...> >> subcommand. Extracts blocks matching a selector. C<--to> selects C<podlite> (default, raw source), C<md>, C<html>, C<json>. C<--fail-on-empty> sets exit 1 on empty result. Match count on stderr unless C<--quiet>. Reads stdin when piped or when C<-> is given as a file argument
8
+ =item C<parseSelector> accepts bare pattern-list without a leading pipe (e.g. C<head1, code[:lang<python>]>); behaviour unchanged when the selector contains a C<|>
9
+
10
+ =head1 0.0.54
11
+
12
+ =item add C<< podlite lint <files...> >> subcommand (stub; rules land in upcoming releases)
13
+
5
14
  =head1 0.0.47
6
15
 
7
16
  =item added CLI entrypoint C<bin/podlite.js>
package/esm/cli.js CHANGED
@@ -1,26 +1,44 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
3
  import { parse, toMarkdown, toHtml } from '@podlite/schema';
4
+ import { runLint } from './lint';
5
+ import { runQuery } from './query';
4
6
  const FORMATS = {
5
7
  md: '.md',
6
8
  markdown: '.md',
7
9
  html: '.html',
8
10
  };
11
+ const QUERY_FORMATS = ['podlite', 'md', 'html', 'json'];
9
12
  function usage() {
10
- console.log(`Usage: podlite convert <files...> --to <format> [-o <output>]
13
+ console.log(`Usage:
14
+ podlite convert <files...> --to <format> [-o <output>]
15
+ podlite lint <files...>
16
+ podlite query <selector> <files...> [--to <format>] [--fail-on-empty] [--quiet]
11
17
 
12
18
  Commands:
13
19
  convert Convert Podlite files to another format
20
+ lint Check Podlite/Markdown files for issues (work in progress)
21
+ query Extract blocks matching a selector
14
22
 
15
23
  Options:
16
- --to Output format: md (markdown), html
24
+ --to Output format
25
+ convert: md (markdown), html
26
+ query: podlite (default), md, html, json
17
27
  -o Output file or directory (default: same dir, new extension)
28
+ --fail-on-empty query: exit 1 if no blocks matched
29
+ --quiet query: suppress match count on stderr
18
30
  --help Show this help
19
31
 
20
32
  Examples:
21
33
  podlite convert doc.pod6 --to md
22
34
  podlite convert *.pod6 --to md -o output/
23
- podlite convert README.pod6 --to md -o README.md`);
35
+ podlite query 'head1' docs/api.podlite
36
+ podlite query 'head1, head2' manual.podlite --to md
37
+ podlite query 'code[:lang<python>]' tutorials/*.podlite --to json
38
+ podlite query '*[:applies-nfr~<N004>]' rules/*.podlite --fail-on-empty
39
+ cat doc.podlite | podlite query 'head1'
40
+ podlite query 'table' --to json - < report.podlite
41
+ podlite lint docs/*.podlite`);
24
42
  }
25
43
  function parseArgs(argv) {
26
44
  const args = {
@@ -28,20 +46,28 @@ function parseArgs(argv) {
28
46
  files: [],
29
47
  to: '',
30
48
  output: '',
49
+ failOnEmpty: false,
50
+ quiet: false,
31
51
  };
32
- let i = 0;
33
52
  if (argv.length === 0 || argv[0] === '--help' || argv[0] === '-h') {
34
53
  return null;
35
54
  }
55
+ let i = 0;
36
56
  args.command = argv[i++];
37
57
  while (i < argv.length) {
38
58
  const arg = argv[i];
39
- if (arg === '--to') {
59
+ if (arg === '--to' || arg === '-t') {
40
60
  args.to = argv[++i] || '';
41
61
  }
42
62
  else if (arg === '-o') {
43
63
  args.output = argv[++i] || '';
44
64
  }
65
+ else if (arg === '--fail-on-empty') {
66
+ args.failOnEmpty = true;
67
+ }
68
+ else if (arg === '--quiet') {
69
+ args.quiet = true;
70
+ }
45
71
  else if (arg === '--help' || arg === '-h') {
46
72
  return null;
47
73
  }
@@ -91,12 +117,88 @@ function convertFile(inputPath, format, outputPath) {
91
117
  console.log(`${inputPath} → ${outFile}`);
92
118
  }
93
119
  }
120
+ function readStdinSync() {
121
+ return fs.readFileSync(0, 'utf-8');
122
+ }
123
+ function runQueryCommand(args) {
124
+ if (!args)
125
+ process.exit(1);
126
+ // First positional arg is the selector, rest are files
127
+ if (args.files.length === 0) {
128
+ console.error('podlite query: missing selector');
129
+ usage();
130
+ process.exit(1);
131
+ }
132
+ const selector = args.files[0];
133
+ const positional = args.files.slice(1);
134
+ // '-' is explicit stdin marker. Piped input (stdin not a TTY) is also treated as input.
135
+ const stdinIsPiped = !process.stdin.isTTY;
136
+ const hasDashMarker = positional.includes('-');
137
+ const files = positional.filter(f => f !== '-');
138
+ let stdinContent;
139
+ if (hasDashMarker || (stdinIsPiped && files.length === 0)) {
140
+ stdinContent = readStdinSync();
141
+ }
142
+ if (files.length === 0 && stdinContent === undefined) {
143
+ console.error('podlite query: missing input files (and no stdin)');
144
+ usage();
145
+ process.exit(1);
146
+ }
147
+ const format = (args.to || 'podlite');
148
+ if (!QUERY_FORMATS.includes(format)) {
149
+ console.error(`podlite query: unknown --to format "${format}". Supported: ${QUERY_FORMATS.join(', ')}`);
150
+ process.exit(1);
151
+ }
152
+ for (const f of files) {
153
+ if (!fs.existsSync(f)) {
154
+ console.error(`File not found: ${f}`);
155
+ process.exit(1);
156
+ }
157
+ }
158
+ try {
159
+ const result = runQuery({
160
+ selector,
161
+ files,
162
+ format,
163
+ failOnEmpty: args.failOnEmpty,
164
+ quiet: args.quiet,
165
+ stdinContent,
166
+ });
167
+ if (args.output) {
168
+ fs.writeFileSync(args.output, result.output);
169
+ }
170
+ else if (result.output) {
171
+ process.stdout.write(result.output);
172
+ if (!result.output.endsWith('\n'))
173
+ process.stdout.write('\n');
174
+ }
175
+ if (!args.quiet) {
176
+ console.error(`${result.matchCount} match${result.matchCount === 1 ? '' : 'es'}`);
177
+ }
178
+ process.exit(result.exitCode);
179
+ }
180
+ catch (e) {
181
+ console.error(`podlite query: ${e.message}`);
182
+ process.exit(1);
183
+ }
184
+ }
94
185
  function main() {
95
186
  const args = parseArgs(process.argv.slice(2));
96
187
  if (!args) {
97
188
  usage();
98
189
  process.exit(0);
99
190
  }
191
+ if (args.command === 'query') {
192
+ runQueryCommand(args);
193
+ }
194
+ if (args.command === 'lint') {
195
+ if (args.files.length === 0) {
196
+ console.error('No input files specified');
197
+ usage();
198
+ process.exit(1);
199
+ }
200
+ process.exit(runLint(args.files));
201
+ }
100
202
  if (args.command !== 'convert') {
101
203
  console.error(`Unknown command: ${args.command}`);
102
204
  usage();
package/esm/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PodliteDocument } from '@podlite/schema';
2
+ import type { Rule, LintContext, Violation } from './types';
3
+ export declare function runRules(ast: PodliteDocument, rules: Rule[], ctx: LintContext): Violation[];
@@ -0,0 +1,4 @@
1
+ export function runRules(ast, rules, ctx) {
2
+ return rules.flatMap(rule => rule.check(ast, ctx));
3
+ }
4
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/lint/engine.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,QAAQ,CAAC,GAAoB,EAAE,KAAa,EAAE,GAAgB;IAC5E,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;AACpD,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function runLint(files: string[]): number;
@@ -0,0 +1,13 @@
1
+ /* =begin pod
2
+ =head2 C<runLint>
3
+
4
+ Stub entry point for the C<podlite lint> subcommand. Returns the exit code
5
+ the CLI should propagate. Until rules land (Track 7 phase 2), it logs a
6
+ placeholder and exits cleanly.
7
+
8
+ =end pod */
9
+ export function runLint(files) {
10
+ console.log(`lint: stub — received ${files.length} file(s); rules not yet implemented`);
11
+ return 0;
12
+ }
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;WAOW;AACX,MAAM,UAAU,OAAO,CAAC,KAAe;IACrC,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,MAAM,qCAAqC,CAAC,CAAA;IACvF,OAAO,CAAC,CAAA;AACV,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Location, PodliteDocument } from '@podlite/schema';
2
+ export declare type Severity = 'error' | 'warning' | 'info';
3
+ export declare type FileType = 'md' | 'podlite';
4
+ export declare type LintConfig = Record<string, never>;
5
+ export declare type LintContext = {
6
+ filePath: string;
7
+ fileType: FileType;
8
+ config: LintConfig;
9
+ };
10
+ export declare type Violation = {
11
+ rule: string;
12
+ severity: Severity;
13
+ message: string;
14
+ location?: Location;
15
+ };
16
+ export declare type Rule = {
17
+ id: string;
18
+ severity: Severity;
19
+ check: (ast: PodliteDocument, ctx: LintContext) => Violation[];
20
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lint/types.ts"],"names":[],"mappings":""}
package/esm/query.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ export declare type QueryFormat = 'podlite' | 'md' | 'html' | 'json';
2
+ export declare type QueryOptions = {
3
+ selector: string;
4
+ files: string[];
5
+ format: QueryFormat;
6
+ failOnEmpty: boolean;
7
+ quiet: boolean;
8
+ stdinContent?: string;
9
+ };
10
+ export declare type QueryResult = {
11
+ output: string;
12
+ matchCount: number;
13
+ exitCode: number;
14
+ };
15
+ export declare const runQuery: (opts: QueryOptions) => QueryResult;
package/esm/query.js ADDED
@@ -0,0 +1,67 @@
1
+ import * as fs from 'fs';
2
+ import { parse, parseSelector, runSelector, toHtml, toMarkdown } from '@podlite/schema';
3
+ const loadSource = (file) => {
4
+ const text = fs.readFileSync(file, 'utf-8');
5
+ return { file, text, node: parse(text) };
6
+ };
7
+ const sliceBlock = (text, block) => {
8
+ const loc = block?.location;
9
+ if (!loc || typeof loc.start?.offset !== 'number' || typeof loc.end?.offset !== 'number') {
10
+ return '';
11
+ }
12
+ return text.slice(loc.start.offset, loc.end.offset);
13
+ };
14
+ // Each block is rendered through its own pod-block invocation. Wrapping
15
+ // multiple matches into one synthetic container triggers serializer
16
+ // warnings on some exporters; per-block keeps output clean.
17
+ const renderViaRoot = (block, serializer) => {
18
+ const root = { type: 'block', name: 'pod', margin: '', content: [block] };
19
+ const out = serializer === 'md' ? toMarkdown({}).run(root) : toHtml({}).run(root);
20
+ return out.toString();
21
+ };
22
+ const formatBlocks = (format, matches) => {
23
+ if (format === 'json') {
24
+ return JSON.stringify(matches.map(m => m.block), null, 2);
25
+ }
26
+ if (format === 'podlite') {
27
+ return matches
28
+ .map(m => sliceBlock(m.source.text, m.block).trimEnd())
29
+ .filter(Boolean)
30
+ .join('\n\n');
31
+ }
32
+ if (format === 'md' || format === 'html') {
33
+ return matches.map(m => renderViaRoot(m.block, format).trimEnd()).filter(Boolean).join('\n\n');
34
+ }
35
+ throw new Error(`Unknown output format: ${format}`);
36
+ };
37
+ export const runQuery = (opts) => {
38
+ const parsed = parseSelector(opts.selector);
39
+ if (!parsed) {
40
+ throw new Error(`Invalid selector: ${opts.selector}`);
41
+ }
42
+ const sources = [];
43
+ if (opts.stdinContent !== undefined) {
44
+ sources.push({ file: '<stdin>', text: opts.stdinContent, node: parse(opts.stdinContent) });
45
+ }
46
+ for (const f of opts.files) {
47
+ sources.push(loadSource(f));
48
+ }
49
+ if (sources.length === 0) {
50
+ throw new Error('No input files (and no stdin)');
51
+ }
52
+ // Per-source invocation preserves file context for source-slicing in podlite output
53
+ const matches = [];
54
+ for (const src of sources) {
55
+ const docs = [{ file: src.file, node: src.node }];
56
+ const result = runSelector(opts.selector, docs);
57
+ for (const item of result) {
58
+ if (item && typeof item === 'object' && !('file' in item)) {
59
+ matches.push({ source: src, block: item });
60
+ }
61
+ }
62
+ }
63
+ const output = formatBlocks(opts.format, matches);
64
+ const exitCode = opts.failOnEmpty && matches.length === 0 ? 1 : 0;
65
+ return { output, matchCount: matches.length, exitCode };
66
+ };
67
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
package/lib/cli.js CHANGED
@@ -22,26 +22,44 @@ Object.defineProperty(exports, "__esModule", { value: true });
22
22
  const fs = __importStar(require("fs"));
23
23
  const path = __importStar(require("path"));
24
24
  const schema_1 = require("@podlite/schema");
25
+ const lint_1 = require("./lint");
26
+ const query_1 = require("./query");
25
27
  const FORMATS = {
26
28
  md: '.md',
27
29
  markdown: '.md',
28
30
  html: '.html',
29
31
  };
32
+ const QUERY_FORMATS = ['podlite', 'md', 'html', 'json'];
30
33
  function usage() {
31
- console.log(`Usage: podlite convert <files...> --to <format> [-o <output>]
34
+ console.log(`Usage:
35
+ podlite convert <files...> --to <format> [-o <output>]
36
+ podlite lint <files...>
37
+ podlite query <selector> <files...> [--to <format>] [--fail-on-empty] [--quiet]
32
38
 
33
39
  Commands:
34
40
  convert Convert Podlite files to another format
41
+ lint Check Podlite/Markdown files for issues (work in progress)
42
+ query Extract blocks matching a selector
35
43
 
36
44
  Options:
37
- --to Output format: md (markdown), html
45
+ --to Output format
46
+ convert: md (markdown), html
47
+ query: podlite (default), md, html, json
38
48
  -o Output file or directory (default: same dir, new extension)
49
+ --fail-on-empty query: exit 1 if no blocks matched
50
+ --quiet query: suppress match count on stderr
39
51
  --help Show this help
40
52
 
41
53
  Examples:
42
54
  podlite convert doc.pod6 --to md
43
55
  podlite convert *.pod6 --to md -o output/
44
- podlite convert README.pod6 --to md -o README.md`);
56
+ podlite query 'head1' docs/api.podlite
57
+ podlite query 'head1, head2' manual.podlite --to md
58
+ podlite query 'code[:lang<python>]' tutorials/*.podlite --to json
59
+ podlite query '*[:applies-nfr~<N004>]' rules/*.podlite --fail-on-empty
60
+ cat doc.podlite | podlite query 'head1'
61
+ podlite query 'table' --to json - < report.podlite
62
+ podlite lint docs/*.podlite`);
45
63
  }
46
64
  function parseArgs(argv) {
47
65
  const args = {
@@ -49,20 +67,28 @@ function parseArgs(argv) {
49
67
  files: [],
50
68
  to: '',
51
69
  output: '',
70
+ failOnEmpty: false,
71
+ quiet: false,
52
72
  };
53
- let i = 0;
54
73
  if (argv.length === 0 || argv[0] === '--help' || argv[0] === '-h') {
55
74
  return null;
56
75
  }
76
+ let i = 0;
57
77
  args.command = argv[i++];
58
78
  while (i < argv.length) {
59
79
  const arg = argv[i];
60
- if (arg === '--to') {
80
+ if (arg === '--to' || arg === '-t') {
61
81
  args.to = argv[++i] || '';
62
82
  }
63
83
  else if (arg === '-o') {
64
84
  args.output = argv[++i] || '';
65
85
  }
86
+ else if (arg === '--fail-on-empty') {
87
+ args.failOnEmpty = true;
88
+ }
89
+ else if (arg === '--quiet') {
90
+ args.quiet = true;
91
+ }
66
92
  else if (arg === '--help' || arg === '-h') {
67
93
  return null;
68
94
  }
@@ -112,12 +138,88 @@ function convertFile(inputPath, format, outputPath) {
112
138
  console.log(`${inputPath} → ${outFile}`);
113
139
  }
114
140
  }
141
+ function readStdinSync() {
142
+ return fs.readFileSync(0, 'utf-8');
143
+ }
144
+ function runQueryCommand(args) {
145
+ if (!args)
146
+ process.exit(1);
147
+ // First positional arg is the selector, rest are files
148
+ if (args.files.length === 0) {
149
+ console.error('podlite query: missing selector');
150
+ usage();
151
+ process.exit(1);
152
+ }
153
+ const selector = args.files[0];
154
+ const positional = args.files.slice(1);
155
+ // '-' is explicit stdin marker. Piped input (stdin not a TTY) is also treated as input.
156
+ const stdinIsPiped = !process.stdin.isTTY;
157
+ const hasDashMarker = positional.includes('-');
158
+ const files = positional.filter(f => f !== '-');
159
+ let stdinContent;
160
+ if (hasDashMarker || (stdinIsPiped && files.length === 0)) {
161
+ stdinContent = readStdinSync();
162
+ }
163
+ if (files.length === 0 && stdinContent === undefined) {
164
+ console.error('podlite query: missing input files (and no stdin)');
165
+ usage();
166
+ process.exit(1);
167
+ }
168
+ const format = (args.to || 'podlite');
169
+ if (!QUERY_FORMATS.includes(format)) {
170
+ console.error(`podlite query: unknown --to format "${format}". Supported: ${QUERY_FORMATS.join(', ')}`);
171
+ process.exit(1);
172
+ }
173
+ for (const f of files) {
174
+ if (!fs.existsSync(f)) {
175
+ console.error(`File not found: ${f}`);
176
+ process.exit(1);
177
+ }
178
+ }
179
+ try {
180
+ const result = (0, query_1.runQuery)({
181
+ selector,
182
+ files,
183
+ format,
184
+ failOnEmpty: args.failOnEmpty,
185
+ quiet: args.quiet,
186
+ stdinContent,
187
+ });
188
+ if (args.output) {
189
+ fs.writeFileSync(args.output, result.output);
190
+ }
191
+ else if (result.output) {
192
+ process.stdout.write(result.output);
193
+ if (!result.output.endsWith('\n'))
194
+ process.stdout.write('\n');
195
+ }
196
+ if (!args.quiet) {
197
+ console.error(`${result.matchCount} match${result.matchCount === 1 ? '' : 'es'}`);
198
+ }
199
+ process.exit(result.exitCode);
200
+ }
201
+ catch (e) {
202
+ console.error(`podlite query: ${e.message}`);
203
+ process.exit(1);
204
+ }
205
+ }
115
206
  function main() {
116
207
  const args = parseArgs(process.argv.slice(2));
117
208
  if (!args) {
118
209
  usage();
119
210
  process.exit(0);
120
211
  }
212
+ if (args.command === 'query') {
213
+ runQueryCommand(args);
214
+ }
215
+ if (args.command === 'lint') {
216
+ if (args.files.length === 0) {
217
+ console.error('No input files specified');
218
+ usage();
219
+ process.exit(1);
220
+ }
221
+ process.exit((0, lint_1.runLint)(args.files));
222
+ }
121
223
  if (args.command !== 'convert') {
122
224
  console.error(`Unknown command: ${args.command}`);
123
225
  usage();
package/lib/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PodliteDocument } from '@podlite/schema';
2
+ import type { Rule, LintContext, Violation } from './types';
3
+ export declare function runRules(ast: PodliteDocument, rules: Rule[], ctx: LintContext): Violation[];
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runRules = void 0;
4
+ function runRules(ast, rules, ctx) {
5
+ return rules.flatMap(rule => rule.check(ast, ctx));
6
+ }
7
+ exports.runRules = runRules;
8
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/lint/engine.ts"],"names":[],"mappings":";;;AAGA,SAAgB,QAAQ,CAAC,GAAoB,EAAE,KAAa,EAAE,GAAgB;IAC5E,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;AACpD,CAAC;AAFD,4BAEC"}
@@ -0,0 +1 @@
1
+ export declare function runLint(files: string[]): number;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runLint = void 0;
4
+ /* =begin pod
5
+ =head2 C<runLint>
6
+
7
+ Stub entry point for the C<podlite lint> subcommand. Returns the exit code
8
+ the CLI should propagate. Until rules land (Track 7 phase 2), it logs a
9
+ placeholder and exits cleanly.
10
+
11
+ =end pod */
12
+ function runLint(files) {
13
+ console.log(`lint: stub — received ${files.length} file(s); rules not yet implemented`);
14
+ return 0;
15
+ }
16
+ exports.runLint = runLint;
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lint/index.ts"],"names":[],"mappings":";;;AAAA;;;;;;;WAOW;AACX,SAAgB,OAAO,CAAC,KAAe;IACrC,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,MAAM,qCAAqC,CAAC,CAAA;IACvF,OAAO,CAAC,CAAA;AACV,CAAC;AAHD,0BAGC"}
@@ -0,0 +1,20 @@
1
+ import type { Location, PodliteDocument } from '@podlite/schema';
2
+ export declare type Severity = 'error' | 'warning' | 'info';
3
+ export declare type FileType = 'md' | 'podlite';
4
+ export declare type LintConfig = Record<string, never>;
5
+ export declare type LintContext = {
6
+ filePath: string;
7
+ fileType: FileType;
8
+ config: LintConfig;
9
+ };
10
+ export declare type Violation = {
11
+ rule: string;
12
+ severity: Severity;
13
+ message: string;
14
+ location?: Location;
15
+ };
16
+ export declare type Rule = {
17
+ id: string;
18
+ severity: Severity;
19
+ check: (ast: PodliteDocument, ctx: LintContext) => Violation[];
20
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lint/types.ts"],"names":[],"mappings":""}
package/lib/query.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ export declare type QueryFormat = 'podlite' | 'md' | 'html' | 'json';
2
+ export declare type QueryOptions = {
3
+ selector: string;
4
+ files: string[];
5
+ format: QueryFormat;
6
+ failOnEmpty: boolean;
7
+ quiet: boolean;
8
+ stdinContent?: string;
9
+ };
10
+ export declare type QueryResult = {
11
+ output: string;
12
+ matchCount: number;
13
+ exitCode: number;
14
+ };
15
+ export declare const runQuery: (opts: QueryOptions) => QueryResult;
package/lib/query.js ADDED
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.runQuery = void 0;
23
+ const fs = __importStar(require("fs"));
24
+ const schema_1 = require("@podlite/schema");
25
+ const loadSource = (file) => {
26
+ const text = fs.readFileSync(file, 'utf-8');
27
+ return { file, text, node: (0, schema_1.parse)(text) };
28
+ };
29
+ const sliceBlock = (text, block) => {
30
+ const loc = block?.location;
31
+ if (!loc || typeof loc.start?.offset !== 'number' || typeof loc.end?.offset !== 'number') {
32
+ return '';
33
+ }
34
+ return text.slice(loc.start.offset, loc.end.offset);
35
+ };
36
+ // Each block is rendered through its own pod-block invocation. Wrapping
37
+ // multiple matches into one synthetic container triggers serializer
38
+ // warnings on some exporters; per-block keeps output clean.
39
+ const renderViaRoot = (block, serializer) => {
40
+ const root = { type: 'block', name: 'pod', margin: '', content: [block] };
41
+ const out = serializer === 'md' ? (0, schema_1.toMarkdown)({}).run(root) : (0, schema_1.toHtml)({}).run(root);
42
+ return out.toString();
43
+ };
44
+ const formatBlocks = (format, matches) => {
45
+ if (format === 'json') {
46
+ return JSON.stringify(matches.map(m => m.block), null, 2);
47
+ }
48
+ if (format === 'podlite') {
49
+ return matches
50
+ .map(m => sliceBlock(m.source.text, m.block).trimEnd())
51
+ .filter(Boolean)
52
+ .join('\n\n');
53
+ }
54
+ if (format === 'md' || format === 'html') {
55
+ return matches.map(m => renderViaRoot(m.block, format).trimEnd()).filter(Boolean).join('\n\n');
56
+ }
57
+ throw new Error(`Unknown output format: ${format}`);
58
+ };
59
+ const runQuery = (opts) => {
60
+ const parsed = (0, schema_1.parseSelector)(opts.selector);
61
+ if (!parsed) {
62
+ throw new Error(`Invalid selector: ${opts.selector}`);
63
+ }
64
+ const sources = [];
65
+ if (opts.stdinContent !== undefined) {
66
+ sources.push({ file: '<stdin>', text: opts.stdinContent, node: (0, schema_1.parse)(opts.stdinContent) });
67
+ }
68
+ for (const f of opts.files) {
69
+ sources.push(loadSource(f));
70
+ }
71
+ if (sources.length === 0) {
72
+ throw new Error('No input files (and no stdin)');
73
+ }
74
+ // Per-source invocation preserves file context for source-slicing in podlite output
75
+ const matches = [];
76
+ for (const src of sources) {
77
+ const docs = [{ file: src.file, node: src.node }];
78
+ const result = (0, schema_1.runSelector)(opts.selector, docs);
79
+ for (const item of result) {
80
+ if (item && typeof item === 'object' && !('file' in item)) {
81
+ matches.push({ source: src, block: item });
82
+ }
83
+ }
84
+ }
85
+ const output = formatBlocks(opts.format, matches);
86
+ const exitCode = opts.failOnEmpty && matches.length === 0 ? 1 : 0;
87
+ return { output, matchCount: matches.length, exitCode };
88
+ };
89
+ exports.runQuery = runQuery;
90
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "podlite",
3
- "version": "0.0.53",
3
+ "version": "0.0.55",
4
4
  "description": "Podlite markup language parser — Markdown-compatible, with native support for diagrams, formulas, and custom blocks",
5
5
  "homepage": "https://podlite.org",
6
6
  "repository": {
@@ -16,6 +16,7 @@
16
16
  "scripts": {
17
17
  "test": "yarn g:jest --passWithNoTests",
18
18
  "build": "yarn g:build",
19
+ "typecheck:lint": "tsc -p src/lint/tsconfig.json --noEmit",
19
20
  "watch": "run-p -r watch:*",
20
21
  "watch:ts": "tsc -w --pretty",
21
22
  "watch:tests": "jest --watch -t \"test\""
@@ -49,12 +50,12 @@
49
50
  "url": "https://github.com/podlite/podlite/issues"
50
51
  },
51
52
  "dependencies": {
52
- "@podlite/diagram": "^0.0.44",
53
- "@podlite/formula": "0.0.22",
54
- "@podlite/image": "^0.0.39",
55
- "@podlite/markdown": "0.0.33",
56
- "@podlite/schema": "^0.0.40",
57
- "@podlite/toc": "0.0.33",
53
+ "@podlite/diagram": "^0.0.46",
54
+ "@podlite/formula": "0.0.24",
55
+ "@podlite/image": "^0.0.41",
56
+ "@podlite/markdown": "0.0.35",
57
+ "@podlite/schema": "^0.0.42",
58
+ "@podlite/toc": "0.0.35",
58
59
  "nanoid": "3.1.30"
59
60
  },
60
61
  "devDependencies": {