Skip to content

Commit

Permalink
Rename @embroider/core/entrypoint to @embroider/virtual/compat-module…
Browse files Browse the repository at this point in the history
…s, Resolving #2025

Approach #1: Create package, @embroider/virtual
  • Loading branch information
NullVoxPopuli committed Oct 2, 2024
1 parent f33728f commit ac242d3
Show file tree
Hide file tree
Showing 23 changed files with 235 additions and 11 deletions.
8 changes: 6 additions & 2 deletions packages/core/src/module-resolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -409,13 +409,17 @@ export class Resolver {
}

//TODO move the extra forwardslash handling out into the vite plugin
const candidates = ['@embroider/core/entrypoint', '/@embroider/core/entrypoint', './@embroider/core/entrypoint'];
const candidates = [
'@embroider/virtual/compat-modules',
'/@embroider/virtual/compat-modules',
'./@embroider/virtual/compat-modules',
];

if (!candidates.some(c => request.specifier.startsWith(c + '/') || request.specifier === c)) {
return request;
}

const result = /\.?\/?@embroider\/core\/entrypoint(?:\/(?<packageName>.*))?/.exec(request.specifier);
const result = /\.?\/?@embroider\/virtual\/compat-modules(?:\/(?<packageName>.*))?/.exec(request.specifier);

