@commercetools/cli-topic-integration-layer 0.6.0 → 0.7.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/README.md +1 -1
- package/dist/commands/integration-layer/allowlist/add.js +3 -3
- package/dist/commands/integration-layer/allowlist/add.js.map +1 -1
- package/dist/commands/integration-layer/allowlist/list.js +2 -2
- package/dist/commands/integration-layer/allowlist/list.js.map +1 -1
- package/dist/commands/integration-layer/allowlist/remove.js +3 -3
- package/dist/commands/integration-layer/allowlist/remove.js.map +1 -1
- package/dist/commands/integration-layer/allowlist/set.js +3 -3
- package/dist/commands/integration-layer/allowlist/set.js.map +1 -1
- package/dist/commands/integration-layer/config/get.js +2 -2
- package/dist/commands/integration-layer/config/get.js.map +1 -1
- package/dist/commands/integration-layer/config/list.js +2 -2
- package/dist/commands/integration-layer/config/list.js.map +1 -1
- package/dist/commands/integration-layer/config/set.js +2 -2
- package/dist/commands/integration-layer/config/set.js.map +1 -1
- package/dist/commands/integration-layer/config/unset.js +2 -2
- package/dist/commands/integration-layer/config/unset.js.map +1 -1
- package/dist/commands/integration-layer/explore.js +5 -5
- package/dist/commands/integration-layer/explore.js.map +1 -1
- package/dist/commands/integration-layer/extension/build.js +4 -1
- package/dist/commands/integration-layer/extension/build.js.map +1 -1
- package/dist/commands/integration-layer/extension/create-api-extension-input.d.ts +12 -0
- package/dist/commands/integration-layer/extension/create-api-extension-input.js +49 -0
- package/dist/commands/integration-layer/extension/create-api-extension-input.js.map +1 -0
- package/dist/commands/integration-layer/extension/delete.js +2 -2
- package/dist/commands/integration-layer/extension/delete.js.map +1 -1
- package/dist/commands/integration-layer/extension/invoke-api-extension.d.ts +19 -0
- package/dist/commands/integration-layer/extension/invoke-api-extension.js +140 -0
- package/dist/commands/integration-layer/extension/invoke-api-extension.js.map +1 -0
- package/dist/commands/integration-layer/extension/push.js +8 -5
- package/dist/commands/integration-layer/extension/push.js.map +1 -1
- package/dist/commands/integration-layer/extension/serve.d.ts +29 -0
- package/dist/commands/integration-layer/extension/serve.js +81 -30
- package/dist/commands/integration-layer/extension/serve.js.map +1 -1
- package/dist/commands/integration-layer/extension/status.js +2 -2
- package/dist/commands/integration-layer/extension/status.js.map +1 -1
- package/dist/commands/integration-layer/extension/validate.js +6 -3
- package/dist/commands/integration-layer/extension/validate.js.map +1 -1
- package/dist/commands/integration-layer/schema/fetch.js +2 -2
- package/dist/commands/integration-layer/schema/fetch.js.map +1 -1
- package/dist/hooks/authentication.d.ts +3 -0
- package/dist/hooks/authentication.js +33 -0
- package/dist/hooks/authentication.js.map +1 -0
- package/dist/lib/auth.d.ts +5 -0
- package/dist/lib/auth.js +41 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/awaitBundleState.d.ts +2 -2
- package/dist/lib/awaitBundleState.js +2 -2
- package/dist/lib/awaitBundleState.js.map +1 -1
- package/dist/lib/base.d.ts +12 -21
- package/dist/lib/base.js +27 -76
- package/dist/lib/base.js.map +1 -1
- package/dist/lib/extensionConfig.d.ts +17 -0
- package/dist/lib/extensionConfig.js +36 -0
- package/dist/lib/extensionConfig.js.map +1 -0
- package/dist/lib/ilClient.d.ts +16 -10
- package/dist/lib/ilClient.js +28 -31
- package/dist/lib/ilClient.js.map +1 -1
- package/dist/lib/loadLocalEnv.d.ts +49 -0
- package/dist/lib/loadLocalEnv.js +112 -0
- package/dist/lib/loadLocalEnv.js.map +1 -0
- package/dist/lib/tooling/compose.js +2 -2
- package/dist/lib/tooling/compose.js.map +1 -1
- package/dist/lib/tooling/extensionInputSampleObj.d.ts +8 -0
- package/dist/lib/tooling/extensionInputSampleObj.js +178 -0
- package/dist/lib/tooling/extensionInputSampleObj.js.map +1 -0
- package/dist/lib/tooling/extensions.d.ts +22 -5
- package/dist/lib/tooling/extensions.js +30 -8
- package/dist/lib/tooling/extensions.js.map +1 -1
- package/dist/lib/tooling/generateExtensionInputSample.d.ts +22 -0
- package/dist/lib/tooling/generateExtensionInputSample.js +36 -0
- package/dist/lib/tooling/generateExtensionInputSample.js.map +1 -0
- package/package.json +6 -3
- package/dist/commands/integration-layer/extension/invoke.d.ts +0 -14
- package/dist/commands/integration-layer/extension/invoke.js +0 -94
- package/dist/commands/integration-layer/extension/invoke.js.map +0 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** Where a command's dotenv file is, and whether a missing file is an error. */
|
|
2
|
+
export interface EnvFileLocation {
|
|
3
|
+
/** Absolute path to the dotenv file. */
|
|
4
|
+
path: string;
|
|
5
|
+
/** True when an explicit `--env-file` was given, so a missing file must fail loudly. */
|
|
6
|
+
required: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Peek argv for `--env-file <path>` / `--env-file=<path>` before oclif parses flags.
|
|
10
|
+
* Must run in `init()` so values (e.g. `INTEGRATION_LAYER_URL`, `EXTENSION_CONFIG_*`)
|
|
11
|
+
* are in `process.env` when flag `env:` bindings resolve.
|
|
12
|
+
*/
|
|
13
|
+
export declare function envFilePathFromArgv(argv?: readonly string[]): string | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Resolve which dotenv file a command should read: an explicit `--env-file <path>`
|
|
16
|
+
* (required — a missing one is an error) or, failing that, `.env` in the cwd (optional).
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveEnvFileLocation(options?: {
|
|
19
|
+
argv?: readonly string[];
|
|
20
|
+
cwd?: string;
|
|
21
|
+
}): EnvFileLocation;
|
|
22
|
+
/**
|
|
23
|
+
* Load a dotenv file into `process.env` without overriding existing keys
|
|
24
|
+
* (Node's `process.loadEnvFile` semantics).
|
|
25
|
+
*
|
|
26
|
+
* - `--env-file <path>` (from argv): required; a missing file fails loudly.
|
|
27
|
+
* - otherwise `.env` in cwd: optional; a missing file is a no-op.
|
|
28
|
+
*
|
|
29
|
+
* Returns the absolute path that was loaded, or `undefined` when nothing was loaded.
|
|
30
|
+
*/
|
|
31
|
+
export declare function loadLocalEnv(options?: {
|
|
32
|
+
argv?: readonly string[];
|
|
33
|
+
cwd?: string;
|
|
34
|
+
}): string | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Parse a dotenv file into a plain object WITHOUT touching `process.env`. Returns an
|
|
37
|
+
* empty object when the file is absent — the caller decides whether that's an error.
|
|
38
|
+
* Used by the `serve` hot-reload path, which needs the file's current values on each
|
|
39
|
+
* change (unlike {@link loadLocalEnv}, whose "existing env wins" load can't re-apply an
|
|
40
|
+
* edited value already present in `process.env`).
|
|
41
|
+
*/
|
|
42
|
+
export declare function parseEnvFile(filePath: string): Record<string, string>;
|
|
43
|
+
/**
|
|
44
|
+
* Watch a dotenv file for changes and invoke `onChange` (debounced) after each write.
|
|
45
|
+
* Watches the containing DIRECTORY, not the file, so it survives editors that save via
|
|
46
|
+
* atomic rename (which swaps the inode and would silently kill a file-level watch) and
|
|
47
|
+
* catches the file being created after the server starts. Returns a stop function.
|
|
48
|
+
*/
|
|
49
|
+
export declare function watchEnvFile(filePath: string, onChange: () => void): () => void;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { watch } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { parseEnv } from "node:util";
|
|
4
|
+
import { readFileSync } from "node:fs";
|
|
5
|
+
const ENV_FILE_FLAG = "--env-file";
|
|
6
|
+
/**
|
|
7
|
+
* Peek argv for `--env-file <path>` / `--env-file=<path>` before oclif parses flags.
|
|
8
|
+
* Must run in `init()` so values (e.g. `INTEGRATION_LAYER_URL`, `EXTENSION_CONFIG_*`)
|
|
9
|
+
* are in `process.env` when flag `env:` bindings resolve.
|
|
10
|
+
*/
|
|
11
|
+
export function envFilePathFromArgv(argv = process.argv) {
|
|
12
|
+
for (let i = 0; i < argv.length; i++) {
|
|
13
|
+
const arg = argv[i];
|
|
14
|
+
if (arg === ENV_FILE_FLAG) {
|
|
15
|
+
const next = argv[i + 1];
|
|
16
|
+
if (!next || next.startsWith("-")) {
|
|
17
|
+
throw new Error(`${ENV_FILE_FLAG} requires a path`);
|
|
18
|
+
}
|
|
19
|
+
return next;
|
|
20
|
+
}
|
|
21
|
+
if (arg.startsWith(`${ENV_FILE_FLAG}=`)) {
|
|
22
|
+
const value = arg.slice(ENV_FILE_FLAG.length + 1);
|
|
23
|
+
if (!value)
|
|
24
|
+
throw new Error(`${ENV_FILE_FLAG} requires a path`);
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Resolve which dotenv file a command should read: an explicit `--env-file <path>`
|
|
32
|
+
* (required — a missing one is an error) or, failing that, `.env` in the cwd (optional).
|
|
33
|
+
*/
|
|
34
|
+
export function resolveEnvFileLocation(options) {
|
|
35
|
+
const cwd = options?.cwd ?? process.cwd();
|
|
36
|
+
const fromArgv = envFilePathFromArgv(options?.argv ?? process.argv);
|
|
37
|
+
return {
|
|
38
|
+
path: path.resolve(cwd, fromArgv ?? ".env"),
|
|
39
|
+
required: fromArgv !== undefined,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Load a dotenv file into `process.env` without overriding existing keys
|
|
44
|
+
* (Node's `process.loadEnvFile` semantics).
|
|
45
|
+
*
|
|
46
|
+
* - `--env-file <path>` (from argv): required; a missing file fails loudly.
|
|
47
|
+
* - otherwise `.env` in cwd: optional; a missing file is a no-op.
|
|
48
|
+
*
|
|
49
|
+
* Returns the absolute path that was loaded, or `undefined` when nothing was loaded.
|
|
50
|
+
*/
|
|
51
|
+
export function loadLocalEnv(options) {
|
|
52
|
+
const { path: filePath, required } = resolveEnvFileLocation(options);
|
|
53
|
+
try {
|
|
54
|
+
process.loadEnvFile(filePath);
|
|
55
|
+
return filePath;
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
const code = err.code;
|
|
59
|
+
if (!required && code === "ENOENT")
|
|
60
|
+
return undefined;
|
|
61
|
+
throw err;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Parse a dotenv file into a plain object WITHOUT touching `process.env`. Returns an
|
|
66
|
+
* empty object when the file is absent — the caller decides whether that's an error.
|
|
67
|
+
* Used by the `serve` hot-reload path, which needs the file's current values on each
|
|
68
|
+
* change (unlike {@link loadLocalEnv}, whose "existing env wins" load can't re-apply an
|
|
69
|
+
* edited value already present in `process.env`).
|
|
70
|
+
*/
|
|
71
|
+
export function parseEnvFile(filePath) {
|
|
72
|
+
let source;
|
|
73
|
+
try {
|
|
74
|
+
source = readFileSync(filePath, "utf8");
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
if (err.code === "ENOENT")
|
|
78
|
+
return {};
|
|
79
|
+
throw err;
|
|
80
|
+
}
|
|
81
|
+
return parseEnv(source);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Watch a dotenv file for changes and invoke `onChange` (debounced) after each write.
|
|
85
|
+
* Watches the containing DIRECTORY, not the file, so it survives editors that save via
|
|
86
|
+
* atomic rename (which swaps the inode and would silently kill a file-level watch) and
|
|
87
|
+
* catches the file being created after the server starts. Returns a stop function.
|
|
88
|
+
*/
|
|
89
|
+
export function watchEnvFile(filePath, onChange) {
|
|
90
|
+
const dir = path.dirname(filePath);
|
|
91
|
+
const base = path.basename(filePath);
|
|
92
|
+
let timer;
|
|
93
|
+
let watcher;
|
|
94
|
+
try {
|
|
95
|
+
watcher = watch(dir, (_event, changed) => {
|
|
96
|
+
// `changed` is null on some platforms; fall back to firing on any dir event.
|
|
97
|
+
if (changed !== null && changed !== base)
|
|
98
|
+
return;
|
|
99
|
+
clearTimeout(timer);
|
|
100
|
+
timer = setTimeout(onChange, 50);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// A missing/unwatchable directory just means no hot-reload; not fatal.
|
|
105
|
+
return () => { };
|
|
106
|
+
}
|
|
107
|
+
return () => {
|
|
108
|
+
clearTimeout(timer);
|
|
109
|
+
watcher.close();
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=loadLocalEnv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadLocalEnv.js","sourceRoot":"","sources":["../../src/lib/loadLocalEnv.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
// `composeWithIntegrationLayer` below is the low-level half. Fetching the project's
|
|
5
5
|
// subgraph SDL is a plain authenticated HTTP call, so it lives separately in
|
|
6
|
-
// `../ilClient.ts`, parameterised by (baseUrl, projectKey,
|
|
7
|
-
// layer supplying the
|
|
6
|
+
// `../ilClient.ts`, parameterised by (baseUrl, projectKey, authFetch) with the command
|
|
7
|
+
// layer supplying the authenticated fetch.
|
|
8
8
|
import { parse, printSchema } from "graphql";
|
|
9
9
|
import { composeServices } from "@apollo/composition";
|
|
10
10
|
/** The subgraph names the Commerce Integration Layer composes under — matched here so the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../../src/lib/tooling/compose.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,+FAA+F;AAC/F,EAAE;AACF,oFAAoF;AACpF,6EAA6E;AAC7E,
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../../src/lib/tooling/compose.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,+FAA+F;AAC/F,EAAE;AACF,oFAAoF;AACpF,6EAA6E;AAC7E,uFAAuF;AACvF,2CAA2C;AAE3C,OAAO,EAAE,KAAK,EAAE,WAAW,EAAsB,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;mDAEmD;AACnD,MAAM,CAAC,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAc9C;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CACzC,mBAA2B,EAC3B,YAAoB,EACpB,IAA2D;IAE3D,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG;YACT,EAAE,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAE;YACxG,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE;SACnF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,6BAA8B,GAAa,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IACxF,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,gFAAgF;IAChF,6EAA6E;IAC7E,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,iBAAiB,EAAE,CAAC;IAClE,OAAO;QACL,EAAE,EAAE,IAAI;QACR,SAAS;QACT,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ExtensionResourceTypeId } from "@commercetools/platform-sdk";
|
|
2
|
+
export interface SampleContext {
|
|
3
|
+
resourceTypeId: ExtensionResourceTypeId;
|
|
4
|
+
id: string;
|
|
5
|
+
version: number;
|
|
6
|
+
}
|
|
7
|
+
/** Build the expanded `resource.obj` for an API-Extension resource type. */
|
|
8
|
+
export declare function sampleExtensionResourceObj(resourceTypeId: ExtensionResourceTypeId, ctx: SampleContext): Record<string, unknown>;
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { AuthenticationModeValues, BusinessUnitTypeValues, CartOriginValues, CartStateValues, ExtensionResourceTypeIdValues, InventoryModeValues, OrderStateValues, PaymentMethodStatusValues, QuoteRequestStateValues, QuoteStateValues, RoundingModeValues, ShippingModeValues, StagedQuoteStateValues, TaxCalculationModeValues, TaxModeValues, } from "@commercetools/platform-sdk";
|
|
2
|
+
const SAMPLE = {
|
|
3
|
+
productId: "sample-product-id",
|
|
4
|
+
productTypeId: "sample-product-type-id",
|
|
5
|
+
lineItemId: "sample-line-item-id",
|
|
6
|
+
cartId: "sample-cart-id",
|
|
7
|
+
sku: "SAMPLE-SKU",
|
|
8
|
+
currency: "EUR",
|
|
9
|
+
email: "sample.customer@example.com",
|
|
10
|
+
quoteRequestId: "sample-quote-request-id",
|
|
11
|
+
stagedQuoteId: "sample-staged-quote-id",
|
|
12
|
+
timestamp: "2024-01-01T00:00:00.000Z",
|
|
13
|
+
};
|
|
14
|
+
function sampleMoney(centAmount = 1000) {
|
|
15
|
+
return {
|
|
16
|
+
type: "centPrecision",
|
|
17
|
+
currencyCode: SAMPLE.currency,
|
|
18
|
+
centAmount,
|
|
19
|
+
fractionDigits: 2,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function sampleAddress(id = "sample-address-id") {
|
|
23
|
+
return {
|
|
24
|
+
id,
|
|
25
|
+
country: "DE",
|
|
26
|
+
city: "Berlin",
|
|
27
|
+
streetName: "Sample Street",
|
|
28
|
+
streetNumber: "1",
|
|
29
|
+
postalCode: "10115",
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function sampleProductTypeRef() {
|
|
33
|
+
return { typeId: "product-type", id: SAMPLE.productTypeId };
|
|
34
|
+
}
|
|
35
|
+
function sampleCartLineItem() {
|
|
36
|
+
return {
|
|
37
|
+
id: SAMPLE.lineItemId,
|
|
38
|
+
productId: SAMPLE.productId,
|
|
39
|
+
productType: sampleProductTypeRef(),
|
|
40
|
+
name: { en: "Sample product" },
|
|
41
|
+
quantity: 1,
|
|
42
|
+
variant: { id: 1, sku: SAMPLE.sku },
|
|
43
|
+
price: { value: sampleMoney() },
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function sampleShoppingListLineItem() {
|
|
47
|
+
return {
|
|
48
|
+
id: SAMPLE.lineItemId,
|
|
49
|
+
addedAt: SAMPLE.timestamp,
|
|
50
|
+
productId: SAMPLE.productId,
|
|
51
|
+
productType: sampleProductTypeRef(),
|
|
52
|
+
name: { en: "Sample product" },
|
|
53
|
+
published: true,
|
|
54
|
+
quantity: 1,
|
|
55
|
+
variant: { id: 1, sku: SAMPLE.sku },
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function sampleCartFields(ctx) {
|
|
59
|
+
return {
|
|
60
|
+
id: ctx.id,
|
|
61
|
+
version: ctx.version,
|
|
62
|
+
currency: SAMPLE.currency,
|
|
63
|
+
lineItems: [sampleCartLineItem()],
|
|
64
|
+
customLineItems: [],
|
|
65
|
+
totalPrice: sampleMoney(),
|
|
66
|
+
taxMode: TaxModeValues.Platform,
|
|
67
|
+
priceRoundingMode: RoundingModeValues.HalfEven,
|
|
68
|
+
taxRoundingMode: RoundingModeValues.HalfEven,
|
|
69
|
+
taxCalculationMode: TaxCalculationModeValues.LineItemLevel,
|
|
70
|
+
inventoryMode: InventoryModeValues.None,
|
|
71
|
+
cartState: CartStateValues.Active,
|
|
72
|
+
shippingMode: ShippingModeValues.Single,
|
|
73
|
+
shipping: [],
|
|
74
|
+
discountCodes: [],
|
|
75
|
+
directDiscounts: [],
|
|
76
|
+
refusedGifts: [],
|
|
77
|
+
origin: CartOriginValues.Customer,
|
|
78
|
+
itemShippingAddresses: [],
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const sampleObjBuilders = {
|
|
82
|
+
[ExtensionResourceTypeIdValues.Cart]: sampleCartFields,
|
|
83
|
+
[ExtensionResourceTypeIdValues.Order]: (ctx) => ({
|
|
84
|
+
...sampleCartFields(ctx),
|
|
85
|
+
orderNumber: "SAMPLE-ORDER-001",
|
|
86
|
+
orderState: OrderStateValues.Open,
|
|
87
|
+
}),
|
|
88
|
+
[ExtensionResourceTypeIdValues.Payment]: (ctx) => ({
|
|
89
|
+
id: ctx.id,
|
|
90
|
+
version: ctx.version,
|
|
91
|
+
amountPlanned: sampleMoney(),
|
|
92
|
+
paymentMethodInfo: {
|
|
93
|
+
paymentInterface: "Sample",
|
|
94
|
+
method: "card",
|
|
95
|
+
},
|
|
96
|
+
paymentStatus: {
|
|
97
|
+
interfaceCode: "Pending",
|
|
98
|
+
interfaceText: "Pending",
|
|
99
|
+
},
|
|
100
|
+
}),
|
|
101
|
+
[ExtensionResourceTypeIdValues.PaymentMethod]: (ctx) => ({
|
|
102
|
+
id: ctx.id,
|
|
103
|
+
version: ctx.version,
|
|
104
|
+
key: "sample-payment-method",
|
|
105
|
+
name: { en: "Sample card" },
|
|
106
|
+
paymentInterface: "Sample",
|
|
107
|
+
paymentMethodStatus: PaymentMethodStatusValues.Active,
|
|
108
|
+
default: false,
|
|
109
|
+
}),
|
|
110
|
+
[ExtensionResourceTypeIdValues.Customer]: (ctx) => ({
|
|
111
|
+
id: ctx.id,
|
|
112
|
+
version: ctx.version,
|
|
113
|
+
email: SAMPLE.email,
|
|
114
|
+
firstName: "Sample",
|
|
115
|
+
lastName: "Customer",
|
|
116
|
+
authenticationMode: AuthenticationModeValues.Password,
|
|
117
|
+
addresses: [sampleAddress()],
|
|
118
|
+
}),
|
|
119
|
+
[ExtensionResourceTypeIdValues.CustomerGroup]: (ctx) => ({
|
|
120
|
+
id: ctx.id,
|
|
121
|
+
version: ctx.version,
|
|
122
|
+
key: "sample-customer-group",
|
|
123
|
+
name: "Sample customer group",
|
|
124
|
+
}),
|
|
125
|
+
[ExtensionResourceTypeIdValues.QuoteRequest]: (ctx) => ({
|
|
126
|
+
id: ctx.id,
|
|
127
|
+
version: ctx.version,
|
|
128
|
+
quoteRequestState: QuoteRequestStateValues.Submitted,
|
|
129
|
+
comment: "Sample quote request",
|
|
130
|
+
lineItems: [sampleCartLineItem()],
|
|
131
|
+
}),
|
|
132
|
+
[ExtensionResourceTypeIdValues.StagedQuote]: (ctx) => ({
|
|
133
|
+
id: ctx.id,
|
|
134
|
+
version: ctx.version,
|
|
135
|
+
stagedQuoteState: StagedQuoteStateValues.InProgress,
|
|
136
|
+
quoteRequest: {
|
|
137
|
+
typeId: ExtensionResourceTypeIdValues.QuoteRequest,
|
|
138
|
+
id: SAMPLE.quoteRequestId,
|
|
139
|
+
},
|
|
140
|
+
quotationCart: {
|
|
141
|
+
typeId: ExtensionResourceTypeIdValues.Cart,
|
|
142
|
+
id: SAMPLE.cartId,
|
|
143
|
+
},
|
|
144
|
+
}),
|
|
145
|
+
[ExtensionResourceTypeIdValues.Quote]: (ctx) => ({
|
|
146
|
+
id: ctx.id,
|
|
147
|
+
version: ctx.version,
|
|
148
|
+
quoteState: QuoteStateValues.Pending,
|
|
149
|
+
stagedQuote: {
|
|
150
|
+
typeId: ExtensionResourceTypeIdValues.StagedQuote,
|
|
151
|
+
id: SAMPLE.stagedQuoteId,
|
|
152
|
+
},
|
|
153
|
+
lineItems: [sampleCartLineItem()],
|
|
154
|
+
totalPrice: sampleMoney(),
|
|
155
|
+
}),
|
|
156
|
+
[ExtensionResourceTypeIdValues.BusinessUnit]: (ctx) => ({
|
|
157
|
+
id: ctx.id,
|
|
158
|
+
version: ctx.version,
|
|
159
|
+
key: "sample-business-unit",
|
|
160
|
+
name: "Sample business unit",
|
|
161
|
+
unitType: BusinessUnitTypeValues.Company,
|
|
162
|
+
}),
|
|
163
|
+
[ExtensionResourceTypeIdValues.ShoppingList]: (ctx) => ({
|
|
164
|
+
id: ctx.id,
|
|
165
|
+
version: ctx.version,
|
|
166
|
+
name: { en: "Sample shopping list" },
|
|
167
|
+
lineItems: [sampleShoppingListLineItem()],
|
|
168
|
+
}),
|
|
169
|
+
};
|
|
170
|
+
/** Build the expanded `resource.obj` for an API-Extension resource type. */
|
|
171
|
+
export function sampleExtensionResourceObj(resourceTypeId, ctx) {
|
|
172
|
+
const build = sampleObjBuilders[resourceTypeId];
|
|
173
|
+
if (!build) {
|
|
174
|
+
throw new Error(`no sample builder registered for resource type '${resourceTypeId}'`);
|
|
175
|
+
}
|
|
176
|
+
return build(ctx);
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=extensionInputSampleObj.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensionInputSampleObj.js","sourceRoot":"","sources":["../../../src/lib/tooling/extensionInputSampleObj.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,33 @@
|
|
|
1
1
|
import { type GraphQLSchema } from "graphql";
|
|
2
|
+
/** The per-package entry the CLI expects under each `extensions/*` when nothing overrides it. */
|
|
3
|
+
export declare const DEFAULT_ENTRY_SEGMENT: string;
|
|
4
|
+
/**
|
|
5
|
+
* Reduce an `--entry` flag value to the path *within each* extension package that `--all`
|
|
6
|
+
* should build — the same source name applied uniformly across every discovered folder.
|
|
7
|
+
*
|
|
8
|
+
* The single-extension flag defaults to a cwd-absolute path (`<cwd>/src/extension.ts`),
|
|
9
|
+
* which only makes sense against N packages as its relative tail, so we relativise it to
|
|
10
|
+
* the monorepo root: the default collapses back to `src/extension.ts`, and a caller who
|
|
11
|
+
* passes a repo-relative `--entry` (e.g. `src/main.ts`) round-trips unchanged. Anything
|
|
12
|
+
* that doesn't sit under the root (an absolute path elsewhere) can't name a per-package
|
|
13
|
+
* source, so we fall back to the default rather than emit a `../…` segment.
|
|
14
|
+
*/
|
|
15
|
+
export declare function entrySegmentFor(root: string, entry: string): string;
|
|
2
16
|
/** An extension package discovered under the workspace's extensions/ directory. */
|
|
3
17
|
export interface DiscoveredExtension {
|
|
4
18
|
/** The package/directory name (used only for messages — the combined subgraph has one name). */
|
|
5
19
|
name: string;
|
|
6
|
-
/** The extension source entry (`<dir>/src/extension.ts`). */
|
|
20
|
+
/** The extension source entry (`<dir>/<entrySegment>`, e.g. `<dir>/src/extension.ts`). */
|
|
7
21
|
entry: string;
|
|
8
22
|
/** The esbuild bundle output for a standalone build (`<dir>/dist/extension.js`). */
|
|
9
23
|
outfile: string;
|
|
10
24
|
}
|
|
11
25
|
/**
|
|
12
|
-
* Discover every extension package under `<root>/<dirName>` that has
|
|
13
|
-
* `src/extension.ts
|
|
26
|
+
* Discover every extension package under `<root>/<dirName>` that has an entry at
|
|
27
|
+
* `<pkg>/<entrySegment>` (default `src/extension.ts`). Sorted by name for stable,
|
|
28
|
+
* deterministic merge output.
|
|
14
29
|
*/
|
|
15
|
-
export declare function discoverExtensions(root: string, dirName: string): Promise<DiscoveredExtension[]>;
|
|
30
|
+
export declare function discoverExtensions(root: string, dirName: string, entrySegment?: string): Promise<DiscoveredExtension[]>;
|
|
16
31
|
/** One extension's contribution to the combined subgraph. */
|
|
17
32
|
export interface ExtensionModule {
|
|
18
33
|
name: string;
|
|
@@ -65,7 +80,9 @@ export interface BundleForFlags extends CombinedBuildResult {
|
|
|
65
80
|
/**
|
|
66
81
|
* The single build step shared by `build`/`validate`/`push`: bundle either the one
|
|
67
82
|
* extension in the cwd (default) or — with `--all` — every extension under
|
|
68
|
-
* `<extensionsDir>/*` merged into the one combined bundle a project deploys.
|
|
83
|
+
* `<extensionsDir>/*` merged into the one combined bundle a project deploys. `--entry`
|
|
84
|
+
* carries over to `--all` as the per-package source segment (see {@link entrySegmentFor}),
|
|
85
|
+
* so a repo with a non-default entry name builds uniformly across every folder. Throws a
|
|
69
86
|
* clean message when `--all` finds nothing to build.
|
|
70
87
|
*/
|
|
71
88
|
export declare function bundleForFlags(opts: {
|
|
@@ -7,25 +7,43 @@
|
|
|
7
7
|
// never one-subgraph-per-extension (that's not the deployed shape).
|
|
8
8
|
import { readdir, readFile, stat, writeFile, mkdtemp } from "node:fs/promises";
|
|
9
9
|
import { tmpdir } from "node:os";
|
|
10
|
-
import { join, resolve } from "node:path";
|
|
10
|
+
import { join, relative, resolve } from "node:path";
|
|
11
11
|
import process from "node:process";
|
|
12
12
|
import { buildSubgraphSchema, printSubgraphSchema } from "@apollo/subgraph";
|
|
13
13
|
import { mergeTypeDefs } from "@graphql-tools/merge";
|
|
14
14
|
import { Kind, parse } from "graphql";
|
|
15
15
|
import { buildBundle } from "./build.js";
|
|
16
16
|
import { loadBundleSource } from "./loadBundle.js";
|
|
17
|
+
/** The per-package entry the CLI expects under each `extensions/*` when nothing overrides it. */
|
|
18
|
+
export const DEFAULT_ENTRY_SEGMENT = join("src", "extension.ts");
|
|
17
19
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
+
* Reduce an `--entry` flag value to the path *within each* extension package that `--all`
|
|
21
|
+
* should build — the same source name applied uniformly across every discovered folder.
|
|
22
|
+
*
|
|
23
|
+
* The single-extension flag defaults to a cwd-absolute path (`<cwd>/src/extension.ts`),
|
|
24
|
+
* which only makes sense against N packages as its relative tail, so we relativise it to
|
|
25
|
+
* the monorepo root: the default collapses back to `src/extension.ts`, and a caller who
|
|
26
|
+
* passes a repo-relative `--entry` (e.g. `src/main.ts`) round-trips unchanged. Anything
|
|
27
|
+
* that doesn't sit under the root (an absolute path elsewhere) can't name a per-package
|
|
28
|
+
* source, so we fall back to the default rather than emit a `../…` segment.
|
|
29
|
+
*/
|
|
30
|
+
export function entrySegmentFor(root, entry) {
|
|
31
|
+
const segment = relative(root, resolve(root, entry));
|
|
32
|
+
return segment === "" || segment.startsWith("..") ? DEFAULT_ENTRY_SEGMENT : segment;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Discover every extension package under `<root>/<dirName>` that has an entry at
|
|
36
|
+
* `<pkg>/<entrySegment>` (default `src/extension.ts`). Sorted by name for stable,
|
|
37
|
+
* deterministic merge output.
|
|
20
38
|
*/
|
|
21
|
-
export async function discoverExtensions(root, dirName) {
|
|
39
|
+
export async function discoverExtensions(root, dirName, entrySegment = DEFAULT_ENTRY_SEGMENT) {
|
|
22
40
|
const base = join(root, dirName);
|
|
23
41
|
const dirents = await readdir(base, { withFileTypes: true }).catch(() => []);
|
|
24
42
|
const found = [];
|
|
25
43
|
for (const dirent of dirents) {
|
|
26
44
|
if (!dirent.isDirectory())
|
|
27
45
|
continue;
|
|
28
|
-
const entry = join(base, dirent.name,
|
|
46
|
+
const entry = join(base, dirent.name, entrySegment);
|
|
29
47
|
const hasEntry = await stat(entry)
|
|
30
48
|
.then((s) => s.isFile())
|
|
31
49
|
.catch(() => false);
|
|
@@ -187,7 +205,9 @@ export const hooks = Object.assign(
|
|
|
187
205
|
/**
|
|
188
206
|
* The single build step shared by `build`/`validate`/`push`: bundle either the one
|
|
189
207
|
* extension in the cwd (default) or — with `--all` — every extension under
|
|
190
|
-
* `<extensionsDir>/*` merged into the one combined bundle a project deploys.
|
|
208
|
+
* `<extensionsDir>/*` merged into the one combined bundle a project deploys. `--entry`
|
|
209
|
+
* carries over to `--all` as the per-package source segment (see {@link entrySegmentFor}),
|
|
210
|
+
* so a repo with a non-default entry name builds uniformly across every folder. Throws a
|
|
191
211
|
* clean message when `--all` finds nothing to build.
|
|
192
212
|
*/
|
|
193
213
|
export async function bundleForFlags(opts) {
|
|
@@ -195,9 +215,11 @@ export async function bundleForFlags(opts) {
|
|
|
195
215
|
const { outfile, sourceFiles } = await buildBundle(opts.entry, opts.out);
|
|
196
216
|
return { outfile, sourceFiles, describe: opts.entry };
|
|
197
217
|
}
|
|
198
|
-
const
|
|
218
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
219
|
+
const entrySegment = entrySegmentFor(cwd, opts.entry);
|
|
220
|
+
const extensions = await discoverExtensions(cwd, opts.extensionsDir, entrySegment);
|
|
199
221
|
if (extensions.length === 0) {
|
|
200
|
-
throw new Error(`no extensions found under ./${opts.extensionsDir}
|
|
222
|
+
throw new Error(`no extensions found under ./${opts.extensionsDir}/*/${entrySegment} — run --all from the monorepo root`);
|
|
201
223
|
}
|
|
202
224
|
const { outfile, sourceFiles } = await buildCombinedBundle(extensions, opts.out);
|
|
203
225
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../../src/lib/tooling/extensions.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,sFAAsF;AACtF,oFAAoF;AACpF,iDAAiD;AACjD,oFAAoF;AACpF,mFAAmF;AACnF,oEAAoE;AAEpE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../../src/lib/tooling/extensions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ExtensionResourceTypeId } from "@commercetools/platform-sdk";
|
|
2
|
+
import type { ApiExtensionAction } from "./apiExtension.js";
|
|
3
|
+
/** Resource type ids the platform SDK exposes for API Extensions. */
|
|
4
|
+
export declare const EXTENSION_RESOURCE_TYPE_IDS: readonly ExtensionResourceTypeId[];
|
|
5
|
+
export type ExtensionResourceTypeIdValue = (typeof EXTENSION_RESOURCE_TYPE_IDS)[number];
|
|
6
|
+
export interface GenerateExtensionInputSampleOptions {
|
|
7
|
+
action: ApiExtensionAction;
|
|
8
|
+
resourceTypeId: string;
|
|
9
|
+
/** Override the sample resource id (defaults to `sample-<resourceType>-id`). */
|
|
10
|
+
id?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ExtensionInputSample {
|
|
13
|
+
action: ApiExtensionAction;
|
|
14
|
+
resource: {
|
|
15
|
+
typeId: ExtensionResourceTypeId;
|
|
16
|
+
id: string;
|
|
17
|
+
obj: Record<string, unknown>;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export declare function isExtensionResourceTypeId(value: string): value is ExtensionResourceTypeId;
|
|
21
|
+
/** Build a commercetools ExtensionInput sample for local handler testing. */
|
|
22
|
+
export declare function generateExtensionInputSample(options: GenerateExtensionInputSampleOptions): ExtensionInputSample;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ExtensionActionValues, ExtensionResourceTypeIdValues, } from "@commercetools/platform-sdk";
|
|
2
|
+
import { sampleExtensionResourceObj } from "./extensionInputSampleObj.js";
|
|
3
|
+
/** Resource type ids the platform SDK exposes for API Extensions. */
|
|
4
|
+
export const EXTENSION_RESOURCE_TYPE_IDS = Object.freeze(Object.values(ExtensionResourceTypeIdValues).sort());
|
|
5
|
+
const supportedResourceTypes = new Set(EXTENSION_RESOURCE_TYPE_IDS);
|
|
6
|
+
export function isExtensionResourceTypeId(value) {
|
|
7
|
+
return supportedResourceTypes.has(value);
|
|
8
|
+
}
|
|
9
|
+
function sampleId(resourceTypeId, id) {
|
|
10
|
+
return id ?? `sample-${resourceTypeId}-id`;
|
|
11
|
+
}
|
|
12
|
+
/** Build a commercetools ExtensionInput sample for local handler testing. */
|
|
13
|
+
export function generateExtensionInputSample(options) {
|
|
14
|
+
const { action, resourceTypeId } = options;
|
|
15
|
+
if (!isExtensionResourceTypeId(resourceTypeId)) {
|
|
16
|
+
throw new Error(`unsupported resource type '${resourceTypeId}' — supported: ${EXTENSION_RESOURCE_TYPE_IDS.join(", ")}`);
|
|
17
|
+
}
|
|
18
|
+
if (action !== ExtensionActionValues.Create && action !== ExtensionActionValues.Update) {
|
|
19
|
+
throw new Error(`unsupported action '${action}' — supported: ${ExtensionActionValues.Create}, ${ExtensionActionValues.Update}`);
|
|
20
|
+
}
|
|
21
|
+
const id = sampleId(resourceTypeId, options.id);
|
|
22
|
+
const version = action === ExtensionActionValues.Update ? 2 : 1;
|
|
23
|
+
return {
|
|
24
|
+
action,
|
|
25
|
+
resource: {
|
|
26
|
+
typeId: resourceTypeId,
|
|
27
|
+
id,
|
|
28
|
+
obj: sampleExtensionResourceObj(resourceTypeId, {
|
|
29
|
+
resourceTypeId,
|
|
30
|
+
id,
|
|
31
|
+
version,
|
|
32
|
+
}),
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=generateExtensionInputSample.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateExtensionInputSample.js","sourceRoot":"","sources":["../../../src/lib/tooling/generateExtensionInputSample.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,qEAAqE;AACrE,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,MAAM,CACtD,MAAM,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,IAAI,EAAE,CACd,CAAC;AAoBxC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAS,2BAA2B,CAAC,CAAC;AAE5E,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,OAAO,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,QAAQ,CAAC,cAAsB,EAAE,EAAW;IACnD,OAAO,EAAE,IAAI,UAAU,cAAc,KAAK,CAAC;AAC7C,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,4BAA4B,CAC1C,OAA4C;IAE5C,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAC3C,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,8BAA8B,cAAc,kBAAkB,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvG,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,KAAK,qBAAqB,CAAC,MAAM,IAAI,MAAM,KAAK,qBAAqB,CAAC,MAAM,EAAE,CAAC;QACvF,MAAM,IAAI,KAAK,CACb,uBAAuB,MAAM,kBAAkB,qBAAqB,CAAC,MAAM,KAAK,qBAAqB,CAAC,MAAM,EAAE,CAC/G,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,KAAK,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,OAAO;QACL,MAAM;QACN,QAAQ,EAAE;YACR,MAAM,EAAE,cAAc;YACtB,EAAE;YACF,GAAG,EAAE,0BAA0B,CAAC,cAAc,EAAE;gBAC9C,cAAc;gBACd,EAAE;gBACF,OAAO;aACR,CAAC;SACH;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@commercetools/cli-topic-integration-layer",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "commercetools CLI plugin: integration-layer topic",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@commercetools/cli-plugin-auth": ">=0.0.6",
|
|
24
|
+
"@commercetools/platform-sdk": "8.25.0",
|
|
24
25
|
"@apollo/composition": "^2.14.1",
|
|
25
26
|
"@apollo/gateway": "^2.14.1",
|
|
26
27
|
"@apollo/subgraph": "^2.14.1",
|
|
@@ -33,7 +34,6 @@
|
|
|
33
34
|
"typescript": "^5.7.2"
|
|
34
35
|
},
|
|
35
36
|
"devDependencies": {
|
|
36
|
-
"@commercetools/platform-sdk": "8.25.0",
|
|
37
37
|
"@oclif/test": "^4.1.12",
|
|
38
38
|
"@types/node": "^22.10.2",
|
|
39
39
|
"rimraf": "^6.0.1",
|
|
@@ -41,7 +41,10 @@
|
|
|
41
41
|
},
|
|
42
42
|
"oclif": {
|
|
43
43
|
"topicSeparator": " ",
|
|
44
|
-
"commands": "./dist/commands"
|
|
44
|
+
"commands": "./dist/commands",
|
|
45
|
+
"hooks": {
|
|
46
|
+
"prerun": "./dist/hooks/authentication"
|
|
47
|
+
}
|
|
45
48
|
},
|
|
46
49
|
"scripts": {
|
|
47
50
|
"clean": "rimraf dist",
|