Merge pull request #20938 from tesseractjh/js/use-cache-directives

JS: Add use cache directives from Next.js 16
This commit is contained in:
Asger F
2026-01-08 09:51:53 +01:00
committed by GitHub
6 changed files with 51 additions and 6 deletions

View File

@@ -0,0 +1,5 @@
---
category: minorAnalysis
---
- Support `use cache` directives for Next.js 16.

View File

@@ -434,6 +434,21 @@ module Directive {
class UseClientDirective extends KnownDirective {
UseClientDirective() { this.getDirectiveText() = "use client" }
}
/**
* A `use cache` directive.
*
* Examples:
*
* ```
* "use cache";
* "use cache: remote";
* "use cache: private";
* ```
*/
class UseCacheDirective extends KnownDirective {
UseCacheDirective() { this.getDirectiveText().regexpMatch("use cache(:.*)?") }
}
}
/**

View File

@@ -1,5 +1,16 @@
| tst.js:1:1:1:13 | 'use strict'; | use strict |
| tst.js:2:1:2:10 | 'use asm'; | use asm |
| tst.js:3:1:3:9 | 'bundle'; | bundle |
| tst.js:12:3:12:12 | 'use asm'; | use asm |
| tst.js:19:5:19:17 | 'use strict'; | use strict |
| tst.js:4:1:4:13 | 'use server'; | use server |
| tst.js:5:1:5:13 | 'use client'; | use client |
| tst.js:6:1:6:12 | 'use cache'; | use cache |
| tst.js:7:1:7:20 | 'use cache: remote'; | use cache: remote |
| tst.js:8:1:8:21 | 'use ca ... ivate'; | use cache: private |
| tst.js:17:3:17:12 | 'use asm'; | use asm |
| tst.js:18:3:18:11 | 'bundle'; | bundle |
| tst.js:19:3:19:15 | 'use server'; | use server |
| tst.js:20:3:20:15 | 'use client'; | use client |
| tst.js:21:3:21:14 | 'use cache'; | use cache |
| tst.js:22:3:22:22 | 'use cache: remote'; | use cache: remote |
| tst.js:23:3:23:23 | 'use ca ... ivate'; | use cache: private |
| tst.js:30:5:30:17 | 'use strict'; | use strict |

View File

@@ -1,6 +1,11 @@
'use strict'; // this is a directive
'use asm'; // and so is this
'bundle';// and this
'use server';
'use client';
'use cache';
'use cache: remote';
'use cache: private';
{
'use strict'; // but this isn't a directive
}
@@ -10,6 +15,12 @@
function f() {
'use\x20strict'; // this is a directive, though not a strict mode directive
'use asm'; // and so is this
'bundle';
'use server';
'use client';
'use cache';
'use cache: remote';
'use cache: private';
;
'use strict'; // but this isn't a directive
}

View File

@@ -11,7 +11,7 @@
| UnknownDirective.js:12:5:12:17 | "use struct;" | Unknown directive: 'use struct;'. |
| UnknownDirective.js:13:5:13:17 | "Use Strict"; | Unknown directive: 'Use Strict'. |
| UnknownDirective.js:14:5:14:14 | "use bar"; | Unknown directive: 'use bar'. |
| UnknownDirective.js:40:5:40:17 | "[0, 0, 0];"; | Unknown directive: '[0, 0, 0];'. |
| UnknownDirective.js:41:5:41:65 | "[0, 0, ... , 0];"; | Unknown directive: '[0, 0, 0, 0, 0, 0, 0 ... (truncated)'. |
| UnknownDirective.js:47:5:47:15 | ":nomunge"; | Unknown directive: ':nomunge'. |
| UnknownDirective.js:48:5:48:30 | "foo(), ... munge"; | Unknown directive: 'foo(), bar, baz:nomu ... (truncated)'. |
| UnknownDirective.js:43:5:43:17 | "[0, 0, 0];"; | Unknown directive: '[0, 0, 0];'. |
| UnknownDirective.js:44:5:44:65 | "[0, 0, ... , 0];"; | Unknown directive: '[0, 0, 0, 0, 0, 0, 0 ... (truncated)'. |
| UnknownDirective.js:50:5:50:15 | ":nomunge"; | Unknown directive: ':nomunge'. |
| UnknownDirective.js:51:5:51:30 | "foo(), ... munge"; | Unknown directive: 'foo(), bar, baz:nomu ... (truncated)'. |

View File

@@ -34,6 +34,9 @@ function good() {
"deps bar";
"use server";
"use client";
"use cache";
"use cache: remote";
"use cache: private";
}
function data() {