Skip to content

Commit 9574e1e

Browse files
authored
Fix wrong event types and missing ace.require for ace-builds (#5744)
* fix: missing types for some events * add ace require to ace-builds build; script to test ace-builds package
1 parent 09bbe54 commit 9574e1e

File tree

11 files changed

+222
-24
lines changed

11 files changed

+222
-24
lines changed

Makefile.dryice.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,10 @@ function correctDeclarationsForBuild(path, additionalDeclarations) {
185185
if (additionalDeclarations) {
186186
newDefinitions = newDefinitions + '\n' + additionalDeclarations;
187187
}
188+
if (/ace\.d\.ts$/.test(path)) {
189+
var aceRequire = "$1\n export function require(name: string): any;";
190+
newDefinitions = newDefinitions.replace(/(declare\smodule\s"ace\-builds"\s{)/, aceRequire);
191+
}
188192
fs.writeFileSync(path, newDefinitions);
189193
}
190194

ace-internal.d.ts

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -946,9 +946,8 @@ export namespace Ace {
946946
}) => void;
947947

948948
interface CommandManagerEvents {
949-
on(name: 'exec', callback: execEventHandler): Function;
950-
951-
on(name: 'afterExec', callback: execEventHandler): Function;
949+
"exec": execEventHandler
950+
"afterExec": execEventHandler;
952951
}
953952

954953
type CommandManager = import("./src/commands/command_manager").CommandManager;
@@ -1236,6 +1235,24 @@ export namespace Ace {
12361235
docChanged?: boolean;
12371236
selectionChanged?: boolean;
12381237
}
1238+
1239+
export interface CommandBarEvents {
1240+
"hide": () => void;
1241+
"show": () => void;
1242+
"alwaysShow": (e: boolean) => void;
1243+
}
1244+
1245+
export interface FontMetricsEvents {
1246+
"changeCharacterSize": (e: { data: { height: number, width: number } }) => void;
1247+
}
1248+
1249+
export interface OptionPanelEvents {
1250+
"setOption": (e: { name: string, value: any }) => void;
1251+
}
1252+
1253+
export interface ScrollbarEvents {
1254+
"scroll": (e: { data: number }) => void;
1255+
}
12391256
}
12401257

12411258

@@ -1394,18 +1411,18 @@ declare module "./src/placeholder" {
13941411
}
13951412

