Skip to content

Commit bfcd757

Browse files
committed
Stop support of legacy server
1 parent 12d4b1c commit bfcd757

5 files changed

Lines changed: 90 additions & 280 deletions

File tree

server/config.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ type Config struct {
4949
MinifyRaw json.RawMessage `json:"minify"`
5050
SourceMapRaw json.RawMessage `json:"sourceMap"`
5151
CompressRaw json.RawMessage `json:"compress"`
52-
LegacyServer string `json:"legacyServer"`
5352
Minify bool `json:"-"`
5453
SourceMap bool `json:"-"`
5554
Compress bool `json:"-"`

server/legacy_router.go

Lines changed: 10 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@ import (
66
"encoding/json"
77
"fmt"
88
"io"
9-
"net/http"
109
"net/url"
1110
"path"
1211
"strconv"
1312
"strings"
1413

15-
"github.com/esm-dev/esm.sh/internal/fetch"
1614
"github.com/esm-dev/esm.sh/internal/npm"
1715
"github.com/esm-dev/esm.sh/internal/storage"
1816
"github.com/ije/esbuild-internal/xxhash"
@@ -201,7 +199,7 @@ func legacyESM(ctx *rex.Context, fs storage.Storage, buildVersionPrefix string)
201199
return rex.Status(500, "Failed to read data from storage")
202200
}
203201
data = bytes.ReplaceAll(data, []byte("https://esm.sh/v"), []byte(origin+"/v"))
204-
data = bytes.ReplaceAll(data, []byte(config.LegacyServer+"/v"), []byte(origin+"/v"))
202+
data = bytes.ReplaceAll(data, []byte("https://legacy.esm.sh/v"), []byte(origin+"/v"))
205203
return data
206204
}
207205
}
@@ -253,90 +251,16 @@ func legacyESM(ctx *rex.Context, fs storage.Storage, buildVersionPrefix string)
253251
}
254252
}
255253

256-
url, err := ctx.R.URL.Parse(config.LegacyServer + ctx.R.URL.Path + query)
257-
if err != nil {
258-
return rex.Status(http.StatusBadRequest, "Invalid url")
259-
}
260-
261-
client := fetch.NewClient(ctx.UserAgent(), 60, true)
262-
res, err := client.Fetch(url, nil)
263-
if err != nil {
264-
return rex.Status(http.StatusBadGateway, "Failed to connect the legacy esm.sh server")
265-
}
266-
defer res.Body.Close()
267-
268-
if res.StatusCode == 301 || res.StatusCode == 302 {
269-
url := res.Header.Get("Location")
270-
if after, ok := strings.CutPrefix(url, "https://legacy.esm.sh"); ok {
271-
url = getOrigin(ctx) + after
272-
}
273-
return redirect(ctx, url, res.StatusCode == 301)
274-
}
275-
276-
if res.StatusCode != 200 {
277-
data, err := io.ReadAll(res.Body)
278-
if err != nil {
279-
return rex.Status(500, "Failed to fetch data from the legacy esm.sh server")
254+
// strip leading `/stable/*` and `/v<build-version>/*`
255+
if buildVersionPrefix != "" {
256+
origin := getOrigin(ctx)
257+
if strings.HasPrefix(pathname, "/node_") || strings.HasSuffix(pathname, ".js") {
258+
pathname = "/node/" + strings.TrimSuffix(strings.TrimPrefix(pathname, "/node_"), ".js") + ".mjs"
259+
} else if pathname == "/node.ns.d.ts" {
260+
return rex.Status(404, "Not Found")
280261
}
281-
ctx.SetHeader("Cache-Control", "public, max-age=600")
282-
return rex.Status(res.StatusCode, data)
262+
return redirect(ctx, fmt.Sprintf("%s%s", origin, pathname), true)
283263
}
284264

285-
if (buildVersionPrefix != "" && isStatic) || endsWith(pathname, ".d.ts", ".d.mts") {
286-
data, err := io.ReadAll(res.Body)
287-
if err != nil {
288-
return rex.Status(500, "Failed to fetch data from the legacy esm.sh server")
289-
}
290-
err = fs.Put(savePath, bytes.NewReader(data))
291-
if err != nil {
292-
return rex.Status(500, "Storage error: "+err.Error())
293-
}
294-
ctx.SetHeader("Content-Type", res.Header.Get("Content-Type"))
295-
ctx.SetHeader("Cache-Control", ccImmutable)
296-
// resolve hostname in typescript definition files if the origin is not "https://esm.sh"
297-
if endsWith(pathname, ".d.ts", ".d.mts") {
298-
origin := getOrigin(ctx)
299-
if origin != "https://esm.sh" {
300-
data = bytes.ReplaceAll(data, []byte("https://esm.sh/v"), []byte(origin+"/v"))
301-
data = bytes.ReplaceAll(data, []byte(config.LegacyServer+"/v"), []byte(origin+"/v"))
302-
}
303-
}
304-
return data
305-
} else {
306-
code, err := io.ReadAll(res.Body)
307-
if err != nil {
308-
return rex.Status(500, "Failed to fetch data from the legacy esm.sh server")
309-
}
310-
esmId := res.Header.Get("X-Esm-Id")
311-
dts := res.Header.Get("X-TypeScript-Types")
312-
if dts != "" {
313-
u, err := url.Parse(dts)
314-
if err != nil {
315-
dts = ""
316-
} else {
317-
dts = u.Path
318-
}
319-
}
320-
ret := LegacyBuildMeta{
321-
EsmId: esmId,
322-
Dts: dts,
323-
Code: string(code),
324-
}
325-
err = fs.Put(savePath, bytes.NewReader(utils.MustEncodeJSON(ret)))
326-
if err != nil {
327-
return rex.Status(500, "Storage error: "+err.Error())
328-
}
329-
ctx.SetHeader("Content-Type", res.Header.Get("Content-Type"))
330-
ctx.SetHeader("Cache-Control", ccImmutable)
331-
if query != "" && !ctx.R.URL.Query().Has("target") {
332-
appendVaryHeader(ctx.W.Header(), "User-Agent")
333-
}
334-
if esmId != "" {
335-
ctx.SetHeader("X-ESM-Id", esmId)
336-
}
337-
if dts != "" {
338-
ctx.SetHeader("X-TypeScript-Types", getOrigin(ctx)+dts)
339-
}
340-
return code
341-
}
265+
return rex.Next()
342266
}

server/server.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func Start() {
7979
rex.Optional(rex.AccessLogger(accessLogger), config.AccessLog),
8080
rex.Optional(rex.Compress(), config.Compress),
8181
rex.Optional(customLandingPage(&config.CustomLandingPage), config.CustomLandingPage.Origin != ""),
82-
rex.Optional(esmLegacyRouter(esmStorage), config.LegacyServer != ""),
82+
esmLegacyRouter(esmStorage),
8383
esmRouter(esmStorage, logger),
8484
)
8585

test/bootstrap.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ async function startServer(onStart: () => Promise<void>) {
1717
{
1818
"port": 8080,
1919
"workDir": ".esmd",
20-
"legacyServer": "https://legacy.esm.sh",
2120
...configJson,
2221
},
2322
undefined,

0 commit comments

Comments
 (0)