@valbuild/server 0.26.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/valbuild-server.cjs.dev.js +2 -2
  2. package/dist/valbuild-server.cjs.prod.js +2 -2
  3. package/dist/valbuild-server.esm.js +2 -2
  4. package/package.json +7 -4
  5. package/.babelrc.json +0 -5
  6. package/CHANGELOG.md +0 -0
  7. package/jest.config.js +0 -4
  8. package/src/LocalValServer.ts +0 -167
  9. package/src/ProxyValServer.ts +0 -542
  10. package/src/SerializedModuleContent.ts +0 -36
  11. package/src/Service.ts +0 -126
  12. package/src/ValFS.ts +0 -22
  13. package/src/ValFSHost.ts +0 -66
  14. package/src/ValModuleLoader.test.ts +0 -75
  15. package/src/ValModuleLoader.ts +0 -158
  16. package/src/ValQuickJSRuntime.ts +0 -85
  17. package/src/ValServer.ts +0 -24
  18. package/src/ValSourceFileHandler.ts +0 -57
  19. package/src/createFixPatch.ts +0 -170
  20. package/src/createRequestHandler.ts +0 -27
  21. package/src/expressHelpers.ts +0 -5
  22. package/src/getCompilerOptions.ts +0 -50
  23. package/src/hosting.ts +0 -290
  24. package/src/index.ts +0 -16
  25. package/src/jwt.ts +0 -93
  26. package/src/patch/ts/ops.test.ts +0 -937
  27. package/src/patch/ts/ops.ts +0 -897
  28. package/src/patch/ts/syntax.ts +0 -371
  29. package/src/patch/ts/valModule.test.ts +0 -26
  30. package/src/patch/ts/valModule.ts +0 -110
  31. package/src/patch/validation.ts +0 -81
  32. package/src/patchValFile.ts +0 -110
  33. package/src/readValFile.test.ts +0 -49
  34. package/src/readValFile.ts +0 -96
  35. package/test/example-projects/basic-next-javascript/jsconfig.json +0 -8
  36. package/test/example-projects/basic-next-javascript/package.json +0 -23
  37. package/test/example-projects/basic-next-javascript/pages/blogs.val.js +0 -20
  38. package/test/example-projects/basic-next-javascript/val.config.js +0 -4
  39. package/test/example-projects/basic-next-src-typescript/package.json +0 -23
  40. package/test/example-projects/basic-next-src-typescript/src/pages/blogs.val.ts +0 -20
  41. package/test/example-projects/basic-next-src-typescript/src/val.config.ts +0 -5
  42. package/test/example-projects/basic-next-src-typescript/tsconfig.json +0 -24
  43. package/test/example-projects/basic-next-typescript/package.json +0 -23
  44. package/test/example-projects/basic-next-typescript/pages/blogs.val.ts +0 -20
  45. package/test/example-projects/basic-next-typescript/tsconfig.json +0 -25
  46. package/test/example-projects/basic-next-typescript/val.config.ts +0 -5
  47. package/test/example-projects/typescript-description-files/README.md +0 -2
  48. package/test/example-projects/typescript-description-files/jsconfig.json +0 -8
  49. package/test/example-projects/typescript-description-files/package.json +0 -23
  50. package/test/example-projects/typescript-description-files/pages/blogs.val.d.ts +0 -7
  51. package/test/example-projects/typescript-description-files/pages/blogs.val.js +0 -19
  52. package/test/example-projects/typescript-description-files/val.config.d.ts +0 -3
  53. package/test/example-projects/typescript-description-files/val.config.js +0 -5
  54. package/tsconfig.json +0 -12
