From 18490efa57d50be918d14ab6249dc89bb7e82956 Mon Sep 17 00:00:00 2001 From: Yassine Lakhdar Date: Mon, 22 Feb 2021 14:38:26 -0500 Subject: [PATCH 01/15] renaming vue cli package https://coveord.atlassian.net/browse/CDX-97 --- .../LICENSE | 0 .../README.md | 0 .../generator/index.js | 0 .../generator/template/src/App.vue | 0 .../generator/template/src/Engine.ts | 0 .../generator/template/src/assets/logo.png | Bin .../generator/template/src/components/Facet.vue | 0 .../template/src/components/FacetValue.vue | 0 .../generator/template/src/components/Facets.vue | 0 .../generator/template/src/components/Hero.vue | 0 .../generator/template/src/components/Pager.vue | 0 .../template/src/components/ResultList.vue | 0 .../generator/template/src/components/SearchBox.vue | 0 .../template/src/components/SearchPage.vue | 0 .../generator/template/src/components/Summary.vue | 0 .../generator/template/src/styles/__variables.scss | 0 .../generator/template/vue.config.js | 0 .../index.js | 0 .../logo.png | Bin .../package-lock.json | 0 .../package.json | 2 +- 21 files changed, 1 insertion(+), 1 deletion(-) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/LICENSE (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/README.md (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/generator/index.js (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/generator/template/src/App.vue (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/generator/template/src/Engine.ts (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/generator/template/src/assets/logo.png (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/generator/template/src/components/Facet.vue (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/generator/template/src/components/FacetValue.vue (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/generator/template/src/components/Facets.vue (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/generator/template/src/components/Hero.vue (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/generator/template/src/components/Pager.vue (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/generator/template/src/components/ResultList.vue (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/generator/template/src/components/SearchBox.vue (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/generator/template/src/components/SearchPage.vue (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/generator/template/src/components/Summary.vue (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/generator/template/src/styles/__variables.scss (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/generator/template/vue.config.js (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/index.js (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/logo.png (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/package-lock.json (100%) rename packages/{cli-plugin-vue => vue-cli-plugin-typescript}/package.json (83%) diff --git a/packages/cli-plugin-vue/LICENSE b/packages/vue-cli-plugin-typescript/LICENSE similarity index 100% rename from packages/cli-plugin-vue/LICENSE rename to packages/vue-cli-plugin-typescript/LICENSE diff --git a/packages/cli-plugin-vue/README.md b/packages/vue-cli-plugin-typescript/README.md similarity index 100% rename from packages/cli-plugin-vue/README.md rename to packages/vue-cli-plugin-typescript/README.md diff --git a/packages/cli-plugin-vue/generator/index.js b/packages/vue-cli-plugin-typescript/generator/index.js similarity index 100% rename from packages/cli-plugin-vue/generator/index.js rename to packages/vue-cli-plugin-typescript/generator/index.js diff --git a/packages/cli-plugin-vue/generator/template/src/App.vue b/packages/vue-cli-plugin-typescript/generator/template/src/App.vue similarity index 100% rename from packages/cli-plugin-vue/generator/template/src/App.vue rename to packages/vue-cli-plugin-typescript/generator/template/src/App.vue diff --git a/packages/cli-plugin-vue/generator/template/src/Engine.ts b/packages/vue-cli-plugin-typescript/generator/template/src/Engine.ts similarity index 100% rename from packages/cli-plugin-vue/generator/template/src/Engine.ts rename to packages/vue-cli-plugin-typescript/generator/template/src/Engine.ts diff --git a/packages/cli-plugin-vue/generator/template/src/assets/logo.png b/packages/vue-cli-plugin-typescript/generator/template/src/assets/logo.png similarity index 100% rename from packages/cli-plugin-vue/generator/template/src/assets/logo.png rename to packages/vue-cli-plugin-typescript/generator/template/src/assets/logo.png diff --git a/packages/cli-plugin-vue/generator/template/src/components/Facet.vue b/packages/vue-cli-plugin-typescript/generator/template/src/components/Facet.vue similarity index 100% rename from packages/cli-plugin-vue/generator/template/src/components/Facet.vue rename to packages/vue-cli-plugin-typescript/generator/template/src/components/Facet.vue diff --git a/packages/cli-plugin-vue/generator/template/src/components/FacetValue.vue b/packages/vue-cli-plugin-typescript/generator/template/src/components/FacetValue.vue similarity index 100% rename from packages/cli-plugin-vue/generator/template/src/components/FacetValue.vue rename to packages/vue-cli-plugin-typescript/generator/template/src/components/FacetValue.vue diff --git a/packages/cli-plugin-vue/generator/template/src/components/Facets.vue b/packages/vue-cli-plugin-typescript/generator/template/src/components/Facets.vue similarity index 100% rename from packages/cli-plugin-vue/generator/template/src/components/Facets.vue rename to packages/vue-cli-plugin-typescript/generator/template/src/components/Facets.vue diff --git a/packages/cli-plugin-vue/generator/template/src/components/Hero.vue b/packages/vue-cli-plugin-typescript/generator/template/src/components/Hero.vue similarity index 100% rename from packages/cli-plugin-vue/generator/template/src/components/Hero.vue rename to packages/vue-cli-plugin-typescript/generator/template/src/components/Hero.vue diff --git a/packages/cli-plugin-vue/generator/template/src/components/Pager.vue b/packages/vue-cli-plugin-typescript/generator/template/src/components/Pager.vue similarity index 100% rename from packages/cli-plugin-vue/generator/template/src/components/Pager.vue rename to packages/vue-cli-plugin-typescript/generator/template/src/components/Pager.vue diff --git a/packages/cli-plugin-vue/generator/template/src/components/ResultList.vue b/packages/vue-cli-plugin-typescript/generator/template/src/components/ResultList.vue similarity index 100% rename from packages/cli-plugin-vue/generator/template/src/components/ResultList.vue rename to packages/vue-cli-plugin-typescript/generator/template/src/components/ResultList.vue diff --git a/packages/cli-plugin-vue/generator/template/src/components/SearchBox.vue b/packages/vue-cli-plugin-typescript/generator/template/src/components/SearchBox.vue similarity index 100% rename from packages/cli-plugin-vue/generator/template/src/components/SearchBox.vue rename to packages/vue-cli-plugin-typescript/generator/template/src/components/SearchBox.vue diff --git a/packages/cli-plugin-vue/generator/template/src/components/SearchPage.vue b/packages/vue-cli-plugin-typescript/generator/template/src/components/SearchPage.vue similarity index 100% rename from packages/cli-plugin-vue/generator/template/src/components/SearchPage.vue rename to packages/vue-cli-plugin-typescript/generator/template/src/components/SearchPage.vue diff --git a/packages/cli-plugin-vue/generator/template/src/components/Summary.vue b/packages/vue-cli-plugin-typescript/generator/template/src/components/Summary.vue similarity index 100% rename from packages/cli-plugin-vue/generator/template/src/components/Summary.vue rename to packages/vue-cli-plugin-typescript/generator/template/src/components/Summary.vue diff --git a/packages/cli-plugin-vue/generator/template/src/styles/__variables.scss b/packages/vue-cli-plugin-typescript/generator/template/src/styles/__variables.scss similarity index 100% rename from packages/cli-plugin-vue/generator/template/src/styles/__variables.scss rename to packages/vue-cli-plugin-typescript/generator/template/src/styles/__variables.scss diff --git a/packages/cli-plugin-vue/generator/template/vue.config.js b/packages/vue-cli-plugin-typescript/generator/template/vue.config.js similarity index 100% rename from packages/cli-plugin-vue/generator/template/vue.config.js rename to packages/vue-cli-plugin-typescript/generator/template/vue.config.js diff --git a/packages/cli-plugin-vue/index.js b/packages/vue-cli-plugin-typescript/index.js similarity index 100% rename from packages/cli-plugin-vue/index.js rename to packages/vue-cli-plugin-typescript/index.js diff --git a/packages/cli-plugin-vue/logo.png b/packages/vue-cli-plugin-typescript/logo.png similarity index 100% rename from packages/cli-plugin-vue/logo.png rename to packages/vue-cli-plugin-typescript/logo.png diff --git a/packages/cli-plugin-vue/package-lock.json b/packages/vue-cli-plugin-typescript/package-lock.json similarity index 100% rename from packages/cli-plugin-vue/package-lock.json rename to packages/vue-cli-plugin-typescript/package-lock.json diff --git a/packages/cli-plugin-vue/package.json b/packages/vue-cli-plugin-typescript/package.json similarity index 83% rename from packages/cli-plugin-vue/package.json rename to packages/vue-cli-plugin-typescript/package.json index e00bae7b95..7328560297 100644 --- a/packages/cli-plugin-vue/package.json +++ b/packages/vue-cli-plugin-typescript/package.json @@ -1,5 +1,5 @@ { - "name": "@coveo/cli-plugin-vue", + "name": "@coveo/vue-cli-plugin-typescript", "version": "0.0.0", "description": "Vue-cli 3 plugin for adding Coveo Headless support", "main": "index.js", From 264057b8972bac20eceb797b35e9d53613531f56 Mon Sep 17 00:00:00 2001 From: Yassine Lakhdar Date: Mon, 22 Feb 2021 14:39:33 -0500 Subject: [PATCH 02/15] update dependencies https://coveord.atlassian.net/browse/CDX-97 --- packages/cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index cfefe7f8d5..449ba3d3bf 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -22,7 +22,7 @@ "isomorphic-form-data": "^2.0.0", "keytar": "^7.3.0", "tslib": "^1", - "@coveo/cli-plugin-vue": "^0.0.0" + "@coveo/vue-cli-plugin-typescript": "^0.0.0" }, "devDependencies": { "@oclif/dev-cli": "^1", From 9958c8fe30528131bbc0d6c5bfc8945c4022d12d Mon Sep 17 00:00:00 2001 From: Yassine Lakhdar Date: Wed, 24 Feb 2021 17:02:50 -0500 Subject: [PATCH 03/15] wrap headless engine in mixin https://coveord.atlassian.net/browse/CDX-39 --- .../generator/template/src/Engine.ts | 8 ---- .../generator/template/src/EngineService.ts | 47 +++++++++++++++++++ 2 files changed, 47 insertions(+), 8 deletions(-) delete mode 100644 packages/vue-cli-plugin-typescript/generator/template/src/Engine.ts create mode 100644 packages/vue-cli-plugin-typescript/generator/template/src/EngineService.ts diff --git a/packages/vue-cli-plugin-typescript/generator/template/src/Engine.ts b/packages/vue-cli-plugin-typescript/generator/template/src/Engine.ts deleted file mode 100644 index d7d5eb928d..0000000000 --- a/packages/vue-cli-plugin-typescript/generator/template/src/Engine.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {HeadlessEngine, searchAppReducers} from '@coveo/headless'; - -const engine = new HeadlessEngine({ - configuration: HeadlessEngine.getSampleConfiguration(), - reducers: searchAppReducers, -}); - -export default engine; diff --git a/packages/vue-cli-plugin-typescript/generator/template/src/EngineService.ts b/packages/vue-cli-plugin-typescript/generator/template/src/EngineService.ts new file mode 100644 index 0000000000..49e9d7e5ae --- /dev/null +++ b/packages/vue-cli-plugin-typescript/generator/template/src/EngineService.ts @@ -0,0 +1,47 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion */ +import {HeadlessEngine, searchAppReducers} from '@coveo/headless'; + +declare module 'vue/types/vue' { + interface Vue { + engine: typeof HeadlessEngine.prototype; + } +} + +/** + * A service that instantiates the global headless engine to be shared across the application. + * This class is meant to be used as a global mixin (see https://vuejs.org/v2/guide/mixins.html#Global-Mixin) + */ +export class EngineService { + private engine: typeof HeadlessEngine.prototype; + + /** + * Creates an instance of EngineService. + * @param {string} token The access token to use to authenticate requests against the Coveo Cloud endpoints. + */ + constructor(token: string) { + this.engine = new HeadlessEngine({ + configuration: { + platformUrl: process.env.VUE_APP_PLATFORM_URL, + organizationId: process.env.VUE_APP_ORGANIZATION_ID!, + accessToken: token, + renewAccessToken: async () => { + const res = await fetch(process.env.VUE_APP_TOKEN_ENDPOINT); + const {token} = await res.json(); + return token; + }, + }, + reducers: searchAppReducers, + }); + } + + /** + * Returns the mixin containing the Coveo headless engine. + */ + public get mixin() { + return { + data: () => ({ + engine: this.engine, + }), + }; + } +} From 215640bb60ec98e254d378e170411ccf8d79a423 Mon Sep 17 00:00:00 2001 From: Yassine Lakhdar Date: Wed, 24 Feb 2021 17:03:38 -0500 Subject: [PATCH 04/15] target headless engine mixin from route guard https://coveord.atlassian.net/browse/CDX-39 --- .../generator/template/src/router/index.ts | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 packages/vue-cli-plugin-typescript/generator/template/src/router/index.ts diff --git a/packages/vue-cli-plugin-typescript/generator/template/src/router/index.ts b/packages/vue-cli-plugin-typescript/generator/template/src/router/index.ts new file mode 100644 index 0000000000..7215f7ceed --- /dev/null +++ b/packages/vue-cli-plugin-typescript/generator/template/src/router/index.ts @@ -0,0 +1,34 @@ +import Vue from 'vue'; +import VueRouter, {RouteConfig, Route, NavigationGuardNext} from 'vue-router'; +import Home from '../views/Home.vue'; +import {EngineService} from '@/EngineService'; + +Vue.use(VueRouter); + +const routes: Array = [ + { + path: '/', + name: 'Home', + component: Home, + beforeEnter: async ( + _to: Route, + _from: Route, + next: NavigationGuardNext + ) => { + const res = await fetch(process.env.VUE_APP_TOKEN_ENDPOINT); + const {token} = await res.json(); + const engineService = new EngineService(token); + // Adding Coveo Headless engine as a global mixin so it can be available to all components + Vue.mixin(engineService.mixin); + next(); + }, + }, +]; + +const router = new VueRouter({ + mode: 'history', + base: process.env.BASE_URL, + routes, +}); + +export default router; From 8ab23e722cbddc9738d45d9911cff21219c0e7a8 Mon Sep 17 00:00:00 2001 From: Yassine Lakhdar Date: Wed, 24 Feb 2021 17:04:08 -0500 Subject: [PATCH 05/15] add headless engine mixin to all components https://coveord.atlassian.net/browse/CDX-39 --- .../generator/template/src/App.vue | 31 +---------------- .../template/src/components/Facet.vue | 3 +- .../template/src/components/Pager.vue | 5 ++- .../template/src/components/ResultList.vue | 5 ++- .../template/src/components/SearchBox.vue | 5 ++- .../template/src/components/SearchPage.vue | 3 +- .../template/src/components/Summary.vue | 3 +- .../generator/template/src/views/Home.vue | 33 +++++++++++++++++++ 8 files changed, 43 insertions(+), 45 deletions(-) create mode 100644 packages/vue-cli-plugin-typescript/generator/template/src/views/Home.vue diff --git a/packages/vue-cli-plugin-typescript/generator/template/src/App.vue b/packages/vue-cli-plugin-typescript/generator/template/src/App.vue index 69a228e8dc..98240aef81 100644 --- a/packages/vue-cli-plugin-typescript/generator/template/src/App.vue +++ b/packages/vue-cli-plugin-typescript/generator/template/src/App.vue @@ -1,32 +1,3 @@ - - - - diff --git a/packages/vue-cli-plugin-typescript/generator/template/src/components/Facet.vue b/packages/vue-cli-plugin-typescript/generator/template/src/components/Facet.vue index 55a2f259f5..1c320820ba 100644 --- a/packages/vue-cli-plugin-typescript/generator/template/src/components/Facet.vue +++ b/packages/vue-cli-plugin-typescript/generator/template/src/components/Facet.vue @@ -16,7 +16,6 @@ + + From 701057bbfd700fc8d06c4dfff2439e9baf4c33e3 Mon Sep 17 00:00:00 2001 From: Yassine Lakhdar Date: Wed, 24 Feb 2021 17:05:09 -0500 Subject: [PATCH 06/15] update typescript preset with new project config https://coveord.atlassian.net/browse/CDX-39 --- .../commands/ui/create/presets/typescript-preset.json | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/cli/src/commands/ui/create/presets/typescript-preset.json b/packages/cli/src/commands/ui/create/presets/typescript-preset.json index 96d79ea399..21481c42ba 100644 --- a/packages/cli/src/commands/ui/create/presets/typescript-preset.json +++ b/packages/cli/src/commands/ui/create/presets/typescript-preset.json @@ -1,15 +1,17 @@ { "useConfigFiles": true, "plugins": { - "@vue/cli-plugin-babel": {}, "@vue/cli-plugin-typescript": { - "classComponent": true, - "useTsWithBabel": true + "classComponent": true + }, + "@vue/cli-plugin-router": { + "historyMode": true }, "@vue/cli-plugin-eslint": { "config": "standard", - "lintOn": ["save", "commit"] + "lintOn": ["commit"] } }, + "cssPreprocessor": "node-sass", "vueVersion": "2" } From 71b41dd47e873585198aa9f359ffd3702e5a106c Mon Sep 17 00:00:00 2001 From: Yassine Lakhdar Date: Wed, 24 Feb 2021 17:05:41 -0500 Subject: [PATCH 07/15] update generator with new instructions https://coveord.atlassian.net/browse/CDX-39 --- .../vue-cli-plugin-typescript/generator/index.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/vue-cli-plugin-typescript/generator/index.js b/packages/vue-cli-plugin-typescript/generator/index.js index f6e9d669ff..9ed9baaf5e 100644 --- a/packages/vue-cli-plugin-typescript/generator/index.js +++ b/packages/vue-cli-plugin-typescript/generator/index.js @@ -1,18 +1,21 @@ -// eslint-disable-next-line no-unused-vars module.exports = (api, options, rootOptions) => { api.extendPackage({ + scripts: { + postinstall: 'node ./scripts/setup-server.js', + start: 'concurrently --raw "npm run start-server" "npm run serve"', + 'start-server': 'node ./scripts/start-server.js', + }, dependencies: { '@coveo/headless': '^0.1.0', + '@coveo/search-token-server': + 'file:/Users/ylakhdar/Repos/coveo-cli/packages/search-token-server/search-token-server-0.0.0.tgz', buefy: '^0.9.4', - }, - devDependencies: { - 'node-sass': '^5.0.0', - 'sass-loader': '^10.1.1', + concurrently: '^5.3.0', }, }); api.render('./template', { - // TODO: inject the appropriate file type + ...rootOptions, ...options, }); }; From b879421a8476487bf31b31a374a7356b846f1592 Mon Sep 17 00:00:00 2001 From: Yassine Lakhdar Date: Wed, 24 Feb 2021 17:06:32 -0500 Subject: [PATCH 08/15] additional template files https://coveord.atlassian.net/browse/CDX-39 --- .../generator/template/README.md | 29 ++++++++++++++ .../generator/template/_env | 9 +++++ .../generator/template/_env.example | 22 +++++++++++ .../template/scripts/setup-server.js | 38 ++++++++++++++++++ .../template/scripts/start-server.js | 39 +++++++++++++++++++ .../generator/template/vue.config.js | 9 ++--- 6 files changed, 140 insertions(+), 6 deletions(-) create mode 100644 packages/vue-cli-plugin-typescript/generator/template/README.md create mode 100644 packages/vue-cli-plugin-typescript/generator/template/_env create mode 100644 packages/vue-cli-plugin-typescript/generator/template/_env.example create mode 100644 packages/vue-cli-plugin-typescript/generator/template/scripts/setup-server.js create mode 100644 packages/vue-cli-plugin-typescript/generator/template/scripts/start-server.js diff --git a/packages/vue-cli-plugin-typescript/generator/template/README.md b/packages/vue-cli-plugin-typescript/generator/template/README.md new file mode 100644 index 0000000000..1f14ac3625 --- /dev/null +++ b/packages/vue-cli-plugin-typescript/generator/template/README.md @@ -0,0 +1,29 @@ +# <%- rootOptions.projectName %> + +## Project setup + +``` +npm install +``` + +### Compiles and hot-reloads for development + +``` +npm start +``` + +### Compiles and minifies for production + +``` +npm run build +``` + +### Lints and fixes files + +``` +npm run lint +``` + +### Customize configuration + +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/packages/vue-cli-plugin-typescript/generator/template/_env b/packages/vue-cli-plugin-typescript/generator/template/_env new file mode 100644 index 0000000000..b00f676b07 --- /dev/null +++ b/packages/vue-cli-plugin-typescript/generator/template/_env @@ -0,0 +1,9 @@ +VUE_APP_PLATFORM_URL=<%- options.platformUrl -%> + +VUE_APP_ORGANIZATION_ID=<%- options.orgId -%> + +VUE_APP_API_KEY=<%- options.apiKey -%> + +VUE_APP_USER_EMAIL=<%- options.user -%> + +VUE_APP_TOKEN_ENDPOINT="/token" \ No newline at end of file diff --git a/packages/vue-cli-plugin-typescript/generator/template/_env.example b/packages/vue-cli-plugin-typescript/generator/template/_env.example new file mode 100644 index 0000000000..8771dac007 --- /dev/null +++ b/packages/vue-cli-plugin-typescript/generator/template/_env.example @@ -0,0 +1,22 @@ +# The Plaform URL to use. +# See https://docs.coveo.com/en/2976/coveo-solutions/deployment-regions-and-strategies +VUE_APP_PLATFORM_URL=https://platform.cloud.coveo.com + +# The unique identifier of the organization in which to generate a search token. +# Example: VUE_APP_ORGANIZATION_ID=mycoveoorganizationg8tp8wu3. +# See https://docs.coveo.com/en/148/manage-an-organization/retrieve-the-organization-id +VUE_APP_ORGANIZATION_ID= + +# An API key granting the impersonate privilege in your organization. +# The API key should have the impersonate privilege. +# See https://docs.coveo.com/en/1718/manage-an-organization/manage-api-keys#add-an-api-key +VUE_APP_API_KEY= + +# The name of the security identity to impersonate. +# Example: VUE_APP_USER_EMAIL="alicesmith@example.com" +# See https://docs.coveo.com/en/56/#name-string-required. +VUE_APP_USER_EMAIL= + +# The path to the server returning Coveo search tokens. +# By default, it targets server on the same host. +VUE_APP_TOKEN_ENDPOINT="/token" \ No newline at end of file diff --git a/packages/vue-cli-plugin-typescript/generator/template/scripts/setup-server.js b/packages/vue-cli-plugin-typescript/generator/template/scripts/setup-server.js new file mode 100644 index 0000000000..3839ad562f --- /dev/null +++ b/packages/vue-cli-plugin-typescript/generator/template/scripts/setup-server.js @@ -0,0 +1,38 @@ +const {spawnSync} = require('child_process'); +const {copySync} = require('fs-extra'); +const {sep, resolve} = require('path'); + +function installSearchTokenServerDependencies() { + const child = spawnSync('npm', ['install'], { + stdio: 'inherit', + cwd: resolve('server'), + }); + if (child.status !== 0) { + process.exit(child.status); + } +} + +function isNodeModule(path) { + return path.split(sep).indexOf('node_modules') !== -1; +} + +function isEnvFile(path) { + return path.split(sep).indexOf('.env.example') !== -1; +} + +function copySearchTokenServerToRoot() { + copySync( + resolve('node_modules', '@coveo', 'search-token-server'), + resolve('server'), + { + filter: (src, dest) => !isNodeModule(dest) && !isEnvFile(dest), + } + ); +} + +function main() { + copySearchTokenServerToRoot(); + installSearchTokenServerDependencies(); +} + +main(); diff --git a/packages/vue-cli-plugin-typescript/generator/template/scripts/start-server.js b/packages/vue-cli-plugin-typescript/generator/template/scripts/start-server.js new file mode 100644 index 0000000000..4726660782 --- /dev/null +++ b/packages/vue-cli-plugin-typescript/generator/template/scripts/start-server.js @@ -0,0 +1,39 @@ +const {spawnSync} = require('child_process'); +const {resolve, join} = require('path'); +const {config} = require('dotenv'); +config(); + +function getEnvVariables() { + // TODO: CDX-99: assign port dynamically + // The Vue CLi has a --proxy flag. + const searchTokenServerPort = 4000; + var envVars = Object.assign( + { + SERVER_PORT: searchTokenServerPort, + API_KEY: process.env.VUE_APP_API_KEY, + ORGANIZATION_ID: process.env.VUE_APP_ORGANIZATION_ID, + PLATFORM_URL: process.env.VUE_APP_PLATFORM_URL, + USER_EMAIL: process.env.VUE_APP_USER_EMAIL, + }, + process.env + ); + return envVars; +} + +function startServer() { + const serverPath = join(process.cwd(), 'server'); + const child = spawnSync('npm', ['run', 'start'], { + stdio: 'inherit', + env: getEnvVariables(), + cwd: resolve(serverPath), + }); + if (child.status !== 0) { + process.exit(child.status); + } +} + +function main() { + startServer(); +} + +main(); diff --git a/packages/vue-cli-plugin-typescript/generator/template/vue.config.js b/packages/vue-cli-plugin-typescript/generator/template/vue.config.js index b0b98cb06e..6491582084 100644 --- a/packages/vue-cli-plugin-typescript/generator/template/vue.config.js +++ b/packages/vue-cli-plugin-typescript/generator/template/vue.config.js @@ -1,9 +1,6 @@ module.exports = { - css: { - loaderOptions: { - sass: { - additionalData: `@import "~@/styles/_variables.scss";`, - }, - }, + // CDX-99: assign port dynamically + devServer: { + proxy: 'http://localhost:4000', }, }; From 0e6f7af405513efeb55d4f72cf0f7a46104f731c Mon Sep 17 00:00:00 2001 From: Yassine Lakhdar Date: Wed, 24 Feb 2021 17:35:08 -0500 Subject: [PATCH 09/15] add arguments to vue command https://coveord.atlassian.net/browse/CDX-39 --- packages/cli/src/commands/ui/create/vue.ts | 65 ++++++++++++---------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/packages/cli/src/commands/ui/create/vue.ts b/packages/cli/src/commands/ui/create/vue.ts index 21aac96b74..9d6476fe1c 100644 --- a/packages/cli/src/commands/ui/create/vue.ts +++ b/packages/cli/src/commands/ui/create/vue.ts @@ -1,9 +1,13 @@ import {Command, flags} from '@oclif/command'; -import {dirname, resolve} from 'path'; +import {resolve} from 'path'; import { buildAnalyticsFailureHook, buildAnalyticsSuccessHook, } from '../../../hooks/analytics/analytics'; +import {Config} from '../../../lib/config/config'; +import AuthenticationRequired from '../../../lib/decorators/authenticationRequired'; +import {Storage} from '../../../lib/oauth/storage'; +import {platformUrl} from '../../../lib/platform/environment'; import {spawnProcess} from '../../../lib/utils/process'; export default class Vue extends Command { @@ -19,7 +23,6 @@ export default class Vue extends Command { 'If not specified, the default TypeScript preset will be taken.', 'For more information about Vue CLI presets, please consult https://cli.vuejs.org/guide/plugins-and-presets.html#presets', ].join('\n'), - // default: TODO: add default preset once it is available in npm https://coveord.atlassian.net/browse/CDX-39 }), }; @@ -32,6 +35,7 @@ export default class Vue extends Command { {name: 'name', description: 'application name', required: true}, ]; + @AuthenticationRequired() async run() { const {args, flags} = this.parse(Vue); @@ -45,9 +49,7 @@ export default class Vue extends Command { } } await this.createProject(args.name, preset); - await this.installPlugin(args.name); await this.invokePlugin(args.name); - this.startServer(args.name); await this.config.runHook( 'analytics', buildAnalyticsSuccessHook(this, flags) @@ -63,43 +65,38 @@ export default class Vue extends Command { throw err; } - private installPlugin(applicationName: string) { - // TODO: DELETE THIS METHOD ONCE THE PLUGIN IS PUBLISHED AND PART OF THE PRESET - // CDX-39 - // Once the coveo plugin is published to npm, simply include it in the preset typescript-preset.json - // This will prevent from running `2 npm install` commands (one by @vue/cli, one for the plugin) - const pathToPlugin = dirname(require.resolve('vue-cli-plugin-coveo')); - return spawnProcess( - 'npm', - ['install', '--save-dev', `file:${pathToPlugin}`], - { - cwd: applicationName, - } - ); - } + private async invokePlugin(applicationName: string) { + const cfg = await this.configuration.get(); + const storage = await this.storage.get(); - private invokePlugin(applicationName: string) { - return this.runVueCliCommand(['invoke', 'vue-cli-plugin-coveo'], { + const cliArgs = [ + 'invoke', + // '@coveo/typescript', + '@coveo/vue-cli-plugin-typescript', + '--orgId', + cfg.organization, + '--apiKey', + storage.accessToken!, + '--platformUrl', + platformUrl({environment: cfg.environment}), + // TODO: CDX-91 Extract user email from oauth flow + '--user', + 'foo@acme.com', + ]; + + return this.runVueCliCommand(cliArgs, { cwd: applicationName, }); } - private startServer(applicationName: string) { - // TODO: DELETE THIS METHOD ONCE THE PLUGIN IS PUBLISHED AND PART OF THE PRESET - // The @vue/cli already logs instructions once the installation completes - this.log(`Successfully created project ${applicationName}.`); - this.log('Get started with the following commands:\n'); - - this.log('$ cd ${applicationName}'); - this.log('$ yarn serve'); - } - private createProject(name: string, preset: {}) { return this.runVueCliCommand([ 'create', name, '--inlinePreset', JSON.stringify(preset), + '--skipGetStarted', + '--bare', ]); } @@ -107,4 +104,12 @@ export default class Vue extends Command { const executable = require.resolve('@vue/cli/bin/vue.js'); return spawnProcess(executable, args, options); } + + private get configuration() { + return new Config(this.config.configDir, this.error); + } + + private get storage() { + return new Storage(); + } } From 35d5d66664e9b3cfe9ca4d6b43a175474785ce92 Mon Sep 17 00:00:00 2001 From: Yassine Lakhdar Date: Wed, 24 Feb 2021 17:48:29 -0500 Subject: [PATCH 10/15] fix merge conflicts https://coveord.atlassian.net/browse/CDX-39 --- packages/cli/src/commands/ui/create/vue.ts | 1 - .../vue-cli-plugin-typescript/generator/index.js | 15 +++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/cli/src/commands/ui/create/vue.ts b/packages/cli/src/commands/ui/create/vue.ts index 9d6476fe1c..6ada6a66a0 100644 --- a/packages/cli/src/commands/ui/create/vue.ts +++ b/packages/cli/src/commands/ui/create/vue.ts @@ -71,7 +71,6 @@ export default class Vue extends Command { const cliArgs = [ 'invoke', - // '@coveo/typescript', '@coveo/vue-cli-plugin-typescript', '--orgId', cfg.organization, diff --git a/packages/vue-cli-plugin-typescript/generator/index.js b/packages/vue-cli-plugin-typescript/generator/index.js index f6e9d669ff..9ed9baaf5e 100644 --- a/packages/vue-cli-plugin-typescript/generator/index.js +++ b/packages/vue-cli-plugin-typescript/generator/index.js @@ -1,18 +1,21 @@ -// eslint-disable-next-line no-unused-vars module.exports = (api, options, rootOptions) => { api.extendPackage({ + scripts: { + postinstall: 'node ./scripts/setup-server.js', + start: 'concurrently --raw "npm run start-server" "npm run serve"', + 'start-server': 'node ./scripts/start-server.js', + }, dependencies: { '@coveo/headless': '^0.1.0', + '@coveo/search-token-server': + 'file:/Users/ylakhdar/Repos/coveo-cli/packages/search-token-server/search-token-server-0.0.0.tgz', buefy: '^0.9.4', - }, - devDependencies: { - 'node-sass': '^5.0.0', - 'sass-loader': '^10.1.1', + concurrently: '^5.3.0', }, }); api.render('./template', { - // TODO: inject the appropriate file type + ...rootOptions, ...options, }); }; From f8d97639499752038a307e39d545a24c7da11a77 Mon Sep 17 00:00:00 2001 From: Yassine Lakhdar Date: Thu, 25 Feb 2021 10:25:54 -0500 Subject: [PATCH 11/15] fix dependencies https://coveord.atlassian.net/browse/CDX-40 --- packages/vue-cli-plugin-typescript/generator/index.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/vue-cli-plugin-typescript/generator/index.js b/packages/vue-cli-plugin-typescript/generator/index.js index 9ed9baaf5e..20450812af 100644 --- a/packages/vue-cli-plugin-typescript/generator/index.js +++ b/packages/vue-cli-plugin-typescript/generator/index.js @@ -6,9 +6,8 @@ module.exports = (api, options, rootOptions) => { 'start-server': 'node ./scripts/start-server.js', }, dependencies: { - '@coveo/headless': '^0.1.0', - '@coveo/search-token-server': - 'file:/Users/ylakhdar/Repos/coveo-cli/packages/search-token-server/search-token-server-0.0.0.tgz', + '@coveo/headless': 'latest', + '@coveo/search-token-server': 'latest', buefy: '^0.9.4', concurrently: '^5.3.0', }, From 4500e9fbf36d39c11e13923548fadc51d9289e19 Mon Sep 17 00:00:00 2001 From: Yassine Lakhdar Date: Thu, 25 Feb 2021 12:47:35 -0500 Subject: [PATCH 12/15] add env variable check https://coveord.atlassian.net/browse/CDX-40 --- .../generator/template/utils/envUtils.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 packages/vue-cli-plugin-typescript/generator/template/utils/envUtils.ts diff --git a/packages/vue-cli-plugin-typescript/generator/template/utils/envUtils.ts b/packages/vue-cli-plugin-typescript/generator/template/utils/envUtils.ts new file mode 100644 index 0000000000..fb4383e45b --- /dev/null +++ b/packages/vue-cli-plugin-typescript/generator/template/utils/envUtils.ts @@ -0,0 +1,17 @@ +/** + * Making sure all environment variables are defined + * + * @returns true if the .env file is valid. false otherwise. + */ +export function isEnvValid() { + const variables = [ + 'VUE_APP_PLATFORM_URL', + 'VUE_APP_ORGANIZATION_ID', + 'VUE_APP_API_KEY', + 'VUE_APP_USER_EMAIL', + 'VUE_APP_TOKEN_ENDPOINT', + ]; + const reducer = (previousValue: boolean, currentValue: string) => + previousValue && process.env[currentValue] !== undefined; + return variables.reduce(reducer, true); +} From 6b9dadf8b6ef2327f84c67178b1bbb896b7e33d1 Mon Sep 17 00:00:00 2001 From: Yassine Lakhdar Date: Thu, 25 Feb 2021 12:47:59 -0500 Subject: [PATCH 13/15] redirect to error page if invalid env https://coveord.atlassian.net/browse/CDX-40 --- .../generator/template/README.md | 6 ++-- .../generator/template/src/views/Error.vue | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 packages/vue-cli-plugin-typescript/generator/template/src/views/Error.vue diff --git a/packages/vue-cli-plugin-typescript/generator/template/README.md b/packages/vue-cli-plugin-typescript/generator/template/README.md index 1f14ac3625..dfe59e48b4 100644 --- a/packages/vue-cli-plugin-typescript/generator/template/README.md +++ b/packages/vue-cli-plugin-typescript/generator/template/README.md @@ -1,10 +1,8 @@ # <%- rootOptions.projectName %> -## Project setup +### Setup environment -``` -npm install -``` +You should have an `.env` file at the root of this project. You can use `.env.example` as starting point and make sure to replace all placeholder variables `<...>` by the proper information for your organization. ### Compiles and hot-reloads for development diff --git a/packages/vue-cli-plugin-typescript/generator/template/src/views/Error.vue b/packages/vue-cli-plugin-typescript/generator/template/src/views/Error.vue new file mode 100644 index 0000000000..a350e5d7b7 --- /dev/null +++ b/packages/vue-cli-plugin-typescript/generator/template/src/views/Error.vue @@ -0,0 +1,32 @@ + + + + + From 32c3469a8b1bcb7c91e535e6a78b258f39305494 Mon Sep 17 00:00:00 2001 From: Yassine Lakhdar Date: Thu, 25 Feb 2021 12:48:42 -0500 Subject: [PATCH 14/15] remove !important https://coveord.atlassian.net/browse/CDX-40 --- .../generator/template/src/views/Home.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vue-cli-plugin-typescript/generator/template/src/views/Home.vue b/packages/vue-cli-plugin-typescript/generator/template/src/views/Home.vue index 07112a2b40..5dd4b86ac6 100644 --- a/packages/vue-cli-plugin-typescript/generator/template/src/views/Home.vue +++ b/packages/vue-cli-plugin-typescript/generator/template/src/views/Home.vue @@ -28,6 +28,6 @@ export default { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; - color: $primary !important; + color: $primary; } From bcb28fe5a3d664dc27fffdbdf99d444b7f5a8eb8 Mon Sep 17 00:00:00 2001 From: Yassine Lakhdar Date: Thu, 25 Feb 2021 12:51:05 -0500 Subject: [PATCH 15/15] typo https://coveord.atlassian.net/browse/CDX-40 --- .../generator/template/src/views/Error.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vue-cli-plugin-typescript/generator/template/src/views/Error.vue b/packages/vue-cli-plugin-typescript/generator/template/src/views/Error.vue index a350e5d7b7..6c4f1f4a33 100644 --- a/packages/vue-cli-plugin-typescript/generator/template/src/views/Error.vue +++ b/packages/vue-cli-plugin-typescript/generator/template/src/views/Error.vue @@ -5,7 +5,7 @@

Invalid Environment variables

- You should have an .env file at the root of this + You should have a valid .env file at the root of this project. You can use .env.example as starting point and make sure to replace all placeholder variables <...> by the proper information for your