diff --git a/.kokoro/appengine/typescript.cfg b/.kokoro/appengine/typescript.cfg new file mode 100644 index 0000000000..d06d429bf2 --- /dev/null +++ b/.kokoro/appengine/typescript.cfg @@ -0,0 +1,13 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Set the folder in which the tests are run +env_vars: { + key: "PROJECT" + value: "appengine/typescript" +} + +# Tell the trampoline which build file to use. +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/nodejs-docs-samples/.kokoro/build.sh" +} diff --git a/.kokoro/appengine/uglifyjs.cfg b/.kokoro/appengine/uglifyjs.cfg new file mode 100644 index 0000000000..7b2f6a5aa8 --- /dev/null +++ b/.kokoro/appengine/uglifyjs.cfg @@ -0,0 +1,13 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Set the folder in which the tests are run +env_vars: { + key: "PROJECT" + value: "appengine/uglifyjs" +} + +# Tell the trampoline which build file to use. +env_vars: { + key: "TRAMPOLINE_BUILD_FILE" + value: "github/nodejs-docs-samples/.kokoro/build.sh" +} diff --git a/appengine/typescript/.gcloudignore b/appengine/typescript/.gcloudignore new file mode 100644 index 0000000000..73eb8a3c5b --- /dev/null +++ b/appengine/typescript/.gcloudignore @@ -0,0 +1,5 @@ +# Exclude compiled .js files +*.js + +# Exclude dependencies +node_modules/ diff --git a/appengine/typescript/.gitignore b/appengine/typescript/.gitignore new file mode 100644 index 0000000000..73eb8a3c5b --- /dev/null +++ b/appengine/typescript/.gitignore @@ -0,0 +1,5 @@ +# Exclude compiled .js files +*.js + +# Exclude dependencies +node_modules/ diff --git a/appengine/typescript/README.md b/appengine/typescript/README.md new file mode 100644 index 0000000000..ee4afddbac --- /dev/null +++ b/appengine/typescript/README.md @@ -0,0 +1,38 @@ +# App Engine TypeScript sample + +This sample provides an example of how to compile TypeScript files while +deploying to App Engine. + +The `gcp-build` NPM script is used to trigger the TypeScript compilation +process. This step happens automatically when deploying to App Engine, but must +be performed manually when developing locally. + +## Setup + +Install dependencies: + + npm install + +## Running locally + +1. Perform the build step: + + npm run gcp-build + +1. Run the completed program + + npm start + +## Deploying to App Engine + +Deploy your app: + + npm run deploy + +By default, this application deploys to [App Engine Standard][appengine]. _(Recommended)_ +Deploy to App Engine Flexible by [modifying `app.yaml`][app_yaml]. + +[appengine]: https://cloud.google.com/appengine/docs/standard/nodejs +[app_yaml]: https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml +[tutorial]: https://cloud.google.com/appengine/docs/standard/nodejs/quickstart +[contributing]: https://github.com/GoogleCloudPlatform/nodejs-docs-samples/blob/master/CONTRIBUTING.md diff --git a/appengine/typescript/app.yaml b/appengine/typescript/app.yaml new file mode 100644 index 0000000000..f0ccc6d566 --- /dev/null +++ b/appengine/typescript/app.yaml @@ -0,0 +1 @@ +runtime: nodejs8 diff --git a/appengine/typescript/index.ts b/appengine/typescript/index.ts new file mode 100644 index 0000000000..258eb46c8a --- /dev/null +++ b/appengine/typescript/index.ts @@ -0,0 +1,34 @@ +// Copyright 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the 'License'); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an 'AS IS' BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/* tslint:disable:no-console */ + +declare var process: { + env: { + PORT: string, + }, +}; + +const PORT: number = Number(process.env.PORT) || 8080; +import express = require("express"); + +const app: any = express(); + +app.get("/", (req: any, res: any) => { + res.send("🎉 Hello TypeScript! 🎉"); +}); + +const server: object = app.listen(PORT, () => { + console.log(`App listening on port ${PORT}`); +}); diff --git a/appengine/typescript/package.json b/appengine/typescript/package.json new file mode 100644 index 0000000000..a070decd72 --- /dev/null +++ b/appengine/typescript/package.json @@ -0,0 +1,27 @@ +{ + "name": "appengine-typescript", + "description": "An example TypeScript app running on Google App Engine.", + "version": "0.0.1", + "private": true, + "license": "Apache Version 2.0", + "author": "Google Inc.", + "engines": { + "node": "8.x" + }, + "scripts": { + "test": "npm run gcp-build && npm run lint && repo-tools test app -- index.js", + "lint": "tslint index.ts", + "start": "node ./index.js", + "gcp-build": "tsc index.ts", + "deploy": "gcloud app deploy" + }, + "dependencies": { + "express": "^4.16.3", + "typescript": "^3.0.1" + }, + "devDependencies": { + "@google-cloud/nodejs-repo-tools": "^2.3.3", + "semistandard": "^12.0.1", + "tslint": "^5.11.0" + } +} diff --git a/appengine/typescript/tslint.json b/appengine/typescript/tslint.json new file mode 100644 index 0000000000..78af234436 --- /dev/null +++ b/appengine/typescript/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": "tslint:recommended" +} diff --git a/appengine/uglifyjs/.gcloudignore b/appengine/uglifyjs/.gcloudignore new file mode 100644 index 0000000000..35c963dbdb --- /dev/null +++ b/appengine/uglifyjs/.gcloudignore @@ -0,0 +1,5 @@ +# Minify files on GCP +**/*.min.* + +# Exclude dependencies +node_modules/ diff --git a/appengine/uglifyjs/.gitignore b/appengine/uglifyjs/.gitignore new file mode 100644 index 0000000000..e6090ab7d2 --- /dev/null +++ b/appengine/uglifyjs/.gitignore @@ -0,0 +1 @@ +**/*.min.* diff --git a/appengine/uglifyjs/README.md b/appengine/uglifyjs/README.md new file mode 100644 index 0000000000..e979b8e338 --- /dev/null +++ b/appengine/uglifyjs/README.md @@ -0,0 +1,39 @@ +# App Engine minification sample + +This sample provides an example of how to minify static CSS and JS files while +deploying to App Engine. + +The `gcp-build` NPM script is used to trigger the minification process. This +step happens automatically when deploying to App Engine, but must be performed +manually when developing locally. + +## Setup + +Install dependencies: + + npm install + + +## Running locally + +1. Perform the build step locally: + + npm run gcp-build + +1. Run the completed program + + npm start + +## Deploying to App Engine + +Deploy your app: + + npm run deploy + +By default, this application deploys to [App Engine Standard][appengine]. _(Recommended)_ +Deploy to App Engine Flexible by [modifying `app.yaml`][app_yaml]. + +[appengine]: https://cloud.google.com/appengine/docs/standard/nodejs +[app_yaml]: https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml +[tutorial]: https://cloud.google.com/appengine/docs/standard/nodejs/quickstart +[contributing]: https://github.com/GoogleCloudPlatform/nodejs-docs-samples/blob/master/CONTRIBUTING.md diff --git a/appengine/uglifyjs/app.yaml b/appengine/uglifyjs/app.yaml new file mode 100644 index 0000000000..e33318e805 --- /dev/null +++ b/appengine/uglifyjs/app.yaml @@ -0,0 +1,10 @@ +runtime: nodejs8 + +handlers: +- url: /static + static_dir: static + +- url: /.* + secure: always + script: auto + diff --git a/appengine/uglifyjs/index.js b/appengine/uglifyjs/index.js new file mode 100644 index 0000000000..177ef2baa6 --- /dev/null +++ b/appengine/uglifyjs/index.js @@ -0,0 +1,34 @@ +// Copyright 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the 'License'); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an 'AS IS' BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +'use strict'; + +const express = require('express'); +const path = require('path'); + +const app = express(); +const PORT = process.env.PORT || 8080; + +app.use(express.static('static')); + +app.get('/full', (req, res) => { + res.sendFile(path.join(__dirname, '/static/index.html')); +}); + +app.get('/min', (req, res) => { + res.sendFile(path.join(__dirname, '/static/index_min.html')); +}); + +app.listen(PORT); +console.log(`App listening on port ${PORT}`); diff --git a/appengine/uglifyjs/package.json b/appengine/uglifyjs/package.json new file mode 100644 index 0000000000..1612c58f1c --- /dev/null +++ b/appengine/uglifyjs/package.json @@ -0,0 +1,46 @@ +{ + "name": "appengine-uglifyjs", + "description": "An example of minifying files with UglifyJS and Clean-CSS on Google App Engine.", + "version": "0.0.1", + "private": true, + "license": "Apache Version 2.0", + "author": "Google Inc.", + "engines": { + "node": "8.x" + }, + "scripts": { + "start": "node ./index.js", + "lint-css": "stylelint static/style.css", + "lint-html": "htmlhint index.html", + "lint-js": "semistandard index.js static/message.js", + "lint": "npm run lint-css && npm run lint-html && npm run lint-js", + "test": "npm run gcp-build && repo-tools test app -- index.js", + "minify-css": "cleancss -o static/style.min.css static/style.css", + "minify-js": "uglifyjs --compress --mangle -o static/message.min.js static/message.js", + "gcp-build": "npm run minify-js && npm run minify-css", + "deploy": "gcloud app deploy" + }, + "dependencies": { + "clean-css-cli": "^4.2.1", + "express": "^4.16.3", + "uglify-js": "^3.4.7" + }, + "repo-tools": { + "test": { + "app": { + "url": "/full", + "msg": "message.min.js" + } + } + }, + "devDependencies": { + "@google-cloud/nodejs-repo-tools": "^2.3.3", + "htmlhint": "^0.9.13", + "semistandard": "^12.0.1", + "stylelint": "^9.4.0", + "stylelint-config-recommended": "^2.1.0" + }, + "stylelint": { + "extends": "stylelint-config-recommended" + } +} diff --git a/appengine/uglifyjs/static/index.html b/appengine/uglifyjs/static/index.html new file mode 100644 index 0000000000..77f1c739de --- /dev/null +++ b/appengine/uglifyjs/static/index.html @@ -0,0 +1,33 @@ + + + + + + + Simple web page + + + + + +
+
You haven't clicked the button.
+ + +
ERROR: CSS files not found!
+ + \ No newline at end of file diff --git a/appengine/uglifyjs/static/index_min.html b/appengine/uglifyjs/static/index_min.html new file mode 100644 index 0000000000..88cc57231e --- /dev/null +++ b/appengine/uglifyjs/static/index_min.html @@ -0,0 +1,33 @@ + + + + + + + Simple web page + + + + + +
+
You haven't clicked the button.
+ + +
ERROR: CSS files not found!
+ + \ No newline at end of file diff --git a/appengine/uglifyjs/static/message.js b/appengine/uglifyjs/static/message.js new file mode 100644 index 0000000000..cd0b47b640 --- /dev/null +++ b/appengine/uglifyjs/static/message.js @@ -0,0 +1,33 @@ +// Copyright 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the 'License'); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an 'AS IS' BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +window.onload = function () { + window.messageDiv = document.getElementById('message'); + window.buttonClicks = 0; +}; + +window.buttonClick = function () { + window.buttonClicks++; + + var buttonClickTimes; + if (window.buttonClicks === 1) { + buttonClickTimes = 'once'; + } else if (window.buttonClicks === 2) { + buttonClickTimes = 'twice'; + } else { + buttonClickTimes = window.buttonClicks + ' times'; + } + + window.messageDiv.innerHTML = 'You clicked the button ' + buttonClickTimes; +}; diff --git a/appengine/uglifyjs/static/style.css b/appengine/uglifyjs/static/style.css new file mode 100644 index 0000000000..e76232d14e --- /dev/null +++ b/appengine/uglifyjs/static/style.css @@ -0,0 +1,39 @@ +/* + Copyright 2018 Google LLC + + Licensed under the Apache License, Version 2.0 (the 'License'); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an 'AS IS' BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +button { + background-color: #2962ff; + border-color: #0039cb; + border-radius: 50%; + border-width: 2px; + width: 120px; + height: 120px; + color: #fefefe; + font-size: 24px; + font-family: Roboto, sans-serif; +} + +#message { + padding-top: 20px +} + +body { + padding: 20px; +} + +#cssError { + display: none; +} \ No newline at end of file