Skip to content

Commit

Permalink
generate test-html with import-maps
Browse files Browse the repository at this point in the history
  • Loading branch information
dmonad committed Feb 23, 2023
1 parent 681c5ee commit 1112341
Show file tree
Hide file tree
Showing 8 changed files with 221 additions and 10 deletions.
54 changes: 54 additions & 0 deletions bin/gentesthtml.js
@@ -0,0 +1,54 @@

import fs from 'fs'
import * as object from '../object.js'

/**
* @type {Object<string,string>}
*/
const exports = {}

/**
* @param {any} v
* @param {string} k
* @param {string} pkgName
* @param {string} pathPrefix
*/
const extractModMap = (v, k, pkgName, pathPrefix) => {
if (k[0] !== '.') return
if (typeof v === 'object') {
extractModMap(v.browser || v.module || v.import, k, pkgName, pathPrefix)
} else if (v && v[0] === '.') {
exports[pkgName + k.slice(1)] = pathPrefix + v.slice(1)
}
}
const rootPkgJson = JSON.parse(fs.readFileSync('./package.json'))
/**
* @param {object} pkgJson
* @param {string} pathPrefix
*/
const extractPkgJsonInfo = (pkgJson, pathPrefix) => object.forEach(pkgJson.exports, (v, k) => extractModMap(v, k, pkgJson.name, pathPrefix))
extractPkgJsonInfo(rootPkgJson, '.')
object.forEach(rootPkgJson.dependencies, (_v, depName) => {
const prefix = `./node_modules/${depName}`
const depPkgJson = JSON.parse(fs.readFileSync(prefix + '/package.json'))
extractPkgJsonInfo(depPkgJson, prefix)
})

const testHtml = `
<!DOCTYPE html>
<html>
<head>
<title>Testing lib0</title>
<script type="importmap">
{
"imports": ${JSON.stringify(exports, null, 2)}
}
</script>
</head>
<body>
<script type="module" src="./test.js"></script>
</body>
</html>
`

console.log(testHtml)
2 changes: 2 additions & 0 deletions crypto.test.js
Expand Up @@ -118,6 +118,8 @@ export const testConsistentKeyGeneration = async _tc => {
const publicKey = await cryptutils.importAsymmetricKey(jwkPublic, { extractable: true, usages: ['verify'] })
const exportedPublic = await cryptutils.exportKey(publicKey)
const exportedPrivate = await cryptutils.exportKey(privateKey)
delete exportedPublic.alg // for firefox compat
delete exportedPrivate.alg // for firefox compat
t.compare(jwkPublic, /** @type {any} */ (exportedPublic))
t.compare(jwkPrivate, /** @type {any} */ (exportedPrivate))
})
Expand Down
1 change: 0 additions & 1 deletion encoding.js
Expand Up @@ -589,7 +589,6 @@ export class RleEncoder extends Encoder {
}
}


