bkper 4.9.1 → 4.10.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.
@@ -0,0 +1,14 @@
1
+ export interface LiveCheckConfig {
2
+ cliCmd: string;
3
+ bookId: string;
4
+ accountName?: string;
5
+ balanceSheetRootGroup?: string;
6
+ profitAndLossRootGroup?: string;
7
+ }
8
+ export interface MaterializedCommand {
9
+ command?: string;
10
+ skipReason?: string;
11
+ }
12
+ export declare function extractRunnableQueryCommands(content: string): string[];
13
+ export declare function materializeCommand(command: string, config: LiveCheckConfig): MaterializedCommand;
14
+ //# sourceMappingURL=live-readme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-readme.d.ts","sourceRoot":"","sources":["../../src/docs-compliance/live-readme.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AA4DD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CActE;AAED,wBAAgB,kBAAkB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,eAAe,GACxB,mBAAmB,CAiCrB"}
@@ -0,0 +1,89 @@
1
+ function getBashCodeBlocks(content) {
2
+ const blocks = [];
3
+ const regex = /```bash\n([\s\S]*?)```/g;
4
+ let match;
5
+ while ((match = regex.exec(content)) !== null) {
6
+ blocks.push(match[1]);
7
+ }
8
+ return blocks;
9
+ }
10
+ function flattenContinuationLines(block) {
11
+ const lines = block.split('\n').map(line => line.trimEnd());
12
+ const flattened = [];
13
+ let buffer = '';
14
+ for (const rawLine of lines) {
15
+ const line = rawLine.trim();
16
+ if (!line || line.startsWith('#')) {
17
+ continue;
18
+ }
19
+ if (!buffer) {
20
+ buffer = line;
21
+ }
22
+ else {
23
+ buffer = `${buffer} ${line}`;
24
+ }
25
+ if (line.endsWith('\\')) {
26
+ buffer = buffer.slice(0, -1).trimEnd();
27
+ continue;
28
+ }
29
+ flattened.push(buffer.replace(/\s+/g, ' ').trim());
30
+ buffer = '';
31
+ }
32
+ if (buffer) {
33
+ flattened.push(buffer.replace(/\s+/g, ' ').trim());
34
+ }
35
+ return flattened;
36
+ }
37
+ function isRunnableQueryCommand(command) {
38
+ if (command.includes('|')) {
39
+ return false;
40
+ }
41
+ const queryListPattern = /^bkper\s+(transaction|balance)\s+list\b/i;
42
+ if (!queryListPattern.test(command)) {
43
+ return false;
44
+ }
45
+ return command.includes('-q ') || command.includes('--query ');
46
+ }
47
+ export function extractRunnableQueryCommands(content) {
48
+ const blocks = getBashCodeBlocks(content);
49
+ const commands = [];
50
+ for (const block of blocks) {
51
+ const flattened = flattenContinuationLines(block);
52
+ for (const command of flattened) {
53
+ if (isRunnableQueryCommand(command)) {
54
+ commands.push(command);
55
+ }
56
+ }
57
+ }
58
+ return commands;
59
+ }
60
+ export function materializeCommand(command, config) {
61
+ const replacements = [
62
+ ['abc123', config.bookId],
63
+ ['<bookId>', config.bookId],
64
+ ['$BOOK_ID', config.bookId],
65
+ ['$BOOK', config.bookId],
66
+ ['$BOOK_A', config.bookId],
67
+ ['$SOURCE', config.bookId],
68
+ ['<accountName>', config.accountName],
69
+ ['<balanceSheetRootGroup>', config.balanceSheetRootGroup],
70
+ ['<profitAndLossRootGroup>', config.profitAndLossRootGroup],
71
+ ];
72
+ let materialized = command.replace(/^bkper\b/, config.cliCmd);
73
+ for (const [token, value] of replacements) {
74
+ if (value) {
75
+ materialized = materialized.split(token).join(value);
76
+ }
77
+ }
78
+ const unresolvedPlaceholderPattern = /<[^>]+>|\$[A-Z_]+/;
79
+ if (unresolvedPlaceholderPattern.test(materialized)) {
80
+ return {
81
+ skipReason: `unresolved placeholders in command: ${materialized}`,
82
+ };
83
+ }
84
+ if (!materialized.includes('--format ')) {
85
+ materialized = `${materialized} --format csv`;
86
+ }
87
+ return { command: materialized };
88
+ }
89
+ //# sourceMappingURL=live-readme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-readme.js","sourceRoot":"","sources":["../../src/docs-compliance/live-readme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface ComplianceError {
2
+ code: string;
3
+ message: string;
4
+ line?: number;
5
+ }
6
+ export interface ComplianceResult {
7
+ errors: ComplianceError[];
8
+ }
9
+ export declare function evaluateReadmeCompliance(content: string): ComplianceResult;
10
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/docs-compliance/rules.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,eAAe,EAAE,CAAC;CAC7B;AA4BD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CA8E1E"}
@@ -0,0 +1,74 @@
1
+ function getLineNumber(content, index) {
2
+ return content.slice(0, index).split('\n').length;
3
+ }
4
+ function findMissingQueryErrors(content, commandPattern, code, message) {
5
+ const errors = [];
6
+ const regex = new RegExp(commandPattern.source, 'g');
7
+ let match;
8
+ while ((match = regex.exec(content)) !== null) {
9
+ const command = match[0];
10
+ if (!command.includes('-q ') && !command.includes('--query ')) {
11
+ errors.push({
12
+ code,
13
+ message,
14
+ line: getLineNumber(content, match.index),
15
+ });
16
+ }
17
+ }
18
+ return errors;
19
+ }
20
+ export function evaluateReadmeCompliance(content) {
21
+ const errors = [];
22
+ errors.push(...findMissingQueryErrors(content, /^\s*bkper\s+transaction\s+list\b.*$/gm, 'transaction-list-missing-query', 'Found `bkper transaction list` example without `-q/--query`.'));
23
+ errors.push(...findMissingQueryErrors(content, /^\s*bkper\s+balance\s+list\b.*$/gm, 'balance-list-missing-query', 'Found `bkper balance list` example without `-q/--query`.'));
24
+ const sameDayRangePattern = /after:\$DATE\s+before:\$DATE/g;
25
+ let sameDayMatch;
26
+ while ((sameDayMatch = sameDayRangePattern.exec(content)) !== null) {
27
+ errors.push({
28
+ code: 'same-day-range-antipattern',
29
+ message: 'Found `after:$DATE before:$DATE` anti-pattern. Prefer `on:$DATE`.',
30
+ line: getLineNumber(content, sameDayMatch.index),
31
+ });
32
+ }
33
+ const periodInQueryPattern = /-q\s+"[^"]*period:/g;
34
+ let periodMatch;
35
+ while ((periodMatch = periodInQueryPattern.exec(content)) !== null) {
36
+ errors.push({
37
+ code: 'period-operator-in-query-example',
38
+ message: 'Found `period:` in query example. Prefer documented query operators such as `on:`, `after:`, `before:`, and `by:`.',
39
+ line: getLineNumber(content, periodMatch.index),
40
+ });
41
+ }
42
+ if (!content.includes('LLM-first output guidance (important):')) {
43
+ errors.push({
44
+ code: 'missing-llm-guidance-title',
45
+ message: 'Missing `LLM-first output guidance (important):` section.',
46
+ });
47
+ }
48
+ if (!content.includes('**LLM consumption of lists/reports** → CSV')) {
49
+ errors.push({
50
+ code: 'missing-csv-guidance',
51
+ message: 'Missing guidance mapping LLM list/report consumption to CSV.',
52
+ });
53
+ }
54
+ if (!content.includes('**Programmatic processing / pipelines** → JSON')) {
55
+ errors.push({
56
+ code: 'missing-json-guidance',
57
+ message: 'Missing guidance mapping programmatic pipelines to JSON.',
58
+ });
59
+ }
60
+ if (!content.includes('### Query semantics (transactions and balances)')) {
61
+ errors.push({
62
+ code: 'missing-query-semantics-section',
63
+ message: 'Missing `Query semantics (transactions and balances)` section.',
64
+ });
65
+ }
66
+ if (!content.includes('`after:` is **inclusive** and `before:` is **exclusive**.')) {
67
+ errors.push({
68
+ code: 'missing-after-before-semantics',
69
+ message: 'Missing explicit semantics for `after:` and `before:`.',
70
+ });
71
+ }
72
+ return { errors };
73
+ }
74
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/docs-compliance/rules.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bkper",
3
- "version": "4.9.1",
3
+ "version": "4.10.0",
4
4
  "description": "Command line client for Bkper",
