@webda/graphql 4.0.0-beta.5 → 4.0.0-beta.7

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.
package/lib/types/any.js CHANGED
@@ -1,26 +1,34 @@
1
- import { GraphQLScalarType, Kind } from "graphql";
1
+ import { GraphQLScalarType, Kind, valueFromASTUntyped } from "graphql";
2
2
  /**
3
- * Coerce an arbitrary value into an object — parses JSON strings, passes objects through
4
- * @param value - value to coerce
5
- * @returns parsed object, the value itself if already an object, or null
3
+ * Read a string as JSON when it looks like a JSON object or array
4
+ * @param value - the string
5
+ * @returns the parsed value, or the string itself
6
6
  */
7
- function coerceAny(value) {
8
- return typeof value === "object" ? value : typeof value === "string" ? JSON.parse(value) : null;
7
+ function fromJSONString(value) {
8
+ const text = value.trim();
9
+ if (!text.startsWith("{") && !text.startsWith("[")) {
10
+ return value;
11
+ }
12
+ try {
13
+ return JSON.parse(text);
14
+ }
15
+ catch {
16
+ return value;
17
+ }
18
+ }
19
+ /**
20
+ * Values pass through unchanged (objects, arrays, numbers, booleans, strings)
21
+ * @param value - value to pass
22
+ * @returns the value, null for undefined
23
+ */
24
+ function passThrough(value) {
25
+ return value === undefined ? null : value;
9
26
  }
10
27
  export const AnyScalarType = new GraphQLScalarType({
11
28
  name: "Object",
12
- description: "Arbitrary object",
13
- parseValue: coerceAny,
14
- serialize: coerceAny,
15
- parseLiteral: ast => {
16
- switch (ast.kind) {
17
- case Kind.STRING:
18
- return JSON.parse(ast.value);
19
- case Kind.OBJECT:
20
- throw new Error(`Not sure what to do with OBJECT for ObjectScalarType`);
21
- default:
22
- return null;
23
- }
24
- }
29
+ description: "Arbitrary value: object, array, number, boolean or string",
30
+ parseValue: passThrough,
31
+ serialize: passThrough,
32
+ parseLiteral: (ast, variables) => ast.kind === Kind.STRING ? fromJSONString(ast.value) : valueFromASTUntyped(ast, variables)
25
33
  });
26
34
  //# sourceMappingURL=any.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"any.js","sourceRoot":"","sources":["../../src/types/any.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAElD;;;;GAIG;AACH,SAAS,SAAS,CAAC,KAAU;IAC3B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClG,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC;IACjD,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,kBAAkB;IAC/B,UAAU,EAAE,SAAS;IACrB,SAAS,EAAE,SAAS;IACpB,YAAY,EAAE,GAAG,CAAC,EAAE;QAClB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,IAAI,CAAC,MAAM;gBACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/B,KAAK,IAAI,CAAC,MAAM;gBACd,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"any.js","sourceRoot":"","sources":["../../src/types/any.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEvE;;;;GAIG;AACH,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,KAAU;IAC7B,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC;IACjD,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,2DAA2D;IACxE,UAAU,EAAE,WAAW;IACvB,SAAS,EAAE,WAAW;IACtB,YAAY,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAC/B,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC;CAC7F,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/types/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAQ,MAAM,SAAS,CAAC;AAElD,eAAO,MAAM,UAAU,iCAuBrB,CAAC"}
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/types/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAQ,MAAM,SAAS,CAAC;AAElD,eAAO,MAAM,UAAU,iCAyBrB,CAAC"}
package/lib/types/date.js CHANGED
@@ -3,8 +3,10 @@ export const DateScalar = new GraphQLScalarType({
3
3
  name: "Date",
4
4
  description: "Date custom scalar type",
5
5
  serialize(value) {
6
- if (value instanceof Date) {
7
- return value.toISOString(); // Convert outgoing Date to integer for JSON
6
+ // Stores serializing to JSON return dates as ISO strings or timestamps
7
+ const date = typeof value === "string" || typeof value === "number" ? new Date(value) : value;
8
+ if (date instanceof Date && !isNaN(date.getTime())) {
9
+ return date.toISOString();
8
10
  }
9
11
  throw Error("GraphQL Date Scalar serializer expected a `Date` object");
10
12
  },
@@ -1 +1 @@
1
- {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/types/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC;IAC9C,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,yBAAyB;IACtC,SAAS,CAAC,KAAK;QACb,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,4CAA4C;QAC1E,CAAC;QACD,MAAM,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACzE,CAAC;IACD,UAAU,CAAC,KAAK;QACd,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,mCAAmC;QAC7D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,YAAY,CAAC,GAAG;QACd,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,4DAA4D;YAC5D,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,4CAA4C;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/types/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC;IAC9C,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,yBAAyB;IACtC,SAAS,CAAC,KAAK;QACb,uEAAuE;QACvE,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9F,IAAI,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5B,CAAC;QACD,MAAM,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACzE,CAAC;IACD,UAAU,CAAC,KAAK;QACd,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,mCAAmC;QAC7D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,YAAY,CAAC,GAAG;QACd,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,4DAA4D;YAC5D,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,4CAA4C;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webda/graphql",
3
- "version": "4.0.0-beta.5",
3
+ "version": "4.0.0-beta.7",
4
4
  "description": "GraphQL endpoint for your Webda Application",
5
5
  "main": "lib/index.js",
6
6
  "type": "module",
@@ -18,12 +18,15 @@
18
18
  "graphql-ws": "^6.0.8",
19
19
  "json-schema": "^0.4.0",
20
20
  "ws": "^8.20.0",
21
- "@webda/core": "4.0.0-beta.5",
22
- "@webda/runtime": "4.0.0-beta.5",
23
- "@webda/ql": "4.0.0-beta.5"
21
+ "@webda/core": "4.0.0-beta.7",
22
+ "@webda/runtime": "4.0.0-beta.7",
23
+ "@webda/utils": "4.0.0-beta.7",
24
+ "@webda/ql": "4.0.0-beta.6",
25
+ "@webda/workout": "4.0.0-beta.5"
24
26
  },
25
27
  "devDependencies": {
26
28
  "@types/node": "25.5.0",
29
+ "@vitest/coverage-v8": "^4.1.2",
27
30
  "c8": "^11.0.0",
28
31
  "glob": "^13.0.6",
29
32
  "js-beautify": "^1.15.4",
@@ -32,7 +35,9 @@
32
35
  "skott": "^0.35.8",
33
36
  "source-map-support": "^0.5.21",
34
37
  "vite": "^6.0.0",
35
- "@webda/compiler": "^4.0.0-beta.5"
38
+ "vitest": "^4.0.0",
39
+ "@webda/compiler": "^4.0.0-beta.7",
40
+ "@webda/test": "^4.0.0-beta.6"
36
41
  },
37
42
  "webda": {
38
43
  "namespace": "Webda"
@@ -59,7 +64,7 @@
59
64
  "scripts": {
60
65
  "build": "webdac build",
61
66
  "pretest": "npm run build",
62
- "test": "echo 'Tests disabled — spec files need migration from @testdeck/mocha to @webda/test'",
67
+ "test": "vitest run",
63
68
  "new-model": "webda init webda:model",
64
69
  "new-service": "webda init webda:service",
65
70
  "lint": "eslint",
package/webda.module.json CHANGED
@@ -20,6 +20,16 @@
20
20
  "description": "Expose current user in the context with me",
21
21
  "type": "boolean"
22
22
  },
23
+ "exposeOperations": {
24
+ "default": [
25
+ "*"
26
+ ],
27
+ "description": "Operations exposed as GraphQL fields next to the model schema, with the operation transports' patterns:\n`\"*\"`, `\"Service.*\"`, an exact id, `\"!Id\"` to exclude; `[]` exposes no operation",
28
+ "items": {
29
+ "type": "string"
30
+ },
31
+ "type": "array"
32
+ },
23
33
  "globalSubscription": {
24
34
  "default": false,
25
35
  "description": "Expose a aggregation of all available subscriptions",