@nova-ui/bits
Version:
SolarWinds Nova Framework
92 lines • 14.4 kB
JavaScript
// © 2022 SolarWinds Worldwide, LLC. All rights reserved.
//
// 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.
import { DOCUMENT } from "@angular/common";
import { Inject, Injectable, Optional } from "@angular/core";
import { compressToBase64 } from "lz-string";
import { createAngularApp } from "./code-sandbox-files";
import { DEMO_PATH_TOKEN } from "../../../constants/path.constants";
import * as i0 from "@angular/core";
/** @dynamic */
export class CodeSandboxService {
constructor(document, config) {
this.document = document;
this.config = config;
}
async open(prefix, sources) {
async function mainVersion(packageName) {
// only fetch tiny-tarball
const res = await fetch("https://registry.npmjs.org/" + packageName, {
headers: new Headers({
Accept: "application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*",
}),
});
const json = await res.json();
return json["dist-tags"].latest;
}
const form = this.document.createElement("form");
const latestNovaVersion = await mainVersion("@nova-ui/bits");
const packageLib = sources.find((source) => source.fileName === "package.json")?.fileContent ?? "";
const files = createAngularApp(prefix, this.config.context, sources, packageLib.default, packageLib.default, latestNovaVersion);
// TODO fix modification of less files
// const modifySources = (source: string) => // Handle non-existent less references that are just killing plunker
// source.replace(/^.*@import \(reference\).*$/gm, "/* NUI LESS VARIABLES ARE NOT SUPPORTED YET */");
// TODO add support for translations
// form.append(this.formInput("translations", "ts", translations));
form.style.display = "none";
form.setAttribute("method", "POST");
form.setAttribute("action", "https://codesandbox.io/api/v1/sandboxes/define");
form.setAttribute("target", "_blank");
const parameters = this.compress(files);
this.addHiddenInput(form, "parameters", parameters);
this.document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
}
addHiddenInput(form, name, value) {
const input = document.createElement("input");
input.type = "hidden";
input.name = name;
input.value = value;
form.appendChild(input);
}
compress(object) {
return compressToBase64(JSON.stringify(object))
.replace(/\+/g, "-") // Convert '+' to '-'
.replace(/\//g, "_") // Convert '/' to '_'
.replace(/=+$/, ""); // Remove ending '='
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CodeSandboxService, deps: [{ token: DOCUMENT }, { token: DEMO_PATH_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CodeSandboxService, providedIn: "root" }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CodeSandboxService, decorators: [{
type: Injectable,
args: [{
providedIn: "root",
}]
}], ctorParameters: () => [{ type: Document, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [DEMO_PATH_TOKEN]
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1zYW5kYm94LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RvY3MvZXhhbXBsZS13cmFwcGVyL2NvZGUtc2FuZGJveC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBR3BFLGVBQWU7QUFJZixNQUFNLE9BQU8sa0JBQWtCO0lBQzNCLFlBQzhCLFFBQWtCLEVBQ0MsTUFBVztRQUQ5QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ0MsV0FBTSxHQUFOLE1BQU0sQ0FBSztJQUN6RCxDQUFDO0lBRUosS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFjLEVBQUUsT0FBWTtRQUNuQyxLQUFLLFVBQVUsV0FBVyxDQUFDLFdBQW1CO1lBQzFDLDBCQUEwQjtZQUMxQixNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FDbkIsNkJBQTZCLEdBQUcsV0FB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ZXNDb250ZW50IjpbIi8vIMKpIDIwMjIgU29sYXJXaW5kcyBXb3JsZHdpZGUsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgY29tcHJlc3NUb0Jhc2U2NCB9IGZyb20gXCJsei1zdHJpbmdcIjtcblxuaW1wb3J0IHsgY3JlYXRlQW5ndWxhckFwcCB9IGZyb20gXCIuL2NvZGUtc2FuZGJveC1maWxlc1wiO1xuaW1wb3J0IHsgREVNT19QQVRIX1RPS0VOIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50cy9wYXRoLmNvbnN0YW50c1wiO1xuaW1wb3J0IHtGaWxlTWV0YWRhdGF9IGZyb20gXCIuLi9zZXJ2aWNlcy9zb3VyY2VzLnNlcnZpY2VcIjtcblxuLyoqIEBkeW5hbWljICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXG59KVxuZXhwb3J0IGNsYXNzIENvZGVTYW5kYm94U2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERFTU9fUEFUSF9UT0tFTikgcHJpdmF0ZSBjb25maWc6IGFueVxuICAgICkge31cblxuICAgIGFzeW5jIG9wZW4ocHJlZml4OiBzdHJpbmcsIHNvdXJjZXM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhc3luYyBmdW5jdGlvbiBtYWluVmVyc2lvbihwYWNrYWdlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgICAgICAvLyBvbmx5IGZldGNoIHRpbnktdGFyYmFsbFxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgICAgICAgXCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9cIiArIHBhY2thZ2VOYW1lLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL3ZuZC5ucG0uaW5zdGFsbC12MStqc29uOyBxPTEuMCwgYXBwbGljYXRpb24vanNvbjsgcT0wLjgsICovKlwiLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgICAgICByZXR1cm4ganNvbltcImRpc3QtdGFnc1wiXS5sYXRlc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb3JtOiBIVE1MRm9ybUVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmb3JtXCIpO1xuXG4gICAgICAgIGNvbnN0IGxhdGVzdE5vdmFWZXJzaW9uID0gYXdhaXQgbWFpblZlcnNpb24oXCJAbm92YS11aS9iaXRzXCIpO1xuXG4gICAgICAgIGNvbnN0IHBhY2thZ2VMaWIgPSBzb3VyY2VzLmZpbmQoXG4gICAgICAgICAgICAoc291cmNlOiBGaWxlTWV0YWRhdGEpID0+IHNvdXJjZS5maWxlTmFtZSA9PT0gXCJwYWNrYWdlLmpzb25cIlxuICAgICAgICApPy5maWxlQ29udGVudCA/PyBcIlwiO1xuXG4gICAgICAgIGNvbnN0IGZpbGVzID0gY3JlYXRlQW5ndWxhckFwcChcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmNvbnRleHQsXG4gICAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgICAgcGFja2FnZUxpYi5kZWZhdWx0LFxuICAgICAgICAgICAgcGFja2FnZUxpYi5kZWZhdWx0LFxuICAgICAgICAgICAgbGF0ZXN0Tm92YVZlcnNpb25cbiAgICAgICAgKTtcbiAgICAgICAgLy8gVE9ETyBmaXggbW9kaWZpY2F0aW9uIG9mIGxlc3MgZmlsZXNcbiAgICAgICAgLy8gY29uc3QgbW9kaWZ5U291cmNlcyA9IChzb3VyY2U6IHN0cmluZykgPT4gLy8gSGFuZGxlIG5vbi1leGlzdGVudCBsZXNzIHJlZmVyZW5jZXMgdGhhdCBhcmUganVzdCBraWxsaW5nIHBsdW5rZXJcbiAgICAgICAgLy8gICAgIHNvdXJjZS5yZXBsYWNlKC9eLipAaW1wb3J0IFxcKHJlZmVyZW5jZVxcKS4qJC9nbSwgXCIvKiBOVUkgTEVTUyBWQVJJQUJMRVMgQVJFIE5PVCBTVVBQT1JURUQgWUVUICovXCIpO1xuXG4gICAgICAgIC8vIFRPRE8gYWRkIHN1cHBvcnQgZm9yIHRyYW5zbGF0aW9uc1xuICAgICAgICAvLyBmb3JtLmFwcGVuZCh0aGlzLmZvcm1JbnB1dChcInRyYW5zbGF0aW9uc1wiLCBcInRzXCIsIHRyYW5zbGF0aW9ucykpO1xuXG4gICAgICAgIGZvcm0uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICBmb3JtLnNldEF0dHJpYnV0ZShcIm1ldGhvZFwiLCBcIlBPU1RcIik7XG4gICAgICAgIGZvcm0uc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgXCJhY3Rpb25cIixcbiAgICAgICAgICAgIFwiaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9hcGkvdjEvc2FuZGJveGVzL2RlZmluZVwiXG4gICAgICAgICk7XG4gICAgICAgIGZvcm0uc2V0QXR0cmlidXRlKFwidGFyZ2V0XCIsIFwiX2JsYW5rXCIpO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLmNvbXByZXNzKGZpbGVzKTtcbiAgICAgICAgdGhpcy5hZGRIaWRkZW5JbnB1dChmb3JtLCBcInBhcmFtZXRlcnNcIiwgcGFyYW1ldGVycyk7XG5cbiAgICAgICAgdGhpcy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZvcm0pO1xuICAgICAgICBmb3JtLnN1Ym1pdCgpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGZvcm0pO1xuICAgIH1cblxuICAgIGFkZEhpZGRlbklucHV0KGZvcm06IEhUTUxGb3JtRWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgICAgICBpbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgICAgICAgaW5wdXQubmFtZSA9IG5hbWU7XG4gICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaW5wdXQpO1xuICAgIH1cblxuICAgIGNvbXByZXNzKG9iamVjdDogUmVjb3JkPHN0cmluZywgb2JqZWN0Pik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBjb21wcmVzc1RvQmFzZTY0KEpTT04uc3RyaW5naWZ5KG9iamVjdCkpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwrL2csIFwiLVwiKSAvLyBDb252ZXJ0ICcrJyB0byAnLSdcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXC8vZywgXCJfXCIpIC8vIENvbnZlcnQgJy8nIHRvICdfJ1xuICAgICAgICAgICAgLnJlcGxhY2UoLz0rJC8sIFwiXCIpOyAvLyBSZW1vdmUgZW5kaW5nICc9J1xuICAgIH1cbn1cbiJdfQ==