Skip to content

Commit fe6d4e1

Browse files
authored
Fix Dockerfile (#1096)
1 parent 8474431 commit fe6d4e1

File tree

5 files changed

+47
-44
lines changed

5 files changed

+47
-44
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ RUN apk update && apk add --no-cache git
77
RUN git clone --branch $SERVER_VERSION --depth 1 https://github.com/esm-dev/esm.sh /tmp/esm.sh
88

99
WORKDIR /tmp/esm.sh
10-
RUN go build -ldflags="-s -w -X 'github.com/esm-dev/esm.sh/server.VERSION=${SERVER_VERSION}'" -o esmd main.go
10+
RUN go build -ldflags="-s -w -X 'github.com/esm-dev/esm.sh/server.VERSION=${SERVER_VERSION}'" -o esmd server/cmd/main.go
1111
# ---
1212

1313
FROM alpine:latest

server/build_resolver.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -646,14 +646,11 @@ func (ctx *BuildContext) resolveExternalModule(specifier string, kind api.Resolv
646646
resolvedPath = rp
647647
}
648648
}
649-
// mark the resolved path for _preload_
650-
if kind == api.ResolveJSImportStatement && !withTypeJSON {
651-
ctx.esmImports = append(ctx.esmImports, [2]string{resolvedPathFull, resolvedPath})
652-
}
653-
// if it's `require("module")` call
654649
if kind == api.ResolveJSRequireCall {
655650
ctx.cjsRequires = append(ctx.cjsRequires, [3]string{specifier, resolvedPathFull, resolvedPath})
656651
resolvedPath = specifier
652+
} else if kind == api.ResolveJSImportStatement && !withTypeJSON {
653+
ctx.esmImports = append(ctx.esmImports, [2]string{resolvedPathFull, resolvedPath})
657654
}
658655
}
659656
}()

server/loader.go

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414

1515
esbuild "github.com/evanw/esbuild/pkg/api"
1616
"github.com/ije/gox/term"
17+
"github.com/ije/gox/utils"
1718
)
1819

1920
type LoaderOutput struct {
@@ -99,34 +100,43 @@ func buildLoader(wd, loaderJs, outfile string) (err error) {
99100
return
100101
}
101102

102-
func installDeno(version string) (installedVersion string, err error) {
103+
func InstallDeno(version string) (installedVersion string, err error) {
103104
binDir := path.Join(config.WorkDir, "bin")
104105
err = ensureDir(binDir)
105106
if err != nil {
106107
return
107108
}
108109

109-
// check local installed deno
110-
installedDeno, err := exec.LookPath("deno")
111-
if err == nil {
112-
output, err := run(installedDeno, "eval", "console.log(Deno.version.deno)")
110+
installPath := path.Join(binDir, "deno")
111+
if runtime.GOOS == "windows" {
112+
installPath += ".exe"
113+
}
114+
115+
if existsFile(installPath) {
116+
output, err := run(installPath, "eval", "console.log(Deno.version.deno)")
113117
if err == nil {
114-
v := strings.TrimSpace(string(output))
115-
if !semverLessThan(v, "1.45") {
116-
err = os.Symlink(installedDeno, path.Join(binDir, "deno"))
117-
if err != nil && !os.IsExist(err) {
118-
return "", err
119-
}
120-
return v, nil
118+
version := strings.TrimSpace(string(output))
119+
if !semverLessThan(version, version) {
120+
return version, nil
121121
}
122122
}
123123
}
124124

125-
if existsFile(path.Join(binDir, "deno")) {
126-
output, err := run(path.Join(binDir, "deno"), "eval", "console.log(Deno.version.deno)")
125+
// check local installed deno
126+
systemDenoPath, err := exec.LookPath("deno")
127+
if err == nil {
128+
output, err := run(systemDenoPath, "eval", "console.log(Deno.version.deno)")
127129
if err == nil {
128130
version := strings.TrimSpace(string(output))
129-
if !semverLessThan(version, version) {
131+
if !semverLessThan(version, "1.45") {
132+
if runtime.GOOS == "windows" {
133+
_, err = utils.CopyFile(systemDenoPath, installPath)
134+
} else {
135+
err = os.Symlink(systemDenoPath, installPath)
136+
}
137+
if err != nil {
138+
return "", err
139+
}
130140
return version, nil
131141
}
132142
}
@@ -151,10 +161,10 @@ func installDeno(version string) (installedVersion string, err error) {
151161
return "", fmt.Errorf("failed to download Deno install package: %s", res.Status)
152162
}
153163

154-
tmpFile := path.Join(binDir, "deno.zip")
155-
defer os.Remove(tmpFile)
164+
zipFilename := path.Join(binDir, "deno.zip")
165+
defer os.Remove(zipFilename)
156166

157-
f, err := os.OpenFile(tmpFile, os.O_CREATE|os.O_WRONLY, 0644)
167+
f, err := os.OpenFile(zipFilename, os.O_CREATE|os.O_WRONLY, 0644)
158168
if err != nil {
159169
return
160170
}
@@ -165,21 +175,21 @@ func installDeno(version string) (installedVersion string, err error) {
165175
return
166176
}
167177

168-
zr, err := zip.OpenReader(tmpFile)
178+
zr, err := zip.OpenReader(zipFilename)
169179
if err != nil {
170180
return
171181
}
172182
defer zr.Close()
173183

174184
for _, zf := range zr.File {
175-
if zf.Name == "deno" {
185+
if zf.Name == "deno" || zf.Name == "deno.exe" {
176186
r, err := zf.Open()
177187
if err != nil {
178188
return "", err
179189
}
180190
defer r.Close()
181191

182-
f, err := os.OpenFile(path.Join(binDir, "deno"), os.O_CREATE|os.O_WRONLY, 0755)
192+
f, err := os.OpenFile(installPath, os.O_CREATE|os.O_WRONLY, 0755)
183193
if err != nil {
184194
return "", err
185195
}
@@ -214,8 +224,8 @@ func getDenoInstallURL(version string) (string, error) {
214224
os = "apple-darwin"
215225
case "linux":
216226
os = "unknown-linux-gnu"
217-
// case "windows":
218-
// os = "pc-windows-msvc"
227+
case "windows":
228+
os = "pc-windows-msvc"
219229
default:
220230
return "", errors.New("unsupported os: " + runtime.GOOS)
221231
}

server/router.go

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1521,14 +1521,10 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
15211521
bundleMode = BundleFalse
15221522
}
15231523

1524-
isDev := query.Has("dev")
1525-
isPkgCss := query.Has("css")
1526-
isWorker := query.Has("worker")
1527-
noDts := query.Has("no-dts") || query.Has("no-check")
1528-
1524+
dev := query.Has("dev")
15291525
// force react/jsx-dev-runtime and react-refresh into `dev` mode
1530-
if !isDev && ((esm.PkgName == "react" && esm.SubModuleName == "jsx-dev-runtime") || esm.PkgName == "react-refresh") {
1531-
isDev = true
1526+
if !dev && ((esm.PkgName == "react" && esm.SubModuleName == "jsx-dev-runtime") || esm.PkgName == "react-refresh") {
1527+
dev = true
15321528
}
15331529

15341530
// get build args from the pathname
@@ -1547,7 +1543,7 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
15471543
}
15481544
if strings.HasSuffix(submodule, ".development") {
15491545
submodule = strings.TrimSuffix(submodule, ".development")
1550-
isDev = true
1546+
dev = true
15511547
}
15521548
basename := strings.TrimSuffix(path.Base(esm.PkgName), ".js")
15531549
if strings.HasSuffix(submodule, ".css") && !strings.HasSuffix(esm.SubPath, ".mjs") {
@@ -1582,7 +1578,7 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
15821578
bundleMode: bundleMode,
15831579
externalAll: externalAll,
15841580
target: target,
1585-
dev: isDev,
1581+
dev: dev,
15861582
}
15871583
ret, ok, err := build.Exists()
15881584
if err != nil {
@@ -1624,7 +1620,7 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
16241620
}
16251621

16261622
// redirect to package css from `?css`
1627-
if isPkgCss && esm.SubModuleName == "" {
1623+
if query.Has("css") && esm.SubModuleName == "" {
16281624
if !ret.CSSInJS {
16291625
return rex.Status(404, "Package CSS not found")
16301626
}
@@ -1684,7 +1680,7 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
16841680
ctx.SetHeader("Content-Type", ctJSON)
16851681
} else {
16861682
ctx.SetHeader("Content-Type", ctJavaScript)
1687-
if isWorker {
1683+
if query.Has("worker") {
16881684
defer f.Close()
16891685
moduleUrl := origin + build.Path()
16901686
if !ret.CJS && len(exports) > 0 {
@@ -1728,7 +1724,7 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
17281724
defer recycle()
17291725
fmt.Fprintf(buf, "/* esm.sh - %s */\n", esm.Specifier())
17301726

1731-
if isWorker {
1727+
if query.Has("worker") {
17321728
moduleUrl := origin + build.Path()
17331729
if !ret.CJS && len(exports) > 0 {
17341730
moduleUrl += "?exports=" + strings.Join(exports, ",")
@@ -1757,7 +1753,7 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
17571753
fmt.Fprintf(buf, "import _ from \"%s\";\n", esm)
17581754
fmt.Fprintf(buf, "export const { %s } = _;\n", strings.Join(exports, ", "))
17591755
}
1760-
if !noDts && ret.Dts != "" {
1756+
if noDts := query.Has("no-dts") || query.Has("no-check"); !noDts && ret.Dts != "" {
17611757
ctx.SetHeader("X-TypeScript-Types", origin+ret.Dts)
17621758
ctx.SetHeader("Access-Control-Expose-Headers", "X-ESM-Path, X-TypeScript-Types")
17631759
} else {

server/server.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,15 +147,15 @@ func Setup(logger *log.Logger) {
147147
logger.Debugf("%d npm repalcements loaded", n)
148148

149149
// install deno
150-
denoVersion, err := installDeno("2.2.1")
150+
denoVersion, err := InstallDeno("2.2.1")
151151
if err != nil {
152152
logger.Fatalf("failed to install deno: %v", err)
153153
}
154154
logger.Debugf("deno v%s installed", denoVersion)
155155
}
156156

157157
func cors(allowOrigins []string) rex.Handle {
158-
allowList := set.NewReadOnly[string](allowOrigins...)
158+
allowList := set.NewReadOnly(allowOrigins...)
159159
return func(ctx *rex.Context) any {
160160
origin := ctx.R.Header.Get("Origin")
161161
isOptionsMethod := ctx.R.Method == "OPTIONS"

0 commit comments

Comments
 (0)