@goliapkg/sentori-cli 1.5.0 → 1.7.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.
Files changed (51) hide show
  1. package/README.md +297 -26
  2. package/lib/apps.d.ts +24 -0
  3. package/lib/apps.d.ts.map +1 -0
  4. package/lib/apps.js +17 -0
  5. package/lib/apps.js.map +1 -0
  6. package/lib/artifacts.d.ts +7 -0
  7. package/lib/artifacts.d.ts.map +1 -1
  8. package/lib/artifacts.js +5 -1
  9. package/lib/artifacts.js.map +1 -1
  10. package/lib/compatibility.d.ts +6 -0
  11. package/lib/compatibility.d.ts.map +1 -0
  12. package/lib/compatibility.js +21 -0
  13. package/lib/compatibility.js.map +1 -0
  14. package/lib/index.js +150 -68
  15. package/lib/index.js.map +1 -1
  16. package/lib/issue.d.ts +4 -0
  17. package/lib/issue.d.ts.map +1 -1
  18. package/lib/issue.js +8 -0
  19. package/lib/issue.js.map +1 -1
  20. package/lib/srcbundle.d.ts +37 -2
  21. package/lib/srcbundle.d.ts.map +1 -1
  22. package/lib/srcbundle.js +181 -58
  23. package/lib/srcbundle.js.map +1 -1
  24. package/lib/upload.d.ts +25 -0
  25. package/lib/upload.d.ts.map +1 -1
  26. package/lib/upload.js +52 -1
  27. package/lib/upload.js.map +1 -1
  28. package/lib/workflow.d.ts +47 -0
  29. package/lib/workflow.d.ts.map +1 -0
  30. package/lib/workflow.js +289 -0
  31. package/lib/workflow.js.map +1 -0
  32. package/package.json +10 -6
  33. package/src/__tests__/apps.test.ts +48 -0
  34. package/src/__tests__/artifacts.test.ts +1 -1
  35. package/src/__tests__/compatibility.test.ts +80 -0
  36. package/src/__tests__/expand-sourcemaps.test.ts +56 -0
  37. package/src/__tests__/rn-upload-hook.test.ts +35 -0
  38. package/src/__tests__/srcbundle.test.ts +66 -0
  39. package/src/__tests__/workflow.test.ts +102 -0
  40. package/src/apps.ts +31 -0
  41. package/src/artifacts.ts +12 -1
  42. package/src/compatibility.ts +21 -0
  43. package/src/index.ts +123 -69
  44. package/src/issue.ts +5 -1
  45. package/src/srcbundle.ts +150 -61
  46. package/src/upload.ts +51 -1
  47. package/src/workflow.ts +240 -0
  48. package/lib/source-bundle.d.ts +0 -28
  49. package/lib/source-bundle.d.ts.map +0 -1
  50. package/lib/source-bundle.js +0 -193
  51. package/lib/source-bundle.js.map +0 -1
