From 8cb716df3b52117f646dcb38c6471a748bece439 Mon Sep 17 00:00:00 2001 From: Martin McKeaveney Date: Mon, 9 Nov 2020 15:24:29 +0000 Subject: [PATCH 01/25] start server render index.html --- packages/server/package.json | 3 +- .../{static.js => static/index.js} | 37 ++++ .../static/templates/BudibaseApp.svelte | 0 .../static/templates/index.template.html | 63 ++++++ packages/server/yarn.lock | 205 +++++++++++++++++- 5 files changed, 304 insertions(+), 4 deletions(-) rename packages/server/src/api/controllers/{static.js => static/index.js} (87%) create mode 100644 packages/server/src/api/controllers/static/templates/BudibaseApp.svelte create mode 100644 packages/server/src/api/controllers/static/templates/index.template.html diff --git a/packages/server/package.json b/packages/server/package.json index 1c7c23f287..3774123cf8 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -38,7 +38,7 @@ "keywords": [ "budibase" ], - "author": "Michael Shanks", + "author": "Budibase", "license": "AGPL-3.0-or-later", "dependencies": { "@budibase/client": "^0.3.4", @@ -78,6 +78,7 @@ "pouchdb-replication-stream": "^1.2.9", "sanitize-s3-objectkey": "^0.0.1", "squirrelly": "^7.5.0", + "svelte": "^3.29.4", "tar-fs": "^2.1.0", "to-json-schema": "^0.2.5", "uuid": "^3.3.2", diff --git a/packages/server/src/api/controllers/static.js b/packages/server/src/api/controllers/static/index.js similarity index 87% rename from packages/server/src/api/controllers/static.js rename to packages/server/src/api/controllers/static/index.js index 2c8bba7790..0a342a2e24 100644 --- a/packages/server/src/api/controllers/static.js +++ b/packages/server/src/api/controllers/static/index.js @@ -1,3 +1,5 @@ +require("svelte/register") + const send = require("koa-send") const { resolve, join } = require("../../utilities/centralPath") const fetch = require("node-fetch") @@ -137,6 +139,41 @@ exports.performLocalFileProcessing = async function(ctx) { } } +exports.serveAppNew = async function(ctx) { + const App = require("./templates/BudibaseApp.svelte").default + + const { html } = App.render({ + name: "Budibase", + authenticated: + ctx.auth.authenticated === AuthTypes.APP ? "main" : "unauthenticated", + production: env.CLOUD, + }) + + // // default to homedir + // const appPath = resolve( + // budibaseAppsDir(), + // ctx.params.appId, + // "public", + // mainOrAuth + // ) + + ctx.body = html + + // const appId = ctx.user.appId + + // if (env.CLOUD) { + // const S3_URL = `https://${appId}.app.budi.live/assets/${appId}/${mainOrAuth}/${ctx.file || + // "index.production.html"}` + + // const response = await fetch(S3_URL) + // const body = await response.text() + // ctx.body = body + // return + // } + + // await send(ctx, ctx.file || "index.html", { root: ctx.devPath || appPath }) +} + exports.serveApp = async function(ctx) { const mainOrAuth = ctx.auth.authenticated === AuthTypes.APP ? "main" : "unauthenticated" diff --git a/packages/server/src/api/controllers/static/templates/BudibaseApp.svelte b/packages/server/src/api/controllers/static/templates/BudibaseApp.svelte new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/server/src/api/controllers/static/templates/index.template.html b/packages/server/src/api/controllers/static/templates/index.template.html new file mode 100644 index 0000000000..e7cf633277 --- /dev/null +++ b/packages/server/src/api/controllers/static/templates/index.template.html @@ -0,0 +1,63 @@ + + + + + + + + {{ title }} + + + + + {{ each(options.stylesheets) }} + + {{ /each }} + + {{ each(options.screenStyles) }} + {{ if(options.production) }} + + {{#else}} + + {{ /if }} + {{ /each }} + + {{ if(options.pageStyle) }} + {{ if(options.production) }} + + {{#else}} + + {{ /if }} + {{ /if }} + + + + + {{ if(options.production) }} + + + {{#else}} + + + {{ /if }} + + + + + + + \ No newline at end of file diff --git a/packages/server/yarn.lock b/packages/server/yarn.lock index 941f02e5e8..048694e6de 100644 --- a/packages/server/yarn.lock +++ b/packages/server/yarn.lock @@ -200,6 +200,15 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@budibase/client@^0.3.4": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@budibase/client/-/client-0.3.4.tgz#aca2d13170dae870d069a56f53519d9fbb4bdc00" + integrity sha512-zs9Jnr1CzvgZY4NrliatqDUm0gVhlcQkpdsMblO+3zRcwBzRXAeFyzwMtGpcbiQm29zHjPBOivmQQUMxgi3lUg== + dependencies: + deep-equal "^2.0.1" + mustache "^4.0.1" + regexparam "^1.3.0" + "@cnakazawa/watch@^1.0.3": version "1.0.4" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" @@ -1227,6 +1236,11 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= +array-filter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" + integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= + array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -1299,6 +1313,13 @@ atomic-sleep@^1.0.0: resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== +available-typed-arrays@^1.0.0, available-typed-arrays@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" + integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== + dependencies: + array-filter "^1.0.0" + aws-sdk@^2.767.0: version "2.771.0" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.771.0.tgz#ff4beb0a04d6ab1ae962c85dfb42e3e9bfe2b93b" @@ -1666,6 +1687,14 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -2164,6 +2193,26 @@ decompress@^4.2.1: pify "^2.3.0" strip-dirs "^2.0.0" +deep-equal@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.0.4.tgz#6b0b407a074666033169df3acaf128e1c6f3eab6" + integrity sha512-BUfaXrVoCfgkOQY/b09QdO9L3XNoF2XH0A3aY9IQwQL/ZjLOe8FQgCNVl1wiolhsFo8kFdO9zdPViCPbmaJA5w== + dependencies: + es-abstract "^1.18.0-next.1" + es-get-iterator "^1.1.0" + is-arguments "^1.0.4" + is-date-object "^1.0.2" + is-regex "^1.1.1" + isarray "^2.0.5" + object-is "^1.1.3" + object-keys "^1.1.1" + object.assign "^4.1.1" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.3" + which-boxed-primitive "^1.0.1" + which-collection "^1.0.1" + which-typed-array "^1.1.2" + deep-equal@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" @@ -2545,7 +2594,7 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5: version "1.17.7" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== @@ -2562,7 +2611,7 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" -es-abstract@^1.18.0-next.0: +es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: version "1.18.0-next.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== @@ -2580,6 +2629,20 @@ es-abstract@^1.18.0-next.0: string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" +es-get-iterator@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.1.tgz#b93ddd867af16d5118e00881396533c1c6647ad9" + integrity sha512-qorBw8Y7B15DVLaJWy6WdEV/ZkieBcu6QCq/xzWzGOKJqgG1j754vXRfZ3NY7HSShneqU43mPB4OkQBTkvHhFw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.1" + has-symbols "^1.0.1" + is-arguments "^1.0.4" + is-map "^2.0.1" + is-set "^2.0.1" + is-string "^1.0.5" + isarray "^2.0.5" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -3252,6 +3315,15 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.0, get-intrinsic@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" + integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -3776,11 +3848,21 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.0.tgz#73da8c33208d00f130e9b5e15d23eac9215601c4" + integrity sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g== + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -3788,6 +3870,11 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.1.tgz#10edc0900dd127697a92f6f9807c7617d68ac48e" + integrity sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ== + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -3824,7 +3911,7 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-date-object@^1.0.1: +is-date-object@^1.0.1, is-date-object@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== @@ -3904,6 +3991,11 @@ is-installed-globally@^0.3.1: global-dirs "^2.0.1" is-path-inside "^3.0.1" +is-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" + integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== + is-natural-number@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" @@ -3919,6 +4011,11 @@ is-npm@^4.0.0: resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== +is-number-object@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -3970,11 +4067,21 @@ is-retry-allowed@^1.1.0: resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== +is-set@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" + integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-string@^1.0.4, is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -3991,6 +4098,16 @@ is-type-of@^1.0.0: is-class-hotfix "~0.0.6" isstream "~0.1.2" +is-typed-array@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.3.tgz#a4ff5a5e672e1a55f99c7f54e59597af5c1df04d" + integrity sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ== + dependencies: + available-typed-arrays "^1.0.0" + es-abstract "^1.17.4" + foreach "^2.0.5" + has-symbols "^1.0.1" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -4001,6 +4118,16 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + +is-weakset@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.1.tgz#e9a0af88dbd751589f5e50d80f4c98b780884f83" + integrity sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw== + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -4026,6 +4153,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isbinaryfile@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.6.tgz#edcb62b224e2b4710830b67498c8e4e5a4d2610b" @@ -5564,6 +5696,14 @@ object-inspect@^1.8.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== +object-is@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.3.tgz#2e3b9e65560137455ee3bd62aec4d90a2ea1cc81" + integrity sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + object-keys@^1.0.12, object-keys@^1.0.6, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -6433,6 +6573,19 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp.prototype.flags@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexparam@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexparam/-/regexparam-1.3.0.tgz#2fe42c93e32a40eff6235d635e0ffa344b92965f" + integrity sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g== + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -6792,6 +6945,14 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +side-channel@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.3.tgz#cdc46b057550bbab63706210838df5d4c19519c3" + integrity sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g== + dependencies: + es-abstract "^1.18.0-next.0" + object-inspect "^1.8.0" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -7235,6 +7396,11 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +svelte@^3.29.4: + version "3.29.4" + resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.29.4.tgz#d0f80cb58109ef52963855c23496f7153bb2eb7e" + integrity sha512-oW0fGHlyFFMvzRtIvOs84b0fOc0gmZNQcL5Is3hxuTpvaYX3pfd8oHy4KnOvbq4Ca6SG6AHdRMk7OhApTo0NqA== + symbol-tree@^3.2.2: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -7819,11 +7985,44 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +which-boxed-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz#cbe8f838ebe91ba2471bb69e9edbda67ab5a5ec1" + integrity sha512-7BT4TwISdDGBgaemWU0N0OU7FeAEJ9Oo2P1PHRm/FCWoEi2VLWC9b6xvxAA3C/NMpxg3HXVgi0sMmGbNUbNepQ== + dependencies: + is-bigint "^1.0.0" + is-boolean-object "^1.0.0" + is-number-object "^1.0.3" + is-string "^1.0.4" + is-symbol "^1.0.2" + +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +which-typed-array@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.2.tgz#e5f98e56bda93e3dac196b01d47c1156679c00b2" + integrity sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ== + dependencies: + available-typed-arrays "^1.0.2" + es-abstract "^1.17.5" + foreach "^2.0.5" + function-bind "^1.1.1" + has-symbols "^1.0.1" + is-typed-array "^1.1.3" + which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" From f8f46b90e58612d07969be1cfe887f472e7b5939 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Tue, 10 Nov 2020 13:59:46 +0000 Subject: [PATCH 02/25] Fixing an issue where screens couldn't be deleted and fixing an issue where rows would still contain data from a column that no longer exists if a column was deleted from a table. --- .../src/builderStore/store/frontend.js | 6 +- packages/builder/yarn.lock | 198 +----------------- packages/server/src/api/controllers/table.js | 46 ++-- 3 files changed, 38 insertions(+), 212 deletions(-) diff --git a/packages/builder/src/builderStore/store/frontend.js b/packages/builder/src/builderStore/store/frontend.js index 54725503b9..35cd8b09f6 100644 --- a/packages/builder/src/builderStore/store/frontend.js +++ b/packages/builder/src/builderStore/store/frontend.js @@ -216,9 +216,9 @@ export const getFrontendStore = () => { if (pageName == null) { pageName = state.pages.main.name } - for (let screenToDelete of Array.isArray(screenToDelete) - ? screenToDelete - : [screenToDelete]) { + for (let screenToDelete of Array.isArray(screensToDelete) + ? screensToDelete + : [screensToDelete]) { // Remove screen from current page as well // TODO: Should be done server side state.pages[pageName]._screens = state.pages[ diff --git a/packages/builder/yarn.lock b/packages/builder/yarn.lock index 9c0458c7d9..9c57c9b773 100644 --- a/packages/builder/yarn.lock +++ b/packages/builder/yarn.lock @@ -719,15 +719,6 @@ svelte-flatpickr "^2.4.0" svelte-portal "^1.0.0" -"@budibase/client@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@budibase/client/-/client-0.3.5.tgz#3889cc13302b830186c0fe04b4f13870cda59362" - integrity sha512-3uKUGaATJ5vA2fkPQq7CCkh45MyCZsp57Ejqwz/4TUQVaxerGRp46A9R0s2t+w3HKbb5FrlG9eyJ5aarvR2Utg== - dependencies: - deep-equal "^2.0.1" - mustache "^4.0.1" - regexparam "^1.3.0" - "@budibase/colorpicker@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@budibase/colorpicker/-/colorpicker-1.0.1.tgz#940c180e7ebba0cb0756c4c8ef13f5dfab58e810" @@ -1416,11 +1407,6 @@ array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" -array-filter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" - integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -1475,13 +1461,6 @@ atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" -available-typed-arrays@^1.0.0, available-typed-arrays@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" - integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== - dependencies: - array-filter "^1.0.0" - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -1753,14 +1732,6 @@ cachedir@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" -call-bind@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" - integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.0" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -2456,26 +2427,6 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-equal@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.0.4.tgz#6b0b407a074666033169df3acaf128e1c6f3eab6" - integrity sha512-BUfaXrVoCfgkOQY/b09QdO9L3XNoF2XH0A3aY9IQwQL/ZjLOe8FQgCNVl1wiolhsFo8kFdO9zdPViCPbmaJA5w== - dependencies: - es-abstract "^1.18.0-next.1" - es-get-iterator "^1.1.0" - is-arguments "^1.0.4" - is-date-object "^1.0.2" - is-regex "^1.1.1" - isarray "^2.0.5" - object-is "^1.1.3" - object-keys "^1.1.1" - object.assign "^4.1.1" - regexp.prototype.flags "^1.3.0" - side-channel "^1.0.3" - which-boxed-primitive "^1.0.1" - which-collection "^1.0.1" - which-typed-array "^1.1.2" - deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -2645,23 +2596,6 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: string.prototype.trimleft "^2.1.1" string.prototype.trimright "^2.1.1" -es-abstract@^1.17.4: - version "1.17.7" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" - integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" - is-regex "^1.1.1" - object-inspect "^1.8.0" - object-keys "^1.1.1" - object.assign "^4.1.1" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: version "1.18.0-next.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" @@ -2680,20 +2614,6 @@ es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" -es-get-iterator@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.1.tgz#b93ddd867af16d5118e00881396533c1c6647ad9" - integrity sha512-qorBw8Y7B15DVLaJWy6WdEV/ZkieBcu6QCq/xzWzGOKJqgG1j754vXRfZ3NY7HSShneqU43mPB4OkQBTkvHhFw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.1" - has-symbols "^1.0.1" - is-arguments "^1.0.4" - is-map "^2.0.1" - is-set "^2.0.1" - is-string "^1.0.5" - isarray "^2.0.5" - es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -3011,7 +2931,7 @@ for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" -foreach@^2.0.5, foreach@~2.0.1: +foreach@~2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= @@ -3097,15 +3017,6 @@ get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" -get-intrinsic@^1.0.0, get-intrinsic@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" - integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - get-port@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" @@ -3403,22 +3314,12 @@ is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" -is-bigint@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.0.tgz#73da8c33208d00f130e9b5e15d23eac9215601c4" - integrity sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g== - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.1.tgz#10edc0900dd127697a92f6f9807c7617d68ac48e" - integrity sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ== - is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -3450,7 +3351,7 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-date-object@^1.0.1, is-date-object@^1.0.2: +is-date-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== @@ -3516,11 +3417,6 @@ is-installed-globally@^0.3.2: global-dirs "^2.0.1" is-path-inside "^3.0.1" -is-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" - integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== - is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" @@ -3530,11 +3426,6 @@ is-negative-zero@^2.0.0: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= -is-number-object@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== - is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -3598,11 +3489,6 @@ is-regex@^1.0.5: dependencies: has "^1.0.3" -is-set@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" - integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== - is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -3611,41 +3497,16 @@ is-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" -is-string@^1.0.4, is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" dependencies: has-symbols "^1.0.1" -is-typed-array@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.3.tgz#a4ff5a5e672e1a55f99c7f54e59597af5c1df04d" - integrity sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ== - dependencies: - available-typed-arrays "^1.0.0" - es-abstract "^1.17.4" - foreach "^2.0.5" - has-symbols "^1.0.1" - is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakset@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.1.tgz#e9a0af88dbd751589f5e50d80f4c98b780884f83" - integrity sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw== - is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -3666,11 +3527,6 @@ isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - isbuffer@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/isbuffer/-/isbuffer-0.0.0.tgz#38c146d9df528b8bf9b0701c3d43cf12df3fc39b" @@ -4796,7 +4652,7 @@ object-inspect@^1.8.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== -object-is@^1.0.1, object-is@^1.1.3: +object-is@^1.0.1: version "1.1.3" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.3.tgz#2e3b9e65560137455ee3bd62aec4d90a2ea1cc81" integrity sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg== @@ -5351,7 +5207,7 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: +regexp.prototype.flags@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== @@ -5359,11 +5215,6 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -regexparam@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/regexparam/-/regexparam-1.3.0.tgz#2fe42c93e32a40eff6235d635e0ffa344b92965f" - integrity sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g== - regexpu-core@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" @@ -5777,14 +5628,6 @@ shortid@^2.2.15: dependencies: nanoid "^2.1.0" -side-channel@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.3.tgz#cdc46b057550bbab63706210838df5d4c19519c3" - integrity sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g== - dependencies: - es-abstract "^1.18.0-next.0" - object-inspect "^1.8.0" - signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -6506,43 +6349,10 @@ whatwg-url@^8.0.0: tr46 "^2.0.2" webidl-conversions "^5.0.0" -which-boxed-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz#cbe8f838ebe91ba2471bb69e9edbda67ab5a5ec1" - integrity sha512-7BT4TwISdDGBgaemWU0N0OU7FeAEJ9Oo2P1PHRm/FCWoEi2VLWC9b6xvxAA3C/NMpxg3HXVgi0sMmGbNUbNepQ== - dependencies: - is-bigint "^1.0.0" - is-boolean-object "^1.0.0" - is-number-object "^1.0.3" - is-string "^1.0.4" - is-symbol "^1.0.2" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which-typed-array@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.2.tgz#e5f98e56bda93e3dac196b01d47c1156679c00b2" - integrity sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ== - dependencies: - available-typed-arrays "^1.0.2" - es-abstract "^1.17.5" - foreach "^2.0.5" - function-bind "^1.1.1" - has-symbols "^1.0.1" - is-typed-array "^1.1.3" - which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" diff --git a/packages/server/src/api/controllers/table.js b/packages/server/src/api/controllers/table.js index f7021974c5..8d55f98325 100644 --- a/packages/server/src/api/controllers/table.js +++ b/packages/server/src/api/controllers/table.js @@ -8,6 +8,33 @@ const { generateRowID, } = require("../../db/utils") +async function checkForColumnUpdates(db, oldTable, updatedTable) { + let updatedRows + const rename = updatedTable._rename + const deletedColumns = Object.keys(oldTable.schema).filter( + colName => updatedTable.schema[colName] == null + ) + // check for renaming of columns or deleted columns + if (rename || deletedColumns.length !== 0) { + const rows = await db.allDocs( + getRowParams(updatedTable._id, null, { + include_docs: true, + }) + ) + updatedRows = rows.rows.map(({ doc }) => { + if (rename) { + doc[rename.updated] = doc[rename.old] + delete doc[rename.old] + } else if (deletedColumns.length !== 0) { + deletedColumns.forEach(colName => delete doc[colName]) + } + return doc + }) + delete updatedTable._rename + } + return updatedRows +} + exports.fetch = async function(ctx) { const db = new CouchDB(ctx.user.appId) const body = await db.allDocs( @@ -33,7 +60,6 @@ exports.save = async function(ctx) { views: {}, ...rest, } - let renameDocs = [] // if the table obj had an _id then it will have been retrieved let oldTable @@ -65,20 +91,10 @@ exports.save = async function(ctx) { ctx.throw(400, "Cannot rename a linked column.") } else if (_rename && tableToSave.primaryDisplay === _rename.old) { ctx.throw(400, "Cannot rename the display column.") - } else if (_rename) { - const rows = await db.allDocs( - getRowParams(tableToSave._id, null, { - include_docs: true, - }) - ) - renameDocs = rows.rows.map(({ doc }) => { - doc[_rename.updated] = doc[_rename.old] - delete doc[_rename.old] - return doc - }) - delete tableToSave._rename } + let updatedRows = await checkForColumnUpdates(db, oldTable, tableToSave) + // update schema of non-statistics views when new columns are added for (let view in tableToSave.views) { const tableView = tableToSave.views[view] @@ -100,8 +116,8 @@ exports.save = async function(ctx) { // don't perform any updates until relationships have been // checked by the updateLinks function - if (renameDocs.length !== 0) { - await db.bulkDocs(renameDocs) + if (updatedRows && updatedRows.length !== 0) { + await db.bulkDocs(updatedRows) } const result = await db.post(tableToSave) tableToSave._rev = result.rev From 928c306769f378338feeb6b273500e32e3eff4b4 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Tue, 10 Nov 2020 15:09:54 +0000 Subject: [PATCH 03/25] Fixing #848 - standard components was not using the same API calls consistently which was breaking some things like charts. For now just make it consistent by updating it to make calls the same way as client lib does but the SDK will eventually replace all this and solve these problems. --- .../userInterface/PageLayout.svelte | 6 +- packages/server/src/api/controllers/table.js | 9 ++- packages/standard-components/src/api.js | 55 +++++++++++++++++-- 3 files changed, 60 insertions(+), 10 deletions(-) diff --git a/packages/builder/src/components/userInterface/PageLayout.svelte b/packages/builder/src/components/userInterface/PageLayout.svelte index 9837e6df35..932fc0a4f0 100644 --- a/packages/builder/src/components/userInterface/PageLayout.svelte +++ b/packages/builder/src/components/userInterface/PageLayout.svelte @@ -32,11 +32,11 @@ icon="ri-layout-3-line" text="Master Screen" withArrow - selected={$store.currentComponentInfo._id === _layout.component.props._id} - opened={$store.currentPreviewItem.name === _layout.title} + selected={$store.currentComponentInfo?._id === _layout.component.props._id} + opened={$store.currentPreviewItem?.name === _layout.title} on:click={setCurrentScreenToLayout} /> -{#if $store.currentPreviewItem.name === _layout.title && _layout.component.props._children} +{#if $store.currentPreviewItem?.name === _layout.title && _layout.component.props._children} updatedTable.schema[colName] == null - ) + let deletedColumns = [] + if (oldTable && oldTable.schema && updatedTable.schema) { + deletedColumns = Object.keys(oldTable.schema).filter( + colName => updatedTable.schema[colName] == null + ) + } // check for renaming of columns or deleted columns if (rename || deletedColumns.length !== 0) { const rows = await db.allDocs( diff --git a/packages/standard-components/src/api.js b/packages/standard-components/src/api.js index 7d9be3db56..98fb8abd32 100644 --- a/packages/standard-components/src/api.js +++ b/packages/standard-components/src/api.js @@ -1,3 +1,52 @@ +/** + * TODO: this entire file should be removed, this has simply been updated to fix a bug until SDK comes along fixing + * all these sort of inconsistency issues. + */ +const COOKIE_SEPARATOR = ";" +const APP_PREFIX = "app_" +const KEY_VALUE_SPLIT = "=" + +function confirmAppId(possibleAppId) { + return possibleAppId && possibleAppId.startsWith(APP_PREFIX) + ? possibleAppId + : undefined +} + +function tryGetFromCookie() { + const cookie = window.document.cookie + .split(COOKIE_SEPARATOR) + .find(cookie => cookie.trim().startsWith("budibase:currentapp")) + let appId + if (cookie && cookie.split(KEY_VALUE_SPLIT).length === 2) { + appId = cookie.split("=")[1] + } + return confirmAppId(appId) +} + +function tryGetFromPath() { + const appId = location.pathname.split("/")[1] + return confirmAppId(appId) +} + +function tryGetFromSubdomain() { + const parts = window.location.host.split(".") + const appId = parts[1] ? parts[0] : undefined + return confirmAppId(appId) +} + +function getAppId() { + const functions = [tryGetFromSubdomain, tryGetFromPath, tryGetFromCookie] + // try getting the app Id in order + let appId + for (let func of functions) { + appId = func() + if (appId) { + break + } + } + return appId +} + const apiCall = method => async ( url, body, @@ -5,17 +54,15 @@ const apiCall = method => async ( "Content-Type": "application/json", } ) => { - const appId = location.pathname.split("/")[1] + const appId = getAppId() if (appId) { headers["x-budibase-app-id"] = appId } - const response = await fetch(url, { + return await fetch(url, { method: method, body: body && JSON.stringify(body), headers, }) - - return response } export const post = apiCall("POST") From 129d36ccfe0ce020e04c6316250d18facb543db5 Mon Sep 17 00:00:00 2001 From: Martin McKeaveney Date: Tue, 10 Nov 2020 17:08:02 +0000 Subject: [PATCH 04/25] remove cf invalidation, adding validation around successful deploys only --- .../deploy/DeploymentHistory.svelte | 11 +++-- .../pages/[application]/deploy/index.svelte | 14 +----- .../server/src/api/controllers/deploy/aws.js | 45 +------------------ .../src/api/controllers/deploy/index.js | 43 ++---------------- packages/server/src/api/index.js | 2 + 5 files changed, 17 insertions(+), 98 deletions(-) diff --git a/packages/builder/src/components/deploy/DeploymentHistory.svelte b/packages/builder/src/components/deploy/DeploymentHistory.svelte index 417423a985..05a2e40fa6 100644 --- a/packages/builder/src/components/deploy/DeploymentHistory.svelte +++ b/packages/builder/src/components/deploy/DeploymentHistory.svelte @@ -44,6 +44,7 @@ } onMount(() => { + fetchDeployments() poll = setInterval(fetchDeployments, POLL_INTERVAL) }) @@ -55,10 +56,12 @@

Deployment History

- - View Your Deployed App → - - + {#if deployments.some(deployment => deployment.status === 'SUCCESS')} + + View Your Deployed App → + + + {/if}
diff --git a/packages/builder/src/pages/[application]/deploy/index.svelte b/packages/builder/src/pages/[application]/deploy/index.svelte index 0563c4e2cc..462601ff48 100644 --- a/packages/builder/src/pages/[application]/deploy/index.svelte +++ b/packages/builder/src/pages/[application]/deploy/index.svelte @@ -17,19 +17,16 @@ $: appId = $store.appId async function deployApp() { - loading = true const DEPLOY_URL = `/api/deploy` try { - notifier.info("Starting Deployment..") + notifier.info(`Deployment started. Please wait.`) const response = await api.post(DEPLOY_URL) const json = await response.json() if (response.status !== 200) { throw new Error() } - notifier.info(`Deployment started. Please wait.`) - loading = false analytics.captureEvent("Deployed App", { appId, }) @@ -43,7 +40,6 @@ }) analytics.captureException(err) notifier.danger("Deployment unsuccessful. Please try again later.") - loading = false } } @@ -51,13 +47,7 @@

