Skip to content

Commit d2621a7

Browse files
create-spectacle CLI: Fix generated spectacle version, add custom types for MD build. (#1313)
* Fix generated Spectacle version in CLI, add custom types to MD output. * Changeset * Use require() for JSON import * Update cli.test.ts
1 parent 2e95eca commit d2621a7

File tree

6 files changed

+69
-23
lines changed

6 files changed

+69
-23
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'create-spectacle': patch
3+
---
4+
5+
Fix generated Spectacle version in CLI, add custom types to MD output.

packages/create-spectacle/src/cli.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ describe('create-spectacle', () => {
7777
'.babelrc',
7878
'.gitignore',
7979
'README.md',
80+
'custom.d.ts',
8081
'index.html',
8182
'index.tsx',
8283
'package.json',

packages/create-spectacle/src/cli.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@ import {
1414
writeOnePageHTMLFile,
1515
writeViteProjectFiles
1616
} from './templates/file-writers';
17-
// @ts-ignore
18-
import { devDependencies } from '../package.json';
1917

18+
const spectaclePackage = require(`${__dirname}/../spectacle-package.json`);
2019
const argv = yargs(hideBin(process.argv)).argv;
2120
const cwd = process.cwd();
2221

@@ -176,7 +175,7 @@ const main = async () => {
176175
lang,
177176
port,
178177
isVite: /vite$/.test(type),
179-
spectacleVersion: devDependencies.spectacle
178+
spectacleVersion: spectaclePackage.version
180179
};
181180

182181
switch (type) {

packages/create-spectacle/src/templates/file-writers.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { gitignoreTemplate } from './gitignore';
1010
import { readmeTemplate } from './readme';
1111
import { viteConfigTemplate } from './viteConfig';
1212
import { createOnePage } from '../generators/one-page';
13-
import { markdownTemplate } from './markdown';
13+
import { markdownCustomTypesTemplate, markdownTemplate } from './markdown';
1414

1515
export type FileOptions = {
1616
snakeCaseName: string;
@@ -52,7 +52,10 @@ const prepForProjectWrite = async (fileOptions: FileOptions) => {
5252
await writeFile(pathFor('README.md'), readmeTemplate({ name, isVite }));
5353
await writeFile(pathFor('tsconfig.json'), tsconfigTemplate());
5454
fileOptions.useMarkdownSlides &&
55-
(await writeFile(pathFor('slides.md'), markdownTemplate({ name })));
55+
(await Promise.all([
56+
writeFile(pathFor('custom.d.ts'), markdownCustomTypesTemplate()),
57+
writeFile(pathFor('slides.md'), markdownTemplate({ name }))
58+
]));
5659

5760
return { outPath, pathFor };
5861
};

packages/create-spectacle/src/templates/index.ts

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,29 @@ type IndexTemplateOptions = {
33
usesMarkdown: boolean;
44
};
55

6-
const tsxImports = `
7-
import { Deck, DefaultTemplate, Slide, FlexBox, Heading, SpectacleLogo } from 'spectacle';
8-
`;
6+
const content = {
7+
reactImports() {
8+
return `
9+
import React from 'react';
10+
import { createRoot } from 'react-dom/client';
11+
import { Deck, DefaultTemplate, Slide, FlexBox, Heading, SpectacleLogo } from 'spectacle'
12+
`;
13+
},
914

10-
const mdImports = `
15+
mdImports() {
16+
return `
17+
import React from 'react';
18+
import { createRoot } from 'react-dom/client';
1119
import { Deck, DefaultTemplate, MarkdownSlideSet } from 'spectacle';
1220
import mdContent from './slides.md';
13-
`;
14-
15-
export const indexTemplate = (options: IndexTemplateOptions) =>
16-
`import React from 'react';
17-
import { createRoot } from 'react-dom/client';
18-
${(options.usesMarkdown ? mdImports : tsxImports).trim()}
21+
`;
22+
},
1923

20-
const Presentation = () => (
21-
<Deck template={() => <DefaultTemplate />}>
22-
${(options.usesMarkdown
23-
? `<MarkdownSlideSet>{mdContent}</MarkdownSlideSet>`
24-
: `
24+
reactBody(name: string) {
25+
return `
2526
<Slide>
2627
<FlexBox height="100%">
27-
<Heading>${options.name}</Heading>
28+
<Heading>${name}</Heading>
2829
</FlexBox>
2930
</Slide>
3031
<Slide>
@@ -34,9 +35,38 @@ const Presentation = () => (
3435
</FlexBox>
3536
</Slide>
3637
`
37-
).trim()}
38+
.substring(1)
39+
.trim();
40+
},
41+
42+
mdBody() {
43+
return `
44+
<MarkdownSlideSet>{mdContent}</MarkdownSlideSet>
45+
`
46+
.substring(1)
47+
.trim();
48+
}
49+
};
50+
51+
export const indexTemplate = (options: IndexTemplateOptions) =>
52+
`
53+
${(() => {
54+
if (options.usesMarkdown) {
55+
return content.mdImports();
56+
}
57+
return content.reactImports();
58+
})().trim()}
59+
60+
const Presentation = () => (
61+
<Deck template={() => <DefaultTemplate />}>
62+
${(() => {
63+
if (options.usesMarkdown) {
64+
return content.mdBody();
65+
}
66+
return content.reactBody(options.name);
67+
})()}
3868
</Deck>
3969
);
4070
4171
createRoot(document.getElementById('app')!).render(<Presentation />);
42-
`;
72+
`.trim();

packages/create-spectacle/src/templates/markdown.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,11 @@ export const markdownTemplate = (options: TemplateOptions) =>
1010
---
1111
- Made with Spectacle
1212
`.trim();
13+
14+
export const markdownCustomTypesTemplate = () =>
15+
`
16+
declare module '*.md' {
17+
const content: string;
18+
export default content;
19+
}
20+
`.trim();

0 commit comments

Comments
 (0)