diff --git a/.eslintrc.json b/.eslintrc.json index cb9c786..3a97d05 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,10 +1,10 @@ { "parserOptions": { - "ecmaVersion": 5 + "ecmaVersion": 6, + "sourceType": "module" }, "extends": "eslint:recommended", "env": { - "commonjs": true, "browser": true }, "rules": { diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 063845e..06ed895 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,10 +13,12 @@ jobs: - uses: actions/checkout@v2 - uses: purescript-contrib/setup-purescript@main + with: + purescript: "unstable" - - uses: actions/setup-node@v1 + - uses: actions/setup-node@v2 with: - node-version: "10" + node-version: "14" - name: Install dependencies run: | diff --git a/CHANGELOG.md b/CHANGELOG.md index f819a2d..261cac6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ Notable changes to this project are documented in this file. The format is based ## [Unreleased] Breaking changes: +- Migrate FFI to ES modules (#51 by @JordanMartinez) New features: diff --git a/bower.json b/bower.json index bd5bfbb..6da150a 100644 --- a/bower.json +++ b/bower.json @@ -15,6 +15,6 @@ "package.json" ], "dependencies": { - "purescript-web-events": "^3.0.0" + "purescript-web-events": "master" } } diff --git a/package.json b/package.json index 1c67b54..4ea39f9 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ }, "devDependencies": { "eslint": "^7.15.0", - "pulp": "^15.0.0", - "purescript-psa": "^0.8.0", + "pulp": "16.0.0-0", + "purescript-psa": "^0.8.2", "rimraf": "^3.0.2" } } diff --git a/src/Web/DOM/CharacterData.js b/src/Web/DOM/CharacterData.js index 92639e7..35bdb8b 100644 --- a/src/Web/DOM/CharacterData.js +++ b/src/Web/DOM/CharacterData.js @@ -1,18 +1,16 @@ -"use strict"; - -exports.data_ = function (t) { +export function data_(t) { return function () { return t.data; }; -}; +} -exports.length = function (t) { +export function length(t) { return function () { return t.length; }; -}; +} -exports.substringData = function (offset) { +export function substringData(offset) { return function (count) { return function (cd) { return function () { @@ -20,17 +18,17 @@ exports.substringData = function (offset) { }; }; }; -}; +} -exports.appendData = function (data) { +export function appendData(data) { return function (cd) { return function () { cd.appendData(data); }; }; -}; +} -exports.insertData = function (offset) { +export function insertData(offset) { return function (data) { return function (cd) { return function () { @@ -38,9 +36,9 @@ exports.insertData = function (offset) { }; }; }; -}; +} -exports.deleteData = function (offset) { +export function deleteData(offset) { return function (count) { return function (cd) { return function () { @@ -48,9 +46,9 @@ exports.deleteData = function (offset) { }; }; }; -}; +} -exports.replaceData = function (offset) { +export function replaceData(offset) { return function (count) { return function (data) { return function (cd) { @@ -60,4 +58,4 @@ exports.replaceData = function (offset) { }; }; }; -}; +} diff --git a/src/Web/DOM/ChildNode.js b/src/Web/DOM/ChildNode.js index 494815e..01d7933 100644 --- a/src/Web/DOM/ChildNode.js +++ b/src/Web/DOM/ChildNode.js @@ -1,7 +1,5 @@ -"use strict"; - -exports.remove = function (node) { +export function remove(node) { return function () { return node.remove(); }; -}; +} diff --git a/src/Web/DOM/DOMTokenList.js b/src/Web/DOM/DOMTokenList.js index a8fe4fb..78b6ba8 100644 --- a/src/Web/DOM/DOMTokenList.js +++ b/src/Web/DOM/DOMTokenList.js @@ -1,38 +1,36 @@ -"use strict"; - -exports.add = function(list) { +export function add(list) { return function(token) { return function() { return list.add(token); }; }; -}; +} -exports.remove = function(list) { +export function remove(list) { return function(token) { return function() { return list.remove(token); }; }; -}; +} -exports.contains = function(list) { +export function contains(list) { return function(token) { return function() { return list.contains(token); }; }; -}; +} -exports.toggle = function(list) { +export function toggle(list) { return function(token) { return function() { return list.toggle(token); }; }; -}; +} -exports.toggleForce = function(list) { +export function toggleForce(list) { return function(token) { return function(force) { return function() { @@ -40,12 +38,12 @@ exports.toggleForce = function(list) { }; }; }; -}; +} -exports._item = function(list) { +export function _item(list) { return function(index) { return function() { return list.item(index); }; }; -}; +} diff --git a/src/Web/DOM/Document.js b/src/Web/DOM/Document.js index 733d713..405f97b 100644 --- a/src/Web/DOM/Document.js +++ b/src/Web/DOM/Document.js @@ -1,5 +1,3 @@ -"use strict"; - var getEffProp = function (name) { return function (doc) { return function () { @@ -8,25 +6,24 @@ var getEffProp = function (name) { }; }; -exports.url = getEffProp("URL"); -exports.documentURI = getEffProp("documentURI"); -exports.origin = getEffProp("origin"); -exports.compatMode = getEffProp("compatMode"); -exports.characterSet = getEffProp("characterSet"); -exports.contentType = getEffProp("contentType"); - -exports._doctype = getEffProp("doctype"); -exports._documentElement = getEffProp("documentElement"); +export const url = getEffProp("URL"); +export const documentURI = getEffProp("documentURI"); +export const origin = getEffProp("origin"); +export const compatMode = getEffProp("compatMode"); +export const characterSet = getEffProp("characterSet"); +export const contentType = getEffProp("contentType"); +export const _doctype = getEffProp("doctype"); +export const _documentElement = getEffProp("documentElement"); -exports.getElementsByTagName = function (localName) { +export function getElementsByTagName(localName) { return function (doc) { return function () { return doc.getElementsByTagName(localName); }; }; -}; +} -exports._getElementsByTagNameNS = function (ns) { +export function _getElementsByTagNameNS(ns) { return function (localName) { return function (doc) { return function () { @@ -34,25 +31,25 @@ exports._getElementsByTagNameNS = function (ns) { }; }; }; -}; +} -exports.getElementsByClassName = function (classNames) { +export function getElementsByClassName(classNames) { return function (doc) { return function () { return doc.getElementsByClassName(classNames); }; }; -}; +} -exports.createElement = function (localName) { +export function createElement(localName) { return function (doc) { return function () { return doc.createElement(localName); }; }; -}; +} -exports._createElementNS = function (ns) { +export function _createElementNS(ns) { return function (qualifiedName) { return function (doc) { return function () { @@ -60,31 +57,31 @@ exports._createElementNS = function (ns) { }; }; }; -}; +} -exports.createDocumentFragment = function (doc) { +export function createDocumentFragment(doc) { return function () { return doc.createDocumentFragment(); }; -}; +} -exports.createTextNode = function (data) { +export function createTextNode(data) { return function (doc) { return function () { return doc.createTextNode(data); }; }; -}; +} -exports.createComment = function (data) { +export function createComment(data) { return function (doc) { return function () { return doc.createComment(data); }; }; -}; +} -exports.createProcessingInstruction = function (target) { +export function createProcessingInstruction(target) { return function (data) { return function (doc) { return function () { @@ -92,9 +89,9 @@ exports.createProcessingInstruction = function (target) { }; }; }; -}; +} -exports.importNode = function (node) { +export function importNode(node) { return function (deep) { return function (doc) { return function () { @@ -102,12 +99,12 @@ exports.importNode = function (node) { }; }; }; -}; +} -exports.adoptNode = function (node) { +export function adoptNode(node) { return function (doc) { return function () { return doc.adoptNode(node); }; }; -}; +} diff --git a/src/Web/DOM/DocumentType.js b/src/Web/DOM/DocumentType.js index 890ad58..deed260 100644 --- a/src/Web/DOM/DocumentType.js +++ b/src/Web/DOM/DocumentType.js @@ -1,11 +1,9 @@ -"use strict"; - var getProp = function (name) { return function (doctype) { return doctype[name]; }; }; -exports.name = getProp("name"); -exports.publicId = getProp("publicId"); -exports.systemId = getProp("systemId"); +export const name = getProp("name"); +export const publicId = getProp("publicId"); +export const systemId = getProp("systemId"); diff --git a/src/Web/DOM/Element.js b/src/Web/DOM/Element.js index d8ee8eb..96b1dde 100644 --- a/src/Web/DOM/Element.js +++ b/src/Web/DOM/Element.js @@ -1,59 +1,57 @@ -"use strict"; - var getProp = function (name) { return function (doctype) { return doctype[name]; }; }; -exports._namespaceURI = getProp("namespaceURI"); -exports._prefix = getProp("prefix"); -exports.localName = getProp("localName"); -exports.tagName = getProp("tagName"); +export const _namespaceURI = getProp("namespaceURI"); +export const _prefix = getProp("prefix"); +export const localName = getProp("localName"); +export const tagName = getProp("tagName"); -exports.id = function (node) { +export function id(node) { return function () { return node.id; }; -}; +} -exports.setId = function (id) { +export function setId(id) { return function (node) { return function () { node.id = id; }; }; -}; +} -exports.className = function (node) { +export function className(node) { return function () { return node.className; }; -}; +} -exports.classList = function (element) { +export function classList(element) { return function () { return element.classList; }; -}; +} -exports.setClassName = function (className) { +export function setClassName(className) { return function (node) { return function () { node.className = className; }; }; -}; +} -exports.getElementsByTagName = function (localName) { +export function getElementsByTagName(localName) { return function (doc) { return function () { return doc.getElementsByTagName(localName); }; }; -}; +} -exports._getElementsByTagNameNS = function (ns) { +export function _getElementsByTagNameNS(ns) { return function (localName) { return function (doc) { return function () { @@ -61,17 +59,17 @@ exports._getElementsByTagNameNS = function (ns) { }; }; }; -}; +} -exports.getElementsByClassName = function (classNames) { +export function getElementsByClassName(classNames) { return function (doc) { return function () { return doc.getElementsByClassName(classNames); }; }; -}; +} -exports.setAttribute = function (name) { +export function setAttribute(name) { return function (value) { return function (element) { return function () { @@ -79,118 +77,118 @@ exports.setAttribute = function (name) { }; }; }; -}; +} -exports._getAttribute = function (name) { +export function _getAttribute(name) { return function (element) { return function () { return element.getAttribute(name); }; }; -}; +} -exports.hasAttribute = function(name) { +export function hasAttribute(name) { return function (element) { return function () { return element.hasAttribute(name); }; }; -}; +} -exports.removeAttribute = function (name) { +export function removeAttribute(name) { return function (element) { return function () { element.removeAttribute(name); }; }; -}; +} -exports.matches = function (selector) { +export function matches(selector) { return function(element) { return function () { return element.matches(selector); }; }; -}; +} -exports._closest = function (selector) { +export function _closest(selector) { return function(element) { return function () { return element.closest(selector); }; }; -}; +} // - CSSOM --------------------------------------------------------------------- -exports.scrollTop = function (node) { +export function scrollTop(node) { return function () { return node.scrollTop; }; -}; +} -exports.setScrollTop = function (scrollTop) { +export function setScrollTop(scrollTop) { return function (node) { return function () { node.scrollTop = scrollTop; }; }; -}; +} -exports.scrollLeft = function (node) { +export function scrollLeft(node) { return function () { return node.scrollLeft; }; -}; +} -exports.setScrollLeft = function (scrollLeft) { +export function setScrollLeft(scrollLeft) { return function (node) { return function () { node.scrollLeft = scrollLeft; }; }; -}; +} -exports.scrollWidth = function (el) { +export function scrollWidth(el) { return function () { return el.scrollWidth; }; -}; +} -exports.scrollHeight = function (el) { +export function scrollHeight(el) { return function () { return el.scrollHeight; }; -}; +} -exports.clientTop = function (el) { +export function clientTop(el) { return function () { return el.clientTop; }; -}; +} -exports.clientLeft = function (el) { +export function clientLeft(el) { return function () { return el.clientLeft; }; -}; +} -exports.clientWidth = function (el) { +export function clientWidth(el) { return function () { return el.clientWidth; }; -}; +} -exports.clientHeight = function (el) { +export function clientHeight(el) { return function () { return el.clientHeight; }; -}; +} -exports._attachShadow = function(props) { +export function _attachShadow(props) { return function (el) { return function() { return el.attachShadow(props); }; }; -}; +} diff --git a/src/Web/DOM/HTMLCollection.js b/src/Web/DOM/HTMLCollection.js index 84a1068..46b9689 100644 --- a/src/Web/DOM/HTMLCollection.js +++ b/src/Web/DOM/HTMLCollection.js @@ -1,29 +1,27 @@ -"use strict"; - -exports.length = function (list) { +export function length(list) { return function () { return list.length; }; -}; +} -exports.toArray = function (list) { +export function toArray(list) { return function () { return [].slice.call(list); }; -}; +} -exports._item = function (index) { +export function _item(index) { return function (list) { return function () { return list.item(index); }; }; -}; +} -exports._namedItem = function (name) { +export function _namedItem(name) { return function (list) { return function () { return list.namedItem(name); }; }; -}; +} diff --git a/src/Web/DOM/MutationObserver.js b/src/Web/DOM/MutationObserver.js index 29523b5..d6330d3 100644 --- a/src/Web/DOM/MutationObserver.js +++ b/src/Web/DOM/MutationObserver.js @@ -1,14 +1,12 @@ -"use strict"; - -exports.mutationObserver = function (cb) { +export function mutationObserver(cb) { return function () { return new MutationObserver(function (mr, mo) { return cb(mr)(mo)(); }); }; -}; +} -exports._observe = function (node) { +export function _observe(node) { return function (config) { return function (mo) { return function () { @@ -16,16 +14,16 @@ exports._observe = function (node) { }; }; }; -}; +} -exports.disconnect = function (mo) { +export function disconnect(mo) { return function () { return mo.disconnect(); }; -}; +} -exports.takeRecords = function (mo) { +export function takeRecords(mo) { return function () { return mo.takeRecords(); }; -}; +} diff --git a/src/Web/DOM/MutationRecord.js b/src/Web/DOM/MutationRecord.js index 8840546..e39c902 100644 --- a/src/Web/DOM/MutationRecord.js +++ b/src/Web/DOM/MutationRecord.js @@ -1,55 +1,53 @@ -"use strict"; - -exports.typeString = function (mr) { +export function typeString(mr) { return function () { return mr.type; }; -}; +} -exports.target = function (mr) { +export function target(mr) { return function () { return mr.target; }; -}; +} -exports.addedNodes = function (mr) { +export function addedNodes(mr) { return function () { return mr.addedNodes; }; -}; +} -exports.removedNodes = function (mr) { +export function removedNodes(mr) { return function () { return mr.removedNodes; }; -}; +} -exports._nextSibling = function (mr) { +export function _nextSibling(mr) { return function () { return mr.nextSibling; }; -}; +} -exports._previousSibling = function (mr) { +export function _previousSibling(mr) { return function () { return mr.previousSibling; }; -}; +} -exports._attributeName = function (mr) { +export function _attributeName(mr) { return function () { return mr.attributeName; }; -}; +} -exports._attributeNamespace = function (mr) { +export function _attributeNamespace(mr) { return function () { return mr.attributeNamespace; }; -}; +} -exports._oldValue = function (mr) { +export function _oldValue(mr) { return function () { return mr.oldValue; }; -}; +} diff --git a/src/Web/DOM/Node.js b/src/Web/DOM/Node.js index 9a35b57..166b358 100644 --- a/src/Web/DOM/Node.js +++ b/src/Web/DOM/Node.js @@ -1,5 +1,3 @@ -"use strict"; - var getEffProp = function (name) { return function (node) { return function () { @@ -8,125 +6,117 @@ var getEffProp = function (name) { }; }; -exports.nodeTypeIndex = function (node) { +export function nodeTypeIndex(node) { return node.nodeType; -}; +} -exports.nodeName = function (node) { +export function nodeName(node) { return node.nodeName; -}; - -exports.baseURI = getEffProp("baseURI"); +} -exports._ownerDocument = getEffProp("ownerDocument"); +export const baseURI = getEffProp("baseURI"); +export const _ownerDocument = getEffProp("ownerDocument"); +export const _parentNode = getEffProp("parentNode"); +export const _parentElement = getEffProp("parentElement"); -exports._parentNode = getEffProp("parentNode"); - -exports._parentElement = getEffProp("parentElement"); - -exports.hasChildNodes = function (node) { +export function hasChildNodes(node) { return function () { return node.hasChildNodes(); }; -}; +} -exports.childNodes = getEffProp("childNodes"); +export const childNodes = getEffProp("childNodes"); +export const _firstChild = getEffProp("firstChild"); +export const _lastChild = getEffProp("lastChild"); +export const _previousSibling = getEffProp("previousSibling"); +export const _nextSibling = getEffProp("nextSibling"); +export const _nodeValue = getEffProp("nodeValue"); -exports._firstChild = getEffProp("firstChild"); - -exports._lastChild = getEffProp("lastChild"); - -exports._previousSibling = getEffProp("previousSibling"); - -exports._nextSibling = getEffProp("nextSibling"); - -exports._nodeValue = getEffProp("nodeValue"); - -exports.setNodeValue = function (value) { +export function setNodeValue(value) { return function (node) { return function () { node.nodeValue = value; }; }; -}; +} -exports.textContent = getEffProp("textContent"); +export const textContent = getEffProp("textContent"); -exports.setTextContent = function (value) { +export function setTextContent(value) { return function (node) { return function () { node.textContent = value; }; }; -}; +} -exports.normalize = function (node) { +export function normalize(node) { return function () { node.normalize(); }; -}; +} -exports.clone = function (node) { +export function clone(node) { return function () { return node.cloneNode(false); }; -}; +} -exports.deepClone = function (node) { +export function deepClone(node) { return function () { return node.cloneNode(true); }; -}; +} -exports.isEqualNode = function (node1) { +export function isEqualNode(node1) { return function (node2) { return function () { return node1.isEqualNode(node2); }; }; -}; +} -exports.compareDocumentPositionBits = function (node1) { +export function compareDocumentPositionBits(node1) { return function (node2) { return function () { return node1.compareDocumentPosition(node2); }; }; -}; +} -exports.contains = function (node1) { +export function contains(node1) { return function (node2) { return function () { return node1.contains(node2); }; }; -}; +} -exports._lookupPrefix = function (prefix) { +export function _lookupPrefix(prefix) { return function (node) { return function () { return node.lookupPrefix(prefix); }; }; -}; +} -exports._lookupNamespaceURI = function (ns) { +export function _lookupNamespaceURI(ns) { return function (node) { return function () { return node.lookupNamespaceURI(ns); }; }; -}; +} -exports.isDefaultNamespace = function (ns) { +export function isDefaultNamespace(ns) { return function (node) { return function () { return node.isDefaultNamespace(ns); }; }; -}; +} -exports.insertBefore = function (node1) { +export function insertBefore(node1) { return function (node2) { return function (parent) { return function () { @@ -134,17 +124,17 @@ exports.insertBefore = function (node1) { }; }; }; -}; +} -exports.appendChild = function (node) { +export function appendChild(node) { return function (parent) { return function () { parent.appendChild(node); }; }; -}; +} -exports.replaceChild = function (newChild) { +export function replaceChild(newChild) { return function (oldChild) { return function (parent) { return function () { @@ -152,12 +142,12 @@ exports.replaceChild = function (newChild) { }; }; }; -}; +} -exports.removeChild = function (node) { +export function removeChild(node) { return function (parent) { return function () { parent.removeChild(node); }; }; -}; +} diff --git a/src/Web/DOM/NodeList.js b/src/Web/DOM/NodeList.js index 5067a08..4c76cb5 100644 --- a/src/Web/DOM/NodeList.js +++ b/src/Web/DOM/NodeList.js @@ -1,21 +1,19 @@ -"use strict"; - -exports.length = function (list) { +export function length(list) { return function () { return list.length; }; -}; +} -exports.toArray = function (list) { +export function toArray(list) { return function () { return [].slice.call(list); }; -}; +} -exports._item = function (index) { +export function _item(index) { return function (list) { return function () { return list.item(index); }; }; -}; +} diff --git a/src/Web/DOM/NonDocumentTypeChildNode.js b/src/Web/DOM/NonDocumentTypeChildNode.js index cf0387d..3567560 100644 --- a/src/Web/DOM/NonDocumentTypeChildNode.js +++ b/src/Web/DOM/NonDocumentTypeChildNode.js @@ -1,13 +1,11 @@ -"use strict"; - -exports._previousElementSibling = function (node) { +export function _previousElementSibling(node) { return function () { return node.previousElementSibling; }; -}; +} -exports._nextElementSibling = function (node) { +export function _nextElementSibling(node) { return function () { return node.nextElementSibling; }; -}; +} diff --git a/src/Web/DOM/NonElementParentNode.js b/src/Web/DOM/NonElementParentNode.js index 9ee9583..7a8763d 100644 --- a/src/Web/DOM/NonElementParentNode.js +++ b/src/Web/DOM/NonElementParentNode.js @@ -1,9 +1,7 @@ -"use strict"; - -exports._getElementById = function (id) { +export function _getElementById(id) { return function (node) { return function () { return node.getElementById(id); }; }; -}; +} diff --git a/src/Web/DOM/ParentNode.js b/src/Web/DOM/ParentNode.js index db149e9..3989e0b 100644 --- a/src/Web/DOM/ParentNode.js +++ b/src/Web/DOM/ParentNode.js @@ -1,5 +1,3 @@ -"use strict"; - var getEffProp = function (name) { return function (node) { return function () { @@ -8,26 +6,23 @@ var getEffProp = function (name) { }; }; -exports.children = getEffProp("children"); - -exports._firstElementChild = getEffProp("firstElementChild"); - -exports._lastElementChild = getEffProp("lastElementChild"); +export const children = getEffProp("children"); +export const _firstElementChild = getEffProp("firstElementChild"); +export const _lastElementChild = getEffProp("lastElementChild"); +export const childElementCount = getEffProp("childElementCount"); -exports.childElementCount = getEffProp("childElementCount"); - -exports._querySelector = function (selector) { +export function _querySelector(selector) { return function (node) { return function () { return node.querySelector(selector); }; }; -}; +} -exports.querySelectorAll = function (selector) { +export function querySelectorAll(selector) { return function (node) { return function () { return node.querySelectorAll(selector); }; }; -}; +} diff --git a/src/Web/DOM/ProcessingInstruction.js b/src/Web/DOM/ProcessingInstruction.js index 0984961..548e19e 100644 --- a/src/Web/DOM/ProcessingInstruction.js +++ b/src/Web/DOM/ProcessingInstruction.js @@ -1,7 +1,5 @@ -"use strict"; - -exports.target = function (pi) { +export function target(pi) { return function () { return pi.target; }; -}; +} diff --git a/src/Web/DOM/ShadowRoot.js b/src/Web/DOM/ShadowRoot.js index 24a0cba..43c0dc1 100644 --- a/src/Web/DOM/ShadowRoot.js +++ b/src/Web/DOM/ShadowRoot.js @@ -1,11 +1,9 @@ -"use strict"; - -exports._mode = function (el) { +export function _mode(el) { return el.mode; -}; +} -exports.host = function (el) { +export function host(el) { return function() { return el.host; }; -}; +} diff --git a/src/Web/DOM/Text.js b/src/Web/DOM/Text.js index 8b4c1cf..aae3ceb 100644 --- a/src/Web/DOM/Text.js +++ b/src/Web/DOM/Text.js @@ -1,15 +1,13 @@ -"use strict"; - -exports.splitText = function (offset) { +export function splitText(offset) { return function (t) { return function () { return t.splitText(offset); }; }; -}; +} -exports.wholeText = function (t) { +export function wholeText(t) { return function () { return t.wholeText; }; -}; +}