summaryrefslogtreecommitdiff
path: root/extensions/webstorage/01_webstorage.js
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/webstorage/01_webstorage.js')
-rw-r--r--extensions/webstorage/01_webstorage.js191
1 files changed, 0 insertions, 191 deletions
diff --git a/extensions/webstorage/01_webstorage.js b/extensions/webstorage/01_webstorage.js
deleted file mode 100644
index 558522a3c..000000000
--- a/extensions/webstorage/01_webstorage.js
+++ /dev/null
@@ -1,191 +0,0 @@
-// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-
-/// <reference path="../../core/internal.d.ts" />
-
-((window) => {
- const core = window.Deno.core;
- const webidl = window.__bootstrap.webidl;
- const {
- Symbol,
- SymbolFor,
- ObjectDefineProperty,
- ObjectFromEntries,
- ObjectEntries,
- ReflectGet,
- Proxy,
- } = window.__bootstrap.primordials;
-
- const _persistent = Symbol("[[persistent]]");
-
- class Storage {
- [_persistent];
-
- constructor() {
- webidl.illegalConstructor();
- }
-
- get length() {
- webidl.assertBranded(this, Storage);
- return core.opSync("op_webstorage_length", this[_persistent]);
- }
-
- key(index) {
- webidl.assertBranded(this, Storage);
- const prefix = "Failed to execute 'key' on 'Storage'";
- webidl.requiredArguments(arguments.length, 1, { prefix });
- index = webidl.converters["unsigned long"](index, {
- prefix,
- context: "Argument 1",
- });
-
- return core.opSync("op_webstorage_key", index, this[_persistent]);
- }
-
- setItem(key, value) {
- webidl.assertBranded(this, Storage);
- const prefix = "Failed to execute 'setItem' on 'Storage'";
- webidl.requiredArguments(arguments.length, 2, { prefix });
- key = webidl.converters.DOMString(key, {
- prefix,
- context: "Argument 1",
- });
- value = webidl.converters.DOMString(value, {
- prefix,
- context: "Argument 2",
- });
-
- core.opSync("op_webstorage_set", {
- keyName: key,
- keyValue: value,
- }, this[_persistent]);
- }
-
- getItem(key) {
- webidl.assertBranded(this, Storage);
- const prefix = "Failed to execute 'getItem' on 'Storage'";
- webidl.requiredArguments(arguments.length, 1, { prefix });
- key = webidl.converters.DOMString(key, {
- prefix,
- context: "Argument 1",
- });
-
- return core.opSync("op_webstorage_get", key, this[_persistent]);
- }
-
- removeItem(key) {
- webidl.assertBranded(this, Storage);
- const prefix = "Failed to execute 'removeItem' on 'Storage'";
- webidl.requiredArguments(arguments.length, 1, { prefix });
- key = webidl.converters.DOMString(key, {
- prefix,
- context: "Argument 1",
- });
-
- core.opSync("op_webstorage_remove", key, this[_persistent]);
- }
-
- clear() {
- webidl.assertBranded(this, Storage);
- core.opSync("op_webstorage_clear", this[_persistent]);
- }
- }
-
- function createStorage(persistent) {
- if (persistent) window.location;
-
- const storage = webidl.createBranded(Storage);
- storage[_persistent] = persistent;
-
- const proxy = new Proxy(storage, {
- deleteProperty(target, key) {
- if (typeof key == "symbol") {
- delete target[key];
- } else {
- target.removeItem(key);
- }
- return true;
- },
- defineProperty(target, key, descriptor) {
- if (typeof key == "symbol") {
- ObjectDefineProperty(target, key, descriptor);
- } else {
- target.setItem(key, descriptor.value);
- }
- return true;
- },
- get(target, key) {
- if (typeof key == "symbol") return target[key];
- if (key in target) {
- return ReflectGet(...arguments);
- } else {
- return target.getItem(key) ?? undefined;
- }
- },
- set(target, key, value) {
- if (typeof key == "symbol") {
- ObjectDefineProperty(target, key, {
- value,
- configurable: true,
- });
- } else {
- target.setItem(key, value);
- }
- return true;
- },
- has(target, p) {
- return (typeof target.getItem(p)) === "string";
- },
- ownKeys() {
- return core.opSync("op_webstorage_iterate_keys", persistent);
- },
- getOwnPropertyDescriptor(target, key) {
- if (arguments.length === 1) {
- return undefined;
- }
- if (key in target) {
- return undefined;
- }
- const value = target.getItem(key);
- if (value === null) {
- return undefined;
- }
- return {
- value,
- enumerable: true,
- configurable: true,
- writable: true,
- };
- },
- });
-
- proxy[SymbolFor("Deno.customInspect")] = function (inspect) {
- return `${this.constructor.name} ${
- inspect({
- length: this.length,
- ...ObjectFromEntries(ObjectEntries(proxy)),
- })
- }`;
- };
-
- return proxy;
- }
-
- let localStorage;
- let sessionStorage;
-
- window.__bootstrap.webStorage = {
- localStorage() {
- if (!localStorage) {
- localStorage = createStorage(true);
- }
- return localStorage;
- },
- sessionStorage() {
- if (!sessionStorage) {
- sessionStorage = createStorage(false);
- }
- return sessionStorage;
- },
- Storage,
- };
-})(this);