From 5938936d9d7471d1ab03e0dbe1ee9eba23f47634 Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Fri, 17 Mar 2023 08:44:10 -0400 Subject: [PATCH] Add option for the old behavior --- .changeset/odd-vans-repair.md | 21 +++++ README.md | 38 +++++++++ .../src/rollup-plugin.js | 25 +++++- packages/test-app/package.json | 1 + .../tests/integration/loose-mode-test.ts | 10 +++ packages/test-app/types/index.d.ts | 6 +- .../test-rollup-addon-split-gts/.eslintignore | 1 + .../test-rollup-addon-split-gts/.eslintrc.cjs | 9 ++ .../test-rollup-addon-split-gts/.gitignore | 1 + .../.prettierignore | 1 + .../.prettierrc.cjs | 6 ++ .../addon-main.cjs | 5 ++ .../babel.config.json | 15 ++++ .../test-rollup-addon-split-gts/package.json | 83 +++++++++++++++++++ .../rollup.config.mjs | 28 +++++++ .../src/components/ts-split-class-demo.gts | 15 ++++ .../src/components/ts-split-demo.gts | 5 ++ .../src/glint-registry.ts | 6 ++ .../test-rollup-addon-split-gts/src/index.ts | 2 + .../test-rollup-addon-split-gts/tsconfig.json | 7 ++ .../unpublished-development-types/index.d.ts | 2 + pnpm-lock.yaml | 63 +++++++++++++- 22 files changed, 343 insertions(+), 7 deletions(-) create mode 100644 .changeset/odd-vans-repair.md create mode 100644 packages/test-rollup-addon-split-gts/.eslintignore create mode 100644 packages/test-rollup-addon-split-gts/.eslintrc.cjs create mode 100644 packages/test-rollup-addon-split-gts/.gitignore create mode 100644 packages/test-rollup-addon-split-gts/.prettierignore create mode 100644 packages/test-rollup-addon-split-gts/.prettierrc.cjs create mode 100644 packages/test-rollup-addon-split-gts/addon-main.cjs create mode 100644 packages/test-rollup-addon-split-gts/babel.config.json create mode 100644 packages/test-rollup-addon-split-gts/package.json create mode 100644 packages/test-rollup-addon-split-gts/rollup.config.mjs create mode 100644 packages/test-rollup-addon-split-gts/src/components/ts-split-class-demo.gts create mode 100644 packages/test-rollup-addon-split-gts/src/components/ts-split-demo.gts create mode 100644 packages/test-rollup-addon-split-gts/src/glint-registry.ts create mode 100644 packages/test-rollup-addon-split-gts/src/index.ts create mode 100644 packages/test-rollup-addon-split-gts/tsconfig.json create mode 100644 packages/test-rollup-addon-split-gts/unpublished-development-types/index.d.ts diff --git a/.changeset/odd-vans-repair.md b/.changeset/odd-vans-repair.md new file mode 100644 index 0000000..dd53be8 --- /dev/null +++ b/.changeset/odd-vans-repair.md @@ -0,0 +1,21 @@ +--- +"rollup-plugin-glimmer-template-tag": minor +--- + +Add option to the rollup plugin so that folks can choose to separately due to the two-step transform. + +In 0.2.0, it became possible to _only_ use the rollup plugin for the entirety of the transform, whereas in 0.1.0, a babel plugin was needed as well. + +In this version, you may go back to the 0.1.0 style configuration via: + +```js +// rollup.config.mjs +export default { + output: addon.output(), + plugins: [ + // ... + glimmerTemplateTag({ preprocessOnly: true }), + // ... + ], +}; +``` diff --git a/README.md b/README.md index f6b2f83..5ed668a 100644 --- a/README.md +++ b/README.md @@ -129,3 +129,41 @@ Without setting `transpileOnly: true` (using the default or explicitly setting t This exposes internal information about the `<template>` transformation process. Though, you could try to get around the issue if you _really_ want `transpileOnly: false` by `declare module`ing for `@ember/template-compilation` in your `unpublished-development-types` _except_ that `@ember/template-compilation` is not presently a real package, so the part of the error saying `Cannot find module ` is still true, even though a corresponding type declaration is defined -- both the module and the type declarations are needed. + +### Manually choosing the two-stage transformation + +There is an option available to the rollup plugin so that folks can choose to separately due to the two-step transform. + +Normally, these are done wholly within the rollup plugin: + 1. preprocess the `<template>` tag into a secret internal format + 2. convert that secret internal format into vanilla JS that a consuming build environment knows how to handle + +However, for performance or compatibility reasons, it may not be desireable to allow both steps to be handled automatically. + +You'd want these changes to your config files: + +```js +// rollup.config.mjs +export default { + output: addon.output(), + plugins: [ + // ... + glimmerTemplateTag({ preprocessOnly: true }), + // ... + ], +}; +``` + +```diff + // babel.config.js / json / etc + 'use strict'; + module.exports = { + plugins: [ ++ 'ember-template-imports/src/babel-plugin', + '@embroider/addon-dev/template-colocation-plugin', + ['@babel/plugin-proposal-decorators', { legacy: true }], + '@babel/plugin-proposal-class-properties' + ] + }; +``` + diff --git a/packages/rollup-plugin-glimmer-template-tag/src/rollup-plugin.js b/packages/rollup-plugin-glimmer-template-tag/src/rollup-plugin.js index b385e77..df25aa0 100644 --- a/packages/rollup-plugin-glimmer-template-tag/src/rollup-plugin.js +++ b/packages/rollup-plugin-glimmer-template-tag/src/rollup-plugin.js @@ -13,8 +13,20 @@ import { TEMPLATE_TAG_NAME, TEMPLATE_TAG_PLACEHOLDER } from 'ember-template-impo const PLUGIN_KEY = 'glimmer-template-tag'; const RELEVANT_EXTENSION_REGEX = /\.g([jt]s)$/; -/** @type {PluginImpl} */ -export function glimmerTemplateTag() { +/** + * Rollup plugin that does a two-phase transform to convert <template> tags to vanilla JS. + * 1. preprocess the <template> tag into a secret internal format + * 2. convert that secret internal format into vanilla JS that a consuming build environment knows how to handle + * + * @typedef {object} Options + * @property {boolean} [preprocessOnly] tells this rollup plugin to only do the first part of the <template> transform + * @param {Options} options + * + * @type {PluginImpl} + * */ +export function glimmerTemplateTag(options) { + let { preprocessOnly } = options || {}; + return { name: 'preprocess-glimmer-template-tag', async resolveId(source, importer, options) { @@ -50,7 +62,7 @@ export function glimmerTemplateTag() { } if (RELEVANT_EXTENSION_REGEX.test(originalId)) { - return transformGlimmerTemplateTag(originalId); + return transformGlimmerTemplateTag(originalId, preprocessOnly); } return; @@ -60,10 +72,15 @@ export function glimmerTemplateTag() { /** * @param {string} originalId + * @param {boolean} [ preprocessOnly ] */ -async function transformGlimmerTemplateTag(originalId) { +async function transformGlimmerTemplateTag(originalId, preprocessOnly) { let intermediate = await preprocessTemplates(originalId); + if (preprocessOnly) { + return intermediate; + } + let config = await babel.loadPartialConfigAsync(); // Use the basename so we don't accidentally operate on real files diff --git a/packages/test-app/package.json b/packages/test-app/package.json index 75d6049..8101da2 100644 --- a/packages/test-app/package.json +++ b/packages/test-app/package.json @@ -23,6 +23,7 @@ }, "dependencies": { "@nullvoxpopuli/test-rollup-addon-gjs": "workspace:*", + "@nullvoxpopuli/test-rollup-addon-split-gts": "workspace:*", "@nullvoxpopuli/test-rollup-addon-gts": "workspace:*" }, "devDependencies": { diff --git a/packages/test-app/tests/integration/loose-mode-test.ts b/packages/test-app/tests/integration/loose-mode-test.ts index 7a9cc93..4f56389 100644 --- a/packages/test-app/tests/integration/loose-mode-test.ts +++ b/packages/test-app/tests/integration/loose-mode-test.ts @@ -25,4 +25,14 @@ module('loose mode', function (hooks) { assert.dom().containsText('TS Demo: Hello World'); assert.dom().containsText('TS Class Demo: Hello World'); }); + + test('ts components using the split compilation are correct', async function (assert) { + await render(hbs` + <TsSplitDemo /> + <TsSplitClassDemo /> + `); + + assert.dom().containsText('TS Split Demo: Hello World'); + assert.dom().containsText('TS Split Class Demo: Hello World'); + }); }); diff --git a/packages/test-app/types/index.d.ts b/packages/test-app/types/index.d.ts index 834911b..91ba142 100644 --- a/packages/test-app/types/index.d.ts +++ b/packages/test-app/types/index.d.ts @@ -5,9 +5,13 @@ import '@glint/environment-ember-loose/native-integration'; import type { Registry as JSRegistry } from '@nullvoxpopuli/test-rollup-addon-gjs/glint-registry'; import type { Registry as TSRegistry } from '@nullvoxpopuli/test-rollup-addon-gts/glint-registry'; +import type { Registry as TSSplitRegistry } from '@nullvoxpopuli/test-rollup-addon-split-gts/glint-registry'; declare module '@glint/environment-ember-loose/registry' { - export default interface Registry extends JSRegistry, TSRegistry { + export default interface Registry + extends JSRegistry, + TSRegistry, + TSSplitRegistry { // Custom stuff would be added here, but we don't // yet have anything custom in the globals } diff --git a/packages/test-rollup-addon-split-gts/.eslintignore b/packages/test-rollup-addon-split-gts/.eslintignore new file mode 100644 index 0000000..849ddff --- /dev/null +++ b/packages/test-rollup-addon-split-gts/.eslintignore @@ -0,0 +1 @@ +dist/ diff --git a/packages/test-rollup-addon-split-gts/.eslintrc.cjs b/packages/test-rollup-addon-split-gts/.eslintrc.cjs new file mode 100644 index 0000000..bd51a22 --- /dev/null +++ b/packages/test-rollup-addon-split-gts/.eslintrc.cjs @@ -0,0 +1,9 @@ +'use strict'; + +const { configs } = require('@nullvoxpopuli/eslint-configs'); + +let config = configs.ember(); + +module.exports = { + overrides: [...config.overrides], +}; diff --git a/packages/test-rollup-addon-split-gts/.gitignore b/packages/test-rollup-addon-split-gts/.gitignore new file mode 100644 index 0000000..849ddff --- /dev/null +++ b/packages/test-rollup-addon-split-gts/.gitignore @@ -0,0 +1 @@ +dist/ diff --git a/packages/test-rollup-addon-split-gts/.prettierignore b/packages/test-rollup-addon-split-gts/.prettierignore new file mode 100644 index 0000000..849ddff --- /dev/null +++ b/packages/test-rollup-addon-split-gts/.prettierignore @@ -0,0 +1 @@ +dist/ diff --git a/packages/test-rollup-addon-split-gts/.prettierrc.cjs b/packages/test-rollup-addon-split-gts/.prettierrc.cjs new file mode 100644 index 0000000..7cdd43b --- /dev/null +++ b/packages/test-rollup-addon-split-gts/.prettierrc.cjs @@ -0,0 +1,6 @@ +'use strict'; + +module.exports = { + singleQuote: true, + printWidth: 100, +}; diff --git a/packages/test-rollup-addon-split-gts/addon-main.cjs b/packages/test-rollup-addon-split-gts/addon-main.cjs new file mode 100644 index 0000000..d36b0c8 --- /dev/null +++ b/packages/test-rollup-addon-split-gts/addon-main.cjs @@ -0,0 +1,5 @@ +'use strict'; + +const { addonV1Shim } = require('@embroider/addon-shim'); + +module.exports = addonV1Shim(__dirname); diff --git a/packages/test-rollup-addon-split-gts/babel.config.json b/packages/test-rollup-addon-split-gts/babel.config.json new file mode 100644 index 0000000..00793ca --- /dev/null +++ b/packages/test-rollup-addon-split-gts/babel.config.json @@ -0,0 +1,15 @@ +{ + "presets": ["@babel/preset-typescript"], + "plugins": [ + "ember-template-imports/src/babel-plugin", + [ + "@babel/plugin-transform-typescript", + { + "allowDeclareFields": true + } + ], + "@embroider/addon-dev/template-colocation-plugin", + ["@babel/plugin-proposal-decorators", { "legacy": true }], + "@babel/plugin-proposal-class-properties" + ] +} diff --git a/packages/test-rollup-addon-split-gts/package.json b/packages/test-rollup-addon-split-gts/package.json new file mode 100644 index 0000000..dd8b304 --- /dev/null +++ b/packages/test-rollup-addon-split-gts/package.json @@ -0,0 +1,83 @@ +{ + "name": "@nullvoxpopuli/test-rollup-addon-split-gts", + "version": "0.0.0", + "private": true, + "keywords": [ + "ember-addon" + ], + "exports": { + ".": "dist/index.js", + "./components/ts-split-demo": "dist/components/ts-split-demo.js", + "./components/ts-split-class-demo": "dist/components/ts-split-class-demo.js", + "./glint-registry": { + "types": "dist/glint-registry.d.ts" + } + }, + "typesVersions": { + "*": { + "glint-registry": [ + "dist/glint-registry.d.ts" + ] + } + }, + "files": [ + "dist", + "addon-main.cjs" + ], + "scripts": { + "build": "rollup -c", + "lint": "concurrently 'npm:lint:*(!fix)' --names 'lint:'", + "lint:types": "glint", + "lint:fix": "concurrently 'npm:lint:*:fix' --names 'fix:'", + "lint:js": "eslint . --cache", + "lint:prettier": "prettier --check .", + "lint:prettier:fix": "prettier --write .", + "lint:js:fix": "eslint . --fix" + }, + "devDependencies": { + "@babel/core": "^7.21.3", + "@babel/eslint-parser": "^7.21.3", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-decorators": "^7.21.0", + "@babel/preset-typescript": "^7.21.0", + "@babel/runtime": "^7.21.0", + "@embroider/addon-dev": "^3.0.0", + "@glimmer/component": "^1.1.2", + "@glint/core": "^1.0.0-beta.3", + "@glint/environment-ember-loose": "^1.0.0-beta.3", + "@glint/environment-ember-template-imports": "^1.0.0-beta.3", + "@glint/template": "^1.0.0-beta.3", + "@nullvoxpopuli/eslint-configs": "^3.1.3", + "@tsconfig/ember": "^2.0.0", + "@types/rsvp": "^4.0.4", + "ember-source": "^4.11.0", + "ember-template-imports": "^3.4.1", + "eslint": "^8.36.0", + "eslint-plugin-ember": "^11.4.7", + "eslint-plugin-qunit": "^7.3.4", + "prettier": "^2.8.4", + "rollup": "^3.19.1", + "rollup-plugin-glimmer-template-tag": "workspace:*", + "rollup-plugin-ts": "^3.2.0", + "typescript": "^4.9.5" + }, + "ember-addon": { + "version": 2, + "type": "addon", + "main": "addon-main.cjs", + "app-js": { + "./components/ts-split-class-demo.js": "./dist/_app_/components/ts-split-class-demo.js", + "./components/ts-split-demo.js": "./dist/_app_/components/ts-split-demo.js" + } + }, + "dependencies": { + "@embroider/addon-shim": "^1.8.4" + }, + "peerDependencies": { + "@glimmer/component": "^1.1.2", + "ember-source": "^4.11.0" + }, + "volta": { + "extends": "../../package.json" + } +} diff --git a/packages/test-rollup-addon-split-gts/rollup.config.mjs b/packages/test-rollup-addon-split-gts/rollup.config.mjs new file mode 100644 index 0000000..2e8376f --- /dev/null +++ b/packages/test-rollup-addon-split-gts/rollup.config.mjs @@ -0,0 +1,28 @@ +import { Addon } from '@embroider/addon-dev/rollup'; + +import typescript from 'rollup-plugin-ts'; +import { defineConfig } from 'rollup'; +import { glimmerTemplateTag } from 'rollup-plugin-glimmer-template-tag'; + +const addon = new Addon({ + srcDir: 'src', + destDir: 'dist', +}); + +export default defineConfig({ + output: addon.output(), + plugins: [ + addon.publicEntrypoints(['**/*.js']), + addon.appReexports(['components/**/*.js']), + glimmerTemplateTag({ preprocessOnly: true }), + typescript({ + transpiler: 'babel', + // Babel defaults to "guessing" when there is no browserslist past + // We want to do the least amount of work + browserslist: ['last 1 firefox versions'], + transpileOnly: true, + }), + addon.dependencies(), + addon.clean(), + ], +}); diff --git a/packages/test-rollup-addon-split-gts/src/components/ts-split-class-demo.gts b/packages/test-rollup-addon-split-gts/src/components/ts-split-class-demo.gts new file mode 100644 index 0000000..0cdd9ff --- /dev/null +++ b/packages/test-rollup-addon-split-gts/src/components/ts-split-class-demo.gts @@ -0,0 +1,15 @@ +import Component from '@glimmer/component'; +import { service } from '@ember/service'; + +import type RouterService from '@ember/routing/router-service'; + +export default class TsClassDemo extends Component { + // Need TS Syntax for confident test + @service declare router: RouterService; + + greeting = 'Hello World!'; + + <template> + TS Split Class Demo: {{this.greeting}} + </template> +} diff --git a/packages/test-rollup-addon-split-gts/src/components/ts-split-demo.gts b/packages/test-rollup-addon-split-gts/src/components/ts-split-demo.gts new file mode 100644 index 0000000..32ba743 --- /dev/null +++ b/packages/test-rollup-addon-split-gts/src/components/ts-split-demo.gts @@ -0,0 +1,5 @@ +const greeting = 'Hello World!'; + +<template> + TS Split Demo: {{greeting}} +</template> diff --git a/packages/test-rollup-addon-split-gts/src/glint-registry.ts b/packages/test-rollup-addon-split-gts/src/glint-registry.ts new file mode 100644 index 0000000..af6fee0 --- /dev/null +++ b/packages/test-rollup-addon-split-gts/src/glint-registry.ts @@ -0,0 +1,6 @@ +import type { ComponentLike } from '@glint/template'; + +export interface Registry { + TsSplitDemo: ComponentLike; + TsSplitClassDemo: ComponentLike; +} diff --git a/packages/test-rollup-addon-split-gts/src/index.ts b/packages/test-rollup-addon-split-gts/src/index.ts new file mode 100644 index 0000000..03eab54 --- /dev/null +++ b/packages/test-rollup-addon-split-gts/src/index.ts @@ -0,0 +1,2 @@ +export { default as TSClassDemo } from './components/ts-split-class-demo'; +export { default as TSDemo } from './components/ts-split-demo'; diff --git a/packages/test-rollup-addon-split-gts/tsconfig.json b/packages/test-rollup-addon-split-gts/tsconfig.json new file mode 100644 index 0000000..33809bb --- /dev/null +++ b/packages/test-rollup-addon-split-gts/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "@tsconfig/ember/tsconfig.json", + "include": ["src/**/*", "unpublished-development-types/**/*"], + "glint": { + "environment": ["ember-loose", "ember-template-imports"] + } +} diff --git a/packages/test-rollup-addon-split-gts/unpublished-development-types/index.d.ts b/packages/test-rollup-addon-split-gts/unpublished-development-types/index.d.ts new file mode 100644 index 0000000..2109bac --- /dev/null +++ b/packages/test-rollup-addon-split-gts/unpublished-development-types/index.d.ts @@ -0,0 +1,2 @@ +import 'ember-source/types'; +import 'ember-source/types/preview'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b1347c..f81f601 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -63,6 +63,7 @@ importers: '@nullvoxpopuli/eslint-configs': ^3.1.3 '@nullvoxpopuli/test-rollup-addon-gjs': workspace:* '@nullvoxpopuli/test-rollup-addon-gts': workspace:* + '@nullvoxpopuli/test-rollup-addon-split-gts': workspace:* '@tsconfig/ember': ^2.0.0 '@types/qunit': ^2.19.4 '@types/rsvp': ^4.0.4 @@ -107,6 +108,7 @@ importers: dependencies: '@nullvoxpopuli/test-rollup-addon-gjs': link:../test-rollup-addon-gjs '@nullvoxpopuli/test-rollup-addon-gts': link:../test-rollup-addon-gts + '@nullvoxpopuli/test-rollup-addon-split-gts': link:../test-rollup-addon-split-gts devDependencies: '@ember/optional-features': 2.0.0 '@ember/string': 3.0.1 @@ -253,6 +255,63 @@ importers: rollup-plugin-ts: 3.2.0_ydk6ocwts2f26py227ahyuhk5i typescript: 4.9.5 + packages/test-rollup-addon-split-gts: + specifiers: + '@babel/core': ^7.21.3 + '@babel/eslint-parser': ^7.21.3 + '@babel/plugin-proposal-class-properties': ^7.18.6 + '@babel/plugin-proposal-decorators': ^7.21.0 + '@babel/preset-typescript': ^7.21.0 + '@babel/runtime': ^7.21.0 + '@embroider/addon-dev': ^3.0.0 + '@embroider/addon-shim': ^1.8.4 + '@glimmer/component': ^1.1.2 + '@glint/core': ^1.0.0-beta.3 + '@glint/environment-ember-loose': ^1.0.0-beta.3 + '@glint/environment-ember-template-imports': ^1.0.0-beta.3 + '@glint/template': ^1.0.0-beta.3 + '@nullvoxpopuli/eslint-configs': ^3.1.3 + '@tsconfig/ember': ^2.0.0 + '@types/rsvp': ^4.0.4 + ember-source: ^4.11.0 + ember-template-imports: ^3.4.1 + eslint: ^8.36.0 + eslint-plugin-ember: ^11.4.7 + eslint-plugin-qunit: ^7.3.4 + prettier: ^2.8.4 + rollup: ^3.19.1 + rollup-plugin-glimmer-template-tag: workspace:* + rollup-plugin-ts: ^3.2.0 + typescript: ^4.9.5 + dependencies: + '@embroider/addon-shim': 1.8.4 + devDependencies: + '@babel/core': 7.21.3 + '@babel/eslint-parser': 7.21.3_pxuto7xgangxlusvzceggvrmde + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-decorators': 7.21.0_@babel+core@7.21.3 + '@babel/preset-typescript': 7.21.0_@babel+core@7.21.3 + '@babel/runtime': 7.21.0 + '@embroider/addon-dev': 3.0.0_rollup@3.19.1 + '@glimmer/component': 1.1.2_@babel+core@7.21.3 + '@glint/core': 1.0.0-beta.3_typescript@4.9.5 + '@glint/environment-ember-loose': 1.0.0-beta.3_acn5lxfzqsyvoloees6qvx3wku + '@glint/environment-ember-template-imports': 1.0.0-beta.3_vycqboguq2ondhtbsrsjhy7tvi + '@glint/template': 1.0.0-beta.3 + '@nullvoxpopuli/eslint-configs': 3.1.3_yrs52uff32x2ahkkmgmhaom464 + '@tsconfig/ember': 2.0.0 + '@types/rsvp': 4.0.4 + ember-source: 4.11.0_wdt64mjlww5fpvzagecura56i4 + ember-template-imports: 3.4.1 + eslint: 8.36.0 + eslint-plugin-ember: 11.4.7_eslint@8.36.0 + eslint-plugin-qunit: 7.3.4_eslint@8.36.0 + prettier: 2.8.4 + rollup: 3.19.1 + rollup-plugin-glimmer-template-tag: link:../rollup-plugin-glimmer-template-tag + rollup-plugin-ts: 3.2.0_ydk6ocwts2f26py227ahyuhk5i + typescript: 4.9.5 + packages: /@ampproject/remapping/2.2.0: @@ -2941,7 +3000,7 @@ packages: '@types/ember__routing': optional: true dependencies: - '@glint/environment-ember-loose': 1.0.0-beta.3_wt3zkvip3eqybjfuwsq2agrquy + '@glint/environment-ember-loose': 1.0.0-beta.3_acn5lxfzqsyvoloees6qvx3wku '@glint/template': 1.0.0-beta.3 ember-template-imports: 3.4.1 dev: true @@ -8150,7 +8209,7 @@ packages: debug: 4.3.4 enhanced-resolve: 5.12.0 eslint: 8.36.0 - eslint-plugin-import: 2.27.5_v7jo3sddp7aqau7pajjy572cju + eslint-plugin-import: 2.27.5_dw7h2zvvpl2lt26j7ah2hqkw6y get-tsconfig: 4.4.0 globby: 13.1.3 is-core-module: 2.11.0