From 7cbc59c0938e63de565cb7d0f3f543403ae5eb3f Mon Sep 17 00:00:00 2001 From: Carlos Kelly Date: Thu, 14 Jul 2022 08:54:47 -0500 Subject: [PATCH 1/7] Added file writers to complete JSX/TSX deck generation. --- packages/cli/src/cli.ts | 37 ++++++----- packages/cli/src/templates/babel.ts | 25 ++++++++ packages/cli/src/templates/file-writers.ts | 72 ++++++++++++++++++++++ packages/cli/src/templates/html.ts | 3 +- packages/cli/src/templates/index.ts | 67 ++++++++++++-------- packages/cli/src/templates/one-page.ts | 5 +- packages/cli/src/templates/package.ts | 44 +++++++++++++ packages/cli/src/templates/tsconfig.ts | 20 ++++++ packages/cli/src/templates/webpack.ts | 32 ++++++++++ 9 files changed, 261 insertions(+), 44 deletions(-) create mode 100644 packages/cli/src/templates/babel.ts create mode 100644 packages/cli/src/templates/file-writers.ts create mode 100644 packages/cli/src/templates/package.ts create mode 100644 packages/cli/src/templates/tsconfig.ts create mode 100644 packages/cli/src/templates/webpack.ts diff --git a/packages/cli/src/cli.ts b/packages/cli/src/cli.ts index 6e80b05da..fc24666ea 100644 --- a/packages/cli/src/cli.ts +++ b/packages/cli/src/cli.ts @@ -5,16 +5,20 @@ import { Command } from 'commander'; import cliSpinners from 'cli-spinners'; import logUpdate from 'log-update'; import { - writeBaseWebpackProjectFiles, + FileOptions, + writeWebpackProjectFiles, writeOnePageHTMLFile -} from './templates'; +} from './templates/file-writers'; type CLIOptions = { type: 'tsx' | 'jsx' | 'mdx' | 'onepage'; name: string; + lang?: string; + port?: number; }; let progressInterval: NodeJS.Timer; +const SPECTACLE_VERSION = '9.2.1'; const log = console.log; const program = new Command(); const printConsoleError = (message: string) => @@ -41,11 +45,12 @@ const main = async () => { 'deck source type (choices: "tsx", "jsx", "mdx", "onepage")' ) .requiredOption('-n, --name [name]', 'name of presentation') + .option('-l, --lang [lang]', 'language code for generated HTML document') + .option('-p, --port [port]', 'default port for webpack dev server') .parse(process.argv); let i = 0; - const { type, name } = program.opts(); - const snakeCaseName = name.toLowerCase().replace(/([^a-z0-9]+)/gi, '-'); + const { type, name, lang = 'en', port = 3000 } = program.opts(); progressInterval = setInterval(() => { const { frames } = cliSpinners.aesthetic; @@ -57,24 +62,24 @@ const main = async () => { await sleep(750); + const fileOptions: FileOptions = { + snakeCaseName: name.toLowerCase().replace(/([^a-z0-9]+)/gi, '-'), + name, + lang, + port, + enableTypeScriptSupport: type === 'tsx', + spectacleVersion: SPECTACLE_VERSION + }; + switch (type) { case 'jsx': - await writeBaseWebpackProjectFiles({ - snakeCaseName, - name - }); + await writeWebpackProjectFiles(fileOptions); break; case 'tsx': - await writeBaseWebpackProjectFiles({ - snakeCaseName, - name - }); + await writeWebpackProjectFiles(fileOptions); break; case 'onepage': - await writeOnePageHTMLFile({ - snakeCaseName, - name - }); + await writeOnePageHTMLFile(fileOptions); break; } diff --git a/packages/cli/src/templates/babel.ts b/packages/cli/src/templates/babel.ts new file mode 100644 index 000000000..3ef7a2921 --- /dev/null +++ b/packages/cli/src/templates/babel.ts @@ -0,0 +1,25 @@ +type BabelTemplateOptions = { + enableTypeScriptSupport: boolean; +}; + +export const babelTemplate = (options: BabelTemplateOptions) => + `{ + "presets": [ + ${options.enableTypeScriptSupport ? '"@babel/preset-typescript",' : ''} + ["@babel/preset-env", { "modules": false }], + ["@babel/preset-react", { "runtime": "automatic" }] + ], + "plugins": [ + "@babel/plugin-proposal-object-rest-spread", + "@babel/plugin-proposal-class-properties" + ], + "env": { + "cjs": { + "presets": ["@babel/preset-env", "@babel/preset-react"] + }, + "test": { + "presets": ["@babel/preset-env", "@babel/preset-react"] + } + } +} +`; diff --git a/packages/cli/src/templates/file-writers.ts b/packages/cli/src/templates/file-writers.ts new file mode 100644 index 000000000..04866c9c9 --- /dev/null +++ b/packages/cli/src/templates/file-writers.ts @@ -0,0 +1,72 @@ +import path from 'path'; +import { existsSync } from 'fs'; +import { mkdir, writeFile, rm } from 'fs/promises'; +import { htmlTemplate } from './html'; +import { onePageTemplate } from './one-page'; +import { webpackTemplate } from './webpack'; +import { babelTemplate } from './babel'; +import { packageTemplate } from './package'; +import { indexTemplate } from './index'; +import { tsconfigTemplate } from './tsconfig'; + +export type FileOptions = { + snakeCaseName: string; + name: string; + lang: string; + port: number; + enableTypeScriptSupport: boolean; + spectacleVersion: string; +}; + +export const writeWebpackProjectFiles = async ({ + snakeCaseName, + name, + lang, + port, + enableTypeScriptSupport, + spectacleVersion +}: FileOptions) => { + const outPath = path.resolve(process.cwd(), snakeCaseName); + + await rm(outPath, { recursive: true, force: true }); + + if (existsSync(outPath)) { + throw new Error(`Directory named ${snakeCaseName} already exists.`); + } + await mkdir(outPath, { recursive: true }); + await writeFile(`${snakeCaseName}/index.html`, htmlTemplate({ name, lang })); + await writeFile( + `${snakeCaseName}/webpack.config.js`, + webpackTemplate({ port, usesTypeScript: enableTypeScriptSupport }) + ); + await writeFile( + `${snakeCaseName}/.babelrc`, + babelTemplate({ enableTypeScriptSupport }) + ); + await writeFile( + `${snakeCaseName}/package.json`, + packageTemplate({ + usesTypeScript: enableTypeScriptSupport, + name: snakeCaseName, + spectacleVersion + }) + ); + await writeFile( + `${snakeCaseName}/index.${enableTypeScriptSupport ? 'tsx' : 'jsx'}`, + indexTemplate({ + usesTypeScript: enableTypeScriptSupport, + name + }) + ); + + enableTypeScriptSupport && + (await writeFile(`${snakeCaseName}/tsconfig.json`, tsconfigTemplate())); +}; + +export const writeOnePageHTMLFile = async ({ + snakeCaseName, + name, + lang +}: FileOptions) => { + await writeFile(`${snakeCaseName}.html`, onePageTemplate({ name, lang })); +}; diff --git a/packages/cli/src/templates/html.ts b/packages/cli/src/templates/html.ts index 741393676..99551c24f 100644 --- a/packages/cli/src/templates/html.ts +++ b/packages/cli/src/templates/html.ts @@ -1,10 +1,11 @@ type HTMLTemplateOptions = { name: string; + lang: string; }; export const htmlTemplate = (options: HTMLTemplateOptions) => ` - + ${options.name} diff --git a/packages/cli/src/templates/index.ts b/packages/cli/src/templates/index.ts index a0efef46c..edd6284e5 100644 --- a/packages/cli/src/templates/index.ts +++ b/packages/cli/src/templates/index.ts @@ -1,29 +1,46 @@ -import path from 'path'; -import { existsSync } from 'fs'; -import { mkdir, writeFile } from 'fs/promises'; -import { htmlTemplate } from './html'; -import { onePageTemplate } from './one-page'; - -type FileOptions = { - snakeCaseName: string; +type IndexTemplateOptions = { name: string; + usesTypeScript: boolean; }; -export const writeBaseWebpackProjectFiles = async ({ - snakeCaseName, - name -}: FileOptions) => { - const outPath = path.resolve(process.cwd(), snakeCaseName); - if (existsSync(outPath)) { - throw new Error(`Directory named ${snakeCaseName} already exists.`); - } - await mkdir(outPath, { recursive: true }); - await writeFile(`${snakeCaseName}/index.html`, htmlTemplate({ name })); -}; +export const indexTemplate = (options: IndexTemplateOptions) => + `import React from 'react'; +import { createRoot } from 'react-dom/client'; +import { Slide, Deck, FlexBox, Heading, SpectacleLogo, Box, FullScreen, AnimatedProgress } from 'spectacle'; -export const writeOnePageHTMLFile = async ({ - snakeCaseName, - name -}: FileOptions) => { - await writeFile(`${snakeCaseName}.html`, onePageTemplate({ name })); -}; +const template = () => ( + + + + + + + + +); + +const Presentation = () => ( + + + + ${options.name} + + + + + Made with + + + + +); + +createRoot(document.getElementById('app')${ + options.usesTypeScript ? '!' : '' + }).render(); +`; diff --git a/packages/cli/src/templates/one-page.ts b/packages/cli/src/templates/one-page.ts index 457f440be..23add9268 100644 --- a/packages/cli/src/templates/one-page.ts +++ b/packages/cli/src/templates/one-page.ts @@ -1,10 +1,11 @@ type OnePageTemplateOptions = { name: string; + lang: string; }; -export const onePageTemplate = ({ name }: OnePageTemplateOptions) => ` +export const onePageTemplate = ({ name, lang }: OnePageTemplateOptions) => ` - + diff --git a/packages/cli/src/templates/package.ts b/packages/cli/src/templates/package.ts new file mode 100644 index 000000000..91558af5b --- /dev/null +++ b/packages/cli/src/templates/package.ts @@ -0,0 +1,44 @@ +type PackageTemplateOptions = { + name: string; + spectacleVersion: string; + usesTypeScript: boolean; +}; + +export const packageTemplate = (options: PackageTemplateOptions) => + `{ + "name": "${options.name}", + "private": true, + "scripts": { + "start": "webpack-dev-server --hot --config ./webpack.config.js", + "clean": "rimraf dist", + "build": "webpack --config ./webpack.config.js" + }, + "dependencies": { + "spectacle": "${options.spectacleVersion}", + "react": "^18.1.0", + "react-dom": "^18.1.0" + }, + "devDependencies": { + "@babel/core": "^7.17.2", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/preset-env": "^7.12.7", + "@babel/preset-react": "^7.16.7", + "babel-loader": "^8.0.6", + "html-webpack-plugin": "^5.3.1", + "css-loader": "^5.1.3", + "file-loader": "^6.2.0", + "rimraf": "^3.0.0", + "webpack": "^5.68.0", + "webpack-cli": "^4.5.0", + "webpack-dev-server": "^4.7.4"${ + options.usesTypeScript + ? ',\n "typescript": "^4.5.2",' + + '\n "@babel/preset-typescript": "^7.16.0",' + + '\n "@types/react": "^18.0.12",' + + '\n "@types/react-dom": "^18.0.5"' + : '' + } + } +} + `; diff --git a/packages/cli/src/templates/tsconfig.ts b/packages/cli/src/templates/tsconfig.ts new file mode 100644 index 000000000..b98a0cf68 --- /dev/null +++ b/packages/cli/src/templates/tsconfig.ts @@ -0,0 +1,20 @@ +export const tsconfigTemplate = () => + `{ + "compilerOptions": { + "target": "ES6", + "lib": [ + "DOM", + "ES2019" + ], + "jsx": "react-jsx", + "module": "commonjs", + "moduleResolution": "node", + "allowUmdGlobalAccess": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true + } +} +`; diff --git a/packages/cli/src/templates/webpack.ts b/packages/cli/src/templates/webpack.ts new file mode 100644 index 000000000..70c99c7a6 --- /dev/null +++ b/packages/cli/src/templates/webpack.ts @@ -0,0 +1,32 @@ +type WebpackTemplateOptions = { + port: number; + usesTypeScript: boolean; +}; + +export const webpackTemplate = (options: WebpackTemplateOptions) => + `const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); + +module.exports = { + mode: 'development', + context: __dirname, + entry: './index.${options.usesTypeScript ? 'tsx' : 'jsx'}', + output: { + path: path.join(__dirname, '/dist'), + filename: 'app.bundle.js' + }, + devServer: { + port: ${options.port} + }, + module: { + rules: [ + { test: /\\.[tj]sx?$/, use: ['babel-loader'] }, + { test: /\\.(png|svg|jpg|gif)$/, use: ['file-loader'] }, + { test: /\\.css$/, use: ['style-loader', 'css-loader'] } + ] + }, + plugins: [ + new HtmlWebpackPlugin({ template: './index.html' }), + ] +}; +`; From d881fed116c35a9c904d492f937f76a0dd6389a4 Mon Sep 17 00:00:00 2001 From: Carlos Kelly Date: Thu, 14 Jul 2022 09:06:16 -0500 Subject: [PATCH 2/7] Added style loader --- packages/cli/src/templates/package.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/cli/src/templates/package.ts b/packages/cli/src/templates/package.ts index 91558af5b..4daca1bd4 100644 --- a/packages/cli/src/templates/package.ts +++ b/packages/cli/src/templates/package.ts @@ -26,6 +26,7 @@ export const packageTemplate = (options: PackageTemplateOptions) => "@babel/preset-react": "^7.16.7", "babel-loader": "^8.0.6", "html-webpack-plugin": "^5.3.1", + "style-loader": "^3.3.1", "css-loader": "^5.1.3", "file-loader": "^6.2.0", "rimraf": "^3.0.0", From c988746f7ae66b4b3d9b14902ea0d5afb4e3d7ba Mon Sep 17 00:00:00 2001 From: Carlos Kelly Date: Thu, 14 Jul 2022 09:14:46 -0500 Subject: [PATCH 3/7] Ensure production flag is set on build. --- packages/cli/src/templates/package.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/templates/package.ts b/packages/cli/src/templates/package.ts index 4daca1bd4..837086d22 100644 --- a/packages/cli/src/templates/package.ts +++ b/packages/cli/src/templates/package.ts @@ -11,7 +11,7 @@ export const packageTemplate = (options: PackageTemplateOptions) => "scripts": { "start": "webpack-dev-server --hot --config ./webpack.config.js", "clean": "rimraf dist", - "build": "webpack --config ./webpack.config.js" + "build": "webpack --config ./webpack.config.js --mode production" }, "dependencies": { "spectacle": "${options.spectacleVersion}", From caffe562977a2d8a044068b844ce0c341588cf30 Mon Sep 17 00:00:00 2001 From: Carlos Kelly Date: Thu, 14 Jul 2022 11:18:48 -0500 Subject: [PATCH 4/7] Added default values for optional flags. --- packages/cli/src/cli.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/cli.ts b/packages/cli/src/cli.ts index fc24666ea..8242572e2 100644 --- a/packages/cli/src/cli.ts +++ b/packages/cli/src/cli.ts @@ -45,8 +45,11 @@ const main = async () => { 'deck source type (choices: "tsx", "jsx", "mdx", "onepage")' ) .requiredOption('-n, --name [name]', 'name of presentation') - .option('-l, --lang [lang]', 'language code for generated HTML document') - .option('-p, --port [port]', 'default port for webpack dev server') + .option( + '-l, --lang [lang]', + 'language code for generated HTML document, default: en' + ) + .option('-p, --port [port]', 'port for webpack dev server, default: 3000') .parse(process.argv); let i = 0; From ca76b973788e19e40404c723651b8e4a7df2e153 Mon Sep 17 00:00:00 2001 From: Carlos Kelly Date: Thu, 14 Jul 2022 14:01:05 -0500 Subject: [PATCH 5/7] Use the workspace package version for Spectacle in the CLI --- packages/cli/package.json | 1 + packages/cli/src/cli.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 5c72992af..c17a9cb3e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -27,6 +27,7 @@ }, "peerDependencies": {}, "devDependencies": { + "spectacle": "workspace:spectacle@*", "@types/node": "^18.0.3", "nodemon": "^2.0.18", "rimraf": "^3.0.2", diff --git a/packages/cli/src/cli.ts b/packages/cli/src/cli.ts index 8242572e2..5cec0f468 100644 --- a/packages/cli/src/cli.ts +++ b/packages/cli/src/cli.ts @@ -9,6 +9,7 @@ import { writeWebpackProjectFiles, writeOnePageHTMLFile } from './templates/file-writers'; +import { version as SPECTACLE_VERSION } from 'spectacle/package.json'; type CLIOptions = { type: 'tsx' | 'jsx' | 'mdx' | 'onepage'; @@ -18,7 +19,6 @@ type CLIOptions = { }; let progressInterval: NodeJS.Timer; -const SPECTACLE_VERSION = '9.2.1'; const log = console.log; const program = new Command(); const printConsoleError = (message: string) => From bbf0393f3b6b9eaf4a559076edc39a2b5433f2c0 Mon Sep 17 00:00:00 2001 From: Carlos Kelly Date: Thu, 14 Jul 2022 14:10:59 -0500 Subject: [PATCH 6/7] Lock file changes --- pnpm-lock.yaml | 123 ++++++++++++++++++++++++++++++------------------- 1 file changed, 75 insertions(+), 48 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1f2150259..d3adedea4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 importers: @@ -21,13 +21,13 @@ importers: devDependencies: '@babel/core': 7.18.6 '@types/jest': 27.5.2 - '@typescript-eslint/eslint-plugin': 5.30.5_f646e16e2de31e818e163bded4698d6b - '@typescript-eslint/parser': 5.30.5_eslint@8.19.0+typescript@4.7.4 + '@typescript-eslint/eslint-plugin': 5.30.5_6zdoc3rn4mpiddqwhppni2mnnm + '@typescript-eslint/parser': 5.30.5_4x5o4skxv6sl53vpwefgt23khm babel-eslint: 10.1.0_eslint@8.19.0 babel-plugin-transform-jsx-to-htm: 2.2.0_@babel+core@7.18.6 eslint: 8.19.0 eslint-config-prettier: 8.5.0_eslint@8.19.0 - eslint-plugin-prettier: 4.2.1_fd2e32b7574349919aac0818c3f895ea + eslint-plugin-prettier: 4.2.1_7uxdfn2xinezdgvmbammh6ev5i eslint-plugin-react: 7.30.1_eslint@8.19.0 eslint-plugin-react-hooks: 4.6.0_eslint@8.19.0 prettier: 2.7.1 @@ -60,7 +60,7 @@ importers: '@babel/preset-env': 7.18.6_@babel+core@7.18.6 '@babel/preset-react': 7.18.6_@babel+core@7.18.6 '@babel/preset-typescript': 7.18.6_@babel+core@7.18.6 - babel-loader: 8.2.5_2cad51bbe9c2876396f118aa6395be78 + babel-loader: 8.2.5_fswvdo7jykdwhfxrdcvghfn6pa rimraf: 3.0.2 webpack: 5.73.0 webpack-dev-server: 4.9.3_webpack@5.73.0 @@ -93,7 +93,7 @@ importers: '@babel/preset-env': 7.18.6_@babel+core@7.18.6 '@babel/preset-react': 7.18.6_@babel+core@7.18.6 '@babel/preset-typescript': 7.18.6_@babel+core@7.18.6 - babel-loader: 8.2.5_2cad51bbe9c2876396f118aa6395be78 + babel-loader: 8.2.5_fswvdo7jykdwhfxrdcvghfn6pa raw-loader: 4.0.2_webpack@5.73.0 rimraf: 3.0.2 typescript: 4.7.4 @@ -130,7 +130,7 @@ importers: '@babel/preset-env': 7.18.6_@babel+core@7.18.6 '@babel/preset-react': 7.18.6_@babel+core@7.18.6 '@babel/preset-typescript': 7.18.6_@babel+core@7.18.6 - babel-loader: 8.2.5_2cad51bbe9c2876396f118aa6395be78 + babel-loader: 8.2.5_fswvdo7jykdwhfxrdcvghfn6pa rimraf: 3.0.2 typescript: 4.7.4 webpack: 5.73.0 @@ -146,6 +146,7 @@ importers: log-update: 4.0.0 nodemon: ^2.0.18 rimraf: ^3.0.2 + spectacle: workspace:spectacle@* ts-node: ^10.8.1 typescript: '*' dependencies: @@ -158,7 +159,8 @@ importers: '@types/node': 18.0.3 nodemon: 2.0.19 rimraf: 3.0.2 - ts-node: 10.8.2_2dd5d46eecda2aef953638919121af58 + spectacle: link:../spectacle + ts-node: 10.8.2_fxk5i3xm3ivo7fjwhcizcinpla typescript: 4.7.4 packages/spectacle: @@ -237,19 +239,19 @@ importers: query-string: 6.14.1 react-fast-compare: 3.2.0 react-is: 18.2.0 - react-spring: 8.0.27_react-dom@18.2.0+react@18.2.0 + react-spring: 8.0.27_biqbaboplfbrettd7655fr4n2y react-swipeable: 6.2.2_react@18.2.0 react-syntax-highlighter: 15.5.0_react@18.2.0 rehype-raw: 5.1.0 rehype-react: 6.2.1 remark-parse: 8.0.3 remark-rehype: 7.0.0 - styled-components: 4.4.1_react-dom@18.2.0+react@18.2.0 + styled-components: 4.4.1_biqbaboplfbrettd7655fr4n2y styled-system: 5.1.5 ulid: 2.3.0 unified: 9.2.2 unist-util-visit: 2.0.3 - use-resize-observer: 6.1.0_react-dom@18.2.0+react@18.2.0 + use-resize-observer: 6.1.0_biqbaboplfbrettd7655fr4n2y devDependencies: '@babel/cli': 7.18.6_@babel+core@7.18.6 '@babel/core': 7.18.6 @@ -259,7 +261,7 @@ importers: '@babel/preset-react': 7.18.6_@babel+core@7.18.6 '@babel/preset-typescript': 7.18.6_@babel+core@7.18.6 '@testing-library/jest-dom': 5.16.4 - '@testing-library/react': 13.3.0_react-dom@18.2.0+react@18.2.0 + '@testing-library/react': 13.3.0_biqbaboplfbrettd7655fr4n2y '@types/history': 4.7.11 '@types/jest': 27.5.2 '@types/mousetrap': 1.6.9 @@ -270,7 +272,7 @@ importers: '@types/styled-components': 5.1.25 '@types/styled-system': 5.1.15 '@types/unist': 2.0.6 - babel-loader: 8.2.5_2cad51bbe9c2876396f118aa6395be78 + babel-loader: 8.2.5_fswvdo7jykdwhfxrdcvghfn6pa builder: 4.0.0 csstype: 3.1.0 file-loader: 5.1.0_webpack@5.73.0 @@ -280,11 +282,11 @@ importers: react: 18.2.0 react-dom: 18.2.0_react@18.2.0 rimraf: 3.0.2 - ts-jest: 27.1.5_589936de76fc7c23cde26c00ff48a15c + ts-jest: 27.1.5_lcmtnxtw7r6chtpcnqap6sfblq typescript: 4.7.4 webpack: 5.73.0_webpack-cli@4.10.0 - webpack-cli: 4.10.0_f445dff6f76f0ed3133a4ab59560a372 - webpack-dev-server: 4.9.3_ffd7cf999054608223b9fc836cf5004f + webpack-cli: 4.10.0_6rc575xxn4hngez2jk2zkyfdoi + webpack-dev-server: 4.9.3_77l47gmqkrqiei5z7sbwz5iaj4 packages: @@ -2053,7 +2055,7 @@ packages: redent: 3.0.0 dev: true - /@testing-library/react/13.3.0_react-dom@18.2.0+react@18.2.0: + /@testing-library/react/13.3.0_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-DB79aA426+deFgGSjnf5grczDPiL4taK3hFaa+M5q7q20Kcve9eQottOG5kZ74KEr55v0tU2CQormSSDK87zYQ==} engines: {node: '>=12'} peerDependencies: @@ -2374,7 +2376,7 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin/5.30.5_f646e16e2de31e818e163bded4698d6b: + /@typescript-eslint/eslint-plugin/5.30.5_6zdoc3rn4mpiddqwhppni2mnnm: resolution: {integrity: sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2385,10 +2387,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.30.5_eslint@8.19.0+typescript@4.7.4 + '@typescript-eslint/parser': 5.30.5_4x5o4skxv6sl53vpwefgt23khm '@typescript-eslint/scope-manager': 5.30.5 - '@typescript-eslint/type-utils': 5.30.5_eslint@8.19.0+typescript@4.7.4 - '@typescript-eslint/utils': 5.30.5_eslint@8.19.0+typescript@4.7.4 + '@typescript-eslint/type-utils': 5.30.5_4x5o4skxv6sl53vpwefgt23khm + '@typescript-eslint/utils': 5.30.5_4x5o4skxv6sl53vpwefgt23khm debug: 4.3.4 eslint: 8.19.0 functional-red-black-tree: 1.0.1 @@ -2401,7 +2403,7 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/5.30.5_eslint@8.19.0+typescript@4.7.4: + /@typescript-eslint/parser/5.30.5_4x5o4skxv6sl53vpwefgt23khm: resolution: {integrity: sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2429,7 +2431,7 @@ packages: '@typescript-eslint/visitor-keys': 5.30.5 dev: true - /@typescript-eslint/type-utils/5.30.5_eslint@8.19.0+typescript@4.7.4: + /@typescript-eslint/type-utils/5.30.5_4x5o4skxv6sl53vpwefgt23khm: resolution: {integrity: sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2439,7 +2441,7 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/utils': 5.30.5_eslint@8.19.0+typescript@4.7.4 + '@typescript-eslint/utils': 5.30.5_4x5o4skxv6sl53vpwefgt23khm debug: 4.3.4 eslint: 8.19.0 tsutils: 3.21.0_typescript@4.7.4 @@ -2474,7 +2476,7 @@ packages: - supports-color dev: true - /@typescript-eslint/utils/5.30.5_eslint@8.19.0+typescript@4.7.4: + /@typescript-eslint/utils/5.30.5_4x5o4skxv6sl53vpwefgt23khm: resolution: {integrity: sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2606,14 +2608,14 @@ packages: '@xtuc/long': 4.2.2 dev: true - /@webpack-cli/configtest/1.2.0_ffd7cf999054608223b9fc836cf5004f: + /@webpack-cli/configtest/1.2.0_77l47gmqkrqiei5z7sbwz5iaj4: resolution: {integrity: sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==} peerDependencies: webpack: 4.x.x || 5.x.x webpack-cli: 4.x.x dependencies: webpack: 5.73.0_webpack-cli@4.10.0 - webpack-cli: 4.10.0_f445dff6f76f0ed3133a4ab59560a372 + webpack-cli: 4.10.0_6rc575xxn4hngez2jk2zkyfdoi dev: true /@webpack-cli/info/1.5.0_webpack-cli@4.10.0: @@ -2622,10 +2624,10 @@ packages: webpack-cli: 4.x.x dependencies: envinfo: 7.8.1 - webpack-cli: 4.10.0_f445dff6f76f0ed3133a4ab59560a372 + webpack-cli: 4.10.0_6rc575xxn4hngez2jk2zkyfdoi dev: true - /@webpack-cli/serve/1.7.0_4c58ec6b3c7bd9e91c91ce21a56852c0: + /@webpack-cli/serve/1.7.0_jrmoy2z4ppm6sherzyq2k2csya: resolution: {integrity: sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==} peerDependencies: webpack-cli: 4.x.x @@ -2634,8 +2636,8 @@ packages: webpack-dev-server: optional: true dependencies: - webpack-cli: 4.10.0_f445dff6f76f0ed3133a4ab59560a372 - webpack-dev-server: 4.9.3_ffd7cf999054608223b9fc836cf5004f + webpack-cli: 4.10.0_6rc575xxn4hngez2jk2zkyfdoi + webpack-dev-server: 4.9.3_77l47gmqkrqiei5z7sbwz5iaj4 dev: true /@xtuc/ieee754/1.2.0: @@ -2919,7 +2921,7 @@ packages: - supports-color dev: true - /babel-loader/8.2.5_2cad51bbe9c2876396f118aa6395be78: + /babel-loader/8.2.5_fswvdo7jykdwhfxrdcvghfn6pa: resolution: {integrity: sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==} engines: {node: '>= 8.9'} peerDependencies: @@ -3009,7 +3011,7 @@ packages: babel-plugin-syntax-jsx: 6.18.0 lodash: 4.17.21 picomatch: 2.3.1 - styled-components: 4.4.1_react-dom@18.2.0+react@18.2.0 + styled-components: 4.4.1_biqbaboplfbrettd7655fr4n2y dev: false /babel-plugin-syntax-jsx/6.18.0: @@ -3097,6 +3099,8 @@ packages: raw-body: 2.5.1 type-is: 1.6.18 unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color dev: true /bonjour-service/1.0.13: @@ -3448,6 +3452,8 @@ packages: on-headers: 1.0.2 safe-buffer: 5.1.2 vary: 1.1.2 + transitivePeerDependencies: + - supports-color dev: true /concat-map/0.0.1: @@ -3595,14 +3601,25 @@ packages: /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: ms: 2.0.0 dev: true - /debug/3.2.7: + /debug/3.2.7_supports-color@5.5.0: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: ms: 2.1.3 + supports-color: 5.5.0 dev: true /debug/4.3.4: @@ -3943,7 +3960,7 @@ packages: eslint: 8.19.0 dev: true - /eslint-plugin-prettier/4.2.1_fd2e32b7574349919aac0818c3f895ea: + /eslint-plugin-prettier/4.2.1_7uxdfn2xinezdgvmbammh6ev5i: resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -4200,6 +4217,8 @@ packages: type-is: 1.6.18 utils-merge: 1.0.1 vary: 1.1.2 + transitivePeerDependencies: + - supports-color dev: true /extend-shallow/2.0.1: @@ -4310,6 +4329,8 @@ packages: parseurl: 1.3.3 statuses: 2.0.1 unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color dev: true /find-cache-dir/3.3.2: @@ -6114,7 +6135,7 @@ packages: requiresBuild: true dependencies: chokidar: 3.5.3 - debug: 3.2.7 + debug: 3.2.7_supports-color@5.5.0 ignore-by-default: 1.0.1 minimatch: 3.1.2 pstree.remy: 1.1.8 @@ -6641,7 +6662,7 @@ packages: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: false - /react-spring/8.0.27_react-dom@18.2.0+react@18.2.0: + /react-spring/8.0.27_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-nDpWBe3ZVezukNRandTeLSPcwwTMjNVu1IDq9qA/AMiUqHuRN4BeSWvKr3eIxxg1vtiYiOLy4FqdfCP5IoP77g==} peerDependencies: react: '>= 16.8.0' @@ -7043,6 +7064,8 @@ packages: on-finished: 2.4.1 range-parser: 1.2.1 statuses: 2.0.1 + transitivePeerDependencies: + - supports-color dev: true /serialize-javascript/6.0.0: @@ -7062,6 +7085,8 @@ packages: http-errors: 1.6.3 mime-types: 2.1.35 parseurl: 1.3.3 + transitivePeerDependencies: + - supports-color dev: true /serve-static/1.15.0: @@ -7072,6 +7097,8 @@ packages: escape-html: 1.0.3 parseurl: 1.3.3 send: 0.18.0 + transitivePeerDependencies: + - supports-color dev: true /setprototypeof/1.1.0: @@ -7342,7 +7369,7 @@ packages: inline-style-parser: 0.1.1 dev: false - /styled-components/4.4.1_react-dom@18.2.0+react@18.2.0: + /styled-components/4.4.1_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-RNqj14kYzw++6Sr38n7197xG33ipEOktGElty4I70IKzQF1jzaD1U4xQ+Ny/i03UUhHlC5NWEO+d8olRCDji6g==} requiresBuild: true peerDependencies: @@ -7574,7 +7601,7 @@ packages: resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} dev: false - /ts-jest/27.1.5_589936de76fc7c23cde26c00ff48a15c: + /ts-jest/27.1.5_lcmtnxtw7r6chtpcnqap6sfblq: resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -7609,7 +7636,7 @@ packages: yargs-parser: 20.2.9 dev: true - /ts-node/10.8.2_2dd5d46eecda2aef953638919121af58: + /ts-node/10.8.2_fxk5i3xm3ivo7fjwhcizcinpla: resolution: {integrity: sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==} hasBin: true peerDependencies: @@ -7862,7 +7889,7 @@ packages: punycode: 2.1.1 dev: true - /use-resize-observer/6.1.0_react-dom@18.2.0+react@18.2.0: + /use-resize-observer/6.1.0_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-SiPcWHiIQ1CnHmb6PxbYtygqiZXR0U9dNkkbpX9VYnlstUwF8+QqpUTrzh13pjPwcjMVGR+QIC+nvF5ujfFNng==} peerDependencies: react: '>=16.8.0' @@ -7984,7 +8011,7 @@ packages: engines: {node: '>=10.4'} dev: true - /webpack-cli/4.10.0_f445dff6f76f0ed3133a4ab59560a372: + /webpack-cli/4.10.0_6rc575xxn4hngez2jk2zkyfdoi: resolution: {integrity: sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==} engines: {node: '>=10.13.0'} hasBin: true @@ -8005,9 +8032,9 @@ packages: optional: true dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0_ffd7cf999054608223b9fc836cf5004f + '@webpack-cli/configtest': 1.2.0_77l47gmqkrqiei5z7sbwz5iaj4 '@webpack-cli/info': 1.5.0_webpack-cli@4.10.0 - '@webpack-cli/serve': 1.7.0_4c58ec6b3c7bd9e91c91ce21a56852c0 + '@webpack-cli/serve': 1.7.0_jrmoy2z4ppm6sherzyq2k2csya colorette: 2.0.19 commander: 7.2.0 cross-spawn: 7.0.3 @@ -8016,7 +8043,7 @@ packages: interpret: 2.2.0 rechoir: 0.7.1 webpack: 5.73.0_webpack-cli@4.10.0 - webpack-dev-server: 4.9.3_ffd7cf999054608223b9fc836cf5004f + webpack-dev-server: 4.9.3_77l47gmqkrqiei5z7sbwz5iaj4 webpack-merge: 5.8.0 dev: true @@ -8034,7 +8061,7 @@ packages: webpack: 5.73.0 dev: true - /webpack-dev-server/4.9.3_ffd7cf999054608223b9fc836cf5004f: + /webpack-dev-server/4.9.3_77l47gmqkrqiei5z7sbwz5iaj4: resolution: {integrity: sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw==} engines: {node: '>= 12.13.0'} hasBin: true @@ -8073,7 +8100,7 @@ packages: sockjs: 0.3.24 spdy: 4.0.2 webpack: 5.73.0_webpack-cli@4.10.0 - webpack-cli: 4.10.0_f445dff6f76f0ed3133a4ab59560a372 + webpack-cli: 4.10.0_6rc575xxn4hngez2jk2zkyfdoi webpack-dev-middleware: 5.3.3_webpack@5.73.0 ws: 8.8.0 transitivePeerDependencies: @@ -8217,7 +8244,7 @@ packages: tapable: 2.2.1 terser-webpack-plugin: 5.3.3_webpack@5.73.0 watchpack: 2.4.0 - webpack-cli: 4.10.0_f445dff6f76f0ed3133a4ab59560a372 + webpack-cli: 4.10.0_6rc575xxn4hngez2jk2zkyfdoi webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' From 579d9c47c28b786518b5e45c6b095f8bf0ce6507 Mon Sep 17 00:00:00 2001 From: Carlos Kelly Date: Thu, 14 Jul 2022 14:27:24 -0500 Subject: [PATCH 7/7] Added carrot to spectacle version specifier --- packages/cli/src/templates/package.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/templates/package.ts b/packages/cli/src/templates/package.ts index 837086d22..60caaa282 100644 --- a/packages/cli/src/templates/package.ts +++ b/packages/cli/src/templates/package.ts @@ -14,7 +14,7 @@ export const packageTemplate = (options: PackageTemplateOptions) => "build": "webpack --config ./webpack.config.js --mode production" }, "dependencies": { - "spectacle": "${options.spectacleVersion}", + "spectacle": "^${options.spectacleVersion}", "react": "^18.1.0", "react-dom": "^18.1.0" },