@valbuild/server 0.26.0 → 0.27.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 (51) hide show
  1. package/package.json +7 -4
  2. package/.babelrc.json +0 -5
  3. package/CHANGELOG.md +0 -0
  4. package/jest.config.js +0 -4
  5. package/src/LocalValServer.ts +0 -167
  6. package/src/ProxyValServer.ts +0 -542
  7. package/src/SerializedModuleContent.ts +0 -36
  8. package/src/Service.ts +0 -126
  9. package/src/ValFS.ts +0 -22
  10. package/src/ValFSHost.ts +0 -66
  11. package/src/ValModuleLoader.test.ts +0 -75
  12. package/src/ValModuleLoader.ts +0 -158
  13. package/src/ValQuickJSRuntime.ts +0 -85
  14. package/src/ValServer.ts +0 -24
  15. package/src/ValSourceFileHandler.ts +0 -57
  16. package/src/createFixPatch.ts +0 -170
  17. package/src/createRequestHandler.ts +0 -27
  18. package/src/expressHelpers.ts +0 -5
  19. package/src/getCompilerOptions.ts +0 -50
  20. package/src/hosting.ts +0 -290
  21. package/src/index.ts +0 -16
  22. package/src/jwt.ts +0 -93
  23. package/src/patch/ts/ops.test.ts +0 -937
  24. package/src/patch/ts/ops.ts +0 -897
  25. package/src/patch/ts/syntax.ts +0 -371
  26. package/src/patch/ts/valModule.test.ts +0 -26
  27. package/src/patch/ts/valModule.ts +0 -110
  28. package/src/patch/validation.ts +0 -81
  29. package/src/patchValFile.ts +0 -110
  30. package/src/readValFile.test.ts +0 -49
  31. package/src/readValFile.ts +0 -96
  32. package/test/example-projects/basic-next-javascript/jsconfig.json +0 -8
  33. package/test/example-projects/basic-next-javascript/package.json +0 -23
  34. package/test/example-projects/basic-next-javascript/pages/blogs.val.js +0 -20
  35. package/test/example-projects/basic-next-javascript/val.config.js +0 -4
  36. package/test/example-projects/basic-next-src-typescript/package.json +0 -23
  37. package/test/example-projects/basic-next-src-typescript/src/pages/blogs.val.ts +0 -20
  38. package/test/example-projects/basic-next-src-typescript/src/val.config.ts +0 -5
  39. package/test/example-projects/basic-next-src-typescript/tsconfig.json +0 -24
  40. package/test/example-projects/basic-next-typescript/package.json +0 -23
  41. package/test/example-projects/basic-next-typescript/pages/blogs.val.ts +0 -20
  42. package/test/example-projects/basic-next-typescript/tsconfig.json +0 -25
  43. package/test/example-projects/basic-next-typescript/val.config.ts +0 -5
  44. package/test/example-projects/typescript-description-files/README.md +0 -2
  45. package/test/example-projects/typescript-description-files/jsconfig.json +0 -8
  46. package/test/example-projects/typescript-description-files/package.json +0 -23
  47. package/test/example-projects/typescript-description-files/pages/blogs.val.d.ts +0 -7
  48. package/test/example-projects/typescript-description-files/pages/blogs.val.js +0 -19
  49. package/test/example-projects/typescript-description-files/val.config.d.ts +0 -3
  50. package/test/example-projects/typescript-description-files/val.config.js +0 -5
  51. 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
- }