diff options
13 files changed, 2054 insertions, 21 deletions
diff --git a/integration/snapshots/cjs-transform-shouldnt-have-static-imports-in-cjs-function.debug.js b/integration/snapshots/cjs-transform-shouldnt-have-static-imports-in-cjs-function.debug.js index d9f64c5b9..53bb66b5e 100644 --- a/integration/snapshots/cjs-transform-shouldnt-have-static-imports-in-cjs-function.debug.js +++ b/integration/snapshots/cjs-transform-shouldnt-have-static-imports-in-cjs-function.debug.js @@ -24,9 +24,10 @@ export default __cJS2eSM(function(module, exports) { require(_login_b977_0); require(_login_b977_1); Object.defineProperty(module.exports,"login",{get: () => _login, enumerable: true, configurable: true}); - var test = function test() { + function test() { return testDone(import.meta.url); }; +var test = test; Object.defineProperty(module.exports,"test",{get: () => test, enumerable: true, configurable: true}); let foo, bar; Object.defineProperties(module.exports,{'foo': {get: () => foo, set: ($_newValue) => {foo = $_newValue;}, enumerable: true, configurable: true}, diff --git a/integration/snapshots/cjs-transform-shouldnt-have-static-imports-in-cjs-function.hmr.debug.js b/integration/snapshots/cjs-transform-shouldnt-have-static-imports-in-cjs-function.hmr.debug.js index d8e3ccdd1..fa25e2df8 100644 --- a/integration/snapshots/cjs-transform-shouldnt-have-static-imports-in-cjs-function.hmr.debug.js +++ b/integration/snapshots/cjs-transform-shouldnt-have-static-imports-in-cjs-function.hmr.debug.js @@ -24,9 +24,10 @@ export default __cJS2eSM(function(module, exports) { require(_login_b977_0); require(_login_b977_1); Object.defineProperty(module.exports,"login",{get: () => _login, enumerable: true, configurable: true}); - var test = function test() { + function test() { return testDone(import.meta.url); }; +var test = test; Object.defineProperty(module.exports,"test",{get: () => test, enumerable: true, configurable: true}); var foo, bar; Object.defineProperties(module.exports,{'foo': {get: () => foo, set: ($_newValue) => {foo = $_newValue;}, enumerable: true, configurable: true}, diff --git a/integration/snapshots/latin1-chars-in-regexp.debug.js b/integration/snapshots/latin1-chars-in-regexp.debug.js new file mode 100644 index 000000000..42217319b --- /dev/null +++ b/integration/snapshots/latin1-chars-in-regexp.debug.js @@ -0,0 +1,68 @@ +var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; +var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; +var re_btou = new RegExp([ + "[\xC0-\xDF][\x80-\xBF]", + "[\xE0-\xEF][\x80-\xBF]{2}", + "[\xF0-\xF7][\x80-\xBF]{3}" +].join("|"), "g"); +const encoder = new TextEncoder; +const realLines = [ + "[\xC0-\xDF][\x80-\xBF]", + "[\xE0-\xEF][\x80-\xBF]{2}", + "[\xF0-\xF7][\x80-\xBF]{3}" +]; +const real = realLines.map((input) => Array.from(encoder.encode(input))); +const expected = [ + [91, 195, 128, 45, 195, 159, 93, 91, 194, 128, 45, 194, 191, 93], + [ + 91, + 195, + 160, + 45, + 195, + 175, + 93, + 91, + 194, + 128, + 45, + 194, + 191, + 93, + 123, + 50, + 125 + ], + [ + 91, + 195, + 176, + 45, + 195, + 183, + 93, + 91, + 194, + 128, + 45, + 194, + 191, + 93, + 123, + 51, + 125 + ] +]; +const newlinePreserved = `\n`; +export function test() { + if (!real.every((point, i) => point.every((val, j) => val === expected[i][j]))) + throw new Error(`test failed +${JSON.stringify({expected, real }, null, 2)}`); + if (newlinePreserved.length !== 1 || newlinePreserved.charCodeAt(0) !== 10) + throw new Error("Newline was not preserved"); + const decoder = new TextDecoder("utf8"); + if (!realLines.every((line, i) => decoder.decode(Uint8Array.from(expected[i])) === line)) + throw new Error(`test failed. Lines did not match. +${JSON.stringify({expected, real }, null, 2)}`); + testDone(import.meta.url); +} diff --git a/integration/snapshots/latin1-chars-in-regexp.hmr.debug.js b/integration/snapshots/latin1-chars-in-regexp.hmr.debug.js new file mode 100644 index 000000000..f0e79c488 --- /dev/null +++ b/integration/snapshots/latin1-chars-in-regexp.hmr.debug.js @@ -0,0 +1,90 @@ +import { +__HMRModule as HMR +} from "http://localhost:8080/__runtime.js"; +import { +__HMRClient as Bun +} from "http://localhost:8080/__runtime.js"; +Bun.activate(true); + +var hmr = new HMR(1430071586, "latin1-chars-in-regexp.js"), exports = hmr.exports; +(hmr._load = function() { + var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; + var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; + var re_btou = new RegExp([ + "[\xC0-\xDF][\x80-\xBF]", + "[\xE0-\xEF][\x80-\xBF]{2}", + "[\xF0-\xF7][\x80-\xBF]{3}" + ].join("|"), "g"); + const encoder = new TextEncoder; + const realLines = [ + "[\xC0-\xDF][\x80-\xBF]", + "[\xE0-\xEF][\x80-\xBF]{2}", + "[\xF0-\xF7][\x80-\xBF]{3}" + ]; + const real = realLines.map((input) => Array.from(encoder.encode(input))); + const expected = [ + [91, 195, 128, 45, 195, 159, 93, 91, 194, 128, 45, 194, 191, 93], + [ + 91, + 195, + 160, + 45, + 195, + 175, + 93, + 91, + 194, + 128, + 45, + 194, + 191, + 93, + 123, + 50, + 125 + ], + [ + 91, + 195, + 176, + 45, + 195, + 183, + 93, + 91, + 194, + 128, + 45, + 194, + 191, + 93, + 123, + 51, + 125 + ] + ]; + const newlinePreserved = `\n`; + function test() { + if (!real.every((point, i) => point.every((val, j) => val === expected[i][j]))) + throw new Error(`test failed +${JSON.stringify({expected, real }, null, 2)}`); + if (newlinePreserved.length !== 1 || newlinePreserved.charCodeAt(0) !== 10) + throw new Error("Newline was not preserved"); + const decoder = new TextDecoder("utf8"); + if (!realLines.every((line, i) => decoder.decode(Uint8Array.from(expected[i])) === line)) + throw new Error(`test failed. Lines did not match. +${JSON.stringify({expected, real }, null, 2)}`); + testDone(import.meta.url); + } + hmr.exportAll({ + test: () => test + }); +})(); +var $$hmr_test = hmr.exports.test; +hmr._update = function(exports) { + $$hmr_test = exports.test; +}; + +export { + $$hmr_test as test +}; diff --git a/integration/snapshots/latin1-chars-in-regexp.hmr.js b/integration/snapshots/latin1-chars-in-regexp.hmr.js new file mode 100644 index 000000000..03b9344e4 --- /dev/null +++ b/integration/snapshots/latin1-chars-in-regexp.hmr.js @@ -0,0 +1,90 @@ +import { +__HMRModule as HMR +} from "http://localhost:8080/__runtime.js"; +import { +__HMRClient as Bun +} from "http://localhost:8080/__runtime.js"; +Bun.activate(false); + +var hmr = new HMR(1430071586, "latin1-chars-in-regexp.js"), exports = hmr.exports; +(hmr._load = function() { + var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; + var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; + var re_btou = new RegExp([ + "[\xC0-\xDF][\x80-\xBF]", + "[\xE0-\xEF][\x80-\xBF]{2}", + "[\xF0-\xF7][\x80-\xBF]{3}" + ].join("|"), "g"); + const encoder = new TextEncoder; + const realLines = [ + "[\xC0-\xDF][\x80-\xBF]", + "[\xE0-\xEF][\x80-\xBF]{2}", + "[\xF0-\xF7][\x80-\xBF]{3}" + ]; + const real = realLines.map((input) => Array.from(encoder.encode(input))); + const expected = [ + [91, 195, 128, 45, 195, 159, 93, 91, 194, 128, 45, 194, 191, 93], + [ + 91, + 195, + 160, + 45, + 195, + 175, + 93, + 91, + 194, + 128, + 45, + 194, + 191, + 93, + 123, + 50, + 125 + ], + [ + 91, + 195, + 176, + 45, + 195, + 183, + 93, + 91, + 194, + 128, + 45, + 194, + 191, + 93, + 123, + 51, + 125 + ] + ]; + const newlinePreserved = `\n`; + function test() { + if (!real.every((point, i) => point.every((val, j) => val === expected[i][j]))) + throw new Error(`test failed +${JSON.stringify({expected, real }, null, 2)}`); + if (newlinePreserved.length !== 1 || newlinePreserved.charCodeAt(0) !== 10) + throw new Error("Newline was not preserved"); + const decoder = new TextDecoder("utf8"); + if (!realLines.every((line, i) => decoder.decode(Uint8Array.from(expected[i])) === line)) + throw new Error(`test failed. Lines did not match. +${JSON.stringify({expected, real }, null, 2)}`); + testDone(import.meta.url); + } + hmr.exportAll({ + test: () => test + }); +})(); +var $$hmr_test = hmr.exports.test; +hmr._update = function(exports) { + $$hmr_test = exports.test; +}; + +export { + $$hmr_test as test +}; diff --git a/integration/snapshots/latin1-chars-in-regexp.js b/integration/snapshots/latin1-chars-in-regexp.js new file mode 100644 index 000000000..42217319b --- /dev/null +++ b/integration/snapshots/latin1-chars-in-regexp.js @@ -0,0 +1,68 @@ +var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; +var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; +var re_btou = new RegExp([ + "[\xC0-\xDF][\x80-\xBF]", + "[\xE0-\xEF][\x80-\xBF]{2}", + "[\xF0-\xF7][\x80-\xBF]{3}" +].join("|"), "g"); +const encoder = new TextEncoder; +const realLines = [ + "[\xC0-\xDF][\x80-\xBF]", + "[\xE0-\xEF][\x80-\xBF]{2}", + "[\xF0-\xF7][\x80-\xBF]{3}" +]; +const real = realLines.map((input) => Array.from(encoder.encode(input))); +const expected = [ + [91, 195, 128, 45, 195, 159, 93, 91, 194, 128, 45, 194, 191, 93], + [ + 91, + 195, + 160, + 45, + 195, + 175, + 93, + 91, + 194, + 128, + 45, + 194, + 191, + 93, + 123, + 50, + 125 + ], + [ + 91, + 195, + 176, + 45, + 195, + 183, + 93, + 91, + 194, + 128, + 45, + 194, + 191, + 93, + 123, + 51, + 125 + ] +]; +const newlinePreserved = `\n`; +export function test() { + if (!real.every((point, i) => point.every((val, j) => val === expected[i][j]))) + throw new Error(`test failed +${JSON.stringify({expected, real }, null, 2)}`); + if (newlinePreserved.length !== 1 || newlinePreserved.charCodeAt(0) !== 10) + throw new Error("Newline was not preserved"); + const decoder = new TextDecoder("utf8"); + if (!realLines.every((line, i) => decoder.decode(Uint8Array.from(expected[i])) === line)) + throw new Error(`test failed. Lines did not match. +${JSON.stringify({expected, real }, null, 2)}`); + testDone(import.meta.url); +} diff --git a/integration/snapshots/string-escapes.debug.js b/integration/snapshots/string-escapes.debug.js index 05d9c4ce2..890d8355d 100644 --- a/integration/snapshots/string-escapes.debug.js +++ b/integration/snapshots/string-escapes.debug.js @@ -1,22 +1,417 @@ +import { +__require as require +} from "http://localhost:8080/__runtime.js"; +import * as JSX from "http://localhost:8080/node_modules/react/jsx-dev-runtime.js"; +import * as $bbcd215f from "http://localhost:8080/node_modules/react/index.js"; +var JSXClassic = require($bbcd215f); +var jsx = require(JSX).jsxDEV, JSXFrag = require(JSXClassic).Fragment; + var tab = "\t"; var シ = "wow"; var f = ""; +var f = "₇"; var obj = { "\r\n": "\r\n", "\n": "\n", "\t": "\t", + "\f": "\f", + "\v": "\v", "\u2028": "\u2028", "\u2029": "\u2029", "😊": "😊", "😃": "😃", + "🕵🏽♂️": "🕵🏽♂️", "㋡": "㋡", "☺": "☺", シ: "シ", + "👋": "👋", f, "☹": "☹", "☻": "☻", children: 123 }; +const encoder = new TextEncoder; +const encodedObj = encoder.encode(JSON.stringify(obj)); +const correctEncodedObj = [ + 123, + 34, + 92, + 114, + 92, + 110, + 34, + 58, + 34, + 92, + 114, + 92, + 110, + 34, + 44, + 34, + 92, + 110, + 34, + 58, + 34, + 92, + 110, + 34, + 44, + 34, + 92, + 116, + 34, + 58, + 34, + 92, + 116, + 34, + 44, + 34, + 92, + 102, + 34, + 58, + 34, + 92, + 102, + 34, + 44, + 34, + 92, + 117, + 48, + 48, + 48, + 98, + 34, + 58, + 34, + 92, + 117, + 48, + 48, + 48, + 98, + 34, + 44, + 34, + 226, + 128, + 168, + 34, + 58, + 34, + 226, + 128, + 168, + 34, + 44, + 34, + 226, + 128, + 169, + 34, + 58, + 34, + 226, + 128, + 169, + 34, + 44, + 34, + 240, + 159, + 152, + 138, + 34, + 58, + 34, + 240, + 159, + 152, + 138, + 34, + 44, + 34, + 240, + 159, + 152, + 131, + 34, + 58, + 34, + 240, + 159, + 152, + 131, + 34, + 44, + 34, + 240, + 159, + 149, + 181, + 240, + 159, + 143, + 189, + 226, + 128, + 141, + 226, + 153, + 130, + 239, + 184, + 143, + 34, + 58, + 34, + 240, + 159, + 149, + 181, + 240, + 159, + 143, + 189, + 226, + 128, + 141, + 226, + 153, + 130, + 239, + 184, + 143, + 34, + 44, + 34, + 227, + 139, + 161, + 34, + 58, + 34, + 227, + 139, + 161, + 34, + 44, + 34, + 226, + 152, + 186, + 34, + 58, + 34, + 226, + 152, + 186, + 34, + 44, + 34, + 227, + 130, + 183, + 34, + 58, + 34, + 227, + 130, + 183, + 34, + 44, + 34, + 240, + 159, + 145, + 139, + 34, + 58, + 34, + 240, + 159, + 145, + 139, + 34, + 44, + 34, + 102, + 34, + 58, + 34, + 226, + 130, + 135, + 34, + 44, + 34, + 226, + 152, + 185, + 34, + 58, + 34, + 226, + 152, + 185, + 34, + 44, + 34, + 226, + 152, + 187, + 34, + 58, + 34, + 226, + 152, + 187, + 34, + 44, + 34, + 99, + 104, + 105, + 108, + 100, + 114, + 101, + 110, + 34, + 58, + 49, + 50, + 51, + 125 +]; +const jsxVariants = jsx(JSXFrag, { + children: [ + '"\\r\\n": "\\r\\n", "\\n": "\\n", "\\t": "\\t", "\\f": "\\f", "\\v": "\\v", "\\u2028": "\\u2028", "\\u2029": "\\u2029", "😊": "😊", "😃": "😃", "🕵🏽♂️": "🕵🏽♂️", "㋡": "㋡", "☺": "☺", シ: "シ", "👋": "👋", f: f, "☹": "☹", "☻": "☻", children: 123,', + jsx("div", { + data: "\r\n" + }, undefined, false, undefined, this), + jsx("div", { + data: "\n" + }, undefined, false, undefined, this), + jsx("div", { + data: "\t" + }, undefined, false, undefined, this), + jsx("div", { + data: "\f" + }, undefined, false, undefined, this), + jsx("div", { + data: "\v" + }, undefined, false, undefined, this), + jsx("div", { + data: "\u2028" + }, undefined, false, undefined, this), + jsx("div", { + data: "\u2029" + }, undefined, false, undefined, this), + jsx("div", { + data: "😊" + }, undefined, false, undefined, this), + jsx("div", { + data: "😃" + }, undefined, false, undefined, this), + jsx("div", { + data: "🕵🏽♂️" + }, undefined, false, undefined, this), + jsx("div", { + data: "㋡" + }, undefined, false, undefined, this), + jsx("div", { + data: "☺" + }, undefined, false, undefined, this), + jsx("div", { + data: "シ" + }, undefined, false, undefined, this), + jsx("div", { + data: "👋" + }, undefined, false, undefined, this), + jsx("div", { + data: "☹" + }, undefined, false, undefined, this), + jsx("div", { + data: "☻" + }, undefined, false, undefined, this), + jsx("div", { + data: "123" + }, undefined, false, undefined, this), + jsx("div", {}, "\r\n", false, undefined, this), + jsx("div", { + children: "\r\n" + }, undefined, false, undefined, this), + jsx("div", {}, "\n", false, undefined, this), + jsx("div", { + children: "\n" + }, undefined, false, undefined, this), + jsx("div", {}, "\t", false, undefined, this), + jsx("div", { + children: "\t" + }, undefined, false, undefined, this), + jsx("div", {}, "\f", false, undefined, this), + jsx("div", { + children: "\f" + }, undefined, false, undefined, this), + jsx("div", {}, "\v", false, undefined, this), + jsx("div", { + children: "\v" + }, undefined, false, undefined, this), + jsx("div", {}, "\u2028", false, undefined, this), + jsx("div", { + children: "\u2028" + }, undefined, false, undefined, this), + jsx("div", {}, "\u2029", false, undefined, this), + jsx("div", { + children: "\u2029" + }, undefined, false, undefined, this), + jsx("div", {}, "😊", false, undefined, this), + jsx("div", { + children: "😊" + }, undefined, false, undefined, this), + jsx("div", {}, "😃", false, undefined, this), + jsx("div", { + children: "😃" + }, undefined, false, undefined, this), + jsx("div", {}, "🕵🏽♂️", false, undefined, this), + jsx("div", { + children: "🕵🏽♂️" + }, undefined, false, undefined, this), + jsx("div", {}, "㋡", false, undefined, this), + jsx("div", { + children: "㋡" + }, undefined, false, undefined, this), + jsx("div", {}, "☺", false, undefined, this), + jsx("div", { + children: "☺" + }, undefined, false, undefined, this), + jsx("div", {}, "シ", false, undefined, this), + jsx("div", { + children: "シ" + }, undefined, false, undefined, this), + jsx("div", {}, "👋", false, undefined, this), + jsx("div", { + children: "👋" + }, undefined, false, undefined, this), + jsx("div", {}, "☹", false, undefined, this), + jsx("div", { + children: "☹" + }, undefined, false, undefined, this), + jsx("div", {}, "☻", false, undefined, this), + jsx("div", { + children: "☻" + }, undefined, false, undefined, this), + jsx("div", {}, "123", false, undefined, this), + jsx("div", { + children: "123" + }, undefined, false, undefined, this) + ] +}, undefined, true, undefined, this); const foo = () => { }; const Bar = foo("a", { @@ -30,5 +425,7 @@ export function test() { console.assert(carriage === "\r\n"); console.assert(newline === "\n"); console.assert(tab === "\t"); + console.assert(correctEncodedObj.length === encodedObj.length); + console.assert(correctEncodedObj.every((v, i) => v === encodedObj[i])); return testDone(import.meta.url); } diff --git a/integration/snapshots/string-escapes.hmr.debug.js b/integration/snapshots/string-escapes.hmr.debug.js index bc866d834..979c5da7e 100644 --- a/integration/snapshots/string-escapes.hmr.debug.js +++ b/integration/snapshots/string-escapes.hmr.debug.js @@ -1,32 +1,426 @@ import { -__HMRModule as HMR +__HMRClient as Bun } from "http://localhost:8080/__runtime.js"; import { -__HMRClient as Bun +__require as require } from "http://localhost:8080/__runtime.js"; -Bun.activate(true); +import { +__HMRModule as HMR +} from "http://localhost:8080/__runtime.js"; +import * as JSX from "http://localhost:8080/node_modules/react/jsx-dev-runtime.js"; +import * as $bbcd215f from "http://localhost:8080/node_modules/react/index.js"; +var JSXClassic = require($bbcd215f); +var jsx = require(JSX).jsxDEV, JSXFrag = require(JSXClassic).Fragment; +Bun.activate(true); var hmr = new HMR(2482749838, "string-escapes.js"), exports = hmr.exports; (hmr._load = function() { var tab = "\t"; var シ = "wow"; var f = ""; + var f = "₇"; var obj = { "\r\n": "\r\n", "\n": "\n", "\t": "\t", + "\f": "\f", + "\v": "\v", "\u2028": "\u2028", "\u2029": "\u2029", "😊": "😊", "😃": "😃", + "🕵🏽♂️": "🕵🏽♂️", "㋡": "㋡", "☺": "☺", シ: "シ", + "👋": "👋", f, "☹": "☹", "☻": "☻", children: 123 }; + const encoder = new TextEncoder; + const encodedObj = encoder.encode(JSON.stringify(obj)); + const correctEncodedObj = [ + 123, + 34, + 92, + 114, + 92, + 110, + 34, + 58, + 34, + 92, + 114, + 92, + 110, + 34, + 44, + 34, + 92, + 110, + 34, + 58, + 34, + 92, + 110, + 34, + 44, + 34, + 92, + 116, + 34, + 58, + 34, + 92, + 116, + 34, + 44, + 34, + 92, + 102, + 34, + 58, + 34, + 92, + 102, + 34, + 44, + 34, + 92, + 117, + 48, + 48, + 48, + 98, + 34, + 58, + 34, + 92, + 117, + 48, + 48, + 48, + 98, + 34, + 44, + 34, + 226, + 128, + 168, + 34, + 58, + 34, + 226, + 128, + 168, + 34, + 44, + 34, + 226, + 128, + 169, + 34, + 58, + 34, + 226, + 128, + 169, + 34, + 44, + 34, + 240, + 159, + 152, + 138, + 34, + 58, + 34, + 240, + 159, + 152, + 138, + 34, + 44, + 34, + 240, + 159, + 152, + 131, + 34, + 58, + 34, + 240, + 159, + 152, + 131, + 34, + 44, + 34, + 240, + 159, + 149, + 181, + 240, + 159, + 143, + 189, + 226, + 128, + 141, + 226, + 153, + 130, + 239, + 184, + 143, + 34, + 58, + 34, + 240, + 159, + 149, + 181, + 240, + 159, + 143, + 189, + 226, + 128, + 141, + 226, + 153, + 130, + 239, + 184, + 143, + 34, + 44, + 34, + 227, + 139, + 161, + 34, + 58, + 34, + 227, + 139, + 161, + 34, + 44, + 34, + 226, + 152, + 186, + 34, + 58, + 34, + 226, + 152, + 186, + 34, + 44, + 34, + 227, + 130, + 183, + 34, + 58, + 34, + 227, + 130, + 183, + 34, + 44, + 34, + 240, + 159, + 145, + 139, + 34, + 58, + 34, + 240, + 159, + 145, + 139, + 34, + 44, + 34, + 102, + 34, + 58, + 34, + 226, + 130, + 135, + 34, + 44, + 34, + 226, + 152, + 185, + 34, + 58, + 34, + 226, + 152, + 185, + 34, + 44, + 34, + 226, + 152, + 187, + 34, + 58, + 34, + 226, + 152, + 187, + 34, + 44, + 34, + 99, + 104, + 105, + 108, + 100, + 114, + 101, + 110, + 34, + 58, + 49, + 50, + 51, + 125 + ]; + const jsxVariants = jsx(JSXFrag, { + children: [ + '"\\r\\n": "\\r\\n", "\\n": "\\n", "\\t": "\\t", "\\f": "\\f", "\\v": "\\v", "\\u2028": "\\u2028", "\\u2029": "\\u2029", "😊": "😊", "😃": "😃", "🕵🏽♂️": "🕵🏽♂️", "㋡": "㋡", "☺": "☺", シ: "シ", "👋": "👋", f: f, "☹": "☹", "☻": "☻", children: 123,', + jsx("div", { + data: "\r\n" + }, undefined, false, undefined, this), + jsx("div", { + data: "\n" + }, undefined, false, undefined, this), + jsx("div", { + data: "\t" + }, undefined, false, undefined, this), + jsx("div", { + data: "\f" + }, undefined, false, undefined, this), + jsx("div", { + data: "\v" + }, undefined, false, undefined, this), + jsx("div", { + data: "\u2028" + }, undefined, false, undefined, this), + jsx("div", { + data: "\u2029" + }, undefined, false, undefined, this), + jsx("div", { + data: "😊" + }, undefined, false, undefined, this), + jsx("div", { + data: "😃" + }, undefined, false, undefined, this), + jsx("div", { + data: "🕵🏽♂️" + }, undefined, false, undefined, this), + jsx("div", { + data: "㋡" + }, undefined, false, undefined, this), + jsx("div", { + data: "☺" + }, undefined, false, undefined, this), + jsx("div", { + data: "シ" + }, undefined, false, undefined, this), + jsx("div", { + data: "👋" + }, undefined, false, undefined, this), + jsx("div", { + data: "☹" + }, undefined, false, undefined, this), + jsx("div", { + data: "☻" + }, undefined, false, undefined, this), + jsx("div", { + data: "123" + }, undefined, false, undefined, this), + jsx("div", {}, "\r\n", false, undefined, this), + jsx("div", { + children: "\r\n" + }, undefined, false, undefined, this), + jsx("div", {}, "\n", false, undefined, this), + jsx("div", { + children: "\n" + }, undefined, false, undefined, this), + jsx("div", {}, "\t", false, undefined, this), + jsx("div", { + children: "\t" + }, undefined, false, undefined, this), + jsx("div", {}, "\f", false, undefined, this), + jsx("div", { + children: "\f" + }, undefined, false, undefined, this), + jsx("div", {}, "\v", false, undefined, this), + jsx("div", { + children: "\v" + }, undefined, false, undefined, this), + jsx("div", {}, "\u2028", false, undefined, this), + jsx("div", { + children: "\u2028" + }, undefined, false, undefined, this), + jsx("div", {}, "\u2029", false, undefined, this), + jsx("div", { + children: "\u2029" + }, undefined, false, undefined, this), + jsx("div", {}, "😊", false, undefined, this), + jsx("div", { + children: "😊" + }, undefined, false, undefined, this), + jsx("div", {}, "😃", false, undefined, this), + jsx("div", { + children: "😃" + }, undefined, false, undefined, this), + jsx("div", {}, "🕵🏽♂️", false, undefined, this), + jsx("div", { + children: "🕵🏽♂️" + }, undefined, false, undefined, this), + jsx("div", {}, "㋡", false, undefined, this), + jsx("div", { + children: "㋡" + }, undefined, false, undefined, this), + jsx("div", {}, "☺", false, undefined, this), + jsx("div", { + children: "☺" + }, undefined, false, undefined, this), + jsx("div", {}, "シ", false, undefined, this), + jsx("div", { + children: "シ" + }, undefined, false, undefined, this), + jsx("div", {}, "👋", false, undefined, this), + jsx("div", { + children: "👋" + }, undefined, false, undefined, this), + jsx("div", {}, "☹", false, undefined, this), + jsx("div", { + children: "☹" + }, undefined, false, undefined, this), + jsx("div", {}, "☻", false, undefined, this), + jsx("div", { + children: "☻" + }, undefined, false, undefined, this), + jsx("div", {}, "123", false, undefined, this), + jsx("div", { + children: "123" + }, undefined, false, undefined, this) + ] + }, undefined, true, undefined, this); const foo = () => { }; const Bar = foo("a", { @@ -38,6 +432,8 @@ var hmr = new HMR(2482749838, "string-escapes.js"), exports = hmr.exports; console.assert(carriage === "\r\n"); console.assert(newline === "\n"); console.assert(tab === "\t"); + console.assert(correctEncodedObj.length === encodedObj.length); + console.assert(correctEncodedObj.every((v, i) => v === encodedObj[i])); return testDone(import.meta.url); } hmr.exportAll({ diff --git a/integration/snapshots/string-escapes.hmr.js b/integration/snapshots/string-escapes.hmr.js index 9231cb6cf..ef03d89e1 100644 --- a/integration/snapshots/string-escapes.hmr.js +++ b/integration/snapshots/string-escapes.hmr.js @@ -1,32 +1,426 @@ import { -__HMRModule as HMR +__HMRClient as Bun } from "http://localhost:8080/__runtime.js"; import { -__HMRClient as Bun +__require as require } from "http://localhost:8080/__runtime.js"; -Bun.activate(false); +import { +__HMRModule as HMR +} from "http://localhost:8080/__runtime.js"; +import * as JSX from "http://localhost:8080/node_modules/react/jsx-dev-runtime.js"; +import * as $bbcd215f from "http://localhost:8080/node_modules/react/index.js"; +var JSXClassic = require($bbcd215f); +var jsx = require(JSX).jsxDEV, JSXFrag = require(JSXClassic).Fragment; +Bun.activate(false); var hmr = new HMR(2482749838, "string-escapes.js"), exports = hmr.exports; (hmr._load = function() { var tab = "\t"; var シ = "wow"; var f = ""; + var f = "₇"; var obj = { "\r\n": "\r\n", "\n": "\n", "\t": "\t", + "\f": "\f", + "\v": "\v", "\u2028": "\u2028", "\u2029": "\u2029", "😊": "😊", "😃": "😃", + "🕵🏽♂️": "🕵🏽♂️", "㋡": "㋡", "☺": "☺", シ: "シ", + "👋": "👋", f, "☹": "☹", "☻": "☻", children: 123 }; + const encoder = new TextEncoder; + const encodedObj = encoder.encode(JSON.stringify(obj)); + const correctEncodedObj = [ + 123, + 34, + 92, + 114, + 92, + 110, + 34, + 58, + 34, + 92, + 114, + 92, + 110, + 34, + 44, + 34, + 92, + 110, + 34, + 58, + 34, + 92, + 110, + 34, + 44, + 34, + 92, + 116, + 34, + 58, + 34, + 92, + 116, + 34, + 44, + 34, + 92, + 102, + 34, + 58, + 34, + 92, + 102, + 34, + 44, + 34, + 92, + 117, + 48, + 48, + 48, + 98, + 34, + 58, + 34, + 92, + 117, + 48, + 48, + 48, + 98, + 34, + 44, + 34, + 226, + 128, + 168, + 34, + 58, + 34, + 226, + 128, + 168, + 34, + 44, + 34, + 226, + 128, + 169, + 34, + 58, + 34, + 226, + 128, + 169, + 34, + 44, + 34, + 240, + 159, + 152, + 138, + 34, + 58, + 34, + 240, + 159, + 152, + 138, + 34, + 44, + 34, + 240, + 159, + 152, + 131, + 34, + 58, + 34, + 240, + 159, + 152, + 131, + 34, + 44, + 34, + 240, + 159, + 149, + 181, + 240, + 159, + 143, + 189, + 226, + 128, + 141, + 226, + 153, + 130, + 239, + 184, + 143, + 34, + 58, + 34, + 240, + 159, + 149, + 181, + 240, + 159, + 143, + 189, + 226, + 128, + 141, + 226, + 153, + 130, + 239, + 184, + 143, + 34, + 44, + 34, + 227, + 139, + 161, + 34, + 58, + 34, + 227, + 139, + 161, + 34, + 44, + 34, + 226, + 152, + 186, + 34, + 58, + 34, + 226, + 152, + 186, + 34, + 44, + 34, + 227, + 130, + 183, + 34, + 58, + 34, + 227, + 130, + 183, + 34, + 44, + 34, + 240, + 159, + 145, + 139, + 34, + 58, + 34, + 240, + 159, + 145, + 139, + 34, + 44, + 34, + 102, + 34, + 58, + 34, + 226, + 130, + 135, + 34, + 44, + 34, + 226, + 152, + 185, + 34, + 58, + 34, + 226, + 152, + 185, + 34, + 44, + 34, + 226, + 152, + 187, + 34, + 58, + 34, + 226, + 152, + 187, + 34, + 44, + 34, + 99, + 104, + 105, + 108, + 100, + 114, + 101, + 110, + 34, + 58, + 49, + 50, + 51, + 125 + ]; + const jsxVariants = jsx(JSXFrag, { + children: [ + '"\\r\\n": "\\r\\n", "\\n": "\\n", "\\t": "\\t", "\\f": "\\f", "\\v": "\\v", "\\u2028": "\\u2028", "\\u2029": "\\u2029", "😊": "😊", "😃": "😃", "🕵🏽♂️": "🕵🏽♂️", "㋡": "㋡", "☺": "☺", シ: "シ", "👋": "👋", f: f, "☹": "☹", "☻": "☻", children: 123,', + jsx("div", { + data: "\r\n" + }, undefined, false, undefined, this), + jsx("div", { + data: "\n" + }, undefined, false, undefined, this), + jsx("div", { + data: "\t" + }, undefined, false, undefined, this), + jsx("div", { + data: "\f" + }, undefined, false, undefined, this), + jsx("div", { + data: "\v" + }, undefined, false, undefined, this), + jsx("div", { + data: "\u2028" + }, undefined, false, undefined, this), + jsx("div", { + data: "\u2029" + }, undefined, false, undefined, this), + jsx("div", { + data: "😊" + }, undefined, false, undefined, this), + jsx("div", { + data: "😃" + }, undefined, false, undefined, this), + jsx("div", { + data: "🕵🏽♂️" + }, undefined, false, undefined, this), + jsx("div", { + data: "㋡" + }, undefined, false, undefined, this), + jsx("div", { + data: "☺" + }, undefined, false, undefined, this), + jsx("div", { + data: "シ" + }, undefined, false, undefined, this), + jsx("div", { + data: "👋" + }, undefined, false, undefined, this), + jsx("div", { + data: "☹" + }, undefined, false, undefined, this), + jsx("div", { + data: "☻" + }, undefined, false, undefined, this), + jsx("div", { + data: "123" + }, undefined, false, undefined, this), + jsx("div", {}, "\r\n", false, undefined, this), + jsx("div", { + children: "\r\n" + }, undefined, false, undefined, this), + jsx("div", {}, "\n", false, undefined, this), + jsx("div", { + children: "\n" + }, undefined, false, undefined, this), + jsx("div", {}, "\t", false, undefined, this), + jsx("div", { + children: "\t" + }, undefined, false, undefined, this), + jsx("div", {}, "\f", false, undefined, this), + jsx("div", { + children: "\f" + }, undefined, false, undefined, this), + jsx("div", {}, "\v", false, undefined, this), + jsx("div", { + children: "\v" + }, undefined, false, undefined, this), + jsx("div", {}, "\u2028", false, undefined, this), + jsx("div", { + children: "\u2028" + }, undefined, false, undefined, this), + jsx("div", {}, "\u2029", false, undefined, this), + jsx("div", { + children: "\u2029" + }, undefined, false, undefined, this), + jsx("div", {}, "😊", false, undefined, this), + jsx("div", { + children: "😊" + }, undefined, false, undefined, this), + jsx("div", {}, "😃", false, undefined, this), + jsx("div", { + children: "😃" + }, undefined, false, undefined, this), + jsx("div", {}, "🕵🏽♂️", false, undefined, this), + jsx("div", { + children: "🕵🏽♂️" + }, undefined, false, undefined, this), + jsx("div", {}, "㋡", false, undefined, this), + jsx("div", { + children: "㋡" + }, undefined, false, undefined, this), + jsx("div", {}, "☺", false, undefined, this), + jsx("div", { + children: "☺" + }, undefined, false, undefined, this), + jsx("div", {}, "シ", false, undefined, this), + jsx("div", { + children: "シ" + }, undefined, false, undefined, this), + jsx("div", {}, "👋", false, undefined, this), + jsx("div", { + children: "👋" + }, undefined, false, undefined, this), + jsx("div", {}, "☹", false, undefined, this), + jsx("div", { + children: "☹" + }, undefined, false, undefined, this), + jsx("div", {}, "☻", false, undefined, this), + jsx("div", { + children: "☻" + }, undefined, false, undefined, this), + jsx("div", {}, "123", false, undefined, this), + jsx("div", { + children: "123" + }, undefined, false, undefined, this) + ] + }, undefined, true, undefined, this); const foo = () => { }; const Bar = foo("a", { @@ -38,6 +432,8 @@ var hmr = new HMR(2482749838, "string-escapes.js"), exports = hmr.exports; console.assert(carriage === "\r\n"); console.assert(newline === "\n"); console.assert(tab === "\t"); + console.assert(correctEncodedObj.length === encodedObj.length); + console.assert(correctEncodedObj.every((v, i) => v === encodedObj[i])); return testDone(import.meta.url); } hmr.exportAll({ diff --git a/integration/snapshots/string-escapes.js b/integration/snapshots/string-escapes.js index 05d9c4ce2..890d8355d 100644 --- a/integration/snapshots/string-escapes.js +++ b/integration/snapshots/string-escapes.js @@ -1,22 +1,417 @@ +import { +__require as require +} from "http://localhost:8080/__runtime.js"; +import * as JSX from "http://localhost:8080/node_modules/react/jsx-dev-runtime.js"; +import * as $bbcd215f from "http://localhost:8080/node_modules/react/index.js"; +var JSXClassic = require($bbcd215f); +var jsx = require(JSX).jsxDEV, JSXFrag = require(JSXClassic).Fragment; + var tab = "\t"; var シ = "wow"; var f = ""; +var f = "₇"; var obj = { "\r\n": "\r\n", "\n": "\n", "\t": "\t", + "\f": "\f", + "\v": "\v", "\u2028": "\u2028", "\u2029": "\u2029", "😊": "😊", "😃": "😃", + "🕵🏽♂️": "🕵🏽♂️", "㋡": "㋡", "☺": "☺", シ: "シ", + "👋": "👋", f, "☹": "☹", "☻": "☻", children: 123 }; +const encoder = new TextEncoder; +const encodedObj = encoder.encode(JSON.stringify(obj)); +const correctEncodedObj = [ + 123, + 34, + 92, + 114, + 92, + 110, + 34, + 58, + 34, + 92, + 114, + 92, + 110, + 34, + 44, + 34, + 92, + 110, + 34, + 58, + 34, + 92, + 110, + 34, + 44, + 34, + 92, + 116, + 34, + 58, + 34, + 92, + 116, + 34, + 44, + 34, + 92, + 102, + 34, + 58, + 34, + 92, + 102, + 34, + 44, + 34, + 92, + 117, + 48, + 48, + 48, + 98, + 34, + 58, + 34, + 92, + 117, + 48, + 48, + 48, + 98, + 34, + 44, + 34, + 226, + 128, + 168, + 34, + 58, + 34, + 226, + 128, + 168, + 34, + 44, + 34, + 226, + 128, + 169, + 34, + 58, + 34, + 226, + 128, + 169, + 34, + 44, + 34, + 240, + 159, + 152, + 138, + 34, + 58, + 34, + 240, + 159, + 152, + 138, + 34, + 44, + 34, + 240, + 159, + 152, + 131, + 34, + 58, + 34, + 240, + 159, + 152, + 131, + 34, + 44, + 34, + 240, + 159, + 149, + 181, + 240, + 159, + 143, + 189, + 226, + 128, + 141, + 226, + 153, + 130, + 239, + 184, + 143, + 34, + 58, + 34, + 240, + 159, + 149, + 181, + 240, + 159, + 143, + 189, + 226, + 128, + 141, + 226, + 153, + 130, + 239, + 184, + 143, + 34, + 44, + 34, + 227, + 139, + 161, + 34, + 58, + 34, + 227, + 139, + 161, + 34, + 44, + 34, + 226, + 152, + 186, + 34, + 58, + 34, + 226, + 152, + 186, + 34, + 44, + 34, + 227, + 130, + 183, + 34, + 58, + 34, + 227, + 130, + 183, + 34, + 44, + 34, + 240, + 159, + 145, + 139, + 34, + 58, + 34, + 240, + 159, + 145, + 139, + 34, + 44, + 34, + 102, + 34, + 58, + 34, + 226, + 130, + 135, + 34, + 44, + 34, + 226, + 152, + 185, + 34, + 58, + 34, + 226, + 152, + 185, + 34, + 44, + 34, + 226, + 152, + 187, + 34, + 58, + 34, + 226, + 152, + 187, + 34, + 44, + 34, + 99, + 104, + 105, + 108, + 100, + 114, + 101, + 110, + 34, + 58, + 49, + 50, + 51, + 125 +]; +const jsxVariants = jsx(JSXFrag, { + children: [ + '"\\r\\n": "\\r\\n", "\\n": "\\n", "\\t": "\\t", "\\f": "\\f", "\\v": "\\v", "\\u2028": "\\u2028", "\\u2029": "\\u2029", "😊": "😊", "😃": "😃", "🕵🏽♂️": "🕵🏽♂️", "㋡": "㋡", "☺": "☺", シ: "シ", "👋": "👋", f: f, "☹": "☹", "☻": "☻", children: 123,', + jsx("div", { + data: "\r\n" + }, undefined, false, undefined, this), + jsx("div", { + data: "\n" + }, undefined, false, undefined, this), + jsx("div", { + data: "\t" + }, undefined, false, undefined, this), + jsx("div", { + data: "\f" + }, undefined, false, undefined, this), + jsx("div", { + data: "\v" + }, undefined, false, undefined, this), + jsx("div", { + data: "\u2028" + }, undefined, false, undefined, this), + jsx("div", { + data: "\u2029" + }, undefined, false, undefined, this), + jsx("div", { + data: "😊" + }, undefined, false, undefined, this), + jsx("div", { + data: "😃" + }, undefined, false, undefined, this), + jsx("div", { + data: "🕵🏽♂️" + }, undefined, false, undefined, this), + jsx("div", { + data: "㋡" + }, undefined, false, undefined, this), + jsx("div", { + data: "☺" + }, undefined, false, undefined, this), + jsx("div", { + data: "シ" + }, undefined, false, undefined, this), + jsx("div", { + data: "👋" + }, undefined, false, undefined, this), + jsx("div", { + data: "☹" + }, undefined, false, undefined, this), + jsx("div", { + data: "☻" + }, undefined, false, undefined, this), + jsx("div", { + data: "123" + }, undefined, false, undefined, this), + jsx("div", {}, "\r\n", false, undefined, this), + jsx("div", { + children: "\r\n" + }, undefined, false, undefined, this), + jsx("div", {}, "\n", false, undefined, this), + jsx("div", { + children: "\n" + }, undefined, false, undefined, this), + jsx("div", {}, "\t", false, undefined, this), + jsx("div", { + children: "\t" + }, undefined, false, undefined, this), + jsx("div", {}, "\f", false, undefined, this), + jsx("div", { + children: "\f" + }, undefined, false, undefined, this), + jsx("div", {}, "\v", false, undefined, this), + jsx("div", { + children: "\v" + }, undefined, false, undefined, this), + jsx("div", {}, "\u2028", false, undefined, this), + jsx("div", { + children: "\u2028" + }, undefined, false, undefined, this), + jsx("div", {}, "\u2029", false, undefined, this), + jsx("div", { + children: "\u2029" + }, undefined, false, undefined, this), + jsx("div", {}, "😊", false, undefined, this), + jsx("div", { + children: "😊" + }, undefined, false, undefined, this), + jsx("div", {}, "😃", false, undefined, this), + jsx("div", { + children: "😃" + }, undefined, false, undefined, this), + jsx("div", {}, "🕵🏽♂️", false, undefined, this), + jsx("div", { + children: "🕵🏽♂️" + }, undefined, false, undefined, this), + jsx("div", {}, "㋡", false, undefined, this), + jsx("div", { + children: "㋡" + }, undefined, false, undefined, this), + jsx("div", {}, "☺", false, undefined, this), + jsx("div", { + children: "☺" + }, undefined, false, undefined, this), + jsx("div", {}, "シ", false, undefined, this), + jsx("div", { + children: "シ" + }, undefined, false, undefined, this), + jsx("div", {}, "👋", false, undefined, this), + jsx("div", { + children: "👋" + }, undefined, false, undefined, this), + jsx("div", {}, "☹", false, undefined, this), + jsx("div", { + children: "☹" + }, undefined, false, undefined, this), + jsx("div", {}, "☻", false, undefined, this), + jsx("div", { + children: "☻" + }, undefined, false, undefined, this), + jsx("div", {}, "123", false, undefined, this), + jsx("div", { + children: "123" + }, undefined, false, undefined, this) + ] +}, undefined, true, undefined, this); const foo = () => { }; const Bar = foo("a", { @@ -30,5 +425,7 @@ export function test() { console.assert(carriage === "\r\n"); console.assert(newline === "\n"); console.assert(tab === "\t"); + console.assert(correctEncodedObj.length === encodedObj.length); + console.assert(correctEncodedObj.every((v, i) => v === encodedObj[i])); return testDone(import.meta.url); } diff --git a/integration/snippets/latin1-chars-in-regexp.js b/integration/snippets/latin1-chars-in-regexp.js index 34a6c4a2a..9695b9362 100644 --- a/integration/snippets/latin1-chars-in-regexp.js +++ b/integration/snippets/latin1-chars-in-regexp.js @@ -19,26 +19,51 @@ var re_btou = new RegExp( "g" ); -const real = [ +const encoder = new TextEncoder(); +const realLines = [ "[\xC0-\xDF][\x80-\xBF]", "[\xE0-\xEF][\x80-\xBF]{2}", "[\xF0-\xF7][\x80-\xBF]{3}", -] - .flatMap((a) => a.split("")) - .map((a) => a.codePointAt(0)); +]; +const real = realLines.map((input) => Array.from(encoder.encode(input))); const expected = [ - 91, 192, 45, 223, 93, 91, 128, 45, 191, 93, 91, 224, 45, 239, 93, 91, 128, 45, - 191, 93, 123, 50, 125, 91, 240, 45, 247, 93, 91, 128, 45, 191, 93, 123, 51, - 125, + [91, 195, 128, 45, 195, 159, 93, 91, 194, 128, 45, 194, 191, 93], + [ + 91, 195, 160, 45, 195, 175, 93, 91, 194, 128, 45, 194, 191, 93, 123, 50, + 125, + ], + [ + 91, 195, 176, 45, 195, 183, 93, 91, 194, 128, 45, 194, 191, 93, 123, 51, + 125, + ], ]; +const newlinePreserved = `\n`; + export function test() { - if (!real.every((point, i) => point === expected[i])) { + if ( + !real.every((point, i) => point.every((val, j) => val === expected[i][j])) + ) { + throw new Error( + `test failed +${JSON.stringify({ expected, real }, null, 2)}` + ); + } + + if (newlinePreserved.length !== 1 || newlinePreserved.charCodeAt(0) !== 10) { + throw new Error("Newline was not preserved"); + } + + const decoder = new TextDecoder("utf8"); + if ( + !realLines.every( + (line, i) => decoder.decode(Uint8Array.from(expected[i])) === line + ) + ) { throw new Error( - `test failed.\n\nExpected:\n ${expected.join( - " " - )}\Received:\n ${real.join(" ")}` + `test failed. Lines did not match. +${JSON.stringify({ expected, real }, null, 2)}` ); } diff --git a/integration/snippets/public/index.html b/integration/snippets/public/index.html index 2c3804a04..34e18a07a 100644 --- a/integration/snippets/public/index.html +++ b/integration/snippets/public/index.html @@ -10,7 +10,6 @@ globalThis.console.assert = (condition, ...content) => { if (!condition) { throw new Error(content.join(" ")); - } }; globalThis.getModuleScriptSrc = async (name) => { @@ -50,10 +49,28 @@ ); } - return await testFunction(); + if (globalThis.BUN_DEBUG_MODE) { + try { + return await testFunction(); + } catch (exception) { + console.error(exception); + debugger; + throw exception; + } + } else { + return await testFunction(); + } }; if (globalThis.location.pathname.endsWith("-test")) { + const script = document.createElement("script"); + script.src = globalThis.location.pathname.substring( + 0, + location.pathname.length - "-test".length + ); + script.type = "module"; + document.body.appendChild(script); + globalThis.testDone = (path) => alert(`test ${path} success`); globalThis.testFail = (path) => alert(`!test ${path} fail`); runTest( diff --git a/integration/snippets/string-escapes.js b/integration/snippets/string-escapes.js index fd821f892..8d4eef725 100644 --- a/integration/snippets/string-escapes.js +++ b/integration/snippets/string-escapes.js @@ -1,3 +1,5 @@ +// To update this, copy paste the following into the console of the browser +// ------------------------------------------------------------ var tab = "\t"; var シ = "wow"; var f = ""; @@ -16,11 +18,94 @@ var obj = { "㋡": "㋡", "☺": "☺", シ: "シ", + "👋": "👋", f: f, "☹": "☹", "☻": "☻", children: 123, }; + +const encoder = new TextEncoder(); +const encodedObj = encoder.encode(JSON.stringify(obj)); +// ------------------------------------------------------------ +const correctEncodedObj = [ + 123, 34, 92, 114, 92, 110, 34, 58, 34, 92, 114, 92, 110, 34, 44, 34, 92, 110, + 34, 58, 34, 92, 110, 34, 44, 34, 92, 116, 34, 58, 34, 92, 116, 34, 44, 34, 92, + 102, 34, 58, 34, 92, 102, 34, 44, 34, 92, 117, 48, 48, 48, 98, 34, 58, 34, 92, + 117, 48, 48, 48, 98, 34, 44, 34, 226, 128, 168, 34, 58, 34, 226, 128, 168, 34, + 44, 34, 226, 128, 169, 34, 58, 34, 226, 128, 169, 34, 44, 34, 240, 159, 152, + 138, 34, 58, 34, 240, 159, 152, 138, 34, 44, 34, 240, 159, 152, 131, 34, 58, + 34, 240, 159, 152, 131, 34, 44, 34, 240, 159, 149, 181, 240, 159, 143, 189, + 226, 128, 141, 226, 153, 130, 239, 184, 143, 34, 58, 34, 240, 159, 149, 181, + 240, 159, 143, 189, 226, 128, 141, 226, 153, 130, 239, 184, 143, 34, 44, 34, + 227, 139, 161, 34, 58, 34, 227, 139, 161, 34, 44, 34, 226, 152, 186, 34, 58, + 34, 226, 152, 186, 34, 44, 34, 227, 130, 183, 34, 58, 34, 227, 130, 183, 34, + 44, 34, 240, 159, 145, 139, 34, 58, 34, 240, 159, 145, 139, 34, 44, 34, 102, + 34, 58, 34, 226, 130, 135, 34, 44, 34, 226, 152, 185, 34, 58, 34, 226, 152, + 185, 34, 44, 34, 226, 152, 187, 34, 58, 34, 226, 152, 187, 34, 44, 34, 99, + 104, 105, 108, 100, 114, 101, 110, 34, 58, 49, 50, 51, 125, +]; + +const jsxVariants = ( + <> + "\r\n": "\r\n", "\n": "\n", "\t": "\t", "\f": "\f", "\v": "\v", "\u2028": + "\u2028", "\u2029": "\u2029", "😊": "😊", "😃": "😃", "🕵🏽♂️": "🕵🏽♂️", "㋡": + "㋡", "☺": "☺", シ: "シ", "👋": "👋", f: f, "☹": "☹", "☻": "☻", children: + 123, + <div data="\r\n" /> + <div data="\n" /> + <div data="\t" /> + <div data="\f" /> + <div data="\v" /> + <div data="\u2028" /> + <div data="\u2029" /> + <div data="😊" /> + <div data="😃" /> + <div data="🕵🏽♂️" /> + <div data="㋡" /> + <div data="☺" /> + <div data="シ" /> + <div data="👋" /> + <div data="☹" /> + <div data="☻" /> + <div data="123" /> + <div key="\r\n" /> + <div>\r\n</div> + <div key="\n" /> + <div>\n</div> + <div key="\t" /> + <div>\t</div> + <div key="\f" /> + <div>\f</div> + <div key="\v" /> + <div>\v</div> + <div key="\u2028" /> + <div>\u2028</div> + <div key="\u2029" /> + <div>\u2029</div> + <div key="😊" /> + <div>😊</div> + <div key="😃" /> + <div>😃</div> + <div key="🕵🏽♂️" /> + <div>🕵🏽♂️</div> + <div key="㋡" /> + <div>㋡</div> + <div key="☺" /> + <div>☺</div> + <div key="シ" /> + <div>シ</div> + <div key="👋" /> + <div>👋</div> + <div key="☹" /> + <div>☹</div> + <div key="☻" /> + <div>☻</div> + <div key="123" /> + <div>123</div> + </> +); + const foo = () => {}; const Bar = foo("a", { children: 123, @@ -35,5 +120,7 @@ export function test() { console.assert(carriage === "\r\n"); console.assert(newline === "\n"); console.assert(tab === "\t"); + console.assert(correctEncodedObj.length === encodedObj.length); + console.assert(correctEncodedObj.every((v, i) => v === encodedObj[i])); return testDone(import.meta.url); } |