5
5
  "bin": {
6
6
  "bkper": "./lib/cli.js"
@@ -32,7 +32,7 @@
32
32
  "build:compile": "tsc",
33
33
  "api:platform": "openapi-typescript https://platform.bkper.app/openapi.json -o src/platform/types.d.ts",
34
34
  "api:platform:local": "openapi-typescript http://localhost:8790/openapi.json -o src/platform/types.d.ts",
35
- "build:copy-docs": "mkdir -p lib/docs && cp -f docs/*.md lib/docs/ 2>/dev/null || true",
35
+ "build:copy-docs": "mkdir -p lib/docs && cp -f docs/*.md lib/docs/ 2>/dev/null || true && cp -f README.md lib/docs/cli-reference.md",
36
36
  "predev": "bun run build",
37
37
  "dev": "tsc -w",
38
38
  "ports": "devpod ssh ../ -L 6274",
@@ -41,6 +41,8 @@
41
41
  "test:integration": "BKPER_API_URL=${BKPER_API_URL:-http://localhost:8081/_ah/api/bkper} TS_NODE_PROJECT=tsconfig.test.json mocha --config .mocharc.integration.json",
42
42
  "test:deploy": "BKPER_PLATFORM_URL=http://localhost:8790 BKPER_API_URL=https://api-dev.bkper.app TS_NODE_PROJECT=tsconfig.test.json mocha --config .mocharc.deploy.json",
43
43
  "test:all": "bun run test:unit && bun run test:integration",
44
+ "docs:compliance": "TS_NODE_PROJECT=tsconfig.test.json node --loader ts-node/esm ./test/tools/docs-compliance/check.ts",
45
+ "docs:compliance:live": "TS_NODE_PROJECT=tsconfig.test.json node --loader ts-node/esm ./test/tools/docs-compliance/live.ts",
44
46
  "upgrade:api": "bun update @bkper/bkper-api-types --latest && bun update bkper-js --latest",
45
47
  "patch": "yarn version --patch",
46
48
  "minor": "yarn version --minor",
@@ -50,7 +52,7 @@
50
52
  },
51
53
  "dependencies": {
52
54
  "@mariozechner/pi-coding-agent": "^0.60.0",
53
- "bkper-js": "^2.29.4",
55
+ "bkper-js": "^2.31.1",
54
56
  "commander": "^13.1.0",
55
57
  "dotenv": "^8.2.0",
56
58
  "esbuild": "^0.27.2",