diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..938ae7b42 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "search.exclude": { + "**/node_modules": true, + "**/lib": true, + "**/es": true, + "**/dist": true + } +} \ No newline at end of file diff --git a/examples/js/package.json b/examples/js/package.json index c5085d981..babbe9cce 100644 --- a/examples/js/package.json +++ b/examples/js/package.json @@ -7,9 +7,9 @@ "build": "webpack --config ./webpack.config.js" }, "dependencies": { - "spectacle": "workspace:spectacle@*", "react": "^18.1.0", - "react-dom": "^18.1.0" + "react-dom": "^18.1.0", + "spectacle": "workspace:spectacle@*" }, "devDependencies": { "@babel/core": "^7.17.2", @@ -19,8 +19,10 @@ "@babel/preset-react": "^7.16.7", "@babel/preset-typescript": "^7.16.0", "babel-loader": "^8.0.6", + "html-webpack-plugin": "^5.5.0", "rimraf": "^3.0.0", "webpack": "^5.68.0", + "webpack-cli": "^4.10.0", "webpack-dev-server": "^4.7.4" } } diff --git a/examples/md/package.json b/examples/md/package.json index ffc0fbcd7..6bc585ca4 100644 --- a/examples/md/package.json +++ b/examples/md/package.json @@ -19,10 +19,12 @@ "@babel/preset-react": "^7.16.7", "@babel/preset-typescript": "^7.16.0", "babel-loader": "^8.0.6", + "html-webpack-plugin": "^5.5.0", "raw-loader": "^4.0.0", "rimraf": "^3.0.0", "typescript": "^4.5.2", "webpack": "^5.68.0", + "webpack-cli": "^4.10.0", "webpack-dev-server": "^4.7.4" } } diff --git a/examples/typescript/package.json b/examples/typescript/package.json index f31b15257..fd2219189 100644 --- a/examples/typescript/package.json +++ b/examples/typescript/package.json @@ -19,9 +19,11 @@ "@babel/preset-react": "^7.16.7", "@babel/preset-typescript": "^7.16.0", "babel-loader": "^8.0.6", + "html-webpack-plugin": "^5.5.0", "rimraf": "^3.0.0", "typescript": "^4.5.2", "webpack": "^5.68.0", + "webpack-cli": "^4.10.0", "webpack-dev-server": "^4.7.4" } } diff --git a/package.json b/package.json index afb7c7cec..9b4e99d99 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,11 @@ { "name": "spectacle-monorepo", "scripts": { - "start:js": "pnpm run --filter spectacle-example-js start", - "start:ts": "pnpm run --filter spectacle-example-ts start", - "start:md": "pnpm run --filter spectacle-example-md start", + "start:js": "pnpm run build:core && pnpm run --filter spectacle-example-js start", + "start:ts": "pnpm run build:core && pnpm run --filter spectacle-example-ts start", + "start:md": "pnpm run build:core && pnpm run --filter spectacle-example-md start", "start:one-page": "pnpm run --filter spectacle-example-one-page start", - "start:examples": "pnpm run --parallel --filter \"*example*\" start", + "start:examples": "pnpm run build:core && pnpm run --parallel --filter \"*example*\" start", "start:cli": "pnpm run --filter spectacle-cli start", "lint": "eslint --ext .tsx,.ts,.jsx,.js ./examples ./scripts packages/spectacle/src packages/cli/src", "lint:fix": "pnpm run lint --fix", @@ -17,9 +17,11 @@ "check": "pnpm run lint && pnpm run prettier:check && pnpm run test && pnpm run typecheck", "check-ci": "pnpm run check", "clean": "pnpm run -r clean", + "flush:deps": "rimraf **/node_modules", + "nuke": "pnpm run -r clean && pnpm run flush:deps", "build:examples": "pnpm run --filter spectacle build && pnpm run -r --filter \"*example*\" build", "build:core": "pnpm run --filter spectacle build", - "build": "pnpm run -r build", + "build": "pnpm run build:core && pnpm run build:examples", "build:one-page": "node ./scripts/one-page.js", "build:cli": "pnpm run --filter spectacle-cli build", "changeset": "changeset", @@ -38,6 +40,7 @@ "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-react": "^7.27.0", "eslint-plugin-react-hooks": "^4.3.0", + "rimraf": "^3.0.0", "prettier": "^2.4.1", "pretty": "^2.0.0", "typescript": "^4.5.2" diff --git a/packages/spectacle/.gitignore b/packages/spectacle/.gitignore new file mode 100644 index 000000000..b43bf86b5 --- /dev/null +++ b/packages/spectacle/.gitignore @@ -0,0 +1 @@ +README.md diff --git a/CHANGELOG.md b/packages/spectacle/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to packages/spectacle/CHANGELOG.md diff --git a/packages/spectacle/package.json b/packages/spectacle/package.json index 9a7b757a5..8c01aeeae 100644 --- a/packages/spectacle/package.json +++ b/packages/spectacle/package.json @@ -7,10 +7,7 @@ "files": [ "lib/", "es/", - "dist/", - "examples/", - "scripts/", - "../../README.md" + "dist/" ], "module": "es/index.js", "scripts": { @@ -22,11 +19,13 @@ "build-babel-esm": "builder run build-babel -- -d es", "build-babel-cjs": "builder run --env \"{\\\"BABEL_ENV\\\":\\\"cjs\\\"}\" build-babel -- -d lib", "build-webpack-base": "webpack", - "build-webpack-lib-dev": "builder run build-webpack-base -- --config ../../webpack.config.dev.js", + "build-webpack-lib-dev": "builder run build-webpack-base -- --config ./webpack.config.dev.js", "build-webpack-lib": "builder run build-webpack-base", "build": "builder concurrent --buffer build-babel-esm build-babel-cjs build-webpack-lib build-webpack-lib-dev build-types", "build-types": "tsc --emitDeclarationOnly", - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit", + "prepublishOnly": "shx cp ../../README.md ./README.md && shx cp ../../LICENSE ./LICENSE && pnpm run build", + "postpack": "shx rm ./README.md && shx rm ./LICENSE" }, "author": "Formidable Labs ", "license": "MIT", @@ -97,6 +96,7 @@ "react": "^18.1.0", "react-dom": "^18.1.0", "rimraf": "^3.0.0", + "shx": "^0.3.4", "ts-jest": "^27.0.7", "typescript": "^4.5.2", "webpack": "^5.68.0", diff --git a/webpack.config.dev.js b/packages/spectacle/webpack.config.dev.js similarity index 66% rename from webpack.config.dev.js rename to packages/spectacle/webpack.config.dev.js index 88131a75b..9163e54ab 100644 --- a/webpack.config.dev.js +++ b/packages/spectacle/webpack.config.dev.js @@ -1,4 +1,4 @@ -const base = require('./packages/spectacle/webpack.config'); +const base = require('./webpack.config'); module.exports = { ...base, diff --git a/packages/spectacle/webpack.config.js b/packages/spectacle/webpack.config.js index a19f0e887..280b239b1 100644 --- a/packages/spectacle/webpack.config.js +++ b/packages/spectacle/webpack.config.js @@ -1,3 +1,10 @@ +const path = require('path'); const base = require('../../webpack.config.base'); -module.exports = base; +module.exports = { + ...base, + output: { + ...base.output, + path: path.join(__dirname, 'dist') + } +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 898c89ccd..051dfd1bb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,6 +18,7 @@ importers: eslint-plugin-react-hooks: ^4.3.0 prettier: ^2.4.1 pretty: ^2.0.0 + rimraf: ^3.0.0 typescript: ^4.5.2 devDependencies: '@babel/core': 7.18.6 @@ -34,6 +35,7 @@ importers: eslint-plugin-react-hooks: 4.6.0_eslint@8.19.0 prettier: 2.7.1 pretty: 2.0.0 + rimraf: 3.0.2 typescript: 4.7.4 examples/js: @@ -45,11 +47,13 @@ importers: '@babel/preset-react': ^7.16.7 '@babel/preset-typescript': ^7.16.0 babel-loader: ^8.0.6 + html-webpack-plugin: ^5.5.0 react: ^18.1.0 react-dom: ^18.1.0 rimraf: ^3.0.0 spectacle: workspace:spectacle@* webpack: ^5.68.0 + webpack-cli: ^4.10.0 webpack-dev-server: ^4.7.4 dependencies: react: 18.2.0 @@ -63,9 +67,11 @@ importers: '@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_fswvdo7jykdwhfxrdcvghfn6pa + html-webpack-plugin: 5.5.0_webpack@5.73.0 rimraf: 3.0.2 - webpack: 5.73.0 - webpack-dev-server: 4.9.3_webpack@5.73.0 + webpack: 5.73.0_webpack-cli@4.10.0 + webpack-cli: 4.10.0_6rc575xxn4hngez2jk2zkyfdoi + webpack-dev-server: 4.9.3_77l47gmqkrqiei5z7sbwz5iaj4 examples/md: specifiers: @@ -76,6 +82,7 @@ importers: '@babel/preset-react': ^7.16.7 '@babel/preset-typescript': ^7.16.0 babel-loader: ^8.0.6 + html-webpack-plugin: ^5.5.0 raw-loader: ^4.0.0 react: ^18.1.0 react-dom: ^18.1.0 @@ -83,6 +90,7 @@ importers: spectacle: workspace:spectacle@* typescript: ^4.5.2 webpack: ^5.68.0 + webpack-cli: ^4.10.0 webpack-dev-server: ^4.7.4 dependencies: react: 18.2.0 @@ -96,11 +104,13 @@ importers: '@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_fswvdo7jykdwhfxrdcvghfn6pa + html-webpack-plugin: 5.5.0_webpack@5.73.0 raw-loader: 4.0.2_webpack@5.73.0 rimraf: 3.0.2 typescript: 4.7.4 - webpack: 5.73.0 - webpack-dev-server: 4.9.3_webpack@5.73.0 + webpack: 5.73.0_webpack-cli@4.10.0 + webpack-cli: 4.10.0_6rc575xxn4hngez2jk2zkyfdoi + webpack-dev-server: 4.9.3_77l47gmqkrqiei5z7sbwz5iaj4 examples/one-page: specifiers: {} @@ -114,12 +124,14 @@ importers: '@babel/preset-react': ^7.16.7 '@babel/preset-typescript': ^7.16.0 babel-loader: ^8.0.6 + html-webpack-plugin: ^5.5.0 react: ^18.1.0 react-dom: ^18.1.0 rimraf: ^3.0.0 spectacle: workspace:spectacle@* typescript: ^4.5.2 webpack: ^5.68.0 + webpack-cli: ^4.10.0 webpack-dev-server: ^4.7.4 dependencies: react: 18.2.0 @@ -133,10 +145,12 @@ importers: '@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_fswvdo7jykdwhfxrdcvghfn6pa + html-webpack-plugin: 5.5.0_webpack@5.73.0 rimraf: 3.0.2 typescript: 4.7.4 - webpack: 5.73.0 - webpack-dev-server: 4.9.3_webpack@5.73.0 + webpack: 5.73.0_webpack-cli@4.10.0 + webpack-cli: 4.10.0_6rc575xxn4hngez2jk2zkyfdoi + webpack-dev-server: 4.9.3_77l47gmqkrqiei5z7sbwz5iaj4 packages/cli: specifiers: @@ -216,6 +230,7 @@ importers: remark-parse: ^8.0.3 remark-rehype: ^7.0.0 rimraf: ^3.0.0 + shx: ^0.3.4 styled-components: ^4.3.2 styled-system: 5.1.5 ts-jest: ^27.0.7 @@ -284,6 +299,7 @@ importers: react: 18.2.0 react-dom: 18.2.0_react@18.2.0 rimraf: 3.0.2 + shx: 0.3.4 ts-jest: 27.1.5_lcmtnxtw7r6chtpcnqap6sfblq typescript: 4.7.4 webpack: 5.73.0_webpack-cli@4.10.0 @@ -3180,7 +3196,7 @@ packages: loader-utils: 2.0.2 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.73.0 + webpack: 5.73.0_webpack-cli@4.10.0 dev: true /babel-plugin-dynamic-import-node/2.3.3: @@ -3594,8 +3610,8 @@ packages: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true - /clean-css/5.3.0: - resolution: {integrity: sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ==} + /clean-css/5.3.1: + resolution: {integrity: sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==} engines: {node: '>= 10.0'} dependencies: source-map: 0.6.1 @@ -4619,8 +4635,9 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fastest-levenshtein/1.0.12: - resolution: {integrity: sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==} + /fastest-levenshtein/1.0.14: + resolution: {integrity: sha512-tFfWHjnuUfKE186Tfgr+jtaFc0mZTApEgKDOeyN+FwOqRkO/zK/3h1AiRd8u8CY53owL3CUmGr/oI9p/RdyLTA==} + engines: {node: '>= 4.9.1'} dev: true /fastq/1.13.0: @@ -5105,7 +5122,7 @@ packages: hasBin: true dependencies: camel-case: 4.1.2 - clean-css: 5.3.0 + clean-css: 5.3.1 commander: 8.3.0 he: 1.2.0 param-case: 3.0.4 @@ -5302,6 +5319,11 @@ packages: side-channel: 1.0.4 dev: true + /interpret/1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: true + /interpret/2.2.0: resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} engines: {node: '>= 0.10'} @@ -7203,7 +7225,7 @@ packages: dependencies: loader-utils: 2.0.2 schema-utils: 3.1.1 - webpack: 5.73.0 + webpack: 5.73.0_webpack-cli@4.10.0 dev: true /react-dom/18.2.0_react@18.2.0: @@ -7325,6 +7347,13 @@ packages: picomatch: 2.3.1 dev: true + /rechoir/0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.1 + dev: true + /rechoir/0.7.1: resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==} engines: {node: '>= 0.10'} @@ -7744,6 +7773,25 @@ packages: engines: {node: '>=8'} dev: true + /shelljs/0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + dev: true + + /shx/0.3.4: + resolution: {integrity: sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==} + engines: {node: '>=6'} + hasBin: true + dependencies: + minimist: 1.2.6 + shelljs: 0.8.5 + dev: true + /side-channel/1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -8172,7 +8220,7 @@ packages: schema-utils: 3.1.1 serialize-javascript: 6.0.0 terser: 5.14.1 - webpack: 5.73.0 + webpack: 5.73.0_webpack-cli@4.10.0 dev: true /terser/5.14.1: @@ -8766,7 +8814,7 @@ packages: colorette: 2.0.19 commander: 7.2.0 cross-spawn: 7.0.3 - fastest-levenshtein: 1.0.12 + fastest-levenshtein: 1.0.14 import-local: 3.1.0 interpret: 2.2.0 rechoir: 0.7.1 @@ -8786,7 +8834,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.0.0 - webpack: 5.73.0 + webpack: 5.73.0_webpack-cli@4.10.0 dev: true /webpack-dev-server/4.9.3_77l47gmqkrqiei5z7sbwz5iaj4: @@ -8838,54 +8886,6 @@ packages: - utf-8-validate dev: true - /webpack-dev-server/4.9.3_webpack@5.73.0: - resolution: {integrity: sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw==} - engines: {node: '>= 12.13.0'} - hasBin: true - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/bonjour': 3.5.10 - '@types/connect-history-api-fallback': 1.3.5 - '@types/express': 4.17.13 - '@types/serve-index': 1.9.1 - '@types/serve-static': 1.13.10 - '@types/sockjs': 0.3.33 - '@types/ws': 8.5.3 - ansi-html-community: 0.0.8 - bonjour-service: 1.0.13 - chokidar: 3.5.3 - colorette: 2.0.19 - compression: 1.7.4 - connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 - express: 4.18.1 - graceful-fs: 4.2.10 - html-entities: 2.3.3 - http-proxy-middleware: 2.0.6_@types+express@4.17.13 - ipaddr.js: 2.0.1 - open: 8.4.0 - p-retry: 4.6.2 - rimraf: 3.0.2 - schema-utils: 4.0.0 - selfsigned: 2.0.1 - serve-index: 1.9.1 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack: 5.73.0 - webpack-dev-middleware: 5.3.3_webpack@5.73.0 - ws: 8.8.0 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - dev: true - /webpack-merge/5.8.0: resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} engines: {node: '>=10.0.0'} @@ -8899,46 +8899,6 @@ packages: engines: {node: '>=10.13.0'} dev: true - /webpack/5.73.0: - resolution: {integrity: sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/eslint-scope': 3.7.4 - '@types/estree': 0.0.51 - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/wasm-edit': 1.11.1 - '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.7.1 - acorn-import-assertions: 1.8.0_acorn@8.7.1 - browserslist: 4.21.1 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.10.0 - es-module-lexer: 0.9.3 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.1.1 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.3_webpack@5.73.0 - watchpack: 2.4.0 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - dev: true - /webpack/5.73.0_webpack-cli@4.10.0: resolution: {integrity: sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA==} engines: {node: '>=10.13.0'}