Skip to content

Commit

Permalink
Refactoring working usage, using web-worker package
Browse files Browse the repository at this point in the history
  • Loading branch information
samlown committed Aug 9, 2023
1 parent 82e8e25 commit d29a335
Show file tree
Hide file tree
Showing 25 changed files with 108 additions and 60 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,9 @@ GOBL Builder makes use of [gobl.cli](https://github.com/invopop/gobl.cli) for
validating, calculating and building GOBL documents. This is done via a
versioned WASM binary, distributed on `cdn.gobl.org`.

The version of `gobl.cli` that is used is defined in the [package.json](./package.json) file under the `gobl_cli_version`.
The version of `gobl.cli` that is used is defined in the [src/lib/worker.ts](./src/lib/worker.ts) file.

To bump the version, update the value of `gobl_cli_version` (e.g. based on the
To bump the version, update the value of `goblCliVersion` (e.g. based on the
[latest release of
`gobl.cli`](https://github.com/invopop/gobl.cli/releases/latest)), then commit
the changes to GitHub to trigger a new release of `@invopop/gobl-builder` on
Expand All @@ -133,4 +133,4 @@ GOBL Builder is licensed under the [Apache-2.0 License](LICENSE).

---

© 2022 Invopop, Ltd.
© 2023 Invopop, S.L.
8 changes: 7 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 6 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@
"./editor/EditorProblem.svelte": {
"svelte": "./dist/editor/EditorProblem.svelte",
"types": "./dist/editor/EditorProblem.svelte.d.ts"
},
"./editor/EditorProblem": {
"import": "./dist/editor/EditorProblem.js",
"types": "./dist/editor/EditorProblem.d.ts"
}
},
"files": [
Expand Down Expand Up @@ -78,7 +82,8 @@
"svelte": "^4.1.2",
"svelte-floating-ui": "^1.5.3",
"utf8": "^3.0.0",
"vscode-json-languageservice": "5.3.5"
"vscode-json-languageservice": "5.3.5",
"web-worker": "^1.2.0"
},
"overrides": {
"monaco-editor": {
Expand Down
5 changes: 3 additions & 2 deletions src/lib/GOBLBuilder.svelte
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
<script lang="ts">
import { createEventDispatcher } from "svelte";
import { editor, editorProblems, envelope, envelopeAndEditorJSON, keypair } from "$lib/stores.js";
import { editor, envelope, envelopeAndEditorJSON, keypair } from "$lib/gobl/stores.js";
import MenuBar from "./menubar/MenuBar.svelte";
import Editor from "./editor/Editor.svelte";
import { isEnvelope } from "./gobl.js";
import { isEnvelope } from "./gobl/index.js";
import { problemSeverityMap, type EditorProblem } from "./editor/EditorProblem.js";
import { editorProblems } from "./editor/store.js";
const dispatch = createEventDispatcher();
Expand Down
7 changes: 4 additions & 3 deletions src/lib/actions/Build.svelte
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
<script lang="ts">
import { createEventDispatcher } from "svelte";
import * as GOBL from "$lib/gobl.js";
import * as GOBL from "$lib/gobl/index.js";
import { encodeUTF8ToBase64 } from "$lib/encodeUTF8ToBase64.js";
import { createNotification, Severity } from "$lib/notifications/index.js";
import { envelope, editor, goblError, type GOBLError } from "$lib/stores.js";
import { createNotification } from "$lib/notifications/index.js";
import { Severity } from "$lib/gobl/stores.js";
import { envelope, editor, goblError, type GOBLError } from "$lib/gobl/stores.js";
import { iconButtonClasses } from "$lib/ui/iconButtonClasses.js";
import Tooltip from "$lib/ui/Tooltip.svelte";
Expand Down
2 changes: 1 addition & 1 deletion src/lib/actions/ClearEditor.svelte
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<script lang="ts">
import { createEventDispatcher } from "svelte";
import { editor, envelope } from "$lib/stores.js";
import { editor, envelope } from "$lib/gobl/stores.js";
import { iconButtonClasses } from "$lib/ui/iconButtonClasses.js";
import Tooltip from "$lib/ui/Tooltip.svelte";
Expand Down
2 changes: 1 addition & 1 deletion src/lib/actions/ExportDoc.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import { createEventDispatcher } from "svelte";
import type { SvelteComponent } from "svelte";
import { envelope } from "$lib/stores.js";
import { envelope } from "$lib/gobl/stores.js";
import Modal from "$lib/ui/Modal.svelte";
import ExportDocContent from "./ExportDocContent.svelte";
import { iconButtonClasses } from "$lib/ui/iconButtonClasses.js";
Expand Down
7 changes: 4 additions & 3 deletions src/lib/actions/ExportDocContent.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
import fileSaver from "file-saver";
import * as CountryList from "country-list";
import { envelope } from "$lib/stores.js";
import { createNotification, Severity } from "$lib/notifications/index.js";
import { envelope } from "$lib/gobl/stores.js";
import { createNotification } from "$lib/notifications/index.js";
import { Severity } from "$lib/gobl/stores.js";
import { schemaIconMap } from "$lib/ui/icons/schemaIconMap.svelte";
import DocIcon from "$lib/ui/DocIcon.svelte";
Expand Down Expand Up @@ -108,7 +109,7 @@
{#if previewLoading}
<svg
role="status"
class="w-5 h-5 text-gray-500 animate-spin fill-gray-300"
class="w-5 h-5 text-gray-500 animate-spin fill-gray-300"
viewBox="0 0 100 101"
fill="none"
xmlns="http://www.w3.org/2000/svg"
Expand Down
2 changes: 1 addition & 1 deletion src/lib/actions/Redo.svelte
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<script lang="ts">
import { createEventDispatcher } from "svelte";
import { redoAvailable } from "$lib/stores.js";
import { redoAvailable } from "$lib/gobl/stores.js";
import { iconButtonClasses } from "$lib/ui/iconButtonClasses.js";
import Tooltip from "$lib/ui/Tooltip.svelte";
Expand Down
7 changes: 4 additions & 3 deletions src/lib/actions/Sign.svelte
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
<script lang="ts">
import { createEventDispatcher } from "svelte";
import * as GOBL from "$lib/gobl.js";
import * as GOBL from "$lib/gobl/index.js";
import { encodeUTF8ToBase64 } from "$lib/encodeUTF8ToBase64.js";
import { createNotification, Severity } from "$lib/notifications/index.js";
import { envelope, editor, keypair, goblError, type GOBLError } from "$lib/stores.js";
import { createNotification } from "$lib/notifications/index.js";
import { Severity } from "$lib/gobl/stores.js";
import { envelope, editor, keypair, goblError, type GOBLError } from "$lib/gobl/stores.js";
import { iconButtonClasses } from "$lib/ui/iconButtonClasses.js";
import Tooltip from "$lib/ui/Tooltip.svelte";
Expand Down
2 changes: 1 addition & 1 deletion src/lib/actions/Undo.svelte
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<script lang="ts">
import { createEventDispatcher } from "svelte";
import { undoAvailable } from "$lib/stores.js";
import { undoAvailable } from "$lib/gobl/stores.js";
import { iconButtonClasses } from "$lib/ui/iconButtonClasses.js";
import Tooltip from "$lib/ui/Tooltip.svelte";
Expand Down
7 changes: 4 additions & 3 deletions src/lib/actions/Validate.svelte
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
<script lang="ts">
import { createEventDispatcher } from "svelte";
import * as GOBL from "$lib/gobl.js";
import * as GOBL from "$lib/gobl/index.js";
import { encodeUTF8ToBase64 } from "$lib/encodeUTF8ToBase64.js";
import { createNotification, Severity } from "$lib/notifications/index.js";
import { envelope, envelopeIsSigned, editor, goblError, type GOBLError } from "$lib/stores.js";
import { createNotification } from "$lib/notifications/index.js";
import { Severity } from "$lib/gobl/stores.js";
import { envelope, envelopeIsSigned, editor, goblError, type GOBLError } from "$lib/gobl/stores.js";
import { iconButtonClasses } from "$lib/ui/iconButtonClasses.js";
import Tooltip from "$lib/ui/Tooltip.svelte";
Expand Down
10 changes: 2 additions & 8 deletions src/lib/editor/Editor.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,8 @@
import { onDestroy, onMount } from "svelte";
import { slide } from "svelte/transition";
import {
editor,
editorProblems as problems,
goblError,
redoAvailable,
undoAvailable,
envelope,
} from "$lib/stores.js";
import { editor, goblError, redoAvailable, undoAvailable, envelope } from "$lib/gobl/stores.js";
import { editorProblems as problems } from "./store.js";
import EditorProblem from "./EditorProblem.svelte";
import WarningIcon from "$lib/ui/icons/WarningIcon.svelte";
import ErrorIcon from "$lib/ui/icons/ErrorIcon.svelte";
Expand Down
4 changes: 4 additions & 0 deletions src/lib/editor/store.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { writable } from "svelte/store";
import type * as monaco from "monaco-editor";

export const editorProblems = writable<monaco.editor.IMarker[]>([]);
12 changes: 7 additions & 5 deletions src/lib/gobl.ts → src/lib/gobl/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import GOBLWorker from "./worker?worker";
import { createNotification, type Notification } from "$lib/notifications/index.js";
import type { GOBLError } from "$lib/stores.js";
// import GOBLWorker from "./worker?worker";
import Worker from "web-worker";
import type { GOBLError, Notification } from "./stores.js";
import { notifications } from "./stores.js";

type BaseBulkRequest = {
req_id?: string;
Expand Down Expand Up @@ -88,7 +89,8 @@ type InFlightBulkRequest = {

const queue: BulkRequest[] = [];
const inFlight: Record<string, InFlightBulkRequest> = {};
const worker = new GOBLWorker();
//const worker = new GOBLWorker();
const worker = new Worker(new URL("./worker", import.meta.url), { type: "module" });

let reqId = 0;
let ready = false;
Expand All @@ -104,7 +106,7 @@ worker.onmessage = ({ data }: MessageEvent<ReadyMessage | Notification | BulkRes
}

if ("message" in data) {
createNotification(data);
notifications.set(data);
return true;
}

Expand Down
29 changes: 25 additions & 4 deletions src/lib/stores.ts → src/lib/gobl/stores.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { derived, writable } from "svelte/store";
import type * as monaco from "monaco-editor";
import * as GOBL from "$lib/gobl.js";
import * as GOBL from "$lib/gobl/index.js";

function createKeypairStore() {
const { subscribe, set } = writable<GOBL.Keypair | null>(null);
Expand Down Expand Up @@ -76,6 +75,30 @@ export const envelopeAndEditorJSON = derived([envelope, editor], ([$envelope, $e
return [envelopeValue, $editor];
});

// Severity is used for error messages
export enum Severity {
Info = "info",
Error = "error",
Success = "success",
}

// Notification is used for communicating error messages
export type Notification = {
severity: Severity;
message: string;
context?: string;
};

function createNotificationStore() {
const { subscribe, set } = writable<Notification | null>(null);
return {
subscribe,
set,
};
}

export const notifications = createNotificationStore();

export type GOBLError = {
message: string;
code: number;
Expand All @@ -90,6 +113,4 @@ function createGOBLErrorStore() {
};
}

export const editorProblems = writable<monaco.editor.IMarker[]>([]);

export const goblError = createGOBLErrorStore();
File renamed without changes.
4 changes: 1 addition & 3 deletions src/lib/worker.ts → src/lib/gobl/worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@ export type {}; // Needed when compiling with `--isolatedModules`.

import "./wasm_exec.js";

// GOBL CLI version defined in package.json
declare const GOBL_CLI_VERSION: string;
const goblCliVersion = GOBL_CLI_VERSION;
const goblCliVersion = "0.64.0";

const wasmUrl = `https://cdn.gobl.org/cli/gobl.${goblCliVersion}.wasm`;

Expand Down
2 changes: 1 addition & 1 deletion src/lib/menubar/EnvelopeHeader.svelte
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script lang="ts">
import { envelope } from "$lib/stores.js";
import { envelope } from "$lib/gobl/stores.js";
$: head = $envelope?.head;
</script>

Expand Down
2 changes: 1 addition & 1 deletion src/lib/menubar/EnvelopeSignatures.svelte
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script lang="ts">
import { envelope } from "$lib/stores.js";
import { envelope } from "$lib/gobl/stores.js";
$: sigs = $envelope?.sigs;
</script>

Expand Down
2 changes: 1 addition & 1 deletion src/lib/menubar/MenuBar.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import ModalBackdrop from "$lib/ui/ModalBackdrop.svelte";
import Modal from "$lib/ui/Modal.svelte";
import { envelope, envelopeIsDraft, envelopeIsSigned } from "$lib/stores.js";
import { envelope, envelopeIsDraft, envelopeIsSigned } from "$lib/gobl/stores.js";
import EnvelopeHeader from "./EnvelopeHeader.svelte";
import EnvelopeSignatures from "./EnvelopeSignatures.svelte";
import Tooltip from "$lib/ui/Tooltip.svelte";
Expand Down
2 changes: 1 addition & 1 deletion src/lib/notifications/Notification.svelte
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<script lang="ts">
import { clsx } from "clsx";
import { Severity } from "$lib/notifications/index.js";
import { Severity } from "$lib/gobl/stores.js";
export let severity: Severity = Severity.Info;
export let message: string;
Expand Down
2 changes: 1 addition & 1 deletion src/lib/notifications/Notifications.svelte
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<script lang="ts">
import { fly } from "svelte/transition";
import type { Notification } from "./index.js";
import type { Notification } from "$lib/gobl/stores.js";
import Alert from "./Notification.svelte";
export let notifications = new Set<Notification>();
Expand Down
13 changes: 1 addition & 12 deletions src/lib/notifications/index.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,5 @@
import Notifications from "./Notifications.svelte";

export enum Severity {
Info = "info",
Error = "error",
Success = "success",
}

export type Notification = {
severity: Severity;
message: string;
context?: string;
};
import type { Notification } from "$lib/gobl/stores.js";

const notifications = new Set<Notification>();

Expand Down
24 changes: 24 additions & 0 deletions vite.config.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,34 @@
import { defineConfig } from "vite";
import { sveltekit } from "@sveltejs/kit/vite";
import packageJson from "./package.json";
//import { resolve } from "path";

export default defineConfig({
plugins: [sveltekit()],
define: {
GOBL_CLI_VERSION: JSON.stringify(packageJson.gobl_cli_version),
},
/*
build: {
// Here we try to compile the gobl stuff into a single source
lib: {
entry: resolve(__dirname, "lib/gobl/index.ts"),
name: "GOBL",
fileName: "gobl",
},
rollupOptions: {
// make sure to externalize deps that shouldn't be bundled
// into your library
external: ["svelte"],
output: {
// Provide global variables to use in the UMD build
// for externalized deps
globals: {
svelte: "Svelte",
},
inlineDynamicImports: false,
},
},
},
*/
});

0 comments on commit d29a335

Please sign in to comment.