@davidsouther/jiffies 2.2.4 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/lib/cjs/assert.d.ts +2 -2
- package/lib/cjs/awaitable.d.ts +1 -1
- package/lib/cjs/components/button_bar.d.ts +2 -2
- package/lib/cjs/components/inline_edit.d.ts +2 -2
- package/lib/cjs/components/logger.d.ts +1 -1
- package/lib/cjs/components/select.d.ts +4 -7
- package/lib/cjs/components/test.d.ts +1 -1
- package/lib/cjs/components/virtual_scroll.d.ts +6 -4
- package/lib/cjs/context.d.ts +5 -9
- package/lib/cjs/debounce.d.ts +1 -1
- package/lib/cjs/diff.d.ts +2 -2
- package/lib/cjs/display.d.ts +1 -1
- package/lib/cjs/dom/css/border.d.ts +2 -2
- package/lib/cjs/dom/css/constants.d.ts +3 -3
- package/lib/cjs/dom/css/core.d.ts +1 -1
- package/lib/cjs/dom/css/fstyle.d.ts +2 -2
- package/lib/cjs/dom/css/sizing.d.ts +2 -2
- package/lib/cjs/dom/dom.d.ts +8 -8
- package/lib/cjs/dom/fc.d.ts +8 -12
- package/lib/cjs/dom/form/form.d.ts +5 -6
- package/lib/cjs/dom/html.d.ts +112 -113
- package/lib/cjs/dom/observable.d.ts +1 -1
- package/lib/cjs/dom/provide.d.ts +1 -1
- package/lib/cjs/dom/router/router.d.ts +2 -2
- package/lib/cjs/dom/svg.d.ts +64 -64
- package/lib/cjs/dom/types/css.d.ts +10 -32
- package/lib/cjs/dom/types/html.d.ts +4 -6
- package/lib/cjs/equal.d.ts +8 -5
- package/lib/cjs/flags.d.ts +1 -1
- package/lib/cjs/fs.d.ts +3 -3
- package/lib/cjs/fs_node.d.ts +1 -1
- package/lib/cjs/lock.d.ts +1 -1
- package/lib/cjs/log.d.ts +9 -9
- package/lib/cjs/observable/event.d.ts +2 -2
- package/lib/cjs/observable/observable.d.ts +37 -35
- package/lib/cjs/result.d.ts +21 -21
- package/lib/cjs/safe.d.ts +1 -1
- package/lib/cjs/scope/describe.d.ts +4 -4
- package/lib/cjs/scope/display/console.d.ts +1 -1
- package/lib/cjs/scope/display/dom.d.ts +2 -2
- package/lib/cjs/scope/display/junit.d.ts +1 -1
- package/lib/cjs/scope/execute.d.ts +2 -2
- package/lib/cjs/scope/index.d.ts +3 -3
- package/lib/cjs/scope/scope.d.ts +3 -3
- package/lib/cjs/scope/state.d.ts +1 -1
- package/lib/cjs/server/http/apps.d.ts +1 -1
- package/lib/cjs/server/http/css.d.ts +1 -1
- package/lib/cjs/server/http/index.d.ts +4 -9
- package/lib/cjs/server/http/response.d.ts +3 -3
- package/lib/cjs/server/http/sitemap.d.ts +1 -1
- package/lib/cjs/server/http/static.d.ts +1 -1
- package/lib/cjs/server/http/typescript.d.ts +1 -1
- package/lib/cjs/test_all.d.ts +9 -9
- package/lib/cjs/tsconfig.tsbuildinfo +1 -1
- package/lib/esm/assert.d.ts +2 -2
- package/lib/esm/awaitable.d.ts +1 -1
- package/lib/esm/components/button_bar.d.ts +2 -2
- package/lib/esm/components/inline_edit.d.ts +2 -2
- package/lib/esm/components/logger.d.ts +1 -1
- package/lib/esm/components/select.d.ts +3 -3
- package/lib/esm/components/test.d.ts +1 -1
- package/lib/esm/components/virtual_scroll.d.ts +6 -4
- package/lib/esm/context.d.ts +5 -9
- package/lib/esm/debounce.d.ts +1 -2
- package/lib/esm/diff.d.ts +2 -2
- package/lib/esm/display.d.ts +1 -1
- package/lib/esm/dom/css/border.d.ts +2 -2
- package/lib/esm/dom/css/constants.d.ts +3 -3
- package/lib/esm/dom/css/core.d.ts +1 -1
- package/lib/esm/dom/css/fstyle.d.ts +2 -2
- package/lib/esm/dom/css/sizing.d.ts +2 -2
- package/lib/esm/dom/dom.d.ts +8 -8
- package/lib/esm/dom/fc.d.ts +8 -12
- package/lib/esm/dom/form/form.d.ts +5 -6
- package/lib/esm/dom/html.d.ts +112 -113
- package/lib/esm/dom/observable.d.ts +1 -1
- package/lib/esm/dom/provide.d.ts +1 -1
- package/lib/esm/dom/router/router.d.ts +2 -2
- package/lib/esm/dom/svg.d.ts +64 -64
- package/lib/esm/dom/types/css.d.ts +10 -32
- package/lib/esm/dom/types/html.d.ts +4 -6
- package/lib/esm/equal.d.ts +8 -5
- package/lib/esm/flags.d.ts +1 -1
- package/lib/esm/fs.d.ts +3 -3
- package/lib/esm/fs_node.d.ts +1 -1
- package/lib/esm/lock.d.ts +1 -1
- package/lib/esm/log.d.ts +9 -9
- package/lib/esm/observable/event.d.ts +2 -2
- package/lib/esm/observable/observable.d.ts +37 -35
- package/lib/esm/result.d.ts +21 -21
- package/lib/esm/safe.d.ts +1 -1
- package/lib/esm/scope/describe.d.ts +4 -4
- package/lib/esm/scope/display/console.d.ts +1 -1
- package/lib/esm/scope/display/dom.d.ts +2 -2
- package/lib/esm/scope/display/junit.d.ts +1 -1
- package/lib/esm/scope/execute.d.ts +2 -2
- package/lib/esm/scope/index.d.ts +3 -3
- package/lib/esm/scope/scope.d.ts +3 -3
- package/lib/esm/scope/state.d.ts +1 -1
- package/lib/esm/server/http/apps.d.ts +1 -1
- package/lib/esm/server/http/css.d.ts +1 -1
- package/lib/esm/server/http/index.d.ts +4 -9
- package/lib/esm/server/http/response.d.ts +3 -3
- package/lib/esm/server/http/sitemap.d.ts +1 -1
- package/lib/esm/server/http/static.d.ts +1 -1
- package/lib/esm/server/http/typescript.d.ts +1 -1
- package/lib/esm/test_all.d.ts +9 -9
- package/lib/esm/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -9
- package/src/assert.ts +5 -5
- package/src/components/button_bar.ts +28 -30
- package/src/components/inline_edit.ts +8 -7
- package/src/components/logger.ts +6 -6
- package/src/components/select.ts +7 -7
- package/src/components/test.ts +5 -0
- package/src/components/virtual_scroll.test.ts +9 -6
- package/src/components/virtual_scroll.ts +29 -24
- package/src/context.test.ts +4 -4
- package/src/context.ts +16 -11
- package/src/debounce.ts +9 -3
- package/src/diff.test.ts +4 -4
- package/src/diff.ts +14 -16
- package/src/dom/css/border.ts +11 -11
- package/src/dom/css/core.ts +1 -1
- package/src/dom/css/fstyle.ts +4 -4
- package/src/dom/css/sizing.ts +1 -1
- package/src/dom/dom.ts +57 -47
- package/src/dom/fc.test.ts +8 -8
- package/src/dom/fc.ts +32 -35
- package/src/dom/form/form.app.ts +9 -9
- package/src/dom/form/form.ts +25 -16
- package/src/dom/form/index.html +3 -2
- package/src/dom/html.test.ts +12 -10
- package/src/dom/html.ts +2 -3
- package/src/dom/observable.test.ts +6 -6
- package/src/dom/observable.ts +2 -2
- package/src/dom/provide.ts +1 -1
- package/src/dom/router/link.ts +3 -3
- package/src/dom/router/router.ts +5 -5
- package/src/dom/svg.ts +7 -6
- package/src/dom/test.ts +3 -0
- package/src/dom/types/css.ts +43 -61
- package/src/dom/types/html.ts +2 -4
- package/src/dom/xml.ts +2 -2
- package/src/equal.test.ts +3 -3
- package/src/equal.ts +27 -14
- package/src/flags.test.ts +2 -2
- package/src/flags.ts +2 -2
- package/src/fs.test.ts +5 -5
- package/src/fs.ts +26 -20
- package/src/fs_node.ts +4 -4
- package/src/fs_win.test.ts +1 -1
- package/src/generator.test.ts +4 -3
- package/src/generator.ts +1 -1
- package/src/hooks/_notes +4 -1
- package/src/index.html +7 -7
- package/src/lock.test.ts +4 -4
- package/src/lock.ts +8 -7
- package/src/log.ts +28 -18
- package/src/observable/event.ts +7 -7
- package/src/observable/observable.test.ts +3 -3
- package/src/observable/observable.ts +71 -52
- package/src/result.test.ts +7 -10
- package/src/result.ts +51 -47
- package/src/safe.ts +1 -1
- package/src/scope/describe.ts +12 -11
- package/src/scope/display/console.ts +4 -4
- package/src/scope/display/dom.ts +9 -9
- package/src/scope/display/junit.ts +21 -24
- package/src/scope/execute.ts +17 -12
- package/src/scope/expect.ts +22 -22
- package/src/scope/fix.ts +10 -7
- package/src/scope/index.ts +3 -3
- package/src/scope/scope.ts +2 -2
- package/src/scope/state.ts +2 -2
- package/src/server/http/apps.ts +5 -5
- package/src/server/http/css.ts +10 -26
- package/src/server/http/index.ts +30 -24
- package/src/server/http/response.ts +12 -5
- package/src/server/http/sitemap.ts +8 -8
- package/src/server/http/static.ts +9 -6
- package/src/server/http/typescript.ts +25 -25
- package/src/server/main.ts +7 -4
- package/src/test.mjs +8 -8
- package/src/test_all.ts +16 -13
- package/src/transpile.mjs +6 -18
- package/build/pico.css +0 -2466
- package/build/pico.css.map +0 -1
- package/lib/cjs/assert.js +0 -46
- package/lib/cjs/awaitable.js +0 -2
- package/lib/cjs/case.js +0 -9
- package/lib/cjs/components/button_bar.js +0 -29
- package/lib/cjs/components/inline_edit.js +0 -51
- package/lib/cjs/components/logger.js +0 -27
- package/lib/cjs/components/select.js +0 -6
- package/lib/cjs/components/test.js +0 -7
- package/lib/cjs/components/virtual_scroll.js +0 -102
- package/lib/cjs/components/virtual_scroll.test.js +0 -22
- package/lib/cjs/context.js +0 -48
- package/lib/cjs/context.test.js +0 -48
- package/lib/cjs/debounce.js +0 -12
- package/lib/cjs/diff.js +0 -58
- package/lib/cjs/diff.test.js +0 -41
- package/lib/cjs/display.js +0 -16
- package/lib/cjs/dom/css/border.js +0 -33
- package/lib/cjs/dom/css/constants.js +0 -31
- package/lib/cjs/dom/css/core.js +0 -31
- package/lib/cjs/dom/css/fstyle.js +0 -36
- package/lib/cjs/dom/css/sizing.js +0 -14
- package/lib/cjs/dom/dom.js +0 -110
- package/lib/cjs/dom/fc.js +0 -39
- package/lib/cjs/dom/fc.test.js +0 -23
- package/lib/cjs/dom/form/form.app.js +0 -27
- package/lib/cjs/dom/form/form.js +0 -49
- package/lib/cjs/dom/form/form.test.js +0 -1
- package/lib/cjs/dom/html.js +0 -119
- package/lib/cjs/dom/html.test.js +0 -60
- package/lib/cjs/dom/observable.js +0 -10
- package/lib/cjs/dom/observable.test.js +0 -35
- package/lib/cjs/dom/provide.js +0 -12
- package/lib/cjs/dom/router/link.js +0 -7
- package/lib/cjs/dom/router/router.js +0 -55
- package/lib/cjs/dom/svg.js +0 -69
- package/lib/cjs/dom/test.js +0 -13
- package/lib/cjs/dom/types/css.js +0 -24
- package/lib/cjs/dom/types/dom.js +0 -1
- package/lib/cjs/dom/types/html.js +0 -2
- package/lib/cjs/dom/xml.js +0 -8
- package/lib/cjs/equal.js +0 -48
- package/lib/cjs/equal.test.js +0 -22
- package/lib/cjs/flags.js +0 -52
- package/lib/cjs/flags.test.js +0 -37
- package/lib/cjs/fs.js +0 -235
- package/lib/cjs/fs.test.js +0 -86
- package/lib/cjs/fs_node.js +0 -50
- package/lib/cjs/fs_win.test.js +0 -10
- package/lib/cjs/generator.js +0 -14
- package/lib/cjs/generator.test.js +0 -26
- package/lib/cjs/is_browser.js +0 -4
- package/lib/cjs/loader-register.d.mts +0 -1
- package/lib/cjs/loader-register.d.ts +0 -1
- package/lib/cjs/loader-register.js +0 -4
- package/lib/cjs/loader-register.mjs +0 -4
- package/lib/cjs/loader.d.mts +0 -23
- package/lib/cjs/loader.mjs +0 -41
- package/lib/cjs/lock.js +0 -27
- package/lib/cjs/lock.test.js +0 -18
- package/lib/cjs/log.js +0 -98
- package/lib/cjs/observable/event.js +0 -61
- package/lib/cjs/observable/observable.js +0 -363
- package/lib/cjs/observable/observable.test.js +0 -65
- package/lib/cjs/package.json +0 -1
- package/lib/cjs/range.js +0 -11
- package/lib/cjs/result.js +0 -80
- package/lib/cjs/result.test.js +0 -78
- package/lib/cjs/safe.js +0 -14
- package/lib/cjs/scope/describe.js +0 -73
- package/lib/cjs/scope/display/console.js +0 -25
- package/lib/cjs/scope/display/dom.js +0 -30
- package/lib/cjs/scope/display/junit.js +0 -21
- package/lib/cjs/scope/execute.js +0 -91
- package/lib/cjs/scope/expect.js +0 -110
- package/lib/cjs/scope/fix.js +0 -26
- package/lib/cjs/scope/index.js +0 -15
- package/lib/cjs/scope/scope.js +0 -2
- package/lib/cjs/scope/state.js +0 -12
- package/lib/cjs/server/http/apps.js +0 -27
- package/lib/cjs/server/http/css.js +0 -54
- package/lib/cjs/server/http/index.js +0 -77
- package/lib/cjs/server/http/response.js +0 -45
- package/lib/cjs/server/http/sitemap.js +0 -46
- package/lib/cjs/server/http/static.js +0 -25
- package/lib/cjs/server/http/typescript.js +0 -44
- package/lib/cjs/server/main.js +0 -14
- package/lib/cjs/test.mjs +0 -28
- package/lib/cjs/test_all.js +0 -30
- package/lib/cjs/transpile.mjs +0 -22
- package/lib/esm/assert.js +0 -38
- package/lib/esm/awaitable.js +0 -1
- package/lib/esm/case.js +0 -5
- package/lib/esm/components/button_bar.js +0 -27
- package/lib/esm/components/inline_edit.js +0 -48
- package/lib/esm/components/logger.js +0 -22
- package/lib/esm/components/select.js +0 -3
- package/lib/esm/components/test.js +0 -3
- package/lib/esm/components/virtual_scroll.js +0 -94
- package/lib/esm/components/virtual_scroll.test.js +0 -20
- package/lib/esm/context.js +0 -43
- package/lib/esm/context.test.js +0 -46
- package/lib/esm/debounce.js +0 -8
- package/lib/esm/diff.js +0 -54
- package/lib/esm/diff.test.js +0 -39
- package/lib/esm/display.js +0 -11
- package/lib/esm/dom/css/border.js +0 -27
- package/lib/esm/dom/css/constants.js +0 -28
- package/lib/esm/dom/css/core.js +0 -24
- package/lib/esm/dom/css/fstyle.js +0 -32
- package/lib/esm/dom/css/sizing.js +0 -10
- package/lib/esm/dom/dom.js +0 -104
- package/lib/esm/dom/fc.js +0 -35
- package/lib/esm/dom/fc.test.js +0 -21
- package/lib/esm/dom/form/form.app.js +0 -23
- package/lib/esm/dom/form/form.js +0 -34
- package/lib/esm/dom/form/form.test.js +0 -1
- package/lib/esm/dom/html.js +0 -114
- package/lib/esm/dom/html.test.js +0 -58
- package/lib/esm/dom/observable.js +0 -6
- package/lib/esm/dom/observable.test.js +0 -33
- package/lib/esm/dom/provide.js +0 -7
- package/lib/esm/dom/router/link.js +0 -3
- package/lib/esm/dom/router/router.js +0 -52
- package/lib/esm/dom/svg.js +0 -65
- package/lib/esm/dom/test.js +0 -9
- package/lib/esm/dom/types/css.js +0 -23
- package/lib/esm/dom/types/dom.js +0 -1
- package/lib/esm/dom/types/html.js +0 -1
- package/lib/esm/dom/xml.js +0 -4
- package/lib/esm/equal.js +0 -41
- package/lib/esm/equal.test.js +0 -20
- package/lib/esm/flags.js +0 -48
- package/lib/esm/flags.test.js +0 -35
- package/lib/esm/fs.js +0 -226
- package/lib/esm/fs.test.js +0 -84
- package/lib/esm/fs_node.js +0 -45
- package/lib/esm/fs_win.test.js +0 -8
- package/lib/esm/generator.js +0 -10
- package/lib/esm/generator.test.js +0 -24
- package/lib/esm/is_browser.js +0 -1
- package/lib/esm/loader-register.d.mts +0 -1
- package/lib/esm/loader-register.mjs +0 -2
- package/lib/esm/loader.d.mts +0 -23
- package/lib/esm/loader.mjs +0 -36
- package/lib/esm/lock.js +0 -23
- package/lib/esm/lock.test.js +0 -16
- package/lib/esm/log.js +0 -88
- package/lib/esm/observable/event.js +0 -46
- package/lib/esm/observable/observable.js +0 -343
- package/lib/esm/observable/observable.test.js +0 -63
- package/lib/esm/range.js +0 -7
- package/lib/esm/result.js +0 -65
- package/lib/esm/result.test.js +0 -76
- package/lib/esm/safe.js +0 -10
- package/lib/esm/scope/describe.js +0 -60
- package/lib/esm/scope/display/console.js +0 -21
- package/lib/esm/scope/display/dom.js +0 -26
- package/lib/esm/scope/display/junit.js +0 -17
- package/lib/esm/scope/execute.js +0 -85
- package/lib/esm/scope/expect.js +0 -104
- package/lib/esm/scope/fix.js +0 -22
- package/lib/esm/scope/index.js +0 -3
- package/lib/esm/scope/scope.js +0 -1
- package/lib/esm/scope/state.js +0 -8
- package/lib/esm/server/http/apps.js +0 -23
- package/lib/esm/server/http/css.js +0 -50
- package/lib/esm/server/http/index.js +0 -73
- package/lib/esm/server/http/response.js +0 -40
- package/lib/esm/server/http/sitemap.js +0 -42
- package/lib/esm/server/http/static.js +0 -21
- package/lib/esm/server/http/typescript.js +0 -40
- package/lib/esm/server/main.js +0 -12
- package/lib/esm/test.mjs +0 -26
- package/lib/esm/test_all.js +0 -28
- package/lib/esm/transpile.mjs +0 -18
- package/src/components/test.js +0 -3
- package/src/loader-register.mjs +0 -3
- package/src/loader.mjs +0 -46
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.findIndex = void 0;
|
|
4
|
-
const fs = require("fs/promises");
|
|
5
|
-
const path = require("path");
|
|
6
|
-
const response_js_1 = require("./response.js");
|
|
7
|
-
/**
|
|
8
|
-
* Searches up the request path until the first index is found.
|
|
9
|
-
*/
|
|
10
|
-
const findIndex = async ({ root }) => async (req) => {
|
|
11
|
-
let filename = path.join(root, req.url ?? "");
|
|
12
|
-
if (path.basename(filename).match(/\.[a-z]{1,3}$/)) {
|
|
13
|
-
return undefined;
|
|
14
|
-
}
|
|
15
|
-
while (filename.startsWith(root)) {
|
|
16
|
-
const index = path.join(filename, "index.html");
|
|
17
|
-
try {
|
|
18
|
-
const stat = await fs.stat(index);
|
|
19
|
-
return (0, response_js_1.fileResponse)(index, stat);
|
|
20
|
-
}
|
|
21
|
-
catch (e) {
|
|
22
|
-
filename = path.dirname(filename);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return undefined;
|
|
26
|
-
};
|
|
27
|
-
exports.findIndex = findIndex;
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.cssFileServer = void 0;
|
|
4
|
-
const fs = require("fs/promises");
|
|
5
|
-
const path = require("path");
|
|
6
|
-
const response_js_1 = require("./response.js");
|
|
7
|
-
// @ts-ignore
|
|
8
|
-
const sass_1 = require("sass");
|
|
9
|
-
const { compileStringAsync } = sass_1.default;
|
|
10
|
-
function render(source) {
|
|
11
|
-
// Replace `from "@scope` with `from "/@scope`, for browsers
|
|
12
|
-
// source = source
|
|
13
|
-
// .replaceAll(`from "@`, 'from "/@')
|
|
14
|
-
// .replaceAll(`import("@`, 'import("/@');
|
|
15
|
-
return (0, response_js_1.contentResponse)(source, "text/css");
|
|
16
|
-
}
|
|
17
|
-
async function compile(filename, root, vars) {
|
|
18
|
-
vars = vars.substring(1).replaceAll("=", ":");
|
|
19
|
-
filename = filename.replaceAll("\\", "/"); // Normalize for dart-sass
|
|
20
|
-
const sassString = `// Using variables: ${vars}\n${vars};\n@import "${filename}";`;
|
|
21
|
-
return (await compileStringAsync(sassString, { loadPaths: [root] })).css;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Serves .css files statically. Finds .sass files and transpiles them to css.
|
|
25
|
-
*/
|
|
26
|
-
const cssFileServer = async ({ root, scopes = {} }) => async (req) => {
|
|
27
|
-
const Url = new URL(req.url ?? "/", `http://${req.headers.host}`);
|
|
28
|
-
if (Url.pathname.endsWith(".css")) {
|
|
29
|
-
let scope = Object.entries(scopes).find(([s]) => Url.pathname.startsWith(`/${s}`));
|
|
30
|
-
// Expand url with found scope
|
|
31
|
-
Url.protocol = "file";
|
|
32
|
-
let url = scope ? Url.pathname.replace(scope[0], scope[1]) : Url.pathname;
|
|
33
|
-
let filename = path.join(root, url);
|
|
34
|
-
try {
|
|
35
|
-
const stat = await fs.stat(filename);
|
|
36
|
-
if (stat.isFile()) {
|
|
37
|
-
const css = (await fs.readFile(filename)).toString("utf-8");
|
|
38
|
-
return render(css);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
catch { }
|
|
42
|
-
filename = filename.replace(/\.css$/, ".scss");
|
|
43
|
-
try {
|
|
44
|
-
const stat = await fs.stat(filename);
|
|
45
|
-
if (stat.isFile()) {
|
|
46
|
-
const css = await compile(filename.replace(root, "."), root, Url.search);
|
|
47
|
-
return render(css);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
catch { }
|
|
51
|
-
}
|
|
52
|
-
return undefined;
|
|
53
|
-
};
|
|
54
|
-
exports.cssFileServer = cssFileServer;
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.makeServer = void 0;
|
|
5
|
-
const http_1 = require("http");
|
|
6
|
-
const path = require("path");
|
|
7
|
-
const log_js_1 = require("../../log.js");
|
|
8
|
-
const apps_js_1 = require("./apps.js");
|
|
9
|
-
const css_js_1 = require("./css.js");
|
|
10
|
-
const response_js_1 = require("./response.js");
|
|
11
|
-
const sitemap_js_1 = require("./sitemap.js");
|
|
12
|
-
const static_js_1 = require("./static.js");
|
|
13
|
-
const typescript_js_1 = require("./typescript.js");
|
|
14
|
-
const notFound = async ({ root }) => async () => (0, response_js_1.fileResponse)(
|
|
15
|
-
// path.join(path.dirname(FLAGS.argv0), "404.html"),
|
|
16
|
-
path.join(root, "404.html"), undefined, 404);
|
|
17
|
-
const BASE_MIDDLEWARES = [
|
|
18
|
-
sitemap_js_1.sitemap,
|
|
19
|
-
typescript_js_1.tsFileServer,
|
|
20
|
-
css_js_1.cssFileServer,
|
|
21
|
-
static_js_1.staticFileServer,
|
|
22
|
-
apps_js_1.findIndex,
|
|
23
|
-
notFound,
|
|
24
|
-
];
|
|
25
|
-
const error = (res, message) => {
|
|
26
|
-
console.error(message);
|
|
27
|
-
res.statusCode = 500;
|
|
28
|
-
res.write(message);
|
|
29
|
-
res.end();
|
|
30
|
-
return true;
|
|
31
|
-
};
|
|
32
|
-
const sendContent = async (res, { content, contentType, contentLength }) => {
|
|
33
|
-
res.setHeader("Content-Length", `${contentLength}`);
|
|
34
|
-
res.setHeader("Content-Type", contentType);
|
|
35
|
-
await res.write(content);
|
|
36
|
-
res.end();
|
|
37
|
-
return true;
|
|
38
|
-
};
|
|
39
|
-
const log = (req) => {
|
|
40
|
-
const when = new Date().toISOString();
|
|
41
|
-
const who = req.socket.remoteAddress;
|
|
42
|
-
const what = req.url;
|
|
43
|
-
const how = `${req.method} ${what}`;
|
|
44
|
-
(0, log_js_1.info)("Request", { when, who, how });
|
|
45
|
-
};
|
|
46
|
-
const makeServer = async (config, middlewares = []) => {
|
|
47
|
-
const handlers = await Promise.all([...middlewares, ...BASE_MIDDLEWARES].map(async (m) => m(config)));
|
|
48
|
-
const middlewareHandler = async (req, res) => {
|
|
49
|
-
log(req);
|
|
50
|
-
let handler;
|
|
51
|
-
try {
|
|
52
|
-
for (const middleware of handlers) {
|
|
53
|
-
handler = await middleware(req);
|
|
54
|
-
if (handler !== undefined) {
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
if (handler) {
|
|
59
|
-
sendContent(res, await handler());
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
res.end();
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
catch (e) {
|
|
66
|
-
error(res, e.message + "\n" + e.stack);
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
// TODO(https)
|
|
70
|
-
const server = (0, http_1.createServer)(middlewareHandler);
|
|
71
|
-
server.on("listening", () => {
|
|
72
|
-
const { address, port } = server.address();
|
|
73
|
-
(0, log_js_1.info)("Server listening", { address: `http://${address}:${port}` });
|
|
74
|
-
});
|
|
75
|
-
return server;
|
|
76
|
-
};
|
|
77
|
-
exports.makeServer = makeServer;
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.contentResponse = exports.fileResponse = void 0;
|
|
4
|
-
const fs = require("fs/promises");
|
|
5
|
-
const MIME_TYPES = {
|
|
6
|
-
js: "text/javascript",
|
|
7
|
-
json: "text/javascript",
|
|
8
|
-
css: "text/css",
|
|
9
|
-
html: "text/html",
|
|
10
|
-
png: "image/png",
|
|
11
|
-
jpg: "image/jpeg",
|
|
12
|
-
jpeg: "image/jpeg",
|
|
13
|
-
svg: "image/svg+xml",
|
|
14
|
-
eot: "application/vnd.ms-fontobject",
|
|
15
|
-
ttf: "application/font-ttf",
|
|
16
|
-
woff: "application/font-woff",
|
|
17
|
-
woff2: "application/font-woff2",
|
|
18
|
-
};
|
|
19
|
-
const mime = (basename) => {
|
|
20
|
-
const extension = basename
|
|
21
|
-
.substring(basename.lastIndexOf(".") + 1)
|
|
22
|
-
.toLowerCase();
|
|
23
|
-
return MIME_TYPES[extension] ?? "application/octet-stream";
|
|
24
|
-
};
|
|
25
|
-
const fileResponse = (filename, stat, status = 200) => async () => {
|
|
26
|
-
if (!stat) {
|
|
27
|
-
stat = await fs.stat(filename);
|
|
28
|
-
}
|
|
29
|
-
const content = await fs.readFile(filename);
|
|
30
|
-
const contentType = mime(filename);
|
|
31
|
-
const contentLength = stat.size;
|
|
32
|
-
return { status, contentType, contentLength, content };
|
|
33
|
-
};
|
|
34
|
-
exports.fileResponse = fileResponse;
|
|
35
|
-
const CHARSET = "utf-8";
|
|
36
|
-
const contentResponse = (content, contentType, status = 200) => async () => {
|
|
37
|
-
const contentBuffer = Buffer.from(content, CHARSET);
|
|
38
|
-
return {
|
|
39
|
-
content: contentBuffer,
|
|
40
|
-
contentType: contentType.split(";")[0] + "; charset=" + CHARSET,
|
|
41
|
-
status,
|
|
42
|
-
contentLength: contentBuffer.length,
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
exports.contentResponse = contentResponse;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sitemap = void 0;
|
|
4
|
-
const fs = require("fs/promises");
|
|
5
|
-
const path = require("path");
|
|
6
|
-
const log_js_1 = require("../../log.js");
|
|
7
|
-
const response_js_1 = require("./response.js");
|
|
8
|
-
const findSiteMap = async (root, prefix = root) => {
|
|
9
|
-
if (root.startsWith("node_modules")) {
|
|
10
|
-
return [];
|
|
11
|
-
}
|
|
12
|
-
const children = (await fs.readdir(root, { withFileTypes: true })).map(async (entry) => {
|
|
13
|
-
const next = path
|
|
14
|
-
.join(root, entry.name)
|
|
15
|
-
// Normalize separators for web
|
|
16
|
-
.replaceAll(path.sep, "/");
|
|
17
|
-
if (entry.isFile()) {
|
|
18
|
-
if (entry.name === "index.html") {
|
|
19
|
-
let index = next.replace(prefix, "");
|
|
20
|
-
(0, log_js_1.info)(`Adding to sitemap`, { index });
|
|
21
|
-
return [index];
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
else if (entry.isDirectory()) {
|
|
25
|
-
if (entry.name.startsWith(".")) {
|
|
26
|
-
return [];
|
|
27
|
-
}
|
|
28
|
-
const flattened = (await Promise.all(await findSiteMap(next, prefix))).flat();
|
|
29
|
-
return flattened;
|
|
30
|
-
}
|
|
31
|
-
return [];
|
|
32
|
-
});
|
|
33
|
-
return children;
|
|
34
|
-
};
|
|
35
|
-
const sitemap = async ({ root }) => {
|
|
36
|
-
const apps = await (await Promise.all(await findSiteMap(root)))
|
|
37
|
-
.flat()
|
|
38
|
-
.filter((a) => a !== undefined);
|
|
39
|
-
return async (req) => {
|
|
40
|
-
if ((req.url ?? "").endsWith("sitemap.json")) {
|
|
41
|
-
return (0, response_js_1.contentResponse)(JSON.stringify(apps), "application/json");
|
|
42
|
-
}
|
|
43
|
-
return undefined;
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
exports.sitemap = sitemap;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.staticFileServer = void 0;
|
|
4
|
-
const path = require("path");
|
|
5
|
-
const fs = require("fs/promises");
|
|
6
|
-
const response_js_1 = require("./response.js");
|
|
7
|
-
const staticFileServer = async ({ root, scopes = {} }) => async (req) => {
|
|
8
|
-
const scope = Object.entries(scopes).find(([s]) => req.url?.startsWith(`/${s}`));
|
|
9
|
-
const url = new URL(req.url ?? "", `http://localhost`);
|
|
10
|
-
const pathname = scope
|
|
11
|
-
? url.pathname.replace(scope[0], scope[1])
|
|
12
|
-
: url.pathname;
|
|
13
|
-
const filename = path.join(root, pathname);
|
|
14
|
-
// Expand url with found scope
|
|
15
|
-
console.log(scope, req.url, filename);
|
|
16
|
-
try {
|
|
17
|
-
const stat = await fs.stat(filename);
|
|
18
|
-
return stat.isDirectory() ? undefined : (0, response_js_1.fileResponse)(filename, stat);
|
|
19
|
-
}
|
|
20
|
-
catch (e) {
|
|
21
|
-
console.error(e);
|
|
22
|
-
return undefined;
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
exports.staticFileServer = staticFileServer;
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.tsFileServer = void 0;
|
|
4
|
-
const fs = require("fs/promises");
|
|
5
|
-
const path = require("path");
|
|
6
|
-
const response_js_1 = require("./response.js");
|
|
7
|
-
const transpile_mjs_1 = require("../../transpile.mjs");
|
|
8
|
-
function render(source) {
|
|
9
|
-
// Replace `from "@scope` with `from "/@scope`, for browsers
|
|
10
|
-
source = source
|
|
11
|
-
.replaceAll(`from "@`, 'from "/@')
|
|
12
|
-
.replaceAll(`import("@`, 'import("/@');
|
|
13
|
-
return (0, response_js_1.contentResponse)(source, "application/javascript");
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Serves .js files statically. Finds .ts files and transpiles them to JS.
|
|
17
|
-
*/
|
|
18
|
-
const tsFileServer = async ({ root, scopes = {} }) => async (req) => {
|
|
19
|
-
if (req.url?.endsWith(".js")) {
|
|
20
|
-
let scope = Object.entries(scopes).find(([s]) => req.url?.startsWith(`/${s}`));
|
|
21
|
-
// Expand url with found scope
|
|
22
|
-
let url = scope ? req.url.replace(scope[0], scope[1]) : req.url;
|
|
23
|
-
let filename = path.join(root, url);
|
|
24
|
-
try {
|
|
25
|
-
const stat = await fs.stat(filename);
|
|
26
|
-
if (stat.isFile()) {
|
|
27
|
-
const js = (await fs.readFile(filename)).toString("utf-8");
|
|
28
|
-
return render(js);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
catch { }
|
|
32
|
-
filename = filename.replace(/\.js$/, ".ts");
|
|
33
|
-
try {
|
|
34
|
-
const stat = await fs.stat(filename);
|
|
35
|
-
if (stat.isFile()) {
|
|
36
|
-
const js = await (0, transpile_mjs_1.transpile)(filename, () => fs.readFile(filename));
|
|
37
|
-
return render(js);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
catch { }
|
|
41
|
-
}
|
|
42
|
-
return undefined;
|
|
43
|
-
};
|
|
44
|
-
exports.tsFileServer = tsFileServer;
|
package/lib/cjs/server/main.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node --experimental-loader ../loader.mjs
|
|
2
|
-
"use strict";
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
const log_js_1 = require("../log.js");
|
|
5
|
-
(0, log_js_1.info)("Starting server", { cwd: process.cwd() });
|
|
6
|
-
const flags_js_1 = require("../flags.js");
|
|
7
|
-
const FLAGS = (0, flags_js_1.parse)(process.argv);
|
|
8
|
-
const index_js_1 = require("./http/index.js");
|
|
9
|
-
const path = require("node:path");
|
|
10
|
-
async function main() {
|
|
11
|
-
const server = await (0, index_js_1.makeServer)({ root: path.join(process.cwd(), "src") });
|
|
12
|
-
server.listen(FLAGS.asNumber("port", 8080), FLAGS.asString("host", "0.0.0.0"));
|
|
13
|
-
}
|
|
14
|
-
main();
|
package/lib/cjs/test.mjs
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
const flags_js_1 = require("./flags.js");
|
|
5
|
-
const execute_js_1 = require("./scope/execute.js");
|
|
6
|
-
const junit_js_1 = require("./scope/display/junit.js");
|
|
7
|
-
const console_js_1 = require("./scope/display/console.js");
|
|
8
|
-
async function main() {
|
|
9
|
-
await Promise.resolve().then(() => require("./test_all.js"));
|
|
10
|
-
(async function () {
|
|
11
|
-
const results = await (0, execute_js_1.execute)();
|
|
12
|
-
const FLAGS = (0, flags_js_1.parse)(process.argv);
|
|
13
|
-
switch (FLAGS.asString("mode", "console")) {
|
|
14
|
-
case "junit":
|
|
15
|
-
const xml = (0, junit_js_1.asXML)(results);
|
|
16
|
-
console.log(xml);
|
|
17
|
-
break;
|
|
18
|
-
case "console":
|
|
19
|
-
default:
|
|
20
|
-
(0, console_js_1.onConsole)(results);
|
|
21
|
-
break;
|
|
22
|
-
}
|
|
23
|
-
if (results.failed > 0) {
|
|
24
|
-
process.exit(1);
|
|
25
|
-
}
|
|
26
|
-
})();
|
|
27
|
-
}
|
|
28
|
-
main();
|
package/lib/cjs/test_all.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
// This file must be .js for imports to run. Unused imports in .ts files are
|
|
4
|
-
// discarded during transpilation.
|
|
5
|
-
const index_js_1 = require("./scope/index.js");
|
|
6
|
-
(0, index_js_1.describe)("Test executor", () => {
|
|
7
|
-
(0, index_js_1.it)("matches equality", () => {
|
|
8
|
-
(0, index_js_1.expect)(1).toBe(1);
|
|
9
|
-
});
|
|
10
|
-
(0, index_js_1.it)("fails on inequality", () => {
|
|
11
|
-
(0, index_js_1.expect)(() => (0, index_js_1.expect)(1).toBe(2)).toThrow();
|
|
12
|
-
});
|
|
13
|
-
});
|
|
14
|
-
require("./context.test.js");
|
|
15
|
-
require("./diff.test.js");
|
|
16
|
-
require("./equal.test.js");
|
|
17
|
-
require("./flags.test.js");
|
|
18
|
-
require("./fs.test.js");
|
|
19
|
-
require("./generator.test.js");
|
|
20
|
-
require("./lock.test.js");
|
|
21
|
-
require("./result.test.js");
|
|
22
|
-
require("./observable/observable.test.js");
|
|
23
|
-
if (typeof process != "undefined" && process.env.CI?.toLowerCase() !== "true") {
|
|
24
|
-
(async () => {
|
|
25
|
-
const components = await Promise.resolve().then(() => require("./components/test.js"));
|
|
26
|
-
const dom = await Promise.resolve().then(() => require("./dom/test.js"));
|
|
27
|
-
await components.loadTests();
|
|
28
|
-
await dom.loadTests();
|
|
29
|
-
})();
|
|
30
|
-
}
|
package/lib/cjs/transpile.mjs
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.transpile = void 0;
|
|
4
|
-
// @ts-ignore
|
|
5
|
-
const typescript_1 = require("typescript");
|
|
6
|
-
const compilerOptions = {
|
|
7
|
-
target: typescript_1.default.ScriptTarget.ESNext,
|
|
8
|
-
module: typescript_1.default.ModuleKind.ESNext,
|
|
9
|
-
inlineSourceMap: true,
|
|
10
|
-
inlineSources: true,
|
|
11
|
-
};
|
|
12
|
-
const tsmap = new Map();
|
|
13
|
-
async function transpile(
|
|
14
|
-
/** @type string */ url,
|
|
15
|
-
/** @type {() => Promise<{toString(): string}>} */ get) {
|
|
16
|
-
if (!tsmap.has(url)) {
|
|
17
|
-
const source = typescript_1.default.transpile((await get()).toString(), compilerOptions, url, undefined, url);
|
|
18
|
-
tsmap.set(url, source);
|
|
19
|
-
}
|
|
20
|
-
return tsmap.get(url);
|
|
21
|
-
}
|
|
22
|
-
exports.transpile = transpile;
|
package/lib/esm/assert.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
export class AssertionError extends Error {
|
|
2
|
-
constructor(message = "Assertion failed") {
|
|
3
|
-
super(message);
|
|
4
|
-
}
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Throw an error when a condition is not met.
|
|
8
|
-
*/
|
|
9
|
-
export function assert(condition, message) {
|
|
10
|
-
if (!condition) {
|
|
11
|
-
throw new AssertionError(message instanceof Function ? message() : message);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Given a value, return it if it is not null nor undefined. Otherwise throw an
|
|
16
|
-
* error.
|
|
17
|
-
*
|
|
18
|
-
* @template T
|
|
19
|
-
* @returns {NonNullable<T>}
|
|
20
|
-
*/
|
|
21
|
-
export function assertExists(t, message = "Assertion failed: value does not exist") {
|
|
22
|
-
assert(t != null, message);
|
|
23
|
-
return t;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* @param {*} n
|
|
27
|
-
* @returns string
|
|
28
|
-
*/
|
|
29
|
-
export function assertString(n, message = () => `Assertion failed: ${n} is not a string`) {
|
|
30
|
-
assert(typeof n === "string", message);
|
|
31
|
-
return n;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Compile time assertion that no value will used at this point in control flow.
|
|
35
|
-
*/
|
|
36
|
-
export function checkExhaustive(value, message = `Unexpected value ${value}`) {
|
|
37
|
-
throw new Error(message instanceof Function ? message() : message);
|
|
38
|
-
}
|
package/lib/esm/awaitable.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/lib/esm/case.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { display } from "../display.js";
|
|
2
|
-
import { FC } from "../dom/fc.js";
|
|
3
|
-
import { fieldset, input, label } from "../dom/html.js";
|
|
4
|
-
let buttonBarId = 1;
|
|
5
|
-
let nextId = () => buttonBarId++;
|
|
6
|
-
const ButtonBar = FC("button-bar", (el, { value, values, events }) => {
|
|
7
|
-
const name = `button-bar-${nextId()}`;
|
|
8
|
-
return fieldset({ class: "input-group" }, ...values
|
|
9
|
-
.map((option) => {
|
|
10
|
-
const opt = `${option}`.replace(/\s+/g, "_").toLowerCase();
|
|
11
|
-
const id = `${name}-${opt}`;
|
|
12
|
-
return [
|
|
13
|
-
label({ role: "button", htmlFor: id }, input({
|
|
14
|
-
type: "radio",
|
|
15
|
-
id,
|
|
16
|
-
name,
|
|
17
|
-
value: option,
|
|
18
|
-
checked: option === value,
|
|
19
|
-
events: {
|
|
20
|
-
change: () => events.onSelect(option),
|
|
21
|
-
},
|
|
22
|
-
}), display(option)),
|
|
23
|
-
];
|
|
24
|
-
})
|
|
25
|
-
.flat());
|
|
26
|
-
});
|
|
27
|
-
export default ButtonBar;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { width } from "../dom/css/sizing.js";
|
|
2
|
-
import { FC, State } from "../dom/fc.js";
|
|
3
|
-
import { input, span } from "../dom/html.js";
|
|
4
|
-
const Mode = { VIEW: 0, EDIT: 1 };
|
|
5
|
-
export const InlineEdit = FC("inline-edit", (el, { mode = Mode.VIEW, value, events }) => {
|
|
6
|
-
const state = (el[State] ??= { mode, value });
|
|
7
|
-
const render = () => {
|
|
8
|
-
switch (state.mode) {
|
|
9
|
-
case Mode.EDIT:
|
|
10
|
-
return edit();
|
|
11
|
-
case Mode.VIEW:
|
|
12
|
-
return view();
|
|
13
|
-
default:
|
|
14
|
-
return span();
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
const view = () => span({
|
|
18
|
-
style: { cursor: "text", ...width("full", "inline") },
|
|
19
|
-
events: {
|
|
20
|
-
click: () => {
|
|
21
|
-
state.mode = Mode.EDIT;
|
|
22
|
-
el.update(render());
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
}, state.value ?? "");
|
|
26
|
-
const edit = () => {
|
|
27
|
-
const edit = span({ style: { display: "block", position: "relative" } }, input({
|
|
28
|
-
style: {
|
|
29
|
-
zIndex: "10",
|
|
30
|
-
position: "absolute",
|
|
31
|
-
left: "0",
|
|
32
|
-
marginTop: "-0.375rem",
|
|
33
|
-
},
|
|
34
|
-
events: {
|
|
35
|
-
blur: ({ target }) => events.change(target?.value ?? ""),
|
|
36
|
-
},
|
|
37
|
-
type: "text",
|
|
38
|
-
value: state.value,
|
|
39
|
-
}), "\u00a0" // Hack to get the span to take up space
|
|
40
|
-
);
|
|
41
|
-
setTimeout(() => {
|
|
42
|
-
edit.dispatchEvent(new Event("focus"));
|
|
43
|
-
});
|
|
44
|
-
return edit;
|
|
45
|
-
};
|
|
46
|
-
return render();
|
|
47
|
-
});
|
|
48
|
-
export default InlineEdit;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { display } from "../display.js";
|
|
2
|
-
import { div, span, ul, li, pre, code } from "../dom/html.js";
|
|
3
|
-
import { LEVEL } from "../log.js";
|
|
4
|
-
export function isHTMLLogger(logger) {
|
|
5
|
-
return logger.root != undefined;
|
|
6
|
-
}
|
|
7
|
-
export function makeHTMLLogger(name) {
|
|
8
|
-
let log;
|
|
9
|
-
const root = div(div(span(name)), (log = ul()));
|
|
10
|
-
const logger = { level: LEVEL.INFO, root };
|
|
11
|
-
function append(message) {
|
|
12
|
-
log.appendChild(li(pre(code(message))));
|
|
13
|
-
}
|
|
14
|
-
const logAt = (level) => (message) => level >= (logger.level ?? LEVEL.ERROR)
|
|
15
|
-
? append(display(message))
|
|
16
|
-
: undefined;
|
|
17
|
-
logger.debug = logAt(LEVEL.VERBOSE);
|
|
18
|
-
logger.info = logAt(LEVEL.INFO);
|
|
19
|
-
logger.warn = logAt(LEVEL.WARN);
|
|
20
|
-
logger.error = logAt(LEVEL.ERROR);
|
|
21
|
-
return logger;
|
|
22
|
-
}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { FC } from "../dom/fc.js";
|
|
2
|
-
import { option, select } from "../dom/html.js";
|
|
3
|
-
export const Select = FC("jiffies-select", (el, { name, events: { change }, disabled, value, options }) => select({ name, events: { change }, disabled }, ...options.map(([v, name]) => option({ value: v, selected: value === v }, `${name}`))));
|