Skip to content

Commit 0abb881

Browse files
committed
chore(frontend): set up typescript
1 parent ab050f7 commit 0abb881

File tree

11 files changed

+795
-56
lines changed

11 files changed

+795
-56
lines changed

frontend/.ember-cli

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@
1111
Setting `isTypeScriptProject` to true will force the blueprint generators to generate TypeScript
1212
rather than JavaScript by default, when a TypeScript version of a given blueprint is available.
1313
*/
14-
"isTypeScriptProject": false
14+
"isTypeScriptProject": true
1515
}

frontend/.eslintrc.js

+101-11
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,107 @@
11
"use-strict";
22

33
module.exports = {
4-
extends: ["@adfinis/eslint-config/ember-app"],
4+
root: true,
5+
parser: "@typescript-eslint/parser",
6+
parserOptions: {
7+
ecmaVersion: "latest",
8+
},
9+
plugins: ["ember", "@typescript-eslint", "import"],
10+
extends: [
11+
"eslint:recommended",
12+
"plugin:ember/recommended",
13+
"plugin:prettier/recommended",
14+
],
15+
env: {
16+
browser: true,
17+
},
518
rules: {
6-
"ember/no-actions-hash": "warn",
7-
"ember/no-component-lifecycle-hooks": "warn",
8-
"ember/no-mixins": "warn",
9-
"ember/no-new-mixins": "warn",
10-
"ember/no-classic-classes": "warn",
11-
"ember/no-classic-components": "warn",
12-
"ember/no-get": "warn",
13-
"ember/no-observers": "warn",
14-
"qunit/no-assert-equal": "warn",
15-
"ember/require-tagless-components": "warn",
19+
// possible errors
20+
"no-await-in-loop": "error",
21+
22+
// best practices
23+
"array-callback-return": "error",
24+
"dot-notation": "error",
25+
eqeqeq: "error",
26+
"no-alert": "error",
27+
"no-else-return": "error",
28+
"no-eval": "error",
29+
"no-extend-native": "error",
30+
"no-extra-bind": "error",
31+
"no-floating-decimal": "error",
32+
"one-var": ["error", "never"],
33+
curly: ["error", "multi-line"],
34+
35+
// ES6
36+
"no-var": "error",
37+
"object-shorthand": "error",
38+
"prefer-const": "error",
39+
"prefer-destructuring": [
40+
"error",
41+
{ AssignmentExpression: { array: false, object: false } },
42+
],
43+
"prefer-rest-params": "error",
44+
"prefer-spread": "error",
45+
"prefer-template": "error",
46+
47+
// import
48+
"import/no-duplicates": "error",
49+
"import/no-unresolved": "off",
50+
"import/order": [
51+
"error",
52+
{
53+
"newlines-between": "always",
54+
alphabetize: { order: "asc", caseInsensitive: true },
55+
},
56+
],
57+
58+
// tooling
59+
"no-console": ["error", { allow: ["warn", "error"] }],
60+
"no-debugger": "error",
1661
},
62+
overrides: [
63+
// js files
64+
{
65+
files: ["**/*.js"],
66+
extends: [
67+
"plugin:@typescript-eslint/eslint-recommended",
68+
"plugin:@typescript-eslint/recommended",
69+
],
70+
rules: {},
71+
},
72+
// ts files
73+
{
74+
files: ["**/*.ts"],
75+
extends: [
76+
"plugin:@typescript-eslint/eslint-recommended",
77+
"plugin:@typescript-eslint/recommended",
78+
],
79+
rules: {},
80+
},
81+
// node files
82+
{
83+
files: [
84+
"./.eslintrc.js",
85+
"./.prettierrc.js",
86+
"./.stylelintrc.js",
87+
"./.template-lintrc.js",
88+
"./ember-cli-build.js",
89+
"./testem.js",
90+
"./blueprints/*/index.js",
91+
"./config/**/*.js",
92+
"./lib/*/index.js",
93+
"./server/**/*.js",
94+
],
95+
env: {
96+
browser: false,
97+
node: true,
98+
},
99+
extends: ["plugin:n/recommended"],
100+
},
101+
{
102+
// test files
103+
files: ["tests/**/*-test.{js,ts}"],
104+
extends: ["plugin:qunit/recommended"],
105+
},
106+
],
17107
};

