mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
Add readFileSync
This commit is contained in:
parent
a831d1e239
commit
4e55928063
8 changed files with 61 additions and 1 deletions
1
Makefile
1
Makefile
|
@ -1,4 +1,5 @@
|
|||
TS_FILES = \
|
||||
deno.d.ts \
|
||||
dispatch.ts \
|
||||
fetch.ts \
|
||||
globals.ts \
|
||||
|
|
2
deno.d.ts
vendored
2
deno.d.ts
vendored
|
@ -2,4 +2,6 @@ declare module "deno" {
|
|||
type MessageCallback = (msg: Uint8Array) => void;
|
||||
function sub(channel: string, cb: MessageCallback): void;
|
||||
function pub(channel: string, payload: Uint8Array): null | ArrayBuffer;
|
||||
|
||||
function readFileSync(filename: string): Uint8Array;
|
||||
}
|
||||
|
|
|
@ -19,6 +19,8 @@ message Msg {
|
|||
TIMER_CLEAR = 8;
|
||||
FETCH_REQ = 9;
|
||||
FETCH_RES = 10;
|
||||
READ_FILE_SYNC = 11;
|
||||
READ_FILE_SYNC_RES = 12;
|
||||
}
|
||||
Command command = 1;
|
||||
|
||||
|
@ -81,4 +83,10 @@ message Msg {
|
|||
int32 fetch_res_status = 101;
|
||||
repeated string fetch_res_header_line = 102;
|
||||
bytes fetch_res_body = 103;
|
||||
|
||||
// READ_FILE_SYNC
|
||||
string read_file_sync_filename = 110;
|
||||
|
||||
// READ_FILE_SYNC_RES
|
||||
bytes read_file_sync_data = 120;
|
||||
}
|
||||
|
|
22
os.go
22
os.go
|
@ -2,6 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"github.com/golang/protobuf/proto"
|
||||
"github.com/spf13/afero"
|
||||
"io/ioutil"
|
||||
"net/url"
|
||||
"os"
|
||||
|
@ -11,7 +12,11 @@ import (
|
|||
|
||||
const assetPrefix string = "/$asset$/"
|
||||
|
||||
var fs afero.Fs
|
||||
|
||||
func InitOS() {
|
||||
fs = afero.NewOsFs()
|
||||
|
||||
Sub("os", func(buf []byte) []byte {
|
||||
msg := &Msg{}
|
||||
check(proto.Unmarshal(buf, msg))
|
||||
|
@ -27,6 +32,8 @@ func InitOS() {
|
|||
msg.CodeCacheOutputCode)
|
||||
case Msg_EXIT:
|
||||
os.Exit(int(msg.ExitCode))
|
||||
case Msg_READ_FILE_SYNC:
|
||||
return ReadFileSync(msg.ReadFileSyncFilename)
|
||||
default:
|
||||
panic("[os] Unexpected message " + string(buf))
|
||||
}
|
||||
|
@ -128,3 +135,18 @@ func HandleCodeCache(filename string, sourceCode string,
|
|||
check(err)
|
||||
return out
|
||||
}
|
||||
|
||||
func ReadFileSync(filename string) []byte {
|
||||
data, err := afero.ReadFile(fs, filename)
|
||||
res := &Msg{
|
||||
Command: Msg_READ_FILE_SYNC_RES,
|
||||
}
|
||||
if err != nil {
|
||||
res.Error = err.Error()
|
||||
} else {
|
||||
res.ReadFileSyncData = data
|
||||
}
|
||||
out, err := proto.Marshal(res)
|
||||
check(err)
|
||||
return out
|
||||
}
|
||||
|
|
8
os.ts
8
os.ts
|
@ -40,3 +40,11 @@ export function codeCache(
|
|||
codeCacheOutputCode: outputCode
|
||||
});
|
||||
}
|
||||
|
||||
export function readFileSync(filename: string): Uint8Array {
|
||||
const res = sendMsg("os", {
|
||||
command: pb.Msg.Command.READ_FILE_SYNC,
|
||||
readFileSyncFilename: filename
|
||||
});
|
||||
return res.readFileSyncData;
|
||||
}
|
||||
|
|
|
@ -17,7 +17,11 @@ import { _global, globalEval } from "./globals";
|
|||
const EOL = "\n";
|
||||
|
||||
// Public deno module.
|
||||
const deno = { pub, sub };
|
||||
const deno = {
|
||||
pub,
|
||||
sub,
|
||||
readFileSync: os.readFileSync
|
||||
};
|
||||
|
||||
// tslint:disable-next-line:no-any
|
||||
type AmdFactory = (...args: any[]) => undefined | object;
|
||||
|
|
14
testdata/read_file_sync.ts
vendored
Normal file
14
testdata/read_file_sync.ts
vendored
Normal file
|
@ -0,0 +1,14 @@
|
|||
import { readFileSync } from "deno";
|
||||
|
||||
let data = readFileSync("package.json");
|
||||
if (!data.byteLength) {
|
||||
throw Error(`Expected positive value for data.byteLength ${data.byteLength}`);
|
||||
}
|
||||
|
||||
const decoder = new TextDecoder("utf-8");
|
||||
const json = decoder.decode(data);
|
||||
const pkg = JSON.parse(json);
|
||||
if (pkg.name !== "deno") {
|
||||
throw Error(`Expected "deno" but got "${pkg.name}"`)
|
||||
}
|
||||
console.log("package.name ", pkg.name);
|
1
testdata/read_file_sync.ts.out
vendored
Normal file
1
testdata/read_file_sync.ts.out
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
package.name deno
|
Loading…
Reference in a new issue