@@ -1,49 +0,0 @@
1
- import {
2
- TestQuickJSWASMModule,
3
- newQuickJSAsyncWASMModule,
4
- } from "quickjs-emscripten";
5
- import { readValFile } from "./readValFile";
6
- import path from "path";
7
- import { createModuleLoader } from "./ValModuleLoader";
8
- import { newValQuickJSRuntime } from "./ValQuickJSRuntime";
9
-
10
- const TestCaseDir = "../test/example-projects";
11
- const TestCases = [
12
- { name: "basic-next-typescript", valConfigPath: "./val.config" },
13
- {
14
- name: "basic-next-src-typescript",
15
- valConfigPath: "./src/val.config",
16
- },
17
- { name: "basic-next-javascript", valConfigPath: "./val.config" },
18
- { name: "typescript-description-files", valConfigPath: "./val.config" },
19
- ];
20
-
21
- describe("read val file", () => {
22
- // We cannot, currently use TestQuickJSWASMModule
23
- let QuickJS: TestQuickJSWASMModule;
24
-
25
- beforeEach(async () => {
26
- QuickJS = new TestQuickJSWASMModule(await newQuickJSAsyncWASMModule());
27
- });
28
-
29
- afterEach(() => {
30
- QuickJS.disposeAll();
31
- QuickJS.assertNoMemoryAllocated();
32
- });
33
-
34
- test.each(TestCases)("read basic val file from: $name", async (testCase) => {
35
- const rootDir = path.resolve(__dirname, TestCaseDir, testCase.name);
36
- const loader = createModuleLoader(rootDir);
37
- const testRuntime = await newValQuickJSRuntime(QuickJS, loader, {
38
- maxStackSize: 1024 * 640,
39
- memoryLimit: 1024 * 640,
40
- });
41
- const result = await readValFile(
42
- "/pages/blogs",
43
- testCase.valConfigPath,
44
- testRuntime
45
- );
46
- expect(result).toHaveProperty("source");
47
- expect(result).toHaveProperty("schema");
48
- });
49
- });
@@ -1,96 +0,0 @@
1
- import { ModuleId, SourcePath } from "@valbuild/core";
2
- import path from "path";
3
- import { QuickJSRuntime } from "quickjs-emscripten";
4
- import { SerializedModuleContent } from "./SerializedModuleContent";
5
-
6
- export const readValFile = async (
7
- id: string,
8
- valConfigPath: string,
9
- runtime: QuickJSRuntime
10
- ): Promise<SerializedModuleContent> => {
11
- const context = runtime.newContext();
12
- try {
13
- const modulePath = `.${id}.val`;
14
- const code = `import * as valModule from ${JSON.stringify(modulePath)};
15
- import { Internal } from "@valbuild/core";
16
- globalThis.valModule = {
17
- id: valModule?.default && Internal.getValPath(valModule?.default),
18
- schema: valModule?.default && Internal.getSchema(valModule?.default)?.serialize(),
19
- source: valModule?.default && Internal.getSource(valModule?.default),
20
- validation: valModule?.default && Internal.getSchema(valModule?.default)?.validate(
21
- valModule?.default && Internal.getValPath(valModule?.default) || "/",
22
- valModule?.default && Internal.getSource(valModule?.default)
23
- )
24
- };
25
- `;
26
- const result = context.evalCode(
27
- code,
28
- // Synthetic module name
29
- path.join(path.dirname(valConfigPath), "<val>")
30
- );
31
- const fatalErrors: string[] = [];
32
- if (result.error) {
33
- const error = result.error.consume(context.dump);
34
- console.error(
35
- `Fatal error reading val file: ${error.message}\n`,
36
- error.stack
37
- );
38
- return {
39
- path: id as SourcePath,
40
- errors: {
41
- invalidModuleId: id as ModuleId,
42
- fatal: [
43
- {
44
- message: `${error.name || "Unknown error"}: ${
45
- error.message || "<no message>"
46
- }`,
47
- stack: error.stack,
48
- },
49
- ],
50
- },
51
- };
52
- } else {
53
- result.value.dispose();
54
- const valModule = context
55
- .getProp(context.global, "valModule")
56
- .consume(context.dump);
57
-
58
- if (!valModule) {
59
- fatalErrors.push(`Could not find any modules at: ${id}`);
60
- } else {
61
- if (valModule.id !== id) {
62
- fatalErrors.push(
63
- `Wrong val.content id! In the file of with: '${id}', found: '${valModule.id}'`
64
- );
65
- }
66
- if (!valModule?.schema) {
67
- fatalErrors.push(`Expected val id: '${id}' to have a schema`);
68
- }
69
- if (valModule?.source === undefined) {
70
- fatalErrors.push(`Expected val id: '${id}' to have a source`);
71
- }
72
- }
73
- let errors: SerializedModuleContent["errors"] = false;
74
- if (fatalErrors.length > 0) {
75
- errors = {
76
- invalidModuleId: valModule.id !== id ? (id as ModuleId) : undefined,
77
- fatal: fatalErrors.map((message) => ({ message })),
78
- };
79
- }
80
- if (valModule?.validation) {
81
- errors = {
82
- ...(errors ? errors : {}),
83
- validation: valModule.validation,
84
- };
85
- }
86
- return {
87
- path: valModule.id || id, // NOTE: we use path here, since SerializedModuleContent (maybe bad name?) can be used for whole modules as well as subparts of modules
88
- source: valModule.source,
89
- schema: valModule.schema,
90
- errors,
91
- };
92
- }
93
- } finally {
94
- context.dispose();
95
- }
96
- };
@@ -1,8 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "baseUrl": ".",
4
- "paths": {
5
- "@/*": ["./src/*"]
6
- }
7
- }
8
- }
@@ -1,23 +0,0 @@
1
- {
2
- "name": "val-test-app",
3
- "version": "0.1.0",
4
- "private": true,
5
- "scripts": {
6
- "dev": "next dev",
7
- "build": "next build",
8
- "start": "next start",
9
- "lint": "next lint"
10
- },
11
- "dependencies": {
12
- "@next/font": "13.1.2",
13
- "@types/node": "18.11.18",
14
- "@types/react": "18.0.27",
15
- "@types/react-dom": "18.0.10",
16
- "eslint": "8.32.0",
17
- "eslint-config-next": "13.1.2",
18
- "next": "13.1.2",
19
- "react": "18.2.0",
20
- "react-dom": "18.2.0",
21
- "typescript": "4.9.4"
22
- }
23
- }
@@ -1,20 +0,0 @@
1
- import { s, val } from "../val.config";
2
-
3
- export default val.content(
4
- "/pages/blogs",
5
- s.array(s.object({ title: s.string({ maxLength: 1 }), text: s.string() })),
6
- [
7
- {
8
- title: "HVA?",
9
- text: "Vi gjør mange ting sammen i Blank, men det vi lever av er å designe og utvikle digitale tjenester for kundene våre.\n\n Noen av selskapene vi jobber med er små, andre er store. Alle har de høye ambisjoner for sine digitale løsninger, og stiller høye krav til hvem de jobber med.\n \n Noen ganger starter vi nye, egne, selskaper også, mest fordi det er gøy (og fordi vi liker å bygge ting), men også fordi smarte folk har gode idéer som fortjener å bli realisert.\n Ting vi har bygd for kundene våre",
10
- },
11
- {
12
- title: "HVEM ER VI?",
13
- text: "I Blank er vi en gjeng på omtrent 50 ulike folk som er ekstremt dyktige i faget vår - digital produktutvikling. Vi er en tredjedel designere og resten teknologer.",
14
- },
15
- {
16
- title: "HVORFOR?",
17
- text: "Vi startet Blank fordi vi ønsket oss et konsulentselskap hvor vi kan lære og utfordre oss selv, et selskap hvor det er veldig fint å jobbe - og kanskje aller mest fordi vi liker å bygge ting.\n \n I tillegg ønsket vi å forandre bransjen og hvordan et konsulentselskap kan fungere. Mer om det senere..\n \n ",
18
- },
19
- ]
20
- );
@@ -1,4 +0,0 @@
1
- import { initVal } from "@valbuild/core";
2
-
3
- const { s, val } = initVal();
4
- export { s, val };
@@ -1,23 +0,0 @@
1
- {
2
- "name": "val-test-app",
3
- "version": "0.1.0",
4
- "private": true,
5
- "scripts": {
6
- "dev": "next dev",
7
- "build": "next build",
8
- "start": "next start",
9
- "lint": "next lint"
10
- },
11
- "dependencies": {
12
- "@next/font": "13.1.2",
13
- "@types/node": "18.11.18",
14
- "@types/react": "18.0.27",
15
- "@types/react-dom": "18.0.10",
16
- "eslint": "8.32.0",
17
- "eslint-config-next": "13.1.2",
18
- "next": "13.1.2",
19
- "react": "18.2.0",
20
- "react-dom": "18.2.0",
21
- "typescript": "4.9.4"
22
- }
23
- }
@@ -1,20 +0,0 @@
1
- import { s, val } from "src/val.config";
2
-
3
- export default val.content(
4
- "/pages/blogs",
5
- s.array(s.object({ title: s.string({ maxLength: 1 }), text: s.string() })),
6
- [
7
- {
8
- title: "HVA?",
9
- text: "Vi gjør mange ting sammen i Blank, men det vi lever av er å designe og utvikle digitale tjenester for kundene våre.\n\n Noen av selskapene vi jobber med er små, andre er store. Alle har de høye ambisjoner for sine digitale løsninger, og stiller høye krav til hvem de jobber med.\n \n Noen ganger starter vi nye, egne, selskaper også, mest fordi det er gøy (og fordi vi liker å bygge ting), men også fordi smarte folk har gode idéer som fortjener å bli realisert.\n Ting vi har bygd for kundene våre",
10
- },
11
- {
12
- title: "HVEM ER VI?",
13
- text: "I Blank er vi en gjeng på omtrent 50 ulike folk som er ekstremt dyktige i faget vår - digital produktutvikling. Vi er en tredjedel designere og resten teknologer.",
14
- },
15
- {
16
- title: "HVORFOR?",
17
- text: "Vi startet Blank fordi vi ønsket oss et konsulentselskap hvor vi kan lære og utfordre oss selv, et selskap hvor det er veldig fint å jobbe - og kanskje aller mest fordi vi liker å bygge ting.\n \n I tillegg ønsket vi å forandre bransjen og hvordan et konsulentselskap kan fungere. Mer om det senere..\n \n ",
18
- },
19
- ]
20
- );
@@ -1,5 +0,0 @@
1
- import { initVal } from "@valbuild/core";
2
-
3
- const { s, val } = initVal();
4
-
5
- export { s, val };
@@ -1,24 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "es5",
4
- "lib": ["dom", "dom.iterable", "esnext"],
5
- "allowJs": true,
6
- "skipLibCheck": true,
7
- "strict": true,
8
- "forceConsistentCasingInFileNames": true,
9
- "noEmit": true,
10
- "esModuleInterop": true,
11
- "module": "esnext",
12
- "moduleResolution": "node",
13
- "resolveJsonModule": true,
14
- "isolatedModules": true,
15
- "jsx": "preserve",
16
- "incremental": true,
17
- "baseUrl": ".",
18
- "paths": {
19
- "@/*": ["./src/*"]
20
- }
21
- },
22
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
23
- "exclude": ["node_modules"]
24
- }
@@ -1,23 +0,0 @@
1
- {
2
- "name": "val-test-app",
3
- "version": "0.1.0",
4
- "private": true,
5
- "scripts": {
6
- "dev": "next dev",
7
- "build": "next build",
8
- "start": "next start",
9
- "lint": "next lint"
10
- },
11
- "dependencies": {
12
- "@next/font": "13.1.2",
13
- "@types/node": "18.11.18",
14
- "@types/react": "18.0.27",
15
- "@types/react-dom": "18.0.10",
16
- "eslint": "8.32.0",
17
- "eslint-config-next": "13.1.2",
18
- "next": "13.1.2",
19
- "react": "18.2.0",
20
- "react-dom": "18.2.0",
21
- "typescript": "4.9.4"
22
- }
23
- }
@@ -1,20 +0,0 @@
1
- import { s, val } from "../val.config";
2
-
3
- export default val.content(
4
- "/pages/blogs",
5
- s.array(s.object({ title: s.string({ maxLength: 1 }), text: s.string() })),
6
- [
7
- {
8
- title: "HVA?",
9
- text: "Vi gjør mange ting sammen i Blank, men det vi lever av er å designe og utvikle digitale tjenester for kundene våre.\n\n Noen av selskapene vi jobber med er små, andre er store. Alle har de høye ambisjoner for sine digitale løsninger, og stiller høye krav til hvem de jobber med.\n \n Noen ganger starter vi nye, egne, selskaper også, mest fordi det er gøy (og fordi vi liker å bygge ting), men også fordi smarte folk har gode idéer som fortjener å bli realisert.\n Ting vi har bygd for kundene våre",
10
- },
11
- {
12
- title: "HVEM ER VI?",
13
- text: "I Blank er vi en gjeng på omtrent 50 ulike folk som er ekstremt dyktige i faget vår - digital produktutvikling. Vi er en tredjedel designere og resten teknologer.",
14
- },
15
- {
16
- title: "HVORFOR?",
17
- text: "Vi startet Blank fordi vi ønsket oss et konsulentselskap hvor vi kan lære og utfordre oss selv, et selskap hvor det er veldig fint å jobbe - og kanskje aller mest fordi vi liker å bygge ting.\n \n I tillegg ønsket vi å forandre bransjen og hvordan et konsulentselskap kan fungere. Mer om det senere..\n \n ",
18
- },
19
- ]
20
- );
@@ -1,25 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "es5",
4
- "lib": ["dom", "dom.iterable", "esnext"],
5
- "allowJs": true,
6
- "skipLibCheck": true,
7
- "strict": true,
8
- "forceConsistentCasingInFileNames": true,
9
- "noEmit": false,
10
- "esModuleInterop": true,
11
- "module": "esnext",
12
- "moduleResolution": "node",
13
- "resolveJsonModule": true,
14
- "isolatedModules": true,
15
- "jsx": "preserve",
16
- "incremental": true,
17
- "declaration": true,
18
- "baseUrl": ".",
19
- "paths": {
20
- "@/*": ["./src/*"]
21
- }
22
- },
23
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
24
- "exclude": ["node_modules"]
25
- }
@@ -1,5 +0,0 @@
1
- import { initVal } from "@valbuild/core";
2
-
3
- const { s, val } = initVal();
4
-
5
- export { s, val };
@@ -1,2 +0,0 @@
1
- Using .d.ts with js, is a rare case for non-library packages, so we could skip support for this.
2
- However, it is useful since our development environment relies on .d.ts resolving correctly.
@@ -1,8 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "baseUrl": ".",
4
- "paths": {
5
- "@/*": ["./src/*"]
6
- }
7
- }
8
- }
@@ -1,23 +0,0 @@
1
- {
2
- "name": "val-test-app",
3
- "version": "0.1.0",
4
- "private": true,
5
- "scripts": {
6
- "dev": "next dev",
7
- "build": "next build",
8
- "start": "next start",
9
- "lint": "next lint"
10
- },
11
- "dependencies": {
12
- "@next/font": "13.1.2",
13
- "@types/node": "18.11.18",
14
- "@types/react": "18.0.27",
15
- "@types/react-dom": "18.0.10",
16
- "eslint": "8.32.0",
17
- "eslint-config-next": "13.1.2",
18
- "next": "13.1.2",
19
- "react": "18.2.0",
20
- "react-dom": "18.2.0",
21
- "typescript": "4.9.4"
22
- }
23
- }
@@ -1,7 +0,0 @@
1
- declare const _default: import("@valbuild/core").ValModule<
2
- {
3
- title: string;
4
- text: string;
5
- }[]
6
- >;
7
- export default _default;
@@ -1,19 +0,0 @@
1
- import { s, val } from "../val.config";
2
- export default val.content(
3
- "/pages/blogs",
4
- s.array(s.object({ title: s.string({ maxLength: 1 }), text: s.string() })),
5
- [
6
- {
7
- title: "HVA?",
8
- text: "Vi gjør mange ting sammen i Blank, men det vi lever av er å designe og utvikle digitale tjenester for kundene våre.\n\n Noen av selskapene vi jobber med er små, andre er store. Alle har de høye ambisjoner for sine digitale løsninger, og stiller høye krav til hvem de jobber med.\n \n Noen ganger starter vi nye, egne, selskaper også, mest fordi det er gøy (og fordi vi liker å bygge ting), men også fordi smarte folk har gode idéer som fortjener å bli realisert.\n Ting vi har bygd for kundene våre",
9
- },
10
- {
11
- title: "HVEM ER VI?",
12
- text: "I Blank er vi en gjeng på omtrent 50 ulike folk som er ekstremt dyktige i faget vår - digital produktutvikling. Vi er en tredjedel designere og resten teknologer.",
13
- },
14
- {
15
- title: "HVORFOR?",
16
- text: "Vi startet Blank fordi vi ønsket oss et konsulentselskap hvor vi kan lære og utfordre oss selv, et selskap hvor det er veldig fint å jobbe - og kanskje aller mest fordi vi liker å bygge ting.\n \n I tillegg ønsket vi å forandre bransjen og hvordan et konsulentselskap kan fungere. Mer om det senere..\n \n ",
17
- },
18
- ]
19
- );
@@ -1,3 +0,0 @@
1
- import { InitVal } from "@valbuild/core";
2
-
3
- export declare const s: InitVal["s"], val: InitVal["val"]; // Other .d.ts files in this package were generated, this was hand-written.
@@ -1,5 +0,0 @@
1
- import { initVal } from "@valbuild/core";
2
-
3
- const { s, val } = initVal();
4
-
5
- export { s, val };
package/tsconfig.json DELETED
@@ -1,12 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "strict": true,
4
- "isolatedModules": true,
5
- "noEmit": true,
6
- "esModuleInterop": true,
7
- "module": "esnext",
8
- "moduleResolution": "node",
9
- "skipLibCheck": true
10
- },
11
- "exclude": ["test/**/*"]
12
- }