Skip to content
This repository was archived by the owner on Oct 9, 2024. It is now read-only.

Commit f408fcf

Browse files
authored
Convert to TypeScript (#878)
* Convert to TypeScript * Install types packages * Mv * Install typescript, fix eslint * Remove @babel/plugin-proposal-decorators * Cleanup * Install glint locally * Lock * Lint * Add prismjs-glimmer local types
1 parent 5fb64c1 commit f408fcf

File tree

22 files changed

+676
-76
lines changed

22 files changed

+676
-76
lines changed

.eslintrc.js

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,11 @@
22

33
module.exports = {
44
root: true,
5-
parser: '@babel/eslint-parser',
5+
parser: '@typescript-eslint/parser',
66
parserOptions: {
77
ecmaVersion: 'latest',
8-
sourceType: 'module',
9-
requireConfigFile: false,
10-
babelOptions: {
11-
plugins: [
12-
['@babel/plugin-proposal-decorators', { decoratorsBeforeExport: true }],
13-
],
14-
},
158
},
16-
plugins: ['ember'],
9+
plugins: ['ember', '@typescript-eslint'],
1710
extends: [
1811
'eslint:recommended',
1912
'plugin:ember/recommended',
@@ -24,6 +17,15 @@ module.exports = {
2417
},
2518
rules: {},
2619
overrides: [
20+
// ts files
21+
{
22+
files: ['**/*.ts'],
23+
extends: [
24+
'plugin:@typescript-eslint/eslint-recommended',
25+
'plugin:@typescript-eslint/recommended',
26+
],
27+
rules: {},
28+
},
2729
// node files
2830
{
2931
files: [

addon/components/code-block.js

Lines changed: 0 additions & 11 deletions
This file was deleted.

addon/components/code-block.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import Component from '@glimmer/component';
2+
3+
interface CodeBlockSignature {
4+
Args: {
5+
code: string;
6+
language?: string;
7+
showLineNumbers?: boolean;
8+
start?: string;
9+
};
10+
Element: HTMLElement;
11+
}
12+
13+
export default class CodeBlockComponent extends Component<CodeBlockSignature> {
14+
get language() {
15+
return this.args.language ?? 'markup';
16+
}
17+
18+
get languageClass() {
19+
return `language-${this.language}`;
20+
}
21+
}
22+
23+
declare module '@glint/environment-ember-loose/registry' {
24+
export default interface Registry {
25+
CodeBlock: typeof CodeBlockComponent;
26+
}
27+
}
Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,22 @@
1-
/* global Prism */
21
import Component from '@glimmer/component';
32
import { action } from '@ember/object';
4-
import { htmlSafe } from '@ember/template';
3+
import { htmlSafe, type SafeString } from '@ember/template';
54
import { tracked } from '@glimmer/tracking';
65
import { assert } from '@ember/debug';
76

8-
export default class CodeInlineComponent extends Component {
9-
@tracked prismCode = '';
7+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
8+
declare const Prism: any;
9+
10+
interface CodeInlineSignature {
11+
Args: {
12+
code: string;
13+
language?: string;
14+
};
15+
Element: HTMLElement;
16+
}
17+
18+
export default class CodeInlineComponent extends Component<CodeInlineSignature> {
19+
@tracked prismCode: string | SafeString = '';
1020

1121
get code() {
1222
const code = this.args.code;
@@ -31,7 +41,7 @@ export default class CodeInlineComponent extends Component {
3141
}
3242

3343
@action
34-
setPrismCode(element) {
44+
setPrismCode(element: Element) {
3545
const code = this.code;
3646
const language = this.language;
3747
const grammar = Prism.languages[language];
@@ -50,3 +60,9 @@ export default class CodeInlineComponent extends Component {
5060
});
5161
}
5262
}
63+
64+
declare module '@glint/environment-ember-loose/registry' {
65+
export default interface Registry {
66+
CodeInline: typeof CodeInlineComponent;
67+
}
68+
}

addon/index.js renamed to addon/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
/* globals Prism */
21
import { setup as glimmer } from 'prismjs-glimmer';
32

3+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
4+
declare const Prism: any;
5+
46
export function setup() {
57
glimmer(Prism);
68

addon/template-registry.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import type CodeBlock from './components/code-block';
2+
import type CodeInline from './components/code-inline';
3+
4+
export default interface Registry {
5+
CodeBlock: typeof CodeBlock;
6+
CodeInline: typeof CodeInline;
7+
}

ember-cli-build.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const EmberAddon = require('ember-cli/lib/broccoli/ember-addon');
44

55
module.exports = function (defaults) {
66
let app = new EmberAddon(defaults, {
7+
'ember-cli-babel': { enableTypeScriptTransform: true },
78
'ember-prism': {
89
components: ['handlebars', 'markup', 'markup-templating'],
910
plugins: ['line-numbers'],

index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ module.exports = {
6060
this._super.included.apply(this, arguments);
6161
},
6262
options: {
63+
'ember-cli-babel': { enableTypeScriptTransform: true },
6364
nodeAssets: {
6465
prismjs() {
6566
return {

package.json

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,21 @@
1919
"url": "https://github.com/rwwagner90"
2020
}
2121
],
22+
"typesVersions": {
23+
"*": {
24+
"test-support": [
25+
"declarations/addon-test-support/index.d.ts"
26+
],
27+
"test-support/*": [
28+
"declarations/addon-test-support/*",
29+
"declarations/addon-test-support/*/index.d.ts"
30+
],
31+
"*": [
32+
"declarations/addon/*",
33+
"declarations/addon/*/index.d.ts"
34+
]
35+
}
36+
},
2237
"directories": {
2338
"doc": "doc",
2439
"test": "tests"
@@ -33,6 +48,9 @@
3348
"lint:hbs:fix": "ember-template-lint . --fix",
3449
"lint:js": "eslint . --cache",
3550
"lint:js:fix": "eslint . --fix",
51+
"lint:types": "tsc --noEmit",
52+
"prepack": "tsc --project tsconfig.declarations.json",
53+
"postpack": "rimraf declarations",
3654
"start": "ember serve",
3755
"test": "concurrently \"npm:lint\" \"npm:test:*\" --names \"lint,test:\"",
3856
"test:ember": "ember test",
@@ -49,13 +67,41 @@
4967
"prismjs-glimmer": "^1.1.1"
5068
},
5169
"devDependencies": {
52-
"@babel/eslint-parser": "^7.23.3",
53-
"@babel/plugin-proposal-decorators": "^7.23.7",
5470
"@ember/optional-features": "^2.0.0",
5571
"@ember/test-helpers": "^3.2.1",
5672
"@embroider/test-setup": "^3.0.3",
5773
"@glimmer/component": "^1.1.2",
5874
"@glimmer/tracking": "^1.1.2",
75+
"@glint/core": "^1.3.0",
76+
"@glint/environment-ember-loose": "^1.2.1",
77+
"@glint/template": "^1.2.1",
78+
"@tsconfig/ember": "^3.0.3",
79+
"@types/ember": "^4.0.10",
80+
"@types/ember__application": "^4.0.10",
81+
"@types/ember__array": "^4.0.9",
82+
"@types/ember__component": "^4.0.21",
83+
"@types/ember__controller": "^4.0.11",
84+
"@types/ember__debug": "^4.0.7",
85+
"@types/ember__destroyable": "^4.0.4",
86+
"@types/ember__engine": "^4.0.10",
87+
"@types/ember__error": "^4.0.5",
88+
"@types/ember__helper": "^4.0.5",
89+
"@types/ember__modifier": "^4.0.8",
90+
"@types/ember__object": "^4.0.11",
91+
"@types/ember__owner": "^4.0.8",
92+
"@types/ember__polyfills": "^4.0.5",
93+
"@types/ember__routing": "^4.0.19",
94+
"@types/ember__runloop": "^4.0.8",
95+
"@types/ember__service": "^4.0.8",
96+
"@types/ember__string": "^3.16.3",
97+
"@types/ember__template": "^4.0.5",
98+
"@types/ember__test": "^4.0.5",
99+
"@types/ember__utils": "^4.0.6",
100+
"@types/htmlbars-inline-precompile": "^3.0.3",
101+
"@types/qunit": "^2.19.9",
102+
"@types/rsvp": "^4.0.8",
103+
"@typescript-eslint/eslint-plugin": "^6.14.0",
104+
"@typescript-eslint/parser": "^6.14.0",
59105
"broccoli-asset-rev": "^3.0.0",
60106
"concurrently": "^8.2.2",
61107
"ember-cli": "~5.6.0",
@@ -87,6 +133,7 @@
87133
"stylelint": "^15.11.0",
88134
"stylelint-config-standard": "^34.0.0",
89135
"stylelint-prettier": "^4.1.0",
136+
"typescript": "^5.3.3",
90137
"webpack": "^5.89.0"
91138
},
92139
"peerDependencies": {

0 commit comments

Comments
 (0)