UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

92 lines 14.4 kB
// © 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==