@schmock/core 2.1.2 → 2.1.4
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/builder.d.ts +1 -0
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +4 -1
- package/package.json +2 -2
- package/src/builder.ts +11 -1
- package/src/dist-shape.test.ts +35 -0
package/dist/builder.d.ts
CHANGED
package/dist/builder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAuDA;;;;GAIG;AACH,qBAAa,oBAAoB;;IAanB,OAAO,CAAC,YAAY;IAZhC,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,WAAW,CAA2C;IAC9D,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,eAAe,CAAwC;IAE/D,OAAO,CAAC,SAAS,CAAoC;gBAEjC,YAAY,GAAE,OAAO,CAAC,YAAiB;IAa3D,WAAW,CACT,KAAK,EAAE,OAAO,CAAC,QAAQ,EACvB,SAAS,EAAE,OAAO,CAAC,SAAS,EAC5B,MAAM,EAAE,OAAO,CAAC,WAAW,GAC1B,IAAI;IA+EP,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,oBAAoB,GAAG,IAAI;IAIvD,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI;IAoBlC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE;IAS5E,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAS3D,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAS7D,WAAW,CACT,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,EAC3B,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,GAAG,SAAS;IAYpC,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE;IAQhC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAMnC,EAAE,CAAC,CAAC,SAAS,OAAO,CAAC,YAAY,EAC/B,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,GACnD,IAAI;IAUP,GAAG,CAAC,CAAC,SAAS,OAAO,CAAC,YAAY,EAChC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,GACnD,IAAI;IAKP,OAAO,CAAC,IAAI;IAWZ,KAAK,IAAI,IAAI;IAiBb,YAAY,IAAI,IAAI;IAKpB,UAAU,IAAI,IAAI;IAWlB,MAAM,CAAC,IAAI,SAAI,EAAE,QAAQ,SAAc,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;IAgErE,KAAK,IAAI,IAAI;IAab,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,eAAe;IAgBhE,MAAM,CACV,MAAM,EAAE,OAAO,CAAC,UAAU,EAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,GAC/B,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;IA+O5B;;;;OAIG;YACW,UAAU;CAezB"}
|
package/dist/builder.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { createServer } from "node:http";
|
|
2
1
|
import { normalizePath, toHttpMethod } from "./constants.js";
|
|
3
2
|
import { errorMessage, RouteDefinitionError, RouteNotFoundError, SchmockError, } from "./errors.js";
|
|
4
3
|
import { collectBody, parseNodeHeaders, parseNodeQuery, writeSchmockResponse, } from "./http-helpers.js";
|
|
@@ -240,6 +239,10 @@ export class CallableMockInstance {
|
|
|
240
239
|
if (this.server) {
|
|
241
240
|
throw new SchmockError("Server is already running", "SERVER_ALREADY_RUNNING");
|
|
242
241
|
}
|
|
242
|
+
// Lazy-load node:http so browser bundles never pull it in. See issue #395.
|
|
243
|
+
return import("node:http").then(({ createServer }) => this.#startHttpServer(createServer, port, hostname));
|
|
244
|
+
}
|
|
245
|
+
#startHttpServer(createServer, port, hostname) {
|
|
243
246
|
const httpServer = createServer((req, res) => {
|
|
244
247
|
const handleRequest = async () => {
|
|
245
248
|
const url = new URL(req.url ?? "/", `http://${req.headers.host}`);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@schmock/core",
|
|
3
3
|
"description": "Core functionality for Schmock",
|
|
4
|
-
"version": "2.1.
|
|
4
|
+
"version": "2.1.4",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -36,6 +36,6 @@
|
|
|
36
36
|
"@types/json-schema": "^7.0.15",
|
|
37
37
|
"@types/node": "^25.8.0",
|
|
38
38
|
"@vitest/ui": "^4.1.6",
|
|
39
|
-
"vitest": "^4.1.
|
|
39
|
+
"vitest": "^4.1.7"
|
|
40
40
|
}
|
|
41
41
|
}
|
package/src/builder.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { Server } from "node:http";
|
|
2
|
-
import { createServer } from "node:http";
|
|
3
2
|
import { normalizePath, toHttpMethod } from "./constants.js";
|
|
4
3
|
import {
|
|
5
4
|
errorMessage,
|
|
@@ -321,6 +320,17 @@ export class CallableMockInstance {
|
|
|
321
320
|
);
|
|
322
321
|
}
|
|
323
322
|
|
|
323
|
+
// Lazy-load node:http so browser bundles never pull it in. See issue #395.
|
|
324
|
+
return import("node:http").then(({ createServer }) =>
|
|
325
|
+
this.#startHttpServer(createServer, port, hostname),
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
#startHttpServer(
|
|
330
|
+
createServer: typeof import("node:http").createServer,
|
|
331
|
+
port: number,
|
|
332
|
+
hostname: string,
|
|
333
|
+
): Promise<Schmock.ServerInfo> {
|
|
324
334
|
const httpServer = createServer((req, res) => {
|
|
325
335
|
const handleRequest = async () => {
|
|
326
336
|
const url = new URL(req.url ?? "/", `http://${req.headers.host}`);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Regression coverage for issue #395 — a top-level `import { createServer }
|
|
7
|
+
* from "node:http"` in `dist/builder.js` was preserved by browser bundlers
|
|
8
|
+
* (esbuild / Angular / Vite) even when `.listen()` was never called, causing
|
|
9
|
+
* `node:http` resolution failures in browsers.
|
|
10
|
+
*
|
|
11
|
+
* Inspect published artifacts: top-level `node:http` imports must not exist.
|
|
12
|
+
* `node:http` may only appear inside dynamic imports (`await import(...)`).
|
|
13
|
+
*/
|
|
14
|
+
const distRoot = resolve(__dirname, "..", "dist");
|
|
15
|
+
|
|
16
|
+
// Static ESM imports from node: modules — `from "node:..."`. Dynamic imports
|
|
17
|
+
// (`await import("node:...")`) have no `from` clause and are not matched.
|
|
18
|
+
function staticNodeImports(src: string): string[] {
|
|
19
|
+
return src.match(/from\s*["']node:[^"']+["']/g) ?? [];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
describe.skipIf(!existsSync(distRoot))(
|
|
23
|
+
"dist shape — browser compatibility (#395)",
|
|
24
|
+
() => {
|
|
25
|
+
it("dist/builder.js has no static node:* imports", () => {
|
|
26
|
+
const src = readFileSync(resolve(distRoot, "builder.js"), "utf8");
|
|
27
|
+
expect(staticNodeImports(src)).toEqual([]);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it("dist/index.js has no static node:* imports", () => {
|
|
31
|
+
const src = readFileSync(resolve(distRoot, "index.js"), "utf8");
|
|
32
|
+
expect(staticNodeImports(src)).toEqual([]);
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
);
|