Skip to content

Commit ea7f093

Browse files
authored
Move docs to vite (#1019)
* Move docs to vite (run npx ember-vite-codemod@latest) * Remove ember-code-snippet * Drop ember-cli-sass * Update packages * Downgrade ember in docs * Downgrade glint
1 parent af171d3 commit ea7f093

18 files changed

+1140
-259
lines changed

docs/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
/tmp/
2+
13
# compiled output
24
/dist/
35
/declarations/

docs/app/app.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
import Application from '@ember/application';
22
import Resolver from 'ember-resolver';
33
import loadInitializers from 'ember-load-initializers';
4-
import config from 'docs/config/environment';
4+
import config from './config/environment';
55
import { importSync, isDevelopingApp, macroCondition } from '@embroider/macros';
66

7+
import compatModules from '@embroider/virtual/compat-modules';
8+
79
if (macroCondition(isDevelopingApp())) {
810
importSync('./deprecation-workflow');
911
}
1012

1113
export default class App extends Application {
1214
modulePrefix = config.modulePrefix;
1315
podModulePrefix = config.podModulePrefix;
14-
Resolver = Resolver;
16+
Resolver = Resolver.withModules(compatModules);
1517
}
1618

17-
loadInitializers(App, config.modulePrefix);
19+
loadInitializers(App, config.modulePrefix, compatModules);

docs/app/components/code-block.gts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import CodeInline from './code-inline';
44
interface CodeBlockSignature {
55
Element: HTMLElement;
66
Args: {
7-
code: string;
7+
fileName: string;
88
language?: string;
99
};
1010
}
@@ -17,7 +17,11 @@ export default class CodeBlock extends Component<CodeBlockSignature> {
1717
<template>
1818
<div class="code-block">
1919
{{~! ~}}
20-
<CodeInline ...attributes @code={{@code}} @language={{@language}} />
20+
<CodeInline
21+
...attributes
22+
@fileName={{@fileName}}
23+
@language={{@language}}
24+
/>
2125
{{~! ~}}
2226
</div>
2327
</template>

docs/app/components/code-example.gts

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import { on } from '@ember/modifier';
55
import { fn } from '@ember/helper';
66
import { eq, and } from 'ember-truth-helpers';
77
import CodeBlock from './code-block';
8-
// @ts-expect-error Could not find a declaration file for module 'ember-code-snippet'.
9-
import { getCodeSnippet } from 'ember-code-snippet';
108

119
interface CodeExampleSignature {
1210
Element: HTMLElement;
@@ -99,35 +97,33 @@ export default class CodeExample extends Component<CodeExampleSignature> {
9997
>Result</div>
10098
{{/if}}
10199
</nav>
102-
{{#if (and @glimmerTs (eq this.activeTab "glimmer-ts"))}}
103-
{{#let (getCodeSnippet @glimmerTs) as |snippet|}}
104-
<CodeBlock @language="gts" @code={{snippet.source}} />
105-
{{/let}}
100+
{{#if @glimmerTs}}
101+
{{#if (eq this.activeTab "glimmer-ts")}}
102+
<CodeBlock @language="gts" @fileName={{@glimmerTs}} />
103+
{{/if}}
106104
{{/if}}
107-
{{#if (and @hbs (eq this.activeTab "hbs"))}}
108-
{{#let (getCodeSnippet @hbs) as |snippet|}}
109-
<CodeBlock @language="handlebars" @code={{snippet.source}} />
110-
{{/let}}
105+
{{#if @hbs}}
106+
{{#if (eq this.activeTab "hbs")}}
107+
<CodeBlock @language="handlebars" @fileName={{@hbs}} />
108+
{{/if}}
111109
{{/if}}
112110
{{#if @hbs2}}
113-
{{#let (getCodeSnippet @hbs2) as |snippet|}}
114-
<CodeBlock @language="handlebars" @code={{snippet.source}} />
115-
{{/let}}
111+
<CodeBlock @language="handlebars" @fileName={{@hbs2}} />
116112
{{/if}}
117-
{{#if (and @js (eq this.activeTab "js"))}}
118-
{{#let (getCodeSnippet @js) as |snippet|}}
119-
<CodeBlock @language="js" @code={{snippet.source}} />
120-
{{/let}}
113+
{{#if @js}}
114+
{{#if (eq this.activeTab "js")}}
115+
<CodeBlock @language="js" @fileName={{@js}} />
116+
{{/if}}
121117
{{/if}}
122-
{{#if (and @scss (eq this.activeTab "scss"))}}
123-
{{#let (getCodeSnippet @scss) as |snippet|}}
124-
<CodeBlock @language="scss" @code={{snippet.source}} />
125-
{{/let}}
118+
{{#if @scss}}
119+
{{#if (eq this.activeTab "scss")}}
120+
<CodeBlock @language="scss" @fileName={{@scss}} />
121+
{{/if}}
126122
{{/if}}
127-
{{#if (and @css (eq this.activeTab "css"))}}
128-
{{#let (getCodeSnippet @css) as |snippet|}}
129-
<CodeBlock @language="css" @code={{snippet.source}} />
130-
{{/let}}
123+
{{#if @css}}
124+
{{#if (eq this.activeTab "css")}}
125+
<CodeBlock @language="css" @fileName={{@css}} />
126+
{{/if}}
131127
{{/if}}
132128
{{#if (and this.showResult (has-block))}}
133129
<div

docs/app/components/code-inline.gts

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,32 @@ import Component from '@glimmer/component';
22
import { modifier } from 'ember-modifier';
33
import { htmlSafe, type SafeString } from '@ember/template';
44
import { tracked } from '@glimmer/tracking';
5-
import { assert } from '@ember/debug';
65
import { codeToHtml } from 'shiki';
76
import { task } from 'ember-concurrency';
87

8+
const files = import.meta.glob('./snippets/*', {
9+
query: '?raw',
10+
import: 'default',
11+
}) as Record<string, () => Promise<string>>;
12+
13+
async function loadSnippet(name: string) {
14+
const path = `./snippets/${name}` as const;
15+
const loader = files[path];
16+
if (!loader) throw new Error(`File not found: ${path}`);
17+
return await loader();
18+
}
19+
920
interface CodeInlineSignature {
1021
Element: HTMLElement;
1122
Args: {
12-
code: string;
23+
fileName: string;
1324
language?: string;
1425
};
1526
}
1627

1728
export default class CodeInline extends Component<CodeInlineSignature> {
1829
@tracked prismCode: string | SafeString = '';
1930

20-
get code() {
21-
const code = this.args.code;
22-
23-
assert(
24-
"ember-prism's <CodeBlock/> and <CodeInline/> components require a `code` parameter to be passed in.",
25-
code !== undefined,
26-
);
27-
28-
return code;
29-
}
30-
3131
get language() {
3232
return this.args.language ?? 'markup';
3333
}
@@ -37,9 +37,10 @@ export default class CodeInline extends Component<CodeInlineSignature> {
3737
});
3838

3939
generateCode = task(async () => {
40-
const code = this.code;
4140
const language = this.language;
4241

42+
const code = await loadSnippet(this.args.fileName);
43+
4344
const htmlCode = await codeToHtml(code, {
4445
lang: language,
4546
theme: 'github-light-default',

docs/app/config/environment.d.ts

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

docs/app/config/environment.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import loadConfigFromMeta from '@embroider/config-meta-loader';
2+
import { assert } from '@ember/debug';
3+
4+
const config = loadConfigFromMeta('docs') as unknown;
5+
6+
assert(
7+
'config is not an object',
8+
typeof config === 'object' && config !== null,
9+
);
10+
assert(
11+
'modulePrefix was not detected on your config',
12+
'modulePrefix' in config && typeof config.modulePrefix === 'string',
13+
);
14+
assert(
15+
'locationType was not detected on your config',
16+
'locationType' in config && typeof config.locationType === 'string',
17+
);
18+
assert(
19+
'rootURL was not detected on your config',
20+
'rootURL' in config && typeof config.rootURL === 'string',
21+
);
22+
assert(
23+
'APP was not detected on your config',
24+
'APP' in config && typeof config.APP === 'object',
25+
);
26+
27+
export default config as {
28+
modulePrefix: string;
29+
podModulePrefix?: string;
30+
locationType: string;
31+
rootURL: string;
32+
APP: Record<string, unknown>;
33+
} & Record<string, unknown>;

docs/babel.config.cjs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
const {
2+
babelCompatSupport,
3+
templateCompatSupport,
4+
} = require('@embroider/compat/babel');
5+
6+
module.exports = {
7+
plugins: [
8+
[
9+
'@babel/plugin-transform-typescript',
10+
{
11+
allExtensions: true,
12+
onlyRemoveTypeImports: true,
13+
allowDeclareFields: true,
14+
},
15+
],
16+
[
17+
'babel-plugin-ember-template-compilation',
18+
{
19+
compilerPath: 'ember-source/dist/ember-template-compiler.js',
20+
enableLegacyModules: [
21+
'ember-cli-htmlbars',
22+
'ember-cli-htmlbars-inline-precompile',
23+
'htmlbars-inline-precompile',
24+
],
25+
transforms: [...templateCompatSupport()],
26+
},
27+
],
28+
[
29+
'module:decorator-transforms',
30+
{
31+
runtime: {
32+
import: require.resolve('decorator-transforms/runtime-esm'),
33+
},
34+
},
35+
],
36+
[
37+
'@babel/plugin-transform-runtime',
38+
{
39+
absoluteRuntime: __dirname,
40+
useESModules: true,
41+
regenerator: false,
42+
},
43+
],
44+
...babelCompatSupport(),
45+
],
46+
47+
generatorOpts: {
48+
compact: false,
49+
},
50+
};

docs/ember-cli-build.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
'use strict';
2-
32
const EmberApp = require('ember-cli/lib/broccoli/ember-app');
43

5-
module.exports = function (defaults) {
4+
const { compatBuild } = require('@embroider/compat');
5+
6+
module.exports = async function (defaults) {
7+
const { buildOnce } = await import('@embroider/vite');
8+
69
const app = new EmberApp(defaults, {
710
'ember-cli-babel': { enableTypeScriptTransform: true },
8-
snippetPaths: ['app/components/snippets'],
911
autoImport: {
1012
watchDependencies: ['ember-basic-dropdown'],
1113
},
@@ -16,6 +18,5 @@ module.exports = function (defaults) {
1618
},
1719
});
1820

19-
const { maybeEmbroider } = require('@embroider/test-setup');
20-
return maybeEmbroider(app);
21+
return compatBuild(app, buildOnce);
2122
};

docs/eslint.config.mjs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,6 @@ const parserOptions = {
3030
js: {
3131
ecmaFeatures: { modules: true },
3232
ecmaVersion: 'latest',
33-
requireConfigFile: false,
34-
babelOptions: {
35-
plugins: [
36-
[
37-
'@babel/plugin-proposal-decorators',
38-
{ decoratorsBeforeExport: true },
39-
],
40-
],
41-
},
4233
},
4334
ts: {
4435
projectService: true,

0 commit comments

Comments
 (0)