oc-server 2.0.6 → 2.1.1

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/dist/Server.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Prettify, DataContext, DataProvider, ToPrettyJson } from './types';
1
+ import { Prettify, DataContext, DataProvider, ToPrettyJson, IsAnyOrUnknown } from './types';
2
2
  export type ServerContext<E = {
3
3
  name: string;
4
4
  }, P = any, S = any> = Omit<DataContext<any, E, P, S>, 'params' | 'action' | 'setEmptyResponse'>;
@@ -46,7 +46,7 @@ interface ServerOptions<S extends boolean> {
46
46
  }
47
47
  export declare class Server<E = {
48
48
  name: string;
49
- }, P = unknown, A extends Record<string, AnyAction> = {}, InitialInput = any, InitialOutput = any, MiddlewareInput = any, MiddlewareOutput = any, Streaming extends boolean = false> {
49
+ }, P = unknown, A extends Record<string, AnyAction> = {}, InitialInput = unknown, InitialOutput = unknown, MiddlewareInput = any, MiddlewareOutput = any, Streaming extends boolean = false> {
50
50
  private readonly _options;
51
51
  private _parameters;
52
52
  private _middleware;
@@ -74,7 +74,7 @@ export type RegisteredServer = Register extends {
74
74
  server: infer TServer extends AnyServer;
75
75
  } ? TServer : AnyServer;
76
76
  export type GetMiddlewareInput<TServer extends AnyServer> = TServer extends HandledServer<any, any, any, any, any, infer I> ? I : any;
77
- type GetInitialData<TServer extends AnyServer> = TServer extends HandledServer<any, any, any, any, infer O, any, any, infer Streaming> ? Streaming extends true ? Exclude<O, undefined | null> : Exclude<ToPrettyJson<O>, undefined | null> : any;
77
+ type GetInitialData<TServer extends AnyServer> = TServer extends HandledServer<any, any, any, any, infer O, any, any, infer Streaming> ? IsAnyOrUnknown<O> extends never ? Streaming extends true ? Exclude<O, undefined | null> : Exclude<ToPrettyJson<O>, undefined | null> : unknown : unknown;
78
78
  type GetHandlerParameters<TServer extends AnyServer> = TServer extends HandledServer<any, any, any, infer I, any, any, any, any> ? I : any;
79
79
  export type HandlerParameters = GetHandlerParameters<RegisteredServer>;
80
80
  export type InitialData = GetInitialData<RegisteredServer>;
package/dist/cli/cli.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.cli = void 0;
6
+ exports.cli = cli;
7
7
  const node_path_1 = __importDefault(require("node:path"));
8
8
  const node_util_1 = require("node:util");
9
9
  const oc_1 = require("./oc");
@@ -64,4 +64,3 @@ function cli() {
64
64
  (0, server_1.createServer)({ template, port });
65
65
  }
66
66
  }
67
- exports.cli = cli;
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = getMockedPlugins;
6
7
  const path_1 = __importDefault(require("path"));
7
8
  const fs_1 = __importDefault(require("fs"));
8
9
  const readJsonSync = (path) => JSON.parse(fs_1.default.readFileSync(path, 'utf-8'));
@@ -76,4 +77,3 @@ function getMockedPlugins(componentsDir) {
76
77
  plugins = plugins.concat(registerDynamicMocks(ocJsonLocation, content.mocks.plugins.dynamic ?? {}));
77
78
  return plugins;
78
79
  }
79
- exports.default = getMockedPlugins;
package/dist/cli/index.js CHANGED
File without changes
package/dist/cli/oc.d.ts CHANGED
@@ -1,14 +1,14 @@
1
- /// <reference types="node" />
2
1
  import { FastifyRequest } from 'fastify';
3
2
  import { PluginMock } from './get-mocked-plugins';
