Skip to content

Commit bd9b8fa

Browse files
committed
hterm: convert to ES6 module
Replace the generated index.js with an actual ES6 module that loads all the rest of the hterm code on the fly. This avoids the compile step when testing locally. This is structured as the minimal effort to convert hterm to an ES6 module. We still have a global "hterm" object that all the imported files extend with their APIs. This avoids a lot of disruption in the tree and makes it easier to review. This also avoids confusing closure-compiler as it doesn't handle ES6 modules great where the declared types use the full `hterm.xxx` namespace. Rectifying this will take some effort, and perhaps writing custom externs, neither of which is exactly great. Change-Id: Iaa071f6ad04677802e183f5cdeac5c4ef5ce8681 Reviewed-on: https://chromium-review.googlesource.com/c/apps/libapps/+/4801579 Reviewed-by: Joel Hockey <[email protected]> Tested-by: kokoro <[email protected]>
1 parent 223aaa8 commit bd9b8fa

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+201
-205
lines changed

hterm/.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# Stuff we build for distribution
22
dist
33
/hterm-*.tgz
4-
/index.js
54

65
# npm related dirs.
76
node_modules

hterm/bin/lint

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import libdot # pylint: disable=wrong-import-order
1515
JS_DIR = hterm.DIR / "js"
1616

1717
# Path to generated deps file that hterm uses for libdot/etc...
18-
DEPS_FILE = os.path.join(hterm.DIR, "dist", "js", "hterm_deps.js")
18+
DEPS_FILE = os.path.join(hterm.DIR, "dist", "js", "hterm_resources.js")
1919

2020

2121
def _get_default_paths(basedir):
@@ -30,7 +30,8 @@ def _get_default_paths(basedir):
3030
# Use relpath for nicer default output.
3131
# Sort to ensure hterm.js comes before hterm_other.js, etc.
3232
js_files = sorted(
33-
list(x for x in JS_DIR.glob("*.js"))
33+
[hterm.DIR / "index.js"]
34+
+ list(x for x in JS_DIR.glob("*.js"))
3435
+ list((hterm.DIR / "third_party").glob("*/*.js"))
3536
)
3637

@@ -45,11 +46,20 @@ def mkdeps(_opts):
4546

