Skip to content

Commit 16e44fa

Browse files
hi-ogawaOpenCode
andcommitted
test(rsc): migrate hoist source map snapshots
Co-authored-by: OpenCode <noreply@opencode.ai>
1 parent d894c62 commit 16e44fa

5 files changed

Lines changed: 78 additions & 55 deletions

File tree

packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.map.snap.txt renamed to packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.map.snap.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## hoist
2+
3+
```txt
14
(0:0) "export function InlineDirective() {\n" --> (0:0) "export function InlineDirective() {\n"
25
(1:0) " const captured = 'captured'\n" --> (1:0) " const captured = 'captured'\n"
36
(3:0) " async function inlineAction() {\n" --> (3:0) " const inlineAction = /* #__PURE__ */ registerServerReference($$hoist_0_inlineAction, \"$$hoist_0_inlineAction\");\n"
@@ -27,3 +30,4 @@
2730
(15:0) " return 'inline function expression called'\n" --> (25:0) " return 'inline function expression called'\n"
2831
(16:0) " })\n" --> (26:0) " };\n"
2932
[unmapped] --> (27:0) "/* #__PURE__ */ Object.defineProperty($$hoist_2_anonymous_server_function, \"name\", { value: \"anonymous_server_function\" });\n"
33+
```

packages/plugin-rsc/src/transforms/fixtures/source-map/hoist/inline.js.snap.js

