@tantawowa/hosanna-tools 2.10.0 → 2.12.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,140 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.resolvePosition = resolvePosition;
37
+ exports.resolveMapPath = resolveMapPath;
38
+ exports.processLine = processLine;
39
+ exports.createStackResolverTransform = createStackResolverTransform;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const source_map_1 = require("source-map");
43
+ /** Matches stack lines like: at fn() As Dynamic (src/components/source_3.brs:6404) */
44
+ const STACK_LINE_RE = /(\s*at\s+.+?)\s*\(([^)]+):(\d+)\)\s*$/;
45
+ /** Matches Roku backtrace format: file/line: pkg:/components/source_0.brs(7475) */
46
+ const ROKU_FILE_LINE_RE = /^(\s*file\/line:\s*)(.+?\.brs)\((\d+)\)\s*$/;
47
+ /** Matches Roku compile error format: ... in pkg:/components/source_3.brs(4710) */
48
+ const ROKU_COMPILE_ERROR_RE = /^(.+?)\s+in\s+(.+?\.brs)\((\d+)\)\s*$/;
49
+ async function resolvePosition(mapPath, line, column) {
50
+ const absPath = path.isAbsolute(mapPath) ? mapPath : path.resolve(process.cwd(), mapPath);
51
+ if (!fs.existsSync(absPath)) {
52
+ return { source: null, line: null, column: null };
53
+ }
54
+ const raw = JSON.parse(fs.readFileSync(absPath, 'utf8'));
55
+ return source_map_1.SourceMapConsumer.with(raw, null, consumer => {
56
+ const pos = consumer.originalPositionFor({
57
+ line,
58
+ column,
59
+ bias: source_map_1.SourceMapConsumer.GREATEST_LOWER_BOUND,
60
+ });
61
+ return {
62
+ source: pos.source,
63
+ line: pos.line,
64
+ column: pos.column,
65
+ };
66
+ });
67
+ }
68
+ function resolveMapPath(stackPath, sourceRoot) {
69
+ const root = path.isAbsolute(sourceRoot) ? sourceRoot : path.resolve(process.cwd(), sourceRoot);
70
+ const baseDir = path.dirname(root);
71
+ let normalized = stackPath.replace(/\\/g, '/');
72
+ // Strip pkg:/ prefix - Roku uses pkg:/path for packaged files; path is relative to package root
73
+ if (normalized.startsWith('pkg:/')) {
74
+ normalized = normalized.slice(5);
75
+ const brsPath = path.join(root, normalized);
76
+ return path.normalize(brsPath + '.map');
77
+ }
78
+ const brsPath = path.isAbsolute(normalized)
79
+ ? normalized
80
+ : path.join(baseDir, normalized);
81
+ return path.normalize(brsPath + '.map');
82
+ }
83
+ function formatMapping(brsPath, brsLine, pos) {
84
+ var _a, _b;
85
+ if (!pos.source || pos.line == null)
86
+ return '';
87
+ const tsPath = pos.source.replace(/\\/g, '/');
88
+ const tsRel = tsPath.includes('/src/') ? tsPath.replace(/^.*\/src\//, 'src/') : (_a = tsPath.split(/[/\\]/).pop()) !== null && _a !== void 0 ? _a : tsPath;
89
+ const tsCol = pos.column != null && pos.column > 0 ? `:${pos.column}` : '';
90
+ const brsNorm = brsPath.replace(/\\/g, '/');
91
+ const brsRel = brsNorm.includes('/src/') ? brsNorm.replace(/^.*\/src\//, 'src/') : (_b = brsNorm.split(/[/\\]/).pop()) !== null && _b !== void 0 ? _b : brsNorm;
92
+ return `${brsRel}:${brsLine} -> ${tsRel}:${pos.line}${tsCol}`;
93
+ }
94
+ async function processLine(line, sourceRoot) {
95
+ const stripped = line.replace(/\r/g, '');
96
+ // Try Roku backtrace format first: file/line: pkg:/path.brs(line)
97
+ const rokuMatch = stripped.match(ROKU_FILE_LINE_RE);
98
+ if (rokuMatch) {
99
+ const [, prefix, filePath, lineNum] = rokuMatch;
100
+ const lineNo = parseInt(lineNum, 10);
101
+ if (!isNaN(lineNo)) {
102
+ const mapPath = resolveMapPath(filePath, sourceRoot);
103
+ const pos = await resolvePosition(mapPath, lineNo, 0);
104
+ const mapping = formatMapping(filePath, lineNo, pos);
105
+ if (mapping)
106
+ return `${prefix}${mapping}`;
107
+ }
108
+ return stripped;
109
+ }
110
+ // Try Roku compile error format: ... in pkg:/path.brs(line)
111
+ const compileMatch = stripped.match(ROKU_COMPILE_ERROR_RE);
112
+ if (compileMatch) {
113
+ const [, prefix, filePath, lineNum] = compileMatch;
114
+ const lineNo = parseInt(lineNum, 10);
115
+ if (!isNaN(lineNo)) {
116
+ const mapPath = resolveMapPath(filePath, sourceRoot);
117
+ const pos = await resolvePosition(mapPath, lineNo, 0);
118
+ const mapping = formatMapping(filePath, lineNo, pos);
119
+ if (mapping)
120
+ return `${prefix} in ${mapping}`;
121
+ }
122
+ return stripped;
123
+ }
124
+ // Fall back to at fn() (path:line) format
125
+ const m = stripped.match(STACK_LINE_RE);
126
+ if (!m)
127
+ return stripped;
128
+ const [, prefix, filePath, lineNum] = m;
129
+ const lineNo = parseInt(lineNum, 10);
130
+ if (isNaN(lineNo))
131
+ return stripped;
132
+ const mapPath = resolveMapPath(filePath, sourceRoot);
133
+ const pos = await resolvePosition(mapPath, lineNo, 0);
134
+ const mapping = formatMapping(filePath, lineNo, pos);
135
+ return mapping ? `${prefix} (${mapping})` : stripped;
136
+ }
137
+ function createStackResolverTransform(sourceRoot) {
138
+ return (line) => processLine(line, sourceRoot);
139
+ }
140
+ //# sourceMappingURL=roku-stack-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roku-stack-resolver.js","sourceRoot":"","sources":["../../src/support-tools/roku-stack-resolver.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,11 @@ export type RunRokuOptions = {
3
3
  installerPassword?: string;
4
4
  appPackage?: string;
5
5
  sourceRoot?: string;
6
+ sourceMapRoot?: string;
6
7
  files?: string[];
7
8
  logs?: boolean;
8
9
  logOutput?: boolean;
10
+ applySourceMapToPaths?: boolean;
9
11
  dotenv?: boolean;
10
12
  };
11
13
  export declare function runRoku(opts: RunRokuOptions): Promise<void>;