4647
def main(argv):
4748
"""The main func!"""
48-
closure_args = list(libdot.lint.DEFAULT_CLOSURE_ARGS) + [
49-
# TODO(vapier): We want to turn this on at some point.
50-
"--jscomp_off=strictMissingProperties",
51-
os.path.relpath(DEPS_FILE),
52-
]
49+
libdot_files = [os.path.relpath(libdot.DIR / "index.js")] + sorted(
50+
os.path.relpath(x)
51+
for x in libdot.DIR.glob("js/*.js")
52+
if "_test" not in x.name and x.name.startswith("lib")
53+
)
54+
55+
closure_args = (
56+
list(libdot.lint.DEFAULT_CLOSURE_ARGS)
57+
+ [
58+
# TODO(vapier): We want to turn this on at some point.
59+
"--jscomp_off=strictMissingProperties",
60+
]
61+
+ libdot_files
62+
)
5363
return libdot.lint.main(
5464
argv,
5565
basedir=hterm.DIR,

hterm/html/hterm.html

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,6 @@
33
<head>
44
<title>hterm test page</title>
55
<meta charset='utf-8'/>
6-
<script src='../dist/js/hterm_deps.js'></script>
7-
<script src='../dist/js/hterm_resources.js'></script>
8-
<!-- Dist version.
9-
<script src='../dist/js/hterm.js'></script>
10-
-->
11-
<!-- Live version. -->
12-
<script src='../js/hterm.js'></script>
13-
<script src='../js/hterm_accessibility_reader.js'></script>
14-
<script src='../js/hterm_contextmenu.js'></script>
15-
<script src='../js/hterm_find_bar.js'></script>
16-
<script src='../js/hterm_frame.js'></script>
17-
<script src='../js/hterm_keyboard.js'></script>
18-
<script src='../js/hterm_keyboard_bindings.js'></script>
19-
<script src='../js/hterm_keyboard_keymap.js'></script>
20-
<script src='../js/hterm_keyboard_keypattern.js'></script>
21-
<script src='../js/hterm_notifications.js'></script>
22-
<script src='../js/hterm_options.js'></script>
23-
<script src='../js/hterm_parser.js'></script>
24-
<script src='../js/hterm_parser_identifiers.js'></script>
25-
<script src='../js/hterm_preference_manager.js'></script>
26-
<script src='../js/hterm_pubsub.js'></script>
27-
<script src='../js/hterm_screen.js'></script>
28-
<script src='../js/hterm_scrollport.js'></script>
29-
<script src='../js/hterm_terminal.js'></script>
30-
<script src='../js/hterm_terminal_io.js'></script>
31-
<script src='../js/hterm_text_attributes.js'></script>
32-
<script src='../js/hterm_vt.js'></script>
33-
<script src='../js/hterm_vt_character_map.js'></script>
34-
<script src='../third_party/intl-segmenter/intl-segmenter.js'></script>
35-
<script src='../third_party/wcwidth/wc.js'></script>
366

377
<style>
388
html {
@@ -59,7 +29,11 @@
5929

6030
<body>
6131
<div id='terminal'></div>
62-
<script>
32+
<script type="module">
33+
import {lib} from '../../libdot/index.js';
34+
35+
import {hterm} from '../index.js';
36+
6337
function initContent(io) {
6438
const ver = lib.resource.getData('hterm/changelog/version');
6539
const date = lib.resource.getData('hterm/changelog/date');

hterm/html/hterm_test.html

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,35 +10,6 @@
1010
<!-- initialize the test framework; this must come first -->
1111
<script src='../js/hterm_test.js'></script>
1212

13-
<script src='../dist/js/hterm_deps.js'></script>
14-
<script src='../dist/js/hterm_resources.js'></script>
15-
16-
<!-- Keep this list in sync with ../concat/hterm.concat! -->
17-
<script src='../js/hterm.js'></script>
18-
<script src='../js/hterm_accessibility_reader.js'></script>
19-
<script src='../js/hterm_contextmenu.js'></script>
20-
<script src='../js/hterm_find_bar.js'></script>
21-
<script src='../js/hterm_frame.js'></script>
22-
<script src='../js/hterm_keyboard.js'></script>
23-
<script src='../js/hterm_keyboard_bindings.js'></script>
24-
<script src='../js/hterm_keyboard_keymap.js'></script>
25-
<script src='../js/hterm_keyboard_keypattern.js'></script>
26-
<script src='../js/hterm_notifications.js'></script>
27-
<script src='../js/hterm_options.js'></script>
28-
<script src='../js/hterm_parser.js'></script>
29-
<script src='../js/hterm_parser_identifiers.js'></script>
30-
<script src='../js/hterm_preference_manager.js'></script>
31-
<script src='../js/hterm_pubsub.js'></script>
32-
<script src='../js/hterm_screen.js'></script>
33-
<script src='../js/hterm_scrollport.js'></script>
34-
<script src='../js/hterm_terminal.js'></script>
35-
<script src='../js/hterm_terminal_io.js'></script>
36-
<script src='../js/hterm_text_attributes.js'></script>
37-
<script src='../js/hterm_vt.js'></script>
38-
<script src='../js/hterm_vt_character_map.js'></script>
39-
<script src='../third_party/intl-segmenter/intl-segmenter.js'></script>
40-
<script src='../third_party/wcwidth/wc.js'></script>
41-
4213
<script type='module' src='../js/hterm_tests.js'></script>
4314
<script type='module' src='../js/hterm_accessibility_reader_tests.js'></script>
4415
<script type='module' src='../js/hterm_contextmenu_tests.js'></script>

hterm/index.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright 2023 The ChromiumOS Authors
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
/**
6+
* @fileoverview hterm main library entry point.
7+
* @suppress {moduleLoad} Don't try and load dist/js/hterm_resources.js.
8+
*/
9+
10+
import {hterm} from './js/hterm.js';
11+
import './dist/js/hterm_resources.js';
12+
import './js/hterm_accessibility_reader.js';
13+
import './js/hterm_contextmenu.js';
14+
import './js/hterm_find_bar.js';
15+
import './js/hterm_frame.js';
16+
import './js/hterm_keyboard.js';
17+
import './js/hterm_keyboard_bindings.js';
18+
import './js/hterm_keyboard_keymap.js';
19+
import './js/hterm_keyboard_keypattern.js';
20+
import './js/hterm_notifications.js';
21+
import './js/hterm_options.js';
22+
import './js/hterm_parser.js';
23+
import './js/hterm_parser_identifiers.js';
24+
import './js/hterm_preference_manager.js';
25+
import './js/hterm_pubsub.js';
26+
import './js/hterm_screen.js';
27+
import './js/hterm_scrollport.js';
28+
import './js/hterm_terminal.js';
29+
import './js/hterm_terminal_io.js';
30+
import './js/hterm_text_attributes.js';
31+
import './js/hterm_vt.js';
32+
import './js/hterm_vt_character_map.js';
33+
import './third_party/intl-segmenter/intl-segmenter.js';
34+
import './third_party/wcwidth/wc.js';
35+
export {hterm};

hterm/js/deps_resources.shim.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
* @suppress {moduleLoad}
88
*/
99

10+
// NB: This path is relative to the dist/js/ output dir.
11+
// All other paths in this file are relative to this source file.
12+
import {lib} from '../../../libdot/index.js';
13+
1014
import auBell from '../audio/bell.ogg';
1115
import htmlFindBar from '../html/find_bar.html';
1216
import htmlFindScreen from '../html/find_screen.html';

hterm/js/hterm.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
'use strict';
6-
75
/**
86
* @fileoverview Declares the hterm.* namespace and some basic shared utilities
97
* that are too small to deserve dedicated files.
108
*/
9+
10+
import {lib} from '../../libdot/index.js';
11+
12+
/** @const */
1113
const hterm = {};
1214

1315
/**
@@ -450,3 +452,5 @@ hterm.RowCol = class {
450452
return `[hterm.RowCol: ${this.row}, ${this.column}, ${this.overflow}]`;
451453
}
452454
};
455+
456+
export {hterm};

hterm/js/hterm_accessibility_reader.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
'use strict';
5+
import {lib} from '../../libdot/index.js';
6+
7+
import {hterm} from '../index.js';
68

79
/**
810
* AccessibilityReader responsible for rendering command output for AT.

hterm/js/hterm_accessibility_reader_tests.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
* @fileoverview hterm.AccessibilityReader unit tests.
77
*/
88

9+
import {hterm} from '../index.js';
10+
911
describe('hterm_accessibility_reader_tests.js', () => {
1012

1113
/**

hterm/js/hterm_contextmenu.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
'use strict';
6-
75
/**
86
* @fileoverview Context menu handling.
97
*/
108

9+
import {hterm} from '../index.js';
10+
1111
/**
1212
* Manage the context menu usually shown when right clicking.
1313
*

0 commit comments

Comments
 (0)