diff --git a/.pnp.cjs b/.pnp.cjs index 9385c0b86..a4e7390d5 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -5642,37 +5642,23 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "packageLocation": "./packages/layout/", "packageDependencies": [ ["@lowdefy/layout", "workspace:packages/layout"], - ["@babel/cli", "virtual:b6fa685df68481df8aea241d69a5d4ac044afe9a6d5347abc450d1a9a0b048b47a068daa4b51891dcc21a6f39ddd0469d8cb1b5ac2b845697d880ad1457b4396#npm:7.15.7"], - ["@babel/core", "npm:7.15.8"], - ["@babel/preset-env", "virtual:b6fa685df68481df8aea241d69a5d4ac044afe9a6d5347abc450d1a9a0b048b47a068daa4b51891dcc21a6f39ddd0469d8cb1b5ac2b845697d880ad1457b4396#npm:7.15.8"], - ["@babel/preset-react", "virtual:dddca670fd0b7758fb2e1b1a3e18ac7ebd1ecd06ecdd7acec2b78bccf1d35802cb22904bfbb233b16515a81f5cb819421786d20887823d98022b367036c1ad51#npm:7.14.5"], + ["@babel/preset-react", "virtual:04055f037dce009b6d437327a3df2c0a05f0436e14e2b705672dd0d1e0a3dfd29d8d62e0db8cb7e152c4b95e36ad3ccd6a68c9e962121dec9e597b25e0481519#npm:7.16.0"], ["@emotion/jest", "virtual:04055f037dce009b6d437327a3df2c0a05f0436e14e2b705672dd0d1e0a3dfd29d8d62e0db8cb7e152c4b95e36ad3ccd6a68c9e962121dec9e597b25e0481519#npm:11.5.0"], + ["@lowdefy/block-dev", "workspace:packages/block-dev"], ["@lowdefy/block-utils", "workspace:packages/block-utils"], ["@lowdefy/helpers", "workspace:packages/helpers"], + ["@swc/cli", "virtual:4a7337632ff6e9ee5a1c45a62a9ff4cc325a9367b21424babda93e269fe01b671e885bc41bdeebafb83c81f2a8eebbf0102043354a4e58905f61c8c3387cda1e#npm:0.1.51"], + ["@swc/core", "npm:1.2.107"], + ["@swc/jest", "virtual:4a7337632ff6e9ee5a1c45a62a9ff4cc325a9367b21424babda93e269fe01b671e885bc41bdeebafb83c81f2a8eebbf0102043354a4e58905f61c8c3387cda1e#npm:0.2.5"], + ["@testing-library/dom", "npm:8.10.1"], ["@testing-library/react", "virtual:04055f037dce009b6d437327a3df2c0a05f0436e14e2b705672dd0d1e0a3dfd29d8d62e0db8cb7e152c4b95e36ad3ccd6a68c9e962121dec9e597b25e0481519#npm:12.1.2"], + ["@testing-library/user-event", "virtual:04055f037dce009b6d437327a3df2c0a05f0436e14e2b705672dd0d1e0a3dfd29d8d62e0db8cb7e152c4b95e36ad3ccd6a68c9e962121dec9e597b25e0481519#npm:13.5.0"], ["antd", "virtual:d549c90a66e2dbf9d17def1c9f39538b909d66de1b505183e68abb1bbd2ae3684ddc299cb1d1031d812d46e521336dfd28859e8111e541eabeab93fcc1911b5b#npm:4.17.0-alpha.7"], - ["babel-jest", "virtual:4d3a3f79f60b2294109a713555c084c0489a2a4f97b0d45817e4aa63b6e15e6ef8f5a5dafe41a4ed8f9dc47978495fbbf92e43efd40de2306fb74fb2638214c5#npm:27.3.1"], - ["babel-loader", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:8.2.3"], - ["babel-plugin-import", "npm:1.13.3"], - ["clean-webpack-plugin", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.0.0"], - ["css-loader", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:6.4.0"], - ["html-webpack-plugin", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.4.0"], ["jest", "virtual:4a7337632ff6e9ee5a1c45a62a9ff4cc325a9367b21424babda93e269fe01b671e885bc41bdeebafb83c81f2a8eebbf0102043354a4e58905f61c8c3387cda1e#npm:27.3.1"], ["jest-serializer-html", "npm:7.1.0"], ["jest-transform-yaml", "npm:0.1.2"], - ["js-yaml", "npm:4.1.0"], - ["less", "npm:4.1.2"], - ["less-loader", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:10.2.0"], - ["process", "npm:0.11.10"], ["react", "npm:18.0.0-alpha-327d5c484-20211106"], - ["react-dom", "virtual:04055f037dce009b6d437327a3df2c0a05f0436e14e2b705672dd0d1e0a3dfd29d8d62e0db8cb7e152c4b95e36ad3ccd6a68c9e962121dec9e597b25e0481519#npm:18.0.0-alpha-327d5c484-20211106"], - ["react-markdown", "virtual:901d32fbc48074c2b3b637efca6217ea5a6224f6744fd9d90e163f033108983ffbef18bf28bc14de3eed24f567b2dff9f78899fa57e193d0a701625c61651046#npm:5.0.3"], - ["react-syntax-highlight", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:15.3.1"], - ["style-loader", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:3.3.1"], - ["webpack", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.59.1"], - ["webpack-cli", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.9.1"], - ["webpack-dev-server", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.3.1"], - ["yaml-loader", "npm:0.6.0"] + ["react-dom", "virtual:04055f037dce009b6d437327a3df2c0a05f0436e14e2b705672dd0d1e0a3dfd29d8d62e0db8cb7e152c4b95e36ad3ccd6a68c9e962121dec9e597b25e0481519#npm:18.0.0-alpha-327d5c484-20211106"] ], "linkType": "SOFT", }] @@ -5718,12 +5704,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "packageDependencies": [ ["@lowdefy/nunjucks", "workspace:packages/nunjucks"], ["@lowdefy/helpers", "workspace:packages/helpers"], - ["@swc/cli", "virtual:e63ad9bfa6ec53905cba84fb75f4e50334e3a53802ae3db1253f0c0ffaa0b90dd4a8266023fa69cfaf46281a2d69949c0e5f69029277d4d1fddfbbc9c01e4d03#npm:0.1.51"], + ["@swc/cli", "virtual:4a7337632ff6e9ee5a1c45a62a9ff4cc325a9367b21424babda93e269fe01b671e885bc41bdeebafb83c81f2a8eebbf0102043354a4e58905f61c8c3387cda1e#npm:0.1.51"], ["@swc/core", "npm:1.2.107"], ["@swc/jest", "virtual:4a7337632ff6e9ee5a1c45a62a9ff4cc325a9367b21424babda93e269fe01b671e885bc41bdeebafb83c81f2a8eebbf0102043354a4e58905f61c8c3387cda1e#npm:0.2.5"], - ["chokidar", "npm:3.5.2"], ["jest", "virtual:4a7337632ff6e9ee5a1c45a62a9ff4cc325a9367b21424babda93e269fe01b671e885bc41bdeebafb83c81f2a8eebbf0102043354a4e58905f61c8c3387cda1e#npm:27.3.1"], - ["moment", "npm:2.29.1"] + ["moment", "npm:2.29.1"], + ["nunjucks", "virtual:e63ad9bfa6ec53905cba84fb75f4e50334e3a53802ae3db1253f0c0ffaa0b90dd4a8266023fa69cfaf46281a2d69949c0e5f69029277d4d1fddfbbc9c01e4d03#npm:3.2.3"] ], "linkType": "SOFT", }] @@ -5770,8 +5756,12 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "packageDependencies": [ ["@lowdefy/server", "workspace:packages/server"], ["@lowdefy/api", "workspace:packages/api"], + ["@lowdefy/block-utils", "workspace:packages/block-utils"], + ["@lowdefy/blocks-antd", "workspace:packages/blocks/blocks-antd"], + ["@lowdefy/blocks-basic", "workspace:packages/blocks/blocks-basic"], + ["@lowdefy/engine", "workspace:packages/engine"], ["@lowdefy/helpers", "workspace:packages/helpers"], - ["@lowdefy/node-utils", "workspace:packages/node-utils"], + ["@lowdefy/layout", "workspace:packages/layout"], ["@next/eslint-plugin-next", "npm:12.0.2"], ["less", "npm:4.1.2"], ["less-loader", "virtual:003bebd8b7a948d12b44e2c11a621884feb1891eea3645171e827971487f79396db9f7422bc411ccf3f90877e94ec86f5c3da70b96efb5daddb2ee3b35eae5c6#npm:10.2.0"], @@ -6577,27 +6567,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "chokidar" ], "linkType": "HARD", - }], - ["virtual:e63ad9bfa6ec53905cba84fb75f4e50334e3a53802ae3db1253f0c0ffaa0b90dd4a8266023fa69cfaf46281a2d69949c0e5f69029277d4d1fddfbbc9c01e4d03#npm:0.1.51", { - "packageLocation": "./.yarn/__virtual__/@swc-cli-virtual-9c7dbd7e5b/0/cache/@swc-cli-npm-0.1.51-a93f90901e-348bf0aee8.zip/node_modules/@swc/cli/", - "packageDependencies": [ - ["@swc/cli", "virtual:e63ad9bfa6ec53905cba84fb75f4e50334e3a53802ae3db1253f0c0ffaa0b90dd4a8266023fa69cfaf46281a2d69949c0e5f69029277d4d1fddfbbc9c01e4d03#npm:0.1.51"], - ["@swc/core", "npm:1.2.107"], - ["@types/chokidar", null], - ["@types/swc__core", null], - ["chokidar", "npm:3.5.2"], - ["commander", "npm:7.2.0"], - ["fast-glob", "npm:3.2.7"], - ["slash", "npm:3.0.0"], - ["source-map", "npm:0.7.3"] - ], - "packagePeers": [ - "@swc/core", - "@types/chokidar", - "@types/swc__core", - "chokidar" - ], - "linkType": "HARD", }] ]], ["@swc/core", [ @@ -7688,23 +7657,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "SOFT", }], - ["virtual:36c2bdf33be5abed551d78782bb3a5c3c37b72e65c84f819049f6eefc3c639fe3b76bf2a992a0ee5282742eb654fa11e8a7cf1f988c39c2874d4e5989f96a83d#npm:1.1.0", { - "packageLocation": "./.yarn/__virtual__/@webpack-cli-configtest-virtual-2c7b1931f7/0/cache/@webpack-cli-configtest-npm-1.1.0-2b6b2ef3d7-69e7816b5b.zip/node_modules/@webpack-cli/configtest/", - "packageDependencies": [ - ["@webpack-cli/configtest", "virtual:36c2bdf33be5abed551d78782bb3a5c3c37b72e65c84f819049f6eefc3c639fe3b76bf2a992a0ee5282742eb654fa11e8a7cf1f988c39c2874d4e5989f96a83d#npm:1.1.0"], - ["@types/webpack", null], - ["@types/webpack-cli", null], - ["webpack", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.59.1"], - ["webpack-cli", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.9.1"] - ], - "packagePeers": [ - "@types/webpack-cli", - "@types/webpack", - "webpack-cli", - "webpack" - ], - "linkType": "HARD", - }], ["virtual:9d6de49a7b9ae04604621b26b33097b808a427c088e52b8f45bf16fab7a2582abf56de55debbdbab546a7bbc47bcfcaf80a6c9d790771e5782dae95b4c017aa0#npm:1.1.0", { "packageLocation": "./.yarn/__virtual__/@webpack-cli-configtest-virtual-8e2d628e23/0/cache/@webpack-cli-configtest-npm-1.1.0-2b6b2ef3d7-69e7816b5b.zip/node_modules/@webpack-cli/configtest/", "packageDependencies": [ @@ -7748,20 +7700,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "SOFT", }], - ["virtual:36c2bdf33be5abed551d78782bb3a5c3c37b72e65c84f819049f6eefc3c639fe3b76bf2a992a0ee5282742eb654fa11e8a7cf1f988c39c2874d4e5989f96a83d#npm:1.4.0", { - "packageLocation": "./.yarn/__virtual__/@webpack-cli-info-virtual-87455f0076/0/cache/@webpack-cli-info-npm-1.4.0-4a26ccee64-6385b1e2c5.zip/node_modules/@webpack-cli/info/", - "packageDependencies": [ - ["@webpack-cli/info", "virtual:36c2bdf33be5abed551d78782bb3a5c3c37b72e65c84f819049f6eefc3c639fe3b76bf2a992a0ee5282742eb654fa11e8a7cf1f988c39c2874d4e5989f96a83d#npm:1.4.0"], - ["@types/webpack-cli", null], - ["envinfo", "npm:7.8.1"], - ["webpack-cli", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.9.1"] - ], - "packagePeers": [ - "@types/webpack-cli", - "webpack-cli" - ], - "linkType": "HARD", - }], ["virtual:9d6de49a7b9ae04604621b26b33097b808a427c088e52b8f45bf16fab7a2582abf56de55debbdbab546a7bbc47bcfcaf80a6c9d790771e5782dae95b4c017aa0#npm:1.4.0", { "packageLocation": "./.yarn/__virtual__/@webpack-cli-info-virtual-0ca1a3b309/0/cache/@webpack-cli-info-npm-1.4.0-4a26ccee64-6385b1e2c5.zip/node_modules/@webpack-cli/info/", "packageDependencies": [ @@ -7799,23 +7737,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "SOFT", }], - ["virtual:36c2bdf33be5abed551d78782bb3a5c3c37b72e65c84f819049f6eefc3c639fe3b76bf2a992a0ee5282742eb654fa11e8a7cf1f988c39c2874d4e5989f96a83d#npm:1.6.0", { - "packageLocation": "./.yarn/__virtual__/@webpack-cli-serve-virtual-8636f92dac/0/cache/@webpack-cli-serve-npm-1.6.0-c7b35aa4ef-050a930b63.zip/node_modules/@webpack-cli/serve/", - "packageDependencies": [ - ["@webpack-cli/serve", "virtual:36c2bdf33be5abed551d78782bb3a5c3c37b72e65c84f819049f6eefc3c639fe3b76bf2a992a0ee5282742eb654fa11e8a7cf1f988c39c2874d4e5989f96a83d#npm:1.6.0"], - ["@types/webpack-cli", null], - ["@types/webpack-dev-server", null], - ["webpack-cli", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.9.1"], - ["webpack-dev-server", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.3.1"] - ], - "packagePeers": [ - "@types/webpack-cli", - "@types/webpack-dev-server", - "webpack-cli", - "webpack-dev-server" - ], - "linkType": "HARD", - }], ["virtual:9d6de49a7b9ae04604621b26b33097b808a427c088e52b8f45bf16fab7a2582abf56de55debbdbab546a7bbc47bcfcaf80a6c9d790771e5782dae95b4c017aa0#npm:1.6.0", { "packageLocation": "./.yarn/__virtual__/@webpack-cli-serve-virtual-0c69f9ede1/0/cache/@webpack-cli-serve-npm-1.6.0-c7b35aa4ef-050a930b63.zip/node_modules/@webpack-cli/serve/", "packageDependencies": [ @@ -8040,6 +7961,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["a-sync-waterfall", [ + ["npm:1.0.1", { + "packageLocation": "./.yarn/cache/a-sync-waterfall-npm-1.0.1-f6b6b49568-534948b50d.zip/node_modules/a-sync-waterfall/", + "packageDependencies": [ + ["a-sync-waterfall", "npm:1.0.1"] + ], + "linkType": "HARD", + }] + ]], ["abab", [ ["npm:2.0.5", { "packageLocation": "./.yarn/cache/abab-npm-2.0.5-ae8d5b629e-0ec951b46d.zip/node_modules/abab/", @@ -9267,27 +9197,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:8.2.3", { - "packageLocation": "./.yarn/__virtual__/babel-loader-virtual-3b798ef48d/0/cache/babel-loader-npm-8.2.3-855681b984-78e1e1a919.zip/node_modules/babel-loader/", - "packageDependencies": [ - ["babel-loader", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:8.2.3"], - ["@babel/core", "npm:7.15.8"], - ["@types/babel__core", null], - ["@types/webpack", null], - ["find-cache-dir", "npm:3.3.2"], - ["loader-utils", "npm:1.4.0"], - ["make-dir", "npm:3.1.0"], - ["schema-utils", "npm:2.7.1"], - ["webpack", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.59.1"] - ], - "packagePeers": [ - "@babel/core", - "@types/babel__core", - "@types/webpack", - "webpack" - ], - "linkType": "HARD", - }], ["virtual:dddca670fd0b7758fb2e1b1a3e18ac7ebd1ecd06ecdd7acec2b78bccf1d35802cb22904bfbb233b16515a81f5cb819421786d20887823d98022b367036c1ad51#npm:8.2.3", { "packageLocation": "./.yarn/__virtual__/babel-loader-virtual-2af43e9687/0/cache/babel-loader-npm-8.2.3-855681b984-78e1e1a919.zip/node_modules/babel-loader/", "packageDependencies": [ @@ -9320,17 +9229,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], - ["babel-plugin-import", [ - ["npm:1.13.3", { - "packageLocation": "./.yarn/cache/babel-plugin-import-npm-1.13.3-498736f60a-1be664a34f.zip/node_modules/babel-plugin-import/", - "packageDependencies": [ - ["babel-plugin-import", "npm:1.13.3"], - ["@babel/helper-module-imports", "npm:7.15.4"], - ["@babel/runtime", "npm:7.15.4"] - ], - "linkType": "HARD", - }] - ]], ["babel-plugin-istanbul", [ ["npm:6.1.1", { "packageLocation": "./.yarn/cache/babel-plugin-istanbul-npm-6.1.1-df824055e4-cb4fd95738.zip/node_modules/babel-plugin-istanbul/", @@ -10541,20 +10439,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.0.0", { - "packageLocation": "./.yarn/__virtual__/clean-webpack-plugin-virtual-2801ccda56/0/cache/clean-webpack-plugin-npm-4.0.0-5a85c794c8-199425e87b.zip/node_modules/clean-webpack-plugin/", - "packageDependencies": [ - ["clean-webpack-plugin", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.0.0"], - ["@types/webpack", null], - ["del", "npm:4.1.1"], - ["webpack", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.59.1"] - ], - "packagePeers": [ - "@types/webpack", - "webpack" - ], - "linkType": "HARD", - }], ["virtual:dddca670fd0b7758fb2e1b1a3e18ac7ebd1ecd06ecdd7acec2b78bccf1d35802cb22904bfbb233b16515a81f5cb819421786d20887823d98022b367036c1ad51#npm:4.0.0", { "packageLocation": "./.yarn/__virtual__/clean-webpack-plugin-virtual-3d7fd34056/0/cache/clean-webpack-plugin-npm-4.0.0-5a85c794c8-199425e87b.zip/node_modules/clean-webpack-plugin/", "packageDependencies": [ @@ -10817,6 +10701,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], + ["npm:5.1.0", { + "packageLocation": "./.yarn/cache/commander-npm-5.1.0-7e939e7832-0b7fec1712.zip/node_modules/commander/", + "packageDependencies": [ + ["commander", "npm:5.1.0"] + ], + "linkType": "HARD", + }], ["npm:7.2.0", { "packageLocation": "./.yarn/cache/commander-npm-7.2.0-19178180f8-53501cbeee.zip/node_modules/commander/", "packageDependencies": [ @@ -11401,27 +11292,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:6.4.0", { - "packageLocation": "./.yarn/__virtual__/css-loader-virtual-7fd4aca2c1/0/cache/css-loader-npm-6.4.0-b541b3e985-e842905fce.zip/node_modules/css-loader/", - "packageDependencies": [ - ["css-loader", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:6.4.0"], - ["@types/webpack", null], - ["icss-utils", "virtual:cdc7fe25a42c1c915a3e2cc1d88a6050af31a566c30884dc9e8d0b1aaf72e44c7b8a5b00c55ce4e836b23b713118e647ce0fa2afc6c89d1a011289495565f043#npm:5.1.0"], - ["postcss", "npm:8.3.11"], - ["postcss-modules-extract-imports", "virtual:cdc7fe25a42c1c915a3e2cc1d88a6050af31a566c30884dc9e8d0b1aaf72e44c7b8a5b00c55ce4e836b23b713118e647ce0fa2afc6c89d1a011289495565f043#npm:3.0.0"], - ["postcss-modules-local-by-default", "virtual:cdc7fe25a42c1c915a3e2cc1d88a6050af31a566c30884dc9e8d0b1aaf72e44c7b8a5b00c55ce4e836b23b713118e647ce0fa2afc6c89d1a011289495565f043#npm:4.0.0"], - ["postcss-modules-scope", "virtual:cdc7fe25a42c1c915a3e2cc1d88a6050af31a566c30884dc9e8d0b1aaf72e44c7b8a5b00c55ce4e836b23b713118e647ce0fa2afc6c89d1a011289495565f043#npm:3.0.0"], - ["postcss-modules-values", "virtual:cdc7fe25a42c1c915a3e2cc1d88a6050af31a566c30884dc9e8d0b1aaf72e44c7b8a5b00c55ce4e836b23b713118e647ce0fa2afc6c89d1a011289495565f043#npm:4.0.0"], - ["postcss-value-parser", "npm:4.1.0"], - ["semver", "npm:7.3.5"], - ["webpack", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.59.1"] - ], - "packagePeers": [ - "@types/webpack", - "webpack" - ], - "linkType": "HARD", - }], ["virtual:dddca670fd0b7758fb2e1b1a3e18ac7ebd1ecd06ecdd7acec2b78bccf1d35802cb22904bfbb233b16515a81f5cb819421786d20887823d98022b367036c1ad51#npm:6.4.0", { "packageLocation": "./.yarn/__virtual__/css-loader-virtual-cdc7fe25a4/0/cache/css-loader-npm-6.4.0-b541b3e985-e842905fce.zip/node_modules/css-loader/", "packageDependencies": [ @@ -14846,13 +14716,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["highlight.js", "npm:10.7.3"] ], "linkType": "HARD", - }], - ["npm:9.18.5", { - "packageLocation": "./.yarn/unplugged/highlight.js-npm-9.18.5-571500f48d/node_modules/highlight.js/", - "packageDependencies": [ - ["highlight.js", "npm:9.18.5"] - ], - "linkType": "HARD", }] ]], ["history", [ @@ -15027,24 +14890,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.4.0", { - "packageLocation": "./.yarn/__virtual__/html-webpack-plugin-virtual-6821d27cf9/0/cache/html-webpack-plugin-npm-5.4.0-190e4589f6-4963e1955d.zip/node_modules/html-webpack-plugin/", - "packageDependencies": [ - ["html-webpack-plugin", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.4.0"], - ["@types/html-minifier-terser", "npm:6.0.0"], - ["@types/webpack", null], - ["html-minifier-terser", "npm:6.0.2"], - ["lodash", "npm:4.17.21"], - ["pretty-error", "npm:3.0.4"], - ["tapable", "npm:2.2.1"], - ["webpack", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.59.1"] - ], - "packagePeers": [ - "@types/webpack", - "webpack" - ], - "linkType": "HARD", - }], ["virtual:dddca670fd0b7758fb2e1b1a3e18ac7ebd1ecd06ecdd7acec2b78bccf1d35802cb22904bfbb233b16515a81f5cb819421786d20887823d98022b367036c1ad51#npm:5.4.0", { "packageLocation": "./.yarn/__virtual__/html-webpack-plugin-virtual-fcd86b7f9f/0/cache/html-webpack-plugin-npm-5.4.0-190e4589f6-4963e1955d.zip/node_modules/html-webpack-plugin/", "packageDependencies": [ @@ -17449,24 +17294,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "webpack" ], "linkType": "HARD", - }], - ["virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:10.2.0", { - "packageLocation": "./.yarn/__virtual__/less-loader-virtual-90ae046641/0/cache/less-loader-npm-10.2.0-9c6619a5c0-42a2b56a9d.zip/node_modules/less-loader/", - "packageDependencies": [ - ["less-loader", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:10.2.0"], - ["@types/less", null], - ["@types/webpack", null], - ["klona", "npm:2.0.4"], - ["less", "npm:4.1.2"], - ["webpack", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.59.1"] - ], - "packagePeers": [ - "@types/less", - "@types/webpack", - "less", - "webpack" - ], - "linkType": "HARD", }] ]], ["leven", [ @@ -19657,6 +19484,31 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["nunjucks", [ + ["npm:3.2.3", { + "packageLocation": "./.yarn/cache/nunjucks-npm-3.2.3-ae8b5fd14c-9d0125acf9.zip/node_modules/nunjucks/", + "packageDependencies": [ + ["nunjucks", "npm:3.2.3"] + ], + "linkType": "SOFT", + }], + ["virtual:e63ad9bfa6ec53905cba84fb75f4e50334e3a53802ae3db1253f0c0ffaa0b90dd4a8266023fa69cfaf46281a2d69949c0e5f69029277d4d1fddfbbc9c01e4d03#npm:3.2.3", { + "packageLocation": "./.yarn/__virtual__/nunjucks-virtual-45061312a7/0/cache/nunjucks-npm-3.2.3-ae8b5fd14c-9d0125acf9.zip/node_modules/nunjucks/", + "packageDependencies": [ + ["nunjucks", "virtual:e63ad9bfa6ec53905cba84fb75f4e50334e3a53802ae3db1253f0c0ffaa0b90dd4a8266023fa69cfaf46281a2d69949c0e5f69029277d4d1fddfbbc9c01e4d03#npm:3.2.3"], + ["@types/chokidar", null], + ["a-sync-waterfall", "npm:1.0.1"], + ["asap", "npm:2.0.6"], + ["chokidar", null], + ["commander", "npm:5.1.0"] + ], + "packagePeers": [ + "@types/chokidar", + "chokidar" + ], + "linkType": "HARD", + }] + ]], ["nwsapi", [ ["npm:2.2.0", { "packageLocation": "./.yarn/cache/nwsapi-npm-2.2.0-8f05590043-5ef4a9bc0c.zip/node_modules/nwsapi/", @@ -22964,34 +22816,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], - ["react-syntax-highlight", [ - ["npm:15.3.1", { - "packageLocation": "./.yarn/cache/react-syntax-highlight-npm-15.3.1-d7cccdaa21-cada9bec5d.zip/node_modules/react-syntax-highlight/", - "packageDependencies": [ - ["react-syntax-highlight", "npm:15.3.1"] - ], - "linkType": "SOFT", - }], - ["virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:15.3.1", { - "packageLocation": "./.yarn/__virtual__/react-syntax-highlight-virtual-49f1718c5f/0/cache/react-syntax-highlight-npm-15.3.1-d7cccdaa21-cada9bec5d.zip/node_modules/react-syntax-highlight/", - "packageDependencies": [ - ["react-syntax-highlight", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:15.3.1"], - ["@types/react", null], - ["@types/react-dom", null], - ["highlight.js", "npm:9.18.5"], - ["prop-types", "npm:15.7.2"], - ["react", "npm:18.0.0-alpha-327d5c484-20211106"], - ["react-dom", "virtual:04055f037dce009b6d437327a3df2c0a05f0436e14e2b705672dd0d1e0a3dfd29d8d62e0db8cb7e152c4b95e36ad3ccd6a68c9e962121dec9e597b25e0481519#npm:18.0.0-alpha-327d5c484-20211106"] - ], - "packagePeers": [ - "@types/react-dom", - "@types/react", - "react-dom", - "react" - ], - "linkType": "HARD", - }] - ]], ["react-syntax-highlighter", [ ["npm:15.4.4", { "packageLocation": "./.yarn/cache/react-syntax-highlighter-npm-15.4.4-18a389dc78-18de0b279c.zip/node_modules/react-syntax-highlighter/", @@ -24899,19 +24723,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:3.3.1", { - "packageLocation": "./.yarn/__virtual__/style-loader-virtual-2003c34588/0/cache/style-loader-npm-3.3.1-4bbb6ec77f-470feef680.zip/node_modules/style-loader/", - "packageDependencies": [ - ["style-loader", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:3.3.1"], - ["@types/webpack", null], - ["webpack", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.59.1"] - ], - "packagePeers": [ - "@types/webpack", - "webpack" - ], - "linkType": "HARD", - }], ["virtual:dddca670fd0b7758fb2e1b1a3e18ac7ebd1ecd06ecdd7acec2b78bccf1d35802cb22904bfbb233b16515a81f5cb819421786d20887823d98022b367036c1ad51#npm:3.3.1", { "packageLocation": "./.yarn/__virtual__/style-loader-virtual-6eab0032f8/0/cache/style-loader-npm-3.3.1-4bbb6ec77f-470feef680.zip/node_modules/style-loader/", "packageDependencies": [ @@ -25409,37 +25220,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "webpack" ], "linkType": "HARD", - }], - ["virtual:ff7dd4933e0aec384cd97caae1562c0fa533c08c8b5e437b9eabe8a77fb26b0214d54dd5af99747631610ae2e2bcbe33711254b651cc1ac0aa3865234aea5187#npm:5.2.4", { - "packageLocation": "./.yarn/__virtual__/terser-webpack-plugin-virtual-77b200190e/0/cache/terser-webpack-plugin-npm-5.2.4-cc8bd7c055-ddbcdd28f9.zip/node_modules/terser-webpack-plugin/", - "packageDependencies": [ - ["terser-webpack-plugin", "virtual:ff7dd4933e0aec384cd97caae1562c0fa533c08c8b5e437b9eabe8a77fb26b0214d54dd5af99747631610ae2e2bcbe33711254b651cc1ac0aa3865234aea5187#npm:5.2.4"], - ["@swc/core", null], - ["@types/esbuild", null], - ["@types/swc__core", null], - ["@types/uglify-js", null], - ["@types/webpack", null], - ["esbuild", null], - ["jest-worker", "npm:27.3.1"], - ["p-limit", "npm:3.1.0"], - ["schema-utils", "npm:3.1.1"], - ["serialize-javascript", "npm:6.0.0"], - ["source-map", "npm:0.6.1"], - ["terser", "npm:5.9.0"], - ["uglify-js", null], - ["webpack", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.59.1"] - ], - "packagePeers": [ - "@swc/core", - "@types/esbuild", - "@types/swc__core", - "@types/uglify-js", - "@types/webpack", - "esbuild", - "uglify-js", - "webpack" - ], - "linkType": "HARD", }] ]], ["test-exclude", [ @@ -26702,43 +26482,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.59.1", { - "packageLocation": "./.yarn/__virtual__/webpack-virtual-ff7dd4933e/0/cache/webpack-npm-5.59.1-4496e1cd5a-6a24f71b64.zip/node_modules/webpack/", - "packageDependencies": [ - ["webpack", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.59.1"], - ["@types/eslint-scope", "npm:3.7.1"], - ["@types/estree", "npm:0.0.50"], - ["@types/webpack-cli", null], - ["@webassemblyjs/ast", "npm:1.11.1"], - ["@webassemblyjs/wasm-edit", "npm:1.11.1"], - ["@webassemblyjs/wasm-parser", "npm:1.11.1"], - ["acorn", "npm:8.5.0"], - ["acorn-import-assertions", "virtual:bb1d7c4b2aab49ae14f02519d8d46de9e4793f1ebd19ee23b76124f9db9d9ca8bec08fb45808252f620b9cf35410eb0ca7a2532357684b305fdec22aabb75ae6#npm:1.8.0"], - ["browserslist", "npm:4.17.5"], - ["chrome-trace-event", "npm:1.0.3"], - ["enhanced-resolve", "npm:5.8.3"], - ["es-module-lexer", "npm:0.9.3"], - ["eslint-scope", "npm:5.1.1"], - ["events", "npm:3.3.0"], - ["glob-to-regexp", "npm:0.4.1"], - ["graceful-fs", "npm:4.2.8"], - ["json-parse-better-errors", "npm:1.0.2"], - ["loader-runner", "npm:4.2.0"], - ["mime-types", "npm:2.1.33"], - ["neo-async", "npm:2.6.2"], - ["schema-utils", "npm:3.1.1"], - ["tapable", "npm:2.2.1"], - ["terser-webpack-plugin", "virtual:ff7dd4933e0aec384cd97caae1562c0fa533c08c8b5e437b9eabe8a77fb26b0214d54dd5af99747631610ae2e2bcbe33711254b651cc1ac0aa3865234aea5187#npm:5.2.4"], - ["watchpack", "npm:2.2.0"], - ["webpack-cli", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.9.1"], - ["webpack-sources", "npm:3.2.1"] - ], - "packagePeers": [ - "@types/webpack-cli", - "webpack-cli" - ], - "linkType": "HARD", - }], ["virtual:5530fb2f78bdcac4cb19ba3a563bd7922f9ce4bbd52ce8b4a756e29c4126b22271a917e55c981a4204cf762649c40aa32df13b924608cade4f2850397a837b5b#npm:5.60.0", { "packageLocation": "./.yarn/__virtual__/webpack-virtual-b8183ce48c/0/cache/webpack-npm-5.60.0-4763b66d54-3c37424516.zip/node_modules/webpack/", "packageDependencies": [ @@ -26900,47 +26643,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.9.1", { - "packageLocation": "./.yarn/__virtual__/webpack-cli-virtual-36c2bdf33b/0/cache/webpack-cli-npm-4.9.1-1b8a5f360f-2aff0349c1.zip/node_modules/webpack-cli/", - "packageDependencies": [ - ["webpack-cli", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.9.1"], - ["@discoveryjs/json-ext", "npm:0.5.5"], - ["@types/webpack", null], - ["@types/webpack-bundle-analyzer", null], - ["@types/webpack-cli__generators", null], - ["@types/webpack-cli__migrate", null], - ["@types/webpack-dev-server", null], - ["@webpack-cli/configtest", "virtual:36c2bdf33be5abed551d78782bb3a5c3c37b72e65c84f819049f6eefc3c639fe3b76bf2a992a0ee5282742eb654fa11e8a7cf1f988c39c2874d4e5989f96a83d#npm:1.1.0"], - ["@webpack-cli/generators", null], - ["@webpack-cli/info", "virtual:36c2bdf33be5abed551d78782bb3a5c3c37b72e65c84f819049f6eefc3c639fe3b76bf2a992a0ee5282742eb654fa11e8a7cf1f988c39c2874d4e5989f96a83d#npm:1.4.0"], - ["@webpack-cli/migrate", null], - ["@webpack-cli/serve", "virtual:36c2bdf33be5abed551d78782bb3a5c3c37b72e65c84f819049f6eefc3c639fe3b76bf2a992a0ee5282742eb654fa11e8a7cf1f988c39c2874d4e5989f96a83d#npm:1.6.0"], - ["colorette", "npm:2.0.16"], - ["commander", "npm:7.2.0"], - ["execa", "npm:5.1.1"], - ["fastest-levenshtein", "npm:1.0.12"], - ["import-local", "npm:3.0.3"], - ["interpret", "npm:2.2.0"], - ["rechoir", "npm:0.7.1"], - ["webpack", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.59.1"], - ["webpack-bundle-analyzer", null], - ["webpack-dev-server", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.3.1"], - ["webpack-merge", "npm:5.8.0"] - ], - "packagePeers": [ - "@types/webpack-bundle-analyzer", - "@types/webpack-cli__generators", - "@types/webpack-cli__migrate", - "@types/webpack-dev-server", - "@types/webpack", - "@webpack-cli/generators", - "@webpack-cli/migrate", - "webpack-bundle-analyzer", - "webpack-dev-server", - "webpack" - ], - "linkType": "HARD", - }], ["virtual:dddca670fd0b7758fb2e1b1a3e18ac7ebd1ecd06ecdd7acec2b78bccf1d35802cb22904bfbb233b16515a81f5cb819421786d20887823d98022b367036c1ad51#npm:4.9.1", { "packageLocation": "./.yarn/__virtual__/webpack-cli-virtual-9d6de49a7b/0/cache/webpack-cli-npm-4.9.1-1b8a5f360f-2aff0349c1.zip/node_modules/webpack-cli/", "packageDependencies": [ @@ -26991,24 +26693,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "SOFT", }], - ["virtual:05048fd4ff5baaedc11111d294f7f745baed2d3719a140f98172fdae30def5a186f20856b73a983079af6152e97c85b64b14ccd6b58185c50ef49726edf1c5c4#npm:5.2.1", { - "packageLocation": "./.yarn/__virtual__/webpack-dev-middleware-virtual-c0e806acf1/0/cache/webpack-dev-middleware-npm-5.2.1-8933c4e1b9-06f3ef14ec.zip/node_modules/webpack-dev-middleware/", - "packageDependencies": [ - ["webpack-dev-middleware", "virtual:05048fd4ff5baaedc11111d294f7f745baed2d3719a140f98172fdae30def5a186f20856b73a983079af6152e97c85b64b14ccd6b58185c50ef49726edf1c5c4#npm:5.2.1"], - ["@types/webpack", null], - ["colorette", "npm:2.0.16"], - ["memfs", "npm:3.3.0"], - ["mime-types", "npm:2.1.33"], - ["range-parser", "npm:1.2.1"], - ["schema-utils", "npm:3.1.1"], - ["webpack", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.59.1"] - ], - "packagePeers": [ - "@types/webpack", - "webpack" - ], - "linkType": "HARD", - }], ["virtual:5530fb2f78bdcac4cb19ba3a563bd7922f9ce4bbd52ce8b4a756e29c4126b22271a917e55c981a4204cf762649c40aa32df13b924608cade4f2850397a837b5b#npm:5.2.1", { "packageLocation": "./.yarn/__virtual__/webpack-dev-middleware-virtual-30d942e78d/0/cache/webpack-dev-middleware-npm-5.2.1-8933c4e1b9-06f3ef14ec.zip/node_modules/webpack-dev-middleware/", "packageDependencies": [ @@ -27095,48 +26779,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "HARD", }], - ["virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.3.1", { - "packageLocation": "./.yarn/__virtual__/webpack-dev-server-virtual-05048fd4ff/0/cache/webpack-dev-server-npm-4.3.1-de78d1d07b-ce9d054c3d.zip/node_modules/webpack-dev-server/", - "packageDependencies": [ - ["webpack-dev-server", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.3.1"], - ["@types/webpack", null], - ["@types/webpack-cli", null], - ["ansi-html-community", "npm:0.0.8"], - ["bonjour", "npm:3.5.0"], - ["chokidar", "npm:3.5.2"], - ["colorette", "npm:2.0.16"], - ["compression", "npm:1.7.4"], - ["connect-history-api-fallback", "npm:1.6.0"], - ["del", "npm:6.0.0"], - ["express", "npm:4.17.1"], - ["graceful-fs", "npm:4.2.8"], - ["html-entities", "npm:2.3.2"], - ["http-proxy-middleware", "npm:2.0.1"], - ["internal-ip", "npm:6.2.0"], - ["ipaddr.js", "npm:2.0.1"], - ["open", "npm:8.4.0"], - ["p-retry", "npm:4.6.1"], - ["portfinder", "npm:1.0.28"], - ["schema-utils", "npm:3.1.1"], - ["selfsigned", "npm:1.10.11"], - ["serve-index", "npm:1.9.1"], - ["sockjs", "npm:0.3.21"], - ["spdy", "npm:4.0.2"], - ["strip-ansi", "npm:7.0.1"], - ["url", "npm:0.11.0"], - ["webpack", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:5.59.1"], - ["webpack-cli", "virtual:54dfdd95092c538917b1daf717721dd3beca716f0768958f8123e1439693d909b26a74c88b3fb65b402559e626be2accab32554fb8a3874e699047fe18793f5e#npm:4.9.1"], - ["webpack-dev-middleware", "virtual:05048fd4ff5baaedc11111d294f7f745baed2d3719a140f98172fdae30def5a186f20856b73a983079af6152e97c85b64b14ccd6b58185c50ef49726edf1c5c4#npm:5.2.1"], - ["ws", "virtual:d418aa2fd3802396a3609011c8ddf4cffd0e5efa5929deb4f0d8555ef5db38841661fb6661806d305a1a3864ea34fb6f13cc13bf523dea3c628a9df083557e85#npm:8.2.3"] - ], - "packagePeers": [ - "@types/webpack-cli", - "@types/webpack", - "webpack-cli", - "webpack" - ], - "linkType": "HARD", - }], ["virtual:b53a04db2373b409d0dea1659b79650c16947c7d2b7dd5333d6e7e6bf5908028be532ed8184cb174bc43e32bc4e7857e66233e00018f041b65ac0c42636866a2#npm:4.3.1", { "packageLocation": "./.yarn/__virtual__/webpack-dev-server-virtual-5530fb2f78/0/cache/webpack-dev-server-npm-4.3.1-de78d1d07b-ce9d054c3d.zip/node_modules/webpack-dev-server/", "packageDependencies": [ diff --git a/.yarn/cache/a-sync-waterfall-npm-1.0.1-f6b6b49568-534948b50d.zip b/.yarn/cache/a-sync-waterfall-npm-1.0.1-f6b6b49568-534948b50d.zip new file mode 100644 index 000000000..d49013a94 Binary files /dev/null and b/.yarn/cache/a-sync-waterfall-npm-1.0.1-f6b6b49568-534948b50d.zip differ diff --git a/.yarn/cache/babel-plugin-import-npm-1.13.3-498736f60a-1be664a34f.zip b/.yarn/cache/babel-plugin-import-npm-1.13.3-498736f60a-1be664a34f.zip deleted file mode 100644 index a753f5ea9..000000000 Binary files a/.yarn/cache/babel-plugin-import-npm-1.13.3-498736f60a-1be664a34f.zip and /dev/null differ diff --git a/.yarn/cache/commander-npm-5.1.0-7e939e7832-0b7fec1712.zip b/.yarn/cache/commander-npm-5.1.0-7e939e7832-0b7fec1712.zip new file mode 100644 index 000000000..ceec307a3 Binary files /dev/null and b/.yarn/cache/commander-npm-5.1.0-7e939e7832-0b7fec1712.zip differ diff --git a/.yarn/cache/highlight.js-npm-9.18.5-571500f48d-a8afdb3958.zip b/.yarn/cache/highlight.js-npm-9.18.5-571500f48d-a8afdb3958.zip deleted file mode 100644 index 8197ac201..000000000 Binary files a/.yarn/cache/highlight.js-npm-9.18.5-571500f48d-a8afdb3958.zip and /dev/null differ diff --git a/.yarn/cache/nunjucks-npm-3.2.3-ae8b5fd14c-9d0125acf9.zip b/.yarn/cache/nunjucks-npm-3.2.3-ae8b5fd14c-9d0125acf9.zip new file mode 100644 index 000000000..dcae2b372 Binary files /dev/null and b/.yarn/cache/nunjucks-npm-3.2.3-ae8b5fd14c-9d0125acf9.zip differ diff --git a/.yarn/cache/react-syntax-highlight-npm-15.3.1-d7cccdaa21-cada9bec5d.zip b/.yarn/cache/react-syntax-highlight-npm-15.3.1-d7cccdaa21-cada9bec5d.zip deleted file mode 100644 index e8ca1487b..000000000 Binary files a/.yarn/cache/react-syntax-highlight-npm-15.3.1-d7cccdaa21-cada9bec5d.zip and /dev/null differ diff --git a/packages/server/src/components/Block.js b/packages/api/src/context/createApiContext.js similarity index 65% rename from packages/server/src/components/Block.js rename to packages/api/src/context/createApiContext.js index 7fce78c15..b116ba2fa 100644 --- a/packages/server/src/components/Block.js +++ b/packages/api/src/context/createApiContext.js @@ -14,17 +14,14 @@ limitations under the License. */ -import React from 'react'; +import createReadConfigFile from './readConfigFile.js'; -const Block = ({ pageContext, lowdefy }) => { - const { pageConfig } = pageContext; - const Comp = lowdefy.Components[pageConfig.type]; - return ( - <> -
{JSON.stringify(pageConfig)}
- - - ); -}; +async function createApiContext({ buildDirectory }) { + const readConfigFile = createReadConfigFile({ buildDirectory }); + return { + authorize: () => true, + readConfigFile, + }; +} -export default Block; +export default createApiContext; diff --git a/packages/api/src/context/readConfigFile.js b/packages/api/src/context/readConfigFile.js index beb710e42..0e68b579f 100644 --- a/packages/api/src/context/readConfigFile.js +++ b/packages/api/src/context/readConfigFile.js @@ -15,7 +15,8 @@ */ import path from 'path'; -import { cachedPromises, getFileExtension, readFile } from '@lowdefy/node-utils'; +import { cachedPromises } from '@lowdefy/helpers'; +import { getFileExtension, readFile } from '@lowdefy/node-utils'; function createReadConfigFile({ buildDirectory }) { async function readConfigFile(filePath) { diff --git a/packages/api/src/index.js b/packages/api/src/index.js index 6a64ac3a6..2454b483a 100644 --- a/packages/api/src/index.js +++ b/packages/api/src/index.js @@ -14,6 +14,7 @@ limitations under the License. */ +import createApiContext from './context/createApiContext.js'; import createContext from './context/createContext.js'; import getHomePageId from './routes/rootConfig/getHomePageId.js'; import getPageConfig from './routes/page/getPageConfig.js'; @@ -32,8 +33,7 @@ import { } from './context/errors.js'; export { - AuthenticationError, - ConfigurationError, + createApiContext, createContext, getHomePageId, getPageConfig, @@ -41,8 +41,10 @@ export { openIdCallback, openIdLogoutUrl, request, - RequestError, rootConfig, + AuthenticationError, + ConfigurationError, + RequestError, ServerError, TokenExpiredError, }; diff --git a/packages/blocks/blocks-basic/package.json b/packages/blocks/blocks-basic/package.json index ee0298d51..7da2d9a6a 100644 --- a/packages/blocks/blocks-basic/package.json +++ b/packages/blocks/blocks-basic/package.json @@ -26,7 +26,10 @@ "url": "https://github.com/lowdefy/lowdefy.git" }, "type": "module", - "exports": "./dist/index.js", + "exports": { + ".": "./dist/index.js", + "./blocks/*": "./dist/blocks/*" + }, "files": [ "dist/*" ], diff --git a/packages/build/src/utils/files/readConfigFile.js b/packages/build/src/utils/files/readConfigFile.js index d9efd43c5..f0ff95641 100644 --- a/packages/build/src/utils/files/readConfigFile.js +++ b/packages/build/src/utils/files/readConfigFile.js @@ -15,7 +15,8 @@ */ import path from 'path'; -import { cachedPromises, readFile } from '@lowdefy/node-utils'; +import { cachedPromises } from '@lowdefy/helpers'; +import { readFile } from '@lowdefy/node-utils'; function createReadConfigFile({ configDirectory }) { async function readConfigFile(filePath) { diff --git a/packages/build/src/utils/files/readConfigFile.test.js b/packages/build/src/utils/files/readConfigFile.test.js index cc6533dd2..ec80b1e86 100644 --- a/packages/build/src/utils/files/readConfigFile.test.js +++ b/packages/build/src/utils/files/readConfigFile.test.js @@ -20,10 +20,8 @@ import { readFile } from '@lowdefy/node-utils'; import createReadConfigFile from './readConfigFile.js'; jest.mock('@lowdefy/node-utils', () => { - const originalModule = jest.requireActual('@lowdefy/node-utils'); return { readFile: jest.fn(), - cachedPromises: originalModule.cachedPromises, }; }); diff --git a/packages/engine/src/Actions.js b/packages/engine/src/Actions.js index be09d62c9..7fa0284e4 100644 --- a/packages/engine/src/Actions.js +++ b/packages/engine/src/Actions.js @@ -133,7 +133,7 @@ class Actions { index, }; } - const { output: parsedAction, errors: parserErrors } = this.context.parser.parse({ + const { output: parsedAction, errors: parserErrors } = this.context._internal.parser.parse({ actions: responses, event, arrayIndices, @@ -164,7 +164,7 @@ class Actions { }); } catch (error) { responses[action.id] = { error, index, type: action.type }; - const { output: parsedMessages, errors: parserErrors } = this.context.parser.parse({ + const { output: parsedMessages, errors: parserErrors } = this.context._internal.parser.parse({ actions: responses, event, arrayIndices, @@ -201,7 +201,7 @@ class Actions { displayMessage({ defaultMessage, duration, hideExplicitly, message, status }) { let close = () => undefined; if ((hideExplicitly && message !== false) || (!hideExplicitly && !type.isNone(message))) { - close = this.context.lowdefy.displayMessage({ + close = this.context._internal.lowdefy.displayMessage({ content: type.isString(message) ? message : defaultMessage, duration, status, diff --git a/packages/engine/src/Blocks.js b/packages/engine/src/Blocks.js index 875bbf534..083b4e4f1 100644 --- a/packages/engine/src/Blocks.js +++ b/packages/engine/src/Blocks.js @@ -70,7 +70,7 @@ class Blocks { block.id = this.generateBlockId(block.blockIdPattern); block.fieldPattern = block.field; block.blockId = applyArrayIndices(this.arrayIndices, block.blockIdPattern); - this.context.RootBlocks.map[block.blockId] = block; + this.context._internal.RootBlocks.map[block.blockId] = block; block.field = !type.isNone(block.fieldPattern) ? applyArrayIndices(this.arrayIndices, block.fieldPattern) : block.blockId; @@ -127,11 +127,11 @@ class Blocks { this.subBlocks[block.id].unshift( this.newBlocks({ arrayIndices: this.arrayIndices.concat([0]), block, initState: {} }) ); - this.context.State.set(block.field, undefined); + this.context._internal.State.set(block.field, undefined); // set block and subBlock values undefined, so as not to pass values to new blocks this.subBlocks[block.id][0].recSetUndefined(); block.update = true; - this.context.update(); + this.context._internal.update(); }; block.pushItem = () => { @@ -143,11 +143,11 @@ class Blocks { }) ); block.update = true; - this.context.update(); + this.context._internal.update(); }; block.removeItem = (index) => { - this.context.State.removeItem(block.blockId, index); + this.context._internal.State.removeItem(block.blockId, index); const lastBlock = this.subBlocks[block.id][this.subBlocks[block.id].length - 1]; lastBlock.recRemoveBlocksFromMap(); const largerBlocks = this.subBlocks[block.id].slice(index + 1); @@ -160,12 +160,12 @@ class Blocks { this.subBlocks[block.id].splice(index, 1); block.update = true; - this.context.update(); + this.context._internal.update(); }; block.moveItemUp = (index) => { if (index === 0) return; - this.context.State.swapItems(block.blockId, index - 1, index); + this.context._internal.State.swapItems(block.blockId, index - 1, index); this.subBlocks[block.id][index - 1].recUpdateArrayIndices( this.arrayIndices.concat([index - 1]), this.arrayIndices.concat([index]) @@ -176,12 +176,12 @@ class Blocks { ); swap(this.subBlocks[block.id], index - 1, index); block.update = true; - this.context.update(); + this.context._internal.update(); }; block.moveItemDown = (index) => { if (index === this.subBlocks[block.id].length - 1) return; - this.context.State.swapItems(block.blockId, index, index + 1); + this.context._internal.State.swapItems(block.blockId, index, index + 1); this.subBlocks[block.id][index + 1].recUpdateArrayIndices( this.arrayIndices.concat([index + 1]), this.arrayIndices.concat([index]) @@ -192,16 +192,16 @@ class Blocks { ); swap(this.subBlocks[block.id], index, index + 1); block.update = true; - this.context.update(); + this.context._internal.update(); }; } if (get(block, 'meta.category') === 'input') { block.setValue = (value) => { block.value = type.enforceType(block.meta.valueType, value); - this.context.State.set(block.field, block.value); + this.context._internal.State.set(block.field, block.value); block.update = true; - this.context.update(); + this.context._internal.update(); }; } @@ -228,7 +228,7 @@ class Blocks { blockValue = type.isUndefined(block.meta.initValue) ? type.enforceType(block.meta.valueType, null) : block.meta.initValue; - this.context.State.set(block.field, block.value); + this.context._internal.State.set(block.field, block.value); } if (get(block, 'meta.category') === 'list') { // load list value into list blocks @@ -302,7 +302,7 @@ class Blocks { if (visibleParent === false) { block.visibleEval.output = false; } else { - block.visibleEval = this.context.parser.parse({ + block.visibleEval = this.context._internal.parser.parse({ input: block.visible, location: block.blockId, arrayIndices: this.arrayIndices, @@ -313,12 +313,12 @@ class Blocks { } // only evaluate visible blocks if (block.visibleEval.output !== false) { - block.propertiesEval = this.context.parser.parse({ + block.propertiesEval = this.context._internal.parser.parse({ input: block.properties, location: block.blockId, arrayIndices: this.arrayIndices, }); - block.requiredEval = this.context.parser.parse({ + block.requiredEval = this.context._internal.parser.parse({ input: block.required, location: block.blockId, arrayIndices: this.arrayIndices, @@ -343,7 +343,7 @@ class Blocks { let validationError = false; let validationWarning = false; validation.forEach((test) => { - const parsed = this.context.parser.parse({ + const parsed = this.context._internal.parser.parse({ input: test, location: block.blockId, arrayIndices: this.arrayIndices, @@ -378,17 +378,17 @@ class Blocks { block.validationEval.output.status = 'error'; } - block.styleEval = this.context.parser.parse({ + block.styleEval = this.context._internal.parser.parse({ input: block.style, location: block.blockId, arrayIndices: this.arrayIndices, }); - block.layoutEval = this.context.parser.parse({ + block.layoutEval = this.context._internal.parser.parse({ input: block.layout, location: block.blockId, arrayIndices: this.arrayIndices, }); - block.areasLayoutEval = this.context.parser.parse({ + block.areasLayoutEval = this.context._internal.parser.parse({ input: block.areasLayout, location: block.blockId, arrayIndices: this.arrayIndices, @@ -422,11 +422,14 @@ class Blocks { }); } else { toSet.add(block.field); - this.context.State.set(block.field, type.enforceType(block.meta.valueType, null)); + this.context._internal.State.set( + block.field, + type.enforceType(block.meta.valueType, null) + ); } } else if (get(block, 'meta.category') === 'input') { toSet.add(block.field); - this.context.State.set(block.field, block.value); + this.context._internal.State.set(block.field, block.value); } } else if (get(block, 'meta.category') === 'container') { this.subBlocks[block.id].forEach((blockClass) => { @@ -438,7 +441,7 @@ class Blocks { }); toDelete.forEach((field) => { if (!toSet.has(field)) { - this.context.State.del(field); + this.context._internal.State.del(field); } }); } @@ -471,7 +474,7 @@ class Blocks { }); this.loopBlocks((block) => { block.blockId = applyArrayIndices(this.arrayIndices, block.blockIdPattern); - this.context.RootBlocks.map[block.blockId] = block; + this.context._internal.RootBlocks.map[block.blockId] = block; block.field = !type.isNone(block.fieldPattern) ? applyArrayIndices(this.arrayIndices, block.fieldPattern) : block.blockId; @@ -510,7 +513,7 @@ class Blocks { recSetUndefined() { this.loopBlocks((block) => { - this.context.State.set(block.field, undefined); + this.context._internal.State.set(block.field, undefined); }); Object.keys(this.subBlocks).forEach((subKey) => { this.subBlocks[subKey].forEach((subBlock) => { @@ -521,7 +524,7 @@ class Blocks { recRemoveBlocksFromMap() { this.loopBlocks((block) => { - delete this.context.RootBlocks.map[block.blockId]; + delete this.context._internal.RootBlocks.map[block.blockId]; }); Object.keys(this.subBlocks).forEach((subKey) => { this.subBlocks[subKey].forEach((subBlock) => { @@ -584,7 +587,7 @@ class Blocks { value: type.isNone(block.value) ? null : block.value, visible: block.visibleEval.output, }; - this.context.lowdefy.updateBlock(block.id); + this.context._internal.lowdefy._internal.updateBlock(block.id); } }); Object.keys(this.subBlocks).forEach((subKey) => { @@ -603,7 +606,7 @@ class Blocks { false ); if (block.loading_prev !== block.loading) { - this.context.lowdefy.updateBlock(block.id); + this.context._internal.lowdefy._internal.updateBlock(block.id); } }); Object.keys(this.subBlocks).forEach((subKey) => { @@ -614,7 +617,8 @@ class Blocks { } generateBlockId(blockIdPattern) { - return `${this.context.pageId}:${blockIdPattern}:${Math.random() + // TODO: is rootId correct? + return `${this.context.rootId}:${blockIdPattern}:${Math.random() .toString(36) .replace(/[^a-z]+/g, '') .substr(0, 5)}`; diff --git a/packages/engine/src/Events.js b/packages/engine/src/Events.js index 1a02d707c..436aa5907 100644 --- a/packages/engine/src/Events.js +++ b/packages/engine/src/Events.js @@ -71,10 +71,10 @@ class Events { } eventDescription.loading = true; this.block.update = true; - this.context.update(); + this.context._internal.update(); const actionHandle = async () => { - const res = await this.context.Actions.callActions({ + const res = await this.context._internal.Actions.callActions({ actions: eventDescription.actions, arrayIndices: this.arrayIndices, block: this.block, @@ -86,7 +86,7 @@ class Events { this.context.eventLog.unshift(res); eventDescription.loading = false; this.block.update = true; - this.context.update(); + this.context._internal.update(); return res; }; diff --git a/packages/engine/src/Requests.js b/packages/engine/src/Requests.js index 30d6e0ea1..e93f4b355 100644 --- a/packages/engine/src/Requests.js +++ b/packages/engine/src/Requests.js @@ -25,7 +25,7 @@ class Requests { this.requestConfig = {}; - (this.context.rootBlock.requests || []).forEach((request) => { + (this.context._internal.rootBlock.requests || []).forEach((request) => { this.requestConfig[request.requestId] = request; }); } @@ -92,7 +92,8 @@ class Requests { try { const response = await this.context.lowdefy.callRequest({ - pageId: this.context.pageId, + // TODO: + pageId: this.context.rootId, payload: serializer.serialize(payload), requestId, }); diff --git a/packages/engine/src/getContext.js b/packages/engine/src/getContext.js index 571e740bd..0573ced03 100644 --- a/packages/engine/src/getContext.js +++ b/packages/engine/src/getContext.js @@ -59,51 +59,54 @@ const blockData = ({ visible, }); -const getContext = async ({ page, lowdefy }) => { - if (!page) { +async function getContext({ config, lowdefy }) { + if (!config) { throw new Error('A page must be provided to get context.'); } - const { pageId } = page; - if (lowdefy.contexts[pageId]) { - lowdefy.contexts[pageId].update(); - return lowdefy.contexts[pageId]; + const { id } = config; + if (lowdefy.contexts[id]) { + lowdefy.contexts[id]._internal.update(); + return lowdefy.contexts[id]; } - if (!lowdefy.inputs[pageId]) { - lowdefy.inputs[pageId] = {}; + if (!lowdefy.inputs[id]) { + lowdefy.inputs[id] = {}; } - const operatorsSet = new Set([...page.operators, '_not', '_type']); - lowdefy.contexts[pageId] = { - id: pageId, - pageId: pageId, + const operatorsSet = new Set([...config.operators, '_not', '_type']); + const ctx = { + id: id, + // TODO: What about app object? + rootId: config.pageId, eventLog: [], requests: {}, - operators: [...operatorsSet], - lowdefy, - rootBlock: blockData(page), // filter block to prevent circular structure state: {}, - update: () => {}, // Initialize update since Requests might call it during context creation + _internal: { + lowdefy, + operators: [...operatorsSet], + rootBlock: blockData(config), // filter block to prevent circular structure + update: () => {}, // Initialize update since Requests might call it during context creation + }, }; - const ctx = lowdefy.contexts[pageId]; - ctx.parser = new WebParser({ context: ctx }); - await ctx.parser.init(); - ctx.State = new State(ctx); - ctx.Actions = new Actions(ctx); - ctx.Requests = new Requests(ctx); - // TODO: Remove "areas: { root: { blocks: [ctx.rootBlock] } }," - ctx.RootBlocks = new Blocks({ - areas: { root: { blocks: [ctx.rootBlock] } }, + const _internal = ctx._internal; + _internal.parser = new WebParser({ context: ctx }); + await _internal.parser.init(); + _internal.State = new State(ctx); + _internal.Actions = new Actions(ctx); + _internal.Requests = new Requests(ctx); + _internal.RootBlocks = new Blocks({ + areas: { root: { blocks: [_internal.rootBlock] } }, context: ctx, }); - ctx.RootBlocks.init(); - ctx.update = () => { - ctx.RootBlocks.update(); + _internal.RootBlocks.init(); + _internal.update = () => { + _internal.RootBlocks.update(); }; - await ctx.RootBlocks.map[ctx.pageId].triggerEvent({ name: 'onInit' }); - ctx.update(); - ctx.State.freezeState(); - ctx.RootBlocks.map[ctx.pageId].triggerEvent({ name: 'onInitAsync' }); + await _internal.RootBlocks.map[ctx.rootId].triggerEvent({ name: 'onInit' }); + _internal.update(); + _internal.State.freezeState(); + _internal.RootBlocks.map[ctx.rootId].triggerEvent({ name: 'onInitAsync' }); + lowdefy.contexts[id] = ctx; return ctx; -}; +} export default getContext; diff --git a/packages/node-utils/src/cachedPromises.js b/packages/helpers/src/cachedPromises.js similarity index 100% rename from packages/node-utils/src/cachedPromises.js rename to packages/helpers/src/cachedPromises.js diff --git a/packages/helpers/src/index.js b/packages/helpers/src/index.js index 4427bef06..ba1281471 100644 --- a/packages/helpers/src/index.js +++ b/packages/helpers/src/index.js @@ -15,6 +15,7 @@ */ import applyArrayIndices from './applyArrayIndices.js'; +import cachedPromises from './cachedPromises.js'; import get from './get.js'; import mergeObjects from './mergeObjects.js'; import omit from './omit.js'; @@ -28,6 +29,7 @@ import urlQuery from './urlQuery.js'; export { applyArrayIndices, + cachedPromises, get, mergeObjects, omit, diff --git a/packages/layout/package.json b/packages/layout/package.json index f2de2657e..6539f5550 100644 --- a/packages/layout/package.json +++ b/packages/layout/package.json @@ -25,15 +25,19 @@ "type": "git", "url": "https://github.com/lowdefy/lowdefy.git" }, - "main": "dist/index.js", + "type": "module", + "exports": { + ".": "./dist/index.js" + }, "files": [ "dist/*" ], "scripts": { - "build": "babel src --out-dir dist", + "build": "yarn swc", "clean": "rm -rf dist", "prepare": "yarn build", "start": "webpack serve", + "swc": "swc src --out-dir dist --config-file ../../.swcrc --delete-dir-on-start --copy-files", "test": "jest --coverage" }, "dependencies": { @@ -44,32 +48,18 @@ "react-dom": "18.0.0-alpha-327d5c484-20211106" }, "devDependencies": { - "@babel/cli": "7.15.7", - "@babel/core": "7.15.8", - "@babel/preset-env": "7.15.8", - "@babel/preset-react": "7.14.5", + "@babel/preset-react": "7.16.0", "@emotion/jest": "11.5.0", + "@lowdefy/block-dev": "3.22.0", + "@swc/cli": "0.1.51", + "@swc/core": "1.2.107", + "@swc/jest": "0.2.5", + "@testing-library/dom": "8.10.1", "@testing-library/react": "12.1.2", - "babel-jest": "27.3.1", - "babel-loader": "8.2.3", - "babel-plugin-import": "1.13.3", - "clean-webpack-plugin": "4.0.0", - "css-loader": "6.4.0", - "html-webpack-plugin": "5.4.0", + "@testing-library/user-event": "13.5.0", "jest": "27.3.1", "jest-serializer-html": "7.1.0", - "jest-transform-yaml": "0.1.2", - "js-yaml": "4.1.0", - "less": "4.1.2", - "less-loader": "10.2.0", - "process": "0.11.10", - "react-markdown": "5.0.3", - "react-syntax-highlight": "15.3.1", - "style-loader": "3.3.1", - "webpack": "5.59.1", - "webpack-cli": "4.9.1", - "webpack-dev-server": "4.3.1", - "yaml-loader": "0.6.0" + "jest-transform-yaml": "0.1.2" }, "publishConfig": { "access": "public" diff --git a/packages/node-utils/package.json b/packages/node-utils/package.json index f1d058a68..c19fdc230 100644 --- a/packages/node-utils/package.json +++ b/packages/node-utils/package.json @@ -26,7 +26,10 @@ "url": "https://github.com/lowdefy/lowdefy.git" }, "type": "module", - "exports": "./dist/index.js", + "exports": { + ".": "./dist/index.js", + "./*": "./dist/*" + }, "files": [ "dist/*" ], diff --git a/packages/node-utils/src/index.js b/packages/node-utils/src/index.js index 0aac9ec5d..c16a77f58 100644 --- a/packages/node-utils/src/index.js +++ b/packages/node-utils/src/index.js @@ -14,7 +14,6 @@ limitations under the License. */ -import cachedPromises from './cachedPromises.js'; import cleanDirectory from './cleanDirectory.js'; import getConfigFromEnv from './getConfigFromEnv.js'; import getFileExtension, { getFileSubExtension } from './getFileExtension.js'; @@ -23,7 +22,6 @@ import readFile from './readFile.js'; import writeFile from './writeFile.js'; export { - cachedPromises, cleanDirectory, getConfigFromEnv, getFileExtension, diff --git a/packages/nunjucks/package.json b/packages/nunjucks/package.json index d91328022..ff5a238b6 100644 --- a/packages/nunjucks/package.json +++ b/packages/nunjucks/package.json @@ -41,8 +41,8 @@ }, "dependencies": { "@lowdefy/helpers": "3.22.0", - "chokidar": "3.5.2", - "moment": "2.29.1" + "moment": "2.29.1", + "nunjucks": "3.2.3" }, "devDependencies": { "@swc/cli": "0.1.51", diff --git a/packages/operators/src/webParser.js b/packages/operators/src/webParser.js index 28803f463..cc089fdff 100644 --- a/packages/operators/src/webParser.js +++ b/packages/operators/src/webParser.js @@ -32,16 +32,16 @@ class WebParser { } async init() { - if (!type.isObject(this.context.lowdefy)) { - throw new Error('context.lowdefy must be an object.'); + if (!type.isObject(this.context._internal.lowdefy)) { + throw new Error('context._internal.lowdefy must be an object.'); } - if (!type.isArray(this.context.operators)) { - throw new Error('context.operators must be an array.'); + if (!type.isArray(this.context._internal.operators)) { + throw new Error('context._internal.operators must be an array.'); } const operators = this.operators; const operations = this.operations; await Promise.all( - this.context.operators.map(async (operator) => { + this.context._internal.operators.map(async (operator) => { if (operators[operator]) { const fn = await import(`./${operators[operator]}.js`); operations[operator] = fn.default; @@ -70,7 +70,7 @@ class WebParser { throw new Error('Operator parser location must be a string.'); } const errors = []; - const { inputs, lowdefyGlobal, menus, urlQuery, user } = context.lowdefy; + const { inputs, lowdefyGlobal, menus, urlQuery, user } = context._internal.lowdefy; const reviver = (_, value) => { if (type.isObject(value) && Object.keys(value).length === 1) { const key = Object.keys(value)[0]; diff --git a/packages/server/next.config.js b/packages/server/next.config.js index 3634828f7..5f45d3652 100644 --- a/packages/server/next.config.js +++ b/packages/server/next.config.js @@ -14,6 +14,20 @@ const lessConfig = withLess({ module.exports = { ...lessConfig, reactStrictMode: true, + webpack: (config, { isServer }) => { + if (!isServer) { + config.resolve.fallback = { + buffer: false, + crypto: false, + events: false, + fs: false, + path: false, + process: false, + util: false, + }; + } + return config; + }, // productionBrowserSourceMaps: true // experimental: { // concurrentFeatures: true, diff --git a/packages/server/package.json b/packages/server/package.json index 6c7683f7a..0fd19af86 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -37,8 +37,12 @@ }, "dependencies": { "@lowdefy/api": "3.22.0", + "@lowdefy/block-utils": "3.22.0", + "@lowdefy/blocks-antd": "3.22.0", + "@lowdefy/blocks-basic": "3.22.0", + "@lowdefy/engine": "3.22.0", "@lowdefy/helpers": "3.22.0", - "@lowdefy/node-utils": "3.22.0", + "@lowdefy/layout": "3.22.0", "next": "12.0.3", "next-auth": "4.0.0-beta.6", "react": "18.0.0-alpha-327d5c484-20211106", diff --git a/packages/server/src/components/Blocks.js b/packages/server/src/components/Blocks.js deleted file mode 100644 index bb85b0984..000000000 --- a/packages/server/src/components/Blocks.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - Copyright 2020-2021 Lowdefy, Inc - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/* eslint-disable import/no-unresolved */ -import dynamic from 'next/dynamic'; - -// import Button from '@lowdefy/blocks-antd/blocks/Button/Button.js'; - -// // ------------- GENERATED AT BUILD ------------- -const Blocks = { - // Button, - // Label: dynamic(() => import('@lowdefy/blocks-antd/blocks/Label/Label.js'), { suspense: true }), - // TextInput: dynamic(() => import('@lowdefy/blocks-antd/blocks/TextInput/TextInput.js'), { - // suspense: true, - // }), - // Icon: dynamic(() => import('@lowdefy/blocks-antd/blocks/Icon/Icon.js'), { suspense: true }), -}; - -export default Blocks; diff --git a/packages/server/src/components/PageContext.js b/packages/server/src/components/Context.js similarity index 80% rename from packages/server/src/components/PageContext.js rename to packages/server/src/components/Context.js index f7cd7a7df..aea330777 100644 --- a/packages/server/src/components/PageContext.js +++ b/packages/server/src/components/Context.js @@ -14,14 +14,13 @@ limitations under the License. */ -import { useEffect, useState } from 'react'; -// import getContext from '@lowdefy/engine'; -import getPageContext from './getPageContext.js'; +import React, { useEffect, useState } from 'react'; +import getContext from '@lowdefy/engine'; // import MountEvents from './MountEvents'; const LoadingBlock = () =>
Loading...
; -const Context = ({ children, lowdefy, pageConfig }) => { +const Context = ({ children, lowdefy, config }) => { const [context, setContext] = useState({}); const [error, setError] = useState(null); @@ -29,15 +28,14 @@ const Context = ({ children, lowdefy, pageConfig }) => { let mounted = true; const mount = async () => { try { - const ctx = await getPageContext({ - pageConfig, + const ctx = await getContext({ + config, lowdefy, }); if (mounted) { setContext(ctx); } } catch (err) { - // ?? setError(err); } }; @@ -45,12 +43,10 @@ const Context = ({ children, lowdefy, pageConfig }) => { return () => { mounted = false; }; - }, [pageConfig, lowdefy]); + }, [config, lowdefy]); - // ?? if (error) throw error; - - if (context.id !== pageConfig.pageId) return ; + if (context.id !== config.id) return ; return children(context); diff --git a/packages/server/src/components/LowdefyContext.js b/packages/server/src/components/LowdefyContext.js index 34018dd05..05f6d9a7d 100644 --- a/packages/server/src/components/LowdefyContext.js +++ b/packages/server/src/components/LowdefyContext.js @@ -14,19 +14,22 @@ limitations under the License. */ -// import dynamic from 'next/dynamic'; +import React from 'react'; -import { useSession } from 'next-auth/react'; -import Components from './Blocks.js'; +import blockComponents from '../plugins/blocks.js'; const LowdefyContext = ({ children }) => { - const { data: session } = useSession(); - console.log(session); const lowdefy = { - Components, - pages: {}, - updaters: {}, + _internal: { + blockComponents, + updaters: {}, + }, + contexts: {}, + inputs: {}, + lowdefyGlobal: {}, }; + lowdefy._internal.updateBlock = (blockId) => + lowdefy._internal.updaters[blockId] && lowdefy._internal.updaters[blockId](); return <>{children(lowdefy)}; }; diff --git a/packages/server/src/components/Page.js b/packages/server/src/components/Page.js index 06043293d..5997a5804 100644 --- a/packages/server/src/components/Page.js +++ b/packages/server/src/components/Page.js @@ -15,14 +15,21 @@ */ import React from 'react'; -import PageContext from './PageContext.js'; -import Block from './Block.js'; +import Context from './Context.js'; +import Block from './block/Block.js'; const Page = ({ lowdefy, pageConfig }) => { return ( - - {(pageContext) => } - + + {(context) => ( + + )} + ); }; diff --git a/packages/server/src/components/block/Block.js b/packages/server/src/components/block/Block.js new file mode 100644 index 000000000..003585cb2 --- /dev/null +++ b/packages/server/src/components/block/Block.js @@ -0,0 +1,57 @@ +/* + Copyright 2020-2021 Lowdefy, Inc + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +import React, { Suspense, useState } from 'react'; + +import { ErrorBoundary } from '@lowdefy/block-utils'; + +import CategorySwitch from './CategorySwitch.js'; +import LoadingBlock from './LoadingBlock.js'; +import MountEvents from './MountEvents.js'; + +const Block = ({ block, Blocks, context, isRoot, lowdefy }) => { + const [updates, setUpdate] = useState(0); + lowdefy._internal.updaters[block.id] = () => setUpdate(updates + 1); + return ( + + }> + + {(loaded) => + !loaded ? ( + + ) : ( + + ) + } + + + + ); +}; + +export default Block; diff --git a/packages/server/src/components/block/CategorySwitch.js b/packages/server/src/components/block/CategorySwitch.js new file mode 100644 index 000000000..d12d91c44 --- /dev/null +++ b/packages/server/src/components/block/CategorySwitch.js @@ -0,0 +1,118 @@ +/* + Copyright 2020-2021 Lowdefy, Inc + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +import React from 'react'; +import { BlockLayout } from '@lowdefy/layout'; +import { makeCssClass } from '@lowdefy/block-utils'; + +import Container from './Container.js'; +import List from './List.js'; + +const CategorySwitch = ({ block, Blocks, context, lowdefy }) => { + if (!block.eval) return null; // Renderer updates before eval is executed for the first time on lists. See #520 + if (block.eval.visible === false) + return
; + const Component = lowdefy._internal.blockComponents[block.type]; + switch (block.meta.category) { + case 'list': + return ( + + ); + case 'container': + return ( + + ); + case 'input': + return ( + + + + ); + default: + return ( + + + + ); + } +}; + +export default CategorySwitch; diff --git a/packages/server/src/components/block/Container.js b/packages/server/src/components/block/Container.js new file mode 100644 index 000000000..0b72348f2 --- /dev/null +++ b/packages/server/src/components/block/Container.js @@ -0,0 +1,86 @@ +/* + Copyright 2020-2021 Lowdefy, Inc + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +import React from 'react'; +import { Area, BlockLayout, layoutParamsToArea } from '@lowdefy/layout'; +import { makeCssClass } from '@lowdefy/block-utils'; + +import Block from './Block.js'; + +const Container = ({ block, Blocks, Component, context, lowdefy }) => { + const content = {}; + // eslint-disable-next-line prefer-destructuring + const areas = Blocks.subBlocks[block.id][0].areas; + Object.keys(areas).forEach((areaKey) => { + content[areaKey] = (areaStyle) => ( + + {areas[areaKey].blocks.map((bl) => ( + + ))} + + ); + }); + return ( + + + + ); +}; + +export default Container; diff --git a/packages/server/src/components/block/List.js b/packages/server/src/components/block/List.js new file mode 100644 index 000000000..89c129547 --- /dev/null +++ b/packages/server/src/components/block/List.js @@ -0,0 +1,93 @@ +/* + Copyright 2020-2021 Lowdefy, Inc + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +import React from 'react'; +import { Area, BlockLayout, layoutParamsToArea } from '@lowdefy/layout'; +import { makeCssClass } from '@lowdefy/block-utils'; + +import Block from './Block.js'; + +const List = ({ block, Blocks, Component, context, lowdefy }) => { + const content = {}; + const contentList = []; + Blocks.subBlocks[block.id].forEach((SBlock) => { + Object.keys(SBlock.areas).forEach((areaKey) => { + content[areaKey] = (areaStyle) => ( + + {SBlock.areas[areaKey].blocks.map((bl) => ( + + ))} + + ); + }); + contentList.push({ ...content }); + }); + return ( + + + + ); +}; + +export default List; diff --git a/packages/server/src/components/block/LoadingBlock.js b/packages/server/src/components/block/LoadingBlock.js new file mode 100644 index 000000000..73480d185 --- /dev/null +++ b/packages/server/src/components/block/LoadingBlock.js @@ -0,0 +1,22 @@ +import React from 'react'; +// import { Loading, makeCssClass } from '@lowdefy/block-utils'; +// import { get } from '@lowdefy/helpers'; +// import { BlockLayout } from '@lowdefy/layout'; + +const LoadingBlock = ({ block, lowdefy }) => ( +
LoadingBlock
+ // + // + // +); + +export default LoadingBlock; diff --git a/packages/server/src/components/block/MountEvents.js b/packages/server/src/components/block/MountEvents.js new file mode 100644 index 000000000..9f968b70d --- /dev/null +++ b/packages/server/src/components/block/MountEvents.js @@ -0,0 +1,48 @@ +/* + Copyright 2020-2021 Lowdefy, Inc + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +import React, { useEffect, useState } from 'react'; + +const MountEvents = ({ asyncEventName, context, eventName, triggerEvent, children }) => { + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + useEffect(() => { + let mounted = true; + const mount = async () => { + try { + await triggerEvent({ name: eventName, context }); + if (mounted) { + triggerEvent({ name: asyncEventName, context }); + setLoading(false); + } + } catch (err) { + setError(err); + } + }; + mount(); + return () => { + mounted = false; + }; + }, [context]); + + if (error) throw error; + + if (loading) return <>{children(false)}; + + return <>{children(true)}; +}; + +export default MountEvents; diff --git a/packages/server/src/components/getPageContext.js b/packages/server/src/components/getPageContext.js deleted file mode 100644 index a7fa69448..000000000 --- a/packages/server/src/components/getPageContext.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - Copyright 2020-2021 Lowdefy, Inc - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -function getPageContext({ pageConfig, lowdefy }) { - if (!pageConfig) { - throw new Error('A page must be provided to get context.'); - } - const { pageId } = pageConfig; - if (lowdefy.pages[pageId]) { - return lowdefy.pages[pageId]; - } - - lowdefy.pages[pageId] = { - id: pageId, - pageId: pageId, - update: () => {}, - pageConfig, - }; - const ctx = lowdefy.pages[pageId]; - return ctx; -} - -export default getPageContext; diff --git a/packages/server/src/pages/[pageId].js b/packages/server/src/pages/[pageId].js index 5a6d7fc16..24e4a2496 100644 --- a/packages/server/src/pages/[pageId].js +++ b/packages/server/src/pages/[pageId].js @@ -14,14 +14,14 @@ limitations under the License. */ -import getPageConfig from '@lowdefy/api/routes/page/getPageConfig.js'; -import createContext from '@lowdefy/api/context/createContext.js'; +import createApiContext from '@lowdefy/api/context/createApiContext'; +import getPageConfig from '@lowdefy/api/routes/page/getPageConfig'; import Page from '../components/Page.js'; export async function getServerSideProps(context) { const { pageId } = context.params; - const apiContext = await createContext({}); + const apiContext = await createApiContext({ buildDirectory: './.lowdefy/build' }); const pageConfig = await getPageConfig(apiContext, { pageId }); if (!pageConfig) { diff --git a/packages/server/src/plugins/blocks.js b/packages/server/src/plugins/blocks.js index 405b3ad53..ccc9a3ed9 100644 --- a/packages/server/src/plugins/blocks.js +++ b/packages/server/src/plugins/blocks.js @@ -14,10 +14,12 @@ limitations under the License. */ +import Box from '@lowdefy/blocks-basic/blocks/Box/Box.js'; import Html from '@lowdefy/blocks-basic/blocks/Html/Html.js'; const blocks = { - Html -} + Box, + Html, +}; export default blocks; diff --git a/yarn.lock b/yarn.lock index 3f5bedb46..0c631889d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -678,7 +678,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.14.5, @babel/helper-module-imports@npm:^7.15.4": +"@babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.14.5, @babel/helper-module-imports@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-module-imports@npm:7.15.4" dependencies: @@ -1945,7 +1945,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:7.15.4, @babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.4": +"@babel/runtime@npm:7.15.4, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.4": version: 7.15.4 resolution: "@babel/runtime@npm:7.15.4" dependencies: @@ -3477,7 +3477,7 @@ __metadata: languageName: unknown linkType: soft -"@lowdefy/blocks-basic@workspace:packages/blocks/blocks-basic": +"@lowdefy/blocks-basic@3.22.0, @lowdefy/blocks-basic@workspace:packages/blocks/blocks-basic": version: 0.0.0-use.local resolution: "@lowdefy/blocks-basic@workspace:packages/blocks/blocks-basic" dependencies: @@ -3837,37 +3837,23 @@ __metadata: version: 0.0.0-use.local resolution: "@lowdefy/layout@workspace:packages/layout" dependencies: - "@babel/cli": 7.15.7 - "@babel/core": 7.15.8 - "@babel/preset-env": 7.15.8 - "@babel/preset-react": 7.14.5 + "@babel/preset-react": 7.16.0 "@emotion/jest": 11.5.0 + "@lowdefy/block-dev": 3.22.0 "@lowdefy/block-utils": 3.22.0 "@lowdefy/helpers": 3.22.0 + "@swc/cli": 0.1.51 + "@swc/core": 1.2.107 + "@swc/jest": 0.2.5 + "@testing-library/dom": 8.10.1 "@testing-library/react": 12.1.2 + "@testing-library/user-event": 13.5.0 antd: 4.17.0-alpha.7 - babel-jest: 27.3.1 - babel-loader: 8.2.3 - babel-plugin-import: 1.13.3 - clean-webpack-plugin: 4.0.0 - css-loader: 6.4.0 - html-webpack-plugin: 5.4.0 jest: 27.3.1 jest-serializer-html: 7.1.0 jest-transform-yaml: 0.1.2 - js-yaml: 4.1.0 - less: 4.1.2 - less-loader: 10.2.0 - process: 0.11.10 react: 18.0.0-alpha-327d5c484-20211106 react-dom: 18.0.0-alpha-327d5c484-20211106 - react-markdown: 5.0.3 - react-syntax-highlight: 15.3.1 - style-loader: 3.3.1 - webpack: 5.59.1 - webpack-cli: 4.9.1 - webpack-dev-server: 4.3.1 - yaml-loader: 0.6.0 languageName: unknown linkType: soft @@ -3910,9 +3896,9 @@ __metadata: "@swc/cli": 0.1.51 "@swc/core": 1.2.107 "@swc/jest": 0.2.5 - chokidar: 3.5.2 jest: 27.3.1 moment: 2.29.1 + nunjucks: 3.2.3 languageName: unknown linkType: soft @@ -3975,8 +3961,12 @@ __metadata: resolution: "@lowdefy/server@workspace:packages/server" dependencies: "@lowdefy/api": 3.22.0 + "@lowdefy/block-utils": 3.22.0 + "@lowdefy/blocks-antd": 3.22.0 + "@lowdefy/blocks-basic": 3.22.0 + "@lowdefy/engine": 3.22.0 "@lowdefy/helpers": 3.22.0 - "@lowdefy/node-utils": 3.22.0 + "@lowdefy/layout": 3.22.0 "@next/eslint-plugin-next": 12.0.2 less: 4.1.2 less-loader: 10.2.0 @@ -5727,6 +5717,13 @@ __metadata: languageName: node linkType: hard +"a-sync-waterfall@npm:^1.0.0": + version: 1.0.1 + resolution: "a-sync-waterfall@npm:1.0.1" + checksum: 534948b50d6787c2dd5b7e89179b30c0fd96ac80a662d0f92eaa568cfffb36f1eea4aa720e3a21572d8b5f8686940954ac9d8c7667bcc719c1317ae3bdf86fe0 + languageName: node + linkType: hard + "abab@npm:^2.0.3, abab@npm:^2.0.5": version: 2.0.5 resolution: "abab@npm:2.0.5" @@ -6448,7 +6445,7 @@ __metadata: languageName: node linkType: hard -"asap@npm:^2.0.0, asap@npm:~2.0.3": +"asap@npm:^2.0.0, asap@npm:^2.0.3, asap@npm:~2.0.3": version: 2.0.6 resolution: "asap@npm:2.0.6" checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d @@ -6669,16 +6666,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-import@npm:1.13.3": - version: 1.13.3 - resolution: "babel-plugin-import@npm:1.13.3" - dependencies: - "@babel/helper-module-imports": ^7.0.0 - "@babel/runtime": ^7.0.0 - checksum: 1be664a34fa6cdffb08485a7094ff1a3fdfd2e95a7d367afdd7a6dcb51842c0bc717c8fdba65538561a4d3aecc39c123e6de1449c5b1b2aa5b13604c17ca7042 - languageName: node - linkType: hard - "babel-plugin-istanbul@npm:^6.0.0": version: 6.1.1 resolution: "babel-plugin-istanbul@npm:6.1.1" @@ -7908,6 +7895,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^5.1.0": + version: 5.1.0 + resolution: "commander@npm:5.1.0" + checksum: 0b7fec1712fbcc6230fcb161d8d73b4730fa91a21dc089515489402ad78810547683f058e2a9835929c212fead1d6a6ade70db28bbb03edbc2829a9ab7d69447 + languageName: node + linkType: hard + "commander@npm:^8.1.0": version: 8.3.0 resolution: "commander@npm:8.3.0" @@ -11278,13 +11272,6 @@ __metadata: languageName: node linkType: hard -"highlight.js@npm:^9.12.0": - version: 9.18.5 - resolution: "highlight.js@npm:9.18.5" - checksum: a8afdb395869bba8a892dd8891b738d3bd48fe2e5b6843ec3181c93d73f52abf2cab863424caa631442a7bbafac222bafdab3f5a536a69aab9c60d4c1b7f8b77 - languageName: node - linkType: hard - "history@npm:^4.9.0": version: 4.10.1 resolution: "history@npm:4.10.1" @@ -15526,6 +15513,24 @@ __metadata: languageName: node linkType: hard +"nunjucks@npm:3.2.3": + version: 3.2.3 + resolution: "nunjucks@npm:3.2.3" + dependencies: + a-sync-waterfall: ^1.0.0 + asap: ^2.0.3 + commander: ^5.1.0 + peerDependencies: + chokidar: ^3.3.0 + peerDependenciesMeta: + chokidar: + optional: true + bin: + nunjucks-precompile: bin/precompile + checksum: 9d0125acf917166675af2d9b5d525b6d3edaba68ec6f8c92edee8ad05140cfa8aef12feb46f4c3da52ed2836cadfb9d26fbf1fa9d9be6bef4660d03ce1e89dbe + languageName: node + linkType: hard + "nwsapi@npm:^2.2.0": version: 2.2.0 resolution: "nwsapi@npm:2.2.0" @@ -17889,19 +17894,6 @@ __metadata: languageName: node linkType: hard -"react-syntax-highlight@npm:15.3.1": - version: 15.3.1 - resolution: "react-syntax-highlight@npm:15.3.1" - dependencies: - highlight.js: ^9.12.0 - prop-types: ^15.5.10 - peerDependencies: - react: ^15.3.0 - react-dom: ^15.3.0 - checksum: cada9bec5d596b1df0eb59aec0522e0f241960661554ebd665cbc5c1da760d56a9d734bd11df131e7fdbb31c3f7d6e6e5463a75af7045c611874fd0c7a5c6b7b - languageName: node - linkType: hard - "react-syntax-highlighter@npm:15.4.4": version: 15.4.4 resolution: "react-syntax-highlighter@npm:15.4.4" @@ -21079,7 +21071,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"webpack-dev-server@npm:*, webpack-dev-server@npm:4.3.1": +"webpack-dev-server@npm:*": version: 4.3.1 resolution: "webpack-dev-server@npm:4.3.1" dependencies: