diff --git a/js/deno.ts b/js/deno.ts index 91f7ae1af844e47c2b68c949d9d34ff8285a0d10..62816b8e15f764179d5c97ca3334d7f5f3933176 100644 --- a/js/deno.ts +++ b/js/deno.ts @@ -16,7 +16,7 @@ export { symlinkSync, symlink } from "./symlink"; export { writeFileSync, writeFile } from "./write_file"; export { ErrorKind, DenoError } from "./errors"; export { libdeno } from "./libdeno"; -export { arch, platform } from "./platform"; +export { platform } from "./platform"; export { trace } from "./trace"; export { truncateSync, truncate } from "./truncate"; export const args: string[] = []; diff --git a/js/platform.ts b/js/platform.ts index 26fc317a10f4eb119f2579ded812cc6356c5bcfb..704ed074314569fa6d8ee84dace60ee4d4ebb68f 100644 --- a/js/platform.ts +++ b/js/platform.ts @@ -1,5 +1,3 @@ -// Dummy. Injected in rollup.config.js -import { DenoArch, DenoPlatform } from "./types"; - -export const arch: DenoArch = "unknown"; -export const platform: DenoPlatform = "unknown"; +import { Platform } from "./types"; +// 'platform' is injected by rollup.config.js at compile time. +export const platform: Platform = {}; diff --git a/js/platform_test.ts b/js/platform_test.ts index 80a1d932535dca3f59635bf6bfabed267cb73521..65cd2572d150921fbd253d8d0cb8983d64d4bb53 100644 --- a/js/platform_test.ts +++ b/js/platform_test.ts @@ -2,8 +2,10 @@ import { test, assert } from "./test_util.ts"; import * as deno from "deno"; -test(function transformPlatformSuccess() { - // Make sure they are transformed - assert(deno.arch !== "unknown"); - assert(deno.platform !== "unknown"); +test(function platformTransform() { + // deno.platform is injected by rollup at compile time. Here + // we check it has been properly transformed. + const { arch, os } = deno.platform; + assert(arch === "x64"); + assert(os === "mac" || os === "win" || os === "linux"); }); diff --git a/js/types.ts b/js/types.ts index 7a7bc44d9a08357d4723e83a6694f3b4d8f8e7f7..3ef8f81e595e141467dc2420a09d01938610dee4 100644 --- a/js/types.ts +++ b/js/types.ts @@ -152,28 +152,8 @@ declare global { } } -// Based on Node's arch -export type DenoArch = - | "arm" - | "arm64" - | "ia32" - | "mips" - | "mipsel" - | "ppc" - | "ppc64" - | "s390" - | "s390x" - | "x32" - | "x64" - | "unknown"; - -export type DenoPlatform = - | "aix" - | "darwin" - | "freebsd" - | "linux" - | "openbsd" - | "sunos" - | "win32" - | "android" - | "unknown"; +// Do not add unsupported platforms. +export interface Platform { + arch?: "x64"; + os?: "mac" | "win" | "linux"; +} diff --git a/rollup.config.js b/rollup.config.js index 2fdaee08c04763053758f9a34df2a90377dc9bbd..e08604b006655d04bee372deadb573f3fed8d7be 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -80,7 +80,16 @@ function strings({ include, exclude } = {}) { }; } -// Inject deno.arch/deno.platform from Node's process.arch/process.platform +const archNodeToDeno = { + x64: "x64" +}; +const osNodeToDeno = { + win32: "win", + darwin: "mac", + linux: "linux" +}; + +// Inject deno.platform.arch and deno.platform.os function platform({ include, exclude } = {}) { if (!include) { throw new Error("include option must be passed"); @@ -97,11 +106,11 @@ function platform({ include, exclude } = {}) { transform(_code, id) { if (filter(id)) { // Adapted from https://github.com/rollup/rollup-plugin-inject/blob/master/src/index.js + const arch = archNodeToDeno[process.arch]; + const os = osNodeToDeno[process.platform]; const magicString = new MagicString(` -import { DenoArch, DenoPlatform } from "./types"; -export const arch: DenoArch = "${process.arch}"; -export const platform: DenoPlatform = "${process.platform}";`); - // arch and platform comes from Node +import { Platform } from "./types"; +export const platform: Platform = { arch: "${arch}", os:"${os}" };`); return { code: magicString.toString(), map: magicString.generateMap()