13961413
declare module "./src/scrollbar" {
1397-
export interface VScrollBar extends Ace.EventEmitter<any> {
1414+
export interface VScrollBar extends Ace.EventEmitter<Ace.ScrollbarEvents> {
13981415
}
13991416

1400-
export interface HScrollBar extends Ace.EventEmitter<any> {
1417+
export interface HScrollBar extends Ace.EventEmitter<Ace.ScrollbarEvents> {
14011418
}
14021419
}
14031420

14041421
declare module "./src/scrollbar_custom" {
1405-
export interface VScrollBar extends Ace.EventEmitter<any> {
1422+
export interface VScrollBar extends Ace.EventEmitter<Ace.ScrollbarEvents> {
14061423
}
14071424

1408-
export interface HScrollBar extends Ace.EventEmitter<any> {
1425+
export interface HScrollBar extends Ace.EventEmitter<Ace.ScrollbarEvents> {
14091426
}
14101427
}
14111428

@@ -1466,13 +1483,13 @@ declare module "./src/snippets" {
14661483
}
14671484

14681485
declare module "./src/ext/command_bar" {
1469-
export interface CommandBarTooltip extends Ace.EventEmitter<any> {
1486+
export interface CommandBarTooltip extends Ace.EventEmitter<Ace.CommandBarEvents> {
14701487
$shouldHideMoreOptions?: boolean,
14711488
}
14721489
}
14731490

14741491
declare module "./src/commands/command_manager" {
1475-
export interface CommandManager extends Ace.EventEmitter<any> {
1492+
export interface CommandManager extends Ace.EventEmitter<Ace.CommandManagerEvents> {
14761493
$checkCommandState?: boolean
14771494
}
14781495
}
@@ -1552,12 +1569,12 @@ declare module "./src/mouse/mouse_handler" {
15521569
}
15531570

15541571
declare module "./src/ext/options" {
1555-
export interface OptionPanel extends Ace.EventEmitter<any> {
1572+
export interface OptionPanel extends Ace.EventEmitter<Ace.OptionPanelEvents> {
15561573
}
15571574
}
15581575

15591576
declare module "./src/layer/font_metrics" {
1560-
export interface FontMetrics extends Ace.EventEmitter<any> {
1577+
export interface FontMetrics extends Ace.EventEmitter<Ace.FontMetricsEvents> {
15611578
}
15621579
}
15631580

ace.d.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -759,8 +759,8 @@ declare module "ace-code" {
759759
args: any[];
760760
}) => void;
761761
interface CommandManagerEvents {
762-
on(name: "exec", callback: execEventHandler): Function;
763-
on(name: "afterExec", callback: execEventHandler): Function;
762+
"exec": execEventHandler;
763+
"afterExec": execEventHandler;
764764
}
765765
type CommandManager = import("ace-code/src/commands/command_manager").CommandManager;
766766
interface SavedSelection {
@@ -970,6 +970,30 @@ declare module "ace-code" {
970970
docChanged?: boolean;
971971
selectionChanged?: boolean;
972972
}
973+
export interface CommandBarEvents {
974+
"hide": () => void;
975+
"show": () => void;
976+
"alwaysShow": (e: boolean) => void;
977+
}
978+
export interface FontMetricsEvents {
979+
"changeCharacterSize": (e: {
980+
data: {
981+
height: number;
982+
width: number;
983+
};
984+
}) => void;
985+
}
986+
export interface OptionPanelEvents {
987+
"setOption": (e: {
988+
name: string;
989+
value: any;
990+
}) => void;
991+
}
992+
export interface ScrollbarEvents {
993+
"scroll": (e: {
994+
data: number;
995+
}) => void;
996+
}
973997
}
974998
export const config: typeof import("ace-code/src/config");
975999
export function edit(el?: string | (HTMLElement & {

demo/test_ace_builds/index.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import * as ace from "ace-builds";
2+
import {Range, Ace} from "ace-builds";
3+
import "ace-builds/src-noconflict/ext-language_tools";
4+
import "../../src/test/mockdom.js";
5+
var HoverTooltip = ace.require("ace/tooltip").HoverTooltip;
6+
import "ace-builds/src-noconflict/mode-javascript";
7+
import "ace-builds/src-noconflict/theme-monokai";
8+
9+
const editor = ace.edit(null); // should not be an error
10+
editor.setTheme("ace/theme/monokai");
11+
editor.session.setMode("ace/mode/javascript");
12+
13+
function configure(config: Ace.Config) {
14+
config.setDefaultValues("editor", {
15+
fontSize: 14,
16+
showPrintMargin: false,
17+
})
18+
}
19+
20+
configure(ace.config) // should not be a error
21+
22+
const hover = new HoverTooltip();
23+
hover.setDataProvider((e: any, editor: Ace.Editor) => {
24+
const domNode = document.createElement("div");
25+
hover.showForRange(editor, new Range(1, 3, 3, 1), domNode, e);
26+
});
27+
hover.addToEditor(editor);
28+
29+
editor.commands.on('afterExec', ({editor, command}) => {
30+
console.log(editor.getValue(), command.name);
31+
});
32+
33+
editor.commands.on('exec', ({editor, command}) => {
34+
console.log(editor.getValue(), command.name);
35+
});
36+
37+
editor.destroy && editor.destroy();

demo/test_ace_builds/package.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"name": "ace-test-package",
3+
"version": "1.0.0",
4+
"description": "Test package for Ace builds",
5+
"main": "index.js",
6+
"scripts": {
7+
"build": "tsc -p tsconfig.json",
8+
"test": "node index.js"
9+
},
10+
"dependencies": {
11+
"ace-builds": "file:../../ace-builds-latest.tgz"
12+
},
13+
"devDependencies": {
14+
"typescript": "^5.7.3"
15+
}
16+
}

demo/test_ace_builds/tsconfig.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"compilerOptions": {
3+
"strict": true,
4+
"noImplicitAny": true,
5+
"strictNullChecks": true,
6+
"strictFunctionTypes": true,
7+
"strictBindCallApply": true,
8+
"strictPropertyInitialization": true,
9+
"noImplicitThis": true,
10+
"alwaysStrict": true,
11+
"noUnusedLocals": true,
12+
"noUnusedParameters": true,
13+
"noImplicitReturns": true,
14+
"noFallthroughCasesInSwitch": true,
15+
// "noUncheckedIndexedAccess": true,
16+
// "noImplicitOverride": true,
17+
"esModuleInterop": true,
18+
"forceConsistentCasingInFileNames": true,
19+
"module": "commonjs",
20+
"target": "es2020",
21+
"moduleResolution": "node"
22+
},
23+
"include": ["*.ts"],
24+
"exclude": ["node_modules"]
25+
}

demo/test_package/index.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,4 +147,12 @@ editor.on("paste", (e) => {
147147
})
148148

149149
if (themesByName.textmate)
150-
console.log(themesByName.textmate.theme);
150+
console.log(themesByName.textmate.theme);
151+
152+
editor.commands.on('afterExec', ({editor, command}) => {
153+
console.log(editor.getValue(), command.name);
154+
});
155+
156+
editor.commands.on('exec', ({editor, command}) => {
157+
console.log(editor.getValue(), command.name);
158+
});

src/layer/font_metrics.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class FontMetrics {
5656
}
5757

5858
/**
59-
* @param size
59+
* @param {{height: number, width: number} | null} [size]
6060
*/
6161
checkForSizeChanges(size) {
6262
if (size === undefined)

tool/test-ace-builds-package.sh

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#!/bin/bash
2+
set -euxo pipefail
3+
4+
cd "$(dirname "$0")/.."
5+
REPO_ROOT="$(pwd)"
6+
7+
npm install
8+
9+
rm -rf ../ace-builds
10+
node ./Makefile.dryice.js full --target ../ace-builds
11+
12+
cat > ../ace-builds/package.json <<'EOF'
13+
{
14+
"name": "ace-builds",
15+
"main": "./src-noconflict/ace.js",
16+
"typings": "ace.d.ts",
17+
"version": "1.38.0",
18+
"description": "Ace (Ajax.org Cloud9 Editor)",
19+
"scripts": {
20+
"test": "echo \"Error: no test specified\" && exit 1"
21+
},
22+
"repository": {
23+
"type": "git",
24+
"url": "https://github.com/ajaxorg/ace-builds.git"
25+
},
26+
"author": "",
27+
"license": "BSD-3-Clause",
28+
"bugs": {
29+
"url": "https://github.com/ajaxorg/ace-builds/issues"
30+
},
31+
"homepage": "https://github.com/ajaxorg/ace-builds"
32+
}
33+
EOF
34+
35+
cd ../ace-builds
36+
npm pack
37+
38+
rm -f "$REPO_ROOT/ace-builds-latest.tgz"
39+
40+
PACKAGE_FILE=$(ls ace-builds-*.tgz | sort -V | tail -n 1)
41+
42+
mv "$PACKAGE_FILE" "$REPO_ROOT/ace-builds-latest.tgz"
43+
44+
cd "$REPO_ROOT/demo/test_ace_builds"
45+
46+
rm -rf node_modules
47+
rm -f package-lock.json
48+
49+
npm install "$REPO_ROOT/ace-builds-latest.tgz"
50+
51+
npm i typescript@latest
52+
53+
rm -f index.js
54+
npm run build
55+
npm run test
56+
57+
cd "$REPO_ROOT"
58+
rm -f ace-builds-latest.tgz

types/ace-ext.d.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,9 @@ declare module "ace-code/src/ext/command_bar" {
7474
type EventEmitter<T extends {
7575
[K in keyof T]: (...args: any[]) => any;
7676
}> = import("ace-code").Ace.EventEmitter<T>;
77+
type CommandBarEvents = import("ace-code").Ace.CommandBarEvents;
7778
}
78-
export interface CommandBarTooltip extends Ace.EventEmitter<any> {
79+
export interface CommandBarTooltip extends Ace.EventEmitter<Ace.CommandBarEvents> {
7980
}
8081
}
8182
declare module "ace-code/src/ext/language_tools" {
@@ -449,8 +450,9 @@ declare module "ace-code/src/ext/options" {
449450
type EventEmitter<T extends {
450451
[K in keyof T]: (...args: any[]) => any;
451452
}> = import("ace-code").Ace.EventEmitter<T>;
453+
type OptionPanelEvents = import("ace-code").Ace.OptionPanelEvents;
452454
}
453-
export interface OptionPanel extends Ace.EventEmitter<any> {
455+
export interface OptionPanel extends Ace.EventEmitter<Ace.OptionPanelEvents> {
454456
}
455457
}
456458
declare module "ace-code/src/ext/prompt" {

types/ace-modules.d.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ declare module "ace-code/src/layer/font_metrics" {
44
export class FontMetrics {
55
constructor(parentEl: HTMLElement);
66
el: HTMLDivElement;
7-
checkForSizeChanges(size: any): void;
7+
checkForSizeChanges(size?: {
8+
height: number;
9+
width: number;
10+
} | null): void;
811
charSizes: any;
912
allowBoldFonts: boolean;
1013
setPolling(val: boolean): void;
@@ -17,8 +20,9 @@ declare module "ace-code/src/layer/font_metrics" {
1720
type EventEmitter<T extends {
1821
[K in keyof T]: (...args: any[]) => any;
1922
}> = import("ace-code").Ace.EventEmitter<T>;
23+
type FontMetricsEvents = import("ace-code").Ace.FontMetricsEvents;
2024
}
21-
export interface FontMetrics extends Ace.EventEmitter<any> {
25+
export interface FontMetrics extends Ace.EventEmitter<Ace.FontMetricsEvents> {
2226
}
2327
}
2428
declare module "ace-code/src/apply_delta" {
@@ -655,10 +659,11 @@ declare module "ace-code/src/scrollbar" {
655659
type EventEmitter<T extends {
656660
[K in keyof T]: (...args: any[]) => any;
657661
}> = import("ace-code").Ace.EventEmitter<T>;
662+
type ScrollbarEvents = import("ace-code").Ace.ScrollbarEvents;
658663
}
659-
export interface VScrollBar extends Ace.EventEmitter<any> {
664+
export interface VScrollBar extends Ace.EventEmitter<Ace.ScrollbarEvents> {
660665
}
661-
export interface HScrollBar extends Ace.EventEmitter<any> {
666+
export interface HScrollBar extends Ace.EventEmitter<Ace.ScrollbarEvents> {
662667
}
663668
}
664669
declare module "ace-code/src/scrollbar_custom" {
@@ -785,10 +790,11 @@ declare module "ace-code/src/scrollbar_custom" {
785790
type EventEmitter<T extends {
786791
[K in keyof T]: (...args: any[]) => any;
787792
}> = import("ace-code").Ace.EventEmitter<T>;
793+
type ScrollbarEvents = import("ace-code").Ace.ScrollbarEvents;
788794
}
789-
export interface VScrollBar extends Ace.EventEmitter<any> {
795+
export interface VScrollBar extends Ace.EventEmitter<Ace.ScrollbarEvents> {
790796
}
791-
export interface HScrollBar extends Ace.EventEmitter<any> {
797+
export interface HScrollBar extends Ace.EventEmitter<Ace.ScrollbarEvents> {
792798
}
793799
}
794800
declare module "ace-code/src/renderloop" {
@@ -1904,8 +1910,9 @@ declare module "ace-code/src/commands/command_manager" {
19041910
type EventEmitter<T extends {
19051911
[K in keyof T]: (...args: any[]) => any;
19061912
}> = import("ace-code").Ace.EventEmitter<T>;
1913+
type CommandManagerEvents = import("ace-code").Ace.CommandManagerEvents;
19071914
}
1908-
export interface CommandManager extends Ace.EventEmitter<any> {
1915+
export interface CommandManager extends Ace.EventEmitter<Ace.CommandManagerEvents> {
19091916
}
19101917
}
19111918
declare module "ace-code/src/commands/default_commands" {

0 commit comments

Comments
 (0)