fix: target es2018 to support node 10+

This commit is contained in:
M. George Hansen 2020-05-26 16:29:43 -07:00
parent ac8b798b2f
commit 7092f608c2
6 changed files with 34 additions and 10 deletions

View file

@ -5,8 +5,8 @@
"moduleResolution": "node", "moduleResolution": "node",
"jsx": "react", "jsx": "react",
"jsxFactory": "createElement", "jsxFactory": "createElement",
"target": "ES2019", "target": "ES2018",
"lib": ["ES2019"], "lib": ["ES2018"],
"strict": true, "strict": true,
"noUnusedLocals": true, "noUnusedLocals": true,
"noUnusedParameters": true, "noUnusedParameters": true,

6
package-lock.json generated
View file

@ -62,9 +62,9 @@
"dev": true "dev": true
}, },
"@types/node": { "@types/node": {
"version": "12.12.38", "version": "10.17.24",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.38.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.24.tgz",
"integrity": "sha512-75eLjX0pFuTcUXnnWmALMzzkYorjND0ezNEycaKesbUBg9eGZp4GHPuDmkRc4mQQvIpe29zrzATNRA6hkYqwmA==", "integrity": "sha512-5SCfvCxV74kzR3uWgTYiGxrd69TbT1I6+cMx1A5kEly/IVveJBimtAMlXiEyVFn5DvUFewQWxOOiJhlxeQwxgA==",
"dev": true "dev": true
}, },
"@types/ws": { "@types/ws": {

View file

@ -8,7 +8,7 @@
}, },
"license": "MPL-2.0", "license": "MPL-2.0",
"engines": { "engines": {
"node": ">=12" "node": ">=10"
}, },
"main": "dist/index.js", "main": "dist/index.js",
"types": "types.d.ts", "types": "types.d.ts",
@ -29,7 +29,7 @@
"test": "ts-node --project=test/tsconfig.json test/run-tests.ts" "test": "ts-node --project=test/tsconfig.json test/run-tests.ts"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "~12", "@types/node": "~10",
"@types/ws": "^7.2.4", "@types/ws": "^7.2.4",
"@typescript-eslint/eslint-plugin": "^3.0.2", "@typescript-eslint/eslint-plugin": "^3.0.2",
"@typescript-eslint/parser": "^3.0.2", "@typescript-eslint/parser": "^3.0.2",

View file

@ -5,6 +5,7 @@
import { Component, Element, HTMLElement } from "./component"; import { Component, Element, HTMLElement } from "./component";
import { HTMLAttributes } from "./jsx"; import { HTMLAttributes } from "./jsx";
import { flatDeep } from "./utils";
/** /**
* Create an HTMLElement from a custom Component. * Create an HTMLElement from a custom Component.
@ -42,7 +43,7 @@ export function createElement(
...children: Element[] ...children: Element[]
): HTMLElement { ): HTMLElement {
// Flatten the children array so we can accept arrays as children. // Flatten the children array so we can accept arrays as children.
const normalizedChildren = children.flat(); const normalizedChildren = flatDeep(children);
if (type instanceof Function) { if (type instanceof Function) {
return type({ ...props, children: normalizedChildren }); return type({ ...props, children: normalizedChildren });
} }

View file

@ -48,3 +48,26 @@ export const purgeModuleAndDepsFromCache = (modName: string): void => {
} }
delete require.cache[modPath]; delete require.cache[modPath];
}; };
export type Flattenable<T> = Array<T | Flattenable<T>>;
const flatDeepRec = <T>(arr: Flattenable<T>, d: number): T[] => {
if (d <= 0) {
return arr.slice() as T[];
}
let acc = [] as T[];
for (const val of arr) {
acc = acc.concat(Array.isArray(val) ? flatDeepRec(arr, d - 1) : val);
}
return acc;
};
/**
* Flatten an arbitrarily-deeply nested array into a flat array.
*
* @param arr Array to flatten.
*
* @return Flattened array.
*/
export const flatDeep = <T>(arr: Flattenable<T>): T[] => flatDeepRec(arr, 1);

View file

@ -3,8 +3,8 @@
"esModuleInterop": true, "esModuleInterop": true,
"module": "CommonJS", "module": "CommonJS",
"moduleResolution": "node", "moduleResolution": "node",
"target": "ES2019", "target": "ES2018",
"lib": ["ES2019"], "lib": ["ES2018"],
"strict": true, "strict": true,
"noUnusedLocals": true, "noUnusedLocals": true,
"noUnusedParameters": true, "noUnusedParameters": true,