From 0f8ea1170bc5b7d61d3a43a22cfbfeba1c4da161 Mon Sep 17 00:00:00 2001 From: Eric Simons Date: Tue, 12 May 2020 15:32:00 -0700 Subject: [PATCH] Enable custom origins for SDK (#1236) * enable custom origins * bump version Co-authored-by: Eric Simons --- sdk/package-lock.json | 12 +++++++----- sdk/package.json | 4 ++-- sdk/src/generate.ts | 7 +++---- sdk/src/helpers.ts | 5 +++++ sdk/src/index.ts | 10 +++++----- sdk/src/interfaces.ts | 1 + 6 files changed, 23 insertions(+), 16 deletions(-) diff --git a/sdk/package-lock.json b/sdk/package-lock.json index b19dcb19..44dfe027 100644 --- a/sdk/package-lock.json +++ b/sdk/package-lock.json @@ -1,6 +1,6 @@ { "name": "@stackblitz/sdk", - "version": "1.2.0", + "version": "1.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -111,6 +111,7 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -1373,7 +1374,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true + "dev": true, + "optional": true }, "macaddress": { "version": "0.2.8", @@ -4246,9 +4248,9 @@ "dev": true }, "typescript": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.2.tgz", - "integrity": "sha512-p5TCYZDAO0m4G344hD+wx/LATebLWZNkkh2asWUFqSsD2OrDNhbAHuSjobrmsUmdzjJjEeZVU9g1h3O6vpstnw==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", "dev": true }, "uglify-es": { diff --git a/sdk/package.json b/sdk/package.json index 0e5c83e4..c58ccfb8 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@stackblitz/sdk", - "version": "1.3.0", + "version": "1.4.0", "description": "", "main": "./bundles/sdk.js", "module": "./bundles/sdk.m.js", @@ -23,6 +23,6 @@ "devDependencies": { "microbundle": "^0.3.1", "typedoc": "^0.10.0", - "typescript": "^2.6.2" + "typescript": "^2.9.2" } } diff --git a/sdk/src/generate.ts b/sdk/src/generate.ts index b58ff673..cb306967 100644 --- a/sdk/src/generate.ts +++ b/sdk/src/generate.ts @@ -1,8 +1,7 @@ import { Project, EmbedOptions, OpenOptions } from './interfaces'; -import { buildProjectQuery, openTarget } from './helpers'; +import { buildProjectQuery, openTarget, getOrigin } from './helpers'; const SUPPORTED_TEMPLATES = ['typescript', 'create-react-app', 'angular-cli', 'javascript', 'polymer']; -const RUN_URL = 'https://stackblitz.com/run'; function createHiddenInput(name: string, value: string){ const input = document.createElement('input'); @@ -49,7 +48,7 @@ function createProjectForm(project: Project){ export function createProjectFrameHTML(project: Project, options?: EmbedOptions){ const form = createProjectForm(project); - form.action = RUN_URL + buildProjectQuery(options); + form.action = `${getOrigin(options)}/run` + buildProjectQuery(options); form.id = 'sb'; const html = `${ @@ -61,7 +60,7 @@ export function createProjectFrameHTML(project: Project, options?: EmbedOptions) export function openProject(project: Project, options?: OpenOptions){ const form = createProjectForm(project); - form.action = RUN_URL + buildProjectQuery(options); + form.action = `${getOrigin(options)}/run` + buildProjectQuery(options); form.target = openTarget(options); document.body.appendChild(form); diff --git a/sdk/src/helpers.ts b/sdk/src/helpers.ts index b2bae170..6bb4ce12 100644 --- a/sdk/src/helpers.ts +++ b/sdk/src/helpers.ts @@ -1,5 +1,10 @@ import { ProjectOptions, EmbedOptions, OpenOptions } from './interfaces'; +export function getOrigin(options?: ProjectOptions | OpenOptions | EmbedOptions) { + if (options && options.origin) return options.origin; + return 'https://stackblitz.com'; +} + const DEFAULT_FRAME_HEIGHT = '300'; export function genID() { diff --git a/sdk/src/index.ts b/sdk/src/index.ts index cf4f52c2..b483c1ff 100644 --- a/sdk/src/index.ts +++ b/sdk/src/index.ts @@ -2,7 +2,7 @@ import { VM } from './VM'; import { Project, OpenOptions, EmbedOptions } from './interfaces'; import { Connection, getConnection } from './connection'; import { openProject, createProjectFrameHTML } from './generate'; -import { replaceAndEmbed, buildProjectQuery, elementFromElementOrId, openTarget } from './helpers'; +import { replaceAndEmbed, buildProjectQuery, elementFromElementOrId, openTarget, getOrigin } from './helpers'; const StackBlitzSDK = { connect: (frameEl: HTMLIFrameElement) => { @@ -26,20 +26,20 @@ const StackBlitzSDK = { // Open in new tab methods openGithubProject: (repoSlug: string, options?: OpenOptions) => { - window.open(`https://stackblitz.com/github/${repoSlug}${buildProjectQuery(options)}`, openTarget(options)); + window.open(`${getOrigin(options)}/github/${repoSlug}${buildProjectQuery(options)}`, openTarget(options)); }, openProject: (project: Project, options?: OpenOptions) => { openProject(project, options); }, openProjectId: (projectId: string, options?: OpenOptions) => { - window.open(`https://stackblitz.com/edit/${projectId}${buildProjectQuery(options)}`, openTarget(options)); + window.open(`${getOrigin(options)}/edit/${projectId}${buildProjectQuery(options)}`, openTarget(options)); }, // Embed on page methods embedGithubProject: (elementOrId: string | HTMLElement, repoSlug: string, options?: EmbedOptions) => { const element = elementFromElementOrId(elementOrId); const frame = document.createElement('iframe'); - frame.src = `https://stackblitz.com/github/${repoSlug}${buildProjectQuery(options)}`; + frame.src = `${getOrigin(options)}/github/${repoSlug}${buildProjectQuery(options)}`; replaceAndEmbed(element, frame, options); @@ -60,7 +60,7 @@ const StackBlitzSDK = { embedProjectId: (elementOrId: string | HTMLElement, projectId: string, options?: EmbedOptions) => { const element = elementFromElementOrId(elementOrId); const frame = document.createElement('iframe'); - frame.src = `https://stackblitz.com/edit/${projectId}${buildProjectQuery(options)}`; + frame.src = `${getOrigin(options)}/edit/${projectId}${buildProjectQuery(options)}`; replaceAndEmbed(element, frame, options); diff --git a/sdk/src/interfaces.ts b/sdk/src/interfaces.ts index 2b5c2977..033b0aa1 100644 --- a/sdk/src/interfaces.ts +++ b/sdk/src/interfaces.ts @@ -28,6 +28,7 @@ export interface ProjectOptions { openFile?: string; hideDevTools?: boolean; devToolsHeight?: number; + origin?: string; } export interface OpenOptions extends ProjectOptions {