3
+ interface Parameters {
4
+ mandatory: boolean;
5
+ example: string | number | boolean;
6
+ }
4
7
  interface Package {
5
8
  name: string;
6
9
  version: string;
7
10
  oc?: {
8
- parameters?: Record<string, {
9
- mandatory: boolean;
10
- example: string | number | boolean;
11
- }>;
11
+ parameters?: Record<string, Parameters>;
12
12
  files: {
13
13
  data?: string;
14
14
  template?: {
@@ -18,10 +18,10 @@ interface Package {
18
18
  };
19
19
  };
20
20
  }
21
+ export declare function getDefaultParams(parameters: Record<string, Parameters>): {};
21
22
  export declare function parsePkg(pkg: Package): {
22
23
  name: string;
23
24
  version: string;
24
- defaultParams: {};
25
25
  serverEntry: string | undefined;
26
26
  appEntry: string;
27
27
  templateType: string;
package/dist/cli/oc.js CHANGED
@@ -1,19 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getContext = exports.parsePkg = void 0;
4
- function parsePkg(pkg) {
5
- const serverEntry = pkg.oc?.files?.data;
6
- let appEntry = pkg.oc?.files?.template?.src || '';
7
- if (!appEntry) {
8
- throw new Error('Missing an entry on your package.json under oc.files.template.src');
9
- }
10
- if (!appEntry.startsWith('/')) {
11
- appEntry = `/${appEntry}`;
12
- }
3
+ exports.getDefaultParams = getDefaultParams;
4
+ exports.parsePkg = parsePkg;
5
+ exports.getContext = getContext;
6
+ function getDefaultParams(parameters) {
13
7
  const defaultParams = (() => {
14
8
  let params = {};
15
- if (pkg.oc?.parameters) {
16
- params = Object.fromEntries(Object.entries(pkg.oc.parameters || {})
9
+ if (parameters) {
10
+ params = Object.fromEntries(Object.entries(parameters || {})
17
11
  .filter(([, param]) => {
18
12
  return !!param.mandatory && 'example' in param;
19
13
  })
@@ -21,6 +15,17 @@ function parsePkg(pkg) {
21
15
  }
22
16
  return params;
23
17
  })();
18
+ return defaultParams;
19
+ }
20
+ function parsePkg(pkg) {
21
+ const serverEntry = pkg.oc?.files?.data;
22
+ let appEntry = pkg.oc?.files?.template?.src || '';
23
+ if (!appEntry) {
24
+ throw new Error('Missing an entry on your package.json under oc.files.template.src');
25
+ }
26
+ if (!appEntry.startsWith('/')) {
27
+ appEntry = `/${appEntry}`;
28
+ }
24
29
  const templateType = pkg.oc?.files?.template?.type;
25
30
  if (!templateType) {
26
31
  throw new Error('Missing an entry on your package.json under oc.files.template.type');
@@ -28,13 +33,11 @@ function parsePkg(pkg) {
28
33
  return {
29
34
  name: pkg.name,
30
35
  version: pkg.version,
31
- defaultParams,
32
36
  serverEntry,
33
37
  appEntry,
34
38
  templateType,
35
39
  };
36
40
  }
37
- exports.parsePkg = parsePkg;
38
41
  function getContext(plugins, req, params, action) {
39
42
  const responseHeaders = {};
40
43
  const context = {
@@ -66,4 +69,3 @@ function getContext(plugins, req, params, action) {
66
69
  };
67
70
  return { context, responseHeaders };
68
71
  }
69
- exports.getContext = getContext;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.createServer = void 0;
6
+ exports.createServer = createServer;
7
7
  const node_fs_1 = __importDefault(require("node:fs"));
8
8
  const node_path_1 = __importDefault(require("node:path"));
9
9
  const node_vm_1 = __importDefault(require("node:vm"));
@@ -17,10 +17,14 @@ const oc_1 = require("./oc");
17
17
  const get_mocked_plugins_1 = __importDefault(require("./get-mocked-plugins"));
18
18
  const promisify = (fn) => (...args) => new Promise((resolve, reject) => fn(...args, (err, data) => (err ? reject(err) : resolve(data))));
19
19
  const pk = require(node_path_1.default.join(process.cwd(), 'package.json'));
20
- const { name, version, appEntry, serverEntry, defaultParams } = (0, oc_1.parsePkg)(pk);
20
+ const { name, version, appEntry, serverEntry } = (0, oc_1.parsePkg)(pk);
21
21
  function getDataProvider() {
22
22
  if (!serverEntry) {
23
- return async (context) => ({ ...(context.params ?? {}) });
23
+ return {
24
+ dataProvider: async (context) => ({
25
+ ...(context.params ?? {}),
26
+ }),
27
+ };
24
28
  }
25
29
  const result = esbuild_1.default.buildSync({
26
30
  entryPoints: [serverEntry],
@@ -32,10 +36,14 @@ function getDataProvider() {
32
36
  const backend = node_vm_1.default.runInNewContext(code, {
33
37
  ...globalThis,
34
38
  exports: {},
39
+ console,
35
40
  module: { exports: {} },
36
41
  });
37
42
  const dataProvider = backend.data || backend.server.getData();
38
- return promisify(dataProvider);
43
+ return {
44
+ dataProvider: promisify(dataProvider),
45
+ parametersSchema: backend.server?._parameters,
46
+ };
39
47
  }
40
48
  function getBaseTemplate(appBlock) {
41
49
  const baseTemplate = `
@@ -90,11 +98,12 @@ async function createServer({ template, port, }) {
90
98
  const { dev: clientJs } = oc_client_browser_1.default.compileSync();
91
99
  const app = (0, fastify_1.default)({ logger: false });
92
100
  await app.register(express_1.default);
93
- const dataProvider = getDataProvider();
101
+ const { dataProvider, parametersSchema } = getDataProvider();
94
102
  const plugins = (0, get_mocked_plugins_1.default)(node_path_1.default.join(process.cwd(), '..'));
95
103
  for (const plugin of plugins) {
96
104
  plugin.register.register(null, null, () => { });
97
105
  }
106
+ const defaultParams = (0, oc_1.getDefaultParams)(pk.oc?.parameters ?? parametersSchema);
98
107
  const vite = await (0, vite_1.createServer)({
99
108
  server: { middlewareMode: true },
100
109
  plugins: [(0, cssModulesPlugin_1.default)(), template.plugin?.()].filter(Boolean),
@@ -161,4 +170,3 @@ async function createServer({ template, port, }) {
161
170
  await app.listen({ port: port });
162
171
  console.log(`Listening on: http://localhost:${port}`);
163
172
  }
164
- exports.createServer = createServer;
@@ -1,11 +1,11 @@
1
1
  import { AnyServer, RegisteredServer, Action, GetMiddlewareInput } from './Server';
2
- import { IsAny, Prettify, ToPrettyJson } from './types';
2
+ import { IsAnyOrUnknown, Prettify, ToPrettyJson } from './types';
3
3
  type InferInput<R> = R extends Action<infer I, any, any, any, any> ? I : any;
4
4
  type InferOutput<R> = R extends Action<any, infer O, any, any, any> ? ToPrettyJson<O> : never;
5
5
  type IsEmptyObject<T> = keyof T extends never ? true : false;
6
6
  type ServerClient<TServer extends AnyServer> = {
7
- readonly [Property in keyof TServer['actions']]: (...args: IsEmptyObject<Prettify<InferInput<TServer['actions'][Property]> & (IsAny<GetMiddlewareInput<TServer>> extends never ? GetMiddlewareInput<TServer> : {})>> extends true ? [] : [
8
- Prettify<InferInput<TServer['actions'][Property]> & (IsAny<GetMiddlewareInput<TServer>> extends never ? GetMiddlewareInput<TServer> : {})>
7
+ readonly [Property in keyof TServer['actions']]: (...args: IsEmptyObject<Prettify<InferInput<TServer['actions'][Property]> & (IsAnyOrUnknown<GetMiddlewareInput<TServer>> extends never ? GetMiddlewareInput<TServer> : {})>> extends true ? [] : [
8
+ Prettify<InferInput<TServer['actions'][Property]> & (IsAnyOrUnknown<GetMiddlewareInput<TServer>> extends never ? GetMiddlewareInput<TServer> : {})>
9
9
  ]) => Promise<InferOutput<TServer['actions'][Property]>>;
10
10
  };
11
11
  export declare const serverClient: ServerClient<RegisteredServer>;
package/dist/types.d.ts CHANGED
@@ -46,6 +46,6 @@ export type DataContext<T = any, E = Env, P = any, S = unknown> = {
46
46
  } : {});
47
47
  type Callback<D, E = Error> = (error: E | null, data?: D) => void;
48
48
  export type DataProvider<Parameters = any, Return = any, Environment = Env> = (context: DataContext<Parameters, Environment>, callback: Callback<Return>) => void;
49
- type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N;
50
- export type IsAny<T> = IfAny<T, true, never>;
49
+ type IfUnknown<T, Y, N> = [unknown] extends [T] ? [T] extends [unknown] ? Exclude<unknown, T> extends never ? Y : N : N : N;
50
+ export type IsAnyOrUnknown<T> = IfUnknown<T, true, never>;
51
51
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oc-server",
3
- "version": "2.0.6",
3
+ "version": "2.1.1",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",