@essential-apps/shopify-test-runner 1.0.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.
- package/dist/contracts/normalize.d.ts +61 -0
- package/dist/contracts/normalize.d.ts.map +1 -0
- package/dist/contracts/normalize.js +99 -0
- package/dist/contracts/normalize.js.map +1 -0
- package/dist/contracts/normalizeHtml.d.ts +37 -0
- package/dist/contracts/normalizeHtml.d.ts.map +1 -0
- package/dist/contracts/normalizeHtml.js +89 -0
- package/dist/contracts/normalizeHtml.js.map +1 -0
- package/dist/edge/cert.d.ts +44 -0
- package/dist/edge/cert.d.ts.map +1 -0
- package/dist/edge/cert.js +117 -0
- package/dist/edge/cert.js.map +1 -0
- package/dist/edge/edgeProxy.d.ts +43 -0
- package/dist/edge/edgeProxy.d.ts.map +1 -0
- package/dist/edge/edgeProxy.js +297 -0
- package/dist/edge/edgeProxy.js.map +1 -0
- package/dist/edge/nodeShim.d.ts +2 -0
- package/dist/edge/nodeShim.d.ts.map +1 -0
- package/dist/edge/nodeShim.js +217 -0
- package/dist/edge/nodeShim.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/buildSourceBundle.d.ts +56 -0
- package/dist/lib/buildSourceBundle.d.ts.map +1 -0
- package/dist/lib/buildSourceBundle.js +153 -0
- package/dist/lib/buildSourceBundle.js.map +1 -0
- package/dist/lib/freePort.d.ts +5 -0
- package/dist/lib/freePort.d.ts.map +1 -0
- package/dist/lib/freePort.js +33 -0
- package/dist/lib/freePort.js.map +1 -0
- package/dist/lib/functionBuild.d.ts +99 -0
- package/dist/lib/functionBuild.d.ts.map +1 -0
- package/dist/lib/functionBuild.js +413 -0
- package/dist/lib/functionBuild.js.map +1 -0
- package/dist/lib/neonWsProxy.d.ts +41 -0
- package/dist/lib/neonWsProxy.d.ts.map +1 -0
- package/dist/lib/neonWsProxy.js +101 -0
- package/dist/lib/neonWsProxy.js.map +1 -0
- package/dist/lib/sourceZipUpload.d.ts +45 -0
- package/dist/lib/sourceZipUpload.d.ts.map +1 -0
- package/dist/lib/sourceZipUpload.js +129 -0
- package/dist/lib/sourceZipUpload.js.map +1 -0
- package/dist/lib/stealthLaunch.d.ts +35 -0
- package/dist/lib/stealthLaunch.d.ts.map +1 -0
- package/dist/lib/stealthLaunch.js +46 -0
- package/dist/lib/stealthLaunch.js.map +1 -0
- package/dist/lib/storeAutomation.d.ts +22 -0
- package/dist/lib/storeAutomation.d.ts.map +1 -0
- package/dist/lib/storeAutomation.js +85 -0
- package/dist/lib/storeAutomation.js.map +1 -0
- package/dist/playwright/baseConfig.d.ts +62 -0
- package/dist/playwright/baseConfig.d.ts.map +1 -0
- package/dist/playwright/baseConfig.js +68 -0
- package/dist/playwright/baseConfig.js.map +1 -0
- package/dist/playwright/globalSetup.d.ts +2 -0
- package/dist/playwright/globalSetup.d.ts.map +1 -0
- package/dist/playwright/globalSetup.js +139 -0
- package/dist/playwright/globalSetup.js.map +1 -0
- package/dist/playwright/index.d.ts +9 -0
- package/dist/playwright/index.d.ts.map +1 -0
- package/dist/playwright/index.js +9 -0
- package/dist/playwright/index.js.map +1 -0
- package/dist/probes/fonts.d.ts +4 -0
- package/dist/probes/fonts.d.ts.map +1 -0
- package/dist/probes/fonts.js +255 -0
- package/dist/probes/fonts.js.map +1 -0
- package/dist/probes/mirror.d.ts +4 -0
- package/dist/probes/mirror.d.ts.map +1 -0
- package/dist/probes/mirror.js +260 -0
- package/dist/probes/mirror.js.map +1 -0
- package/dist/probes/runProbe.d.ts +3 -0
- package/dist/probes/runProbe.d.ts.map +1 -0
- package/dist/probes/runProbe.js +219 -0
- package/dist/probes/runProbe.js.map +1 -0
- package/dist/probes/types.d.ts +72 -0
- package/dist/probes/types.d.ts.map +1 -0
- package/dist/probes/types.js +2 -0
- package/dist/probes/types.js.map +1 -0
- package/dist/scripts/_probeSourceUrl.d.ts +3 -0
- package/dist/scripts/_probeSourceUrl.d.ts.map +1 -0
- package/dist/scripts/_probeSourceUrl.js +119 -0
- package/dist/scripts/_probeSourceUrl.js.map +1 -0
- package/dist/scripts/addStore.d.ts +3 -0
- package/dist/scripts/addStore.d.ts.map +1 -0
- package/dist/scripts/addStore.js +46 -0
- package/dist/scripts/addStore.js.map +1 -0
- package/dist/scripts/buildDockerImage.d.ts +3 -0
- package/dist/scripts/buildDockerImage.d.ts.map +1 -0
- package/dist/scripts/buildDockerImage.js +60 -0
- package/dist/scripts/buildDockerImage.js.map +1 -0
- package/dist/scripts/captureAuth.d.ts +3 -0
- package/dist/scripts/captureAuth.d.ts.map +1 -0
- package/dist/scripts/captureAuth.js +124 -0
- package/dist/scripts/captureAuth.js.map +1 -0
- package/dist/scripts/captureContracts.d.ts +3 -0
- package/dist/scripts/captureContracts.d.ts.map +1 -0
- package/dist/scripts/captureContracts.js +517 -0
- package/dist/scripts/captureContracts.js.map +1 -0
- package/dist/scripts/captureRestContracts.d.ts +3 -0
- package/dist/scripts/captureRestContracts.d.ts.map +1 -0
- package/dist/scripts/captureRestContracts.js +245 -0
- package/dist/scripts/captureRestContracts.js.map +1 -0
- package/dist/scripts/checkOperationCoverage.d.ts +3 -0
- package/dist/scripts/checkOperationCoverage.d.ts.map +1 -0
- package/dist/scripts/checkOperationCoverage.js +302 -0
- package/dist/scripts/checkOperationCoverage.js.map +1 -0
- package/dist/scripts/cleanupStores.d.ts +3 -0
- package/dist/scripts/cleanupStores.d.ts.map +1 -0
- package/dist/scripts/cleanupStores.js +77 -0
- package/dist/scripts/cleanupStores.js.map +1 -0
- package/dist/scripts/createStores.d.ts +3 -0
- package/dist/scripts/createStores.d.ts.map +1 -0
- package/dist/scripts/createStores.js +66 -0
- package/dist/scripts/createStores.js.map +1 -0
- package/dist/scripts/deployAppVersion.d.ts +3 -0
- package/dist/scripts/deployAppVersion.d.ts.map +1 -0
- package/dist/scripts/deployAppVersion.js +591 -0
- package/dist/scripts/deployAppVersion.js.map +1 -0
- package/dist/scripts/devE2eBackend.d.ts +3 -0
- package/dist/scripts/devE2eBackend.d.ts.map +1 -0
- package/dist/scripts/devE2eBackend.js +117 -0
- package/dist/scripts/devE2eBackend.js.map +1 -0
- package/dist/scripts/devOnlineBackend.d.ts +3 -0
- package/dist/scripts/devOnlineBackend.d.ts.map +1 -0
- package/dist/scripts/devOnlineBackend.js +117 -0
- package/dist/scripts/devOnlineBackend.js.map +1 -0
- package/dist/scripts/installApp.d.ts +3 -0
- package/dist/scripts/installApp.d.ts.map +1 -0
- package/dist/scripts/installApp.js +163 -0
- package/dist/scripts/installApp.js.map +1 -0
- package/dist/scripts/listStores.d.ts +3 -0
- package/dist/scripts/listStores.d.ts.map +1 -0
- package/dist/scripts/listStores.js +18 -0
- package/dist/scripts/listStores.js.map +1 -0
- package/dist/scripts/runDocker.d.ts +3 -0
- package/dist/scripts/runDocker.d.ts.map +1 -0
- package/dist/scripts/runDocker.js +88 -0
- package/dist/scripts/runDocker.js.map +1 -0
- package/dist/scripts/runDockerAuth.d.ts +3 -0
- package/dist/scripts/runDockerAuth.d.ts.map +1 -0
- package/dist/scripts/runDockerAuth.js +108 -0
- package/dist/scripts/runDockerAuth.js.map +1 -0
- package/dist/scripts/runDockerOffline.d.ts +3 -0
- package/dist/scripts/runDockerOffline.d.ts.map +1 -0
- package/dist/scripts/runDockerOffline.js +129 -0
- package/dist/scripts/runDockerOffline.js.map +1 -0
- package/dist/scripts/runDockerOfflineExplore.d.ts +3 -0
- package/dist/scripts/runDockerOfflineExplore.d.ts.map +1 -0
- package/dist/scripts/runDockerOfflineExplore.js +116 -0
- package/dist/scripts/runDockerOfflineExplore.js.map +1 -0
- package/dist/scripts/runIsolatedDockerOffline.d.ts +3 -0
- package/dist/scripts/runIsolatedDockerOffline.d.ts.map +1 -0
- package/dist/scripts/runIsolatedDockerOffline.js +351 -0
- package/dist/scripts/runIsolatedDockerOffline.js.map +1 -0
- package/dist/scripts/runOffline.d.ts +3 -0
- package/dist/scripts/runOffline.d.ts.map +1 -0
- package/dist/scripts/runOffline.js +521 -0
- package/dist/scripts/runOffline.js.map +1 -0
- package/dist/scripts/runOfflineE2e.d.ts +3 -0
- package/dist/scripts/runOfflineE2e.d.ts.map +1 -0
- package/dist/scripts/runOfflineE2e.js +408 -0
- package/dist/scripts/runOfflineE2e.js.map +1 -0
- package/dist/scripts/runOfflineFullTests.d.ts +3 -0
- package/dist/scripts/runOfflineFullTests.d.ts.map +1 -0
- package/dist/scripts/runOfflineFullTests.js +1456 -0
- package/dist/scripts/runOfflineFullTests.js.map +1 -0
- package/dist/scripts/runSupermachine.d.ts +3 -0
- package/dist/scripts/runSupermachine.d.ts.map +1 -0
- package/dist/scripts/runSupermachine.js +474 -0
- package/dist/scripts/runSupermachine.js.map +1 -0
- package/dist/scripts/runSupermachineAuth.d.ts +3 -0
- package/dist/scripts/runSupermachineAuth.d.ts.map +1 -0
- package/dist/scripts/runSupermachineAuth.js +454 -0
- package/dist/scripts/runSupermachineAuth.js.map +1 -0
- package/dist/scripts/runTests.d.ts +3 -0
- package/dist/scripts/runTests.d.ts.map +1 -0
- package/dist/scripts/runTests.js +278 -0
- package/dist/scripts/runTests.js.map +1 -0
- package/dist/scripts/runVm.d.ts +3 -0
- package/dist/scripts/runVm.d.ts.map +1 -0
- package/dist/scripts/runVm.js +524 -0
- package/dist/scripts/runVm.js.map +1 -0
- package/dist/scripts/runVmAuth.d.ts +3 -0
- package/dist/scripts/runVmAuth.d.ts.map +1 -0
- package/dist/scripts/runVmAuth.js +475 -0
- package/dist/scripts/runVmAuth.js.map +1 -0
- package/dist/scripts/runVmScript.d.ts +3 -0
- package/dist/scripts/runVmScript.d.ts.map +1 -0
- package/dist/scripts/runVmScript.js +242 -0
- package/dist/scripts/runVmScript.js.map +1 -0
- package/dist/scripts/setupTestDb.d.ts +3 -0
- package/dist/scripts/setupTestDb.d.ts.map +1 -0
- package/dist/scripts/setupTestDb.js +61 -0
- package/dist/scripts/setupTestDb.js.map +1 -0
- package/dist/scripts/verifyContracts.d.ts +3 -0
- package/dist/scripts/verifyContracts.d.ts.map +1 -0
- package/dist/scripts/verifyContracts.js +258 -0
- package/dist/scripts/verifyContracts.js.map +1 -0
- package/dist/scripts/verifyRestContracts.d.ts +3 -0
- package/dist/scripts/verifyRestContracts.d.ts.map +1 -0
- package/dist/scripts/verifyRestContracts.js +237 -0
- package/dist/scripts/verifyRestContracts.js.map +1 -0
- package/dist/vite/offlineConfig.d.ts +34 -0
- package/dist/vite/offlineConfig.d.ts.map +1 -0
- package/dist/vite/offlineConfig.js +61 -0
- package/dist/vite/offlineConfig.js.map +1 -0
- package/dist/vite/onlineConfig.d.ts +42 -0
- package/dist/vite/onlineConfig.d.ts.map +1 -0
- package/dist/vite/onlineConfig.js +56 -0
- package/dist/vite/onlineConfig.js.map +1 -0
- package/docker/Dockerfile +67 -0
- package/docker/Dockerfile.vm +137 -0
- package/docker/README.md +50 -0
- package/docker/entrypoint.sh +198 -0
- package/package.json +85 -0
- package/src/contracts/normalize.ts +96 -0
- package/src/contracts/normalizeHtml.ts +98 -0
- package/src/edge/ca.cnf +14 -0
- package/src/edge/ca.crt +22 -0
- package/src/edge/ca.key +28 -0
- package/src/edge/cert.ts +117 -0
- package/src/edge/edgeProxy.ts +390 -0
- package/src/edge/server.cnf +28 -0
- package/src/edge/server.crt +26 -0
- package/src/edge/server.key +28 -0
- package/src/index.ts +67 -0
- package/src/lib/buildSourceBundle.ts +197 -0
- package/src/lib/freePort.ts +33 -0
- package/src/lib/functionBuild.ts +490 -0
- package/src/lib/neonWsProxy.ts +124 -0
- package/src/lib/sourceZipUpload.ts +168 -0
- package/src/lib/stealthLaunch.ts +57 -0
- package/src/lib/storeAutomation.ts +110 -0
- package/src/playwright/baseConfig.ts +120 -0
- package/src/playwright/globalSetup.ts +179 -0
- package/src/playwright/index.ts +11 -0
- package/src/probes/fonts.ts +279 -0
- package/src/probes/mirror.ts +283 -0
- package/src/probes/runProbe.ts +257 -0
- package/src/probes/types.ts +73 -0
- package/src/scripts/addStore.ts +59 -0
- package/src/scripts/buildDockerImage.ts +66 -0
- package/src/scripts/captureAuth.ts +145 -0
- package/src/scripts/captureContracts.ts +675 -0
- package/src/scripts/captureRestContracts.ts +319 -0
- package/src/scripts/checkOperationCoverage.ts +365 -0
- package/src/scripts/cleanupStores.ts +91 -0
- package/src/scripts/createStores.ts +77 -0
- package/src/scripts/deployAppVersion.ts +692 -0
- package/src/scripts/devOnlineBackend.ts +141 -0
- package/src/scripts/installApp.ts +188 -0
- package/src/scripts/listStores.ts +19 -0
- package/src/scripts/runDockerAuth.ts +120 -0
- package/src/scripts/runOffline.ts +577 -0
- package/src/scripts/runOfflineFullTests.ts +1634 -0
- package/src/scripts/runTests.ts +306 -0
- package/src/scripts/runVm.ts +562 -0
- package/src/scripts/runVmAuth.ts +541 -0
- package/src/scripts/runVmScript.ts +282 -0
- package/src/scripts/setupTestDb.ts +71 -0
- package/src/scripts/verifyContracts.ts +310 -0
- package/src/scripts/verifyRestContracts.ts +275 -0
- package/src/vite/onlineConfig.ts +60 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captureContracts.js","sourceRoot":"","sources":["../../src/scripts/captureContracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captureRestContracts.d.ts","sourceRoot":"","sources":["../../src/scripts/captureRestContracts.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* captureRestContracts — REST analog of `captureContracts`.
|
|
4
|
+
*
|
|
5
|
+
* Where the GraphQL capture extracts operations from `#graphql`
|
|
6
|
+
* template literals scattered through source, REST capture reads
|
|
7
|
+
* an explicit MANIFEST that the consuming app maintains at
|
|
8
|
+
* `tests/test-offline/contracts/rest.manifest.json`. Why manifest rather
|
|
9
|
+
* than static analysis:
|
|
10
|
+
*
|
|
11
|
+
* 1. Shopify apps overwhelmingly use the SDK resource-class
|
|
12
|
+
* pattern: `admin.rest.resources.Theme.all({...})`. The
|
|
13
|
+
* method-name → HTTP-path mapping lives inside
|
|
14
|
+
* `@shopify/shopify-api`'s resource classes; reconstructing it
|
|
15
|
+
* from app source requires reproducing that mapping table.
|
|
16
|
+
* The manifest sidesteps the problem — devs declare the wire-
|
|
17
|
+
* shape they actually want pinned.
|
|
18
|
+
* 2. REST endpoints aren't always tied to one call site (apps
|
|
19
|
+
* may build paths dynamically). The manifest is the canonical
|
|
20
|
+
* "this is the REST surface our app depends on" — same role
|
|
21
|
+
* the GraphQL #graphql literals play.
|
|
22
|
+
* 3. The manifest is small (most apps have <20 REST endpoints).
|
|
23
|
+
* Auto-extraction is a polish item; explicit manifest works
|
|
24
|
+
* today.
|
|
25
|
+
*
|
|
26
|
+
* Manifest format:
|
|
27
|
+
*
|
|
28
|
+
* {
|
|
29
|
+
* "operations": [
|
|
30
|
+
* {
|
|
31
|
+
* "name": "listThemes",
|
|
32
|
+
* "method": "GET",
|
|
33
|
+
* "path": "/admin/api/{version}/themes.json",
|
|
34
|
+
* "query": { "role": "main" }
|
|
35
|
+
* },
|
|
36
|
+
* {
|
|
37
|
+
* "name": "getThemeAssets",
|
|
38
|
+
* "method": "GET",
|
|
39
|
+
* "path": "/admin/api/{version}/themes/{themeId}/assets.json",
|
|
40
|
+
* "pathParams": { "themeId": "1" },
|
|
41
|
+
* "query": { "asset[key]": "config/settings_data.json" }
|
|
42
|
+
* }
|
|
43
|
+
* ]
|
|
44
|
+
* }
|
|
45
|
+
*
|
|
46
|
+
* `{version}` is substituted at run-time from the API version the
|
|
47
|
+
* mock serves; `{...}` other path params are substituted from
|
|
48
|
+
* `pathParams`. Bodies (for POST/PUT) live in `body`.
|
|
49
|
+
*
|
|
50
|
+
* Capture executes each entry against offline or live, vendors
|
|
51
|
+
* the response under `tests/test-offline/contracts/admin-rest/<name>.json`
|
|
52
|
+
* (alongside the GraphQL contracts) in the same shape
|
|
53
|
+
* `verifyContracts` consumes.
|
|
54
|
+
*/
|
|
55
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync, statSync, } from 'node:fs';
|
|
56
|
+
import { resolve, relative } from 'node:path';
|
|
57
|
+
import { createAdminApi, } from '@essential-apps/shopify-test-shopify-api';
|
|
58
|
+
import { ShopState } from '@essential-apps/shopify-test-storefront';
|
|
59
|
+
const ADMIN_API_VERSION = '2025-07';
|
|
60
|
+
function parseArgs() {
|
|
61
|
+
const argv = process.argv.slice(2);
|
|
62
|
+
const out = {
|
|
63
|
+
manifestPath: '',
|
|
64
|
+
outDir: '',
|
|
65
|
+
cwd: process.cwd(),
|
|
66
|
+
quiet: false,
|
|
67
|
+
};
|
|
68
|
+
for (let i = 0; i < argv.length; i++) {
|
|
69
|
+
const a = argv[i] ?? '';
|
|
70
|
+
if (a === '--manifest' && i + 1 < argv.length) {
|
|
71
|
+
out.manifestPath = argv[++i] ?? '';
|
|
72
|
+
}
|
|
73
|
+
else if (a === '--out' && i + 1 < argv.length) {
|
|
74
|
+
out.outDir = argv[++i] ?? '';
|
|
75
|
+
}
|
|
76
|
+
else if (a === '--quiet') {
|
|
77
|
+
out.quiet = true;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.error(`unknown arg: ${a}`);
|
|
81
|
+
process.exit(2);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (!out.manifestPath) {
|
|
85
|
+
out.manifestPath = resolve(out.cwd, 'tests/test-offline/contracts/rest.manifest.json');
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
out.manifestPath = resolve(out.cwd, out.manifestPath);
|
|
89
|
+
}
|
|
90
|
+
if (!out.outDir) {
|
|
91
|
+
out.outDir = resolve(out.cwd, 'tests/test-offline/contracts/admin-rest');
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
out.outDir = resolve(out.cwd, out.outDir);
|
|
95
|
+
}
|
|
96
|
+
return out;
|
|
97
|
+
}
|
|
98
|
+
/** Substitute `{x}` placeholders in a path. */
|
|
99
|
+
function fillPath(template, params) {
|
|
100
|
+
return template.replace(/\{([^}]+)\}/g, (_, key) => {
|
|
101
|
+
if (!(key in params)) {
|
|
102
|
+
throw new Error(`path template references {${key}} but no value in pathParams`);
|
|
103
|
+
}
|
|
104
|
+
return encodeURIComponent(params[key] ?? '');
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function appendQuery(path, query) {
|
|
108
|
+
if (!query || Object.keys(query).length === 0)
|
|
109
|
+
return path;
|
|
110
|
+
const params = new URLSearchParams();
|
|
111
|
+
for (const [k, v] of Object.entries(query))
|
|
112
|
+
params.set(k, v);
|
|
113
|
+
const joiner = path.includes('?') ? '&' : '?';
|
|
114
|
+
return `${path}${joiner}${params.toString()}`;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* In-process Hono executor — hits the mock-admin REST handlers
|
|
118
|
+
* directly via `app.request(...)`. No port binding, no auth gate
|
|
119
|
+
* (the mock accepts any X-Shopify-Access-Token).
|
|
120
|
+
*/
|
|
121
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Hono is loosely typed
|
|
122
|
+
function buildOfflineExecutor(state) {
|
|
123
|
+
const app = createAdminApi({ state });
|
|
124
|
+
return async (op) => {
|
|
125
|
+
const filled = fillPath(op.path, {
|
|
126
|
+
version: ADMIN_API_VERSION,
|
|
127
|
+
...(op.pathParams ?? {}),
|
|
128
|
+
});
|
|
129
|
+
const finalPath = appendQuery(filled, op.query);
|
|
130
|
+
const init = {
|
|
131
|
+
method: op.method,
|
|
132
|
+
headers: {
|
|
133
|
+
'Content-Type': 'application/json',
|
|
134
|
+
'X-Shopify-Access-Token': 'mock-access-token',
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
if (op.body !== undefined) {
|
|
138
|
+
init.body = JSON.stringify(op.body);
|
|
139
|
+
}
|
|
140
|
+
const resp = await app.request(finalPath, init);
|
|
141
|
+
const headers = {};
|
|
142
|
+
resp.headers.forEach((v, k) => { headers[k] = v; });
|
|
143
|
+
let body = null;
|
|
144
|
+
try {
|
|
145
|
+
body = await resp.json();
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// Some endpoints return empty/non-JSON. Capture as null.
|
|
149
|
+
}
|
|
150
|
+
return { status: resp.status, headers, body };
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
async function main() {
|
|
154
|
+
const args = parseArgs();
|
|
155
|
+
if (!existsSync(args.manifestPath)) {
|
|
156
|
+
console.error(`[capture-rest] manifest not found at ${relative(args.cwd, args.manifestPath)}\n` +
|
|
157
|
+
`Create one — see docs/CONTRACTS.md for the schema.`);
|
|
158
|
+
process.exit(2);
|
|
159
|
+
}
|
|
160
|
+
let st;
|
|
161
|
+
try {
|
|
162
|
+
st = statSync(args.manifestPath);
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
console.error(`[capture-rest] cannot stat ${args.manifestPath}`);
|
|
166
|
+
process.exit(2);
|
|
167
|
+
}
|
|
168
|
+
if (!st.isFile()) {
|
|
169
|
+
console.error(`[capture-rest] ${args.manifestPath} is not a file`);
|
|
170
|
+
process.exit(2);
|
|
171
|
+
}
|
|
172
|
+
const manifest = JSON.parse(readFileSync(args.manifestPath, 'utf8'));
|
|
173
|
+
if (!manifest.operations || !Array.isArray(manifest.operations)) {
|
|
174
|
+
console.error(`[capture-rest] manifest must have an "operations" array`);
|
|
175
|
+
process.exit(2);
|
|
176
|
+
}
|
|
177
|
+
const state = buildSeededState();
|
|
178
|
+
const executor = buildOfflineExecutor(state);
|
|
179
|
+
mkdirSync(args.outDir, { recursive: true });
|
|
180
|
+
if (!args.quiet) {
|
|
181
|
+
console.log(`[capture-rest] ${manifest.operations.length} operation(s) in manifest`);
|
|
182
|
+
}
|
|
183
|
+
let captured = 0;
|
|
184
|
+
let failed = 0;
|
|
185
|
+
for (const op of manifest.operations) {
|
|
186
|
+
let response;
|
|
187
|
+
try {
|
|
188
|
+
response = await executor(op);
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
failed++;
|
|
192
|
+
writeFileSync(resolve(args.outDir, `${op.name}.json`), JSON.stringify({
|
|
193
|
+
operationName: op.name,
|
|
194
|
+
protocol: 'rest',
|
|
195
|
+
method: op.method,
|
|
196
|
+
path: op.path,
|
|
197
|
+
...(op.pathParams ? { pathParams: op.pathParams } : {}),
|
|
198
|
+
...(op.query ? { query: op.query } : {}),
|
|
199
|
+
...(op.body !== undefined ? { body: op.body } : {}),
|
|
200
|
+
response: { status: 0, body: null },
|
|
201
|
+
capturedFrom: 'offline',
|
|
202
|
+
capturedAt: new Date().toISOString(),
|
|
203
|
+
warning: `executor failed: ${err.message}`,
|
|
204
|
+
}, null, 2) + '\n');
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
const contract = {
|
|
208
|
+
operationName: op.name,
|
|
209
|
+
protocol: 'rest',
|
|
210
|
+
method: op.method,
|
|
211
|
+
path: op.path,
|
|
212
|
+
...(op.pathParams ? { pathParams: op.pathParams } : {}),
|
|
213
|
+
...(op.query ? { query: op.query } : {}),
|
|
214
|
+
...(op.body !== undefined ? { body: op.body } : {}),
|
|
215
|
+
response: { status: response.status, body: response.body },
|
|
216
|
+
capturedFrom: 'offline',
|
|
217
|
+
capturedAt: new Date().toISOString(),
|
|
218
|
+
};
|
|
219
|
+
writeFileSync(resolve(args.outDir, `${op.name}.json`), JSON.stringify(contract, null, 2) + '\n');
|
|
220
|
+
captured++;
|
|
221
|
+
}
|
|
222
|
+
if (!args.quiet) {
|
|
223
|
+
console.log(`[capture-rest] ${captured} captured, ${failed} failed. Output: ${relative(args.cwd, args.outDir)}/`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Deterministic ShopState seed — same baseline as
|
|
228
|
+
* captureContracts.ts (the GraphQL counterpart). The REST handlers
|
|
229
|
+
* in mock-admin already serve sensible defaults regardless of state
|
|
230
|
+
* (themes endpoint returns a stub theme even with empty state); we
|
|
231
|
+
* still construct a state in case future endpoints depend on it.
|
|
232
|
+
*/
|
|
233
|
+
function buildSeededState() {
|
|
234
|
+
return new ShopState({
|
|
235
|
+
shop: {
|
|
236
|
+
domain: 'test-shop.myshopify.com',
|
|
237
|
+
permanent_domain: 'test-shop.myshopify.com',
|
|
238
|
+
},
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
main().catch((err) => {
|
|
242
|
+
console.error(err);
|
|
243
|
+
process.exit(2);
|
|
244
|
+
});
|
|
245
|
+
//# sourceMappingURL=captureRestContracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captureRestContracts.js","sourceRoot":"","sources":["../../src/scripts/captureRestContracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkOperationCoverage.d.ts","sourceRoot":"","sources":["../../src/scripts/checkOperationCoverage.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* checkOperationCoverage — drift check between a consuming app's
|
|
4
|
+
* GraphQL operations and the offline mock's resolver coverage.
|
|
5
|
+
*
|
|
6
|
+
* The problem this catches: production code calls
|
|
7
|
+
* `admin.graphql(\`#graphql query { product(id: $id) { title } }\`)`
|
|
8
|
+
* but the offline mock has no `Query.product` resolver. Real Shopify
|
|
9
|
+
* answers fine — offline returns `null` silently, and the test
|
|
10
|
+
* fails several layers downstream (form sits in a skeleton-loading
|
|
11
|
+
* state, etc.) with no hint that the root cause is a missing mock.
|
|
12
|
+
*
|
|
13
|
+
* The fix this enforces: every Query/Mutation root field referenced
|
|
14
|
+
* by production code MUST have a resolver in the corresponding
|
|
15
|
+
* offline mock's resolver registry. Run this in CI before tests
|
|
16
|
+
* and the gap surfaces at design time, not at test failure time.
|
|
17
|
+
*
|
|
18
|
+
* Single source of truth: the SDL files in
|
|
19
|
+
* `@essential-apps/shopify-test-shopify-api` (which the conformance
|
|
20
|
+
* suite proves match live Shopify) plus the consuming app's own
|
|
21
|
+
* source code. The mock resolver registry is what gets validated —
|
|
22
|
+
* if conformance says Shopify has Field X and your app calls X but
|
|
23
|
+
* we have no X resolver, this surfaces it.
|
|
24
|
+
*
|
|
25
|
+
* Usage (from a consuming app's repo root):
|
|
26
|
+
*
|
|
27
|
+
* npx shopify-test-check-operation-coverage
|
|
28
|
+
* npx shopify-test-check-operation-coverage --api admin
|
|
29
|
+
* npx shopify-test-check-operation-coverage --api storefront
|
|
30
|
+
* npx shopify-test-check-operation-coverage --glob "./app/**\/*.ts"
|
|
31
|
+
*
|
|
32
|
+
* Exit codes:
|
|
33
|
+
* 0 — all referenced root fields have resolvers
|
|
34
|
+
* 1 — gaps found (printed with file:line citations)
|
|
35
|
+
* 2 — bad invocation / parse error
|
|
36
|
+
*
|
|
37
|
+
* Scope of the check: Query/Mutation root fields only. Nested object
|
|
38
|
+
* fields are not checked — graphql-tools defaults to property-access
|
|
39
|
+
* for fields without an explicit resolver, so they're "covered" as
|
|
40
|
+
* long as the parent resolver returned a shape with that key. The
|
|
41
|
+
* silent-null failure mode only affects ROOT resolvers (Query.X
|
|
42
|
+
* with no resolver returns null even though the field is nullable
|
|
43
|
+
* — exactly the bug this catches).
|
|
44
|
+
*
|
|
45
|
+
* Why a CLI vs a Vitest test: this needs to read the consuming
|
|
46
|
+
* app's source (path-dependent) AND the mock's resolvers (package
|
|
47
|
+
* import). A CLI is the natural shape — every consuming app's CI
|
|
48
|
+
* runs it the same way.
|
|
49
|
+
*/
|
|
50
|
+
import { readdirSync, readFileSync, statSync } from 'node:fs';
|
|
51
|
+
import { extname, relative, resolve } from 'node:path';
|
|
52
|
+
import { buildSchema, parse, TypeInfo, visit, visitWithTypeInfo, } from 'graphql';
|
|
53
|
+
import { adminResolvers, storefrontResolvers, loadAdminSdl, loadStorefrontSdl, } from '@essential-apps/shopify-test-shopify-api';
|
|
54
|
+
function parseArgs() {
|
|
55
|
+
const argv = process.argv.slice(2);
|
|
56
|
+
const out = {
|
|
57
|
+
api: 'admin',
|
|
58
|
+
glob: process.env['SHOPIFY_TEST_OPS_GLOB'] ?? './app',
|
|
59
|
+
cwd: process.cwd(),
|
|
60
|
+
json: false,
|
|
61
|
+
};
|
|
62
|
+
for (let i = 0; i < argv.length; i++) {
|
|
63
|
+
const a = argv[i] ?? '';
|
|
64
|
+
if (a === '--api' && i + 1 < argv.length) {
|
|
65
|
+
const next = argv[++i] ?? '';
|
|
66
|
+
if (next !== 'admin' && next !== 'storefront') {
|
|
67
|
+
console.error(`--api must be "admin" or "storefront" (got "${next}")`);
|
|
68
|
+
process.exit(2);
|
|
69
|
+
}
|
|
70
|
+
out.api = next;
|
|
71
|
+
}
|
|
72
|
+
else if (a === '--glob' && i + 1 < argv.length) {
|
|
73
|
+
out.glob = argv[++i] ?? out.glob;
|
|
74
|
+
}
|
|
75
|
+
else if (a === '--json') {
|
|
76
|
+
out.json = true;
|
|
77
|
+
}
|
|
78
|
+
else if (a === '--help' || a === '-h') {
|
|
79
|
+
printUsage();
|
|
80
|
+
process.exit(0);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
console.error(`unknown arg: ${a}`);
|
|
84
|
+
printUsage();
|
|
85
|
+
process.exit(2);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
function printUsage() {
|
|
91
|
+
console.error([
|
|
92
|
+
'usage: shopify-test-check-operation-coverage [--api admin|storefront] [--glob <dir>] [--json]',
|
|
93
|
+
'',
|
|
94
|
+
'Walks every .ts/.tsx/.js/.jsx file under --glob, extracts inline',
|
|
95
|
+
'#graphql template literals, and verifies every Query/Mutation root',
|
|
96
|
+
'field referenced has a resolver in the offline mock registry.',
|
|
97
|
+
'',
|
|
98
|
+
'--api which mock to check (default: admin)',
|
|
99
|
+
'--glob directory to scan (default: ./app)',
|
|
100
|
+
'--json emit a structured JSON report on stdout',
|
|
101
|
+
].join('\n'));
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Walk a directory recursively, returning every file whose extension
|
|
105
|
+
* matches `.ts | .tsx | .js | .jsx`. We don't depend on `glob` — the
|
|
106
|
+
* extra dep would be overkill for "walk one tree and filter".
|
|
107
|
+
*/
|
|
108
|
+
function* walkSources(root) {
|
|
109
|
+
let entries;
|
|
110
|
+
try {
|
|
111
|
+
entries = readdirSync(root);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
for (const name of entries) {
|
|
117
|
+
if (name === 'node_modules' || name === 'dist' || name === '.git')
|
|
118
|
+
continue;
|
|
119
|
+
const full = resolve(root, name);
|
|
120
|
+
let st;
|
|
121
|
+
try {
|
|
122
|
+
st = statSync(full);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (st.isDirectory()) {
|
|
128
|
+
yield* walkSources(full);
|
|
129
|
+
}
|
|
130
|
+
else if (st.isFile()) {
|
|
131
|
+
const ext = extname(name);
|
|
132
|
+
if (ext === '.ts' || ext === '.tsx' || ext === '.js' || ext === '.jsx') {
|
|
133
|
+
yield full;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Extract every `#graphql ...` tagged template literal from a source
|
|
140
|
+
* file. We accept three common conventions:
|
|
141
|
+
*
|
|
142
|
+
* admin.graphql(`#graphql ...`) // shopify-app-remix
|
|
143
|
+
* gql`#graphql ...` // codegen tag
|
|
144
|
+
* `#graphql ...` // raw template
|
|
145
|
+
*
|
|
146
|
+
* Real-world false negatives we accept: operations not tagged
|
|
147
|
+
* `#graphql`, operations split across template-string interpolation,
|
|
148
|
+
* dynamic strings built at runtime. Those bypass codegen too, so
|
|
149
|
+
* the consuming app is already non-conformant — the warning is OK.
|
|
150
|
+
*/
|
|
151
|
+
function extractOperations(file, content) {
|
|
152
|
+
const ops = [];
|
|
153
|
+
// Match a backtick-delimited string whose FIRST non-whitespace token
|
|
154
|
+
// is `#graphql`. The `[^\`]*` keeps it simple — operations with
|
|
155
|
+
// backticks inside string values aren't valid GraphQL, so this is
|
|
156
|
+
// safe in practice.
|
|
157
|
+
const regex = /`\s*#graphql\b([^`]*)`/g;
|
|
158
|
+
let m;
|
|
159
|
+
while ((m = regex.exec(content)) !== null) {
|
|
160
|
+
const line = content.slice(0, m.index).split('\n').length;
|
|
161
|
+
ops.push({ file, line, source: m[1] ?? '' });
|
|
162
|
+
}
|
|
163
|
+
return ops;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Walk a GraphQL document and return every (Type, Field) pair the
|
|
167
|
+
* selection set touches. We use `TypeInfo` to track the parent type
|
|
168
|
+
* at each `Field` visit, which is the only way to know the
|
|
169
|
+
* abstract-type a field belongs to without re-implementing the
|
|
170
|
+
* resolver lookup logic.
|
|
171
|
+
*/
|
|
172
|
+
function collectFieldRefs(source, schema, file, line, out, parseErrors) {
|
|
173
|
+
let doc;
|
|
174
|
+
try {
|
|
175
|
+
doc = parse(source);
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
parseErrors.push({ file, line, message: err.message });
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const typeInfo = new TypeInfo(schema);
|
|
182
|
+
visit(doc, visitWithTypeInfo(typeInfo, {
|
|
183
|
+
Field() {
|
|
184
|
+
const parentType = typeInfo.getParentType();
|
|
185
|
+
const fieldDef = typeInfo.getFieldDef();
|
|
186
|
+
if (!parentType || !fieldDef)
|
|
187
|
+
return;
|
|
188
|
+
const key = `${parentType.name}.${fieldDef.name}`;
|
|
189
|
+
if (!out.has(key)) {
|
|
190
|
+
out.set(key, {
|
|
191
|
+
type: parentType.name,
|
|
192
|
+
field: fieldDef.name,
|
|
193
|
+
origin: { file, line },
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
}));
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Resolver registries are `{ [TypeName]: { [FieldName]: ResolverFn } }`.
|
|
201
|
+
* Build a flat set of "TypeName.FieldName" strings for fast lookup.
|
|
202
|
+
*/
|
|
203
|
+
function flattenResolvers(resolvers) {
|
|
204
|
+
const out = new Set();
|
|
205
|
+
for (const [typeName, fields] of Object.entries(resolvers)) {
|
|
206
|
+
if (!fields || typeof fields !== 'object')
|
|
207
|
+
continue;
|
|
208
|
+
for (const fieldName of Object.keys(fields)) {
|
|
209
|
+
out.add(`${typeName}.${fieldName}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return out;
|
|
213
|
+
}
|
|
214
|
+
async function main() {
|
|
215
|
+
const args = parseArgs();
|
|
216
|
+
const sdl = args.api === 'admin' ? loadAdminSdl() : loadStorefrontSdl();
|
|
217
|
+
const schema = buildSchema(sdl);
|
|
218
|
+
const sourceDir = resolve(args.cwd, args.glob);
|
|
219
|
+
const files = Array.from(walkSources(sourceDir));
|
|
220
|
+
if (files.length === 0) {
|
|
221
|
+
console.error(`[coverage] no source files under ${sourceDir}`);
|
|
222
|
+
process.exit(2);
|
|
223
|
+
}
|
|
224
|
+
const refs = new Map();
|
|
225
|
+
const parseErrors = [];
|
|
226
|
+
let opCount = 0;
|
|
227
|
+
for (const f of files) {
|
|
228
|
+
const content = readFileSync(f, 'utf8');
|
|
229
|
+
for (const op of extractOperations(f, content)) {
|
|
230
|
+
opCount += 1;
|
|
231
|
+
collectFieldRefs(op.source, schema, op.file, op.line, refs, parseErrors);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const resolvers = args.api === 'admin'
|
|
235
|
+
? adminResolvers
|
|
236
|
+
: storefrontResolvers;
|
|
237
|
+
const implemented = flattenResolvers(resolvers);
|
|
238
|
+
// Root types in the Shopify schemas: Admin's Query type is named
|
|
239
|
+
// `QueryRoot` and Mutation is `Mutation`; Storefront uses `QueryRoot`
|
|
240
|
+
// / `MutationRoot`. We get the actual names from the schema.
|
|
241
|
+
const queryRoot = schema.getQueryType()?.name;
|
|
242
|
+
const mutationRoot = schema.getMutationType()?.name;
|
|
243
|
+
const rootTypes = new Set([
|
|
244
|
+
...(queryRoot ? [queryRoot] : []),
|
|
245
|
+
...(mutationRoot ? [mutationRoot] : []),
|
|
246
|
+
]);
|
|
247
|
+
const uncoveredRoot = [];
|
|
248
|
+
for (const ref of refs.values()) {
|
|
249
|
+
if (!rootTypes.has(ref.type))
|
|
250
|
+
continue; // ignore nested fields
|
|
251
|
+
if (!implemented.has(`${ref.type}.${ref.field}`)) {
|
|
252
|
+
uncoveredRoot.push(ref);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
uncoveredRoot.sort((a, b) => `${a.type}.${a.field}`.localeCompare(`${b.type}.${b.field}`));
|
|
256
|
+
if (args.json) {
|
|
257
|
+
process.stdout.write(JSON.stringify({
|
|
258
|
+
api: args.api,
|
|
259
|
+
filesScanned: files.length,
|
|
260
|
+
opsFound: opCount,
|
|
261
|
+
rootFieldsReferenced: [...refs.values()].filter((r) => rootTypes.has(r.type)).length,
|
|
262
|
+
rootFieldsImplemented: [...implemented].filter((k) => {
|
|
263
|
+
const root = k.split('.')[0];
|
|
264
|
+
return root !== undefined && rootTypes.has(root);
|
|
265
|
+
}).length,
|
|
266
|
+
uncoveredRoot: uncoveredRoot.map((u) => ({
|
|
267
|
+
type: u.type,
|
|
268
|
+
field: u.field,
|
|
269
|
+
origin: u.origin,
|
|
270
|
+
})),
|
|
271
|
+
parseErrors,
|
|
272
|
+
}, null, 2));
|
|
273
|
+
process.stdout.write('\n');
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
const cwd = args.cwd;
|
|
277
|
+
console.log(`[coverage] api=${args.api}, scanned ${files.length} file(s), found ${opCount} operation(s)`);
|
|
278
|
+
if (parseErrors.length > 0) {
|
|
279
|
+
console.log(`[coverage] ${parseErrors.length} parse error(s):`);
|
|
280
|
+
for (const e of parseErrors) {
|
|
281
|
+
console.log(` ! ${relative(cwd, e.file)}:${e.line} — ${e.message}`);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
if (uncoveredRoot.length === 0) {
|
|
285
|
+
console.log('[coverage] ✓ every referenced root field has a resolver');
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
console.log(`[coverage] ✗ ${uncoveredRoot.length} uncovered root field(s):`);
|
|
289
|
+
for (const u of uncoveredRoot) {
|
|
290
|
+
console.log(` ${u.type}.${u.field} (${relative(cwd, u.origin.file)}:${u.origin.line})`);
|
|
291
|
+
}
|
|
292
|
+
console.log('');
|
|
293
|
+
console.log(`Fix: add a resolver in @essential-apps/shopify-test-shopify-api/src/${args.api}/resolvers/<file>.ts`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
process.exit(uncoveredRoot.length === 0 ? 0 : 1);
|
|
297
|
+
}
|
|
298
|
+
main().catch((err) => {
|
|
299
|
+
console.error(err);
|
|
300
|
+
process.exit(2);
|
|
301
|
+
});
|
|
302
|
+
//# sourceMappingURL=checkOperationCoverage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkOperationCoverage.js","sourceRoot":"","sources":["../../src/scripts/checkOperationCoverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanupStores.d.ts","sourceRoot":"","sources":["../../src/scripts/cleanupStores.ts"],"names":[],"mappings":""}
|