It's time to shine!

- +
{ } }) +router.get("/health", ctx => (ctx.status = 200)) + router.use(authRoutes.routes()) router.use(authRoutes.allowedMethods()) From faf9fd475442276913b18bd8b116d69e0fd6b1a7 Mon Sep 17 00:00:00 2001 From: Martin McKeaveney Date: Tue, 10 Nov 2020 17:16:40 +0000 Subject: [PATCH 05/25] increasing log level in production --- packages/server/.env.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/.env.template b/packages/server/.env.template index 4895d0309c..1b1ff2e854 100644 --- a/packages/server/.env.template +++ b/packages/server/.env.template @@ -12,7 +12,7 @@ JWT_SECRET={{cookieKey1}} PORT=4001 # error level for koa-pino -LOG_LEVEL=error +LOG_LEVEL=info DEPLOYMENT_CREDENTIALS_URL="https://dt4mpwwap8.execute-api.eu-west-1.amazonaws.com/prod/" DEPLOYMENT_DB_URL="https://couchdb.budi.live:5984" From 2e6ed0bad97e5e123e2dc4f01fee826ac8a30ffb Mon Sep 17 00:00:00 2001 From: Martin McKeaveney Date: Tue, 10 Nov 2020 20:23:36 +0000 Subject: [PATCH 06/25] v0.3.7 --- lerna.json | 2 +- packages/builder/package.json | 4 ++-- packages/client/package.json | 2 +- packages/server/package.json | 4 ++-- packages/standard-components/package.json | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lerna.json b/lerna.json index c04ca6923f..2b9d044aa5 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "0.3.6", + "version": "0.3.7", "npmClient": "yarn", "packages": [ "packages/*" diff --git a/packages/builder/package.json b/packages/builder/package.json index b15b3e6b0f..226d69f863 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/builder", - "version": "0.3.6", + "version": "0.3.7", "license": "AGPL-3.0", "private": true, "scripts": { @@ -64,7 +64,7 @@ }, "dependencies": { "@budibase/bbui": "^1.50.1", - "@budibase/client": "^0.3.6", + "@budibase/client": "^0.3.7", "@budibase/colorpicker": "^1.0.1", "@budibase/svelte-ag-grid": "^0.0.16", "@fortawesome/fontawesome-free": "^5.14.0", diff --git a/packages/client/package.json b/packages/client/package.json index 7456bd74b2..a66ac002f8 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/client", - "version": "0.3.6", + "version": "0.3.7", "license": "MPL-2.0", "main": "dist/budibase-client.js", "module": "dist/budibase-client.esm.mjs", diff --git a/packages/server/package.json b/packages/server/package.json index 752c0163e6..0ca07d5b22 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/server", - "version": "0.3.6", + "version": "0.3.7", "description": "Budibase Web Server", "main": "src/electron.js", "repository": { @@ -41,7 +41,7 @@ "author": "Michael Shanks", "license": "AGPL-3.0-or-later", "dependencies": { - "@budibase/client": "^0.3.6", + "@budibase/client": "^0.3.7", "@koa/router": "^8.0.0", "@sendgrid/mail": "^7.1.1", "@sentry/node": "^5.19.2", diff --git a/packages/standard-components/package.json b/packages/standard-components/package.json index cf175b4652..e384c3c2aa 100644 --- a/packages/standard-components/package.json +++ b/packages/standard-components/package.json @@ -13,7 +13,7 @@ "dev:builder": "rollup -cw" }, "devDependencies": { - "@budibase/client": "^0.3.6", + "@budibase/client": "^0.3.7", "@rollup/plugin-commonjs": "^11.1.0", "lodash": "^4.17.15", "rollup": "^2.11.2", @@ -31,7 +31,7 @@ "keywords": [ "svelte" ], - "version": "0.3.6", + "version": "0.3.7", "license": "MIT", "gitHead": "284cceb9b703c38566c6e6363c022f79a08d5691", "dependencies": { From 4c7740f7e59f92cfd4509c3ca3cd2c31cadf2da8 Mon Sep 17 00:00:00 2001 From: Martin McKeaveney Date: Wed, 11 Nov 2020 09:45:21 +0000 Subject: [PATCH 07/25] config for windows signing cert --- .github/workflows/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 290f614e20..10232c569d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,6 +52,8 @@ jobs: mac_certs: ${{ secrets.mac_certs }} mac_certs_password: ${{ secrets.mac_certs_password }} + windows_certs: ${{ secrets.windows_certs }} + mac_certs_password: ${{ secrets.windows_certs_password }} # release the app after building release: ${{ startsWith(github.ref, 'refs/tags/v') }} From a705fd8667852c734321eb1b4f0e8eb70414dc3f Mon Sep 17 00:00:00 2001 From: Martin McKeaveney Date: Wed, 11 Nov 2020 09:47:56 +0000 Subject: [PATCH 08/25] typo --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 10232c569d..817cd17652 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -53,7 +53,7 @@ jobs: mac_certs: ${{ secrets.mac_certs }} mac_certs_password: ${{ secrets.mac_certs_password }} windows_certs: ${{ secrets.windows_certs }} - mac_certs_password: ${{ secrets.windows_certs_password }} + windows_certs_password: ${{ secrets.windows_certs_password }} # release the app after building release: ${{ startsWith(github.ref, 'refs/tags/v') }} From 9b914e0395de9d2d796c2060d4488a40ef000c53 Mon Sep 17 00:00:00 2001 From: Martin McKeaveney Date: Thu, 12 Nov 2020 10:25:25 +0000 Subject: [PATCH 09/25] remove squirrelly, compile a single bundle.css for each page, svelte and hbs server rendering --- packages/server/package.json | 1 - .../src/api/controllers/static/index.js | 64 +++++++++---------- .../static/templates/BudibaseApp.svelte | 62 ++++++++++++++++++ .../api/controllers/static/templates/app.hbs | 10 +++ .../static/templates/index.template.html | 63 ------------------ packages/server/src/api/routes/static.js | 2 +- packages/server/src/db/client.js | 2 +- .../builder/compileStaticAssetsForPage.js | 62 ++++-------------- .../utilities/builder/convertCssToFiles.js | 45 ++++--------- .../src/utilities/builder/publicPath.js | 3 - .../src/utilities/initialiseBudibase.js | 5 +- packages/server/yarn.lock | 13 ++-- 12 files changed, 137 insertions(+), 195 deletions(-) create mode 100644 packages/server/src/api/controllers/static/templates/app.hbs delete mode 100644 packages/server/src/api/controllers/static/templates/index.template.html delete mode 100644 packages/server/src/utilities/builder/publicPath.js diff --git a/packages/server/package.json b/packages/server/package.json index 699efbc56e..259e292c80 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -77,7 +77,6 @@ "pouchdb-all-dbs": "^1.0.2", "pouchdb-replication-stream": "^1.2.9", "sanitize-s3-objectkey": "^0.0.1", - "squirrelly": "^7.5.0", "svelte": "^3.29.4", "tar-fs": "^2.1.0", "to-json-schema": "^0.2.5", diff --git a/packages/server/src/api/controllers/static/index.js b/packages/server/src/api/controllers/static/index.js index 0a342a2e24..19f51a06cb 100644 --- a/packages/server/src/api/controllers/static/index.js +++ b/packages/server/src/api/controllers/static/index.js @@ -1,27 +1,29 @@ require("svelte/register") const send = require("koa-send") -const { resolve, join } = require("../../utilities/centralPath") +const { resolve, join } = require("../../../utilities/centralPath") const fetch = require("node-fetch") const fs = require("fs-extra") const uuid = require("uuid") const AWS = require("aws-sdk") -const { prepareUploadForS3 } = require("./deploy/aws") +const { prepareUploadForS3 } = require("../deploy/aws") +const handlebars = require("handlebars") const { budibaseAppsDir, budibaseTempDir, -} = require("../../utilities/budibaseDir") -const CouchDB = require("../../db") -const setBuilderToken = require("../../utilities/builder/setBuilderToken") -const fileProcessor = require("../../utilities/fileProcessor") -const { AuthTypes } = require("../../constants") -const env = require("../../environment") +} = require("../../../utilities/budibaseDir") +const { getPageParams } = require("../../../db/utils") +const CouchDB = require("../../../db") +const setBuilderToken = require("../../../utilities/builder/setBuilderToken") +const fileProcessor = require("../../../utilities/fileProcessor") +const { AuthTypes } = require("../../../constants") +const env = require("../../../environment") // this was the version before we started versioning the component library const COMP_LIB_BASE_APP_VERSION = "0.2.5" exports.serveBuilder = async function(ctx) { - let builderPath = resolve(__dirname, "../../../builder") + let builderPath = resolve(__dirname, "../../../../builder") if (ctx.file === "index.html") { await setBuilderToken(ctx) } @@ -141,37 +143,31 @@ exports.performLocalFileProcessing = async function(ctx) { exports.serveAppNew = async function(ctx) { const App = require("./templates/BudibaseApp.svelte").default + // Need to get app information here - const { html } = App.render({ - name: "Budibase", - authenticated: + const db = new CouchDB(ctx.params.appId) + + const appInfo = await db.get(ctx.params.appId) + + console.log("INFO", appInfo) + + const { head, html, css } = App.render({ + title: appInfo.name, + pageName: ctx.auth.authenticated === AuthTypes.APP ? "main" : "unauthenticated", production: env.CLOUD, + appId: ctx.params.appId, }) - // // default to homedir - // const appPath = resolve( - // budibaseAppsDir(), - // ctx.params.appId, - // "public", - // mainOrAuth - // ) + const template = handlebars.compile( + fs.readFileSync(`${__dirname}/templates/app.hbs`, "utf8") + ) - ctx.body = html - - // const appId = ctx.user.appId - - // if (env.CLOUD) { - // const S3_URL = `https://${appId}.app.budi.live/assets/${appId}/${mainOrAuth}/${ctx.file || - // "index.production.html"}` - - // const response = await fetch(S3_URL) - // const body = await response.text() - // ctx.body = body - // return - // } - - // await send(ctx, ctx.file || "index.html", { root: ctx.devPath || appPath }) + ctx.body = template({ + head, + body: html, + style: css.code, + }) } exports.serveApp = async function(ctx) { diff --git a/packages/server/src/api/controllers/static/templates/BudibaseApp.svelte b/packages/server/src/api/controllers/static/templates/BudibaseApp.svelte index e69de29bb2..648829891e 100644 --- a/packages/server/src/api/controllers/static/templates/BudibaseApp.svelte +++ b/packages/server/src/api/controllers/static/templates/BudibaseApp.svelte @@ -0,0 +1,62 @@ + + + + + + + {title} + + + + + + + + + + + + + + + diff --git a/packages/server/src/api/controllers/static/templates/app.hbs b/packages/server/src/api/controllers/static/templates/app.hbs new file mode 100644 index 0000000000..cce07180ae --- /dev/null +++ b/packages/server/src/api/controllers/static/templates/app.hbs @@ -0,0 +1,10 @@ + + + + + {{{head}}} + + + {{{body}}} + + \ No newline at end of file diff --git a/packages/server/src/api/controllers/static/templates/index.template.html b/packages/server/src/api/controllers/static/templates/index.template.html deleted file mode 100644 index e7cf633277..0000000000 --- a/packages/server/src/api/controllers/static/templates/index.template.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - {{ title }} - - - - - {{ each(options.stylesheets) }} - - {{ /each }} - - {{ each(options.screenStyles) }} - {{ if(options.production) }} - - {{#else}} - - {{ /if }} - {{ /each }} - - {{ if(options.pageStyle) }} - {{ if(options.production) }} - - {{#else}} - - {{ /if }} - {{ /if }} - - - - - {{ if(options.production) }} - - - {{#else}} - - - {{ /if }} - - - - - - - \ No newline at end of file diff --git a/packages/server/src/api/routes/static.js b/packages/server/src/api/routes/static.js index 5c33900eca..e832df17c4 100644 --- a/packages/server/src/api/routes/static.js +++ b/packages/server/src/api/routes/static.js @@ -33,6 +33,6 @@ router .get("/componentlibrary", controller.serveComponentLibrary) .get("/assets/:file*", controller.serveAppAsset) .get("/attachments/:file*", controller.serveAttachment) - .get("/:appId/:path*", controller.serveApp) + .get("/:appId/:path*", controller.serveAppNew) module.exports = router diff --git a/packages/server/src/db/client.js b/packages/server/src/db/client.js index c796ab0160..1d025a1402 100644 --- a/packages/server/src/db/client.js +++ b/packages/server/src/db/client.js @@ -38,6 +38,6 @@ function replicateLocal() { }) } -//replicateLocal() +replicateLocal() module.exports = Pouch diff --git a/packages/server/src/utilities/builder/compileStaticAssetsForPage.js b/packages/server/src/utilities/builder/compileStaticAssetsForPage.js index 598f7745fb..4e3b7ea75e 100644 --- a/packages/server/src/utilities/builder/compileStaticAssetsForPage.js +++ b/packages/server/src/utilities/builder/compileStaticAssetsForPage.js @@ -1,27 +1,25 @@ -const { constants, copyFile, writeFile, readFile } = require("fs-extra") -const { join, resolve } = require("../centralPath") -const sqrl = require("squirrelly") -const { convertCssToFiles } = require("./convertCssToFiles") -const publicPath = require("./publicPath") +const { ensureDir, constants, copyFile, writeFile } = require("fs-extra") +const { join } = require("../centralPath") +const { convertCssToBundle } = require("./convertCssToFiles") const { budibaseAppsDir } = require("../budibaseDir") module.exports = async (appId, pageName, pkg) => { - const appPath = join(budibaseAppsDir(), appId) + const pagePath = join(budibaseAppsDir(), appId, "public", pageName) pkg.screens = pkg.screens || [] - await convertCssToFiles(publicPath(appPath, pageName), pkg) + await ensureDir(pagePath) - await buildIndexHtml(appId, pageName, appPath, pkg) + await convertCssToBundle(pagePath, pkg) - await buildFrontendAppDefinition(appId, pageName, pkg, appPath) + await buildFrontendAppDefinition(pagePath, pkg) - await copyClientLib(appPath, pageName) + await copyClientLib(pagePath) } -const copyClientLib = async (appPath, pageName) => { +const copyClientLib = async pagePath => { const sourcepath = require.resolve("@budibase/client") - const destPath = join(publicPath(appPath, pageName), "budibase-client.js") + const destPath = join(pagePath, "budibase-client.js") await copyFile(sourcepath, destPath, constants.COPYFILE_FICLONE) @@ -32,44 +30,8 @@ const copyClientLib = async (appPath, pageName) => { ) } -const buildIndexHtml = async (appId, pageName, appPath, pkg) => { - const appPublicPath = publicPath(appPath, pageName) - - const stylesheetUrl = s => (s.startsWith("http") ? s : `/${appId}/${s}`) - - const templateObj = { - title: pkg.page.title || "Budibase App", - favicon: `${pkg.page.favicon || "/_shared/favicon.png"}`, - stylesheets: (pkg.page.stylesheets || []).map(stylesheetUrl), - screenStyles: pkg.screens.filter(s => s._css).map(s => s._css), - pageStyle: pkg.page._css, - appId, - pageName, - } - - const indexHtmlTemplate = await readFile( - resolve(__dirname, "index.template.html"), - "utf8" - ) - - const indexHtmlPath = join(appPublicPath, "index.html") - const deployableHtmlPath = join(appPublicPath, "index.production.html") - - const indexHtml = sqrl.Render(indexHtmlTemplate, templateObj) - const deployableHtml = sqrl.Render(indexHtmlTemplate, { - ...templateObj, - production: true, - }) - - await writeFile(indexHtmlPath, indexHtml, { flag: "w+" }) - await writeFile(deployableHtmlPath, deployableHtml, { flag: "w+" }) -} - -const buildFrontendAppDefinition = async (appId, pageName, pkg) => { - const appPath = join(budibaseAppsDir(), appId) - const appPublicPath = publicPath(appPath, pageName) - - const filename = join(appPublicPath, "clientFrontendDefinition.js") +const buildFrontendAppDefinition = async (pagePath, pkg) => { + const filename = join(pagePath, "clientFrontendDefinition.js") delete pkg.page._css diff --git a/packages/server/src/utilities/builder/convertCssToFiles.js b/packages/server/src/utilities/builder/convertCssToFiles.js index c81f9497ec..6146dea91f 100644 --- a/packages/server/src/utilities/builder/convertCssToFiles.js +++ b/packages/server/src/utilities/builder/convertCssToFiles.js @@ -1,11 +1,15 @@ -const crypto = require("crypto") -const { ensureDir, emptyDir, writeFile } = require("fs-extra") +const { writeFile } = require("fs-extra") const { join } = require("../centralPath") -module.exports.convertCssToFiles = async (publicPagePath, pkg) => { - const cssDir = join(publicPagePath, "css") - await ensureDir(cssDir) - await emptyDir(cssDir) +/** + * Reads the _css property of all pages and screens in the budibase application, and creates a singlular CSS + * bundle for the app at /public/bundle.css. + * @param {*} publicPagePath - path to the public assets directory of the budibase application + * @param {*} pkg - app package information + * @param {*} pageName - the pagename of the page we are compiling CSS for. + */ +module.exports.convertCssToBundle = async (publicPagePath, pkg) => { + let cssString = "" for (let screen of pkg.screens || []) { if (!screen._css) continue @@ -13,31 +17,10 @@ module.exports.convertCssToFiles = async (publicPagePath, pkg) => { delete screen._css continue } - screen._css = await createCssFile(cssDir, screen._css) + cssString += screen._css } - if (pkg.page._css) { - pkg.page._css = await createCssFile(cssDir, pkg.page._css) - } -} - -module.exports.getHashedCssPaths = (cssDir, _css) => { - const fileName = - crypto - .createHash("md5") - .update(_css) - .digest("hex") + ".css" - - const filePath = join(cssDir, fileName) - const url = `/css/${fileName}` - - return { filePath, url } -} - -const createCssFile = async (cssDir, _css) => { - const { filePath, url } = module.exports.getHashedCssPaths(cssDir, _css) - - await writeFile(filePath, _css) - - return url + if (pkg.page._css) cssString += pkg.page._css + + writeFile(join(publicPagePath, "bundle.css"), cssString) } diff --git a/packages/server/src/utilities/builder/publicPath.js b/packages/server/src/utilities/builder/publicPath.js deleted file mode 100644 index 03917d4370..0000000000 --- a/packages/server/src/utilities/builder/publicPath.js +++ /dev/null @@ -1,3 +0,0 @@ -const { join } = require("../centralPath") - -module.exports = (appPath, pageName) => join(appPath, "public", pageName) diff --git a/packages/server/src/utilities/initialiseBudibase.js b/packages/server/src/utilities/initialiseBudibase.js index 4e6902a50f..1a88b4d1c2 100644 --- a/packages/server/src/utilities/initialiseBudibase.js +++ b/packages/server/src/utilities/initialiseBudibase.js @@ -1,6 +1,6 @@ const { existsSync, readFile, writeFile, ensureDir } = require("fs-extra") const { join, resolve } = require("./centralPath") -const Sqrl = require("squirrelly") +const handlebars = require("handlebars") const uuid = require("uuid") module.exports = async opts => { @@ -31,7 +31,8 @@ const createDevEnvFile = async opts => { } ) opts.cookieKey1 = opts.cookieKey1 || uuid.v4() - const config = Sqrl.Render(template, opts) + const hbTemplate = handlebars.compile(template) + const config = hbTemplate.render(opts) await writeFile(destConfigFile, config, { flag: "w+" }) } } diff --git a/packages/server/yarn.lock b/packages/server/yarn.lock index 048694e6de..9e6b472dac 100644 --- a/packages/server/yarn.lock +++ b/packages/server/yarn.lock @@ -200,10 +200,10 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" -"@budibase/client@^0.3.4": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@budibase/client/-/client-0.3.4.tgz#aca2d13170dae870d069a56f53519d9fbb4bdc00" - integrity sha512-zs9Jnr1CzvgZY4NrliatqDUm0gVhlcQkpdsMblO+3zRcwBzRXAeFyzwMtGpcbiQm29zHjPBOivmQQUMxgi3lUg== +"@budibase/client@^0.3.6": + version "0.3.7" + resolved "https://registry.yarnpkg.com/@budibase/client/-/client-0.3.7.tgz#8ed2d40d91ba3788a69ee5db5078f757adb4187f" + integrity sha512-EgpHfw/WOUYeCG4cILDbaN2WFBDSPS698Z+So7FP5l+4E1fvmqtpXVKJYsviwYEx8AKKYyU3nuDi0l6xzb5Flg== dependencies: deep-equal "^2.0.1" mustache "^4.0.1" @@ -7146,11 +7146,6 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -squirrelly@^7.5.0: - version "7.9.2" - resolved "https://registry.yarnpkg.com/squirrelly/-/squirrelly-7.9.2.tgz#f8b0a08201b73653351afe9f7f24878237d2751a" - integrity sha512-QsLQ43p7/p5LfhqMsUM1PP0DU/YuirA/pZ1RQKU8/qZjWHD8uTblpfPoCVkD9VLrS1jCJ+2gqECv3amlPgrLCA== - sshpk@^1.7.0: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" From 13311ae68058b7d37a58e7c6fec6f6506eb169ff Mon Sep 17 00:00:00 2001 From: Martin McKeaveney Date: Thu, 12 Nov 2020 10:36:15 +0000 Subject: [PATCH 10/25] JSDoc for static asset compilation --- .../builder/compileStaticAssetsForPage.js | 47 ++++++++++++++ .../utilities/builder/convertCssToFiles.js | 26 -------- .../src/utilities/builder/index.template.html | 63 ------------------- 3 files changed, 47 insertions(+), 89 deletions(-) delete mode 100644 packages/server/src/utilities/builder/convertCssToFiles.js delete mode 100644 packages/server/src/utilities/builder/index.template.html diff --git a/packages/server/src/utilities/builder/compileStaticAssetsForPage.js b/packages/server/src/utilities/builder/compileStaticAssetsForPage.js index 4e3b7ea75e..9e2dc23ede 100644 --- a/packages/server/src/utilities/builder/compileStaticAssetsForPage.js +++ b/packages/server/src/utilities/builder/compileStaticAssetsForPage.js @@ -3,6 +3,15 @@ const { join } = require("../centralPath") const { convertCssToBundle } = require("./convertCssToFiles") const { budibaseAppsDir } = require("../budibaseDir") +/** + * Compile all the non-db static web assets that are required for the running of + * a budibase application. This includes CSS, the JSON structure of the DOM and + * the client library, a script responsible for reading the JSON structure + * and rendering the application. + * @param {} appId - id of the application we want to compile static assets for + * @param {*} pageName - name of the page that the assets will be served for + * @param {*} pkg - app package information/metadata + */ module.exports = async (appId, pageName, pkg) => { const pagePath = join(budibaseAppsDir(), appId, "public", pageName) @@ -17,6 +26,36 @@ module.exports = async (appId, pageName, pkg) => { await copyClientLib(pagePath) } +/** + * Reads the _css property of a page and its screens, and creates a singular CSS + * bundle for the page at /public//bundle.css + * @param {String} publicPagePath - path to the public assets directory of the budibase application + * @param {Object} pkg - app package information + * @param {"main" | "unauthenticated"} pageName - the pagename of the page we are compiling CSS for. + */ +module.exports.convertCssToBundle = async (publicPagePath, pkg) => { + let cssString = "" + + for (let screen of pkg.screens || []) { + if (!screen._css) continue + if (screen._css.trim().length === 0) { + delete screen._css + continue + } + cssString += screen._css + } + + if (pkg.page._css) cssString += pkg.page._css + + writeFile(join(publicPagePath, "bundle.css"), cssString) +} + +/** + * Copy the budibase client library and sourcemap from NPM to /public/. + * The client library is then served as a static asset when the budibase application + * is running in preview or prod + * @param {String} pagePath - path to write the client library to + */ const copyClientLib = async pagePath => { const sourcepath = require.resolve("@budibase/client") const destPath = join(pagePath, "budibase-client.js") @@ -30,9 +69,17 @@ const copyClientLib = async pagePath => { ) } +/** + * Build the frontend definition for a budibase application. This includes all page and screen information, + * and is injected into the budibase client library to tell it how to start constructing + * the DOM from components defined in the frontendDefinition. + * @param {String} pagePath - path to the public folder of the page where the definition will be written + * @param {Object} pkg - app package information from which the frontendDefinition will be built. + */ const buildFrontendAppDefinition = async (pagePath, pkg) => { const filename = join(pagePath, "clientFrontendDefinition.js") + // Delete CSS code from the page and screens so it's not injected delete pkg.page._css for (let screen of pkg.screens) { diff --git a/packages/server/src/utilities/builder/convertCssToFiles.js b/packages/server/src/utilities/builder/convertCssToFiles.js deleted file mode 100644 index 6146dea91f..0000000000 --- a/packages/server/src/utilities/builder/convertCssToFiles.js +++ /dev/null @@ -1,26 +0,0 @@ -const { writeFile } = require("fs-extra") -const { join } = require("../centralPath") - -/** - * Reads the _css property of all pages and screens in the budibase application, and creates a singlular CSS - * bundle for the app at /public/bundle.css. - * @param {*} publicPagePath - path to the public assets directory of the budibase application - * @param {*} pkg - app package information - * @param {*} pageName - the pagename of the page we are compiling CSS for. - */ -module.exports.convertCssToBundle = async (publicPagePath, pkg) => { - let cssString = "" - - for (let screen of pkg.screens || []) { - if (!screen._css) continue - if (screen._css.trim().length === 0) { - delete screen._css - continue - } - cssString += screen._css - } - - if (pkg.page._css) cssString += pkg.page._css - - writeFile(join(publicPagePath, "bundle.css"), cssString) -} diff --git a/packages/server/src/utilities/builder/index.template.html b/packages/server/src/utilities/builder/index.template.html deleted file mode 100644 index e7cf633277..0000000000 --- a/packages/server/src/utilities/builder/index.template.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - {{ title }} - - - - - {{ each(options.stylesheets) }} - - {{ /each }} - - {{ each(options.screenStyles) }} - {{ if(options.production) }} - - {{#else}} - - {{ /if }} - {{ /each }} - - {{ if(options.pageStyle) }} - {{ if(options.production) }} - - {{#else}} - - {{ /if }} - {{ /if }} - - - - - {{ if(options.production) }} - - - {{#else}} - - - {{ /if }} - - - - - - - \ No newline at end of file From 9e190ac1ec204a7f6f35b1eff1c7b05cb2b1eea9 Mon Sep 17 00:00:00 2001 From: Martin McKeaveney Date: Thu, 12 Nov 2020 10:41:49 +0000 Subject: [PATCH 11/25] tidy up --- .../src/api/controllers/static/index.js | 32 +------------------ packages/server/src/api/routes/static.js | 2 +- packages/server/src/db/client.js | 2 +- .../builder/compileStaticAssetsForPage.js | 5 ++- .../src/utilities/initialiseBudibase.js | 4 +-- 5 files changed, 7 insertions(+), 38 deletions(-) diff --git a/packages/server/src/api/controllers/static/index.js b/packages/server/src/api/controllers/static/index.js index 19f51a06cb..462a65ad9b 100644 --- a/packages/server/src/api/controllers/static/index.js +++ b/packages/server/src/api/controllers/static/index.js @@ -141,16 +141,13 @@ exports.performLocalFileProcessing = async function(ctx) { } } -exports.serveAppNew = async function(ctx) { +exports.serveApp = async function(ctx) { const App = require("./templates/BudibaseApp.svelte").default - // Need to get app information here const db = new CouchDB(ctx.params.appId) const appInfo = await db.get(ctx.params.appId) - console.log("INFO", appInfo) - const { head, html, css } = App.render({ title: appInfo.name, pageName: @@ -170,33 +167,6 @@ exports.serveAppNew = async function(ctx) { }) } -exports.serveApp = async function(ctx) { - const mainOrAuth = - ctx.auth.authenticated === AuthTypes.APP ? "main" : "unauthenticated" - - // default to homedir - const appPath = resolve( - budibaseAppsDir(), - ctx.params.appId, - "public", - mainOrAuth - ) - - const appId = ctx.user.appId - - if (env.CLOUD) { - const S3_URL = `https://${appId}.app.budi.live/assets/${appId}/${mainOrAuth}/${ctx.file || - "index.production.html"}` - - const response = await fetch(S3_URL) - const body = await response.text() - ctx.body = body - return - } - - await send(ctx, ctx.file || "index.html", { root: ctx.devPath || appPath }) -} - exports.serveAttachment = async function(ctx) { const appId = ctx.user.appId const attachmentsPath = resolve(budibaseAppsDir(), appId, "attachments") diff --git a/packages/server/src/api/routes/static.js b/packages/server/src/api/routes/static.js index e832df17c4..5c33900eca 100644 --- a/packages/server/src/api/routes/static.js +++ b/packages/server/src/api/routes/static.js @@ -33,6 +33,6 @@ router .get("/componentlibrary", controller.serveComponentLibrary) .get("/assets/:file*", controller.serveAppAsset) .get("/attachments/:file*", controller.serveAttachment) - .get("/:appId/:path*", controller.serveAppNew) + .get("/:appId/:path*", controller.serveApp) module.exports = router diff --git a/packages/server/src/db/client.js b/packages/server/src/db/client.js index 1d025a1402..1477ee4315 100644 --- a/packages/server/src/db/client.js +++ b/packages/server/src/db/client.js @@ -38,6 +38,6 @@ function replicateLocal() { }) } -replicateLocal() +// replicateLocal() module.exports = Pouch diff --git a/packages/server/src/utilities/builder/compileStaticAssetsForPage.js b/packages/server/src/utilities/builder/compileStaticAssetsForPage.js index 9e2dc23ede..c91ba24bb3 100644 --- a/packages/server/src/utilities/builder/compileStaticAssetsForPage.js +++ b/packages/server/src/utilities/builder/compileStaticAssetsForPage.js @@ -1,6 +1,5 @@ const { ensureDir, constants, copyFile, writeFile } = require("fs-extra") const { join } = require("../centralPath") -const { convertCssToBundle } = require("./convertCssToFiles") const { budibaseAppsDir } = require("../budibaseDir") /** @@ -19,7 +18,7 @@ module.exports = async (appId, pageName, pkg) => { await ensureDir(pagePath) - await convertCssToBundle(pagePath, pkg) + await buildPageCssBundle(pagePath, pkg) await buildFrontendAppDefinition(pagePath, pkg) @@ -33,7 +32,7 @@ module.exports = async (appId, pageName, pkg) => { * @param {Object} pkg - app package information * @param {"main" | "unauthenticated"} pageName - the pagename of the page we are compiling CSS for. */ -module.exports.convertCssToBundle = async (publicPagePath, pkg) => { +const buildPageCssBundle = async (publicPagePath, pkg) => { let cssString = "" for (let screen of pkg.screens || []) { diff --git a/packages/server/src/utilities/initialiseBudibase.js b/packages/server/src/utilities/initialiseBudibase.js index 1a88b4d1c2..4073c2be69 100644 --- a/packages/server/src/utilities/initialiseBudibase.js +++ b/packages/server/src/utilities/initialiseBudibase.js @@ -31,8 +31,8 @@ const createDevEnvFile = async opts => { } ) opts.cookieKey1 = opts.cookieKey1 || uuid.v4() - const hbTemplate = handlebars.compile(template) - const config = hbTemplate.render(opts) + const envTemplate = handlebars.compile(template) + const config = envTemplate(opts) await writeFile(destConfigFile, config, { flag: "w+" }) } } From 1d980252918deba66f06aecb9ac9d820e3dba44c Mon Sep 17 00:00:00 2001 From: Martin McKeaveney Date: Thu, 12 Nov 2020 10:45:05 +0000 Subject: [PATCH 12/25] lint :sparkles: --- packages/server/src/api/controllers/static/index.js | 1 - .../src/api/controllers/static/templates/BudibaseApp.svelte | 5 +---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/server/src/api/controllers/static/index.js b/packages/server/src/api/controllers/static/index.js index 462a65ad9b..b048bbd9fe 100644 --- a/packages/server/src/api/controllers/static/index.js +++ b/packages/server/src/api/controllers/static/index.js @@ -12,7 +12,6 @@ const { budibaseAppsDir, budibaseTempDir, } = require("../../../utilities/budibaseDir") -const { getPageParams } = require("../../../db/utils") const CouchDB = require("../../../db") const setBuilderToken = require("../../../utilities/builder/setBuilderToken") const fileProcessor = require("../../../utilities/fileProcessor") diff --git a/packages/server/src/api/controllers/static/templates/BudibaseApp.svelte b/packages/server/src/api/controllers/static/templates/BudibaseApp.svelte index 648829891e..7d6ad8141c 100644 --- a/packages/server/src/api/controllers/static/templates/BudibaseApp.svelte +++ b/packages/server/src/api/controllers/static/templates/BudibaseApp.svelte @@ -24,13 +24,12 @@ {title} - + - diff --git a/packages/standard-components/src/RichText.svelte b/packages/standard-components/src/RichText.svelte index a033d3cc1d..af0c190578 100644 --- a/packages/standard-components/src/RichText.svelte +++ b/packages/standard-components/src/RichText.svelte @@ -1,5 +1,5 @@ - - \ No newline at end of file + + From a9cf06e357d7778083c31c7e4865d91ab523eed3 Mon Sep 17 00:00:00 2001 From: Martin McKeaveney Date: Sat, 14 Nov 2020 17:43:52 +0000 Subject: [PATCH 22/25] linux deb package, builder icon and auto update support for linux --- packages/server/build/Hosting Portal-2.png | Bin 53286 -> 0 bytes packages/server/build/entitlements.mac.plist | 0 packages/server/build/icon.icns | Bin packages/server/build/icon.png | Bin packages/server/build/icons/128x128.png | Bin 0 -> 4058 bytes packages/server/build/icons/16x16.png | Bin 0 -> 940 bytes packages/server/build/icons/256x256.png | Bin 0 -> 8258 bytes packages/server/build/icons/32x32.png | Bin 0 -> 1319 bytes packages/server/build/icons/48x48.png | Bin 0 -> 1764 bytes packages/server/build/icons/512x512.png | Bin 0 -> 19431 bytes packages/server/build/icons/64x64.png | Bin 0 -> 2161 bytes packages/server/package.json | 13 +- packages/server/src/electron.js | 1 + packages/server/yarn.lock | 360 +++++++++++++++---- 14 files changed, 294 insertions(+), 80 deletions(-) delete mode 100644 packages/server/build/Hosting Portal-2.png mode change 100644 => 100755 packages/server/build/entitlements.mac.plist mode change 100644 => 100755 packages/server/build/icon.icns mode change 100644 => 100755 packages/server/build/icon.png create mode 100644 packages/server/build/icons/128x128.png create mode 100644 packages/server/build/icons/16x16.png create mode 100644 packages/server/build/icons/256x256.png create mode 100644 packages/server/build/icons/32x32.png create mode 100644 packages/server/build/icons/48x48.png create mode 100644 packages/server/build/icons/512x512.png create mode 100644 packages/server/build/icons/64x64.png diff --git a/packages/server/build/Hosting Portal-2.png b/packages/server/build/Hosting Portal-2.png deleted file mode 100644 index c42db9bd8f8cf0f3447d5826521e07167445f70f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53286 zcmeFZWmuG9*EKvd3^J5}q|zZF4NAu#NQs0bM3X)Ugt!pt11xUUBZJvAcRVaaewhqpkj;7}K74F;LceXaa zt#BOz5s8V>GPI)6B9p3ev1DfH)U>_&&^1Sz@G{|J?W-?JDg#DGh3pfRgoc>r@9nO3 zCV%M^5v)3Sp>{*vmw)j&Sz~QkAOrgj(Xdnr?-RVsL;VcwQYHJr>hn>rm!66XKDDka z8oR&hyOp|@=CfL1xrRMo@m4o6o(xLytbm(RVA3TF9WKck7ZR31dG3Xd1}&%I8x@$4 z8otK|{c+h(KE~e%Mo-i8%j9Xv8Jy_Nif421!_m<7Y^^qTsP|z!z4W3U-LBbu89%a- z*Sq|O`L_laDgPL2i)pUOzHn?UO`Gr}Vsv}czC6JZ|GTfo8Mkbf-puI`F$eO9a5$Cnbb3Zg1Z@zt$E`N-ed|>BSN;5H>_&lCO`dr+| z*t5ddBx`a8dBZqwYtpmwKSVP6&xHtWaZPfEcL~q6YSs_tzJ1)3Qt#eac1>?{Qyg9w zQK|oIquKe$PBU$DZf5b?vo;?ux#PoXFU4Iy=XBAP1>gCtkVI~r<5x)u!Q_p>;Q=q? zWp?K#Pm4yBiLox)T$)h|;CYmJUY~c$(C+no*G&RS;ePs?6ibJw+Zkta#Zk_Ig?G>8 zYDCAV4RKd2E*)qzbyE7K`#u!PMFrFl7UN>GC-a4U#Ji=7MRJcFd2XCy(CSU_`Evqf z`D7O(jbB($QqR>%Y>JgU?WnK$lyKV8VjO%>-dS?xUYJx6#rsRgv3V4I_cwAM8kmzx z`*R7yq**UAT=*W`Wh9`q8}B3lW%7!YxV8J3<~`}XwZlPW+Z#p_!e39SqXlojetu(A zw4^G-*Aqx$?n_~#d^=vridomEvJoX9U^)E#4k_h3bzdX#u3D}L>sVFx=prX6@=|Ni!3ulblC>~5c!{SsjZxyQ}k$7Yubg{~w%TbvKi zp$ctLiM7%U8?w`*#$FrSMsGhCs3IcO=TS&GBB-m8-dH~3nT#!gB+>+;nwjmXx>|9@ zutl~)hTad?)5a_M;!pJNE$`MI3V8aT^e>Dwy5!Aq2YwJ1PputabNwoXJj;bx#sok! z(tWkC4DiK*Fpc@ZbCBfuESK z4DcWGo?ky<8L&Tlz=<=k{%m7WgFPT==e(N04_rsZyDkt2)pN{$sFGW70yx55>pQxx zy0=us%pL4_Oz%0E-RJSNbHuz0BH<|pHtp`anlgCW+1k5^c}g<<+(Qg(V_xQEV)(g> z>jOz9-CODmvJTGo8LshM<>6zJ!ed}ykZ`_dA$D6%{`cF#Z<0(_uC9(^yu2PB9y}g` zJPyv5y!@h~qP%(_OlJlpgOpwNKX{DVv*-Qj^^CS94C+ zFI((?<09oo@7Y_hodK~?0J$81DusKl4QC+U+5e1Yn3`b_VWshgC*c?>J>C}parb5R*J|lf7Q<#utg)qw@93DBy&<%ipI4`lQ6pgxvPAshW!YPY%s~e0tb4^x;7iIj1(+ z6xjU~>+Z|nxDj1mhpwr8Du0|qrw%|SC%kTVWjM;P%AK5A*q)1mTklT1-d#fM&oy=R z!8mmuK zWd<7i)R?|(^fhM&k{*9ONB$A|`O*|G>J~i-YM(Z0yn;kD2S?)pL#wv4XS&nIUj&E@&ZE!aUmhK zP}VSgsqJ@xd#O!Pl-Ut9g+?ETH0~DG9NM(j2ArM7Za!B+T|u;`NmhyY9lDagHKY9v z(k2MlIpWa3xdIS-N3g!vw{B)a%7a=tdv%Qcw5qo{#jUR*^Qh;Ko(fvxwJuy8EqBWF zJUiJF@35D`zQW9B-J8|g-xT@#;nhuGS3fjecVB%I2=iljXVw&Hw$S_PLt>hQ*L%<1 z@0JhJ_g03J(ww>uN2@%tcMR-0(tXk$^lN;*E`6pI>{F0g`kK!MH(n;!ZhE-gWI^CZ#TOFxr+Fs~m&RzSLP$jQSa1%&+o7pA8@LUxFbB|qL zGIu2NGgIJfpSE%ql8w-jL}(D^MO|Dn_p27{WeCE~Gk<#QI;NDXQ&@mcr*4#>RyUDf zHl}>gDvh91NfF_Xxf5;&$4AJ=ZJJ+55%E9vymzx6Yc`l6+~i-5pZ5ci{xKld?gb2w zKqD~s$iQxHr(aWTz^(t{rgU9UFEyR&mH4IWNx&j`CMn`liip$8 ziNtVPargd6Q#h<1?HqaRv$vX$&qT~6;ySPH4Qm8I@Sti23J;?6BF;?wg8i3Spwh_J zDMHgE@`aS4*r7KAIhU(1T^1W}r&L#M7w3Dlu>8H)Ev!vJk*|`${=tM2(TqM}@|5XF zxs!E(eMdMFZWmsSmfY1{5ej?otzaOwX}3jFe?*q1b6x`CojvD&kXf8#z2UEIHAO8<(RYwd@ zk#jw>c4Ei6ZBBnF ziHRqIlX|wZ6k4Fe^T?`lao6bMb#MO}LR^QXho9z=2EiT=XJSk;+|sN*)fUSi-5=V zTn(56HzU0ll9(~=SzSo%%=^h?IGtzSlw&rhP5~L5%~P1;?}%*I{LCEQwNFcbW)8{> zO|?0XqurGqYI}b(GNkJ?n_8O01n1s}SY0OhTJ70s&`HG;6dOZa>&(pXARQ^KyuUo* zJGHb;rHgIDZ}tERM)B6{zceul1;{nFnH65`N5e}u)l$O`V=A;XYCiUim+pH0t?xee z^^Acv{pk(E-&paMcY-ByKw9A|xDI*U!1GQOeNu5(_}()FL_%q|k6nzki|sl#iyd<9 zT-Phyf^>@e^Zb_Ea#NlS6x}`DJoVT9%dF=Kp$?|=F4f*))~0~rYl3_zqYnR!J)=P(52V^V%?uigqa~%3LkR*9pqmq z-AxS+{(fua6>#?4YKns2SM%pwNCyNs)c@Yde~j1v+fU>;EBBQ?CVacG zVB`Krc1|0UO_PT^OHEir66(>^!UZ^bTH_(Swa4#80#1GPM16Lb%>b?0xp?ImFoK(e z4}|ZxCdj07wi=W>n(_yn9-D!={^l6aL^6d~8V(-gniQ!*y$^4HI4Rg%-Vt?Mydxu? z4S4JAupN=#VcFdb;`nfXde{}4%!(V??DVa`unEIjlH$+r_Nhr5a_N=i*!u}fEss_S zlUKPe^xBi9i#6+)*?)YsjN!s+QU~|=2UP`9hxf(Y&Ir>iNMPj&n&K zEf-@K0>Ula*1O>yg!ABQ9tW#ximt>~yCCh_H|x)WmYrD)TH?Gxk`C1y@|zuP{xeT> zBJKUuHmAz-eovtjPB5hcx;}F2AW;-B{ZdmD<#A;9*3WH^-8L^vO-zeAO z;8_{I(Wece|BXu-4%jJJFC5f95`wF=fJIA$$Fk`>uXum7keyE9I*;LO1<2yHtuAR} zM<3a=`Q&uK=R`c$P3oOR`LCu?>clH?3AP5l-)cOR^x5s#ezNyNuz9x0+3PF^$IUun za{`)4XvKU#MckvHAO=p-dS8>SIcuz>*tV_|!vh*$tPLh|j$@P!M{@GlWcietEIgy#|YA=uuhN3Y7-M$`6-Jxr-aETXF|* z>`$DFZBB!1n=Uk)B*~2LWPL8;%0f`_0wXr&e;HBbZ?Y$WGk#Q(}sM%NumAx8{V{ev{8#83S z~-Nk;-PJ(J&Q8TOp0L+PEgs8KHv)Sm1PW9yVy zcBXt;Oqg%~ykSne=H#2WwGs_)SyDY|ZCJD3izMe<1T-$X#^fH9b_T^NA0B6QW>+?< zJ)A1kT{;pNGqPBB5a~iLZt&6jL%}UC9|YAqW6_y1((Z$^4hR3oVy9kGi%nMNR6cQ4 zo1IbF5uZzWj<`2{|AszbFL8zLcmHGvDs89&0|96DLyn9(UCNAN%E!|^^$%RvBxKtc zCY-TFO8a^;`&8EhPv+H&RoId{%|)HapPuJBU~(EMcUHrB6zj$!#cNz6A@$lr9!Jj5 zyy5-*Hk(Yg!Ssn6{lT%~5$9c5W?k4llE2G`rRMIJTpLdt$3uSC2pA%rnRUxPui;_) z#@Kb_`{&aVXm*Zqza9IUYb)-#xJ}6Ube#f&r{FHl8k-_W*=|ejx93yNgkT@M%;yqR zez@DnKR?ktPdN0X?4iKM3p)N*<{D1k>h2jMt2}AgK09Yp`WH6mIQM%N=7Wy5ACAM_mM_*ke#HvRG>EDdV z7vvaMIA0d}HYO^y!y?TaI@COZ;J=Q_z=MWXuL@eU=eUJ(h%Yv4`E2&$rVBe5;W>Bj zBGmZ~%v=ZC>^~?!p?FDmuqdLMmr2+UElYk7$k4r1Sew=fWxi?Vx7@erH`keJJt-SR zz#@-0-b|`hf#P-Iq}QGvE|tX8-G-ZsoI~M%{h(|*a)qe=LJemL2TU)2v+CC0hn@$B zLVasRIsonUU?iPuMll`p`T2VaFCXiyA`}#!>=;l{stM!f5AmG0exWc7inbhT)%|b0&_MAaPM%KQW07zV%$_mERlv zk(NdI%$vYbiKp?vCtr#R)rTat2d%xT)h z%p@;Gd_}(^Zzt66T_zHkk)dqOG*D4;8gB4e`>0cu|KhRBbNAC9VfDcV4flT!Ih7Jd z<9V}E1hg>~M0Z7OAVlX;MQfW}0Kv(eWC4%MHBtMUp40IPw}qN$cD+)!(TTP$+#0yPkW6C`sXCw$Qo{lSOo7H|e#g}BJ-eo+SpuE))P6@6FP zI(@3j7dB6U{P7xlzWW5^F81Z#K@My5KS}{zYJ};R#HPzzloH8DAlyQnI~N|d!qFghn#=zLO+4q%TkkrnMZ7la_0|1okw z1QdMTK{_l$*DXKxk<}xHZUqL05Y^+_KQNUwzx8q|5?TGst(r&PwpmORqdx?q%8)X#Od}LYdYx*BoBIAe*QGab2fNmO-l2oHt5t zS#X>t9Z<7tB`X$s;JD*FT;c5tS|thTxd%N?F}^fOjlK{szQ9;hmCsZ?uR zqK6bWhm=(95kmFq+nYn4TMC|ymW$U+KZR`bFJ2hl^jM@UV@z186M}IactyG-q|>)X z?Zik-ro{6OHHv5AcrM?ImNF49YtGA-e~|fp~uK!JpzB^%n0q>n(Y)(N6$u;6<{X0PUs;!w4sVme&N5 z#t_}~M161*4!y6sFOV}a)y9A$eXHN%o9x?9y-;0JN47=wqm{l|cA|^#fl@X(SY(co zt0NcsvcHwi;R7w_R&(dKnKmzR_Pvw6abEY;k-G*!XuSVi$WE^a=%tfi*wVQGOHW#R z1|wLj-clV3+l`;?N;l>*uKB40FKurAnEvv(2}8zp(g8`Lz$kLLXYEe~9ln?K;0@i< z0~J+fM_FFmuy>oh&fjNbNCvd38wOF@NYofbMyB`9;y`~3sBS2yn$d-}!4R z322U`{oo77o4@12RWR863SBuU zztkCb4ALQk+oNG@VkUNE^Wn$6v0S%uYAye>(-Z3*X0*g@e7bjLhaJNth%4P2lFrkL zMOHm86VQQ;q-qix65HLfZ>HMGkF_~w`K;V-Nbk<=Mk6d7j}^TPTS&`TyW`n@V!fR~ zwWkvvgL>Kc>2BGZG`PUzk<2^xAmU{;z6iT=c?fDJ=7LPD@R%pF9aCU856N_fEm!8) z%C1w@AI++p5MaZo`Ue$kGOA)&G)oJq&I{%zW&GRK16osqg?MXNw6yg!xLMB4l^Xg~ zv1*4+y#7vY76rTJ`#ax^zm*c+OHi=O=HWG{_5Zkv7`aWnP&#aXGm4~TLY6LtJ%AM% zheO%h`5ldLCMNzN-p|8t798?Q=`WqV1x^3N_w0~PABug24XGd=Fhkz{tym@OQ70d7 z!QkUfH!eY_=`v;gxvwraA*5KFopa8UHo^y#T)J_sb5~qNom2`knzgn!ckBIMOA!>Z zN$w7szoF}Y;x6uP(v0c^WFmhkm!RabucZ;x3Ajx(aU%}w2zwH>o6)6Zt$p^? z_vJ)QZ>M=cWhE-E1;!IO)9cT*BMZ%&i!RKwQ@M! zzvkWj5_w+CEki0<-cp+0x-NEl>c&e#5(yJSsY8bQR{9wi{{lH9P(G=cGO94jX9t{$zb?evRXtPorV*WBOGpqw zGrEx!qPWp1klN0n`8tbp%5_BPASBp;c1{VaI#kdPFpM`MV)GK#40LK=;Qqd>GdtiO z_JcWh;JBU|IE%s7(L61;=3S+a*Bdxm>a~2tCaOg!;ZjuhiJ7@_1em3%?xT3?FVGDu zIq%`5KK(i^KTJz12y*cOp<fL;P*2l`Db5 z(D$>~Nqilw`Ev*ovar7~wIB$E(A6r|p(wYM z-o;i=M>LvWQc|H%dKV^uyLyZfHkKCF=b&LF?>o>IsVB(<{B&o7Z1 zJ^up(d}e?P$VU%hVZ{6ZitzIm{=EK!)2MS|qcKLVJXKFUtC=`h7244|ed(uH&yo|@ zs@7_@>B^+0FP4v*ut$_$2nk2ZRpcSk8a2tJ_9uc9F54fqY&BQ5G?XGjh_k+s&aunK zOha)t8@XA%POJT6?0rmvJ`bW5%29iDVQQ#Qvd(c7` z7oew66VU+u72u;^7DNx(bmb3|tE0UFp)s-&9MR9y6N(&yQKw zvh(ipU3VpBrrzrd3hnpnavmWVp1kk(iyjulcsMI}{Qrvj@|txdh|D)@MWB;}dW1AM zvD^W@V8cdo&()^61p?lW+qdnALT8F&zd2?ji21yX4GiZbSy9o=^v)yq+Y(qO(z0BeT^nDiTHj?BBi9EChZo6>Y z_*4`_e&4t_NmH(EmA)w#P z_i2Jo6~KVi<+=fDd;N(kVzguP+n=QlLLvV1HiwsuwSkFcJdWNVaB&oS3A2pd@{6eXwV>0dwuggSB zJ(DNw?i6*IW%02e4X;!PWQ@I`4|=Q5xLSGO%8s1b2v^5t->V9u#=iasGf91Ba8hW*txgD8mdY=By!3AD(w`74y)4G9I$imG1rWnhwr2zkfkuB9(I? zjEKHwMtAMwo>Ap9HMVD+-Uc#k0b}*G_nXgaJIXecppqpu-!N31lc-&WT zfK+htQ`G&%Po)yqt~_7akUPhEr=1iUcyhGIhW}MT{o&@_bR4$9PQ_>hY=)VB@GCq2 zVc_AU;?uuc6tEmfAD&vgz5OsR3QQxu3owZbaj{ke#q<&8=Vz%10(d=?aWp&C_g*m5 zl;M_eMv0BP58KhsIp`R99U)b6gsmCe=)*m{ctV^FPmV27MVm*n2Ye@$X0sAk2sops`g6rvtC8Ef1fZ5rf<*kK@zm4{}RTZTjqBF zE>TH3X@fNT2VZ|~q2d9b^xQ?oz-I2QZ5p*hQ z@FXw}iouUQ9!0(fo0Ii8^faK9z~k(W2n?WieR(hK1!8}%UVVE64A41dFdBR|-=zp{ z-kV0%2NN_k72wJR+F+bB=4i>;6#~OYX`(I`hF>tLnBV_+ztYWDx6;*`8&WqX8+M*> zK808!oG}Mo~*Oy3G_`v!4@`$v$nn}F*m$}-(gNc*S& zL?0MVwY0DNJvsZ&!8LzwTzLNo6Q@`RSrNODhNbm!Mo8sS9DIM(@AP0!6)DWp^i_Oo zzTK0HlXh>OrFr1S?rYiO0UhH3a=EahA7S(b`dufda9Ynu`2@|fz7C>_}?wwDrX_;{09oH7=S}%b{ z*p14Ul3&;A3lF_gu3F!Aex2qu=Qm#C_u;Md!Sv$~Gr9~8t}ho{`@YPj%2}oaB1QeS zI)s}R2XY@A^~j)y@l{jBw8W)m9NXE^8SqrsUQqd_FSgY*Y}~_YeRYh{o81njflhW+ zg9Sw%1Oc)=hcNRkrZ4v%sYobIYNM06;&+y1Pd?2h!VF$u@P>~CDqnrDS09HM1uYRh zgb3^fcIQX}`m5{VPsKD`k|?bPW6#7()|! zFJ@1vATvhljX~PY*X*DVI2iD=4-R()9x~TqSQ(tlpqwxNby@<@AZjcY<-;Y0#*kiF`N$w8xbM$aVkt3sS9fU;v zy0_jl7+yaRcyjjEF|Vt$t=C}@^-BqE1~yxMwj*rEj`LV$W)?IhwcVehKTC!YQ}P;d zfohugIew^clBWNSG*wR)c}}^yAPt<_gANBX&6QL!Ih@+k_rchq6+)GSoG>~SI;Bb= zxcB)Shi5={TCr$t*}~(qb9@pm4j*F)v-o0C>dzeTITjS;MJ@$-Zvcn}L1@k7FLjg5 z?glS?E6mpGe#%x}H-eaH><*ZPQQ1!FIvsr)$kln!M0_v2g2;x`fhR5i%-e&vv5B~J zjZT+V>ez8^S8R1vQZZ3y3h3&n+A?3myPdFg__tl9o^c54M5&*++#>{fe*!i}V6Z{r zr0HK$gp;@G4EKdTmp1a-8PMgT`rrthS3}%{9|&JPOzsOD7||w9b+Eq}Zr3hZw}KsG z^lCD6hPli*jwz1#p}>`(Vb&bA%!%vM=G0!7uqBz$e|bb8%v=Eg#h|Fp*E_%lq7=w@ z)DwZeA_2mzNO!MuKA5VsD>VIN+0weV(VbLpWu&5*r=>0=G9IBFSMC->f(s{~PZ1oi z52N=_mQpZc<%ph;&7)oxFSCjhkxxT}$GtQ zz(gp=u*T)0B{>Ua*Kq(HbT`@Eg%B5US-Lyr?kjp;WoDm3a2MQRt*j)D;kYDQCfKB6 zz%f^rENH2EiLhQSBz_I3Mb^%;v7$6GA<1VbbKCFlFF*NGl#GlgTU(HQOz*^rQ>Ofm z*DXu3LgBHY;lHGh}wym)@IY06N-K? z9f3bxyHYxAqcfVVn))o#zLYn0%ky@_*>TrdR;(DUlTkF6i1)VDPr0*@?f^^ap-(|$Kf%=^E*sBRwPHkI^217IU3Z&9G0*0L>0>vYU)95~u6-8`LH(NHbkv1Q{^=V9BO z`uIJc+>0&<<~6}M{?+!WzMvj$*?>@MV=(f1R((I??#>_A5$I94!T|?!9g%$d_guee zlDRSn#bhx`S`ReFclJN2 zUR^S<67#)QO?smBXPW=!d*H%=W))kdpoK)?;Tu%CzG*S;czXzh)~_>FPE+#5d02Y2 z9&2M}v+Yk8nl_QW>btK_y{f3W6{u^EH`|yJac)a*{S%y{4N>XQqi^+H0G4Ek!+_%~ zk8>Z`HMl>c>5a=`i7+Cn)8Y2Q&>?As$0W(*2qunM&&wNb`7eT>;}9(h z#cmJ*t1G8=o^H=O@}3s~AelzJ(aaWV7o_3bTN^h9jOT?X#?1jZ<#~np#GiTNrwGm` zhe^h8R}WCA`=NjlbnF5WL(IB_d_PBDv=d)(U-a4C9_IVQmNVW2x-eXQ<%BVJuUn$p zl6bR!Y*#cNt<|On*p|1mKU^6uqXcA*8@P8L%~Dz=#QWN^(U-vus@(H6N=ra#&bW4y z_hWxayE8OFEjyrmmRt9OjaGeb%6U484K%#yC6xQCkpP z^Nn4}lW>_;*|aGM82a)*rkNp#nr?D!eDFMth)vi7viy#Ao6Hv5FWh06@v^yS&(pn- z3gDxD{vq%WzxA9;_2@l@xlV4WUaN;}7NzmeS+f??QG3vahq% z6SBG+yuYVp(`B-Y_TK;JJ>zo(BaJ2OLIg&d83lUn0w09vod5`#`KW#(->i1|2oxqW zka0QiQ}>T|!vKZJEXC9h_(m}oXdOVGy!B=K_hQTJF1VmxNAo)H_PoZWf4W`NlY_dW zxEoAD?AqT}s7>n|1n)7`N@DWD{?x+Zeh+w1GZ z)9irk4A zSKtO2dP~Ztnx!hf#;?a1L_*L8Xv9k{vDWJO`6Nv`*KpGl*9>O9`mEsm-b%M6Jfl>W zAd+ZX_F7M6+2U=$`m=6<6k8~H4W)r7!LOoXbZVyc$nrG~IC0BoXT8V5untV4-@abc z2WdxtiiItUti7KG!Ze>br#?!@Y zR$&x{-~Nn!fHDN>uP$?d_7z_DhNT=tc6Cctq8@5b$ZotdtLy`(0Prcx%SLxkxD(mW)Un#HmEXtt*CfFscn+wIX=Vunc#K+5dD?E7SC46EwF**% zl|i3GZ42T^jjRw%?b57k36;oL2g#5Ow6WDPnfk9CJ zFSI^|4oizrj{EHywknHKCI74RD|vxiYL(gtjtOg&Wt!LP-K)@9gq2&@sVtG?od-?? zJ%#z@6~w7_V#n=%;8BZxR?!>exh3+_7YJ0kz#p}{8LqIYlFawQ6ST)~yOq;2_JZQSj|oK%J0D$O60ppX zzKdy)r;$>G$Qv9)(g;QMaYSC@@p+8y-0L00sM6SSj6>qt;z07|fBLZN-r*k4A3e7o zR9-3$N{&yJ_PzMh_BQDI9G?>2s(wN*JHvdVIjO5CE%%306+~xmisa$J;b6L*1Zv{+ zXsu8(p0RXhEq<*>f&Nx*W<$FjUd$}nggcy-l`H9{Xn#b)TAO-+*l6B^#FhppQKMYn zWqOJVwFGLrgM+RBqY>aOBwXq`1sy7Gdtf;uQ@84uUvvS@CCp+Xj+_g#G;H?G4Bd5y z+B*^62U6a!eE)IzLhVs;=h_ctK93S5sGzk0!5S{~;BnspjsdYJ0>Ce{9fQnN<&SYF zNsD#Q?G&P&I&SqAY;>-XZ*JY|P~e|l;>gypOi^{u^}c=1Ylv1jcHoL}1$U9!Y3FHv zD+BM2_1DhLL-+eL&HpTD>L!jrr{WV4-ur9J`yF%{g#ZY)2Np_;{)3+Yy7IerANfBN zry4+Ax^=RLKmTJHzo-qL2ms|^7Z=_?DD#Kf90E#p-8j{r`v2fZ6Brok?D+U^3jErd z=LCoHbE~w=`^B4>c^v^sF#}#e<^U6P&Tlr=fRUnfMY&a=*qp*b) zXghEP=10eOeSox)RhPh_*_#HuvKQ~+uD%Y0r6L;FbdNjT-lM(#4CFIR72#!+_XMmr zxoZNJR{UJH6+wzDC%`p2;wRiD>V{!FRQrI_l@?=h(|fW37B}1rM!^ct{z~dR5aJRqca6q9)Z5INRq_(GqOH-4&q);j4p1nfuGd zU6IZ70oCQeeampuSs0tF1$*Cc(j#)5+rOE{FK+3#QMPW79I#LKuGDM5Y-CEDEam6z zv_0Qr1}Ih2r-%4aNk-mp2CFj`Ds_Wf>*qhxF+BVJkCb}rfv{6cH=_R2+cuX8JYa6M1`V(#(7-?PzlVdyn%RAC zu>hnS9#*xq5!>QloHkSg)Bt>DdI^76J0BHFd#ix2tT9c}=dkqg@l29&X-d+$DnNKB zF&5yii~Jl5lTA?%%DxfKR?SFZxW6MFSey2vzXUXyeka{H7|5i&pkPcg0=kLPV+|=_ zdTyF&ON#Q^ntc^vgmc$bZ8`BMqz_|a02J&!X7$*{XKIISIq^)A_NFa>S(L!D8KG5! z8L>{I z&{zdGgPN=M-7a#6-Epv@MCNWDIw2`(uEU{rLU*~Va+9Au%uQnFwN{#l5!+h3))r>X z6kt;-sVmhrGgCc6i=*r}hI54PPsdK9SN7-Ld_SyC?TC#cA6}m*PavNuKE`NsvK#jp zs?GHMeKG5RQ1KLCjZ!?tp64H^se`}~EO~}irGu4j4}LDfET~$&5=$$t4fyy<;)@kP zXG$rJeT(+@r_g+^(3Y-D5ichLu|k%D5KW=` z{8xgi4Gz$i?^fq~GBMLB{;LKnGd7dPc`v1CRugevd1BkKYSH(E`>7`Q&BwqW7kPFv zewN>Hk)(NwBJQG~MOJ0cXAsHXVigq9>j+lrLP~o~*`(cGrDa)(A8Z{^T*_aYE{7vT zc$%x%YL0sOMd;G`uVPwqTI7!K>snpWJAZ-JpSXN)%%`sx$mwzl=cEBDTd?iWnMu7aA8Y!R6iX2G^qgQb zBRewE9HiRw2ifWV&tmJv-F{GciTB20?aLT4XJF*z61Ev9iInp+B5|<_qm!N*yfB>V z9EbiBkJ=+c?r#1-8-n?Aeh!v;ylO8~Wix6SW_eT`D9qwZ=TK24Kjncsc1+QV?Meie z75;is1ac;TX>lBZWj=l4P-t(B-%+o)G*AkkBwoB0$0pX}s>s}=wL^tMzC*>sTuYdp zw9-MJw>`6%c6d-4M&^~B$ho+zFqxbs@_BW%s&5X2JY^41AiJ`pPdCsD9|wr!aU9*G z1GshHW$1$HWQbd3pIB$(sV@IwqYn-5A~`h9`0Vi82VdPAC;9`~J*BGXo9`YbJU3VV zn8;%|lw8C z11m0pSKglM>sW?nqWF|0ky;0HEnSz%Ex}hI6_-}o4^ET)tsgD9ZlUF@7 zDdO^uj&vePn3R+87O=jY#ivET+*%lPyM;;~hD2ABs)apPm2Q{_*oZP_$;EU_J^V4e zvUJ3TF|?=eO(&Zmmo!CD-{vLSsJe4oEEqGr`wqtflVkWLSYHw?Rs zgLUj!tdFO^23kZ6Uu|hd04GhHFboR(N*<#H_! zAIzf4#3!6v(e@0fl0K!S{_pS&?y_O%yxWaN8aO{whP^os{Uk{&oXzYiv}zPEKI=8A z3X&WAPnjP}f7bF>QIZ&Cx&WmP!t;6tmb4u1gBoQz_d%I*W2K2s*1g zpQ+SMK#Y0w5L0ry>VuB-C`GC7pKHy)f`(4cr79QXHIv(?<-G%0QeWA05-HCVhwj`q z=>=Y+c(HcOnwT2kK<_8X7QC6A=6ttH{d7|TiY2NI7n+~fWPN;5pvcU%-`u$Ym7ru~ zFF9E5Wd3#vaM3j=g7sv@Seb*`vy-*HqKcRxQJndbW&=X1O|udhGj9til&m!h zq9Ao8Sc51f$=4`UHTLEN4pt{`J*t_`Ct8*a(~a>)e_=3}gKrr)E@8XbU3mj;KmkS4me zc=<9NkzQqFuXCRbY$2V|(3zD-WP)yEmI7DemYcIdYviyP1&@L5`lp9(8;#K-tSExm zyL7kW>Azvj%7E(mZ=ZBry^XWvwEG&usT7~`E=VuKHlV=YWB`-8bY;|o=$!Mf; z@t1C;bp_XnX7#B$zA)%Q^?!Uk^(gF)l&YR+I6d>h3ANnL$PGYP%LB{!qBlqfm39u$ zA&pNWUdZi>i&A)b-n)Pzw@_r=2qWZ>$|f>A=I?D@GSlSJ`&qlAUc+4X%?HJ0=fa-t zQ=77!s%E4$4BTBU=}4vFmA_oVS^W6@%V^b2_eX54TNt&I3PWQv{mxbT`m*9P1*tN9 zlDt%WD4Ur~$wm27PWdfFhLLs;S1iP20 zT1#iySqL8?U~z^MrE&3>;`ysTlwHNdjt`)Hm6qa*mtA=2Qy;KSoAxruGo^^Ry%iEw zyTfPilrh!esF)_*?kKj~7EG8r8|6GDInMiarmMulF!SldH)lPW3Yyf(e#!cLRtm?K zsue2ka%NA@mY;g&^lY>=(1(DAvXUTY-`CB!`f36iO!MNZSO25SH*FqsYsCH};u&Sw z`yT1rxyC1N_m67Nj)Efaw$6xhyAOS*4apb#9=J`cMI^Vs`!;0ZgBhk5m<$Cyq=0LbbSQ=O~Ucp2Pj+u+(=225q|iIMEt;Hvkc zy3W>#&f*s94X|lAVZe{Gu>3eVJYLSPy!Er^ zP?LfM#yx!<`FL5!MXF#-uJ&EDzxs5t%YV06j8JUUAg0!H!)$c@M0IO`e76BdY@6kD zzLm6CA;~gM%4gSh1C$xBd+??|I{vsmGy@vl2L;?o&uP)Ah`4Sk7z=+POv>pdme*vO z4vgb>p?94j2zRb4U9D`w4|KAd3_V7*B*5nhG=bhW>G$6g-MNB!9WE(^&CUcDpxcEeKRH^N**NX-aMt z;G-uVl#%t%*`F=|x1%bx`Mn#NDV{eVjP?;$359Q$EIL!}4!phlv$RLik(zw^k^CTM z-^mEJNU)Bmgd&i4?qY0Lw8ivVg!Wk(QL_`5ECy75f8a^)x z>t&U{)W}U5FD!qx(Q*t&pptRi;c8M>s<`m8u)RSr3y@v7t{0L|HqZeEe0V4goU>hr zGwt=WTkuSrt+N4L*?S3Q23Fyf0T|u%9(}skrbhH+)Jnrnr`@yTn5naXhRZghn8VBg zJQ6FrL@FB5ssMS>V~2M&NS|uHu1}*&fz+`LN#_`T-n}OFM7%>`%y|-xdpbXXCRn@_ zV9-cT$SRxyKK@`RhVvq@Q{HHo{r}i|@2Do1=xr1b1QbE#SWudZpmafcw}5n&-cbxl z3B9+7sHh;IG?5Y%=_N?70YoVY5TpvBDTL6$gccxhC+P8%d)Hm--amfdx4w1$IVXlU z?>jT^%$~iU{p@GDvSZ*0aa=JGEu@=)Q)IL* zrBlK|z@ALPxdHS5m;oywbMQmtxWWfdP%_cWe3tk{Mno#2<@~F&UCQ)HrJ$tap%O!- z!{LgadZ3UmWq$9^bV}jsH{-S8M4%lQEC{7Vp@CH%wMl(LaC47O0FdgC*AmdfZFJwE!bxi ziPKkj4^lE5vk~H_#yh0Ow6Ggr?2$vv+Q&E2!@6Ik{<;-q9Q5GacO+Isjs#Qf9W5dJMHEl*Vg&Qt;4nMNE@> zNg%G+tS`re%`M+>OEuM=3(lvK)6oAxf?2JX(ra`=7xC( z58!Hla)&p<0a#aWT=~1u>q1uuRmC4u)U@7rEJMH!KF}d^xPtqr`2{{+Xum3v?uFCpNG;OuY_TK6hn{*tsM<^E0N73OPaz;+1}I_sa%h8@ zOI=+2>l>HgVceWq?dk02KD0B?rp6vl2`0Qed%t0Lze_#Yd)^%#Flhrr-HF}T7=A-O z*9|Z_bmC8P@3pgu8vslv4-5SkyO{Q&Rz1D!xlfirsRMoy$|u&MT6%wl{>=mc0^n$xi%{~FZzRv)-qku<$MBMkC|Ip%a zj=dEf!}Sxx3_StRP+z(Az12-|mNqpW=qMs=pS4_a9<8nVHs!rl%o_5*-TF>nu0cg? z1*kbP>;Jsd5sC4}dpNXCQK-9VHWcUJH7erQ`0u?0%70c6V9M+$tpCI;DfZ(h7^oZ) zNvW#Uf~fxf=GWggjlgQzO${*nD>?h~Zpsu12H8xpbc(J26PuxY`kU;*U-zec0z`jM12+s{`1SbF_}}r`uUmF~0L_ieY5x;q|MN-8yA*wsF%K8?Uufgco=h8q z=C0p4XG&UE5rJD^GnKt) zgKK}-=IVGgTWV7zcqjrxUjd7-Q6UOO9)KyVox1a)C4vgZzAUgs3Faw0K3UsY=yghx zCzutCLa^LKI@S`h00144&Rd!vJ{Lc^%;o&z-7HbiO}^+K8wQ?m7=Db#n%B@ zi+a&MkP>+VhE~>iBT#2~&b7PILfD(3`o@5s%^&FQ|K0%%?K!?~+Y6#kXoEdVCbq~Y zb6qm>{6SgjT^uTol1$T601-2svqTE0C29;{Q3iSs@Y2K!nZDih9-N{)-XM|OmtR!2 zm!P?S0lecwCgw6XDCBjX!dAc7|H6S;D)SVuEQE(pok7;vjFh^!? zy=c#zfAlP+CQ%Pq*6ep+LIL18qC*z2oWIJu^qT^r7uc^3+I^Ayy}lIA7EwrhAQ4Kb zZ1#VDU6K+UPji5>$}Ty4cl=)$o@s!l?Zs3fvtZn^M`b>!{(A$}2ekStIGtz5ekYm! zv}pcdzUBJpe)_p|voWx#eECwJa(PssE4BfzZquPgt(mH#H#-`DYfYvn%+_Mb8S z+a3YR9{xAmS3s0Zsb;(c(nmXVMU*gB`7s?Occ}ku(?sI;t{9?tbOR_4gu{1MvOa@i z@2%`UNs147lA`?C-0W8z|7+cgw$lLh5bg7TI8jDnK801Sd=V%#sR30>w?JN8!eE{v z8u;#dxGLh6g6AZFXUZuIDu*w_RUY9$(?kk7qD+t!`g91~ui*lvbn<#2%g+iDDw;gQ z0{)Zb+Oj^2=Kgqkqq{S%rL)n!Vo_Z*UjBen{+uGZxB-|h4r)P!HokB`89=_4_j8AG z95iscs!z$(*;5!epMiw9&8pB+%2W-c<+#ARcK3J+V=GFYaN`Has+^$EZ~Z*f;OXaho24Gm;DbXLpP3IWoQ|Zrde52LA6&nE ztUf#F188RUBOtL;bM%krYhTJwo_RR{$p4lXK`QahtY~zt*P$O2{{GE7)Oh9W<+cwF zd*eqIQVv55tDn+7A{zkEPfhAa^1jL`(^SO^KqRJ&zdPivMcmNMJoD=(C~}s834$iK zLGcabtAih)wwW%E58Au>wwfink03qpIj^~|6y(Y^5yJBb)&;tA8XSBRu zO-~*wEio3Z=<#+vk2JFvg@~Js1NN5#B9Nf`P^`mTI-#Rn!oe!S_0H*(xk`;xe8x^n z?BHx5j$^KNUKI^wdbOxSzc%|g0A~KoIck2{xfC8%(`)p>3qxgP79erBz+M)oB*-LL zv<&#%@!=Zhjx0~cMIHaX9mkq}{1mQ(=;lmMu$Wz`fphI?d07`xLKXph@Xtx>ss6z1 zR3#0^vokZ71XH{`gDYh_`p6(V_TG#e#c>v8%{4lc?IsalYkme2OO+A{sDl>|#n>s} zBo2sP`PLFcn;tJmQb{8-rXFk`h&>oroR0lY1IZlz9Y7)15&ntQeI-gFnjJRoC z8Qd#GSmuOg$;*b~+!?HI`mDM1MT#~=Y^Qj}68&Qn(k){j^Lb@CjoKS!;ecYpMK9SI zUxGiVW+sVPI&r0U65uqdQXvlPa|T&v3D&CNJM9 z1`1b%Y<}tA_Td|9lw`V)fP?L>!*rL1ZB_2}UMm$D3)^h5qdDnk+22zBRSL54O^r1C zDr{{MFBMGxRh66#3tVqAQ*`ko?P1zYXO?5WUHByS%Nw`epshR*1f>3l`b=bRyqs3< z@_Y8_n3=3&?Q{{stU_2a!v}T8`C%pQfsZOiN*q0e(P zT`@3|U6J@*!_(7n<{pkiJ)Ve}m-~86#*gFvzN^b%WJgs-LUpNlWm9{fMc(BZiaGu1 zgY+mMfZbLTBTOxQO~71t!W)KOh>@X{mV|zf4+DCs(#6MK5WXZ%$+a*XD9rarz7X!= z2FUKmv~H@Ob#V&6GO-QvcSM`!_48w+Z3IeA6aC~!Bl|-Obi7dBV6#tTc`z_hpT9MQ zIc|NTsh4sS-kC-0|vi6PR;4Ek3lUDSm{K@F0t7&HmC5p3QY>m~F)U)K| z)+C^z`;mfNdgB9?_IQVHLCxu%3;v5g*~iK!Xs3+}j6b|H6f<&}$d%;Ky6qW1V_c;5 z?wr|TS{L=ZeFTsa%Va)Gn%4jFmPaY2{>FkVfUpsf`8iC5*F110OzE3+#3Pnkc6e#BNeRwfp zz1A*{dGB?VtWw8dc=(UE&M##-P`X)B+$y#2w0q-jad-x*Z>Z9<(+|Cb%gM%c99_eC zG*;JY$<|Wj_akGk)_m1L5id2K;m~I?$rJ{w>&_ec2V&>k9$83hS54ub#l)G)-X(e4j_!UB7wJx4xe#`Z&G*a2L*la? z-m4jV}PC}e5{cnQ98I(LPU;>ba;;OyXZT5KIGPj#}CDLF=5eI!<`y(jR zSyzednXeO4Iz)ehvKic=FkbKMFO&Z1ET~?2pc7#JvNNh>dDs1UC*~0&t3wh<#T+QK zl;qEgmoZBVEeBbXhiRWEOv||2K-7aY`8jUc@M<>k*)gK5D}$n%LT9Q%lI+&t+d0`- zzc5519pvz}r++lkDTb*#ot_WKlk~jJyGH7pbwQGNUv#CVcP_BI38;>SMBF-nBiK8R zHWSuV;ZM?Tlwj&*e(U!xPUU6+=?q`igx#Q&_H+h%;DVSb5_ zZ1zi$-EAU#SKcsd-QCQtk?$lhV zVf%J?!C|1^)!`mH_6a!oPuW-O`J)GiE^^)K&KCAlc9ov9F#)|$rc@#ncn$;7KjmL^ zwD0s(=wF_h`!d)X)~=T7Y#_BX{pHL1nA6YvKM2dlkVH3HSy$0=3M2zB0uD|L1Qq6~ z^cPNca~*d}Zbjp7MCd;ae6i>k6_`%eNnvch_FcSbD}CQ~xYhPMNqb0D-3ML1CHZ*q z$fgSnvN;hq?#D`ZQurm8-@~n`IS7?BI@UI#)U>EpHO^1>!&O^c$|9+*BoEk<2w0zu z)T7qc*FIY7an3s!sn*o`QHgL}e-)M5Ml6*}#ZtgIXNn-9l$X#?d65v61H(XeqD&!C zSxB~4o-yQ8w5_bN`2zmdQ_t)w`q~k8+OjM3l??{i8=fcqim6rTB3sA{N94I1jx;sT zeBIq$TU0cy&PB2Y4n8UK@0CoulNh0;9O!6t`Ruz)darQ}s>kXPB44g`XmFpopLaz2 zY`IFr%r&idM>`JQRW{6HeNpgC{3LCiBAXTOk3-MCyI)qhBa~bku5;LICq(HrK7cbg zft;LMU9qU=HD}mIo-bQ0$R!qIM&UsYaF1Yo2EPG^d$j5L0{(#_ePNE7<=ooi2#lv$ zhOA90;nP{1%tVB^BLDU;(GRF~$T6*6;RAWoU z(%&9npT~16E~E0&IgnUe~^C()o4j*^-xN>b}Bcg-!xC zv=gXCxSp$*XL-w9IV5Wi$QGwbJj>D5WzxoZ)ceh?Y^ zq*5EY=%Xj4L8(5A=~AcC?lx*F&FWxl^(~gW!>`l)dMw>utwXwyk}uu4wbpQo5P@G^q%w5z&<9z3< z{T&i37!RrtA==sT{1id@P?>1t^tV>?@OJ9?R4u!LPQve8uNJN-lE_rB5fc zt7zkTc7lUO2bRm3$m=HFiy;6}R#Mzp4pSO_(P=W9EYnFnqzB*ZeG$4Ap~c~jQ|a8W zeZ#NUcgD`ugI9XJH;Y;3rUPb}H;Uh=Bk4}u?J?s?r-hm^^5SBIU!g{8BBB4R?zryY z?MQEvsw^e?$c4D0aXwqJxlHL#AgQ--PQ=`G30RP`m0s$t66b0hL`C!}>BGcy08{R+p+9aD{?QmSBkA7O?|@|rzsAgX`s z4funh9(Y9(Sc8JU-sYZd`Nzop9)Y4a;1%T!7CK!2=Ur_1xgUt?=_LMZu=@TutZdxj zZ6NUX$#R(czajr`$p8N>^Z#b~uci1uXIcNphJ3x+5oX$voAb+V6~#5!DH0PKP3%(2 z`tFTvphfBfT>+n1=W@ZbpSCKbj}@4gI!S|bd*(&-1Lf>48Q+z3E`={EKo^WWUev^# zbl;TqmsQH+8$bS}&rwg}=SISM5U4chDXr?6>A>x2S<3H;{oE0Z?ZJi+=WH4GbJsFE zC{Ikp47<1!e(&hgQ8h%L@PKa(hdSG|E*xaz{nKKf9Y4N*?$?&s#kjYZ0-@an%%Nk&?$5u? zLqpai_g9F_FL~%!hN}1}d$anF*arrty<81MDLg2ydPfzd?@C#4w6Ym(OI0VZt zTmo%efs~nU%nLt8PZ~82Fa7nKB^1dg25K6;1JiK6eYF#ja{EaX_f2Y$DZrDTOyq?6 z_KhB)CKDrz76-LfF>(Vdh03qrE`SpTrKR!79{Z(6JoOUhfJ(T0(=epWhz_9R0|sOO zYI0Is>QI|V8C%5dY^ji|$Geoc#8TL#j&v!xJhb^EgpqCq!+Isr$&6+b4|Rh&-lcv7 zb$gMz(J8mYZtgt@39Ue`7KG9s8U>@yoGio%g-pL?syGeFipS><=xt_QvnINxv#v`T096r_F&#YbX$Vbaeg5$k*=pBmSzj zJ!rEg)>Bi@72Nl7+(Y5l4|e<-Pu-&nPlt^rs;)9Ux@h4sXwZ28pSDOjb0W4XF{PoO z#>m2}Z~Pd-_wzVNFL=u}^_ypYZ35j^7~ZJS_aYO88_njs8K>b1g>CW3hE4pS#9OM5 zvGG}{{ZK62L-P_LVP2KaRi8+`I#Mwe!f{96?j)hgWghVZM>nQNcb>mQx8(yoJ zgWZRpf9L|Ye(anYCzQP7C#fy)K=iTAVxAu%1}?t=G-DSM>Gh=Fcx}=2*DWL^+PE-o zM9vqiS-u}KT|b^95eqp&7pQjpgTb0=Vtzo0Jsu{WHd3M#ejx?22V`U-z$fVx!D;x`Sw%4StuN88 zV0tP-sXneeapx`)piyIY`&1}6aD}pFtUbW3rWBixf{zuH>(B?ewOlUH|IC%r6V`>k%Pw;E~28UPG0CwotSVm=;R^emkan9|XW7iwN5J z5C7Fde_+sO4&nZJF|8rxk+>vdx;<<1yYUSxp!YqeQ6ay-+53=Bv1TZ#4+p^5{cTu6 zWWetb7t29h4^le!ciHRSWrE+rAefD4Dfe9=(eH9u;J7h2v&v`oVZl`G4pQ?TFA z^hj9;ieDTlIKMTvyQAF_m24jql9l3ZDz!ETgb{f4ps-#8BMXTQ;8jXVgTsaB*Xx#o zD&Qe9psPj7G5RcSy3L`>wRi=DTvD7Fx)Vsi6dsy={vpHZ@MB)! zx{uJHzbfHp_q?EyXBAnXlxw8VdIoN_*`45Brm<{vwhMqirKd(+7-|V|2zGXmTMzX- zHDfHP$;h7UKbsS3r?fQ~$`Ukvb;K&wG5QXa`TljhLESE+2<#t8iS9os0EmN5-!a?r#QP1=4?VXkn>8nogCrCi! zyG^E2`_1Fu&?6>Amc;XA)02Zxo^4BjHM1m}oBSfTGp9odG)T**?RQP`dCOn?Z%An9NrM`gV`olt@Cht#RRv8=D|SIYLJ@6ecod z4H8ZmE|es(v57ko!g7heVI zRP-&R>NNOVG2(5u9xjs;buI1KvH(-Tll7}K6fc$@h%p8Fz#R$&Z@60P`)^NhDP7*6 zxV*CCOIDei}o7mxue%NvTwFw;~fD z*b2C1ZL)>WE3D3ytBG4^3>YP*eh8VV`!_N7N=*>5@f_!mr_RXXhtb>oeFk)^ zRp2eq$K$zfP@FkYOY6Z+yu7p&rnD^vmGC30v$^8YCGZz%V{4O5eDd_xB%hLuZ*MxM zMC*=EhMLmmmyw00!4}Mpzg%JFk7_A8^N=DbY!J2#xzep!SFdip) z-Z(loO?kvUTJzn|N*N-kfLwXWLN-sbz82GT%wsU`8pYvTXAsofO}6^3zRZo0pLWq) z%z5Dh8eq&30-1(;d|cWKa*{ndWf+j0*{`i2d8~o-+T%^B0Hyv~qFrD2oNv~+9*TvF z%Y{~bnu!qaJb91)QbN|0-N_g+-I2`bnWHCLD`{!mdHFdEla5BW%Bw?zSBX(eK}!MH zwy;q<6657b1kK4+8H5>`2Y2%cCAhb4q>Imh0XsN0qRu-#yoO%2+^roKc=P=TcM+7* zE-q55nm6A*;>{IviI?P!?Yia1BJ*oYL`SAFk$NbVc>a3|a9?cVlX-hanc&$^dvGW= zj6-qiQWRV50@MX7y`ft){_&s)yZn!5y2Gz8v&6RPdgJhCh@J!QK~*>cEuLbSk({W} zz%7?_OslnWG7*2tDPByMj@h9)`A2SSSQF2UGZX_CM|->ursJBnIpwzAGYdDef1!T@ z>}l3tw(zv{1o=0#Oz!UxI*T||=zJFb?en7{hU1n#3%UzbOME94DPT<}a>S6r{cWYW)6@$j=4wBv5hl#1yRILg{hN3-1)+~u@1+U z<*jA#jjTK4EuO6BRqk|PM~*QNk6SI{AT1sx;wxq^xQ^*h8_B4Img}M9C#J9te&kvy zbe>WHhB7I5Lkc#V3Yw$l?94(_X5m|;a`Z|nm_%sdB7@zUzKxN2_}1E51_;^K>E!qQ zMlpWJ58R?WAbPrXcQ5q#TTIji;-TsA4Uh^1Mi#7#U(p2g;9TYT2@d`3HbEd{K|ZB4|Igb}J~TuFlX>_V^}oLU2l(>W_5U@S5`+IY+COK@ zf0G2bC;u(UUzY0sOiL1S{zxS_dobbs`{(K)K&d;Q1{*b7C@2SBXcRz5H_MOy3~;@# zkAo_|)9gOOZZ*YD2SGlaD&z-1D}P8f12bza1>n`5Ie^C9@$J2(b_hVpQrDSn&jU2k zWSx`vx`o|;{}fNrNAQDV&co-k-|YA?o>D*JqYcnq$Ccx?R?55bWCyTiJpQ)lMlDic z@8{<28rEAhWu1Mpm1OpI73(s(*_vBpaeajaLqe~V3p~o0g>MhWK5jV6(Cd?q6bQe` z3;BBb=k-z!3R|WJKy&VUHwHYmxQpTP8R&nh5k z1TLM){xMA3O~MImeLqp}>xu$g0BF_mYu0RFEYV*b&}Oz|BB4Cx6^1f8Fk)TpH8Ro3 z%!=yH{?w?Tc^i745icVj>-9cFu-Ec?J_UP9mcwVi4EkXMb;xkZYOYb8gDWNGXbc4h zW(T+~1&p0$p{6kdjjf;(^LGGHYVRYluj!!63PZ~t`QG%y;XJ^C^I4ZmV{t+#ira{&>+y0gxA|Tqm#X zKl)mE9K^bF!MT@o!&e(VF*ayju|5dyc3fFiR}kFfHR=&9FTfOZKizxB2=HH4ZtY9Y zs6PJTYfG7rfAa+bt~Ve==i}lHb^q>W06+XO@CN>$E(cI5qO{ciU*PCPS^$nVhztDf z&R}QwDgYdifQ*d3n7==gmO<+bn80+YCjWv5EkUgPRY0g9^`9U;;70{sr@+JT3Pu*DnFdLbg zD*UU7e}E3@jVH$avp@64Knv@-yJvx6`1|cM4+9*X29y7<{var+!2b_JK2E=;alOyO zjt*o=F-*=#(v^OM4jgd@@+7cqiPR3mK}i zwh90NjQ1ZDIq@L!F{_IJ%dZW=&Zbb3E#NSMve4>v%IdR*LZQ(j+iy9?DWcn>tu=?Z zC&`oy#E14g1kztkHjZL(T*1jaERix(uU|l*t5alfUhlXUBEUjwkOBr(PQKDCfAg7= zub6-OV24CCM?rlyhVhD0l?0RkJ=bPe*#1F9g*g+hX5*1vEt2r z7AC4o5Hk?tDm1L5kLz+I6Tu59-rmA7NO0hyOCsdqA(5aNO(|44j)|AzA`3Ilm+gT{ z=y8BrjCJXdi83&*?QwegsNj`!sb)V4baha;()x@JRS*dDxoW>3L!4|EzyD#j0L~f; zExNGU;dXt;{Yvk%`Vq5z^846D$ze^Ja+oq)Db%V5vOqXREoYz(~? zvUO{4Qc6A5>v3Z?1n<=6ef!~|nZTohFDa13eVRTgyqCx-X0Vwj+Tx;@?s8Q(*X|Fl z0W$=ca?`Z#+h0~Sl- zn*pam#!2^KNr%_yH}2{t1PzT~N>Y!TgcE6eOhFG$8|`)v-ZQECgP)$9C``O(oH04L zXpQ%XPl<)#Bp+|DhW;`0$kr?4dfaD<{jfcAGsweo{q}CMKr82ZWy>LV%|Va`9q1z~ zEcszni=^Zt$jHFsqXe*-R?%6KP)5!sA@h1uv?gm(B}$28)I681@9j}LE-{#dV3VV< zC3au`e3b21wB=gyVp(Bj0eNK7=pwoU=~$SCau>H+GssgyE4m3~O|?~?iXXTIK?Opq zSa0Ou-bb3KDpkJ1u%*hEz*B?fCwuw}I>aG}>VCyQRJ>m?i0q|p?z0($)!L3JPUQr| zC*W*J3j{HX_{91(o+(Od*Et{>dd1mMQxSUj8!LR{nr)o73V<$a9w6_BYuR-NGxo6Q zqY|nX?NLS7s63urfXTRGIv2e42>F`&F;=%_N6j}^v(*%G4?5j57UElStTsRMvff-F zn)!ao<;CE9O2&R#<7o%sQY5fDHRp>GHu3Y;Ya;3$3ZG|)G2Kh+h`ZPV?+@lQwBAwBkKnt1QTRfE+NT0sz>Dey2|) z1tf-(Qlm8z`75KhOO%q_dAQ%;qj2vnP=;HdWp3y$SEle04H9R$6`P9dcfbxS;Zn0A zS5K6q??`|I0!V7exAG1<1>Zarwvv;h7M~(k_v3|2e!iq7YqI@_`#79nSPcYe_fsHl zskI(QUrW~et;nDZQ%lt9!xOdE%P*q>@40@x6XumZXMC>lq5r5hEFhXu+$Do+>jPI_ zg(Y5a{JvwJDQ4ff+ z>_F`(UU7Yfkl!i8p_OsXHsWA0V1sqIz)~$$-`aK;;nuB`?ZC-=r z9NdFDI2+{AToGLH(c18jCl#~Lyw!MDhN{^ZL$UJX{n$p?x#!h?w7-VLp>F_uoG zzYdM9)fP?!<|lM_g8wn?y^`IO`dSx+ZR@AF_2!7Jv3oL%PbPC82rf~8;^yi37(3&K zBDw)XJ(5oblGdJ2nYTq_*}kU&0IiP^t!1?}SM~g^zQ!^)b-0F%<@7*(v)_mxb%p4B z?T;(MXRLZ9aeTK&H~TBRVKb$h82Z)|WeSxDzk09@_hFw|v8LT{O?${XVXKuz0_Sjl zs2NJDOF6?4DEnQ~RGvS|Gp$ha-9G=+gt}c%M<(N- zUHzt#;g0SwrR{GozAQY;mz=&C5+W!^vaOdwX9rEP*W!6hn=`c7;QEb`FX-lBJ)@>w z!iW@J%#G~vYjW~SY70HJ)51rpB#|?%EU4YV3QGAz$~{!IV6vnPKMV4IYZgrT4@5RU^)+EjH3EF zOU4_|B63iwfb|eOR}t(uktV(MT1L5m>Ym0%beR0TiSBjwE>5>kN3POg8vS&f`|38T z7S7~!uHcyh)?Rur!Z=nc=;yDpt?eHM2l$)|P4hByC7?pQQ5F@9y^R5D^(F1*&&*a& zmCd`Ugz{@RL$b$J2s$Ih^<$jL1Es4&W0)w5xVM>u^Aas5?4!&_q6MV8E9`cp`IdIp z3gHRkDpvO{DIVk&RFxCFc5x`68VTf;eXM57S)I>44l^BJ+sUA1d1dE)($Ve%+@(2# z*k&cWege7t*n;~^imvR(HA2=-?H;ScfHwXuth1-JBt}kqH(68PF@W2*h~E+6fB36O zNb)jD5yGs|L*J+3CnQ0S^@+ohTJ_Q{miOom2x(33>pfemGt`mH_>hsu<0X{Gjz zsF*wn&u3L!8>kaznc^n<>RN2fti+OD^XzM)qTeLq3FJ*JqCQYZBh0F)dr+McQV4~V zyL4_rX5i?#n_Kv`?(xaEl&NGPM}-wk#(W%Ah#|LKZ_hf9!QtZO3YLrc0lV0sPiwR$ zTiXTgR(6{L#y9=!tg7m6SHzPGed_YCa4oAivk&~ZaRt6F1RoH@^^P~{?yl(iEP04p zp|i!eNsq(cS06}Y9u~;{@?yBT-rPPpR#tz^6yw#p%uesr2M!Cm6xH_LqMA~MKqks# z(jw0|m|N;CZui>kh-nij6QTZ+dY{xj2bcmMlR#O;gZCB`A3n64{zI&{8X(x!Od#hp z3#P5=xo4<=qTa_BjWhZl^?DZ0rI+sRCS4N|=;~q~n-9W1%i5P0@P*$!+0P?Nf04Q~ zG5Z>4$^4r_f{vOwhtFu%Ijvv=ggm#cxyH?R@a~HP%dr_FuUE2GDTz+Gi#N%}Ft)r= zr2$Bd!IJDjBRKI5NB8U&_S+~ccTokMJ5_4lzFEaB!*df3N+ly>=*u%kbAmpKcqc!L zDL6)^NL!=6$1={0?`!qTt=+!j5|KCLwxI;4bqF?$$`(nhFxwue2u|Qrc^I3Q8h6u< zB(B~4cK_kx+FVDdo%><9)wLTbthBA_bsYrE3Q1E&Jcy3jG-+Q3I}<_E@z?`(*y!3! zVsKv2LUL_>ETL@S)whdT0!KCOBM~$V#MRNhjIx)=U=?>;rS+7x`lmCc1m(}>)Y14O zli!49E)(zdN&1TNFL{>tG4?TA$^M|FKT6WJe%B#ztL?d@?dG*-ug`+j49#(<&EZ;8qrS)>oa-b(v_#M58*7vMVE_UvvhL2z%_EQHc%|Fh@fF5#3Y5y~bow@*mbv38(e-&k*K_NgUo(RkXP*>Smg>48!NRAGk(6_MzoH-l{VQNwE5W8s7By-x+5SNi`9L$e|Z>llFzg zLM(HJpl`f_EFmdFe~DP9&G6fKn|oXW#0A@2MINZo5pLJ029{xBzZ?xM@3D!Te9Z37 zQoY;qa+rb>dd558;XvJv&;A7DM2f|w(Ty6HuNQRalp|$8&frcMNBO1Uq?8k_jihyO zwn$?r=So^5d3U59Yi!NTD^fkJ9a`@@wzYpC_}h}ylcnY)@y@`h@yydMrzi(J?{{?M zTTnexUf1qci0!=3EY5S&Zzu;d9q&nAwK}!k%Cfu69$y_8{#0*sa>oZka(MSCTzJ`P zlssDabbYsxi+#J_5i?d=Ik7owU}@zDe_KCRG7=O)%TgS*N)iclb8UkogY@jqF&=(h z4`5?Jws!kWdz9y7Lh5EOU)1Tcn@wZOn+K~2y^hBU-z@@754h=5Wk6gZ-#Z4yS$V`S zvd+Oz-XqIy7Xj+8eD#3 zT1|CY9l_dU?t>AEe7b(;`QvN{W``3Qf(NOK_dPZ?le4FHk2_CIgFV(dxVi*rN>W(R zg^@YK-IXZ%NA7eJ-fNf2<;aE$*7DReC6rjMAZwVxi9cHN1UQ*#wNZl0Y$(QF-CTT|lL?ok@)io0ZYs<&W2jZALtFw~)HqV>Z~!3+n}dmpSa(bjTuQ;-x;cXMJ9El#H;7msb4tXo4QInFuPS zp{45kd8y(_?)J{YCq^7noWyfi@Adk}`vYnvOyZ?_lHC@vA9rGR7U4M-<88hhv^8?7 zOxPJ`O8WdAgkSCBHd}}tN;;7q;g3VSsNKw*<*d&Sa|uRsd3l4i01bqFCn%AzFl>P? z><5yCz0`6Yn>+h@=}MA=Oo7`WN38IidVk$6xm~<@jjxY4$7o0f!jUlKbvL=O(r>HD z2Cn#>kxxGO=Ggk1sjINnfvuGKnh(JP%e98}o}Z3{u@p41SwT(5Uiudxd3#DP&b6Kv z*$geTfRPd~r?B<+s>`hcNN7v<8)S_#x1r#Y@;1-i<+wS%9prmNdz@04h3^z7A*qTi z_duKxhlqni2I4BehoEqyKD1<4IO3Sp@SsjqIhE?6dCOdMY zZiC}bTt-DJm%R`po*d2I~V$wCiCg_o219b*>LP zVRJioM01@DrY6mf`-vPemJX@mp`k4oT7CgSh#Jo22Cl^&-V_o>Bw(OfUc#l0w_b9D zawIT$Hrz_qeX~VjN8JY!n1SD($N2Q%BqsPV{^aqnom^gyEmH{E@pcCmR`4TnYIh3{ zL(aXn;gY!wMSbbd%D-LC@0heSbTMlzPOQ9XHmLc9X8PIcq+#TqpqdGElEGxQak32W+x5Leyq7i8xU1 zlX=?is}x(D-ID^u(rMH=2x_y-^xn|>j{eUPnnNgwo=@5Fx4h7fvqX}JWsy3BJ_APOVEo2AU+*}yK!1m!5r4p4O zT4cvmeh)%ASHn$6b>-yYRCvIP2QTAlkg^&4px^M)WsO# zQdaN2DsNlQpPH$U%w5m+zlW?W&v7EiI#_Ixm3$rLNL^dAF=}O+QypSx8F6s$(`Hc- zj(TwgND($E2jdRCiOn5@$bO+Iw$U}8INe>Zk{vm;6Y+k+7vxexj)iIgtW6+i_Dd&x zT|%)Z9}(p<>|~NCl|$exOTA}YZ>7tjR*==kH|Lr(8<65vK(>U56Rl5$79NfUz~YLwj<1}#wu>bJLx+% zeVvLC%QR=}9|Q4pj2g_m#tk{Q7(4UINU}J`5oK_Clu4H}DI?bfhJWw<{PvDk45R{S zA1>Kf>Al&WfVrqOd{yeB=a4 z?-$$TU?7Q(%`|1X9Uog#?_BCvF_!LI9;6;ulY+F+sdK@~5$}=OvcLo=2dzqyZxR^u z9=Q?FyX=O}lPuW8N%T-MKt`N?FLdJv3h^ZKoQ14BAP;Y2K{oB^fk6`zW=ir`R|AH4 zAx?UUlM*;^9@=U`!jCu@D$YK}ClkF~i_j(_=5-0X}q+A>|eVIk&XHpS#fY%Rtv zsVd@KN>jUPnSfz3G^vA6x1+R)0baih5P< zI5$`xRFKfd*GWpQ2d5J4c6XSqc5KvQtVk=^ie@8|l6LP+Q$sVnw?ZDSLa|MNXrK`s z2eXVZ%5<4au$R16RYdp*fc30-J5_C*)?l{dk8U(!s;j~xBe$@5gD zr%P`64ak!RhKws9otF*DcT^=$S45!2wsNLSz-)NIpBGyN*Ilr-O)Z~KyyR!Mk$uSi zMYv;YNEKf50KEJeVz^*r=w0 z*I;y~`n9Y9sefR70rO4y6n;pyj59GW9vfdrSVV*-BAX$bk_c}$sAVE}^4NkTq8}Uz zbGnR#KyVrBVnZM0yGR6;!3f$KY+{AbIl|0<02)yaMZ0rnh3*b)!rfQ03LxbR27vHs zZpBrIZq%&8>j@z&M8qV~h1KgV1~Nn5*@33@rl@SO{>rto_yL!sTMJ2RPknZVytRTa zUL`na=e9!wAVaIGck&!sZb5HC<}0)b4tlsR@n;}~q`dYVvrMQ^jIJCMyJUcbCPkbw zgygtE{aVUeHaDrmW8F%6bq01VBTf$#>L%eVCLA_n>$S^L%T_TPx8`mixL<fNrPkPGG%uy4B`Vp)#1wC7VU|sXP;qi&`n8)3p(6-07z zsjqwrqi>i$YiT@cREa&hC}=E9*tvXm&EED$lL?k`odmmFtfu2tVW6{B3|jZL(F*@7NvD^jw`vVHj}kY9B@pf|QX0%TZO>_YEwtsI+T& zpXt;!VR6HyMH7aa2XA4jlT@Uj+6y>uSGnWEWBklmc$PRIwU~NU{1vfSZ7tIaA^W7Q zwp`^kR-r-bATFfjd$x@gbK{l|M%ya9e(7B>COH2*yYcE9a2wMuT?7)YYU5&~q+i`L zJ3J4P^>46OgGg3Y)r6S0``49YIF*OT!6~J@xFN6_N8y)CESYy*LK#Nd(gs6(*wSz^@}jGQ93Uzx?WxtaAKyIToU+I8 zo_&tl)CtibEC%2_@`5<|;(@XCDDa~i*JyXTqG~_Rg24^|UY?w-Xm>I^k#i9s<0rSM zO8Cxf2Y_NEs!b*g3+7r-GSIS+GRo`WSRz4jX2%!dH?7|154LbVHMnyo_GqQXce2aP zNCk1joc$F#XNmH9pe;(=z%F0C1uHk`TG-10-vBr+F>a&trOC_>2wd`-r+821dBerr zZ_BimZ_^(3Qgz;#exI$GLf|Gjyx%6(+84c-Fg1Ay^mze)br;KHTJAId0;~v_Q;Cbt z?|@vCM{vmOc&lT}`kGv7h;Aw3qo*#sEgnaNz>k`?Tt09lmsnLLaS(_^_Eonp(kFgn zC&h3Gq1oFHPVU3Q^J3(jenk1w@*SEhaKjkrAK56OL5R6j*GC6<**16TtGDcV`6pyi zE|3;FVYx>H$s5p?j7`(Qy3>RhuMy|c$S|X=xp9c=1=t%LUJ0n@_*@J{;PrxmqOa^4 z;oQU>l6xxd$x+-hm_WH5q+h-2Ju?zsrgB-YY$bAyPPky}zsl43u78t;wZ3}Qd$fGv zi-&qALiB>wylad3TdTR4BmyVHjW82^7_m2sp zMq@shIIr?bQNJ~Y=G*CIoCD4}>2m9|L@W8#58}id#U=pcw$^IbO3f0GP|~(E#_^R8 z2N~4`v6*D=6(604VK6&bB5q|?^AZ?34BlcTgLcl?#R|f&<{=qbfxrs*De9M9K*2N1@pi-1= zUH84KE`D38?G2hrYXoaJhE>e8!c#wxN9)ZOc^iBWGvMAA4LnuPU2%)JwWPx)GS*}$ zUF&O<-E0PQa{FVYM@&Sc%H_HP?@eO%5C_ct^dv;k1JhuAhWd(N*EICD-!vx7#-Vktz+teS@7Kn##70EP z5Gv~(c=tr2WqS16VPKeDO`v-3ra~Uksz@6fP)y#EWx3^Bchy^nJjFYL<36LUxJbOnAFTXey&S=t;JUWyF z`C=m?XvpSd zm_K}(7rDlFukY2l=*=%01=|a^|50%KLS+w-H@A!(Kt8Ye;s>^p*Hy;Y;41^>Lv*$} zLmFODg$WT&KPNEfTuzbbMN^(qzEt-#0tGM;l!e|~xX!fp9e?IDpl$2sxWTr* z)oOlKVsJr#zI9jNWa$g!K_fNo2>bzmMo( z)-%Ji^Xs`G6IypoUjvh#6|XF@SC3;y!x+l-0A8hD;q7soX9dIMB5&25M15XK6cjM{ zzIpqRioyieG;8s&!y3*IL-GSCp0)<6!;i--ht1ndn}KLgB8{&!mYY-BNTgJOZ9Y{N%IyU?XO!-3e`D+8lmtt^jdu^y-Zq>B#1$ zwKQch?|rWm%l_FQC8}o%5AW7|nI7#q;J9D{*njdCb|K2+#O&sHQ7en?(S{)ZoMn(^ z!&Y<^8B&M9wnB_S)y-r_Koq4Y%Z?B=ZQTO-a19`fi@k)Z%HYni=ri;+DE}jHL!k-V zX%r<*^$^z(UNykRX55^;afg~Mo*E$czUzCtvHMaMb>Sqy8yXo*nBy76k88G|cCl?J ztV_D&9~#HwzrWERe+{+%9Y3B(jpcecwgL3G#3dvPiX~VZ#Q1o*+V!J=r(Ih)J``i`sQ0pp^zZQk@;1r$T zkavX3-J-esmk->@k~oMU+D{eooce|BTiH&?-`vwpT?QgqplNtn1=d{K|7ZoBCZkko zN(z2Q(bcori%v5#_W&4z+M>x@!pVM5Y*ezsEbV7EH5+cC@sk6<{)^j{Q`Zp}f!=~S zlw7|hTp$$Qi>ET1pkvFYm|-@fJjRcAa<0j%Ewj(aNl(v)xBf|@5*t(kTo zZ?nx3NXno=tk;&WgbChBgOk~K#h)7>Eq!-2p8d}MY+M$2FD$P^0Zl$xQTTO1%2`xI z^mi|cj1*0a4^P2w&v$j^Dv!^ooY6-z<`9BJo$lq@a=YQy1*Wd!T9-ZGvGA0=HliYk zeMtM+catu;-evfsQ2p>vg_|~Q3k98Zy6B#Z&_y~R6AyJurh)diuNOkg0!B9XhN0*m zatW_Qr3)9QzIk0dnV}6SAyk69q;TBIbV@j)R8)sHyp^2ixb=Cb4j6TW!vPCRBhj&l z^&qi(!nAt*_&MT2dXvtE382Gr+e$M<-OT#{0Kq%eer9ilz@|d5A6~B>2j0*!uNc-D z7f{RBGtl`5Av<}5MOo(ksxr#reg@~rG$fd7O{QFv;Budscl^j;?h+0U#pfZ5gqhKe z+RJeRIGst-QibFvKo6w`>_6m2To)hdt6Bm9amAT zwB3csxs7GrjlA=+RxBe+vl~*#?-iTgN?$F+#r$IWz1{FxM?1>wZmuN%sDXqZUhhFg!NE*&< zp;%vSx$4>$rszq`yirex;f4T5+zU4b7=G8o0}LsSC6U9Sfb8~D@IaY>IcO`9D{K{G zP3QW;W4YtTmkgU+_w!1$YBH!oU|rzg5|DexiA%o==(0?@r;_}cL1WlF!AE_Q#8;<% z!y^6K4TpV?Qcf>M^*NzMp3w6WwJ*UNWwO4(@HiEgXN57$!QYB6Wu`i#vaFbrA>7=P zlwLJz*ioyoMKLw0?A>!4R+N1a+Ph+;$X6jg7!a`ZjKqEjd$b+`5R7!05W{Nd;z!wS zRFwA+I5Sd&FIM{y)0n!1khypsMf9{C+?C&k0^jZ+8~oXuVOQLm$+h0$ z5!ZcRyV~-2U(*nUa<6B=G65Aa{W!Yiw6q{uA-NFBn^vv&3c!OlkVY~8cQ4_;REaoe zg}q4oW!AbBa_3?iBL7bN_)gUs|3e-->Do)n1u&;odm2v8q=fP+YXnc z#`&G*^d*+1iwWR_aOqcQu6j$!$h+r)Qj{8P4wz3YL3Pl6OG&8Kd|ueH7i$wOwMD- zp@fPnzCvLwioS{wchb_~0piYkAJfnC7*rNa(Y35^JP6WNmBGLtQt(h36VD%>sp-ED8-o#lL`JZhMBcJr&w!d;_f8Rx zK{2kFL+%vJF7{9vwn&xf*KB`{>Whh%$D(%cJv_<#0 z)D(a|nmQRJ-GzpnoQm0U7x`bBX4p4r!DS}b5~Q$>YVkkvrP@xeU1!@MqMAl}wHlbR z_g|OwHv=b{%*;y){=-OIf2|cAx%9az~@@HQr$R8E9y&)}AWNf5eNA zeh`R$(6y(KUz^)DEUw+p{Js5!8qm>BSo@CxUh9iq(B4LiNtjTb`peBlXG~|#LXT=u zzby}R7_QI`jeu;@bKC!faPWrJI}Nqbk=gBupMLnO@I@_*{&usjR{%cCQ|E6WP`kRF zFGo-O@i%u;{d4Mp-pl{=XRDIGD3sd&_v1JJaxP@s)L(B_lNDc@si~y)l%iXI<4n9h zmrP3z;P3sFzECUoYSqPH4cpXbY9{$F)Kk(qwG!#_KQI43I`*G0|4-Ox{l9Ao|QE^#wWyK3jA8`rUs6V>hlg diff --git a/packages/server/build/entitlements.mac.plist b/packages/server/build/entitlements.mac.plist old mode 100644 new mode 100755 diff --git a/packages/server/build/icon.icns b/packages/server/build/icon.icns old mode 100644 new mode 100755 diff --git a/packages/server/build/icon.png b/packages/server/build/icon.png old mode 100644 new mode 100755 diff --git a/packages/server/build/icons/128x128.png b/packages/server/build/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..260c3451f725d64048bed876e80a754fc1f00c96 GIT binary patch literal 4058 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 literal 0 HcmV?d00001 diff --git a/packages/server/build/icons/256x256.png b/packages/server/build/icons/256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..be1e740b0a6ecbeb7fb9199a9e51d42f3b77d27c GIT binary patch literal 8258 zcmdUU_d6V6*Z(Y{MJFM;=+Rbm5kf>?MDM*u@7)qYBtay4iB3fColUgpL0G+uURE!Q z?|827`(E$A@Lc=D?B2Wg?97>SKINP!byaynd}@3E00eG00c9zeiWVoRuzX+t6-sXfHg-rOBOixevZ;3s>Ua46>X(~qswfgV-%>@kYR_c_N zw$|^yHcT&mfTLBSBm-E-i(xW_hm$f_?T3J!0O1>Vygfeu#)eqK-@zGUl5*pydzo93nj|J`+mO*vkRIH zZ|nQu6?Tb$FnqU8D#LQkO@Yi37!gun7KL6X(c1?fNrGW1yVL7*r~bb83!=QN)ZZTlslZav&GEekIib`Ea}5HN+9ZWo~&6K z(ozHxa-PY29RW;oyo7&&;jHuLf3zEK2698k=m)HolXBg1Hqx-S+DUg$$Vua6JEk3_+ts)?jBNCw$q8ddnfV5KsyoGb1|SSgdS{ zmw9i#1PL}HNy+^Ki1sCx$>tj4pYS2PbduC@`AfPXOlHP6oiYOA7=PY890|CVc|WqR zBUlZ5s(JC4LkB`$!ka+yn2jwe)MYOpdwP455=EAl9abnRqQ0c3OYF?xVZZhC z_96^${dh!43HgJx)zGPX-xGX}s~TxJS(h81Q&^u=nCTaD_(6%l(ldj}zEn{`VKE?9 zqO+<$(d;y(qmHM;yutxVf3pj}W|z!Vlfz)vGQtAvTIQ{)s;gYZBl!SEYGJV{{ZA9B z{kz_ABIXh)j~;cjl^!2^61*fr$8kG1HEcki3d^r?JU_KGkuI$zq!wuFf&rZ|JC(mA zS%B~gemsE5Q3c}#F3nef=t#^+`|<5r3c7WU zLP_x%Q8*TYM9dH2P>S-E_@oG9Wfi*T;!d`?x#=shH+EyhK~Yd${na@$wyey#si_GM z3&XCIpCIh(v+9iGf+^G6ygZiCv9SaHuenaC%g;x67bu+Cc>^V-<|L&gO+~WRsq(dM z+n2Xl0A55d=KPW?)Z0;96Q5mE9U7NYq{+dZu42Tc#e3u_8hVJ;w~D^4 zCbQ0zs)a|Nc1eijaU(m<1N`mm?XwH&Vw##>YUv_10xDwmoEZx2V=n7x3GhOWTn`ay zN=g>fHAUQwR-_&_gI0&D7%lUw0;lS>Up|vud(1XeQmAoZWQmYup%loq$Auhk0`Hp! zRz^?M3141bVqae{r`V^8(h@xt5J(pB5vDZN>Pr`^{yo(9YuB4_t9o{CgM*95iGaL& z{i(|yt;$$lZtmCARD;uKX+LDJs5B?fEG^F}+at+V7cC20TqS`ocLwT|HKae# z7yiduySddm`xj%m$cs{aljy@`_sjG#Y5@O(mK*YuV zW_&-IVE+_+ zhPtIjLp&l23MTWuv_w4>F1nnr{0*p+;(2mBe@YN(jUVhaJ6z1LZ*Okw)T|YSVj+O! z0!44{hsDkySsDU+{Ul0-t#6) zB?as^hK=4k!g)Tx@Ps}#a;n+}T59*CKapo`S7^U7+g+fwwbhOCJEaW9qKcMhq_z^j z&yXYi#ZY~U6kJus|A)sz7^k~?mEXqCE4`L;3lsEMzn1f?3I_#sC6ieyb-752%UmFH z{ajOD70L62o)sHZ&c|dS4{V0OV}8E&L-CUnLgqTU$W$zZNcwq~Lv;V{zrF?-X3IO zVfmC?N6Q<7j(T@Hw6<51WzM*oaF_FXg%$Ui0UC0V<;6DfrG7 zd?-O&u-FuGdJH1 zRMEtE(HS=)nm>+jQl7M3*7_ly!eurF17xxWfRe`u(b8DG;!VK_frkHD!VQKKOJ)*h z4y!See46?8Q>nmybcP18ezbCQac~vzUiPsL<#r9ouZg^z9V=18_lpmqf9`?Hf`Woo zF1L^^Vv#?yfuANOgdfM@Dsi@$@agNPd>S4!-})<4@Bqfd$|_0E7sFaAB$*l8dPSse zY^=zh|633^fRhH|#k{31UyE8tco;4|E(8>1jNk#Smc;T4hn>Y9ZN(CMlRry9u$7G|U z%U4ky*;%y(jTcmz!8+0x5z$)O+GA5wUdt2HNYnT3RXpTmWWNUo&G*vvjo@?RDtx?E zfpKvq0|el6?7X?wb`x3t3Q%E{3V~2~akQmdGZ=kE-ublKKYx{ zu&(kn%nK}IY_Qx^e)T3{OseSWiZBGB@m#J?=-#{`A|sNAe%koaVw+}0P83;G{7lw( zj%gyvWwA;*$#s3VUR@p9TlFzbiIew^sau22Vbm~Pc=E= zWUJ$LKvlU}gZ46Gd1Lc8wgv1R9W9Rj@zm7%sEalN*MjtiCKNi$tFIgitaCe=nxd}nE$B)f^}1y^3-Blx@wAw{F|Hh{H2B^(<%Skh-JuB_BSvvdhWsraea7oN@sSW zTuyZLqe6+ZZL%sFIq&;Xox{qjHquCx*8HTuT(i;bsG>f1VSoJ{rK!bs9UXtUZFhqk z1%--C&qy94UWmZP>4oo2*SH|9{ik00$cfbUwrgH670tcIBWGhWOsl+i<@q-g2s^UY z&fQG>FNCI_iCY*9udcEbsB(VV6y}S^LOhC3(yg*TqU4|Xrtx9VSqkpw0UPj{U0OZ5 z@LL;i|1&-Du=>ctnhF#uTnuou{lIowLPAvk11TRQE1=r3esq_b=hqz`^KiC^?8#;y zhBOhE$|k&sfpx>WD(mgj>04Rd=9DI_cqSL)`o9m|CqOe#6Y z^3^B#8-!STXDIgL<70z40!nV$n2Kx*X30#xf4W@>8d}J|hihfe`RAN%Y_K^wQ3B;J zF%|{uoadzFh3C zDo6?~^AuwD-s`ruLM~Mt0_Hb(q#2e-n{c~d9G_xyXHI>Oe@sQ-zN%n3P-jntO&?nu z%TD~G1ytmDsHov^KViu3IAgM^^ewO`K8#1wj5IU%*Y<0`74Mnhh0hBSzsJh`vN z9(-0|z6?7xIFz{11wE6ZVpK6_exZ_zl9fg9w|whA1}iAvWGIt}%?v>#v!{=bq4%~& z1^5qf-@e&g1R3R1=<7dfFhY6oZ)&MVhPAYy65FNtSiAc36v-{?o|nRYEh)^Vdny3w zkJ&}ia*Ez1mL8SWvWampX!;@SRlRAsX*9oM^e_h#V>#(4#u|CmzxlZ^X*(3F4l`%Eu2uLK+X*?{kg z7gGIufU1X>At?OImu2$+L0t!!g#`xjEL=o6iMy_;uS15j>yRtat!KBMVB1~4z+OW` zW59=@ZQ+X#pRf>JeyxzV0|U`LybuqLbR&dXFq)aypaCd7`MlR+;6O$uF&l(*n)U3c zbvv_}`svziJnL~rCxQNR{ppc_&2Kdv(D#^)$_Afb?{|AH59?}cBmazzk?TSjU9hP` zKz{uj-D^AY28E5KNx7a!qtQV6YZ+(NhqXA{ z8xn5KJ2KNxsegZ%s0!vN@%+Z>b#xJkMqNmax#sbgVK4@>r}a#pqZ-lYne@5e z?Vjwnoxf^GjFYelxLK|DXue*>R`f>f6wjgH(=1hn#Z1tK`nu2?6O#PJDbe z)MRd~>xnkkB>Li^_x`**Xp=#UjvIMb93#wmSJRSiY}=G{u!vC1BI=!@{UP7e`+b; z0-_t1+2gcNOa|2D)E2ble7WpE-OfuF*ZO!KAcgjq&U%mo?V5_fkm8KqQJW#9rypwLa!`GQnSRt^$ zOZ|J>NL}Dl7NvJ*CMdAbo5SUQ@p3X>^k5_y*yyuIKerFRlZ<9k@NaDZBntVM%b)@4yD z7{w)N*dFSe7DO8*dw%Ycc?iEb;@sLMj-A%z@S{EueEXAezw|mJ{x1c6@P=f|!**`Z zthU+O$imDE9@D*POruE+!DMGhc*Q}Coq`&1sHx!U7z=c?X@2&EyqfE9|DmyF$b44@U<{vp?$vK!6LB$_lyHTH?1J)W;<}I`a3^bTZqyU@iXGqSoOy?T$v8_IF14@r#|SjIC~r*gO#l9%|l)ztGl( z-8Qxv`(KxT_z0*gy*AeDr-A#?6!wcb?we@g`v+j|%(oKfw>1h-M@Wm3na`ZkX=x+x ztUJhhHcP+mS=m|>T@d{Ri#d)N<~Y|D*4H<nGN=k|fRc8PBENy{GiVBF#y}iA6XE|ZZR<{!jeL<2rj9lnv zC@C(?&wuyNl1EU8e$Cgx;a1uuDdS}Iz81)-plMJ^PaXzO0k*$VjG$5JJKRRRl=k+P zmouQiZ3>cn8_EbK0j<4b-jAk4kS?id(nP0cKMf8>WdI@Kd2=m3$ zhN~HQ2bd^D!LT40L9n4LldXQsp*nrIv%F0GqD9op_9M95foUit$NAu^xnGNDEe~cW z5c6rRwfXZg{ih$6*XNl=G=YQXH=6?rCHo)|j3@#IQHepuBmInA{#2kR> zB+1~KN3mgkuWX`_!BzfCg-~4;4@hR=BdGz4b%D;Bm!ahWXMNL6$x z5JaSf*6Jk5;gV`Pkca)W$wjVU3>qRxiRa%)L^_FZ+`u(^MBl5A(3(As1COlPtuOdY z5n7EAnU-5+eeYgf-;Ryk*7u#PuBl;njNtp@KpB$Fyo%nDP&x`65Gy@uhF;nEo+RAx ziMCxDgM-O0Qbi<>004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x00(qQO+^Rf3k?%1AeY73Z~y=VD@jB_R9M5!ms@O9RTPH5 zy-%le&Rk1p%1k3Ov;~cgL`rwbwdg zdBe(uz`H;rU@$f20=t3DMj~1BIdDH9rzklixvGKNC9q-&6aU**NWe3V06bGkdqJCa z040T9YOT>a`z!uNm zLa_1ab==pOEsplxdwK8u5748ZI%2NtvUEuuFKv1bDJADG^zg=;Z*%EVUr|gHW*{7< zq9QuNM);P&mSqu-#{h5~2SXMwsc9GCv;!!asAE=KSslnRs8;HR2!#-1`c4Rd)(WrJ zOKoix(MW`$p&?HHafaUBi=%i({IUtFs*)rV3AEOn{qrxnyU(GNx}`A31rUqHc>T3k zS+;C3mTBTRE@#ekvGubr5K^GEMhJn|Tgv*U)>2=;j7X#$w5G4GpB+1Y;LESR!M5#! zAdEz^X3IZc2qCz)v4J^rssWf;5v8W43U6sCQc6ln45HBpix%F4X?jT}69^%&EQ{JZ z?;sHHBc()2Ng&{7{@wE^^>{dRxFfHWVFDtQQqt4Y%dWQFbRIp9<2V4!m{CSU{qo!y z3n93A^%_6#+t1#g_K`~2x%kx&J;1!XYH!lVgpc6-g&wxN^$tgm9w!(Gu<6BTd3be8 zmOkUg{F2EyeE9KJwzY0YYfVdY6R*6y3Dfiv3GFGr6#s%Q_`7jIvr4(9gf`I^rksszQ zEyc1dl+q}rFf9{vq@Ms}(wV|XJRX20ix=_uV~1kw`fe(P%DtfB$7Z`s7o(yU!KWKtTphoctBj^rAJKIB}AcZS!FBDk70`Y*v71BeXO(F{h>q*H!%X`zf}yZs$lx=PhqSvAkhr-t90- z=_u8%QUn8j{C+>f!`B%c97HLFVHh`U>^Kgl=_MQrqm*J`V1RTcGiE;+VR-z_77J<|waj|4UY zZDfC$r^?)soSXj!;2?NsCeduA0000bbVXQnWMOn=I%9HWVRU5xGB7eQEio}IF*8&$ zF*-0eIyEvYFfckWFcB=fK>z>%C3HntbYx+4WjbwdWNBu305UK#FfB1LEip4xF*!Ok dGdeReD=;uRFfchzFEjuE002ovPDHLkV1nYcNDu%3 literal 0 HcmV?d00001 diff --git a/packages/server/build/icons/48x48.png b/packages/server/build/icons/48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..b8858a57820277f2ee4c71f6dcb4f3da7c8c5336 GIT binary patch literal 1764 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 h;5|cr2h? Date: Sat, 14 Nov 2020 17:51:37 +0000 Subject: [PATCH 23/25] remove unnecessary images --- packages/server/build/icons/128x128.png | Bin 4058 -> 0 bytes packages/server/build/icons/16x16.png | Bin 940 -> 0 bytes packages/server/build/icons/256x256.png | Bin 8258 -> 0 bytes packages/server/build/icons/32x32.png | Bin 1319 -> 0 bytes packages/server/build/icons/48x48.png | Bin 1764 -> 0 bytes packages/server/build/icons/64x64.png | Bin 2161 -> 0 bytes 6 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/server/build/icons/128x128.png delete mode 100644 packages/server/build/icons/16x16.png delete mode 100644 packages/server/build/icons/256x256.png delete mode 100644 packages/server/build/icons/32x32.png delete mode 100644 packages/server/build/icons/48x48.png delete mode 100644 packages/server/build/icons/64x64.png diff --git a/packages/server/build/icons/128x128.png b/packages/server/build/icons/128x128.png deleted file mode 100644 index 260c3451f725d64048bed876e80a754fc1f00c96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4058 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 diff --git a/packages/server/build/icons/256x256.png b/packages/server/build/icons/256x256.png deleted file mode 100644 index be1e740b0a6ecbeb7fb9199a9e51d42f3b77d27c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8258 zcmdUU_d6V6*Z(Y{MJFM;=+Rbm5kf>?MDM*u@7)qYBtay4iB3fColUgpL0G+uURE!Q z?|827`(E$A@Lc=D?B2Wg?97>SKINP!byaynd}@3E00eG00c9zeiWVoRuzX+t6-sXfHg-rOBOixevZ;3s>Ua46>X(~qswfgV-%>@kYR_c_N zw$|^yHcT&mfTLBSBm-E-i(xW_hm$f_?T3J!0O1>Vygfeu#)eqK-@zGUl5*pydzo93nj|J`+mO*vkRIH zZ|nQu6?Tb$FnqU8D#LQkO@Yi37!gun7KL6X(c1?fNrGW1yVL7*r~bb83!=QN)ZZTlslZav&GEekIib`Ea}5HN+9ZWo~&6K z(ozHxa-PY29RW;oyo7&&;jHuLf3zEK2698k=m)HolXBg1Hqx-S+DUg$$Vua6JEk3_+ts)?jBNCw$q8ddnfV5KsyoGb1|SSgdS{ zmw9i#1PL}HNy+^Ki1sCx$>tj4pYS2PbduC@`AfPXOlHP6oiYOA7=PY890|CVc|WqR zBUlZ5s(JC4LkB`$!ka+yn2jwe)MYOpdwP455=EAl9abnRqQ0c3OYF?xVZZhC z_96^${dh!43HgJx)zGPX-xGX}s~TxJS(h81Q&^u=nCTaD_(6%l(ldj}zEn{`VKE?9 zqO+<$(d;y(qmHM;yutxVf3pj}W|z!Vlfz)vGQtAvTIQ{)s;gYZBl!SEYGJV{{ZA9B z{kz_ABIXh)j~;cjl^!2^61*fr$8kG1HEcki3d^r?JU_KGkuI$zq!wuFf&rZ|JC(mA zS%B~gemsE5Q3c}#F3nef=t#^+`|<5r3c7WU zLP_x%Q8*TYM9dH2P>S-E_@oG9Wfi*T;!d`?x#=shH+EyhK~Yd${na@$wyey#si_GM z3&XCIpCIh(v+9iGf+^G6ygZiCv9SaHuenaC%g;x67bu+Cc>^V-<|L&gO+~WRsq(dM z+n2Xl0A55d=KPW?)Z0;96Q5mE9U7NYq{+dZu42Tc#e3u_8hVJ;w~D^4 zCbQ0zs)a|Nc1eijaU(m<1N`mm?XwH&Vw##>YUv_10xDwmoEZx2V=n7x3GhOWTn`ay zN=g>fHAUQwR-_&_gI0&D7%lUw0;lS>Up|vud(1XeQmAoZWQmYup%loq$Auhk0`Hp! zRz^?M3141bVqae{r`V^8(h@xt5J(pB5vDZN>Pr`^{yo(9YuB4_t9o{CgM*95iGaL& z{i(|yt;$$lZtmCARD;uKX+LDJs5B?fEG^F}+at+V7cC20TqS`ocLwT|HKae# z7yiduySddm`xj%m$cs{aljy@`_sjG#Y5@O(mK*YuV zW_&-IVE+_+ zhPtIjLp&l23MTWuv_w4>F1nnr{0*p+;(2mBe@YN(jUVhaJ6z1LZ*Okw)T|YSVj+O! z0!44{hsDkySsDU+{Ul0-t#6) zB?as^hK=4k!g)Tx@Ps}#a;n+}T59*CKapo`S7^U7+g+fwwbhOCJEaW9qKcMhq_z^j z&yXYi#ZY~U6kJus|A)sz7^k~?mEXqCE4`L;3lsEMzn1f?3I_#sC6ieyb-752%UmFH z{ajOD70L62o)sHZ&c|dS4{V0OV}8E&L-CUnLgqTU$W$zZNcwq~Lv;V{zrF?-X3IO zVfmC?N6Q<7j(T@Hw6<51WzM*oaF_FXg%$Ui0UC0V<;6DfrG7 zd?-O&u-FuGdJH1 zRMEtE(HS=)nm>+jQl7M3*7_ly!eurF17xxWfRe`u(b8DG;!VK_frkHD!VQKKOJ)*h z4y!See46?8Q>nmybcP18ezbCQac~vzUiPsL<#r9ouZg^z9V=18_lpmqf9`?Hf`Woo zF1L^^Vv#?yfuANOgdfM@Dsi@$@agNPd>S4!-})<4@Bqfd$|_0E7sFaAB$*l8dPSse zY^=zh|633^fRhH|#k{31UyE8tco;4|E(8>1jNk#Smc;T4hn>Y9ZN(CMlRry9u$7G|U z%U4ky*;%y(jTcmz!8+0x5z$)O+GA5wUdt2HNYnT3RXpTmWWNUo&G*vvjo@?RDtx?E zfpKvq0|el6?7X?wb`x3t3Q%E{3V~2~akQmdGZ=kE-ublKKYx{ zu&(kn%nK}IY_Qx^e)T3{OseSWiZBGB@m#J?=-#{`A|sNAe%koaVw+}0P83;G{7lw( zj%gyvWwA;*$#s3VUR@p9TlFzbiIew^sau22Vbm~Pc=E= zWUJ$LKvlU}gZ46Gd1Lc8wgv1R9W9Rj@zm7%sEalN*MjtiCKNi$tFIgitaCe=nxd}nE$B)f^}1y^3-Blx@wAw{F|Hh{H2B^(<%Skh-JuB_BSvvdhWsraea7oN@sSW zTuyZLqe6+ZZL%sFIq&;Xox{qjHquCx*8HTuT(i;bsG>f1VSoJ{rK!bs9UXtUZFhqk z1%--C&qy94UWmZP>4oo2*SH|9{ik00$cfbUwrgH670tcIBWGhWOsl+i<@q-g2s^UY z&fQG>FNCI_iCY*9udcEbsB(VV6y}S^LOhC3(yg*TqU4|Xrtx9VSqkpw0UPj{U0OZ5 z@LL;i|1&-Du=>ctnhF#uTnuou{lIowLPAvk11TRQE1=r3esq_b=hqz`^KiC^?8#;y zhBOhE$|k&sfpx>WD(mgj>04Rd=9DI_cqSL)`o9m|CqOe#6Y z^3^B#8-!STXDIgL<70z40!nV$n2Kx*X30#xf4W@>8d}J|hihfe`RAN%Y_K^wQ3B;J zF%|{uoadzFh3C zDo6?~^AuwD-s`ruLM~Mt0_Hb(q#2e-n{c~d9G_xyXHI>Oe@sQ-zN%n3P-jntO&?nu z%TD~G1ytmDsHov^KViu3IAgM^^ewO`K8#1wj5IU%*Y<0`74Mnhh0hBSzsJh`vN z9(-0|z6?7xIFz{11wE6ZVpK6_exZ_zl9fg9w|whA1}iAvWGIt}%?v>#v!{=bq4%~& z1^5qf-@e&g1R3R1=<7dfFhY6oZ)&MVhPAYy65FNtSiAc36v-{?o|nRYEh)^Vdny3w zkJ&}ia*Ez1mL8SWvWampX!;@SRlRAsX*9oM^e_h#V>#(4#u|CmzxlZ^X*(3F4l`%Eu2uLK+X*?{kg z7gGIufU1X>At?OImu2$+L0t!!g#`xjEL=o6iMy_;uS15j>yRtat!KBMVB1~4z+OW` zW59=@ZQ+X#pRf>JeyxzV0|U`LybuqLbR&dXFq)aypaCd7`MlR+;6O$uF&l(*n)U3c zbvv_}`svziJnL~rCxQNR{ppc_&2Kdv(D#^)$_Afb?{|AH59?}cBmazzk?TSjU9hP` zKz{uj-D^AY28E5KNx7a!qtQV6YZ+(NhqXA{ z8xn5KJ2KNxsegZ%s0!vN@%+Z>b#xJkMqNmax#sbgVK4@>r}a#pqZ-lYne@5e z?Vjwnoxf^GjFYelxLK|DXue*>R`f>f6wjgH(=1hn#Z1tK`nu2?6O#PJDbe z)MRd~>xnkkB>Li^_x`**Xp=#UjvIMb93#wmSJRSiY}=G{u!vC1BI=!@{UP7e`+b; z0-_t1+2gcNOa|2D)E2ble7WpE-OfuF*ZO!KAcgjq&U%mo?V5_fkm8KqQJW#9rypwLa!`GQnSRt^$ zOZ|J>NL}Dl7NvJ*CMdAbo5SUQ@p3X>^k5_y*yyuIKerFRlZ<9k@NaDZBntVM%b)@4yD z7{w)N*dFSe7DO8*dw%Ycc?iEb;@sLMj-A%z@S{EueEXAezw|mJ{x1c6@P=f|!**`Z zthU+O$imDE9@D*POruE+!DMGhc*Q}Coq`&1sHx!U7z=c?X@2&EyqfE9|DmyF$b44@U<{vp?$vK!6LB$_lyHTH?1J)W;<}I`a3^bTZqyU@iXGqSoOy?T$v8_IF14@r#|SjIC~r*gO#l9%|l)ztGl( z-8Qxv`(KxT_z0*gy*AeDr-A#?6!wcb?we@g`v+j|%(oKfw>1h-M@Wm3na`ZkX=x+x ztUJhhHcP+mS=m|>T@d{Ri#d)N<~Y|D*4H<nGN=k|fRc8PBENy{GiVBF#y}iA6XE|ZZR<{!jeL<2rj9lnv zC@C(?&wuyNl1EU8e$Cgx;a1uuDdS}Iz81)-plMJ^PaXzO0k*$VjG$5JJKRRRl=k+P zmouQiZ3>cn8_EbK0j<4b-jAk4kS?id(nP0cKMf8>WdI@Kd2=m3$ zhN~HQ2bd^D!LT40L9n4LldXQsp*nrIv%F0GqD9op_9M95foUit$NAu^xnGNDEe~cW z5c6rRwfXZg{ih$6*XNl=G=YQXH=6?rCHo)|j3@#IQHepuBmInA{#2kR> zB+1~KN3mgkuWX`_!BzfCg-~4;4@hR=BdGz4b%D;Bm!ahWXMNL6$x z5JaSf*6Jk5;gV`Pkca)W$wjVU3>qRxiRa%)L^_FZ+`u(^MBl5A(3(As1COlPtuOdY z5n7EAnU-5+eeYgf-;Ryk*7u#PuBl;njNtp@KpB$Fyo%nDP&x`65Gy@uhF;nEo+RAx ziMCxDgM-O0Qbi<>004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x00(qQO+^Rf3k?%1AeY73Z~y=VD@jB_R9M5!ms@O9RTPH5 zy-%le&Rk1p%1k3Ov;~cgL`rwbwdg zdBe(uz`H;rU@$f20=t3DMj~1BIdDH9rzklixvGKNC9q-&6aU**NWe3V06bGkdqJCa z040T9YOT>a`z!uNm zLa_1ab==pOEsplxdwK8u5748ZI%2NtvUEuuFKv1bDJADG^zg=;Z*%EVUr|gHW*{7< zq9QuNM);P&mSqu-#{h5~2SXMwsc9GCv;!!asAE=KSslnRs8;HR2!#-1`c4Rd)(WrJ zOKoix(MW`$p&?HHafaUBi=%i({IUtFs*)rV3AEOn{qrxnyU(GNx}`A31rUqHc>T3k zS+;C3mTBTRE@#ekvGubr5K^GEMhJn|Tgv*U)>2=;j7X#$w5G4GpB+1Y;LESR!M5#! zAdEz^X3IZc2qCz)v4J^rssWf;5v8W43U6sCQc6ln45HBpix%F4X?jT}69^%&EQ{JZ z?;sHHBc()2Ng&{7{@wE^^>{dRxFfHWVFDtQQqt4Y%dWQFbRIp9<2V4!m{CSU{qo!y z3n93A^%_6#+t1#g_K`~2x%kx&J;1!XYH!lVgpc6-g&wxN^$tgm9w!(Gu<6BTd3be8 zmOkUg{F2EyeE9KJwzY0YYfVdY6R*6y3Dfiv3GFGr6#s%Q_`7jIvr4(9gf`I^rksszQ zEyc1dl+q}rFf9{vq@Ms}(wV|XJRX20ix=_uV~1kw`fe(P%DtfB$7Z`s7o(yU!KWKtTphoctBj^rAJKIB}AcZS!FBDk70`Y*v71BeXO(F{h>q*H!%X`zf}yZs$lx=PhqSvAkhr-t90- z=_u8%QUn8j{C+>f!`B%c97HLFVHh`U>^Kgl=_MQrqm*J`V1RTcGiE;+VR-z_77J<|waj|4UY zZDfC$r^?)soSXj!;2?NsCeduA0000bbVXQnWMOn=I%9HWVRU5xGB7eQEio}IF*8&$ zF*-0eIyEvYFfckWFcB=fK>z>%C3HntbYx+4WjbwdWNBu305UK#FfB1LEip4xF*!Ok dGdeReD=;uRFfchzFEjuE002ovPDHLkV1nYcNDu%3 diff --git a/packages/server/build/icons/48x48.png b/packages/server/build/icons/48x48.png deleted file mode 100644 index b8858a57820277f2ee4c71f6dcb4f3da7c8c5336..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1764 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 h;5|cr2h? Date: Sat, 14 Nov 2020 17:56:24 +0000 Subject: [PATCH 24/25] lint --- packages/server/src/electron.js | 2 +- .../standard-components/src/RichText.svelte | 32 +++++++------------ 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/packages/server/src/electron.js b/packages/server/src/electron.js index 57b6473614..a6fa3f5e90 100644 --- a/packages/server/src/electron.js +++ b/packages/server/src/electron.js @@ -49,7 +49,7 @@ async function startApp() { win = new BrowserWindow({ width: 1920, height: 1080, - icon: join(__dirname, "..", "build", "icons", "512x512.png") + icon: join(__dirname, "..", "build", "icons", "512x512.png"), }) win.setTitle(APP_TITLE) win.loadURL(APP_URL) diff --git a/packages/standard-components/src/RichText.svelte b/packages/standard-components/src/RichText.svelte index a033d3cc1d..af0c190578 100644 --- a/packages/standard-components/src/RichText.svelte +++ b/packages/standard-components/src/RichText.svelte @@ -1,5 +1,5 @@ - - \ No newline at end of file + + From e9e97101e9db65177e18f3f0ae986a681f3e76e5 Mon Sep 17 00:00:00 2001 From: Martin McKeaveney Date: Mon, 16 Nov 2020 13:54:26 +0000 Subject: [PATCH 25/25] v0.3.8 --- lerna.json | 2 +- packages/builder/package.json | 4 ++-- packages/client/package.json | 2 +- packages/server/package.json | 4 ++-- packages/standard-components/package.json | 8 ++++---- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lerna.json b/lerna.json index 2b9d044aa5..cc0b07a99e 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "0.3.7", + "version": "0.3.8", "npmClient": "yarn", "packages": [ "packages/*" diff --git a/packages/builder/package.json b/packages/builder/package.json index 6953257e35..68ff7f79d0 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/builder", - "version": "0.3.7", + "version": "0.3.8", "license": "AGPL-3.0", "private": true, "scripts": { @@ -64,7 +64,7 @@ }, "dependencies": { "@budibase/bbui": "^1.50.2", - "@budibase/client": "^0.3.7", + "@budibase/client": "^0.3.8", "@budibase/colorpicker": "^1.0.1", "@budibase/svelte-ag-grid": "^0.0.16", "@fortawesome/fontawesome-free": "^5.14.0", diff --git a/packages/client/package.json b/packages/client/package.json index a66ac002f8..8968f2995f 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/client", - "version": "0.3.7", + "version": "0.3.8", "license": "MPL-2.0", "main": "dist/budibase-client.js", "module": "dist/budibase-client.esm.mjs", diff --git a/packages/server/package.json b/packages/server/package.json index 6308c797f5..b4b3ace737 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/server", "email": "hi@budibase.com", - "version": "0.3.7", + "version": "0.3.8", "description": "Budibase Web Server", "main": "src/electron.js", "repository": { @@ -50,7 +50,7 @@ "author": "Budibase", "license": "AGPL-3.0-or-later", "dependencies": { - "@budibase/client": "^0.3.7", + "@budibase/client": "^0.3.8", "@koa/router": "^8.0.0", "@sendgrid/mail": "^7.1.1", "@sentry/node": "^5.19.2", diff --git a/packages/standard-components/package.json b/packages/standard-components/package.json index f9f9814ef3..f3c7272490 100644 --- a/packages/standard-components/package.json +++ b/packages/standard-components/package.json @@ -13,7 +13,7 @@ "dev:builder": "rollup -cw" }, "devDependencies": { - "@budibase/client": "^0.3.7", + "@budibase/client": "^0.3.8", "@rollup/plugin-commonjs": "^11.1.0", "lodash": "^4.17.15", "rollup": "^2.11.2", @@ -31,7 +31,7 @@ "keywords": [ "svelte" ], - "version": "0.3.7", + "version": "0.3.8", "license": "MIT", "gitHead": "284cceb9b703c38566c6e6363c022f79a08d5691", "dependencies": { @@ -43,8 +43,8 @@ "fast-sort": "^2.2.0", "flatpickr": "^4.6.6", "lodash.debounce": "^4.0.8", + "quill": "^1.3.7", "svelte-apexcharts": "^1.0.2", - "svelte-flatpickr": "^3.1.0", - "quill": "^1.3.7" + "svelte-flatpickr": "^3.1.0" } }