From 48e62fa77c8e3b10768b76723e94a950e301514f Mon Sep 17 00:00:00 2001 From: devloco <40293912+devloco@users.noreply.github.com> Date: Sun, 15 Dec 2019 19:11:19 -0600 Subject: [PATCH 01/11] README changes --- README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 29c0b65..f6cd815 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ # Create React WP Theme -Dec. 5, 2019 +Dec. 15, 2019
-[v3.3.0](https://github.com/facebook/create-react-app/releases/tag/v3.3.0) of [Create React App](https://create-react-app.dev/) was released yesterday. I usually wait a few days before updating `create-react-wptheme` just to make sure that they don't have any major bugs. So look for the updated `create-react-wptheme` sometime Wed-Thu next week. +[v3.3.0](https://github.com/facebook/create-react-app/releases/tag/v3.3.0) of [Create React App](https://create-react-app.dev/) was released. It's a major change, and it's going take me another week to make the changes to `create-react-wptheme`. But don't let that stop you from creating a new theme now, as updating your theme is quite painless (see [Updating Existing Themes](#updating-existing-themes)) below. The current release of `create-react-wptheme` is based on [v3.2.0](https://github.com/facebook/create-react-app/releases/tag/v3.2.0) of [Create React App](https://create-react-app.dev/). ----- +--- The intention of this project is to maintain a set of custom `react-scripts` that will allow you to create React WordPress themes as easily as `create-react-app` allows other devs to create their apps. @@ -28,18 +28,18 @@ Check it out: For more details check out the rest of this document. -- [Creating a New Theme](#creating-a-new-theme) -- [Updating Existing Themes](#updating-existing-themes) -- [Developing Your Theme](#developing-your-theme) - - [React Tutorials](#react-tutorials) - - [The Public Folder](#the-public-folder) - - [Dev Configuration](#dev-configuration) - - [HTTPS/SSL Support](#httpsssl-support) -- [Deploying Your Theme](#deploying-your-theme) - - [Dealing With Differing Paths Between DEV and PROD](#dealing-with-differing-paths-between-dev-and-prod) -- [Goals](#goals) -- [Acknowledgements](#acknowledgements) -- [License](#license) +- [Creating a New Theme](#creating-a-new-theme) +- [Updating Existing Themes](#updating-existing-themes) +- [Developing Your Theme](#developing-your-theme) + - [React Tutorials](#react-tutorials) + - [The Public Folder](#the-public-folder) + - [Dev Configuration](#dev-configuration) + - [HTTPS/SSL Support](#httpsssl-support) +- [Deploying Your Theme](#deploying-your-theme) + - [Dealing With Differing Paths Between DEV and PROD](#dealing-with-differing-paths-between-dev-and-prod) +- [Goals](#goals) +- [Acknowledgements](#acknowledgements) +- [License](#license) ## Creating a New Theme From 4f417061499412f6594598a7dfe30126686c7737 Mon Sep 17 00:00:00 2001 From: devloco <40293912+devloco@users.noreply.github.com> Date: Tue, 24 Dec 2019 16:08:02 -0600 Subject: [PATCH 02/11] Setup yarn workspaces --- cra-template-wptheme-typescript/README.md | 20 +++ cra-template-wptheme-typescript/package.json | 38 +++++ cra-template-wptheme-typescript/template.json | 12 ++ .../template/README.md | 44 ++++++ .../template/gitignore | 23 +++ .../template/public/favicon.ico | Bin 0 -> 22382 bytes .../template/public/index.html | 43 ++++++ .../template/public/index.php | 37 +++++ .../template/public/logo192.png | Bin 0 -> 8581 bytes .../template/public/logo512.png | Bin 0 -> 22920 bytes .../template/public/manifest.json | 25 +++ .../template/public/post_installer.php | 52 +++++++ .../template/public/robots.txt | 2 + .../template/public/screenshot.png | Bin 0 -> 45473 bytes .../template/public/style.css | 13 ++ .../template/src/App.css | 22 +++ .../template/src/App.test.tsx | 9 ++ .../template/src/App.tsx | 26 ++++ .../template/src/index.css | 13 ++ .../template/src/index.tsx | 12 ++ .../template/src/logo.svg | 1 + .../template/src/serviceWorker.ts | 143 ++++++++++++++++++ cra-template-wptheme/README.md | 10 ++ cra-template-wptheme/package.json | 37 +++++ cra-template-wptheme/template.json | 7 + cra-template-wptheme/template/README.md | 68 +++++++++ cra-template-wptheme/template/gitignore | 23 +++ .../template/public/favicon.ico | Bin 0 -> 22382 bytes .../template/public/index.html | 43 ++++++ .../template/public/index.php | 37 +++++ .../template/public/logo192.png | Bin 0 -> 8581 bytes .../template/public/logo512.png | Bin 0 -> 22920 bytes .../template/public/manifest.json | 25 +++ .../template/public/post_installer.php | 52 +++++++ .../template/public/robots.txt | 2 + .../template/public/screenshot.png | Bin 0 -> 45473 bytes .../template/public/style.css | 13 ++ cra-template-wptheme/template/src/App.css | 22 +++ cra-template-wptheme/template/src/App.js | 26 ++++ cra-template-wptheme/template/src/App.test.js | 9 ++ cra-template-wptheme/template/src/index.css | 13 ++ cra-template-wptheme/template/src/index.js | 12 ++ cra-template-wptheme/template/src/logo.svg | 1 + .../template/src/serviceWorker.js | 135 +++++++++++++++++ create-react-wptheme/.npmignore | 3 + create-react-wptheme/.npmrc | 2 + create-react-wptheme/LICENSE | 21 +++ .../createReactWpTheme.js | 0 index.js => create-react-wptheme/index.js | 0 create-react-wptheme/package.json | 54 +++++++ package.json | 58 +------ 51 files changed, 1156 insertions(+), 52 deletions(-) create mode 100644 cra-template-wptheme-typescript/README.md create mode 100644 cra-template-wptheme-typescript/package.json create mode 100644 cra-template-wptheme-typescript/template.json create mode 100644 cra-template-wptheme-typescript/template/README.md create mode 100644 cra-template-wptheme-typescript/template/gitignore create mode 100644 cra-template-wptheme-typescript/template/public/favicon.ico create mode 100644 cra-template-wptheme-typescript/template/public/index.html create mode 100644 cra-template-wptheme-typescript/template/public/index.php create mode 100644 cra-template-wptheme-typescript/template/public/logo192.png create mode 100644 cra-template-wptheme-typescript/template/public/logo512.png create mode 100644 cra-template-wptheme-typescript/template/public/manifest.json create mode 100644 cra-template-wptheme-typescript/template/public/post_installer.php create mode 100644 cra-template-wptheme-typescript/template/public/robots.txt create mode 100644 cra-template-wptheme-typescript/template/public/screenshot.png create mode 100644 cra-template-wptheme-typescript/template/public/style.css create mode 100644 cra-template-wptheme-typescript/template/src/App.css create mode 100644 cra-template-wptheme-typescript/template/src/App.test.tsx create mode 100644 cra-template-wptheme-typescript/template/src/App.tsx create mode 100644 cra-template-wptheme-typescript/template/src/index.css create mode 100644 cra-template-wptheme-typescript/template/src/index.tsx create mode 100644 cra-template-wptheme-typescript/template/src/logo.svg create mode 100644 cra-template-wptheme-typescript/template/src/serviceWorker.ts create mode 100644 cra-template-wptheme/README.md create mode 100644 cra-template-wptheme/package.json create mode 100644 cra-template-wptheme/template.json create mode 100644 cra-template-wptheme/template/README.md create mode 100644 cra-template-wptheme/template/gitignore create mode 100644 cra-template-wptheme/template/public/favicon.ico create mode 100644 cra-template-wptheme/template/public/index.html create mode 100644 cra-template-wptheme/template/public/index.php create mode 100644 cra-template-wptheme/template/public/logo192.png create mode 100644 cra-template-wptheme/template/public/logo512.png create mode 100644 cra-template-wptheme/template/public/manifest.json create mode 100644 cra-template-wptheme/template/public/post_installer.php create mode 100644 cra-template-wptheme/template/public/robots.txt create mode 100644 cra-template-wptheme/template/public/screenshot.png create mode 100644 cra-template-wptheme/template/public/style.css create mode 100644 cra-template-wptheme/template/src/App.css create mode 100644 cra-template-wptheme/template/src/App.js create mode 100644 cra-template-wptheme/template/src/App.test.js create mode 100644 cra-template-wptheme/template/src/index.css create mode 100644 cra-template-wptheme/template/src/index.js create mode 100644 cra-template-wptheme/template/src/logo.svg create mode 100644 cra-template-wptheme/template/src/serviceWorker.js create mode 100644 create-react-wptheme/.npmignore create mode 100644 create-react-wptheme/.npmrc create mode 100644 create-react-wptheme/LICENSE rename createReactWpTheme.js => create-react-wptheme/createReactWpTheme.js (100%) rename index.js => create-react-wptheme/index.js (100%) create mode 100644 create-react-wptheme/package.json diff --git a/cra-template-wptheme-typescript/README.md b/cra-template-wptheme-typescript/README.md new file mode 100644 index 0000000..e719756 --- /dev/null +++ b/cra-template-wptheme-typescript/README.md @@ -0,0 +1,20 @@ +# cra-template-typescript + +This is the official TypeScript template for [Create React App](https://github.com/facebook/create-react-app). + +To use this template, add `--template typescript` when creating a new app. + +For example: + +```sh +npx create-react-app my-app --template typescript + +# or + +yarn create react-app my-app --template typescript +``` + +For more information, please refer to: + +- [Getting Started](https://create-react-app.dev/docs/getting-started) – How to create a new app. +- [User Guide](https://create-react-app.dev) – How to develop apps bootstrapped with Create React App. diff --git a/cra-template-wptheme-typescript/package.json b/cra-template-wptheme-typescript/package.json new file mode 100644 index 0000000..d28ae33 --- /dev/null +++ b/cra-template-wptheme-typescript/package.json @@ -0,0 +1,38 @@ +{ + "name": "cra-template-wptheme-typescript", + "version": "3.3.0-wp.1", + "keywords": [ + "wordpress", + "create-react-app", + "wordpress-theme", + "wordpress-development", + "wordpress-starter-theme", + "wordpress-api", + "reactjs", + "react", + "react-theme", + "wordpress-server", + "react-tutorial", + "react-wordpress-themes", + "php", + "typescript", + "template" + ], + "description": "The TypeScript template for Create React WPTheme.", + "main": "template.json", + "repository": { + "type": "git", + "url": "https://github.com/devloco/create-react-wptheme.git" + }, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "bugs": { + "url": "https://github.com/devloco/create-react-wptheme/issues" + }, + "files": [ + "template", + "template.json" + ] +} diff --git a/cra-template-wptheme-typescript/template.json b/cra-template-wptheme-typescript/template.json new file mode 100644 index 0000000..06d73b7 --- /dev/null +++ b/cra-template-wptheme-typescript/template.json @@ -0,0 +1,12 @@ +{ + "dependencies": { + "@testing-library/react": "^9.3.2", + "@testing-library/jest-dom": "^4.2.4", + "@testing-library/user-event": "^7.1.2", + "@types/node": "^12.0.0", + "@types/react": "^16.9.0", + "@types/react-dom": "^16.9.0", + "@types/jest": "^24.0.0", + "typescript": "~3.7.2" + } +} diff --git a/cra-template-wptheme-typescript/template/README.md b/cra-template-wptheme-typescript/template/README.md new file mode 100644 index 0000000..a31481c --- /dev/null +++ b/cra-template-wptheme-typescript/template/README.md @@ -0,0 +1,44 @@ +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.
+Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.
+You will also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.
+See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.
+It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.
+Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). diff --git a/cra-template-wptheme-typescript/template/gitignore b/cra-template-wptheme-typescript/template/gitignore new file mode 100644 index 0000000..4d29575 --- /dev/null +++ b/cra-template-wptheme-typescript/template/gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/cra-template-wptheme-typescript/template/public/favicon.ico b/cra-template-wptheme-typescript/template/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c2c86b859eaa20639adf92ff979c2be8d580433e GIT binary patch literal 22382 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 QPNaAH_W=L@JAozeZ|l@fegFUf literal 0 HcmV?d00001 diff --git a/cra-template-wptheme-typescript/template/public/index.html b/cra-template-wptheme-typescript/template/public/index.html new file mode 100644 index 0000000..c240d2c --- /dev/null +++ b/cra-template-wptheme-typescript/template/public/index.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + React App + + + +
+ + + diff --git a/cra-template-wptheme-typescript/template/public/index.php b/cra-template-wptheme-typescript/template/public/index.php new file mode 100644 index 0000000..faf7b78 --- /dev/null +++ b/cra-template-wptheme-typescript/template/public/index.php @@ -0,0 +1,37 @@ + + +Now, back in your command prompt, rerun the "start" script again... + + diff --git a/cra-template-wptheme-typescript/template/public/logo192.png b/cra-template-wptheme-typescript/template/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fa313abf53936aefc517dbd583b724a57199d415 GIT binary patch literal 8581 zcmaiac_5VE{_rzKwn+A*7-QepMq}U2*s@1OwlPM=Fi2!eWJ~rfBhg5aqM0lSqfKO~ zNmx@9*BR`^U^P=X{puv!8Q5XVM+)t$4T&asdFqgGQM|Oj~&iEny;YNmB`sZ{(26#+_59}O1I3!&6 zoB{j~UtRF`?z9>l_6H^6i~-!;&H-jdAYx!gRF9~t!wtD$`b7T#T_r>z`wlWAK-r@1kLxKNzVC%{wHKRyZ<*j9{(?DghyDM1r71HQU67z|9L^U zOLQnk%?T4uh$Q-9EY4y=BBcIUV%ILZ4!CoeV0UvI9upD{TGs%sfzu>U#ftP(*?cJuFlgw$92H#PMCApEa{1?m2p0}BCIQPloXQozAKiV`LStVBex zKzZ?yVb0=q95+@1O6epKJWbED;n?{l$x9(CKT3H^-)LqZKB zDON(RN?gY{j@1jh<~OJ471+k2S6xPK^z2C?*cmu7Me^UcZfkmES|)kpMb6eFgnbfG z5>=5?R;!UK_H>N@;n(rBv~O?#H7ESjRL(RF2$2<)ORIob`Y(UR|VV65ilX0O1pBw~-cAurF3 zSk@-1mKVdn_Oh#Qs>a;Dxin`s&PMWlM}4}FL@=GccyRcWP>*bgT{UBg^@Jbe;iaOK zpuzZMWJl`E!`Qb%b3aTfNQ9G{Y@2(q4=i5FM}eycXDG@e902w`-TgocmG+4Nz`+k_ za}$?yr0?ZX6Xh0#-3e$^s5zSBNP+wvR4&AkkM9)jpu6#CB*4ci=wRX*>M>g@80ERg zf*T>|p5f%*z&0cl+GXk?6t-VTD7RM0BI6LN#zuGf3Ug}e!^$-+X7p6F*5u&y7P+5< zY>gTi(wYVet*f1GyD0w0$D2!{c%_`Z%(-Ad4;bO4bpUSAP@Y63NGv-o3SDM3_NIZm zfT9ICl>A|uDv(&XvAq@#hyX_=Xm82=r^|-b)!y_11r!47d}(6sF!bCJTzI%|VTKt} zZ!hgOaD_uK431kINLGAcJsv@k?1ntgmN?v8ZzZ9HE~~~XUMIb0rKyb# z`6LeKBCrqYS&Ih_Bofa$14e|C*^-CM$4KLrPkKkoAi)!s<9;PJWBMaa{D&U;1NB#^ z+}BLUHmlPw6;Q?@t0n^Y6nf#7v0Q=6fEN$L0^%x?hiK+~F?NXN2zwSyC^fpH_3Sz+ zZcpMpS-~|7u#t<%)*3$zFjUb{&yqbE#~qLxF#tC7Wq0gM?`S_TA$TGo@d>)@jWdVS zzy}uZC#+RJAPwR;frt|~NaYX)AxUvi8Xqr0cXN*D0!D5m)bd#&+c;=C0%_~IxWx>V zr;|#wn+#q&L#T@6dDy_r*Ku9hflBNhO#xb@UQFgAChaD+eE~vNp#Yt8lRo!xqzMv8 zpL)(plyw{sXJ@zvEO?N!{NDu@(0Q&eyiQ0K&juWFeFMVZr*BzqVROG@46X^q>Qun+ zRqVN^A{J!N9XLNFXg{VeL_3k|D}H<+ME!0Karr^o?B;Y1LhE2l*(!oEaq@l;Uk|ke za`hBe5gP>w^+--LK$qEAzA)saZS&oq4m}p>Bu18T1MAIn> zIDuL#<>pW>1uSo0JxczWy`5*NS0QB<+7cJs#Vt6WFuC7WD)8j6V}U+2f`vYHMYv;v zVl(4F?k9}DlPn4X(&rEVs%5)6*8EInkb2{wu_>yonB|<^b6Er&ui7i0kOI#6qRJK_ zcgjqDlfE{5kRReP`l#f#(=K@mQr18F6*;f;1n;IkCR9F<=0tie|8@x^!$I(&#ou=gg zxIb1t{%M@)%agctHG_)&s7lHbJlq1coEHdag`3%dA}4$ibQ&1w0oCpGc)i%Aao>8M z!He?xItYiiD3CZE@D{$GIX4X`qvVNE%;4J^*3I5Uex2|$c}_fu8$Rvob;1yN>}hsJ z19z3toM)rWXJj8Sl5Ib&9Fn04Fy|HlQfXuQ%L2;a3wa~fcl>G8weS!N(_3sg96Rot zRy^8~b;PE<-8agwyFeM2mOn_>3ERfL6IwVpe43aN%dQj~RO3<*1n5xf6LWGVJSY$v z`>?0kiB{+?2@1-vj8uX!gHfnoDO-H-Slyf7S;p)SvISU>QP3GK!=U$LkAu$hJXhKS z(5DUp-5i+jVB(v(*U+twBpSyagr9w3Ip|9dAkPB0aLq5-K}D;u6NNx6Bw4DzD^da% zKGb5m?U+?immbmrmkfGUC19bkT80C=8Q@hUv!NA03r$le9g@hsZiv*6kdSQBzk<6!# z%ViAiP90o^R4G%nuhxQ9MvRuA@$$%8g7-7pSHF{V*`tnNA!bi}pYrxPN4gShc+YK`~gW@(954+66+E&0wx)Y6Y;ghQ9SuoZ>Q%|e&EA&>alzla?J-uP|t z3Wfm2OEGi0)ndjy-Pa4P&(=a*i2P+UYI+v-$9hMjfxBjvT?LB1hMbK0?S*5Gf_^~n zXbp7LFwr-=PZ7P!kr-9r%Z;xYDTOku0kt6KY>xOnjD5eIq~BlokpA}j_V9VggqT44 zKt)hLdxLD^5=8mXf^%?UgT^7Nu|tzLS?YJ!0Ht}eZ-u>H&ITbke&*Z)@L{q^Jhu-l zj=>LKTk3T6j(*;33{WWFu>>+ruY9xqx(OJM9TIc+jsxsb^){@$^4MZUY-{C0e$JNc zNOwc47;Rz#pY>5|#;!Htz$QEM&TqS}UYv_{??XU(0oA;6iE?>C9xDPlDoUH;jLZ*B z=`1xYry}*E{6>q6dq+oSqK_c@J!cG5J9FAz^LsVLl~ALP=LD2G4tVV~X;A;sS3~jy z7|@wDyCeO>sIucz{MVj=E4U6YqL~`Z_EQEwlI>PN;RW0aPj>t+v#ZoNZ8|nrias0k z;n-L#?7=JYc`#3L+h##^i_loPdd_Tzv(r{TpH@d~dpVrtWzIQMaCt=no8liUoVe_K zL5p9E>mFpTt(@n$Cd~EA@xAP;k2if5Vy!PybJr*oV;~0IkR0d^vV5W z=mM}r$Z1MmD>N;Y47MKYgW-iaDum;4r@**0vJsTTxA@R(jK6T!k>Zdy4y^cWK*{~7 zn@(XeUtWHmDxgee3h@Vn?=6SeGS$R;#XH^%!tn9PdBV6lCKO>OAu>ZnIW$E+lGu5j zq&R6kvgzLvL7(EJ2SgFL&p@sxe+OvG@d%E1qzJXrdEf&y@$mGet~OK|uh#ff$kVA@ z1n=dX1@_+^`-Q6su~w23R4?1H5S z1A@)QHXUw3S8UodsU8H>mMbiij7X(&4*VXG?Hzsl>b%P!=3T>a@1(&^UUF8Tw%fq= ze%hi;aKAE0U0m_BA5{*Nj`1pJg68?i!58d$G z*z<3jX&VXlrendgJYTP(9HWR=tZTHvU}|Jo1&Tcn==i*YFnzAx(u$Mg)AcZTE^2Ty zaFz%paMl~yN-%@xSB%HfNW6uVvW?R+7gA*`5yJEUJp#wDRa)3Kl_)I*?h7|ee?QJj zoi zYKxUq@i8H_$Xk$AGGUkv(V~MB(8JVxabnJ$WMw9dR&=0D1v)e<@t1Y^uT_;FzaTNH z`qEejf(!TivhC~tXvk5^*nu5TFQcvnd3!2|arRzQly56_;k)i()tJ^K9Wrq?HW%Gg zsK}qBlVoQ4?aF#zkrt@@ah5L$uhgPVd8}+N#q9x33IB3)MT)ig2;3kQPWVFsR9QD| zuuD02e8fhTJ{8P;=q*vSiN6Ht;2k+X!LdGCK>a9djp|1$q~s#h^4~3FuZf95*!Qn# zE=k&b)43wW|59u(&MY3$V(z{))FtqsOVs#acbs3(CG8{Rem(vSJ*@_>&p+MeIBefi z1�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 b!B~?t+WWKS5u5)CcMJGaRz{_UZlwPKNp@r} literal 0 HcmV?d00001 diff --git a/cra-template-wptheme-typescript/template/public/manifest.json b/cra-template-wptheme-typescript/template/public/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/cra-template-wptheme-typescript/template/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/cra-template-wptheme-typescript/template/public/post_installer.php b/cra-template-wptheme-typescript/template/public/post_installer.php new file mode 100644 index 0000000..db3f720 --- /dev/null +++ b/cra-template-wptheme-typescript/template/public/post_installer.php @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + React WordPress Theme + + + +

+ + + diff --git a/cra-template-wptheme-typescript/template/public/robots.txt b/cra-template-wptheme-typescript/template/public/robots.txt new file mode 100644 index 0000000..01b0f9a --- /dev/null +++ b/cra-template-wptheme-typescript/template/public/robots.txt @@ -0,0 +1,2 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * diff --git a/cra-template-wptheme-typescript/template/public/screenshot.png b/cra-template-wptheme-typescript/template/public/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4277c697ee6f5e4d4576c3ff54f57550767e83 GIT binary patch literal 45473 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 g$MI)<^D{`2v65r|2UrU8+#?9ng9R* literal 0 HcmV?d00001 diff --git a/cra-template-wptheme-typescript/template/public/style.css b/cra-template-wptheme-typescript/template/public/style.css new file mode 100644 index 0000000..9034d75 --- /dev/null +++ b/cra-template-wptheme-typescript/template/public/style.css @@ -0,0 +1,13 @@ +/* +Theme Name: REPLACE_WITH_THEME_NAME +Author: your-name +Author URI: https://github.com/your-github +Description: Create React WP Themes with no build configuration +Version: 0.1 +License: GNU General Public License v2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html +Tags: starter +Text Domain: your-domain + +This theme, like WordPress, is licensed under the GPL. +*/ diff --git a/cra-template-wptheme-typescript/template/src/App.css b/cra-template-wptheme-typescript/template/src/App.css new file mode 100644 index 0000000..afc3885 --- /dev/null +++ b/cra-template-wptheme-typescript/template/src/App.css @@ -0,0 +1,22 @@ +.App { + text-align: center; +} + +.App-logo { + height: 40vmin; +} + +.App-header { + background-color: #282c34; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: calc(10px + 2vmin); + color: white; +} + +.App-link { + color: #09d3ac; +} diff --git a/cra-template-wptheme-typescript/template/src/App.test.tsx b/cra-template-wptheme-typescript/template/src/App.test.tsx new file mode 100644 index 0000000..a754b20 --- /dev/null +++ b/cra-template-wptheme-typescript/template/src/App.test.tsx @@ -0,0 +1,9 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; + +it('renders without crashing', () => { + const div = document.createElement('div'); + ReactDOM.render(, div); + ReactDOM.unmountComponentAtNode(div); +}); diff --git a/cra-template-wptheme-typescript/template/src/App.tsx b/cra-template-wptheme-typescript/template/src/App.tsx new file mode 100644 index 0000000..7f0f195 --- /dev/null +++ b/cra-template-wptheme-typescript/template/src/App.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import logo from './logo.svg'; +import './App.css'; + +const App: React.FC = () => { + return ( +
+
+ logo +

+ Edit react-src/src/App.tsx and save to reload. +

+ + Learn React + +
+
+ ); +}; + +export default App; diff --git a/cra-template-wptheme-typescript/template/src/index.css b/cra-template-wptheme-typescript/template/src/index.css new file mode 100644 index 0000000..ec2585e --- /dev/null +++ b/cra-template-wptheme-typescript/template/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/cra-template-wptheme-typescript/template/src/index.tsx b/cra-template-wptheme-typescript/template/src/index.tsx new file mode 100644 index 0000000..825db58 --- /dev/null +++ b/cra-template-wptheme-typescript/template/src/index.tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import './index.css'; +import App from './App'; +// import * as serviceWorker from './serviceWorker'; + +ReactDOM.render(, document.getElementById('root')); + +// If you want your app to work offline and load faster, you can change +// unregister() to register() below. Note this comes with some pitfalls. +// Learn more about service workers: https://bit.ly/CRA-PWA +// serviceWorker.unregister(); diff --git a/cra-template-wptheme-typescript/template/src/logo.svg b/cra-template-wptheme-typescript/template/src/logo.svg new file mode 100644 index 0000000..2e5df0d --- /dev/null +++ b/cra-template-wptheme-typescript/template/src/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/cra-template-wptheme-typescript/template/src/serviceWorker.ts b/cra-template-wptheme-typescript/template/src/serviceWorker.ts new file mode 100644 index 0000000..15d90cb --- /dev/null +++ b/cra-template-wptheme-typescript/template/src/serviceWorker.ts @@ -0,0 +1,143 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://bit.ly/CRA-PWA + +const isLocalhost = Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.1/8 is considered localhost for IPv4. + window.location.hostname.match( + /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ + ) +); + +type Config = { + onSuccess?: (registration: ServiceWorkerRegistration) => void; + onUpdate?: (registration: ServiceWorkerRegistration) => void; +}; + +export function register(config?: Config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL( + (process as { env: { [key: string]: string } }).env.PUBLIC_URL, + window.location.href + ); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + 'This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://bit.ly/CRA-PWA' + ); + }); + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} + +function registerValidSW(swUrl: string, config?: Config) { + navigator.serviceWorker + .register(swUrl) + .then(registration => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + 'New content is available and will be used when all ' + + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' + ); + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch(error => { + console.error('Error during service worker registration:', error); + }); +} + +function checkValidServiceWorker(swUrl: string, config?: Config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl) + .then(response => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get('content-type'); + if ( + response.status === 404 || + (contentType != null && contentType.indexOf('javascript') === -1) + ) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(registration => { + registration.unregister().then(() => { + window.location.reload(); + }); + }); + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(() => { + console.log( + 'No internet connection found. App is running in offline mode.' + ); + }); +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready.then(registration => { + registration.unregister(); + }); + } +} diff --git a/cra-template-wptheme/README.md b/cra-template-wptheme/README.md new file mode 100644 index 0000000..9e8434b --- /dev/null +++ b/cra-template-wptheme/README.md @@ -0,0 +1,10 @@ +# cra-template + +This is the official base template for [Create React App](https://github.com/facebook/create-react-app). + +If you don't specify a template (for example, `--template typescript`), this template will be used by default. + +For more information, please refer to: + +- [Getting Started](https://create-react-app.dev/docs/getting-started) – How to create a new app. +- [User Guide](https://create-react-app.dev) – How to develop apps bootstrapped with Create React App. diff --git a/cra-template-wptheme/package.json b/cra-template-wptheme/package.json new file mode 100644 index 0000000..3e244ea --- /dev/null +++ b/cra-template-wptheme/package.json @@ -0,0 +1,37 @@ +{ + "name": "cra-template-wptheme", + "version": "3.3.0-wp.1", + "keywords": [ + "wordpress", + "create-react-app", + "wordpress-theme", + "wordpress-development", + "wordpress-starter-theme", + "wordpress-api", + "reactjs", + "react", + "react-theme", + "wordpress-server", + "react-tutorial", + "react-wordpress-themes", + "php", + "template" + ], + "description": "The base template for Create React WPTheme.", + "main": "template.json", + "repository": { + "type": "git", + "url": "https://github.com/devloco/create-react-wptheme.git" + }, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "bugs": { + "url": "https://github.com/devloco/create-react-wptheme/issues" + }, + "files": [ + "template", + "template.json" + ] +} diff --git a/cra-template-wptheme/template.json b/cra-template-wptheme/template.json new file mode 100644 index 0000000..0cc6ba2 --- /dev/null +++ b/cra-template-wptheme/template.json @@ -0,0 +1,7 @@ +{ + "dependencies": { + "@testing-library/react": "^9.3.2", + "@testing-library/jest-dom": "^4.2.4", + "@testing-library/user-event": "^7.1.2" + } +} diff --git a/cra-template-wptheme/template/README.md b/cra-template-wptheme/template/README.md new file mode 100644 index 0000000..859d27a --- /dev/null +++ b/cra-template-wptheme/template/README.md @@ -0,0 +1,68 @@ +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.
+Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.
+You will also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.
+See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.
+It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.
+Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting + +### Analyzing the Bundle Size + +This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size + +### Making a Progressive Web App + +This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app + +### Advanced Configuration + +This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration + +### Deployment + +This section has moved here: https://facebook.github.io/create-react-app/docs/deployment + +### `npm run build` fails to minify + +This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify diff --git a/cra-template-wptheme/template/gitignore b/cra-template-wptheme/template/gitignore new file mode 100644 index 0000000..4d29575 --- /dev/null +++ b/cra-template-wptheme/template/gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/cra-template-wptheme/template/public/favicon.ico b/cra-template-wptheme/template/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c2c86b859eaa20639adf92ff979c2be8d580433e GIT binary patch literal 22382 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 QPNaAH_W=L@JAozeZ|l@fegFUf literal 0 HcmV?d00001 diff --git a/cra-template-wptheme/template/public/index.html b/cra-template-wptheme/template/public/index.html new file mode 100644 index 0000000..c240d2c --- /dev/null +++ b/cra-template-wptheme/template/public/index.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + React App + + + +
+ + + diff --git a/cra-template-wptheme/template/public/index.php b/cra-template-wptheme/template/public/index.php new file mode 100644 index 0000000..faf7b78 --- /dev/null +++ b/cra-template-wptheme/template/public/index.php @@ -0,0 +1,37 @@ + + +Now, back in your command prompt, rerun the "start" script again... + + diff --git a/cra-template-wptheme/template/public/logo192.png b/cra-template-wptheme/template/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fa313abf53936aefc517dbd583b724a57199d415 GIT binary patch literal 8581 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�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 b!B~?t+WWKS5u5)CcMJGaRz{_UZlwPKNp@r} literal 0 HcmV?d00001 diff --git a/cra-template-wptheme/template/public/manifest.json b/cra-template-wptheme/template/public/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/cra-template-wptheme/template/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/cra-template-wptheme/template/public/post_installer.php b/cra-template-wptheme/template/public/post_installer.php new file mode 100644 index 0000000..db3f720 --- /dev/null +++ b/cra-template-wptheme/template/public/post_installer.php @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + React WordPress Theme + + + +

+ + + diff --git a/cra-template-wptheme/template/public/robots.txt b/cra-template-wptheme/template/public/robots.txt new file mode 100644 index 0000000..01b0f9a --- /dev/null +++ b/cra-template-wptheme/template/public/robots.txt @@ -0,0 +1,2 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * diff --git a/cra-template-wptheme/template/public/screenshot.png b/cra-template-wptheme/template/public/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4277c697ee6f5e4d4576c3ff54f57550767e83 GIT binary patch literal 45473 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 g$MI)<^D{`2v65r|2UrU8+#?9ng9R* literal 0 HcmV?d00001 diff --git a/cra-template-wptheme/template/public/style.css b/cra-template-wptheme/template/public/style.css new file mode 100644 index 0000000..9034d75 --- /dev/null +++ b/cra-template-wptheme/template/public/style.css @@ -0,0 +1,13 @@ +/* +Theme Name: REPLACE_WITH_THEME_NAME +Author: your-name +Author URI: https://github.com/your-github +Description: Create React WP Themes with no build configuration +Version: 0.1 +License: GNU General Public License v2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html +Tags: starter +Text Domain: your-domain + +This theme, like WordPress, is licensed under the GPL. +*/ diff --git a/cra-template-wptheme/template/src/App.css b/cra-template-wptheme/template/src/App.css new file mode 100644 index 0000000..afc3885 --- /dev/null +++ b/cra-template-wptheme/template/src/App.css @@ -0,0 +1,22 @@ +.App { + text-align: center; +} + +.App-logo { + height: 40vmin; +} + +.App-header { + background-color: #282c34; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: calc(10px + 2vmin); + color: white; +} + +.App-link { + color: #09d3ac; +} diff --git a/cra-template-wptheme/template/src/App.js b/cra-template-wptheme/template/src/App.js new file mode 100644 index 0000000..e55c89f --- /dev/null +++ b/cra-template-wptheme/template/src/App.js @@ -0,0 +1,26 @@ +import React from 'react'; +import logo from './logo.svg'; +import './App.css'; + +function App() { + return ( +
+
+ logo +

+ Edit react-src/src/App.js and save to reload. +

+ + Learn React + +
+
+ ); +} + +export default App; diff --git a/cra-template-wptheme/template/src/App.test.js b/cra-template-wptheme/template/src/App.test.js new file mode 100644 index 0000000..a754b20 --- /dev/null +++ b/cra-template-wptheme/template/src/App.test.js @@ -0,0 +1,9 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; + +it('renders without crashing', () => { + const div = document.createElement('div'); + ReactDOM.render(, div); + ReactDOM.unmountComponentAtNode(div); +}); diff --git a/cra-template-wptheme/template/src/index.css b/cra-template-wptheme/template/src/index.css new file mode 100644 index 0000000..4a1df4d --- /dev/null +++ b/cra-template-wptheme/template/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", + "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", + monospace; +} diff --git a/cra-template-wptheme/template/src/index.js b/cra-template-wptheme/template/src/index.js new file mode 100644 index 0000000..825db58 --- /dev/null +++ b/cra-template-wptheme/template/src/index.js @@ -0,0 +1,12 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import './index.css'; +import App from './App'; +// import * as serviceWorker from './serviceWorker'; + +ReactDOM.render(, document.getElementById('root')); + +// If you want your app to work offline and load faster, you can change +// unregister() to register() below. Note this comes with some pitfalls. +// Learn more about service workers: https://bit.ly/CRA-PWA +// serviceWorker.unregister(); diff --git a/cra-template-wptheme/template/src/logo.svg b/cra-template-wptheme/template/src/logo.svg new file mode 100644 index 0000000..2e5df0d --- /dev/null +++ b/cra-template-wptheme/template/src/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/cra-template-wptheme/template/src/serviceWorker.js b/cra-template-wptheme/template/src/serviceWorker.js new file mode 100644 index 0000000..f8c7e50 --- /dev/null +++ b/cra-template-wptheme/template/src/serviceWorker.js @@ -0,0 +1,135 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://bit.ly/CRA-PWA + +const isLocalhost = Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.1/8 is considered localhost for IPv4. + window.location.hostname.match( + /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ + ) +); + +export function register(config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + 'This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://bit.ly/CRA-PWA' + ); + }); + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} + +function registerValidSW(swUrl, config) { + navigator.serviceWorker + .register(swUrl) + .then(registration => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + 'New content is available and will be used when all ' + + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' + ); + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch(error => { + console.error('Error during service worker registration:', error); + }); +} + +function checkValidServiceWorker(swUrl, config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl) + .then(response => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get('content-type'); + if ( + response.status === 404 || + (contentType != null && contentType.indexOf('javascript') === -1) + ) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(registration => { + registration.unregister().then(() => { + window.location.reload(); + }); + }); + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(() => { + console.log( + 'No internet connection found. App is running in offline mode.' + ); + }); +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready.then(registration => { + registration.unregister(); + }); + } +} diff --git a/create-react-wptheme/.npmignore b/create-react-wptheme/.npmignore new file mode 100644 index 0000000..7bd879d --- /dev/null +++ b/create-react-wptheme/.npmignore @@ -0,0 +1,3 @@ +/.git +/.gitignore +.gitattributes diff --git a/create-react-wptheme/.npmrc b/create-react-wptheme/.npmrc new file mode 100644 index 0000000..46db3e1 --- /dev/null +++ b/create-react-wptheme/.npmrc @@ -0,0 +1,2 @@ +package-lock=false +shrinkwrap=false diff --git a/create-react-wptheme/LICENSE b/create-react-wptheme/LICENSE new file mode 100644 index 0000000..d43c3b4 --- /dev/null +++ b/create-react-wptheme/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019-present, https://github.com/devloco + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/createReactWpTheme.js b/create-react-wptheme/createReactWpTheme.js similarity index 100% rename from createReactWpTheme.js rename to create-react-wptheme/createReactWpTheme.js diff --git a/index.js b/create-react-wptheme/index.js similarity index 100% rename from index.js rename to create-react-wptheme/index.js diff --git a/create-react-wptheme/package.json b/create-react-wptheme/package.json new file mode 100644 index 0000000..11a3bbf --- /dev/null +++ b/create-react-wptheme/package.json @@ -0,0 +1,54 @@ +{ + "name": "create-react-wptheme", + "version": "3.3.0-wp.1", + "description": "Create React-enabled WP themes.", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/devloco/create-react-wptheme.git" + }, + "keywords": [ + "wordpress", + "create-react-app", + "wordpress-theme", + "wordpress-development", + "wordpress-starter-theme", + "wordpress-api", + "reactjs", + "react", + "react-theme", + "wordpress-server", + "react-tutorial", + "react-wordpress-themes", + "php" + ], + "author": "devloco", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "bugs": { + "url": "https://github.com/devloco/create-react-wptheme/issues" + }, + "files": [ + "index.js", + "createReactWpTheme.js" + ], + "homepage": "https://github.com/devloco/create-react-wptheme#readme", + "bin": { + "create-react-wptheme": "./index.js" + }, + "dependencies": { + "chalk": "2.4.2", + "commander": "2.20.0", + "cross-spawn": "6.0.5", + "envinfo": "7.3.1", + "fs-extra": "7.0.1", + "semver": "6.3.0", + "tmp": "0.0.33", + "validate-npm-package-name": "3.0.0" + } +} diff --git a/package.json b/package.json index 9fa6a37..2641e80 100644 --- a/package.json +++ b/package.json @@ -1,54 +1,8 @@ { - "name": "@devloco/create-react-wptheme", - "version": "3.2.0-wp.3", - "description": "Create React WP themes with no build configuration.", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/devloco/create-react-wptheme.git" - }, - "keywords": [ - "wordpress", - "create-react-app", - "wordpress-theme", - "wordpress-development", - "wordpress-starter-theme", - "wordpress-api", - "reactjs", - "react", - "react-theme", - "wordpress-server", - "react-tutorial", - "react-wordpress-themes", - "php" - ], - "author": "devloco", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "bugs": { - "url": "https://github.com/devloco/create-react-wptheme/issues" - }, - "files": [ - "index.js", - "createReactWpTheme.js" - ], - "homepage": "https://github.com/devloco/create-react-wptheme#readme", - "bin": { - "create-react-wptheme": "./index.js" - }, - "dependencies": { - "chalk": "2.4.2", - "commander": "2.20.0", - "cross-spawn": "6.0.5", - "envinfo": "7.3.1", - "fs-extra": "7.0.1", - "semver": "6.3.0", - "tmp": "0.0.33", - "validate-npm-package-name": "3.0.0" - } + "private": true, + "workspaces": [ + "cra-template-wptheme", + "cra-template-wptheme-typescript", + "create-react-wptheme" + ] } From bcba738f9925e7d3955218ca353221af1fe2bd95 Mon Sep 17 00:00:00 2001 From: devloco <40293912+devloco@users.noreply.github.com> Date: Tue, 24 Dec 2019 16:13:55 -0600 Subject: [PATCH 03/11] create-react-wptheme-utils in the yarn workspace --- create-react-wptheme-utils | 1 + package.json | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 160000 create-react-wptheme-utils diff --git a/create-react-wptheme-utils b/create-react-wptheme-utils new file mode 160000 index 0000000..0d06c6a --- /dev/null +++ b/create-react-wptheme-utils @@ -0,0 +1 @@ +Subproject commit 0d06c6a417291a77433a244fa02f272d30d83429 diff --git a/package.json b/package.json index 2641e80..143b652 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "workspaces": [ "cra-template-wptheme", "cra-template-wptheme-typescript", - "create-react-wptheme" + "create-react-wptheme", + "create-react-wptheme-utils" ] } From 5d0773301435223759d0dc2ed4adc64daa1c0fce Mon Sep 17 00:00:00 2001 From: devloco <40293912+devloco@users.noreply.github.com> Date: Tue, 24 Dec 2019 16:22:57 -0600 Subject: [PATCH 04/11] Update yarn workspace --- create-react-wptheme-utils | 1 - package.json | 5 +- .../README.md | 0 .../package.json | 0 .../template.json | 0 .../template/README.md | 0 .../template/gitignore | 0 .../template/public/favicon.ico | Bin .../template/public/index.html | 0 .../template/public/index.php | 0 .../template/public/logo192.png | Bin .../template/public/logo512.png | Bin .../template/public/manifest.json | 0 .../template/public/post_installer.php | 0 .../template/public/robots.txt | 0 .../template/public/screenshot.png | Bin .../template/public/style.css | 0 .../template/src/App.css | 0 .../template/src/App.test.tsx | 0 .../template/src/App.tsx | 0 .../template/src/index.css | 0 .../template/src/index.tsx | 0 .../template/src/logo.svg | 0 .../template/src/serviceWorker.ts | 0 .../cra-template-wptheme}/README.md | 0 .../cra-template-wptheme}/package.json | 0 .../cra-template-wptheme}/template.json | 0 .../cra-template-wptheme}/template/README.md | 0 .../cra-template-wptheme}/template/gitignore | 0 .../template/public/favicon.ico | Bin .../template/public/index.html | 0 .../template/public/index.php | 0 .../template/public/logo192.png | Bin .../template/public/logo512.png | Bin .../template/public/manifest.json | 0 .../template/public/post_installer.php | 0 .../template/public/robots.txt | 0 .../template/public/screenshot.png | Bin .../template/public/style.css | 0 .../template/src/App.css | 0 .../cra-template-wptheme}/template/src/App.js | 0 .../template/src/App.test.js | 0 .../template/src/index.css | 0 .../template/src/index.js | 0 .../template/src/logo.svg | 0 .../template/src/serviceWorker.js | 0 .../.gitignore | 12 + .../.npmignore | 4 + .../.npmrc | 0 .../README.md | 3 + .../package.json | 31 + .../src/index.js | 101 + .../webpack.config.js | 34 + .../fileFunctions.js | 183 ++ .../fileWatcherPlugin.js | 147 + .../getUserConfig.js | 90 + .../create-react-wptheme-utils/package.json | 39 + .../postInstallerInfo.js | 37 + .../create-react-wptheme-utils/shell-js.js | 12 + .../wpThemeClient.js | 142 + .../wpThemeErrorOverlay.js | 2387 +++++++++++++++++ .../wpThemeServer.js | 289 ++ .../create-react-wptheme}/.npmignore | 0 packages/create-react-wptheme/.npmrc | 2 + .../create-react-wptheme}/LICENSE | 0 .../createReactWpTheme.js | 0 .../create-react-wptheme}/index.js | 0 .../create-react-wptheme}/package.json | 0 68 files changed, 3514 insertions(+), 5 deletions(-) delete mode 160000 create-react-wptheme-utils rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/README.md (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/package.json (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template.json (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/README.md (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/gitignore (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/public/favicon.ico (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/public/index.html (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/public/index.php (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/public/logo192.png (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/public/logo512.png (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/public/manifest.json (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/public/post_installer.php (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/public/robots.txt (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/public/screenshot.png (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/public/style.css (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/src/App.css (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/src/App.test.tsx (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/src/App.tsx (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/src/index.css (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/src/index.tsx (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/src/logo.svg (100%) rename {cra-template-wptheme-typescript => packages/cra-template-wptheme-typescript}/template/src/serviceWorker.ts (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/README.md (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/package.json (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template.json (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/README.md (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/gitignore (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/public/favicon.ico (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/public/index.html (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/public/index.php (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/public/logo192.png (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/public/logo512.png (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/public/manifest.json (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/public/post_installer.php (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/public/robots.txt (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/public/screenshot.png (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/public/style.css (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/src/App.css (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/src/App.js (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/src/App.test.js (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/src/index.css (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/src/index.js (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/src/logo.svg (100%) rename {cra-template-wptheme => packages/cra-template-wptheme}/template/src/serviceWorker.js (100%) create mode 100644 packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/.gitignore create mode 100644 packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/.npmignore rename {create-react-wptheme => packages/create-react-wptheme-utils/create-react-wptheme-error-overlay}/.npmrc (100%) create mode 100644 packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/README.md create mode 100644 packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/package.json create mode 100644 packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/src/index.js create mode 100644 packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/webpack.config.js create mode 100644 packages/create-react-wptheme-utils/fileFunctions.js create mode 100644 packages/create-react-wptheme-utils/fileWatcherPlugin.js create mode 100644 packages/create-react-wptheme-utils/getUserConfig.js create mode 100644 packages/create-react-wptheme-utils/package.json create mode 100644 packages/create-react-wptheme-utils/postInstallerInfo.js create mode 100644 packages/create-react-wptheme-utils/shell-js.js create mode 100644 packages/create-react-wptheme-utils/wpThemeClient.js create mode 100644 packages/create-react-wptheme-utils/wpThemeErrorOverlay.js create mode 100644 packages/create-react-wptheme-utils/wpThemeServer.js rename {create-react-wptheme => packages/create-react-wptheme}/.npmignore (100%) create mode 100644 packages/create-react-wptheme/.npmrc rename {create-react-wptheme => packages/create-react-wptheme}/LICENSE (100%) rename {create-react-wptheme => packages/create-react-wptheme}/createReactWpTheme.js (100%) rename {create-react-wptheme => packages/create-react-wptheme}/index.js (100%) rename {create-react-wptheme => packages/create-react-wptheme}/package.json (100%) diff --git a/create-react-wptheme-utils b/create-react-wptheme-utils deleted file mode 160000 index 0d06c6a..0000000 --- a/create-react-wptheme-utils +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0d06c6a417291a77433a244fa02f272d30d83429 diff --git a/package.json b/package.json index 143b652..c146fb8 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,6 @@ { "private": true, "workspaces": [ - "cra-template-wptheme", - "cra-template-wptheme-typescript", - "create-react-wptheme", - "create-react-wptheme-utils" + "packages/*" ] } diff --git a/cra-template-wptheme-typescript/README.md b/packages/cra-template-wptheme-typescript/README.md similarity index 100% rename from cra-template-wptheme-typescript/README.md rename to packages/cra-template-wptheme-typescript/README.md diff --git a/cra-template-wptheme-typescript/package.json b/packages/cra-template-wptheme-typescript/package.json similarity index 100% rename from cra-template-wptheme-typescript/package.json rename to packages/cra-template-wptheme-typescript/package.json diff --git a/cra-template-wptheme-typescript/template.json b/packages/cra-template-wptheme-typescript/template.json similarity index 100% rename from cra-template-wptheme-typescript/template.json rename to packages/cra-template-wptheme-typescript/template.json diff --git a/cra-template-wptheme-typescript/template/README.md b/packages/cra-template-wptheme-typescript/template/README.md similarity index 100% rename from cra-template-wptheme-typescript/template/README.md rename to packages/cra-template-wptheme-typescript/template/README.md diff --git a/cra-template-wptheme-typescript/template/gitignore b/packages/cra-template-wptheme-typescript/template/gitignore similarity index 100% rename from cra-template-wptheme-typescript/template/gitignore rename to packages/cra-template-wptheme-typescript/template/gitignore diff --git a/cra-template-wptheme-typescript/template/public/favicon.ico b/packages/cra-template-wptheme-typescript/template/public/favicon.ico similarity index 100% rename from cra-template-wptheme-typescript/template/public/favicon.ico rename to packages/cra-template-wptheme-typescript/template/public/favicon.ico diff --git a/cra-template-wptheme-typescript/template/public/index.html b/packages/cra-template-wptheme-typescript/template/public/index.html similarity index 100% rename from cra-template-wptheme-typescript/template/public/index.html rename to packages/cra-template-wptheme-typescript/template/public/index.html diff --git a/cra-template-wptheme-typescript/template/public/index.php b/packages/cra-template-wptheme-typescript/template/public/index.php similarity index 100% rename from cra-template-wptheme-typescript/template/public/index.php rename to packages/cra-template-wptheme-typescript/template/public/index.php diff --git a/cra-template-wptheme-typescript/template/public/logo192.png b/packages/cra-template-wptheme-typescript/template/public/logo192.png similarity index 100% rename from cra-template-wptheme-typescript/template/public/logo192.png rename to packages/cra-template-wptheme-typescript/template/public/logo192.png diff --git a/cra-template-wptheme-typescript/template/public/logo512.png b/packages/cra-template-wptheme-typescript/template/public/logo512.png similarity index 100% rename from cra-template-wptheme-typescript/template/public/logo512.png rename to packages/cra-template-wptheme-typescript/template/public/logo512.png diff --git a/cra-template-wptheme-typescript/template/public/manifest.json b/packages/cra-template-wptheme-typescript/template/public/manifest.json similarity index 100% rename from cra-template-wptheme-typescript/template/public/manifest.json rename to packages/cra-template-wptheme-typescript/template/public/manifest.json diff --git a/cra-template-wptheme-typescript/template/public/post_installer.php b/packages/cra-template-wptheme-typescript/template/public/post_installer.php similarity index 100% rename from cra-template-wptheme-typescript/template/public/post_installer.php rename to packages/cra-template-wptheme-typescript/template/public/post_installer.php diff --git a/cra-template-wptheme-typescript/template/public/robots.txt b/packages/cra-template-wptheme-typescript/template/public/robots.txt similarity index 100% rename from cra-template-wptheme-typescript/template/public/robots.txt rename to packages/cra-template-wptheme-typescript/template/public/robots.txt diff --git a/cra-template-wptheme-typescript/template/public/screenshot.png b/packages/cra-template-wptheme-typescript/template/public/screenshot.png similarity index 100% rename from cra-template-wptheme-typescript/template/public/screenshot.png rename to packages/cra-template-wptheme-typescript/template/public/screenshot.png diff --git a/cra-template-wptheme-typescript/template/public/style.css b/packages/cra-template-wptheme-typescript/template/public/style.css similarity index 100% rename from cra-template-wptheme-typescript/template/public/style.css rename to packages/cra-template-wptheme-typescript/template/public/style.css diff --git a/cra-template-wptheme-typescript/template/src/App.css b/packages/cra-template-wptheme-typescript/template/src/App.css similarity index 100% rename from cra-template-wptheme-typescript/template/src/App.css rename to packages/cra-template-wptheme-typescript/template/src/App.css diff --git a/cra-template-wptheme-typescript/template/src/App.test.tsx b/packages/cra-template-wptheme-typescript/template/src/App.test.tsx similarity index 100% rename from cra-template-wptheme-typescript/template/src/App.test.tsx rename to packages/cra-template-wptheme-typescript/template/src/App.test.tsx diff --git a/cra-template-wptheme-typescript/template/src/App.tsx b/packages/cra-template-wptheme-typescript/template/src/App.tsx similarity index 100% rename from cra-template-wptheme-typescript/template/src/App.tsx rename to packages/cra-template-wptheme-typescript/template/src/App.tsx diff --git a/cra-template-wptheme-typescript/template/src/index.css b/packages/cra-template-wptheme-typescript/template/src/index.css similarity index 100% rename from cra-template-wptheme-typescript/template/src/index.css rename to packages/cra-template-wptheme-typescript/template/src/index.css diff --git a/cra-template-wptheme-typescript/template/src/index.tsx b/packages/cra-template-wptheme-typescript/template/src/index.tsx similarity index 100% rename from cra-template-wptheme-typescript/template/src/index.tsx rename to packages/cra-template-wptheme-typescript/template/src/index.tsx diff --git a/cra-template-wptheme-typescript/template/src/logo.svg b/packages/cra-template-wptheme-typescript/template/src/logo.svg similarity index 100% rename from cra-template-wptheme-typescript/template/src/logo.svg rename to packages/cra-template-wptheme-typescript/template/src/logo.svg diff --git a/cra-template-wptheme-typescript/template/src/serviceWorker.ts b/packages/cra-template-wptheme-typescript/template/src/serviceWorker.ts similarity index 100% rename from cra-template-wptheme-typescript/template/src/serviceWorker.ts rename to packages/cra-template-wptheme-typescript/template/src/serviceWorker.ts diff --git a/cra-template-wptheme/README.md b/packages/cra-template-wptheme/README.md similarity index 100% rename from cra-template-wptheme/README.md rename to packages/cra-template-wptheme/README.md diff --git a/cra-template-wptheme/package.json b/packages/cra-template-wptheme/package.json similarity index 100% rename from cra-template-wptheme/package.json rename to packages/cra-template-wptheme/package.json diff --git a/cra-template-wptheme/template.json b/packages/cra-template-wptheme/template.json similarity index 100% rename from cra-template-wptheme/template.json rename to packages/cra-template-wptheme/template.json diff --git a/cra-template-wptheme/template/README.md b/packages/cra-template-wptheme/template/README.md similarity index 100% rename from cra-template-wptheme/template/README.md rename to packages/cra-template-wptheme/template/README.md diff --git a/cra-template-wptheme/template/gitignore b/packages/cra-template-wptheme/template/gitignore similarity index 100% rename from cra-template-wptheme/template/gitignore rename to packages/cra-template-wptheme/template/gitignore diff --git a/cra-template-wptheme/template/public/favicon.ico b/packages/cra-template-wptheme/template/public/favicon.ico similarity index 100% rename from cra-template-wptheme/template/public/favicon.ico rename to packages/cra-template-wptheme/template/public/favicon.ico diff --git a/cra-template-wptheme/template/public/index.html b/packages/cra-template-wptheme/template/public/index.html similarity index 100% rename from cra-template-wptheme/template/public/index.html rename to packages/cra-template-wptheme/template/public/index.html diff --git a/cra-template-wptheme/template/public/index.php b/packages/cra-template-wptheme/template/public/index.php similarity index 100% rename from cra-template-wptheme/template/public/index.php rename to packages/cra-template-wptheme/template/public/index.php diff --git a/cra-template-wptheme/template/public/logo192.png b/packages/cra-template-wptheme/template/public/logo192.png similarity index 100% rename from cra-template-wptheme/template/public/logo192.png rename to packages/cra-template-wptheme/template/public/logo192.png diff --git a/cra-template-wptheme/template/public/logo512.png b/packages/cra-template-wptheme/template/public/logo512.png similarity index 100% rename from cra-template-wptheme/template/public/logo512.png rename to packages/cra-template-wptheme/template/public/logo512.png diff --git a/cra-template-wptheme/template/public/manifest.json b/packages/cra-template-wptheme/template/public/manifest.json similarity index 100% rename from cra-template-wptheme/template/public/manifest.json rename to packages/cra-template-wptheme/template/public/manifest.json diff --git a/cra-template-wptheme/template/public/post_installer.php b/packages/cra-template-wptheme/template/public/post_installer.php similarity index 100% rename from cra-template-wptheme/template/public/post_installer.php rename to packages/cra-template-wptheme/template/public/post_installer.php diff --git a/cra-template-wptheme/template/public/robots.txt b/packages/cra-template-wptheme/template/public/robots.txt similarity index 100% rename from cra-template-wptheme/template/public/robots.txt rename to packages/cra-template-wptheme/template/public/robots.txt diff --git a/cra-template-wptheme/template/public/screenshot.png b/packages/cra-template-wptheme/template/public/screenshot.png similarity index 100% rename from cra-template-wptheme/template/public/screenshot.png rename to packages/cra-template-wptheme/template/public/screenshot.png diff --git a/cra-template-wptheme/template/public/style.css b/packages/cra-template-wptheme/template/public/style.css similarity index 100% rename from cra-template-wptheme/template/public/style.css rename to packages/cra-template-wptheme/template/public/style.css diff --git a/cra-template-wptheme/template/src/App.css b/packages/cra-template-wptheme/template/src/App.css similarity index 100% rename from cra-template-wptheme/template/src/App.css rename to packages/cra-template-wptheme/template/src/App.css diff --git a/cra-template-wptheme/template/src/App.js b/packages/cra-template-wptheme/template/src/App.js similarity index 100% rename from cra-template-wptheme/template/src/App.js rename to packages/cra-template-wptheme/template/src/App.js diff --git a/cra-template-wptheme/template/src/App.test.js b/packages/cra-template-wptheme/template/src/App.test.js similarity index 100% rename from cra-template-wptheme/template/src/App.test.js rename to packages/cra-template-wptheme/template/src/App.test.js diff --git a/cra-template-wptheme/template/src/index.css b/packages/cra-template-wptheme/template/src/index.css similarity index 100% rename from cra-template-wptheme/template/src/index.css rename to packages/cra-template-wptheme/template/src/index.css diff --git a/cra-template-wptheme/template/src/index.js b/packages/cra-template-wptheme/template/src/index.js similarity index 100% rename from cra-template-wptheme/template/src/index.js rename to packages/cra-template-wptheme/template/src/index.js diff --git a/cra-template-wptheme/template/src/logo.svg b/packages/cra-template-wptheme/template/src/logo.svg similarity index 100% rename from cra-template-wptheme/template/src/logo.svg rename to packages/cra-template-wptheme/template/src/logo.svg diff --git a/cra-template-wptheme/template/src/serviceWorker.js b/packages/cra-template-wptheme/template/src/serviceWorker.js similarity index 100% rename from cra-template-wptheme/template/src/serviceWorker.js rename to packages/cra-template-wptheme/template/src/serviceWorker.js diff --git a/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/.gitignore b/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/.gitignore new file mode 100644 index 0000000..16892f9 --- /dev/null +++ b/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/.gitignore @@ -0,0 +1,12 @@ +.idea/ +.vscode/ +node_modules/ +build +.DS_Store +*.tgz +my-app* +template/src/__tests__/__snapshots__/ +npm-debug.log* +yarn* +/.changelog +wpThemeErrorOverlay.js diff --git a/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/.npmignore b/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/.npmignore new file mode 100644 index 0000000..a3d9842 --- /dev/null +++ b/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/.npmignore @@ -0,0 +1,4 @@ +__tests__ +*.test.js +*.spec.js +yarn* diff --git a/create-react-wptheme/.npmrc b/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/.npmrc similarity index 100% rename from create-react-wptheme/.npmrc rename to packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/.npmrc diff --git a/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/README.md b/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/README.md new file mode 100644 index 0000000..aa412c8 --- /dev/null +++ b/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/README.md @@ -0,0 +1,3 @@ +# react-scripts-wptheme-error-overlay + +[create-react-wptheme](https://github.com/devloco/create-react-wptheme) client with error overlay diff --git a/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/package.json b/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/package.json new file mode 100644 index 0000000..f08303f --- /dev/null +++ b/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/package.json @@ -0,0 +1,31 @@ +{ + "name": "@devloco/create-react-wptheme-error-overlay", + "version": "3.3.0-wp.1", + "description": "create-react-wptheme client with error overlay", + "main": "wptheme-error-overlay.js", + "scripts": { + "build": "npx webpack" + }, + "author": "devloco", + "license": "MIT", + "homepage": "https://github.com/devloco/create-react-wptheme", + "repository": { + "type": "git", + "url": "https://github.com/devloco/create-react-wptheme.git" + }, + "files": [ + "wpThemeErrorOverlay.js" + ], + "dependencies": { + "react-dev-utils": "^10.0.0", + "react-error-overlay": "^6.0.4" + }, + "devDependencies": { + "@babel/code-frame": "^7.5.5", + "@babel/core": "^7.7.5", + "@webpack-cli/info": "^0.2.0", + "babel-loader": "^8.0.6", + "webpack": "^4.41.2", + "webpack-cli": "^3.3.10" + } +} diff --git a/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/src/index.js b/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/src/index.js new file mode 100644 index 0000000..a79c41a --- /dev/null +++ b/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/src/index.js @@ -0,0 +1,101 @@ +/** + * Copyright (c) 2018-present, https://github.com/devloco + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; + +var stripAnsi = require("strip-ansi"); +var ErrorOverlay = require("react-error-overlay"); +var formatWebpackMessages = require("react-dev-utils/formatWebpackMessages"); + +// Remember some state related to hot module replacement. +var isFirstCompilation = true; +var mostRecentCompilationHash = null; +var hasCompileErrors = false; + +// We need to keep track of if there has been a runtime error. +// Essentially, we cannot guarantee application state was not corrupted by the +// runtime error. To prevent confusing behavior, we forcibly reload the entire +// application. This is handled below when we are notified of a compile (code +// change). +// See https://github.com/facebookincubator/create-react-app/issues/3096 +var hadRuntimeError = false; +var runtimeOptions = { + onError: function() { + hadRuntimeError = true; + }, + filename: "/static/js/bundle.js" +}; +ErrorOverlay.startReportingRuntimeErrors(runtimeOptions); + +export function clearConsole() { + // Clean up outdated compile errors, if any. + if (typeof console !== "undefined" && typeof console.clear === "function") { + console.clear(); + } +} + +export function handleSuccess() { + // Successful compilation. + clearConsole(); + isFirstCompilation = false; + hasCompileErrors = false; + hadRuntimeError = false; +} + +export function handleWarnings(warnings) { + //clearConsole(); + + // var isHotUpdate = !isFirstCompilation; + isFirstCompilation = false; + hasCompileErrors = false; + + function printWarnings() { + // Print warnings to the console. + var formatted = formatWebpackMessages({ + warnings: warnings, + errors: [] + }); + + if (typeof console !== "undefined" && typeof console.warn === "function") { + for (var i = 0; i < formatted.warnings.length; i++) { + if (i === 5) { + console.warn("There were more warnings in other files.\n" + "You can find a complete log in the terminal."); + break; + } + + console.warn(stripAnsi(formatted.warnings[i])); + } + } + } + + printWarnings(); +} + +export function handleErrors(errors) { + //clearConsole(); + + isFirstCompilation = false; + hasCompileErrors = true; + + // Format webpack messages. + var formatted = formatWebpackMessages({ + errors: errors, + warnings: [] + }); + + if (Array.isArray(formatted.errors) && formatted.errors.length > 0) { + // Only show the first error. + ErrorOverlay.reportBuildError(formatted.errors[0]); + } else { + if (typeof console !== "undefined" && typeof console.error === "function") { + console.error("UNKNOWN ERROR from react-scripts-wptheme-error-overlay:handleErrors:", errors); + } + } + + // Do not attempt to reload now. + // We will reload on next success instead. +} diff --git a/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/webpack.config.js b/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/webpack.config.js new file mode 100644 index 0000000..0ab505d --- /dev/null +++ b/packages/create-react-wptheme-utils/create-react-wptheme-error-overlay/webpack.config.js @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2018-present, https://github.com/devloco + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +"use strict"; + +const path = require("path"); + +module.exports = { + mode: "none", + entry: path.join(__dirname, "src", "index.js"), + watch: false, + watchOptions: { + aggregateTimeout: 600, + ignored: [__dirname, "node_modules", "webpack.config.js", "wpThemeErrorOverlay.js"] + }, + output: { + path: path.join(__dirname, ".."), + filename: "wpThemeErrorOverlay.js", + library: "wpThemeErrorOverlay", + libraryTarget: "umd" + }, + module: { + rules: [ + { + test: /\.js$/, + include: path.join(__dirname, "src"), + use: "babel-loader" + } + ] + } +}; diff --git a/packages/create-react-wptheme-utils/fileFunctions.js b/packages/create-react-wptheme-utils/fileFunctions.js new file mode 100644 index 0000000..83f4024 --- /dev/null +++ b/packages/create-react-wptheme-utils/fileFunctions.js @@ -0,0 +1,183 @@ +/** + * Copyright (c) 2018-present, https://github.com/devloco + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; + +const fs = require("fs-extra"); +const path = require("path"); +const { rm, cp } = require("shelljs"); +const wpThemePostInstallerInfo = require("@devloco/react-scripts-wptheme-utils/postInstallerInfo"); +const wpThemeUserConfig = require("@devloco/react-scripts-wptheme-utils/getUserConfig"); //(paths, process.env.NODE_ENV); + +const _doNotEditFileName = "!DO_NOT_EDIT_THESE_FILES!.txt"; +const _readyToDeployFileName = "!READY_TO_DEPLOY!.txt"; +const _forBuild = () => { + const nodeEnv = process.env.NODE_ENV; + switch (nodeEnv) { + case "dev": + case "development": + return false; + case "build": + case "prod": + case "production": + return true; + default: + console.log(chalk.red(`Unknown env.NODE_ENV: ${nodeEnv}`)); + return false; + } +}; + +const fileFunctions = { + copyPublicFolder: function(paths) { + fs.copySync(paths.appPublic, paths.appBuild, { + dereference: true, + filter: (file) => file !== paths.appHtml && file.indexOf("index.html") == -1 && file.indexOf(wpThemePostInstallerInfo.postInstallerName) == -1 + }); + }, + copyToThemeFolder: function(paths) { + const userConfig = wpThemeUserConfig(paths, process.env.NODE_ENV); + const forBuild = _forBuild(); + let actionPath = (forBuild && userConfig && userConfig.finalBuildPath) || ".."; + + const copyFrom = path.join(paths.appBuild, "/*"); + + if (forBuild === true) { + fileFunctions.cleanThemeFolder(paths, true); + fileFunctions.deleteDeployFolder(paths); + + const themeName = require(paths.appPackageJson).name; + actionPath = (userConfig && userConfig.finalBuildPath) || path.join("..", themeName); + fs.ensureDirSync(actionPath); + } + + cp("-rf", copyFrom, actionPath); + }, + cleanThemeFolder: function(paths) { + const userConfig = wpThemeUserConfig(paths, process.env.NODE_ENV); + const forBuild = _forBuild(); + let actionPath = (forBuild && userConfig && userConfig.finalBuildPath) || ".."; + + rm("-rf", path.join(actionPath, "static")); + + if (forBuild === true) { + const doNotEditFile = path.join(actionPath, _doNotEditFileName); + rm("-f", doNotEditFile); + + const readyToDeployFile = path.join(actionPath, _readyToDeployFileName); + rm("-f", readyToDeployFile); + + const assetManifest = path.join(actionPath, "asset-manifest*"); + rm("-r", assetManifest); + + const favIconIco = path.join(actionPath, "favicon.ico"); + rm("-r", favIconIco); + + const indexPhp = path.join(actionPath, "index.php"); + rm("-r", indexPhp); + + const logoFiles = path.join(actionPath, "logo*"); + rm("-r", logoFiles); + + const precacheFiles = path.join(actionPath, "precache*"); + rm("-r", precacheFiles); + + const manifestJson = path.join(actionPath, "manifest.json"); + rm("-r", manifestJson); + + const robotsTxt = path.join(actionPath, "robots.txt"); + rm("-r", robotsTxt); + + const screenShotPng = path.join(actionPath, "screenshot.png"); + rm("-r", screenShotPng); + + const serviceWorker = path.join(actionPath, "service-worker.js"); + rm("-r", serviceWorker); + + const styleCss = path.join(actionPath, "style.css"); + rm("-r", styleCss); + } + }, + deleteDeployFolder: function(paths) { + const userConfig = wpThemeUserConfig(paths, process.env.NODE_ENV); + const forBuild = _forBuild(); + const themeName = require(paths.appPackageJson).name; + + let deployFolder = (forBuild && userConfig && userConfig.finalBuildPath) || path.join("..", themeName); + if (fs.existsSync(deployFolder)) { + var files = fs.readdirSync(deployFolder); + files.forEach((file) => { + if (file !== "react-src") { + const fileDir = path.join(deployFolder, file); + rm("-rf", fileDir); + } + }); + } + }, + setupCopyToThemeFolder: function(paths) { + const userConfig = wpThemeUserConfig(paths, process.env.NODE_ENV); + const forBuild = _forBuild(); + let actionPath = (forBuild && userConfig && userConfig.finalBuildPath) || ".."; + + const indexPhp = path.join(paths.appPublic, "index.php"); + cp("-rf", indexPhp, actionPath); + + const styleCss = path.join(paths.appPublic, "style.css"); + cp("-rf", styleCss, actionPath); + + const screenShotPng = path.join(paths.appPublic, "screenshot.png"); + cp("-rf", screenShotPng, actionPath); + + const favIconIco = path.join(paths.appPublic, "favicon.ico"); + cp("-rf", favIconIco, actionPath); + }, + writeDoNotEditFile: function(paths) { + const userConfig = wpThemeUserConfig(paths, process.env.NODE_ENV); + const forBuild = _forBuild(); + let actionPath = (forBuild && userConfig && userConfig.finalBuildPath) || ".."; + const readyToDeployFile = path.join(actionPath, _readyToDeployFileName); + fs.access(readyToDeployFile, fs.constants.F_OK, (err) => { + if (!err) { + rm("-f", readyToDeployFile); + } + }); + + let doNotEditContent = `Instead, edit the files in the "react-src/src" and "react-src/public" folders.`; + doNotEditContent += "\nThese files are overwritten by Webpack every time you make edits to the files in those folders."; + doNotEditContent += "\nYou will lose all changes made to these files when that happens."; + + const doNotEditFile = path.join(actionPath, _doNotEditFileName); + fs.access(doNotEditFile, fs.constants.F_OK, (err) => { + if (err) { + fs.writeFile(doNotEditFile, doNotEditContent, "utf8", (err) => {}); + } + }); + }, + writeReadyToDeployFile: function(paths) { + const userConfig = wpThemeUserConfig(paths, process.env.NODE_ENV); + const forBuild = _forBuild(); + let actionPath = (forBuild && userConfig && userConfig.finalBuildPath) || ".."; + const doNotEditFile = path.join(actionPath, _doNotEditFileName); + fs.access(doNotEditFile, fs.constants.F_OK, (err) => { + if (!err) { + rm("-f", doNotEditFile); + } + }); + + const themeName = require(paths.appPackageJson).name; + let readyToDeployContent = `The theme named "${themeName}" is ready to deploy to your production server.`; + readyToDeployContent += '\n\nIf you need to continue developing your theme, simply change to the "react-src" folder and type the command: npm run start'; + + const readyToDeployFile = path.join(actionPath, _readyToDeployFileName); + fs.access(readyToDeployFile, fs.constants.F_OK, (err) => { + if (err) { + fs.writeFile(readyToDeployFile, readyToDeployContent, "utf8", (err) => {}); + } + }); + } +}; + +module.exports = fileFunctions; diff --git a/packages/create-react-wptheme-utils/fileWatcherPlugin.js b/packages/create-react-wptheme-utils/fileWatcherPlugin.js new file mode 100644 index 0000000..aa0d916 --- /dev/null +++ b/packages/create-react-wptheme-utils/fileWatcherPlugin.js @@ -0,0 +1,147 @@ +/** + * Copyright (c) 2018-present, https://github.com/devloco + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/// +/// big thanks to: +/// https://www.npmjs.com/package/filewatcher-webpack-plugin +/// +/// this plugin causes WebPack to do a rebuild by touching a file under WebPack's control when +/// a file *not* under WebPack's control changes. +/// +/// Usage example: (to watch all JS, CSS and PHP files under the "public" folder in a create-react-wptheme project (or create-react-app project)) +/// NOTE: "touchFile" is used to force WebPack to do a rebuild. It must be a file that WebPack is watching. +/// +/// const FileWatcherPlugin = require("./fileWatcherPlugin.wptheme"); +/// ... +/// plugins: [ +// new FileWatcherPlugin({ +// touchFile: "./public/index.php", // create-react-wptheme emits index.php and thus it is watched by WebPack... +// ignored: "./public/index.php", // ... so no need to watch it here as well. Without ignoring it, you'd cause infinite build loops. +// watchFileGlobs: ["./public/**/*.js", "./public/**/*.css", "./public/**/*.php"] +// }), +/// ], +/// ... +/// + +"use strict"; + +const chokidar = require("chokidar"); +const { touch } = require("shelljs"); + +function FileWatcherPlugin(options) { + this.options = options; +} + +FileWatcherPlugin.prototype.apply = function (compiler) { + if (!this.options) { + return; + } + + const options = this.options; + const touchFile = options.touchFile; + const forceBuild = function (touchFileName) { + // -c to not create a file if one doesn't already exist. + // Remember this file needs to be watched by WebPack, thus it should already exist + touch("-c", touchFileName); + }; + + compiler.hooks.done.tap("FileWatcherPlugin", function (compilation) { + var watcher = chokidar.watch(options.watchFileGlobs, { + persistent: options.persistance || true, + ignored: options.ignored || false, + ignoreInitial: options.ignoreInitial || false, + followSymlinks: options.followSymlinks || true, + cwd: options.cwd || ".", + disableGlobbing: options.disableGlobbing || false, + usePolling: options.usePolling || true, + interval: options.interval || 100, + binaryInterval: options.binaryInterval || 300, + alwaysStat: options.alwaysStat || false, + depth: options.depth || 99, + awaitWriteFinish: { + stabilityThreshold: options.stabilityThreshold || 250, + pollInterval: options.pollInterval || 100 + }, + + ignorePermissionErrors: options.ignorePermissionErrors || false, + atomic: options.atomic || true + }); + + watcher + .on( + "add", + options.onAddCallback || + function (path) { + //forceBuild(touchFile); // causes infinite loops for "add" + return null; + } + ) + .on( + "change", + options.onChangeCallback || + function (path) { + // console.log(`\n\n Compilation Started after change of - ${path} \n\n`); + // compiler.run(function(err) { + // if (err) throw err; + // watcher.close(); + // }); + //console.log(`\n\n Compilation ended for change of - ${path} \n\n`); + forceBuild(touchFile); + } + ) + .on( + "unlink", + options.onUnlinkCallback || + function (path) { + // console.log(`File ${path} has been removed`); + forceBuild(touchFile); + } + ); + + watcher + .on( + "addDir", + options.onAddDirCallback || + function (path) { + // console.log(`Directory ${path} has been added`); + forceBuild(touchFile); + } + ) + .on( + "unlinkDir", + options.unlinkDirCallback || + function (path) { + // console.log(`Directory ${path} has been removed`); + forceBuild(touchFile); + } + ) + .on( + "error", + options.onErrorCallback || + function (error) { + console.log(`FileWatcherPlugin error: ${error}`); + return null; + } + ) + .on( + "ready", + options.onReadyCallback || + function () { + console.log("Watching for changes in the Public folder."); + } + ) + .on( + "raw", + options.onRawCallback || + function (event, path, details) { + return null; + } + ); + }); +}; + +module.exports = FileWatcherPlugin; diff --git a/packages/create-react-wptheme-utils/getUserConfig.js b/packages/create-react-wptheme-utils/getUserConfig.js new file mode 100644 index 0000000..ed56ca2 --- /dev/null +++ b/packages/create-react-wptheme-utils/getUserConfig.js @@ -0,0 +1,90 @@ +/** + * Copyright (c) 2018-present, https://github.com/devloco + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; + +const fs = require("fs-extra"); +const chalk = require("chalk"); +const path = require("path"); +const wpThemePostInstallerInfo = require("@devloco/react-scripts-wptheme-utils/postInstallerInfo"); + +const _userDevConfigName = "user.dev.json"; +const _userProdConfigName = "user.prod.json"; + +function _writeUserConfig(paths, configName, configString) { + let configPath = path.join(paths.appPath, configName); + fs.writeFileSync(configPath, configString); +} + +function _getUserConfig(paths, configName, defaultConfig) { + let userConfig = null; + try { + userConfig = require(path.join(paths.appPath, configName)); + } catch (err) { + userConfig = JSON.stringify(defaultConfig, null, 4); + _writeUserConfig(paths, configName, userConfig); + return defaultConfig; + } + + return userConfig; +} + +module.exports = function(paths, nodeEnv) { + const appPackageJson = require(paths.appPackageJson); + + const defaultUserDevConfig = { + fileWatcherPlugin: { + touchFile: "./public/index.php", + ignored: "./public/index.php", + watchFileGlobs: ["./public/**/*.js", "./public/**/*.css", "./public/**/*.php"] + }, + wpThemeServer: { + enable: true, + host: "127.0.0.1", + port: 8090, + sslCert: null, + sslKey: null, + watchFile: "../index.php" + }, + injectWpThemeClient: { + override: null, + file: "./build/index.php" + } + }; + + const defaultUserProdConfig = { + finalBuildPath: null, + homepage: appPackageJson.homepage + }; + + // Create both files ASAP. + if (!wpThemePostInstallerInfo.postInstallerExists(paths)) { + _getUserConfig(paths, _userDevConfigName, defaultUserDevConfig); + _getUserConfig(paths, _userProdConfigName, defaultUserProdConfig); + } + + if (wpThemePostInstallerInfo.postInstallerExists(paths)) { + return null; + } + + if (typeof nodeEnv !== "string") { + nodeEnv = process.env.NODE_ENV; + } + + switch (nodeEnv) { + case "dev": + case "development": + return _getUserConfig(paths, _userDevConfigName, defaultUserDevConfig); + case "build": + case "prod": + case "production": + return _getUserConfig(paths, _userProdConfigName, defaultUserProdConfig); + default: + console.log(chalk.red(`Unknown env.NODE_ENV: ${nodeEnv}`)); + return null; + } +}; diff --git a/packages/create-react-wptheme-utils/package.json b/packages/create-react-wptheme-utils/package.json new file mode 100644 index 0000000..bd154cf --- /dev/null +++ b/packages/create-react-wptheme-utils/package.json @@ -0,0 +1,39 @@ +{ + "name": "@devloco/create-react-wptheme-utils", + "version": "3.3.0-wp.1", + "description": "Utilities used by react-scripts-wptheme.", + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/devloco/react-scripts-wptheme-utils.git" + }, + "author": "devloco", + "license": "MIT", + "bugs": { + "url": "https://github.com/devloco/react-scripts-wptheme-utils/issues" + }, + "homepage": "https://github.com/devloco/react-scripts-wptheme-utils#readme", + "files": [ + "fileFunctions.js", + "fileWatcherPlugin.js", + "getUserConfig.js", + "postInstallerInfo.js", + "shell-js.js", + "wpThemeClient.js", + "wpThemeErrorOverlay.js", + "wpThemeServer.js" + ], + "dependencies": { + "chalk": "^3.0.0", + "chokidar": "^3.3.0", + "shelljs": "^0.8.3", + "fs-extra": "^8.1.0", + "ws": "^7.2.1" + }, + "devDependencies": {} +} diff --git a/packages/create-react-wptheme-utils/postInstallerInfo.js b/packages/create-react-wptheme-utils/postInstallerInfo.js new file mode 100644 index 0000000..6bf7abd --- /dev/null +++ b/packages/create-react-wptheme-utils/postInstallerInfo.js @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2018-present, https://github.com/devloco + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const postInstallerName = "post_installer.php"; + +class PostInstallerException { + constructor(message) { + this.message = message; + this.name = "PostInstallerException"; + } +} + +const postInstallerInfo = { + postInstallerExists: function(paths) { + if (!paths) { + throw new PostInstallerException("'paths' not provided."); + } + + try { + fs.accessSync(path.join(paths.appPublic, postInstallerName), fs.constants.F_OK); + return true; + } catch (err) { + return false; + } + }, + postInstallerName: postInstallerName +}; + +module.exports = postInstallerInfo; diff --git a/packages/create-react-wptheme-utils/shell-js.js b/packages/create-react-wptheme-utils/shell-js.js new file mode 100644 index 0000000..1712e71 --- /dev/null +++ b/packages/create-react-wptheme-utils/shell-js.js @@ -0,0 +1,12 @@ +/** + * Copyright (c) 2018-present, https://github.com/devloco + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +"use strict"; + +var shelljs = require("shelljs"); + +module.exports = shelljs; diff --git a/packages/create-react-wptheme-utils/wpThemeClient.js b/packages/create-react-wptheme-utils/wpThemeClient.js new file mode 100644 index 0000000..9f45f5e --- /dev/null +++ b/packages/create-react-wptheme-utils/wpThemeClient.js @@ -0,0 +1,142 @@ +/** + * Copyright (c) 2018-present, https://github.com/devloco + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var wpThemeClient = { + hash: null, + socket: null, + start: function(wsHostProtocol, wsHostname, wsPort) { + var hostProtocol = null; + switch (wsHostProtocol) { + case "ws": + case "wss": + hostProtocol = wsHostProtocol; + break; + default: + console.log(`WPTHEME CLIENT: configHostProtocol is not "ws" or "wss": ` + new String(wsHostProtocol)); + console.error("This is a bug. Please report to: https://github.com/devloco/create-react-wptheme/issues"); + return; + } + + if (wsHostname !== "__from-window__") { + if (typeof wsHostname !== "string" && wsHostname.length <= 0) { + console.log("WPTHEME CLIENT: hostname is not '__from-window__' or a non-empty string: ", wsHostname); + return; + } + } + + var parsedConfigPort = null; + if (wsPort !== "__from-window__") { + parsedConfigPort = parseInt(wsPort, 10); + if (typeof parsedConfigPort !== "number") { + console.log("WPTHEME CLIENT: port is not '__from-window__' or a number: ", wsPort); + return; + } + } + + var hostName = wsHostname === "__from-window__" ? window.location.hostname : wsHostname; + var portNum = wsPort === "__from-window__" ? window.location.port : parsedConfigPort; + var hostURL = hostProtocol + "://" + hostName + ":" + portNum; + + var newlyReloaded = true; + + wpThemeClient.socket = new WebSocket(hostURL); + wpThemeClient.socket.onmessage = function(response) { + if (response && typeof response.data === "string") { + try { + var msg = JSON.parse(response.data); + + if (msg) { + var msgHash = msg && msg.stats && msg.stats.hash; + + if (msg.type === "content-changed") { + if (msg.stats.errors && msg.stats.errors.length > 0) { + msg.type = "errors"; + } + if (msg.stats.warnings && msg.stats.warnings.length > 0) { + msg.type = "warnings"; + } + } + + switch (msg.type) { + case "content-changed": + if (!newlyReloaded || (wpThemeClient.hash === null || (typeof msgHash === "string" && msgHash.length > 0 && msgHash !== wpThemeClient.hash))) { + // Webpack successfully creates a new compile if there are only warnings (unlike errors which do not compile at all). + window.location.reload(); + } + break; + case "errors": + try { + wpThemeErrorOverlay.handleErrors(msg.stats.errors); + } catch (err) { + console.log("'errors' try block error:", err); + console.log("Compile ERRORS", msg); + } + break; + case "hash-check": + if (wpThemeClient.hash === null) { + wpThemeClient.hash = msgHash; + setTimeout(() => { + // In 500ms, let's double-check we have the latest hash... a build on the server may have gotten missed. + if (wpThemeClient.socket && wpThemeClient.socket.send) { + var msgJson = JSON.stringify({ + type: "hash-check" + }); + + wpThemeClient.socket.send(msgJson); + } + }, 500); + } else if (!newlyReloaded && typeof wpThemeClient.hash === "string" && wpThemeClient.hash !== msgHash) { + window.location.reload(); + } + break; + case "warnings": + try { + wpThemeErrorOverlay.handleWarnings(msg.stats.warnings); + if (!newlyReloaded) { + // Webpack successfully creates a new compile if there are only warnings (unlike errors which do not compile at all). + window.location.reload(); + } + } catch (err) { + console.log("'warnings' try block error:", err); + console.log("Compile WARNINGS", err, msg); + } + break; + } + } + } catch (err) { + if (console && typeof console.error === "function") { + console.error(err); + console.log("Raw websocket message:", response); + } + } + + newlyReloaded = false; + wpThemeClient.hash = typeof msgHash === "string" && msgHash.length > 0 ? msgHash : null; + } + }; + + wpThemeClient.socket.onclose = function() { + if (console && typeof console.info === "function") { + switch (wpThemeClient.socket.readyState) { + case wpThemeClient.socket.CLOSED: + case wpThemeClient.socket.CLOSING: + setTimeout(() => { + console.info("It's possible the browser refresh server has disconnected.\nYou can manually refresh the page if necessary."); + }, 1000); + break; + } + } + }; + + wpThemeClient.socket.onopen = function() { + if (console && typeof console.clear === "function") { + //console.clear(); + console.info("The browser refresh server is connected."); + } + }; + } +}; diff --git a/packages/create-react-wptheme-utils/wpThemeErrorOverlay.js b/packages/create-react-wptheme-utils/wpThemeErrorOverlay.js new file mode 100644 index 0000000..6916825 --- /dev/null +++ b/packages/create-react-wptheme-utils/wpThemeErrorOverlay.js @@ -0,0 +1,2387 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["wpThemeErrorOverlay"] = factory(); + else + root["wpThemeErrorOverlay"] = factory(); +})(window, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clearConsole", function() { return clearConsole; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "handleSuccess", function() { return handleSuccess; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "handleWarnings", function() { return handleWarnings; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "handleErrors", function() { return handleErrors; }); +/** + * Copyright (c) 2018-present, https://github.com/devloco + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + +var stripAnsi = __webpack_require__(1); + +var ErrorOverlay = __webpack_require__(3); + +var formatWebpackMessages = __webpack_require__(5); // Remember some state related to hot module replacement. + + +var isFirstCompilation = true; +var mostRecentCompilationHash = null; +var hasCompileErrors = false; // We need to keep track of if there has been a runtime error. +// Essentially, we cannot guarantee application state was not corrupted by the +// runtime error. To prevent confusing behavior, we forcibly reload the entire +// application. This is handled below when we are notified of a compile (code +// change). +// See https://github.com/facebookincubator/create-react-app/issues/3096 + +var hadRuntimeError = false; +var runtimeOptions = { + onError: function () { + hadRuntimeError = true; + }, + filename: "/static/js/bundle.js" +}; +ErrorOverlay.startReportingRuntimeErrors(runtimeOptions); +function clearConsole() { + // Clean up outdated compile errors, if any. + if (typeof console !== "undefined" && typeof console.clear === "function") { + console.clear(); + } +} +function handleSuccess() { + // Successful compilation. + clearConsole(); + isFirstCompilation = false; + hasCompileErrors = false; + hadRuntimeError = false; +} +function handleWarnings(warnings) { + //clearConsole(); + // var isHotUpdate = !isFirstCompilation; + isFirstCompilation = false; + hasCompileErrors = false; + + function printWarnings() { + // Print warnings to the console. + var formatted = formatWebpackMessages({ + warnings: warnings, + errors: [] + }); + + if (typeof console !== "undefined" && typeof console.warn === "function") { + for (var i = 0; i < formatted.warnings.length; i++) { + if (i === 5) { + console.warn("There were more warnings in other files.\n" + "You can find a complete log in the terminal."); + break; + } + + console.warn(stripAnsi(formatted.warnings[i])); + } + } + } + + printWarnings(); +} +function handleErrors(errors) { + //clearConsole(); + isFirstCompilation = false; + hasCompileErrors = true; // Format webpack messages. + + var formatted = formatWebpackMessages({ + errors: errors, + warnings: [] + }); + + if (Array.isArray(formatted.errors) && formatted.errors.length > 0) { + // Only show the first error. + ErrorOverlay.reportBuildError(formatted.errors[0]); + } else { + if (typeof console !== "undefined" && typeof console.error === "function") { + console.error("UNKNOWN ERROR from react-scripts-wptheme-error-overlay:handleErrors:", errors); + } + } // Do not attempt to reload now. + // We will reload on next success instead. + +} + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const ansiRegex = __webpack_require__(2); + +const stripAnsi = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; + +module.exports = stripAnsi; +module.exports.default = stripAnsi; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = options => { + options = Object.assign({ + onlyFirst: false + }, options); + + const pattern = [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' + ].join('|'); + + return new RegExp(pattern, options.onlyFirst ? undefined : 'g'); +}; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(process) {!function(e,t){ true?module.exports=t():undefined}(window,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var u=t[r]={i:r,l:!1,exports:{}};return e[r].call(u.exports,u,u.exports,n),u.l=!0,u.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var u in e)n.d(r,u,function(t){return e[t]}.bind(null,u));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=16)}([function(e,t,n){e.exports=n(9)},function(e,t){t.getArg=function(e,t,n){if(t in e)return e[t];if(3===arguments.length)return n;throw new Error('"'+t+'" is a required argument.')};var n=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,r=/^data:.+\,.+$/;function u(e){var t=e.match(n);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}function o(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}function i(e){var n=e,r=u(e);if(r){if(!r.path)return e;n=r.path}for(var i,a=t.isAbsolute(n),l=n.split(/\/+/),c=0,s=l.length-1;s>=0;s--)"."===(i=l[s])?l.splice(s,1):".."===i?c++:c>0&&(""===i?(l.splice(s+1,c),c=0):(l.splice(s,2),c--));return""===(n=l.join("/"))&&(n=a?"/":"."),r?(r.path=n,o(r)):n}t.urlParse=u,t.urlGenerate=o,t.normalize=i,t.join=function(e,t){""===e&&(e="."),""===t&&(t=".");var n=u(t),a=u(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(r))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var l="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=l,o(a)):l},t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(n)},t.relative=function(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if((e=e.slice(0,r)).match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)};var a=!("__proto__"in Object.create(null));function l(e){return e}function c(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function s(e,t){return e===t?0:e>t?1:-1}t.toSetString=a?l:function(e){return c(e)?"$"+e:e},t.fromSetString=a?l:function(e){return c(e)?e.slice(1):e},t.compareByOriginalPositions=function(e,t,n){var r=e.source-t.source;return 0!==r?r:0!==(r=e.originalLine-t.originalLine)?r:0!==(r=e.originalColumn-t.originalColumn)||n?r:0!==(r=e.generatedColumn-t.generatedColumn)?r:0!==(r=e.generatedLine-t.generatedLine)?r:e.name-t.name},t.compareByGeneratedPositionsDeflated=function(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:0!==(r=e.generatedColumn-t.generatedColumn)||n?r:0!==(r=e.source-t.source)?r:0!==(r=e.originalLine-t.originalLine)?r:0!==(r=e.originalColumn-t.originalColumn)?r:e.name-t.name},t.compareByGeneratedPositionsInflated=function(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:0!==(n=e.generatedColumn-t.generatedColumn)?n:0!==(n=s(e.source,t.source))?n:0!==(n=e.originalLine-t.originalLine)?n:0!==(n=e.originalColumn-t.originalColumn)?n:s(e.name,t.name)}},function(e,t){function n(e,t){for(var n=0,r=e.length-1;r>=0;r--){var u=e[r];"."===u?e.splice(r,1):".."===u?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r=-1&&!t;u--){var o=u>=0?arguments[u]:process.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(e=o+"/"+e,t="/"===o.charAt(0))}return(t?"/":"")+(e=n(r(e.split("/"),(function(e){return!!e})),!t).join("/"))||"."},t.normalize=function(e){var o=t.isAbsolute(e),i="/"===u(e,-1);return(e=n(r(e.split("/"),(function(e){return!!e})),!o).join("/"))||o||(e="."),e&&i&&(e+="/"),(o?"/":"")+e},t.isAbsolute=function(e){return"/"===e.charAt(0)},t.join=function(){var e=Array.prototype.slice.call(arguments,0);return t.normalize(r(e,(function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e})).join("/"))},t.relative=function(e,n){function r(e){for(var t=0;t=0&&""===e[n];n--);return t>n?[]:e.slice(t,n-t+1)}e=t.resolve(e).substr(1),n=t.resolve(n).substr(1);for(var u=r(e.split("/")),o=r(n.split("/")),i=Math.min(u.length,o.length),a=i,l=0;l=1;--o)if(47===(t=e.charCodeAt(o))){if(!u){r=o;break}}else u=!1;return-1===r?n?"/":".":n&&1===r?"/":e.slice(0,r)},t.basename=function(e,t){var n=function(e){"string"!=typeof e&&(e+="");var t,n=0,r=-1,u=!0;for(t=e.length-1;t>=0;--t)if(47===e.charCodeAt(t)){if(!u){n=t+1;break}}else-1===r&&(u=!1,r=t+1);return-1===r?"":e.slice(n,r)}(e);return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},t.extname=function(e){"string"!=typeof e&&(e+="");for(var t=-1,n=0,r=-1,u=!0,o=0,i=e.length-1;i>=0;--i){var a=e.charCodeAt(i);if(47!==a)-1===r&&(u=!1,r=i+1),46===a?-1===t?t=i:1!==o&&(o=1):-1!==t&&(o=-1);else if(!u){n=i+1;break}}return-1===t||-1===r||0===o||1===o&&t===r-1&&t===n+1?"":e.slice(t,r)};var u="b"==="ab".substr(-1)?function(e,t,n){return e.substr(t,n)}:function(e,t,n){return t<0&&(t=e.length+t),e.substr(t,n)}},function(e,t,n){t.SourceMapGenerator=n(4).SourceMapGenerator,t.SourceMapConsumer=n(12).SourceMapConsumer,t.SourceNode=n(15).SourceNode},function(e,t,n){var r=n(5),u=n(1),o=n(6).ArraySet,i=n(11).MappingList;function a(e){e||(e={}),this._file=u.getArg(e,"file",null),this._sourceRoot=u.getArg(e,"sourceRoot",null),this._skipValidation=u.getArg(e,"skipValidation",!1),this._sources=new o,this._names=new o,this._mappings=new i,this._sourcesContents=null}a.prototype._version=3,a.fromSourceMap=function(e){var t=e.sourceRoot,n=new a({file:e.file,sourceRoot:t});return e.eachMapping((function(e){var r={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(r.source=e.source,null!=t&&(r.source=u.relative(t,r.source)),r.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(r.name=e.name)),n.addMapping(r)})),e.sources.forEach((function(t){var r=e.sourceContentFor(t);null!=r&&n.setSourceContent(t,r)})),n},a.prototype.addMapping=function(e){var t=u.getArg(e,"generated"),n=u.getArg(e,"original",null),r=u.getArg(e,"source",null),o=u.getArg(e,"name",null);this._skipValidation||this._validateMapping(t,n,r,o),null!=r&&(r=String(r),this._sources.has(r)||this._sources.add(r)),null!=o&&(o=String(o),this._names.has(o)||this._names.add(o)),this._mappings.add({generatedLine:t.line,generatedColumn:t.column,originalLine:null!=n&&n.line,originalColumn:null!=n&&n.column,source:r,name:o})},a.prototype.setSourceContent=function(e,t){var n=e;null!=this._sourceRoot&&(n=u.relative(this._sourceRoot,n)),null!=t?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[u.toSetString(n)]=t):this._sourcesContents&&(delete this._sourcesContents[u.toSetString(n)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},a.prototype.applySourceMap=function(e,t,n){var r=t;if(null==t){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');r=e.file}var i=this._sourceRoot;null!=i&&(r=u.relative(i,r));var a=new o,l=new o;this._mappings.unsortedForEach((function(t){if(t.source===r&&null!=t.originalLine){var o=e.originalPositionFor({line:t.originalLine,column:t.originalColumn});null!=o.source&&(t.source=o.source,null!=n&&(t.source=u.join(n,t.source)),null!=i&&(t.source=u.relative(i,t.source)),t.originalLine=o.line,t.originalColumn=o.column,null!=o.name&&(t.name=o.name))}var c=t.source;null==c||a.has(c)||a.add(c);var s=t.name;null==s||l.has(s)||l.add(s)}),this),this._sources=a,this._names=l,e.sources.forEach((function(t){var r=e.sourceContentFor(t);null!=r&&(null!=n&&(t=u.join(n,t)),null!=i&&(t=u.relative(i,t)),this.setSourceContent(t,r))}),this)},a.prototype._validateMapping=function(e,t,n,r){if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||t||n||r)&&!(e&&"line"in e&&"column"in e&&t&&"line"in t&&"column"in t&&e.line>0&&e.column>=0&&t.line>0&&t.column>=0&&n))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:n,original:t,name:r}))},a.prototype._serializeMappings=function(){for(var e,t,n,o,i=0,a=1,l=0,c=0,s=0,f=0,p="",d=this._mappings.toArray(),h=0,g=d.length;h0){if(!u.compareByGeneratedPositionsInflated(t,d[h-1]))continue;e+=","}e+=r.encode(t.generatedColumn-i),i=t.generatedColumn,null!=t.source&&(o=this._sources.indexOf(t.source),e+=r.encode(o-f),f=o,e+=r.encode(t.originalLine-1-c),c=t.originalLine-1,e+=r.encode(t.originalColumn-l),l=t.originalColumn,null!=t.name&&(n=this._names.indexOf(t.name),e+=r.encode(n-s),s=n)),p+=e}return p},a.prototype._generateSourcesContent=function(e,t){return e.map((function(e){if(!this._sourcesContents)return null;null!=t&&(e=u.relative(t,e));var n=u.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,n)?this._sourcesContents[n]:null}),this)},a.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},a.prototype.toString=function(){return JSON.stringify(this.toJSON())},t.SourceMapGenerator=a},function(e,t,n){var r=n(10);t.encode=function(e){var t,n="",u=function(e){return e<0?1+(-e<<1):0+(e<<1)}(e);do{t=31&u,(u>>>=5)>0&&(t|=32),n+=r.encode(t)}while(u>0);return n},t.decode=function(e,t,n){var u,o,i,a,l=e.length,c=0,s=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(-1===(o=r.decode(e.charCodeAt(t++))))throw new Error("Invalid base64 digit: "+e.charAt(t-1));u=!!(32&o),c+=(o&=31)<>1,1==(1&i)?-a:a),n.rest=t}},function(e,t,n){var r=n(1),u=Object.prototype.hasOwnProperty;function o(){this._array=[],this._set=Object.create(null)}o.fromArray=function(e,t){for(var n=new o,r=0,u=e.length;r=0&&eh;h++)if((g=s?y(r(D=e[h])[0],D[1]):y(e[h]))&&g instanceof c)return g;return new c(!1)}d=p.call(e)}for(v=d.next;!(D=v.call(d)).done;)if("object"==typeof(g=l(d,y,D.value,s))&&g&&g instanceof c)return g;return new c(!1)}).stop=function(e){return new c(!0,e)}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},function(e,t,n){var r=n(8),u=n(24),o=n(32),i=n(63),a=r.Symbol,l=u("wks");e.exports=function(e){return l[e]||(l[e]=i&&a[e]||(i?a:o)("Symbol."+e))}},function(e,t,n){var r=n(5);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,u){return e.call(t,n,r,u)}}return function(){return e.apply(t,arguments)}}},function(e,t,n){(function(t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t&&t)||Function("return this")()}).call(this,n(35))},function(e,t,n){var r=n(57),u=n(12),o=n(78),i=n(14).f;e.exports=function(e){var t=r.Symbol||(r.Symbol={});u(t,e)||i(t,e,{value:o.f(e)})}},function(e,t,n){var r=n(57),u=n(8),o=function(e){return"function"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length<2?o(r[e])||o(u[e]):r[e]&&r[e][t]||u[e]&&u[e][t]}},function(e,t){e.exports=function(e){return"object"===typeof e?null!==e:"function"===typeof e}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var r=n(16),u=n(53),o=n(2),i=n(30),a=Object.defineProperty;t.f=r?a:function(e,t,n){if(o(e),t=i(t,!0),o(n),u)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(3),u=n(45);e.exports=r?u:function(e){return Map.prototype.entries.call(e)}},function(e,t,n){var r=n(13);e.exports=!r((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(e,t,n){var r=n(16),u=n(14),o=n(23);e.exports=r?function(e,t,n){return u.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var r=n(2),u=n(5),o=n(6)("species");e.exports=function(e,t){var n,i=r(e).constructor;return void 0===i||void 0==(n=r(i)[o])?t:u(n)}},function(e,t,n){var r=n(3),u=n(45);e.exports=r?u:function(e){return Set.prototype.values.call(e)}},function(e,t,n){var r=n(52),u=n(38);e.exports=function(e){return r(u(e))}},function(e,t,n){var r=n(8),u=n(24),o=n(17),i=n(12),a=n(39),l=n(55),c=n(25),s=c.get,f=c.enforce,d=String(l).split("toString");u("inspectSource",(function(e){return l.call(e)})),(e.exports=function(e,t,n,u){var l=!!u&&!!u.unsafe,c=!!u&&!!u.enumerable,s=!!u&&!!u.noTargetGet;"function"==typeof n&&("string"!=typeof t||i(n,"name")||o(n,"name",t),f(n).source=d.join("string"==typeof t?t:"")),e!==r?(l?!s&&e[t]&&(c=!0):delete e[t],c?e[t]=n:o(e,t,n)):c?e[t]=n:a(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&s(this).source||l.call(this)}))},function(e,t,n){var r=n(14).f,u=n(12),o=n(6)("toStringTag");e.exports=function(e,t,n){e&&!u(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var r=n(3),u=n(90);(e.exports=function(e,t){return u[e]||(u[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.4.0",mode:r?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(e,t,n){var r,u,o,i=n(91),a=n(8),l=n(11),c=n(17),s=n(12),f=n(31),d=n(26),p=a.WeakMap;if(i){var h=new p,m=h.get,g=h.has,v=h.set;r=function(e,t){return v.call(h,e,t),t},u=function(e){return m.call(h,e)||{}},o=function(e){return g.call(h,e)}}else{var D=f("state");d[D]=!0,r=function(e,t){return c(e,D,t),t},u=function(e){return s(e,D)?e[D]:{}},o=function(e){return s(e,D)}}e.exports={set:r,get:u,has:o,enforce:function(e){return o(e)?u(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=u(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}}},function(e,t){e.exports={}},function(e,t,n){var r=n(41),u=Math.min;e.exports=function(e){return e>0?u(r(e),9007199254740991):0}},function(e,t){e.exports={}},function(e,t,n){var r=n(38);e.exports=function(e){return Object(r(e))}},function(e,t,n){var r=n(11);e.exports=function(e,t){if(!r(e))return e;var n,u;if(t&&"function"==typeof(n=e.toString)&&!r(u=n.call(e)))return u;if("function"==typeof(n=e.valueOf)&&!r(u=n.call(e)))return u;if(!t&&"function"==typeof(n=e.toString)&&!r(u=n.call(e)))return u;throw TypeError("Can\'t convert object to primitive value")}},function(e,t,n){var r=n(24),u=n(32),o=r("keys");e.exports=function(e){return o[e]||(o[e]=u(e))}},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++n+r).toString(36)}},function(e,t,n){var r=n(2),u=n(98),o=n(42),i=n(26),a=n(99),l=n(54),c=n(31)("IE_PROTO"),s=function(){},f=function(){var e,t=l("iframe"),n=o.length;for(t.style.display="none",a.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(" + `; + } + + try { + _webServer = new https.createServer( + { + cert: fs.readFileSync(_configSslCert), + key: fs.readFileSync(_configSslKey) + }, + (req, res) => { + res.writeHead(200); + res.end(getWsClientResp(_configHost, _serverPort)); + } + ); + } catch (err) { + console.log("Failed to start SSL server. ERR:", err); + process.exit(1); + } + + _webSocketServer = new WebSocket.Server({ server: _webServer }); + _webSocketServerSetup(); + + _webServer.listen(_serverPort); +} + +const wpThemeServer = { + getClientInjectString: function(mode, token) { + if (_serverConfig.enable !== true || typeof mode !== "string") { + return ""; + } + + if (_clientInjectString) { + return _clientInjectString; + } + + const phpStuff = ``; + const jsTags = [ + "", + "\n" + ]; + const jsCall = `\n`; + + let toInject = []; + switch (mode) { + case "afterToken": + // note in this case, we put the token back into the file (i.e. the token is something you want to keep in the file like ""). + toInject = [token, phpStuff, jsTags.join("\n"), jsCall]; + break; + case "beforeToken": + // note in this case, we put the token back into the file (i.e. the token is something you want to keep in the file like ""). + toInject = [phpStuff, jsTags.join("\n"), jsCall, token]; + break; + case "endOfFile": + case "replaceToken": + toInject = [phpStuff, jsTags.join("\n"), jsCall]; + break; + default: + console.log(chalk.magenta(`wpstart::injectWpThemeClient: unknown inject mode: ${mode}.`)); + console.log(`Available inject modes: ${chalk.cyan("disable, afterToken, beforeToken, replaceToken, endOfFile")}`); + process.exit(); + } + + _clientInjectString = toInject.join("\n"); + + return _clientInjectString; + }, + startServer: function(paths) { + try { + _serverConfig = _getUserConfig(paths, process.env.NODE_ENV).wpThemeServer; + } catch (err) { + console.log("unable to get wpThemeServer config from user config. Err:", err); + process.exit(1); + } + + _configHost = _serverConfig && typeof _serverConfig.host === "string" && _serverConfig.host.length > 0 ? _serverConfig.host : "127.0.0.1"; + _configPort = _serverConfig && typeof _serverConfig.port === "number" ? _serverConfig.port : null; + _serverPort = parseInt(process.env.PORT, 10) || _configPort || 8090; + + if (_serverPort > 0) { + _configSslCert = _serverConfig && typeof _serverConfig.sslCert === "string" && _serverConfig.sslCert.length > 0 ? _serverConfig.sslCert : null; + _configSslKey = _serverConfig && typeof _serverConfig.sslKey === "string" && _serverConfig.sslKey.length > 0 ? _serverConfig.sslKey : null; + + if (typeof _configSslCert === "string" && typeof _configSslKey === "string") { + _webSocketServerProtocol = "wss"; + _startSslServer(); + } else { + _webSocketServerProtocol = "ws"; + _startNonSslServer(); + } + + console.log("Browser Refresh Server ready."); + } + }, + update: function(stats, msgType) { + if (stats) { + if (typeof stats.hasErrors === "undefined") { + // This is probably a TypeScript deferred message + switch (msgType) { + case _typeBuildError: + _sendMessage(_typeBuildError, stats); + break; + case _typeBuildWarning: + _sendMessage(_typeBuildWarning, stats); + break; + } + } else { + // Normal Webpack compile message + if (typeof stats.hasErrors === "function " && stats.hasErrors()) { + _sendMessage(_typeBuildError, stats); + } else if (typeof stats.hasWarnings === "function " && stats.hasWarnings()) { + _sendMessage(_typeBuildWarning, stats); + } else { + _sendMessage(_typeBuildContentChanged, stats); + } + } + } + } +}; + +module.exports = wpThemeServer; diff --git a/create-react-wptheme/.npmignore b/packages/create-react-wptheme/.npmignore similarity index 100% rename from create-react-wptheme/.npmignore rename to packages/create-react-wptheme/.npmignore diff --git a/packages/create-react-wptheme/.npmrc b/packages/create-react-wptheme/.npmrc new file mode 100644 index 0000000..46db3e1 --- /dev/null +++ b/packages/create-react-wptheme/.npmrc @@ -0,0 +1,2 @@ +package-lock=false +shrinkwrap=false diff --git a/create-react-wptheme/LICENSE b/packages/create-react-wptheme/LICENSE similarity index 100% rename from create-react-wptheme/LICENSE rename to packages/create-react-wptheme/LICENSE diff --git a/create-react-wptheme/createReactWpTheme.js b/packages/create-react-wptheme/createReactWpTheme.js similarity index 100% rename from create-react-wptheme/createReactWpTheme.js rename to packages/create-react-wptheme/createReactWpTheme.js diff --git a/create-react-wptheme/index.js b/packages/create-react-wptheme/index.js similarity index 100% rename from create-react-wptheme/index.js rename to packages/create-react-wptheme/index.js diff --git a/create-react-wptheme/package.json b/packages/create-react-wptheme/package.json similarity index 100% rename from create-react-wptheme/package.json rename to packages/create-react-wptheme/package.json From 5079a2e9a5d1643598f63d92efb6ad6da1a09cb0 Mon Sep 17 00:00:00 2001 From: devloco <40293912+devloco@users.noreply.github.com> Date: Tue, 24 Dec 2019 17:05:10 -0600 Subject: [PATCH 05/11] setup lerna --- lerna.json | 6 ++++++ package.json | 9 +++++---- .../cra-template-wptheme-typescript/README.md | 17 ++++------------- .../template.json | 16 ++++++---------- packages/cra-template-wptheme/README.md | 9 ++------- packages/cra-template-wptheme/template.json | 6 +----- 6 files changed, 24 insertions(+), 39 deletions(-) create mode 100644 lerna.json diff --git a/lerna.json b/lerna.json new file mode 100644 index 0000000..d6707ca --- /dev/null +++ b/lerna.json @@ -0,0 +1,6 @@ +{ + "packages": [ + "packages/*" + ], + "version": "0.0.0" +} diff --git a/package.json b/package.json index c146fb8..93d0635 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { - "private": true, - "workspaces": [ - "packages/*" - ] + "name": "root", + "private": true, + "devDependencies": { + "lerna": "^3.19.0" + } } diff --git a/packages/cra-template-wptheme-typescript/README.md b/packages/cra-template-wptheme-typescript/README.md index e719756..9851a25 100644 --- a/packages/cra-template-wptheme-typescript/README.md +++ b/packages/cra-template-wptheme-typescript/README.md @@ -1,20 +1,11 @@ -# cra-template-typescript +# cra-template-wptheme-typescript -This is the official TypeScript template for [Create React App](https://github.com/facebook/create-react-app). +This is the official TypeScript template for [Create React WPTheme](https://github.com/devloco/create-react-wptheme). -To use this template, add `--template typescript` when creating a new app. +To use this template, add `--template typescript` when creating a new wp theme. For example: ```sh -npx create-react-app my-app --template typescript - -# or - -yarn create react-app my-app --template typescript +npx create-react-wptheme my-theme --template typescript ``` - -For more information, please refer to: - -- [Getting Started](https://create-react-app.dev/docs/getting-started) – How to create a new app. -- [User Guide](https://create-react-app.dev) – How to develop apps bootstrapped with Create React App. diff --git a/packages/cra-template-wptheme-typescript/template.json b/packages/cra-template-wptheme-typescript/template.json index 06d73b7..b2c6f8d 100644 --- a/packages/cra-template-wptheme-typescript/template.json +++ b/packages/cra-template-wptheme-typescript/template.json @@ -1,12 +1,8 @@ { - "dependencies": { - "@testing-library/react": "^9.3.2", - "@testing-library/jest-dom": "^4.2.4", - "@testing-library/user-event": "^7.1.2", - "@types/node": "^12.0.0", - "@types/react": "^16.9.0", - "@types/react-dom": "^16.9.0", - "@types/jest": "^24.0.0", - "typescript": "~3.7.2" - } + "dependencies": { + "@types/node": "^12.0.0", + "@types/react": "^16.9.0", + "@types/react-dom": "^16.9.0", + "typescript": "~3.7.2" + } } diff --git a/packages/cra-template-wptheme/README.md b/packages/cra-template-wptheme/README.md index 9e8434b..1c797ad 100644 --- a/packages/cra-template-wptheme/README.md +++ b/packages/cra-template-wptheme/README.md @@ -1,10 +1,5 @@ -# cra-template +# cra-template-wptheme -This is the official base template for [Create React App](https://github.com/facebook/create-react-app). +This is the official base template for [Create React WPTheme](https://github.com/devloco/create-react-wptheme). If you don't specify a template (for example, `--template typescript`), this template will be used by default. - -For more information, please refer to: - -- [Getting Started](https://create-react-app.dev/docs/getting-started) – How to create a new app. -- [User Guide](https://create-react-app.dev) – How to develop apps bootstrapped with Create React App. diff --git a/packages/cra-template-wptheme/template.json b/packages/cra-template-wptheme/template.json index 0cc6ba2..92a4250 100644 --- a/packages/cra-template-wptheme/template.json +++ b/packages/cra-template-wptheme/template.json @@ -1,7 +1,3 @@ { - "dependencies": { - "@testing-library/react": "^9.3.2", - "@testing-library/jest-dom": "^4.2.4", - "@testing-library/user-event": "^7.1.2" - } + "dependencies": {} } From 124ffb2b23f290b5d82542102da9ffea97f7b729 Mon Sep 17 00:00:00 2001 From: devloco <40293912+devloco@users.noreply.github.com> Date: Tue, 24 Dec 2019 17:26:50 -0600 Subject: [PATCH 06/11] setup templates on NPM --- packages/cra-template-wptheme/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cra-template-wptheme/package.json b/packages/cra-template-wptheme/package.json index 3e244ea..dfb9256 100644 --- a/packages/cra-template-wptheme/package.json +++ b/packages/cra-template-wptheme/package.json @@ -1,5 +1,5 @@ { - "name": "cra-template-wptheme", + "name": "@devloco/cra-template-wptheme", "version": "3.3.0-wp.1", "keywords": [ "wordpress", From a2c61997db524d19569092deffde739ae930d8a8 Mon Sep 17 00:00:00 2001 From: devloco <40293912+devloco@users.noreply.github.com> Date: Tue, 24 Dec 2019 19:54:21 -0600 Subject: [PATCH 07/11] 3.3.0 --- .../createReactWpTheme.js | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/create-react-wptheme/createReactWpTheme.js b/packages/create-react-wptheme/createReactWpTheme.js index 1f7ea02..39f71f4 100644 --- a/packages/create-react-wptheme/createReactWpTheme.js +++ b/packages/create-react-wptheme/createReactWpTheme.js @@ -50,7 +50,7 @@ const _wpThemeVersion = packageJson.version; const _createReactAppVersion = _wpThemeVersion.split("-wp.")[0]; // Check these!!!! -const _reactScriptsWpThemeVersion = "3.2.0-wp.2"; +const _reactScriptsWpThemeVersion = "3.3.0-wp.1"; const _getScriptsPath = function() { return scriptsFromNpm(); }; @@ -110,7 +110,7 @@ const program = new commander.Command(packageJson.name) .option("--info", "print environment debug info") .option("--use-npm", "force downloading packages using npm instead of yarn (if both are installed)") .option("--use-pnp") - .option("--typescript") + .option("--typescript", "set your theme to use TypeScript") .allowUnknownOption() .on("--help", () => { console.log(` Only ${chalk.green("")} is required.`); @@ -172,6 +172,7 @@ function createApp(name, verbose, version, useNpm, usePnp, useTypescript, templa fs.ensureDirSync(name); console.log(`Creating a new React WP theme in ${chalk.green(root)}.`); + console.log(`Using Create React App ${chalk.green(_createReactAppVersion)} to scaffold the theme's source code...`); console.log(); let useYarn = useNpm ? false : shouldUseYarn(); @@ -194,6 +195,14 @@ function shouldUseYarn() { function createWpTheme(root, appName, version, verbose, originalDirectory, template, useYarn, usePnp, useTypescript) { const packageToInstall = "create-react-app"; + if (useTypescript === true) { + template = "wptheme-typescript"; + } + + if (typeof template !== "string" || template.trim().length === 0) { + template = "wptheme"; + } + return Promise.resolve(packageToInstall) .then((packageName) => checkIfOnline(useYarn).then((isOnline) => ({ @@ -207,7 +216,7 @@ function createWpTheme(root, appName, version, verbose, originalDirectory, templ } let createWpThemeReactRoot = "react-src"; - createReactApp(createWpThemeReactRoot, appName, version, verbose, originalDirectory, template, useYarn, usePnp, useTypescript); + createReactApp(createWpThemeReactRoot, appName, version, verbose, originalDirectory, template, useYarn, usePnp); }) .catch((reason) => { console.log(); @@ -227,7 +236,7 @@ function createWpTheme(root, appName, version, verbose, originalDirectory, templ }); } -function createReactApp(createWpThemeReactRoot, appName, version, verbose, originalDirectory, template, useYarn, usePnp, useTypescript) { +function createReactApp(createWpThemeReactRoot, appName, version, verbose, originalDirectory, template, useYarn, usePnp) { return new Promise((resolve, reject) => { let command = "npx"; @@ -247,9 +256,8 @@ function createReactApp(createWpThemeReactRoot, appName, version, verbose, origi args.push("--use-pnp"); } - if (useTypescript) { - args.push("--typescript"); - } + args.push("--template"); + args.push(template); let scriptsPath = _getScriptsPath(); args.push("--scripts-version"); From 42512e2b1c774ea86bdf2e2d72424d3f2ef3f122 Mon Sep 17 00:00:00 2001 From: devloco <40293912+devloco@users.noreply.github.com> Date: Tue, 24 Dec 2019 20:52:44 -0600 Subject: [PATCH 08/11] 3.3.0 RC 1 --- packages/create-react-wptheme-utils/fileFunctions.js | 4 ++-- packages/create-react-wptheme-utils/getUserConfig.js | 2 +- packages/create-react-wptheme-utils/package.json | 9 ++++----- packages/create-react-wptheme-utils/wpThemeServer.js | 6 +++--- packages/create-react-wptheme/createReactWpTheme.js | 4 ++-- packages/create-react-wptheme/package.json | 2 +- 6 files changed, 13 insertions(+), 14 deletions(-) diff --git a/packages/create-react-wptheme-utils/fileFunctions.js b/packages/create-react-wptheme-utils/fileFunctions.js index 83f4024..754880e 100644 --- a/packages/create-react-wptheme-utils/fileFunctions.js +++ b/packages/create-react-wptheme-utils/fileFunctions.js @@ -10,8 +10,8 @@ const fs = require("fs-extra"); const path = require("path"); const { rm, cp } = require("shelljs"); -const wpThemePostInstallerInfo = require("@devloco/react-scripts-wptheme-utils/postInstallerInfo"); -const wpThemeUserConfig = require("@devloco/react-scripts-wptheme-utils/getUserConfig"); //(paths, process.env.NODE_ENV); +const wpThemePostInstallerInfo = require("@devloco/create-react-wptheme-utils/postInstallerInfo"); +const wpThemeUserConfig = require("@devloco/create-react-wptheme-utils/getUserConfig"); //(paths, process.env.NODE_ENV); const _doNotEditFileName = "!DO_NOT_EDIT_THESE_FILES!.txt"; const _readyToDeployFileName = "!READY_TO_DEPLOY!.txt"; diff --git a/packages/create-react-wptheme-utils/getUserConfig.js b/packages/create-react-wptheme-utils/getUserConfig.js index ed56ca2..2d12f27 100644 --- a/packages/create-react-wptheme-utils/getUserConfig.js +++ b/packages/create-react-wptheme-utils/getUserConfig.js @@ -10,7 +10,7 @@ const fs = require("fs-extra"); const chalk = require("chalk"); const path = require("path"); -const wpThemePostInstallerInfo = require("@devloco/react-scripts-wptheme-utils/postInstallerInfo"); +const wpThemePostInstallerInfo = require("@devloco/create-react-wptheme-utils/postInstallerInfo"); const _userDevConfigName = "user.dev.json"; const _userProdConfigName = "user.prod.json"; diff --git a/packages/create-react-wptheme-utils/package.json b/packages/create-react-wptheme-utils/package.json index bd154cf..3e20f56 100644 --- a/packages/create-react-wptheme-utils/package.json +++ b/packages/create-react-wptheme-utils/package.json @@ -1,7 +1,7 @@ { "name": "@devloco/create-react-wptheme-utils", - "version": "3.3.0-wp.1", - "description": "Utilities used by react-scripts-wptheme.", + "version": "3.3.0-wp.2", + "description": "Utilities used by create-react-wptheme.", "engines": { "node": ">=8" }, @@ -10,14 +10,13 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/devloco/react-scripts-wptheme-utils.git" + "url": "https://github.com/devloco/create-react-wptheme" }, "author": "devloco", "license": "MIT", "bugs": { - "url": "https://github.com/devloco/react-scripts-wptheme-utils/issues" + "url": "https://github.com/devloco/create-react-wptheme/issues" }, - "homepage": "https://github.com/devloco/react-scripts-wptheme-utils#readme", "files": [ "fileFunctions.js", "fileWatcherPlugin.js", diff --git a/packages/create-react-wptheme-utils/wpThemeServer.js b/packages/create-react-wptheme-utils/wpThemeServer.js index 7a95f25..a491e0c 100644 --- a/packages/create-react-wptheme-utils/wpThemeServer.js +++ b/packages/create-react-wptheme-utils/wpThemeServer.js @@ -13,7 +13,7 @@ const url = require("url"); const https = require("https"); const WebSocket = require("ws"); -const _getUserConfig = require("@devloco/react-scripts-wptheme-utils/getUserConfig"); +const _getUserConfig = require("@devloco/create-react-wptheme-utils/getUserConfig"); const _typeBuildError = "errors"; const _typeBuildContentChanged = "content-changed"; const _typeBuildSuccess = "success"; @@ -204,8 +204,8 @@ const wpThemeServer = { const phpStuff = ``; const jsTags = [ - "", - "\n" + "\n", + "\n" ]; const jsCall = `\n`; diff --git a/packages/create-react-wptheme/createReactWpTheme.js b/packages/create-react-wptheme/createReactWpTheme.js index 39f71f4..246b3c5 100644 --- a/packages/create-react-wptheme/createReactWpTheme.js +++ b/packages/create-react-wptheme/createReactWpTheme.js @@ -50,7 +50,7 @@ const _wpThemeVersion = packageJson.version; const _createReactAppVersion = _wpThemeVersion.split("-wp.")[0]; // Check these!!!! -const _reactScriptsWpThemeVersion = "3.3.0-wp.1"; +const _reactScriptsWpThemeVersion = "3.3.0-wp.2"; const _getScriptsPath = function() { return scriptsFromNpm(); }; @@ -161,7 +161,7 @@ function printValidationResults(results) { console.log(program.name() + " version: " + chalk.magenta(_wpThemeVersion)); console.log("@devloco/react-scripts-wptheme version: " + chalk.magenta(_reactScriptsWpThemeVersion)); -console.log("create-react-app version: " + chalk.magenta(_createReactAppVersion)); +console.log(); createApp(projectName, program.verbose, program.scriptsVersion, program.useNpm, program.usePnp, program.typescript); function createApp(name, verbose, version, useNpm, usePnp, useTypescript, template) { diff --git a/packages/create-react-wptheme/package.json b/packages/create-react-wptheme/package.json index 11a3bbf..b5d75b4 100644 --- a/packages/create-react-wptheme/package.json +++ b/packages/create-react-wptheme/package.json @@ -1,6 +1,6 @@ { "name": "create-react-wptheme", - "version": "3.3.0-wp.1", + "version": "3.3.0-wp.2", "description": "Create React-enabled WP themes.", "main": "index.js", "scripts": { From 7d827c6300b91b59c476509262f48e3bc7f8688a Mon Sep 17 00:00:00 2001 From: devloco <40293912+devloco@users.noreply.github.com> Date: Tue, 24 Dec 2019 21:00:07 -0600 Subject: [PATCH 09/11] Update README to 3.3.0 --- README.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f6cd815..dd85a0d 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,8 @@ # Create React WP Theme -Dec. 15, 2019 +Dec. 24, 2019
-[v3.3.0](https://github.com/facebook/create-react-app/releases/tag/v3.3.0) of [Create React App](https://create-react-app.dev/) was released. It's a major change, and it's going take me another week to make the changes to `create-react-wptheme`. - -But don't let that stop you from creating a new theme now, as updating your theme is quite painless (see [Updating Existing Themes](#updating-existing-themes)) below. - -The current release of `create-react-wptheme` is based on [v3.2.0](https://github.com/facebook/create-react-app/releases/tag/v3.2.0) of [Create React App](https://create-react-app.dev/). +The current release of `create-react-wptheme` is based on the latest [Create React App](https://create-react-app.dev/) version which is [3.3.0](https://github.com/facebook/create-react-app/releases/tag/v3.2.0). --- From 54e7f83108bcd06e086185739b4b2c67d6b830c9 Mon Sep 17 00:00:00 2001 From: devloco <40293912+devloco@users.noreply.github.com> Date: Tue, 24 Dec 2019 21:02:10 -0600 Subject: [PATCH 10/11] Version bump for NPM --- packages/create-react-wptheme-utils/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create-react-wptheme-utils/package.json b/packages/create-react-wptheme-utils/package.json index 3e20f56..4059dda 100644 --- a/packages/create-react-wptheme-utils/package.json +++ b/packages/create-react-wptheme-utils/package.json @@ -1,6 +1,6 @@ { "name": "@devloco/create-react-wptheme-utils", - "version": "3.3.0-wp.2", + "version": "3.3.0-wp.3", "description": "Utilities used by create-react-wptheme.", "engines": { "node": ">=8" From 41d76d2c64c6b37b2e9d4d33d4d430ff1db23fa9 Mon Sep 17 00:00:00 2001 From: devloco <40293912+devloco@users.noreply.github.com> Date: Tue, 24 Dec 2019 21:06:36 -0600 Subject: [PATCH 11/11] Update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dd85a0d..ec07eb6 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Dec. 24, 2019
-The current release of `create-react-wptheme` is based on the latest [Create React App](https://create-react-app.dev/) version which is [3.3.0](https://github.com/facebook/create-react-app/releases/tag/v3.2.0). +Updated to use [Create React App](https://create-react-app.dev/) version [3.3.0](https://github.com/facebook/create-react-app/releases/tag/v3.3.0). ---