Lines changed: 0 additions & 34 deletions
This file was deleted.
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
## Input
2+
3+
```js
4+
export function InlineDirective() {
5+
const captured = 'captured'
6+
7+
async function inlineAction() {
8+
'use server'
9+
return 'inline directive called'
10+
}
11+
12+
const inlineArrow = async (suffix = 'arrow') => {
13+
'use server'
14+
return `${captured} ${suffix} called`
15+
}
16+
17+
consume(inlineAction, inlineArrow, async function () {
18+
'use server'
19+
return 'inline function expression called'
20+
})
21+
}
22+
```
23+
24+
## hoist
25+
26+
**Status:** transformed
27+
28+
**References:** $$hoist_0_inlineAction, $$hoist_1_inlineArrow, $$hoist_2_anonymous_server_function
29+
30+
[Source map visualization](https://evanw.github.io/source-map-visualization/#MTI0MABleHBvcnQgZnVuY3Rpb24gSW5saW5lRGlyZWN0aXZlKCkgewogIGNvbnN0IGNhcHR1cmVkID0gJ2NhcHR1cmVkJwoKICBjb25zdCBpbmxpbmVBY3Rpb24gPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRob2lzdF8wX2lubGluZUFjdGlvbiwgIiQkaG9pc3RfMF9pbmxpbmVBY3Rpb24iKTsKCiAgY29uc3QgaW5saW5lQXJyb3cgPSAvKiAjX19QVVJFX18gKi8gcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UoJCRob2lzdF8xX2lubGluZUFycm93LCAiJCRob2lzdF8xX2lubGluZUFycm93IikuYmluZChudWxsLCBlbmNyeXB0KFtjYXB0dXJlZF0pKQoKICBjb25zdW1lKGlubGluZUFjdGlvbiwgaW5saW5lQXJyb3csIC8qICNfX1BVUkVfXyAqLyByZWdpc3RlclNlcnZlclJlZmVyZW5jZSgkJGhvaXN0XzJfYW5vbnltb3VzX3NlcnZlcl9mdW5jdGlvbiwgIiQkaG9pc3RfMl9hbm9ueW1vdXNfc2VydmVyX2Z1bmN0aW9uIikpCn0KCjtleHBvcnQgYXN5bmMgZnVuY3Rpb24gJCRob2lzdF8wX2lubGluZUFjdGlvbigpIHsKICAgICd1c2Ugc2VydmVyJwogICAgcmV0dXJuICdpbmxpbmUgZGlyZWN0aXZlIGNhbGxlZCcKICB9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkaG9pc3RfMF9pbmxpbmVBY3Rpb24sICJuYW1lIiwgeyB2YWx1ZTogImlubGluZUFjdGlvbiIgfSk7Cgo7ZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICQkaG9pc3RfMV9pbmxpbmVBcnJvdygkJGhvaXN0X2VuY29kZWQsIHN1ZmZpeCA9ICdhcnJvdycpIHsKICAgIGNvbnN0IFtjYXB0dXJlZF0gPSBhd2FpdCBkZWNyeXB0KCQkaG9pc3RfZW5jb2RlZCk7Cid1c2Ugc2VydmVyJwogICAgcmV0dXJuIGAke2NhcHR1cmVkfSAke3N1ZmZpeH0gY2FsbGVkYAogIH07Ci8qICNfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkoJCRob2lzdF8xX2lubGluZUFycm93LCAibmFtZSIsIHsgdmFsdWU6ICJpbmxpbmVBcnJvdyIgfSk7Cgo7ZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICQkaG9pc3RfMl9hbm9ueW1vdXNfc2VydmVyX2Z1bmN0aW9uKCkgewogICAgJ3VzZSBzZXJ2ZXInCiAgICByZXR1cm4gJ2lubGluZSBmdW5jdGlvbiBleHByZXNzaW9uIGNhbGxlZCcKICB9OwovKiAjX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KCQkaG9pc3RfMl9hbm9ueW1vdXNfc2VydmVyX2Z1bmN0aW9uLCAibmFtZSIsIHsgdmFsdWU6ICJhbm9ueW1vdXNfc2VydmVyX2Z1bmN0aW9uIiB9KTsKMTE5MgB7InZlcnNpb24iOjMsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBJbmxpbmVEaXJlY3RpdmUoKSB7XG4gIGNvbnN0IGNhcHR1cmVkID0gJ2NhcHR1cmVkJ1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGlubGluZUFjdGlvbigpIHtcbiAgICAndXNlIHNlcnZlcidcbiAgICByZXR1cm4gJ2lubGluZSBkaXJlY3RpdmUgY2FsbGVkJ1xuICB9XG5cbiAgY29uc3QgaW5saW5lQXJyb3cgPSBhc3luYyAoc3VmZml4ID0gJ2Fycm93JykgPT4ge1xuICAgICd1c2Ugc2VydmVyJ1xuICAgIHJldHVybiBgJHtjYXB0dXJlZH0gJHtzdWZmaXh9IGNhbGxlZGBcbiAgfVxuXG4gIGNvbnN1bWUoaW5saW5lQWN0aW9uLCBpbmxpbmVBcnJvdywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc2VydmVyJ1xuICAgIHJldHVybiAnaW5saW5lIGZ1bmN0aW9uIGV4cHJlc3Npb24gY2FsbGVkJ1xuICB9KVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFROztBQUU1QixDQUFDOztBQUtELENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7O0FBS3JCLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxDQUFDLG9IQUdqQztBQUNIO0FBZEU7QUFBQSxnREFBOEI7QUFDaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNO0FBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDbkMsQ0FBQyxDQUFDOztBQUVvQjtBQUFBLGdGQUE0QjtBQUNsRCxDQUFDLENBQUMsQ0FBQztBQUFDLENBQUMsR0FBRyxDQUFDLE1BQU07QUFDZixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUN4QyxDQUFDLENBQUM7O0FBRW1DO0FBQUEsNkRBQWtCO0FBQ3ZELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTTtBQUNmLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUM3QyxDQUFDLENBQUM7OyJ9)
31+
32+
```js
33+
export function InlineDirective() {
34+
const captured = 'captured'
35+
36+
const inlineAction = /* #__PURE__ */ registerServerReference($$hoist_0_inlineAction, "$$hoist_0_inlineAction");
37+
38+
const inlineArrow = /* #__PURE__ */ registerServerReference($$hoist_1_inlineArrow, "$$hoist_1_inlineArrow").bind(null, encrypt([captured]))
39+
40+
consume(inlineAction, inlineArrow, /* #__PURE__ */ registerServerReference($$hoist_2_anonymous_server_function, "$$hoist_2_anonymous_server_function"))
41+
}
42+
43+
;export async function $$hoist_0_inlineAction() {
44+
'use server'
45+
return 'inline directive called'
46+
};
47+
/* #__PURE__ */ Object.defineProperty($$hoist_0_inlineAction, "name", { value: "inlineAction" });
48+
49+
;export async function $$hoist_1_inlineArrow($$hoist_encoded, suffix = 'arrow') {
50+
const [captured] = await decrypt($$hoist_encoded);
51+
'use server'
52+
return `${captured} ${suffix} called`
53+
};
54+
/* #__PURE__ */ Object.defineProperty($$hoist_1_inlineArrow, "name", { value: "inlineArrow" });
55+
56+
;export async function $$hoist_2_anonymous_server_function() {
57+
'use server'
58+
return 'inline function expression called'
59+
};
60+
/* #__PURE__ */ Object.defineProperty($$hoist_2_anonymous_server_function, "name", { value: "anonymous_server_function" });
61+
```

packages/plugin-rsc/src/transforms/source-map.test.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@ import { describe, expect, test } from 'vitest'
44
import { transformHoistInlineDirective } from './hoist'
55
import { transformModuleExportEffect } from './module-export-effect'
66
import {
7-
formatDecodedSourceMap,
87
formatDecodedSourceMapMarkdown,
9-
formatSourceMapFixture,
108
formatSourceMapMarkdownFixture,
119
} from './test-utils'
1210
import { transformWrapExport } from './wrap-export'
@@ -68,11 +66,18 @@ describe('source map fixtures', () => {
6866
encode: (value) => `encrypt(${value})`,
6967
decode: (value) => `await decrypt(${value})`,
7068
})
71-
await expect(formatSourceMapFixture(result.output)).toMatchFileSnapshot(
72-
file + '.snap.js',
73-
)
74-
await expect(formatDecodedSourceMap(result.output)).toMatchFileSnapshot(
75-
file + '.map.snap.txt',
69+
const outputs = [
70+
{
71+
name: 'hoist',
72+
output: result.output,
73+
references: result.names,
74+
},
75+
]
76+
await expect(
77+
formatSourceMapMarkdownFixture(input, outputs),
78+
).toMatchFileSnapshot(file + '.snap.md')
79+
await expect(formatDecodedSourceMapMarkdown(outputs)).toMatchFileSnapshot(
80+
file + '.map.snap.md',
7681
)
7782
})
7883
}

packages/plugin-rsc/src/transforms/test-utils.ts

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,5 @@
11
import type MagicString from 'magic-string'
22

3-
export function formatSourceMapFixture(output: MagicString): string {
4-
const code = output.toString()
5-
const map = output.generateMap({ includeContent: true, hires: 'boundary' })
6-
const visualization = generateVisualizationLink(code, map.toString())
7-
return `/*
8-
Source map visualization:
9-
10-
${visualization}
11-
*/
12-
13-
${code}`
14-
}
15-
163
type SourceMapFixtureOutput = {
174
name: string
185
output: MagicString
@@ -53,7 +40,7 @@ export function formatDecodedSourceMapMarkdown(
5340
* This test-local formatter is inspired by Oxc's source map visualizer output:
5441
* https://github.com/oxc-project/oxc-sourcemap/blob/main/src/sourcemap_visualizer.rs
5542
*/
56-
export function formatDecodedSourceMap(output: MagicString): string {
43+
function formatDecodedSourceMap(output: MagicString): string {
5744
const generatedLines = output.toString().split('\n')
5845
const map = output.generateDecodedMap({
5946
includeContent: true,

0 commit comments

Comments
 (0)