From 8d0355ff6fbae3e5c872535426aa8f27e5b03cdb Mon Sep 17 00:00:00 2001 From: "pattishin@google.com" Date: Thu, 14 Dec 2023 19:53:48 -0800 Subject: [PATCH 1/3] refactor: updates after switching from using commonjs to esm --- run/markdown-preview/editor/app.js | 23 ++++++++++--------- run/markdown-preview/editor/index.js | 5 ++-- run/markdown-preview/editor/package.json | 5 ++-- run/markdown-preview/editor/render.js | 8 ++++--- run/markdown-preview/editor/test/app.test.js | 14 +++++------ .../editor/test/system.test.js | 9 ++++---- run/markdown-preview/renderer/app.js | 6 ++--- run/markdown-preview/renderer/index.js | 5 ++-- run/markdown-preview/renderer/package.json | 3 ++- 9 files changed, 42 insertions(+), 36 deletions(-) diff --git a/run/markdown-preview/editor/app.js b/run/markdown-preview/editor/app.js index 4edda65360..2a60ab88ec 100644 --- a/run/markdown-preview/editor/app.js +++ b/run/markdown-preview/editor/app.js @@ -12,24 +12,28 @@ // See the License for the specific language governing permissions and // limitations under the License. -const express = require('express'); -const handlebars = require('handlebars'); -const {readFile} = require('fs').promises; -const renderRequest = require('./render.js'); +import express from 'express'; +import handlebars from 'handlebars'; +import fs from 'fs'; +import renderRequest from './render.js'; const app = express(); + app.use(express.json()); let markdownDefault, compiledTemplate, renderedHtml; // Load the template files and serve them with the Editor service. -const buildRenderedHtml = async () => { +export const buildRenderedHtml = async () => { + const dirname = process.cwd(); + try { - markdownDefault = await readFile(__dirname + '/templates/markdown.md'); + markdownDefault = await fs.promises.readFile(dirname + '/templates/markdown.md'); compiledTemplate = handlebars.compile( - await readFile(__dirname + '/templates/index.html', 'utf8') + await fs.promises.readFile(dirname + '/templates/index.html', 'utf8') ); renderedHtml = compiledTemplate({default: markdownDefault}); + return renderedHtml; } catch (err) { throw Error('Error loading template: ', err); @@ -64,7 +68,4 @@ app.post('/render', async (req, res) => { // [END cloudrun_secure_request_do] // Exports for testing purposes. -module.exports = { - app, - buildRenderedHtml, -}; +export default app; diff --git a/run/markdown-preview/editor/index.js b/run/markdown-preview/editor/index.js index 831ee1db01..b71d291153 100644 --- a/run/markdown-preview/editor/index.js +++ b/run/markdown-preview/editor/index.js @@ -12,8 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -const {app} = require('./app'); -const pkg = require('./package.json'); +import app from './app.js'; +import pkg from './package.json' assert { type: "json" }; + const PORT = parseInt(process.env.PORT) || 8080; app.listen(PORT, () => console.log(`${pkg.name} listening on port ${PORT}`)); diff --git a/run/markdown-preview/editor/package.json b/run/markdown-preview/editor/package.json index 09a8682d5d..6adbef7285 100644 --- a/run/markdown-preview/editor/package.json +++ b/run/markdown-preview/editor/package.json @@ -9,6 +9,7 @@ "type": "git", "url": "https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git" }, + "type": "module", "engines": { "node": ">=16.0.0" }, @@ -21,8 +22,8 @@ "dependencies": { "express": "^4.17.1", "google-auth-library": "^9.0.0", - "got": "^11.8.0", - "handlebars": "^4.7.6" + "got": "^14.0.0", + "handlebars": "^4.7.8" }, "devDependencies": { "c8": "^8.0.0", diff --git a/run/markdown-preview/editor/render.js b/run/markdown-preview/editor/render.js index 9a35f6c3b5..1c9b5616f1 100644 --- a/run/markdown-preview/editor/render.js +++ b/run/markdown-preview/editor/render.js @@ -14,8 +14,10 @@ // [START cloudrun_secure_request] // [START run_secure_request] -const {GoogleAuth} = require('google-auth-library'); -const got = require('got'); + +import { GoogleAuth } from 'google-auth-library'; +import got from 'got'; + const auth = new GoogleAuth(); let client, serviceUrl; @@ -61,4 +63,4 @@ const renderRequest = async markdown => { // [END run_secure_request] // [END cloudrun_secure_request] -module.exports = renderRequest; +export default renderRequest; diff --git a/run/markdown-preview/editor/test/app.test.js b/run/markdown-preview/editor/test/app.test.js index b9741edc9e..19371a799e 100644 --- a/run/markdown-preview/editor/test/app.test.js +++ b/run/markdown-preview/editor/test/app.test.js @@ -12,16 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -'use strict'; - -const assert = require('assert'); -const path = require('path'); -const supertest = require('supertest'); +import assert from 'assert'; +import path from 'path'; +import supertest from 'supertest'; describe('Editor unit tests', () => { describe('Initialize app', () => { it('should successfully load the index page', async () => { - const {app} = require(path.join(__dirname, '..', 'app')); + import { app } from path.join(__dirname, '..', 'app'); const request = supertest(app); await request.get('/').retry(3).expect(200); }); @@ -31,7 +29,7 @@ describe('Editor unit tests', () => { let template; before(async () => { - const {buildRenderedHtml} = require(path.join(__dirname, '..', 'app')); + import { buildRenderedHtml } from path.join(__dirname, '..', 'app'); template = await buildRenderedHtml(); }); @@ -48,7 +46,7 @@ describe('Integration tests', () => { before(async () => { process.env.EDITOR_UPSTREAM_RENDER_URL = 'https://www.example.com/'; - const {app} = require(path.join(__dirname, '..', 'app')); + import { app } from path.join(__dirname, '..', 'app'); request = supertest(app); }); diff --git a/run/markdown-preview/editor/test/system.test.js b/run/markdown-preview/editor/test/system.test.js index da5f55e622..bd9a4fbc59 100644 --- a/run/markdown-preview/editor/test/system.test.js +++ b/run/markdown-preview/editor/test/system.test.js @@ -12,10 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -const assert = require('assert'); -const got = require('got'); -const {execSync} = require('child_process'); -const {GoogleAuth} = require('google-auth-library'); +import assert from 'assert'; +import got from 'got'; +import { execSync } from 'child_process'; +import { GoogleAuth } from 'google-auth-library'; + const auth = new GoogleAuth(); describe('End-to-End Tests', () => { diff --git a/run/markdown-preview/renderer/app.js b/run/markdown-preview/renderer/app.js index a984b37045..8a7b7de408 100644 --- a/run/markdown-preview/renderer/app.js +++ b/run/markdown-preview/renderer/app.js @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -const express = require('express'); -const MarkdownIt = require('markdown-it'); +import express from 'express'; +import MarkdownIt from 'markdown-it'; const app = express(); app.use(express.text()); @@ -40,4 +40,4 @@ app.post('/', (req, res) => { }); // Export for testing purposes. -module.exports = app; +export default app; diff --git a/run/markdown-preview/renderer/index.js b/run/markdown-preview/renderer/index.js index 43782b14ea..b71d291153 100644 --- a/run/markdown-preview/renderer/index.js +++ b/run/markdown-preview/renderer/index.js @@ -12,8 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -const app = require('./app'); -const pkg = require('./package.json'); +import app from './app.js'; +import pkg from './package.json' assert { type: "json" }; + const PORT = parseInt(process.env.PORT) || 8080; app.listen(PORT, () => console.log(`${pkg.name} listening on port ${PORT}`)); diff --git a/run/markdown-preview/renderer/package.json b/run/markdown-preview/renderer/package.json index e8c67c56f9..1a2dc2a974 100644 --- a/run/markdown-preview/renderer/package.json +++ b/run/markdown-preview/renderer/package.json @@ -8,6 +8,7 @@ "type": "git", "url": "https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git" }, + "type": "module", "engines": { "node": ">=16.0.0" }, @@ -24,7 +25,7 @@ "devDependencies": { "c8": "^8.0.0", "google-auth-library": "^9.0.0", - "got": "^11.5.0", + "got": "^14.0.0", "mocha": "^10.0.0", "sinon": "^16.0.0", "supertest": "^6.0.0" From aaf638ad192cfe1e4c314f9a5f9cc3ea9d42a42b Mon Sep 17 00:00:00 2001 From: "pattishin@google.com" Date: Thu, 14 Dec 2023 20:51:47 -0800 Subject: [PATCH 2/3] fix: update options timeout from number to object --- run/markdown-preview/editor/render.js | 4 +++- run/markdown-preview/renderer/package.json | 4 ++-- run/markdown-preview/renderer/test/app.test.js | 12 +++++------- run/markdown-preview/renderer/test/system.test.js | 9 +++++---- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/run/markdown-preview/editor/render.js b/run/markdown-preview/editor/render.js index 1c9b5616f1..40fe6ce4d9 100644 --- a/run/markdown-preview/editor/render.js +++ b/run/markdown-preview/editor/render.js @@ -36,7 +36,9 @@ const renderRequest = async markdown => { 'Content-Type': 'text/plain', }, body: markdown, - timeout: 3000, + timeout: { + request: 10000 + } }; try { diff --git a/run/markdown-preview/renderer/package.json b/run/markdown-preview/renderer/package.json index 1a2dc2a974..ae9132aed8 100644 --- a/run/markdown-preview/renderer/package.json +++ b/run/markdown-preview/renderer/package.json @@ -19,8 +19,8 @@ "system-test": "c8 mocha -p -j 2 test/system.test.js --timeout=360000 --exit" }, "dependencies": { - "express": "^4.17.1", - "markdown-it": "^13.0.0" + "express": "^4.18.2", + "markdown-it": "^14.0.0" }, "devDependencies": { "c8": "^8.0.0", diff --git a/run/markdown-preview/renderer/test/app.test.js b/run/markdown-preview/renderer/test/app.test.js index e8770795a5..921559ab9d 100644 --- a/run/markdown-preview/renderer/test/app.test.js +++ b/run/markdown-preview/renderer/test/app.test.js @@ -12,18 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -'use strict'; - -const assert = require('assert'); -const path = require('path'); -const sinon = require('sinon'); -const supertest = require('supertest'); +import assert from 'assert'; +import path from 'path'; +import sinon from 'sinon'; +import supertest from 'supertest'; let request; describe('Unit Tests', () => { before(() => { - const app = require(path.join(__dirname, '..', 'app')); + import app from path.join(__dirname, '..', 'app'); request = supertest(app); }); diff --git a/run/markdown-preview/renderer/test/system.test.js b/run/markdown-preview/renderer/test/system.test.js index f1ac45557c..5a45622fb0 100644 --- a/run/markdown-preview/renderer/test/system.test.js +++ b/run/markdown-preview/renderer/test/system.test.js @@ -12,10 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -const assert = require('assert'); -const got = require('got'); -const {execSync} = require('child_process'); -const {GoogleAuth} = require('google-auth-library'); +import assert from 'assert'; +import got from 'got'; +import { execSync } from 'child_process'; +import { GoogleAuth } from 'google-auth-library'; + const auth = new GoogleAuth(); describe('End-to-End Tests', () => { From 0129958e94a8994c77f20cca116971ca70727135 Mon Sep 17 00:00:00 2001 From: "pattishin@google.com" Date: Thu, 14 Dec 2023 21:15:30 -0800 Subject: [PATCH 3/3] fix: eslint fixes --- .eslintrc.json | 3 +++ run/markdown-preview/editor/app.js | 6 ++++-- run/markdown-preview/editor/index.js | 4 +++- run/markdown-preview/editor/render.js | 6 +++--- run/markdown-preview/editor/test/app.test.js | 5 +---- run/markdown-preview/editor/test/system.test.js | 4 ++-- run/markdown-preview/renderer/index.js | 4 +++- run/markdown-preview/renderer/test/app.test.js | 3 +-- run/markdown-preview/renderer/test/system.test.js | 4 ++-- 9 files changed, 22 insertions(+), 17 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 932cc6e825..7e5a1dd078 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -10,5 +10,8 @@ "node/no-unpublished-import": ["off"], "node/no-unpublished-require": ["off"], "node/no-unsupported-features/es-syntax": ["off"] + }, + "parserOptions": { + "sourceType": "module" } } diff --git a/run/markdown-preview/editor/app.js b/run/markdown-preview/editor/app.js index 2a60ab88ec..6d44ce5b77 100644 --- a/run/markdown-preview/editor/app.js +++ b/run/markdown-preview/editor/app.js @@ -28,12 +28,14 @@ export const buildRenderedHtml = async () => { const dirname = process.cwd(); try { - markdownDefault = await fs.promises.readFile(dirname + '/templates/markdown.md'); + markdownDefault = await fs.promises.readFile( + dirname + '/templates/markdown.md' + ); compiledTemplate = handlebars.compile( await fs.promises.readFile(dirname + '/templates/index.html', 'utf8') ); renderedHtml = compiledTemplate({default: markdownDefault}); - + return renderedHtml; } catch (err) { throw Error('Error loading template: ', err); diff --git a/run/markdown-preview/editor/index.js b/run/markdown-preview/editor/index.js index b71d291153..51d2cea609 100644 --- a/run/markdown-preview/editor/index.js +++ b/run/markdown-preview/editor/index.js @@ -13,7 +13,9 @@ // limitations under the License. import app from './app.js'; -import pkg from './package.json' assert { type: "json" }; +import fs from 'fs'; + +const pkg = JSON.parse(fs.readFileSync('./package.json')); const PORT = parseInt(process.env.PORT) || 8080; diff --git a/run/markdown-preview/editor/render.js b/run/markdown-preview/editor/render.js index 40fe6ce4d9..0240480e89 100644 --- a/run/markdown-preview/editor/render.js +++ b/run/markdown-preview/editor/render.js @@ -15,7 +15,7 @@ // [START cloudrun_secure_request] // [START run_secure_request] -import { GoogleAuth } from 'google-auth-library'; +import {GoogleAuth} from 'google-auth-library'; import got from 'got'; const auth = new GoogleAuth(); @@ -37,8 +37,8 @@ const renderRequest = async markdown => { }, body: markdown, timeout: { - request: 10000 - } + request: 10000, + }, }; try { diff --git a/run/markdown-preview/editor/test/app.test.js b/run/markdown-preview/editor/test/app.test.js index 19371a799e..e8f14e4fe1 100644 --- a/run/markdown-preview/editor/test/app.test.js +++ b/run/markdown-preview/editor/test/app.test.js @@ -13,13 +13,12 @@ // limitations under the License. import assert from 'assert'; -import path from 'path'; import supertest from 'supertest'; +import {app, buildRenderedHtml} from '../app.js'; describe('Editor unit tests', () => { describe('Initialize app', () => { it('should successfully load the index page', async () => { - import { app } from path.join(__dirname, '..', 'app'); const request = supertest(app); await request.get('/').retry(3).expect(200); }); @@ -29,7 +28,6 @@ describe('Editor unit tests', () => { let template; before(async () => { - import { buildRenderedHtml } from path.join(__dirname, '..', 'app'); template = await buildRenderedHtml(); }); @@ -46,7 +44,6 @@ describe('Integration tests', () => { before(async () => { process.env.EDITOR_UPSTREAM_RENDER_URL = 'https://www.example.com/'; - import { app } from path.join(__dirname, '..', 'app'); request = supertest(app); }); diff --git a/run/markdown-preview/editor/test/system.test.js b/run/markdown-preview/editor/test/system.test.js index bd9a4fbc59..4049de6452 100644 --- a/run/markdown-preview/editor/test/system.test.js +++ b/run/markdown-preview/editor/test/system.test.js @@ -14,8 +14,8 @@ import assert from 'assert'; import got from 'got'; -import { execSync } from 'child_process'; -import { GoogleAuth } from 'google-auth-library'; +import {execSync} from 'child_process'; +import {GoogleAuth} from 'google-auth-library'; const auth = new GoogleAuth(); diff --git a/run/markdown-preview/renderer/index.js b/run/markdown-preview/renderer/index.js index b71d291153..51d2cea609 100644 --- a/run/markdown-preview/renderer/index.js +++ b/run/markdown-preview/renderer/index.js @@ -13,7 +13,9 @@ // limitations under the License. import app from './app.js'; -import pkg from './package.json' assert { type: "json" }; +import fs from 'fs'; + +const pkg = JSON.parse(fs.readFileSync('./package.json')); const PORT = parseInt(process.env.PORT) || 8080; diff --git a/run/markdown-preview/renderer/test/app.test.js b/run/markdown-preview/renderer/test/app.test.js index 921559ab9d..b86ce9769d 100644 --- a/run/markdown-preview/renderer/test/app.test.js +++ b/run/markdown-preview/renderer/test/app.test.js @@ -13,15 +13,14 @@ // limitations under the License. import assert from 'assert'; -import path from 'path'; import sinon from 'sinon'; import supertest from 'supertest'; +import {app} from '../app.js'; let request; describe('Unit Tests', () => { before(() => { - import app from path.join(__dirname, '..', 'app'); request = supertest(app); }); diff --git a/run/markdown-preview/renderer/test/system.test.js b/run/markdown-preview/renderer/test/system.test.js index 5a45622fb0..0a86e132aa 100644 --- a/run/markdown-preview/renderer/test/system.test.js +++ b/run/markdown-preview/renderer/test/system.test.js @@ -14,8 +14,8 @@ import assert from 'assert'; import got from 'got'; -import { execSync } from 'child_process'; -import { GoogleAuth } from 'google-auth-library'; +import {execSync} from 'child_process'; +import {GoogleAuth} from 'google-auth-library'; const auth = new GoogleAuth();