package/lib/srcbundle.js CHANGED
@@ -1,69 +1,192 @@
1
- // `sentori-cli upload srcbundle` — native source context without
2
- // repository access.
3
- //
4
- // Walks the given directories for native source files, packs them
5
- // as one JSON object (project-relative path → content), and lands
6
- // it on the artifacts endpoint as kind `srcbundle`. The server
7
- // reads it when a dSYM/proguard frame resolves to file+line, so
8
- // the dashboard shows the failing native code the same way a
9
- // sourcemap's embedded sourcesContent covers JS. The build owns
10
- // exactly what goes in — nothing is pulled from git, ever.
11
- import { readFileSync, readdirSync, statSync } from 'node:fs';
12
- import { join, relative } from 'node:path';
13
- /** Native + shared-code extensions worth carrying. JS/TS ride the
14
- * sourcemap already; including them anyway is harmless but bulky,
15
- * so they stay out by default. */
16
- const SOURCE_EXTS = new Set(['.swift', '.kt', '.kts', '.java', '.m', '.mm', '.h', '.c', '.cc', '.cpp', '.hpp']);
17
- const SKIP_DIRS = new Set(['node_modules', '.git', 'build', 'Pods', 'DerivedData', '.gradle', 'dist']);
18
- /** A single source file larger than this is generated, not written. */
19
- const MAX_FILE_BYTES = 512 * 1024;
20
- /** Total budget before compression; the wire is gzip anyway. */
21
- const MAX_TOTAL_BYTES = 64 * 1024 * 1024;
22
- /** Collect `{ relPath: content }` from the roots. */
23
- export function collectSources(roots) {
24
- const bundle = {};
1
+ // Source archives are build artifacts. Directory mode needs no repository;
2
+ // tag mode reads immutable Git objects without changing the working tree.
3
+ import { execFileSync } from 'node:child_process';
4
+ import { createHash } from 'node:crypto';
5
+ import { lstatSync, readFileSync, readdirSync, realpathSync } from 'node:fs';
6
+ import { extname, isAbsolute, relative, resolve, sep } from 'node:path';
7
+ import { unzipSync, zipSync } from 'fflate';
8
+ export const SOURCE_MANIFEST = 'sentori-source-manifest.json';
9
+ export const MAX_SOURCE_FILE_BYTES = 512 * 1024;
10
+ export const MAX_SOURCE_BYTES = 64 * 1024 * 1024;
11
+ const MAX_FILES = 10000;
12
+ const SOURCE_EXTS = new Set(['.swift', '.kt', '.kts', '.java', '.m', '.mm', '.h', '.c', '.cc', '.cpp', '.hpp', '.js', '.jsx', '.ts', '.tsx', '.vue', '.svelte', '.rs', '.go', '.py', '.rb', '.php', '.cs', '.dart']);
13
+ const SKIP_DIRS = new Set(['node_modules', 'build', 'Pods', 'DerivedData', 'dist', 'target', 'vendor', '__pycache__']);
14
+ const sha256 = (bytes) => createHash('sha256').update(bytes).digest('hex');
15
+ export function safeSourcePath(path) {
16
+ return path.length > 0 && path.length <= 1024 && !/[\\\x00-\x1f:]/.test(path)
17
+ && !path.startsWith('/') && path.split('/').every(part => part !== '' && part !== '.' && part !== '..');
18
+ }
19
+ function selected(path, includes, excludes) {
20
+ const under = (parent) => parent === '.' || path === parent || path.startsWith(`${parent}/`);
21
+ return includes.some(under) && !excludes.some(under);
22
+ }
23
+ function sourcePath(path, includes) {
24
+ return safeSourcePath(path) && SOURCE_EXTS.has(extname(path).toLowerCase())
25
+ && !path.split('/').some((part, index, parts) => part.startsWith('.') || SKIP_DIRS.has(part)
26
+ && !includes.some(include => include === parts.slice(0, index + 1).join('/') || include.startsWith(parts.slice(0, index + 1).join('/') + '/')));
27
+ }
28
+ function readText(bytes, path) {
29
+ if (bytes.includes(0))
30
+ throw new Error(`source is not UTF-8 text: ${path}`);
31
+ try {
32
+ return new TextDecoder('utf-8', { fatal: true }).decode(bytes);
33
+ }
34
+ catch {
35
+ throw new Error(`source is not UTF-8 text: ${path}`);
36
+ }
37
+ }
38
+ function selectionPath(root, path) {
39
+ const rel = relative(root, resolve(root, path)).split(sep).join('/') || '.';
40
+ if (rel !== '.' && !safeSourcePath(rel))
41
+ throw new Error(`source path is outside --root: ${path}`);
42
+ return rel;
43
+ }
44
+ /** Keep every path relative to ONE root, even with several selected directories. */
45
+ export function collectSources(paths, options = {}) {
46
+ if (!paths.length)
47
+ throw new Error('choose source directories or files (for example: ios android/app/src shared)');
48
+ const root = realpathSync(resolve(options.root ?? '.'));
49
+ const includes = paths.map(path => selectionPath(root, path));
50
+ const excludes = (options.exclude ?? []).map(path => selectionPath(root, path));
51
+ const bundle = Object.create(null);
25
52
  const stats = { files: 0, bytes: 0, skipped: 0 };
26
- const walk = (root, dir) => {
27
- let entries;
28
- try {
29
- entries = readdirSync(dir, { withFileTypes: true });
30
- }
31
- catch {
53
+ const add = (path, bytes) => {
54
+ if (Object.hasOwn(bundle, path))
32
55
  return;
33
- }
34
- for (const e of entries) {
35
- if (e.isDirectory()) {
36
- if (!SKIP_DIRS.has(e.name) && !e.name.startsWith('.'))
37
- walk(root, join(dir, e.name));
38
- continue;
39
- }
40
- const dot = e.name.lastIndexOf('.');
41
- if (dot < 0 || !SOURCE_EXTS.has(e.name.slice(dot)))
56
+ if (bytes.length > MAX_SOURCE_FILE_BYTES)
57
+ throw new Error(`source exceeds 512 KiB: ${path}; explicitly exclude it if not needed`);
58
+ if (stats.bytes + bytes.length > MAX_SOURCE_BYTES || stats.files >= MAX_FILES)
59
+ throw new Error('source bundle exceeds 64 MiB or 10000 files; narrow the selected directories');
60
+ bundle[path] = readText(bytes, path);
61
+ stats.files++;
62
+ stats.bytes += bytes.length;
63
+ };
64
+ let source = { type: 'directory' };
65
+ if (options.gitTag) {
66
+ const git = (args, limit = MAX_SOURCE_BYTES) => execFileSync('git', ['-C', root, ...args], { maxBuffer: limit, stdio: ['ignore', 'pipe', 'pipe'] });
67
+ const top = realpathSync(git(['rev-parse', '--show-toplevel']).toString().trim());
68
+ if (root !== top)
69
+ throw new Error('--root must be the repository root when using --git-tag');
70
+ const tag = options.gitTag;
71
+ git(['check-ref-format', `refs/tags/${tag}`]);
72
+ const commit = git(['rev-parse', '--verify', `refs/tags/${tag}^{commit}`]).toString().trim();
73
+ if (!/^[0-9a-f]{40,64}$/.test(commit))
74
+ throw new Error('tag did not resolve to a commit');
75
+ source = { type: 'git-tag', tag, commit };
76
+ const records = git(['ls-tree', '-rlz', '--full-tree', commit]).toString().split('\0').filter(Boolean);
77
+ const matched = new Set();
78
+ for (const record of records) {
79
+ const tab = record.indexOf('\t');
80
+ const path = record.slice(tab + 1);
81
+ if (!selected(path, includes, excludes) || !sourcePath(path, includes))
42
82
  continue;
43
- const full = join(dir, e.name);
44
- let size;
45
- try {
46
- size = statSync(full).size;
47
- }
48
- catch {
83
+ const [mode, type, oid, size] = record.slice(0, tab).trim().split(/\s+/);
84
+ if (type !== 'blob' || !['100644', '100755'].includes(mode)) {
85
+ stats.skipped++;
49
86
  continue;
50
87
  }
51
- if (size > MAX_FILE_BYTES || stats.bytes + size > MAX_TOTAL_BYTES) {
52
- stats.skipped += 1;
53
- continue;
88
+ if (Number(size) > MAX_SOURCE_FILE_BYTES)
89
+ throw new Error(`source exceeds 512 KiB: ${path}`);
90
+ for (const item of includes)
91
+ if (selected(path, [item], []))
92
+ matched.add(item);
93
+ add(path, git(['cat-file', 'blob', oid], MAX_SOURCE_FILE_BYTES + 1));
94
+ }
95
+ for (const item of includes)
96
+ if (!matched.has(item))
97
+ throw new Error(`no source files at tag ${tag} under ${item}`);
98
+ }
99
+ else {
100
+ const walk = (path) => {
101
+ const full = resolve(root, path);
102
+ const stat = lstatSync(full);
103
+ if (stat.isSymbolicLink()) {
104
+ stats.skipped++;
105
+ return;
54
106
  }
55
- try {
56
- bundle[relative(root, full)] = readFileSync(full, 'utf8');
57
- stats.files += 1;
58
- stats.bytes += size;
107
+ const real = relative(root, realpathSync(full));
108
+ if (real.startsWith(`..${sep}`) || real === '..' || isAbsolute(real))
109
+ throw new Error(`source resolves outside --root: ${path}`);
110
+ if (stat.isDirectory()) {
111
+ for (const entry of readdirSync(full).sort()) {
112
+ if (entry.startsWith('.') || SKIP_DIRS.has(entry)) {
113
+ stats.skipped++;
114
+ continue;
115
+ }
116
+ const child = path === '.' ? entry : `${path}/${entry}`;
117
+ if (excludes.some(x => child === x || child.startsWith(`${x}/`)))
118
+ continue;
119
+ walk(child);
120
+ }
59
121
  }
60
- catch {
61
- stats.skipped += 1;
122
+ else if (stat.isFile() && sourcePath(path, includes) && selected(path, includes, excludes)) {
123
+ if (stat.size > MAX_SOURCE_FILE_BYTES)
124
+ throw new Error(`source exceeds 512 KiB: ${path}`);
125
+ add(path, readFileSync(full));
62
126
  }
127
+ };
128
+ for (const path of includes)
129
+ walk(path);
130
+ }
131
+ if (!stats.files)
132
+ throw new Error('no supported source files selected; choose the application source directories');
133
+ return { bundle, stats, source };
134
+ }
135
+ export function packSources(paths, release, options = {}) {
136
+ if (!release.trim())
137
+ throw new Error('release is required and must match the SDK release');
138
+ const { bundle, stats, source } = collectSources(paths, options);
139
+ const entries = Object.create(null);
140
+ const manifest = { version: 1, release, source, files: [] };
141
+ for (const path of Object.keys(bundle).sort()) {
142
+ const bytes = Buffer.from(bundle[path], 'utf8');
143
+ entries[path] = bytes;
144
+ manifest.files.push({ path, bytes: bytes.length, sha256: sha256(bytes) });
145
+ }
146
+ entries[SOURCE_MANIFEST] = Buffer.from(JSON.stringify(manifest, null, 2) + '\n');
147
+ return { bytes: zipSync(entries, { level: 6, mtime: new Date(2000, 0, 1) }), manifest, stats };
148
+ }
149
+ /** Validate in memory; the server independently repeats validation. */
150
+ export function inspectSourceArchive(bytes, release) {
151
+ if (bytes.length > MAX_SOURCE_BYTES + 4 * 1024 * 1024)
152
+ throw new Error('source archive is too large');
153
+ const names = new Set();
154
+ let total = 0;
155
+ const files = unzipSync(bytes, { filter: file => {
156
+ const path = file.name.replace(/\/$/, '');
157
+ if (!safeSourcePath(path) || names.has(path))
158
+ throw new Error(`unsafe or duplicate ZIP path: ${file.name}`);
159
+ names.add(path);
160
+ if (names.size > MAX_FILES + 1)
161
+ throw new Error('ZIP contains too many entries');
162
+ const limit = path === SOURCE_MANIFEST ? 4 * 1024 * 1024 : MAX_SOURCE_FILE_BYTES;
163
+ total += file.originalSize;
164
+ if (file.originalSize > limit || total > MAX_SOURCE_BYTES + 4 * 1024 * 1024)
165
+ throw new Error('ZIP exceeds source size limits');
166
+ return !file.name.endsWith('/');
167
+ } });
168
+ const sources = Object.keys(files).filter(path => path !== SOURCE_MANIFEST);
169
+ if (!sources.length)
170
+ throw new Error('source ZIP is empty');
171
+ for (const path of sources)
172
+ readText(files[path], path);
173
+ let manifest;
174
+ if (files[SOURCE_MANIFEST]) {
175
+ manifest = JSON.parse(readText(files[SOURCE_MANIFEST], SOURCE_MANIFEST));
176
+ if (!manifest || manifest.version !== 1 || typeof manifest.release !== 'string' || !manifest.release.trim() || !Array.isArray(manifest.files)
177
+ || !manifest.source || !['directory', 'git-tag'].includes(manifest.source.type)
178
+ || manifest.files.some(file => !file || typeof file.path !== 'string'))
179
+ throw new Error('invalid source manifest');
180
+ if (release && manifest.release !== release)
181
+ throw new Error(`ZIP release ${manifest.release} does not match ${release}`);
182
+ if (manifest.files.length !== sources.length || new Set(manifest.files.map(file => file.path)).size !== sources.length)
183
+ throw new Error('source manifest file list does not match ZIP');
184
+ for (const file of manifest.files) {
185
+ const body = files[file.path];
186
+ if (!body || body.length !== file.bytes || sha256(body) !== file.sha256)
187
+ throw new Error(`source manifest checksum mismatch: ${file.path}`);
63
188
  }
64
- };
65
- for (const root of roots)
66
- walk(root, root);
67
- return { bundle, stats };
189
+ }
190
+ return { files: sources.sort(), manifest };
68
191
  }
69
192
  //# sourceMappingURL=srcbundle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"srcbundle.js","sourceRoot":"","sources":["../src/srcbundle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"srcbundle.js","sourceRoot":"","sources":["../src/srcbundle.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,0EAA0E;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAE3C,MAAM,CAAC,MAAM,eAAe,GAAG,8BAA8B,CAAA;AAC7D,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,GAAG,IAAI,CAAA;AAC/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA;AAChD,MAAM,SAAS,GAAG,KAAK,CAAA;AACvB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;AACpN,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAA;AAUtH,MAAM,MAAM,GAAG,CAAC,KAAiB,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAE9F,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;WACxE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,CAAA;AAC3G,CAAC;AACD,SAAS,QAAQ,CAAC,IAAY,EAAE,QAAkB,EAAE,QAAkB;IACpE,MAAM,KAAK,GAAG,CAAC,MAAc,EAAW,EAAE,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAAA;IAC7G,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACtD,CAAC;AACD,SAAS,UAAU,CAAC,IAAY,EAAE,QAAkB;IAClD,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;WACtE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;eACvF,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;AACrJ,CAAC;AACD,SAAS,QAAQ,CAAC,KAAiB,EAAE,IAAY;IAC/C,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAA;IAC3E,IAAI,CAAC;QAAC,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAAC,CAAC;IACtE,MAAM,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAA;IAAC,CAAC;AAChE,CAAC;AACD,SAAS,aAAa,CAAC,IAAY,EAAE,IAAY;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAA;IAC3E,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAA;IAClG,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,cAAc,CAAC,KAAe,EAAE,OAAO,GAAkB,EAAE;IACzE,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAA;IAClH,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC7D,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC/E,MAAM,MAAM,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC1D,MAAM,KAAK,GAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAA;IAChE,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,KAAiB,EAAQ,EAAE;QACpD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;YAAE,OAAM;QACvC,IAAI,KAAK,CAAC,MAAM,GAAG,qBAAqB;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,uCAAuC,CAAC,CAAA;QACjI,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,gBAAgB,IAAI,KAAK,CAAC,KAAK,IAAI,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAA;QAC9K,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACpC,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAA;IAC7B,CAAC,CAAA;IACD,IAAI,MAAM,GAA6B,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IAC5D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,CAAC,IAAc,EAAE,KAAK,GAAG,gBAAgB,EAAU,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;QACrK,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;QACjF,IAAI,IAAI,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;QAC5F,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAA;QAC1B,GAAG,CAAC,CAAC,kBAAkB,EAAE,aAAa,GAAG,EAAE,CAAC,CAAC,CAAA;QAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAA;QAC5F,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QACzF,MAAM,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,CAAA;QACzC,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACtG,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;QACjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAChC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;YAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC;gBAAE,SAAQ;YAChF,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACxE,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAK,CAAC,EAAE,CAAC;gBAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAAC,SAAQ;YAAC,CAAC;YAC3F,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,qBAAqB;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAA;YAC5F,KAAK,MAAM,IAAI,IAAI,QAAQ;gBAAE,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;oBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC9E,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,GAAI,CAAC,EAAE,qBAAqB,GAAG,CAAC,CAAC,CAAC,CAAA;QACvE,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,QAAQ;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,UAAU,IAAI,EAAE,CAAC,CAAA;IACrH,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,CAAC,IAAY,EAAQ,EAAE;YAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAChC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;YAC5B,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAAC,OAAM;YAAC,CAAC;YACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;YAC/C,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,IAAI,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAA;YAChI,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;oBAC7C,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;wBAAC,KAAK,CAAC,OAAO,EAAE,CAAC;wBAAC,SAAQ;oBAAC,CAAC;oBAChF,MAAM,KAAK,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAA;oBACvD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBAAE,SAAQ;oBAC1E,IAAI,CAAC,KAAK,CAAC,CAAA;gBACb,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAC7F,IAAI,IAAI,CAAC,IAAI,GAAG,qBAAqB;oBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAA;gBACzF,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC,CAAA;QACD,KAAK,MAAM,IAAI,IAAI,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,CAAA;IACzC,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAA;IAClH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAe,EAAE,OAAe,EAAE,OAAO,GAAkB,EAAE;IACvF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;IAC1F,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAChE,MAAM,OAAO,GAA+B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC/D,MAAM,QAAQ,GAAmB,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IAC3E,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAE,EAAE,MAAM,CAAC,CAAA;QAChD,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;QACrB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC3E,CAAC;IACD,OAAO,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAChF,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;AAChG,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,oBAAoB,CAAC,KAAiB,EAAE,OAAgB;IACtE,IAAI,KAAK,CAAC,MAAM,GAAG,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IACrG,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;YAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;YACzC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;YAC3G,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACf,IAAI,KAAK,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;YAChF,MAAM,KAAK,GAAG,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAA;YAChF,KAAK,IAAI,IAAI,CAAC,YAAY,CAAA;YAC1B,IAAI,IAAI,CAAC,YAAY,GAAG,KAAK,IAAI,KAAK,GAAG,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;YAC9H,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACjC,CAAC,EAAE,CAAC,CAAA;IACJ,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,eAAe,CAAC,CAAA;IAC3E,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;IAC3D,KAAK,MAAM,IAAI,IAAI,OAAO;QAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAE,EAAE,IAAI,CAAC,CAAA;IACxD,IAAI,QAAoC,CAAA;IACxC,IAAI,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;QAC3B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAE,EAAE,eAAe,CAAC,CAAmB,CAAA;QAC3F,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,CAAC,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;eACxI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;eAC5E,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QACpH,IAAI,OAAO,IAAI,QAAQ,CAAC,OAAO,KAAK,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,QAAQ,CAAC,OAAO,mBAAmB,OAAO,EAAE,CAAC,CAAA;QACzH,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;QACvL,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC7B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QAC7I,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAA;AAC5C,CAAC"}
package/lib/upload.d.ts CHANGED
@@ -41,5 +41,30 @@ export type UploadVerdict = {
41
41
  };
42
42
  /** Say it once, at the only place every upload passes through. */
43
43
  export declare function warnIfUnusable(name: string, v: UploadVerdict): boolean;
44
+ /**
45
+ * Turn one path into the source maps under it, each with the name the
46
+ * server should store.
47
+ *
48
+ * A file keeps its basename. A **directory** is walked, and every map
49
+ * under it keeps its path *relative to that directory* — so
50
+ * `dist/pages/cart/index.js.map` is stored as
51
+ * `pages/cart/index.js.map` and not as `index.js.map`.
52
+ *
53
+ * That difference is the whole feature. The server matches a frame to
54
+ * a map by how many trailing path segments they share, precisely
55
+ * because a WeChat mini program names every page's entry `index.js`
56
+ * and a web build names every route chunk after its route. Sending
57
+ * only the basename threw that away on the client, so the matching
58
+ * could never see more than a filename however carefully it was
59
+ * written.
60
+ *
61
+ * Passing a directory used to read the directory as a file and throw
62
+ * `EISDIR`, while `docs/getting-started/web.md` told readers to pass
63
+ * `./dist`.
64
+ */
65
+ export declare function expandSourcemapPaths(path: string): {
66
+ path: string;
67
+ name: string;
68
+ }[];
44
69
  export declare function uploadArtifact(opts: UploadOpts): Promise<UploadVerdict>;
45
70
  //# sourceMappingURL=upload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../src/upload.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAA;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAMD;;8DAE8D;AAC9D,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,GAAG,UAAU,EAC1B,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAWxC;AAED;;;wCAGwC;AACxC,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAE7D;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,gEAAgE;IAChE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,oEAAoE;IACpE,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CACrB,CAAA;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAStE;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAsC7E"}
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../src/upload.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAA;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAMD;;8DAE8D;AAC9D,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,GAAG,UAAU,EAC1B,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAWxC;AAED;;;wCAGwC;AACxC,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAE7D;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,gEAAgE;IAChE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,oEAAoE;IACpE,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CACrB,CAAA;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAStE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CA0BnF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAsC7E"}
package/lib/upload.js CHANGED
@@ -13,7 +13,8 @@
13
13
  // smaller than its decompressed cap precisely so that the big ones
14
14
  // (a real RN app's main dSYM runs hundreds of MB) fit as gzip.
15
15
  import { readFileSync } from 'node:fs';
16
- import { basename } from 'node:path';
16
+ import { readdirSync, statSync } from 'node:fs';
17
+ import { basename, join, relative, sep } from 'node:path';
17
18
  import { gzipSync } from 'node:zlib';
18
19
  /** Transport-side limit on the current server (256 MB). Used only to
19
20
  * produce a useful error message — the server is the authority. */
@@ -48,6 +49,56 @@ export function warnIfUnusable(name, v) {
48
49
  `it will symbolicate nothing.${v.hint ? ` ${v.hint}` : ''}`);
49
50
  return true;
50
51
  }
52
+ /**
53
+ * Turn one path into the source maps under it, each with the name the
54
+ * server should store.
55
+ *
56
+ * A file keeps its basename. A **directory** is walked, and every map
57
+ * under it keeps its path *relative to that directory* — so
58
+ * `dist/pages/cart/index.js.map` is stored as
59
+ * `pages/cart/index.js.map` and not as `index.js.map`.
60
+ *
61
+ * That difference is the whole feature. The server matches a frame to
62
+ * a map by how many trailing path segments they share, precisely
63
+ * because a WeChat mini program names every page's entry `index.js`
64
+ * and a web build names every route chunk after its route. Sending
65
+ * only the basename threw that away on the client, so the matching
66
+ * could never see more than a filename however carefully it was
67
+ * written.
68
+ *
69
+ * Passing a directory used to read the directory as a file and throw
70
+ * `EISDIR`, while `docs/getting-started/web.md` told readers to pass
71
+ * `./dist`.
72
+ */
73
+ export function expandSourcemapPaths(path) {
74
+ let stat;
75
+ try {
76
+ stat = statSync(path);
77
+ }
78
+ catch {
79
+ // Let the caller's read produce the real error, with the real
80
+ // path in it.
81
+ return [{ path, name: basename(path) }];
82
+ }
83
+ if (!stat.isDirectory())
84
+ return [{ path, name: basename(path) }];
85
+ const out = [];
86
+ const walk = (dir) => {
87
+ for (const e of readdirSync(dir, { withFileTypes: true })) {
88
+ const full = join(dir, e.name);
89
+ if (e.isDirectory())
90
+ walk(full);
91
+ else if (e.name.endsWith('.map') || e.name.endsWith('.map.gz')) {
92
+ // POSIX separators on the wire whatever the build machine is:
93
+ // the server compares these against a frame's `file`, which is
94
+ // a URL or a module path, and neither uses a backslash.
95
+ out.push({ path: full, name: relative(path, full).split(sep).join('/') });
96
+ }
97
+ }
98
+ };
99
+ walk(path);
100
+ return out;
101
+ }
51
102
  export async function uploadArtifact(opts) {
52
103
  const bytes = readFileSync(opts.path);
53
104
  if (bytes.length === 0)
package/lib/upload.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"upload.js","sourceRoot":"","sources":["../src/upload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../src/upload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { type UploadOpts } from './upload.js';
2
+ export type UploadConfig = {
3
+ version: 1;
4
+ apiUrl: string;
5
+ tokenEnv: string;
6
+ release?: string;
7
+ artifacts: {
8
+ sourcemap?: string[];
9
+ dsym?: string[];
10
+ mapping?: string[];
11
+ };
12
+ sources?: {
13
+ root?: string;
14
+ include: string[];
15
+ exclude?: string[];
16
+ gitTag?: string;
17
+ };
18
+ sourceArchive?: string;
19
+ };
20
+ export type UploadPlan = {
21
+ release: string;
22
+ apiUrl: string;
23
+ tokenEnv: string;
24
+ files: {
25
+ kind: UploadOpts['kind'];
26
+ name: string;
27
+ path: string;
28
+ hash: string;
29
+ bytes: number;
30
+ }[];
31
+ source?: {
32
+ files: string[];
33
+ tag?: string;
34
+ commit?: string;
35
+ };
36
+ };
37
+ export declare const WORKFLOW_HELP = "Release uploads:\n sentori init --api-url <url> [--release <r>] [--sourcemap <path>] [--dsym <path>]\n [--mapping <path>] [--sources <dir>] [--git-tag <tag>] [--config <file>]\n sentori config validate [--config sentori.config.json] [--release <r>]\n sentori doctor [--config sentori.config.json] [--api-url <url>]\n sentori upload all [--config sentori.config.json] [--release <r>] [--git-tag <tag>]\n [--dry-run] [--strict]\n sentori verify [--config sentori.config.json] [--release <r>] [--git-tag <tag>]\n sentori sources pack --release <r> --output sources.zip [--root .] [--git-tag <tag>]\n [--exclude <path>] <source-dir-or-file...>\n sentori upload srcbundle --release <r> [--root .] [--git-tag <tag>] <sources.zip|source-dir...>\n\nPaths in config are relative to that config. Sources keep paths relative to sources.root.\nSet the API-scope token in SENTORI_TOKEN (or the configured tokenEnv); init never stores it.\nRelease must match the SDK exactly, including its build number. SENTORI_RELEASE is supported.\nGit mode reads the specified tag's commit, never the working tree or a guessed latest tag.\nVerification checks every planned file's bytes and server validation; it does not claim event matching.\n";
38
+ export declare function loadUploadConfig(path: string): UploadConfig;
39
+ export declare function prepareUploadPlan(configPath: string, overrides?: {
40
+ release?: string;
41
+ apiUrl?: string;
42
+ gitTag?: string;
43
+ }): UploadPlan;
44
+ export declare function verifyUploadPlan(plan: UploadPlan, token: string): Promise<string[]>;
45
+ export declare function runWorkflow(command: 'init' | 'validate' | 'upload' | 'verify' | 'doctor', argv: string[]): Promise<number>;
46
+ export declare function runSourcesPack(argv: string[]): Promise<number>;
47
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AASA,OAAO,EAAwC,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AAGnF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,CAAC,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IACxE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACnF,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AACD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC9F,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5D,CAAA;AAMD,eAAO,MAAM,aAAa,qwCAiBzB,CAAA;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAuB3D;AAeD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,UAAU,CAkDxI;AACD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAWzF;AACD,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAkEhI;AACD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAepE"}