1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-01-11 08:33:43 -05:00

Add TextEncoder/TextDecoder support.

Fixes #470

This commit increases size:
out/release/gen/bundle/main.js      7.3M -> 7.9M
out/release/gen/bundle/main.js.map   11M -> 12M
out/release/gen/snapshot_deno.bin    34M -> 37M
out/release/deno                     49M -> 53M

Note the amount in the JS code added is quite small:
4.0K    node_modules/text-encoding/index.js
4.0K    node_modules/@types/text-encoding/index.d.ts
4.0K    js/text_encoding.ts

Unclear to me what is causing the jump in snapshot size.
This commit is contained in:
Ryan Dahl 2018-08-09 13:24:03 -04:00
parent fb87cb38ec
commit 040a042679
6 changed files with 40 additions and 11 deletions

View file

@ -287,6 +287,7 @@ run_node("bundle") {
"js/os.ts",
"js/plugins.d.ts",
"js/runtime.ts",
"js/text_encoding.ts",
"js/timers.ts",
"js/types.d.ts",
"js/util.ts",

View file

@ -3,6 +3,7 @@
import { Console } from "./console";
import { RawSourceMap } from "./types";
import * as timers from "./timers";
import { TextEncoder, TextDecoder } from "./text_encoding";
declare global {
interface Window {
@ -16,6 +17,11 @@ declare global {
const console: Console;
const window: Window;
// tslint:disable:variable-name
let TextEncoder: TextEncoder;
let TextDecoder: TextDecoder;
// tslint:enable:variable-name
}
// If you use the eval function indirectly, by invoking it via a reference
@ -49,10 +55,8 @@ window.clearTimeout = timers.clearTimer;
window.clearInterval = timers.clearTimer;
window.console = new Console(libdeno.print);
window.TextEncoder = TextEncoder;
window.TextDecoder = TextDecoder;
// import { fetch } from "./fetch";
// window["fetch"] = fetch;
// import { TextEncoder, TextDecoder } from "text-encoding";
// window["TextEncoder"] = TextEncoder;
// window["TextDecoder"] = TextDecoder;

View file

@ -1,6 +0,0 @@
// Remove and depend on @types/text-encoding once this PR is merged
// https://github.com/DefinitelyTyped/DefinitelyTyped/pull/26141
declare module "text-encoding" {
export const TextEncoder: TextEncoder;
export const TextDecoder: TextDecoder;
}

28
js/text_encoding.ts Normal file
View file

@ -0,0 +1,28 @@
// Copyright 2018 the Deno authors. All rights reserved. MIT license.
// @types/text-encoding relies on lib.dom.d.ts for some interfaces. We do not
// want to include lib.dom.d.ts (due to size) into deno's global type scope.
// Therefore this hack: add a few of the missing interfaces in
// @types/text-encoding to the global scope before importing.
declare global {
type BufferSource = ArrayBufferView | ArrayBuffer;
interface TextDecodeOptions {
stream?: boolean;
}
interface TextDecoderOptions {
fatal?: boolean;
ignoreBOM?: boolean;
}
interface TextDecoder {
readonly encoding: string;
readonly fatal: boolean;
readonly ignoreBOM: boolean;
decode(input?: BufferSource, options?: TextDecodeOptions): string;
}
}
export { TextEncoder, TextDecoder } from "text-encoding";

View file

@ -3,6 +3,7 @@
"@types/base64-js": "^1.2.5",
"@types/flatbuffers": "^1.9.0",
"@types/source-map-support": "^0.4.1",
"@types/text-encoding": "0.0.33",
"base64-js": "^1.3.0",
"flatbuffers": "^1.9.0",
"prettier": "^1.14.0",
@ -16,6 +17,7 @@
"rollup-plugin-typescript2": "^0.16.1",
"rollup-pluginutils": "^2.3.0",
"source-map-support": "^0.5.6",
"text-encoding": "0.6.4",
"tslint": "^5.10.0",
"tslint-eslint-rules": "^5.3.1",
"tslint-no-circular-imports": "^0.5.0",

@ -1 +1 @@
Subproject commit 785db4ec088750adde4f63211120ecb828fca148
Subproject commit 221e8d5662be4d7524e31bb7b647623f46ad53ce