/**
* Basic diff decoder using variable length encoding.
*
Expand Down
7 changes: 5 additions & 2 deletions object.js
Expand Up @@ -20,8 +20,9 @@ export const assign = Object.assign
export const keys = Object.keys

/**
* @param {Object<string,any>} obj
* @param {function(any,string):any} f
* @template V
* @param {{ [key:string]: V }} obj
* @param {function(V,string):any} f
*/
export const forEach = (obj, f) => {
for (const key in obj) {
Expand All @@ -30,6 +31,8 @@ export const forEach = (obj, f) => {
}

/**
* @todo implement mapToArray & map
*
* @template R
* @param {Object<string,any>} obj
* @param {function(any,string):R} f
Expand Down
3 changes: 2 additions & 1 deletion object.test.js
Expand Up @@ -24,7 +24,8 @@ export const testObject = _tc => {
t.assert(!object.some({ a: 1, b: 5 }, (_v, _k) => false))
t.describe('object.forEach')
let forEachSum = 0
object.forEach({ x: 1, y: 3 }, (v, _k) => { forEachSum += v })
const r = { x: 1, y: 3 }
object.forEach(r, (v, _k) => { forEachSum += v })
t.assert(forEachSum === 4)
t.describe('object.map')
t.assert(object.map({ x: 1, z: 5 }, (v, _k) => v).reduce(math.add) === 6)
Expand Down
10 changes: 10 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 7 additions & 2 deletions package.json
Expand Up @@ -11,6 +11,9 @@
"type": "GitHub Sponsors ❤",
"url": "https://github.com/sponsors/dmonad"
},
"bin": {
"0gentesthtml": "./bin/gentesthtml.js"
},
"exports": {
"./package.json": "./package.json",
".": {
Expand Down Expand Up @@ -394,6 +397,7 @@
"isomorphic.js": "^0.2.4"
},
"devDependencies": {
"@types/node": "^18.14.0",
"c8": "^7.13.0",
"http-server": "^0.12.3",
"jsdoc-api": "^5.0.4",
Expand All @@ -406,7 +410,7 @@
"clean": "rm -rf dist *.d.ts */*.d.ts *.d.ts.map */*.d.ts.map",
"types": "tsc --outDir .",
"dist": "rollup -c",
"debug": "http-server -o test.html",
"debug": "npm run gentesthtml && http-server -o test.html",
"test": "c8 --check-coverage --lines 100 --branches 100 --functions 100 --statements 100 node --unhandled-rejections=strict ./test.js --repetition-time 50 --production",
"test-inspect": "node --inspect-brk --unhandled-rejections=strict ./test.js --repetition-time 50 --production",
"test-extensive": "node test.js && npm test -- --repetition-time 30000 --extensive",
Expand All @@ -415,7 +419,8 @@
"lint": "standard && tsc",
"gendocs": "node ./bin/gendocs.js",
"preversion": "npm run clean && npm run lint && npm run test && npm run types && npm run dist && npm run gendocs && git add README.md",
"postpublish": "npm run clean"
"postpublish": "npm run clean",
"gentesthtml": "node ./bin/gentesthtml.js > test.html"
},
"repository": {
"type": "git",
Expand Down
145 changes: 141 additions & 4 deletions test.html
@@ -1,18 +1,155 @@

<!DOCTYPE html>
<html>
<head>
<title>Testing lib0</title>
<script type="importmap">
{
"imports": {
"isomorphic.js": "./node_modules/isomorphic.js/browser.mjs",
"lib0/crypto": "./crypto.js",
"lib0/webcrypto": "./webcrypto.browser.js"
}
"lib0/package.json": "./package.json",
"lib0": "./index.js",
"lib0/array.js": "./array.js",
"lib0/dist/array.cjs": "./dist/array.cjs",
"lib0/array": "./array.js",
"lib0/binary.js": "./binary.js",
"lib0/dist/binary.cjs": "./dist/binary.cjs",
"lib0/binary": "./binary.js",
"lib0/broadcastchannel.js": "./broadcastchannel.js",
"lib0/dist/broadcastchannel.cjs": "./dist/broadcastchannel.cjs",
"lib0/broadcastchannel": "./broadcastchannel.js",
"lib0/buffer.js": "./buffer.js",
"lib0/dist/buffer.cjs": "./dist/buffer.cjs",
"lib0/buffer": "./buffer.js",
"lib0/cache.js": "./cache.js",
"lib0/dist/cache.cjs": "./dist/cache.cjs",
"lib0/cache": "./cache.js",
"lib0/component.js": "./component.js",
"lib0/dist/component.cjs": "./dist/component.cjs",
"lib0/component": "./component.js",
"lib0/conditions.js": "./conditions.js",
"lib0/dist/conditions.cjs": "./dist/conditions.cjs",
"lib0/conditions": "./condititons.js",
"lib0/crypto": "./crypto.js",
"lib0/decoding.js": "./decoding.js",
"lib0/dist/decoding.cjs": "./dist/decoding.cjs",
"lib0/decoding": "./decoding.js",
"lib0/diff.js": "./diff.js",
"lib0/dist/diff.cjs": "./dist/diff.cjs",
"lib0/diff": "./diff.js",
"lib0/dom.js": "./dom.js",
"lib0/dist/dom.cjs": "./dist/dom.cjs",
"lib0/dom": "./dom.js",
"lib0/encoding.js": "./encoding.js",
"lib0/dist/encoding.cjs": "./dist/encoding.cjs",
"lib0/encoding": "./encoding.js",
"lib0/environment.js": "./environment.js",
"lib0/dist/environment.cjs": "./dist/environment.cjs",
"lib0/environment": "./environment.js",
"lib0/error.js": "./error.js",
"lib0/dist/error.cjs": "./dist/error.cjs",
"lib0/error": "./error.js",
"lib0/eventloop.js": "./eventloop.js",
"lib0/dist/eventloop.cjs": "./dist/eventloop.cjs",
"lib0/eventloop": "./eventloop.js",
"lib0/function.js": "./function.js",
"lib0/dist/function.cjs": "./dist/function.cjs",
"lib0/function": "./function.js",
"lib0/indexeddb.js": "./indexeddb.js",
"lib0/dist/indexeddb.cjs": "./dist/indexeddb.cjs",
"lib0/indexeddb": "./indexeddb.js",
"lib0/isomorphic.js": "./isomorphic.js",
"lib0/dist/isomorphic.cjs": "./dist/isomorphic.cjs",
"lib0/isomorphic": "./isomorphic.js",
"lib0/iterator.js": "./iterator.js",
"lib0/dist/iterator.cjs": "./dist/iterator.cjs",
"lib0/iterator": "./iterator.js",
"lib0/json.js": "./json.js",
"lib0/dist/json.cjs": "./dist/json.cjs",
"lib0/json": "./json.js",
"lib0/list.js": "./list.js",
"lib0/dist/list.cjs": "./dist/list.cjs",
"lib0/list": "./list.js",
"lib0/logging.js": "./logging.js",
"lib0/dist/logging.cjs": "./dist/logging.cjs",
"lib0/logging": "./logging.js",
"lib0/map.js": "./map.js",
"lib0/dist/map.cjs": "./dist/map.cjs",
"lib0/map": "./map.js",
"lib0/math.js": "./math.js",
"lib0/dist/math.cjs": "./dist/math.cjs",
"lib0/math": "./math.js",
"lib0/metric.js": "./metric.js",
"lib0/dist/metric.cjs": "./dist/metric.cjs",
"lib0/metric": "./metric.js",
"lib0/mutex.js": "./mutex.js",
"lib0/dist/mutex.cjs": "./dist/mutex.cjs",
"lib0/mutex": "./mutex.js",
"lib0/number.js": "./number.js",
"lib0/dist/number.cjs": "./dist/number.cjs",
"lib0/number": "./number.js",
"lib0/object.js": "./object.js",
"lib0/dist/object.cjs": "./dist/object.cjs",
"lib0/object": "./object.js",
"lib0/observable.js": "./observable.js",
"lib0/dist/observable.cjs": "./dist/observable.cjs",
"lib0/observable": "./observable.js",
"lib0/pair.js": "./pair.js",
"lib0/dist/pair.cjs": "./dist/pair.cjs",
"lib0/pair": "./pair.js",
"lib0/prng.js": "./prng.js",
"lib0/dist/prng.cjs": "./dist/prng.cjs",
"lib0/prng": "./prng.js",
"lib0/promise.js": "./promise.js",
"lib0/dist/promise.cjs": "./dist/promise.cjs",
"lib0/promise": "./promise.js",
"lib0/queue.js": "./queue.js",
"lib0/dist/queue.cjs": "./dist/queue.cjs",
"lib0/queue": "./queue.js",
"lib0/random.js": "./random.js",
"lib0/dist/random.cjs": "./dist/random.cjs",
"lib0/random": "./random.js",
"lib0/set.js": "./set.js",
"lib0/dist/set.cjs": "./dist/set.cjs",
"lib0/set": "./set.js",
"lib0/sort.js": "./sort.js",
"lib0/dist/sort.cjs": "./dist/sort.cjs",
"lib0/sort": "./sort.js",
"lib0/statistics.js": "./statistics.js",
"lib0/dist/statistics.cjs": "./dist/statistics.cjs",
"lib0/statistics": "./statistics.js",
"lib0/storage.js": "./storage.js",
"lib0/dist/storage.cjs": "./dist/storage.cjs",
"lib0/storage": "./storage.js",
"lib0/string.js": "./string.js",
"lib0/dist/string.cjs": "./dist/string.cjs",
"lib0/string": "./string.js",
"lib0/symbol.js": "./symbol.js",
"lib0/dist/symbol.cjs": "./dist/symbol.cjs",
"lib0/symbol": "./symbol.js",
"lib0/testing.js": "./testing.js",
"lib0/dist/testing.cjs": "./dist/testing.cjs",
"lib0/testing": "./testing.js",
"lib0/time.js": "./time.js",
"lib0/dist/time.cjs": "./dist/time.cjs",
"lib0/time": "./time.js",
"lib0/tree.js": "./tree.js",
"lib0/dist/tree.cjs": "./dist/tree.cjs",
"lib0/tree": "./tree.js",
"lib0/url.js": "./url.js",
"lib0/dist/url.cjs": "./dist/url.cjs",
"lib0/url": "./url.js",
"lib0/websocket.js": "./websocket.js",
"lib0/dist/websocket.cjs": "./dist/websocket.cjs",
"lib0/websocket": "./websocket.js",
"lib0/webcrypto": "./webcrypto.browser.js",
"isomorphic.js": "./node_modules/isomorphic.js/browser.mjs",
"isomorphic.js/package.json": "./node_modules/isomorphic.js/package.json"
}
}
</script>
</head>
<body>
<script type="module" src="./test.js"></script>
</body>
</html>

0 comments on commit 1112341

Please sign in to comment.