From d976b535ad4fad25fe8757b951fabb134a74f1ff Mon Sep 17 00:00:00 2001 From: bobrimperator Date: Sun, 22 Dec 2024 19:51:48 +0100 Subject: [PATCH] chore(typescript): test-app setup --- packages/test-app/.eslintignore | 22 ------------------ packages/test-app/app/components/.gitkeep | 0 packages/test-app/app/controllers/index.js | 21 ----------------- packages/test-app/app/controllers/index.ts | 20 ++++++++++++++++ packages/test-app/app/helpers/.gitkeep | 0 packages/test-app/app/models/.gitkeep | 0 packages/test-app/app/routes/.gitkeep | 0 packages/test-app/config/environment.js | 2 +- packages/test-app/ember-cli-build.js | 1 + packages/test-app/eslint.config.mjs | 5 ++-- packages/test-app/package.json | 10 +++++++- packages/test-app/tsconfig.json | 19 +++++++++++++++ packages/test-app/types/global.d.ts | 1 + pnpm-lock.yaml | 27 +++++++++++++++++++--- 14 files changed, 78 insertions(+), 50 deletions(-) delete mode 100644 packages/test-app/.eslintignore delete mode 100644 packages/test-app/app/components/.gitkeep delete mode 100644 packages/test-app/app/controllers/index.js create mode 100644 packages/test-app/app/controllers/index.ts delete mode 100644 packages/test-app/app/helpers/.gitkeep delete mode 100644 packages/test-app/app/models/.gitkeep delete mode 100644 packages/test-app/app/routes/.gitkeep create mode 100644 packages/test-app/tsconfig.json create mode 100644 packages/test-app/types/global.d.ts diff --git a/packages/test-app/.eslintignore b/packages/test-app/.eslintignore deleted file mode 100644 index cf068c75..00000000 --- a/packages/test-app/.eslintignore +++ /dev/null @@ -1,22 +0,0 @@ -/node-tests/fixtures/ - -# unconventional js -/blueprints/*/files/ -/vendor/ - -# compiled output -/dist/ -/tmp/ - -# dependencies -/bower_components/ -/node_modules/ - -# misc -/coverage/ -!.* - -# ember-try -/.node_modules.ember-try/ -/bower.json.ember-try -/package.json.ember-try diff --git a/packages/test-app/app/components/.gitkeep b/packages/test-app/app/components/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/test-app/app/controllers/index.js b/packages/test-app/app/controllers/index.js deleted file mode 100644 index fd518e1e..00000000 --- a/packages/test-app/app/controllers/index.js +++ /dev/null @@ -1,21 +0,0 @@ -import { inject as service } from '@ember/service'; -import { computed } from '@ember/object'; -import Controller from '@ember/controller'; -const { keys } = Object; - -export default Controller.extend({ - cookies: service(), - - allCookies: computed(function () { - let cookieService = this.cookies; - cookieService.write('now', new Date().getTime()); - - let cookies = cookieService.read(); - return keys(cookies).reduce((acc, key) => { - let value = cookies[key]; - acc.push({ name: key, value }); - - return acc; - }, []); - }), -}); diff --git a/packages/test-app/app/controllers/index.ts b/packages/test-app/app/controllers/index.ts new file mode 100644 index 00000000..8c0373dc --- /dev/null +++ b/packages/test-app/app/controllers/index.ts @@ -0,0 +1,20 @@ +import { inject as service } from '@ember/service'; +import Controller from '@ember/controller'; + +type Cookie = { name: string; value: any }; + +export default class IndexController extends Controller { + @service cookies!: any; + + get allCookies(): Cookie[] { + this.cookies.write('now', new Date().getTime()); + + const cookies = this.cookies.read(); + return Object.keys(cookies).reduce((acc, key) => { + let value = cookies[key]; + acc.push({ name: key, value }); + + return acc; + }, [] as Cookie[]); + } +} diff --git a/packages/test-app/app/helpers/.gitkeep b/packages/test-app/app/helpers/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/test-app/app/models/.gitkeep b/packages/test-app/app/models/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/test-app/app/routes/.gitkeep b/packages/test-app/app/routes/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/test-app/config/environment.js b/packages/test-app/config/environment.js index e9dbdf82..e5a24ec6 100644 --- a/packages/test-app/config/environment.js +++ b/packages/test-app/config/environment.js @@ -7,7 +7,7 @@ module.exports = function (environment) { modulePrefix: 'test-app', environment, rootURL: '/', - locationType: 'auto', + locationType: 'hash', EmberENV: { FEATURES: { // Here you can enable experimental features on an ember canary build diff --git a/packages/test-app/ember-cli-build.js b/packages/test-app/ember-cli-build.js index 379065b9..4d1e0c38 100644 --- a/packages/test-app/ember-cli-build.js +++ b/packages/test-app/ember-cli-build.js @@ -3,6 +3,7 @@ const EmberApp = require('ember-cli/lib/broccoli/ember-app'); module.exports = function (defaults) { let app = new EmberApp(defaults, { + 'ember-cli-babel': { enableTypeScriptTransform: true }, // Add options here }); diff --git a/packages/test-app/eslint.config.mjs b/packages/test-app/eslint.config.mjs index 1d3fc7a7..fc4f3b2e 100644 --- a/packages/test-app/eslint.config.mjs +++ b/packages/test-app/eslint.config.mjs @@ -2,7 +2,7 @@ import ember from 'eslint-plugin-ember'; import prettier from 'eslint-plugin-prettier/recommended'; import qunit from 'eslint-plugin-qunit'; import globals from 'globals'; -import babelParser from '@babel/eslint-parser'; +import typescriptParser from '@typescript-eslint/parser'; import n from 'eslint-plugin-n'; import js from '@eslint/js'; @@ -30,12 +30,13 @@ export default [ ember, }, + files: ['**/*.{ts,js}'], languageOptions: { globals: { ...globals.browser, }, - parser: babelParser, + parser: typescriptParser, ecmaVersion: 2020, sourceType: 'module', diff --git a/packages/test-app/package.json b/packages/test-app/package.json index cfba07bb..c943cb9f 100644 --- a/packages/test-app/package.json +++ b/packages/test-app/package.json @@ -12,10 +12,11 @@ "repository": "https://github.com/simplabs/ember-cookies", "scripts": { "build": "ember build", - "lint": "pnpm lint:js", + "lint": "pnpm lint:js && pnpm lint:types", "lint:fix": "pnpm lint:js:fix", "lint:js": "eslint . --cache", "lint:js:fix": "eslint . --fix", + "lint:types": "tsc --noEmit", "nodetest": "node node-tests/runner.js", "start": "ember server", "test": "ember test", @@ -33,6 +34,12 @@ "@eslint/js": "9.12.0", "@glimmer/component": "2.0.0", "@glimmer/tracking": "1.1.2", + "@glint/core": "^1.5.0", + "@glint/environment-ember-loose": "^1.5.0", + "@glint/environment-ember-template-imports": "^1.5.0", + "@tsconfig/ember": "^3.0.8", + "@typescript-eslint/eslint-plugin": "^8.18.1", + "@typescript-eslint/parser": "^8.18.1", "broccoli-asset-rev": "3.0.0", "ember-auto-import": "2.8.1", "ember-cli": "6.0.1", @@ -69,6 +76,7 @@ "request": "2.88.2", "rsvp": "4.8.5", "symlink-or-copy": "1.3.1", + "typescript": "^5.7.2", "webpack": "5.95.0" }, "fastbootDependencies": [ diff --git a/packages/test-app/tsconfig.json b/packages/test-app/tsconfig.json new file mode 100644 index 00000000..e9b2a2d7 --- /dev/null +++ b/packages/test-app/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "@tsconfig/ember/tsconfig.json", + "compilerOptions": { + // The combination of `baseUrl` with `paths` allows Ember's classic package + // layout, which is not resolvable with the Node resolution algorithm, to + // work with TypeScript. + "baseUrl": ".", + "experimentalDecorators": true, + "paths": { + "test-app/tests/*": ["tests/*"], + "test-app/*": ["app/*"], + "*": ["types/*"] + }, + "types": [ + "ember-source/types", + ] + } +} + diff --git a/packages/test-app/types/global.d.ts b/packages/test-app/types/global.d.ts new file mode 100644 index 00000000..2c531e29 --- /dev/null +++ b/packages/test-app/types/global.d.ts @@ -0,0 +1 @@ +import '@glint/environment-ember-loose'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30488c74..82803ef3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,9 +24,6 @@ importers: '@babel/core': specifier: 7.25.8 version: 7.25.8 - '@babel/eslint-parser': - specifier: 7.25.9 - version: 7.25.9(@babel/core@7.25.8)(eslint@9.12.0) '@babel/plugin-proposal-class-properties': specifier: 7.18.6 version: 7.18.6(@babel/core@7.25.8) @@ -63,6 +60,9 @@ importers: '@types/ember': specifier: 4.0.11 version: 4.0.11(@babel/core@7.25.8) + '@types/ember__utils': + specifier: ^4.0.7 + version: 4.0.7(@babel/core@7.25.8) '@typescript-eslint/eslint-plugin': specifier: ^8.18.1 version: 8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.12.0)(typescript@5.7.2))(eslint@9.12.0)(typescript@5.7.2) @@ -129,6 +129,24 @@ importers: '@glimmer/tracking': specifier: 1.1.2 version: 1.1.2 + '@glint/core': + specifier: ^1.5.0 + version: 1.5.0(typescript@5.7.2) + '@glint/environment-ember-loose': + specifier: ^1.5.0 + version: 1.5.0(@glimmer/component@2.0.0)(@glint/template@1.5.0)(@types/ember__array@4.0.10(@babel/core@7.25.8))(@types/ember__component@4.0.22(@babel/core@7.25.8))(@types/ember__controller@4.0.12(@babel/core@7.25.8))(@types/ember__object@4.0.12(@babel/core@7.25.8))(@types/ember__routing@4.0.22(@babel/core@7.25.8))(ember-cli-htmlbars@6.3.0) + '@glint/environment-ember-template-imports': + specifier: ^1.5.0 + version: 1.5.0(@glint/environment-ember-loose@1.5.0(@glimmer/component@2.0.0)(@glint/template@1.5.0)(@types/ember__array@4.0.10(@babel/core@7.25.8))(@types/ember__component@4.0.22(@babel/core@7.25.8))(@types/ember__controller@4.0.12(@babel/core@7.25.8))(@types/ember__object@4.0.12(@babel/core@7.25.8))(@types/ember__routing@4.0.22(@babel/core@7.25.8))(ember-cli-htmlbars@6.3.0))(@glint/template@1.5.0)(@types/ember__component@4.0.22(@babel/core@7.25.8))(@types/ember__routing@4.0.22(@babel/core@7.25.8)) + '@tsconfig/ember': + specifier: ^3.0.8 + version: 3.0.8 + '@typescript-eslint/eslint-plugin': + specifier: ^8.18.1 + version: 8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.12.0)(typescript@5.7.2))(eslint@9.12.0)(typescript@5.7.2) + '@typescript-eslint/parser': + specifier: ^8.18.1 + version: 8.18.1(eslint@9.12.0)(typescript@5.7.2) broccoli-asset-rev: specifier: 3.0.0 version: 3.0.0 @@ -237,6 +255,9 @@ importers: symlink-or-copy: specifier: 1.3.1 version: 1.3.1 + typescript: + specifier: ^5.7.2 + version: 5.7.2 webpack: specifier: 5.95.0 version: 5.95.0