if (!result) {
// TODO make a better error
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/virtual-entrypoint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ export function renderEntrypoint(
// deliberately ignoring the app (which is the first entry in the engines array)
let [, ...childEngines] = resolver.options.engines;
for (let childEngine of childEngines) {
let target = `@embroider/core/entrypoint/${childEngine.packageName}`;
let target = `@embroider/virtual/compat-modules/${childEngine.packageName}`;

if (childEngine.isLazy) {
lazyEngines.push({
Expand Down
2 changes: 1 addition & 1 deletion packages/util/tests/dummy/app/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
{{content-for "body"}}

<script src="/@embroider/core/vendor.js"></script>
<script src="/@embroider/core/entrypoint" type="module"></script>
<script src="/@embroider/virtual/compat-modules" type="module"></script>

{{content-for "body-footer"}}
</body>
Expand Down
19 changes: 19 additions & 0 deletions packages/virtual/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org

root = true

[*]
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
indent_style = space
indent_size = 2

[*.hbs]
insert_final_newline = false

[*.{diff,md}]
trim_trailing_whitespace = false
27 changes: 27 additions & 0 deletions packages/virtual/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# unconventional js
/blueprints/*/files/
/vendor/

# compiled output
/dist/
/tmp/
/src/**/*.js
/src/**/*.d.ts

# dependencies
/bower_components/
/node_modules/

# misc
/coverage/
!.*
.*/
.eslintcache

# ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/npm-shrinkwrap.json.ember-try
/package.json.ember-try
/package-lock.json.ember-try
/yarn.lock.ember-try
80 changes: 80 additions & 0 deletions packages/virtual/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
'use strict';

module.exports = {
root: true,
parser: 'babel-eslint',
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
ecmaFeatures: {
legacyDecorators: true,
},
},
plugins: ['ember'],
extends: [
'eslint:recommended',
'plugin:ember/recommended',
'plugin:prettier/recommended',
],
env: {
browser: true,
},
overrides: [
// node files
{
files: [
'./.eslintrc.js',
'./.prettierrc.js',
'./.template-lintrc.js',
'./ember-cli-build.js',
'./addon-main.js',
'./testem.js',
'./blueprints/*/index.js',
'./config/**/*.js',
'./tests/dummy/config/**/*.js',
],
parserOptions: {
sourceType: 'script',
},
env: {
browser: false,
node: true,
},
plugins: ['node'],
extends: ['plugin:node/recommended'],
},
// node typescript files
{
files: ['src/**/*.ts'],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 2017,
sourceType: 'module',
},
plugins: ['@typescript-eslint'],
extends: ['prettier'],
rules: {
'@typescript-eslint/naming-convention': [
'error',
{
selector: 'typeLike',
format: ['PascalCase'],
},
],
'@typescript-eslint/consistent-type-assertions': 'error',
'@typescript-eslint/no-inferrable-types': 'error',
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_' },
],
'no-unused-vars': 'off',
'@typescript-eslint/no-require-imports': 'error',
},
},
{
// test files
files: ['tests/**/*-test.{js,ts}'],
extends: ['plugin:qunit/recommended'],
},
],
};
25 changes: 25 additions & 0 deletions packages/virtual/.prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# unconventional js
/blueprints/*/files/
/vendor/

# compiled output
/dist/
/tmp/

# dependencies
/bower_components/
/node_modules/

# misc
/coverage/
!.*
.eslintcache
.lint-todo/

# ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/npm-shrinkwrap.json.ember-try
/package.json.ember-try
/package-lock.json.ember-try
/yarn.lock.ember-try
12 changes: 12 additions & 0 deletions packages/virtual/.prettierrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
'use strict';

module.exports = {
overrides: [
{
files: '*{js,ts}',
options: {
singleQuote: true,
},
},
],
};
21 changes: 21 additions & 0 deletions packages/virtual/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"name":"@embroider/virtual",
"version": "0.0.0",
"description": "Provides types for virtual modules",
"exports": {
".": "./src/not-used.js",
"./compat-modules": {
"types": "./src/compat-modules.d.ts",
"default": "./src/not-used.js"
},
"./*": "./src/not-used.js"
},
"typesVersions": {
"*": {
"*": ["./src/*"]
}
},
"files": [
"src"
]
}
7 changes: 7 additions & 0 deletions packages/virtual/src/compat-modules.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
interface UnknownModule {
[exportName: string]: unknown;
}

declare const compatModules: Record<string, UnknownModule>;

export default compatModules;
12 changes: 12 additions & 0 deletions packages/virtual/src/not-used.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/**
* This file exists to appease both type checking and require.resolve
* checks for the existance of `@embroider/virtual`.
*
* This library has a '.' entrypoint which points to this file for require.resolve (if a consumer needed), as well as every other export.
*
* Real types are provided for the non-'.' exports.
*/

throw new Error(
`@embroider/virtual module loaded at runtime! This is likely a mistake. Make sure that you have all the needed plugins for virtually providing embroider's virtual modules.`
);
14 changes: 14 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion test-packages/sample-transforms/tests/dummy/app/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
{{content-for "body"}}

<script src="/@embroider/core/vendor.js"></script>
<script src="/@embroider/core/entrypoint" type="module"></script>
<script src="/@embroider/virtual/compat-modules" type="module"></script>

{{content-for "body-footer"}}
</body>
Expand Down
2 changes: 1 addition & 1 deletion test-packages/sample-transforms/tests/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
<script src="/testem.js" integrity=""></script>
<script src="/@embroider/core/vendor.js"></script>
<script src="/@embroider/core/test-support.js"></script>
<script src="/@embroider/core/entrypoint" type="module"></script>
<script src="/@embroider/virtual/compat-modules" type="module"></script>
<script type="module">import "ember-testing";</script>

<script type="module">
Expand Down
1 change: 1 addition & 0 deletions tests/addon-template/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
"@embroider/compat": "workspace:*",
"@embroider/core": "workspace:*",
"@embroider/test-setup": "workspace:*",
"@embroider/virtual": "workspace:*",
"@embroider/vite": "workspace:*",
"@glimmer/component": "^1.1.2",
"@glimmer/tracking": "^1.1.2",
Expand Down
2 changes: 1 addition & 1 deletion tests/addon-template/tests/dummy/app/app.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Application from '@ember/application';
import compatModules from '@embroider/core/entrypoint';
import compatModules from '@embroider/virtual/compat-modules';
import Resolver from 'ember-resolver';
import loadInitializers from 'ember-load-initializers';
import config from 'dummy/config/environment';
Expand Down
2 changes: 1 addition & 1 deletion tests/app-template/app/app.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Application from '@ember/application';
import compatModules from '@embroider/core/entrypoint';
import compatModules from '@embroider/virtual/compat-modules';
import Resolver from 'ember-resolver';
import loadInitializers from 'ember-load-initializers';
import config from './config/environment';
Expand Down
1 change: 1 addition & 0 deletions tests/app-template/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
"@embroider/core": "workspace:*",
"@embroider/router": "workspace:*",
"@embroider/test-setup": "workspace:*",
"@embroider/virtual": "workspace:*",
"@embroider/vite": "workspace:*",
"@glimmer/component": "^1.1.2",
"@glimmer/tracking": "^1.1.2",
Expand Down
2 changes: 1 addition & 1 deletion tests/scenarios/compat-renaming-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ appScenarios
import utilsIndex from 'somebody-elses-package/utils/index';
import utilsIndexJS from 'somebody-elses-package/utils/index.js';
import singleFilePackage from 'single-file-package';
import compat from '@embroider/core/entrypoint';
import compat from '@embroider/virtual/compat-modules';
module('Unit | basics', function () {
test('whole package renaming works for top-level module', async function (assert) {
Expand Down
1 change: 1 addition & 0 deletions tests/ts-app-template-classic/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
"@embroider/core": "workspace:*",
"@embroider/router": "workspace:*",
"@embroider/test-setup": "workspace:*",
"@embroider/virtual": "workspace:*",
"@embroider/vite": "workspace:*",
"@glimmer/component": "^1.1.2",
"@glimmer/interfaces": "^0.84.2",
Expand Down
2 changes: 1 addition & 1 deletion tests/ts-app-template/app/app.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Application from '@ember/application';
import compatModules from '@embroider/core/entrypoint';
import compatModules from '@embroider/virtual/compat-modules';
import Resolver from 'ember-resolver';
import loadInitializers from 'ember-load-initializers';
import config from 'ts-app-template/config/environment';
Expand Down
1 change: 1 addition & 0 deletions tests/ts-app-template/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"@embroider/core": "workspace:*",
"@embroider/router": "workspace:*",
"@embroider/test-setup": "workspace:*",
"@embroider/virtual": "workspace:*",
"@embroider/vite": "workspace:*",
"@glimmer/component": "^1.1.2",
"@glimmer/interfaces": "^0.84.2",
Expand Down
1 change: 0 additions & 1 deletion tests/ts-app-template/types/ts-app-template/entry.d.ts

This file was deleted.

0 comments on commit ac242d3

Please sign in to comment.