frontend/app/components/task-selection/component.js

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export default class TaskSelectionComponent extends Component {
5656
this._setInitial();
5757

5858
if (this.args.task) {
59+
console.log("foo");
5960
this.onTaskChange(this.args.task, { preventAction: true });
6061
}
6162

frontend/app/config/environment.d.ts

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/**
2+
* Type declarations for
3+
* import config from 'my-app/config/environment'
4+
*/
5+
declare const config: {
6+
environment: string;
7+
modulePrefix: string;
8+
podModulePrefix: string;
9+
locationType: "history" | "hash" | "none" | "auto";
10+
rootURL: string;
11+
APP: Record<string, unknown>;
12+
};
13+
14+
export default config;

frontend/ember-cli-build.js

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const EmberApp = require("ember-cli/lib/broccoli/ember-app");
66

77
module.exports = function (defaults) {
88
const app = new EmberApp(defaults, {
9+
"ember-cli-babel": { enableTypescriptTransform: true },
910
babel: {
1011
plugins: [
1112
require.resolve("ember-concurrency/async-arrow-task-transform"),

frontend/package.json

+35-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@
1717
"lint:fix": "concurrently \"npm:lint:*:fix\" --names \"fix:\"",
1818
"lint:hbs": "ember-template-lint . --config-path .template-lintrc-ci.js",
1919
"lint:hbs:fix": "ember-template-lint . --fix",
20-
"lint:js": "eslint --config .eslintrc.js .",
21-
"lint:js:fix": "eslint --config .eslintrc.js . --fix",
20+
"lint:js": "eslint . --cache",
21+
"lint:js:fix": "eslint . --fix",
22+
"lint:types": "tsc --noEmit",
2223
"start": "ember server --proxy https://timed.localhost --secure-proxy=false",
2324
"test": "concurrently \"npm:lint\" \"npm:test:*\" --names \"lint,test:\"",
2425
"test:ember": "ember test"
@@ -44,6 +45,37 @@
4445
"@glimmer/tracking": "1.1.2",
4546
"@html-next/vertical-collection": "4.0.2",
4647
"@sentry/ember": "^7.98.0",
48+
"@tsconfig/ember": "^3.0.8",
49+
"@tsconfig/strictest": "^2.0.5",
50+
"@types/ember": "^4.0.11",
51+
"@types/ember-data": "^4.4.16",
52+
"@types/ember-data__adapter": "^4.0.6",
53+
"@types/ember-data__model": "^4.0.5",
54+
"@types/ember-data__serializer": "^4.0.6",
55+
"@types/ember-data__store": "^4.0.7",
56+
"@types/ember-qunit": "^6.1.1",
57+
"@types/ember-resolver": "^9.0.0",
58+
"@types/ember__application": "^4.0.11",
59+
"@types/ember__array": "^4.0.10",
60+
"@types/ember__component": "^4.0.22",
61+
"@types/ember__controller": "^4.0.12",
62+
"@types/ember__debug": "^4.0.8",
63+
"@types/ember__destroyable": "^4.0.5",
64+
"@types/ember__engine": "^4.0.11",
65+
"@types/ember__error": "^4.0.6",
66+
"@types/ember__object": "^4.0.12",
67+
"@types/ember__polyfills": "^4.0.6",
68+
"@types/ember__routing": "^4.0.22",
69+
"@types/ember__runloop": "^4.0.10",
70+
"@types/ember__service": "^4.0.9",
71+
"@types/ember__string": "^3.0.15",
72+
"@types/ember__template": "^4.0.7",
73+
"@types/ember__test": "^4.0.6",
74+
"@types/ember__utils": "^4.0.7",
75+
"@types/qunit": "^2.19.10",
76+
"@types/rsvp": "^4.0.9",
77+
"@typescript-eslint/eslint-plugin": "^8.4.0",
78+
"@typescript-eslint/parser": "^8.4.0",
4779
"broccoli-asset-rev": "^3.0.0",
4880
"broccoli-funnel": "^3.0.8",
4981
"concurrently": "^8.0.1",
@@ -125,6 +157,7 @@
125157
"stylelint-scss": "^6.3.0",
126158
"tracked-built-ins": "3.1.1",
127159
"tracked-toolbox": "2.0.0",
160+
"typescript": "^5.5.4",
128161
"webpack": "5.92.1"
129162
},
130163
"engines": {

0 commit comments

Comments
 (0)