@cimplify/cli 0.15.2 → 0.16.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.
Files changed (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2 -2
  3. package/dist/add-SXC6RUPQ.mjs +140 -0
  4. package/dist/{add-KRIIKAS4.mjs → add-XQVQLD3F.mjs} +4 -4
  5. package/dist/ai-NQH5L4I6.mjs +17 -0
  6. package/dist/{assets-CWB72PZG.mjs → assets-FZGVOQXH.mjs} +12 -7
  7. package/dist/{auth-step-up-Z6KOTTV7.mjs → auth-step-up-67LCPDNL.mjs} +5 -5
  8. package/dist/build-J4ZUIOPX.mjs +625 -0
  9. package/dist/{cancel-ZHVVILOU.mjs → cancel-VGJHZJ4J.mjs} +4 -4
  10. package/dist/capture-RAJ2B3BH.mjs +69 -0
  11. package/dist/chunk-25ZPFHLF.mjs +51 -0
  12. package/dist/chunk-47ZXSY47.mjs +52 -0
  13. package/dist/{chunk-NK6VC264.mjs → chunk-54J3XR4T.mjs} +2 -2
  14. package/dist/chunk-5HP2INMY.mjs +10631 -0
  15. package/dist/chunk-7JR6JCFF.mjs +32 -0
  16. package/dist/chunk-7PQL7E7K.mjs +68 -0
  17. package/dist/chunk-AKACUJ3W.mjs +81 -0
  18. package/dist/chunk-BYNE553A.mjs +2945 -0
  19. package/dist/{chunk-NYXA6X56.mjs → chunk-CLQYPTJ2.mjs} +31 -11
  20. package/dist/chunk-CNZAOVSK.mjs +104 -0
  21. package/dist/chunk-CPBESPWK.mjs +5576 -0
  22. package/dist/{chunk-GRR5U2M5.mjs → chunk-DYWUPHV3.mjs} +11 -7
  23. package/dist/chunk-EAV2P4N3.mjs +1941 -0
  24. package/dist/{chunk-KN2YSKXZ.mjs → chunk-EDZSOL5O.mjs} +14 -6
  25. package/dist/chunk-EGQIPYUN.mjs +696 -0
  26. package/dist/{chunk-DMLQBAGC.mjs → chunk-EOO4UOQD.mjs} +1 -1
  27. package/dist/chunk-EYEMPIMP.mjs +74 -0
  28. package/dist/chunk-G2ZEFSQJ.mjs +46 -0
  29. package/dist/{chunk-TH4XENKH.mjs → chunk-I4HNHPEM.mjs} +1 -1
  30. package/dist/chunk-JEVSFNPT.mjs +363 -0
  31. package/dist/chunk-JKECUAAV.mjs +2169 -0
  32. package/dist/chunk-KMHORI4Y.mjs +638 -0
  33. package/dist/chunk-KNPYBZ6B.mjs +502 -0
  34. package/dist/{chunk-3QUK5BPY.mjs → chunk-KOD4GBQ5.mjs} +8 -1
  35. package/dist/chunk-KQNZKV6E.mjs +535 -0
  36. package/dist/{chunk-MXYUAJEW.mjs → chunk-LLRUOIMU.mjs} +5 -2
  37. package/dist/{chunk-F2UI225N.mjs → chunk-LNMITJ4Z.mjs} +6 -6
  38. package/dist/chunk-MEM3MDV4.mjs +6463 -0
  39. package/dist/chunk-NY4YT7O6.mjs +84 -0
  40. package/dist/{chunk-A6WHBSXZ.mjs → chunk-Q6CF4C3E.mjs} +15 -13
  41. package/dist/chunk-RP66A52P.mjs +86 -0
  42. package/dist/{chunk-I2UP7YTG.mjs → chunk-SAXGWS2K.mjs} +1 -1
  43. package/dist/chunk-SCKQ4XSD.mjs +41 -0
  44. package/dist/chunk-SF44L2OD.mjs +1152 -0
  45. package/dist/chunk-SGT5IJVW.mjs +28 -0
  46. package/dist/{chunk-WEAB6HHQ.mjs → chunk-SS4JTMIV.mjs} +8 -8
  47. package/dist/chunk-T4MW3PD4.mjs +1456 -0
  48. package/dist/chunk-THATLMEX.mjs +1227 -0
  49. package/dist/{chunk-MLE4MVYC.mjs → chunk-TT4YI33G.mjs} +2 -2
  50. package/dist/chunk-TYV2SVFN.mjs +101 -0
  51. package/dist/chunk-VHK7WBO3.mjs +189 -0
  52. package/dist/chunk-VSA44UKR.mjs +391 -0
  53. package/dist/chunk-XL54SQJ3.mjs +42 -0
  54. package/dist/{chunk-5KYR6WJB.mjs → chunk-XQAHREKO.mjs} +17 -1
  55. package/dist/chunk-ZUCDXRFI.mjs +2011 -0
  56. package/dist/create-4S2EAUR3.mjs +10 -0
  57. package/dist/credits-NJOAOPPW.mjs +33 -0
  58. package/dist/{deploy-JE6TUYCL.mjs → deploy-26Y4UGZZ.mjs} +14 -14
  59. package/dist/dev-MOYURRWQ.mjs +401 -0
  60. package/dist/dev-WL43Q7VD.mjs +8 -0
  61. package/dist/dispatcher.mjs +131 -30
  62. package/dist/{doctor-HFB4IBYK.mjs → doctor-E6ETD2GJ.mjs} +12 -19
  63. package/dist/{domains-BZKGIDF4.mjs → domains-LOTQMVOR.mjs} +6 -6
  64. package/dist/engine-runtime-fetch-CIE7S7PB.mjs +10 -0
  65. package/dist/{env-FZNXKLGL.mjs → env-3PDFC5XF.mjs} +7 -7
  66. package/dist/env-MOTYOPM5.mjs +19 -0
  67. package/dist/explain-K5QEVWCD.mjs +251 -0
  68. package/dist/{inspect-X3M7WSTL.mjs → inspect-Q3E2DHYY.mjs} +3 -3
  69. package/dist/inspect-SJ4WBAXO.mjs +86 -0
  70. package/dist/introspect-7F34YN5V.mjs +9 -0
  71. package/dist/kernel-DEGWMHFL.mjs +662 -0
  72. package/dist/kernel-plugin.js +6862 -0
  73. package/dist/keys-W5SN3DPK.mjs +71 -0
  74. package/dist/lines-XGJYTQ7P.mjs +56 -0
  75. package/dist/{link-4NM2QMI5.mjs → link-NKUAVNM2.mjs} +6 -5
  76. package/dist/{lint-DDZ7HUQN.mjs → lint-G4YPQSSO.mjs} +2 -2
  77. package/dist/{list-2MFOQKKQ.mjs → list-TDR7K2JB.mjs} +3 -3
  78. package/dist/lock-EJPW2LM3.mjs +57 -0
  79. package/dist/{login-RLMDEWAL.mjs → login-AYLU7JU7.mjs} +10 -8
  80. package/dist/{logout-Z57X6HPE.mjs → logout-3M6VMHLH.mjs} +2 -2
  81. package/dist/{logs-36BLYJHJ.mjs → logs-4EL5SOXN.mjs} +5 -5
  82. package/dist/logs-4QQGG2XY.mjs +44 -0
  83. package/dist/mcp-4R2R6E5M.mjs +1077 -0
  84. package/dist/{mock-EVER34IX.mjs → mock-AK24GSP2.mjs} +2 -2
  85. package/dist/outdated-JEKCVLTG.mjs +58 -0
  86. package/dist/port-SBZ7X3EH.mjs +2408 -0
  87. package/dist/{projects-4XRNHJAH.mjs → projects-7JKTC5WJ.mjs} +9 -7
  88. package/dist/publish-QQCX47HK.mjs +20 -0
  89. package/dist/remix-NLLYD3BI.mjs +125 -0
  90. package/dist/repo-Z4G4EW3N.mjs +9 -0
  91. package/dist/report-M7F4ZYP7.mjs +2 -0
  92. package/dist/rollback-2WQ2CW7T.mjs +43 -0
  93. package/dist/{rollback-WCRWXSE3.mjs → rollback-ZGU32HGT.mjs} +6 -6
  94. package/dist/scene-HXARHUM7.mjs +324 -0
  95. package/dist/{status-VA326DWD.mjs → status-C3ZSLZ7Q.mjs} +5 -5
  96. package/dist/status-WEQOC25K.mjs +18 -0
  97. package/dist/test-ZPBWV4VX.mjs +233 -0
  98. package/dist/testers-A3LMXOJJ.mjs +49 -0
  99. package/dist/{unlink-H3BO3DOQ.mjs → unlink-4G4FE4RJ.mjs} +2 -2
  100. package/dist/{update-YYOTN7MG.mjs → update-GHKKM5FS.mjs} +4 -4
  101. package/dist/{whoami-CQPPARRS.mjs → whoami-3QQN6G2A.mjs} +3 -3
  102. package/dist/workshop-CD74D2LK.mjs +1703 -0
  103. package/package.json +11 -7
  104. package/templates/storefront-auto/app/products/[slug]/page.tsx +1 -1
  105. package/templates/storefront-auto/package.json +1 -1
  106. package/templates/storefront-bakery/package.json +1 -1
  107. package/templates/storefront-fashion/app/products/[slug]/page.tsx +1 -1
  108. package/templates/storefront-fashion/package.json +1 -1
  109. package/templates/storefront-grocery/package.json +1 -1
  110. package/templates/storefront-pharmacy/app/products/[slug]/page.tsx +1 -1
  111. package/templates/storefront-pharmacy/package.json +1 -1
  112. package/templates/storefront-restaurant/package.json +1 -1
  113. package/templates/storefront-retail/app/products/[slug]/page.tsx +1 -1
  114. package/templates/storefront-retail/package.json +1 -1
  115. package/templates/storefront-services/package.json +1 -1
  116. package/dist/chunk-ARIDYKLO.mjs +0 -6463
  117. package/dist/dev-V7JSUVOI.mjs +0 -8
  118. package/dist/explain-O5AC73EE.mjs +0 -251
  119. package/dist/introspect-2NGESQZE.mjs +0 -8
  120. package/dist/repo-X3KZ5R64.mjs +0 -9
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { CliError, CLI_ERROR_CODE } from './chunk-3QUK5BPY.mjs';
2
+ import { CliError, CLI_ERROR_CODE } from './chunk-KOD4GBQ5.mjs';
3
3
 
4
4
  // src/api-client.ts
5
5
  var DEFAULT_API_BASE_URL = "https://api.cimplify.io";
@@ -13,6 +13,7 @@ var HEADER_ACCEPT = "Accept";
13
13
  var HEADER_USER_AGENT = "User-Agent";
14
14
  var BEARER_PREFIX = "Bearer ";
15
15
  var CONTENT_TYPE_JSON = "application/json";
16
+ var CONTENT_TYPE_OCTET_STREAM = "application/octet-stream";
16
17
  var USER_AGENT = "cimplify-cli";
17
18
  var METHOD_GET = "GET";
18
19
  var METHOD_POST = "POST";
@@ -60,10 +61,26 @@ var ApiClient = class _ApiClient {
60
61
  delete(pathname, options) {
61
62
  return this.request(METHOD_DELETE, pathname, void 0, options);
62
63
  }
63
- async request(method, pathname, body, options) {
64
+ putBytes(pathname, bytes, options) {
65
+ return this.send(METHOD_PUT, pathname, { contentType: CONTENT_TYPE_OCTET_STREAM, payload: bytes }, options);
66
+ }
67
+ request(method, pathname, body, options) {
68
+ const encoded = body === void 0 ? void 0 : { contentType: CONTENT_TYPE_JSON, payload: JSON.stringify(body) };
69
+ return this.send(method, pathname, encoded, options);
70
+ }
71
+ async getBytes(pathname, options) {
72
+ const { response, url } = await this.exchange(METHOD_GET, pathname, void 0, options, CONTENT_TYPE_OCTET_STREAM);
73
+ if (!response.ok) return parseResponse(response, METHOD_GET, url);
74
+ return new Uint8Array(await response.arrayBuffer());
75
+ }
76
+ async send(method, pathname, body, options) {
77
+ const { response, url } = await this.exchange(method, pathname, body, options, CONTENT_TYPE_JSON);
78
+ return parseResponse(response, method, url);
79
+ }
80
+ async exchange(method, pathname, body, options, accept) {
64
81
  const url = this.buildUrl(pathname, options?.query);
65
82
  const headers = {
66
- [HEADER_ACCEPT]: CONTENT_TYPE_JSON,
83
+ [HEADER_ACCEPT]: accept,
67
84
  [HEADER_USER_AGENT]: USER_AGENT
68
85
  };
69
86
  if (this.apiKey) {
@@ -72,11 +89,8 @@ var ApiClient = class _ApiClient {
72
89
  if (this.stepUpToken) {
73
90
  headers[HEADER_STEP_UP] = `${BEARER_PREFIX}${this.stepUpToken}`;
74
91
  }
75
- let payload;
76
- if (body !== void 0) {
77
- headers[HEADER_CONTENT_TYPE] = CONTENT_TYPE_JSON;
78
- payload = JSON.stringify(body);
79
- }
92
+ if (body !== void 0) headers[HEADER_CONTENT_TYPE] = body.contentType;
93
+ const payload = body?.payload;
80
94
  const controller = new AbortController();
81
95
  const timeoutMs = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
82
96
  const timer = setTimeout(() => controller.abort(), timeoutMs);
@@ -103,7 +117,7 @@ var ApiClient = class _ApiClient {
103
117
  `${method} ${url} was redirected. Point ${ENV_API_BASE_URL} (or --base-url) at ${DEFAULT_API_BASE_URL}.`
104
118
  );
105
119
  }
106
- return parseResponse(response, method, url);
120
+ return { response, url };
107
121
  }
108
122
  buildUrl(pathname, query) {
109
123
  const base = pathname.startsWith("/") ? pathname : `/${pathname}`;
@@ -164,7 +178,13 @@ async function parseResponse(response, method, url) {
164
178
  { remediation: "cimplify auth step-up" }
165
179
  );
166
180
  }
167
- throw new CliError(code, message);
181
+ throw new CliError(code, message, { details: { status: response.status } });
182
+ }
183
+ var STATUS_SERVICE_UNAVAILABLE = 503;
184
+ function isServiceUnavailable(error) {
185
+ if (!(error instanceof CliError)) return false;
186
+ const details = error.details;
187
+ return details?.status === STATUS_SERVICE_UNAVAILABLE;
168
188
  }
169
189
  function mapStatusToCode(status) {
170
190
  if (status === STATUS_UNAUTHORIZED) return CLI_ERROR_CODE.AUTH_FAILED;
@@ -196,4 +216,4 @@ function truncate(value, max = 200) {
196
216
  return value.length > max ? `${value.slice(0, max)}\u2026` : value;
197
217
  }
198
218
 
199
- export { ApiClient, DEFAULT_API_BASE_URL, ENV_API_BASE_URL, SDK_ENV_API_URL, resolveBaseUrl };
219
+ export { ApiClient, DEFAULT_API_BASE_URL, ENV_API_BASE_URL, SDK_ENV_API_URL, isServiceUnavailable, resolveBaseUrl };
@@ -0,0 +1,104 @@
1
+ #!/usr/bin/env node
2
+ import { MANIFEST_FILE, LOCKFILE, serializeLockfile, currentLockfile } from './chunk-T4MW3PD4.mjs';
3
+ import { quoteTomlString } from './chunk-KQNZKV6E.mjs';
4
+ import { PINNED_TYPESCRIPT_VERSION, PINNED_SDK_VERSION } from './chunk-AKACUJ3W.mjs';
5
+
6
+ // src/interactives/templates/common.ts
7
+ var VITEST_VERSION = "^4.1.10";
8
+ function packageJson(name) {
9
+ const pkg = {
10
+ name,
11
+ private: true,
12
+ type: "module",
13
+ scripts: { dev: "cimplify dev", test: "vitest run", check: "tsc --noEmit" },
14
+ dependencies: { "@cimplify/sdk": `^${PINNED_SDK_VERSION}` },
15
+ devDependencies: { typescript: PINNED_TYPESCRIPT_VERSION, vitest: VITEST_VERSION }
16
+ };
17
+ return `${JSON.stringify(pkg, null, 2)}
18
+ `;
19
+ }
20
+ var TSCONFIG = `{
21
+ "compilerOptions": {
22
+ "target": "ES2022",
23
+ "module": "ESNext",
24
+ "moduleResolution": "bundler",
25
+ "lib": ["ES2022", "DOM"],
26
+ "strict": true,
27
+ "noEmit": true,
28
+ "isolatedModules": true,
29
+ "skipLibCheck": true,
30
+ "types": []
31
+ },
32
+ "include": ["src", "tests"]
33
+ }
34
+ `;
35
+ var GITIGNORE = "node_modules\n.cimplify\n";
36
+ function manifest(title, spec) {
37
+ let out = `[interactive]
38
+ name = ${quoteTomlString(title)}
39
+ description = ${quoteTomlString(spec.description)}
40
+ category = "${spec.category}"
41
+
42
+ `;
43
+ out += `[profile]
44
+ kind = "${spec.profile}"
45
+ `;
46
+ if (spec.game) out += `game = "game_api"
47
+ `;
48
+ if (spec.engineFeatures !== void 0) out += `engine_features = [${spec.engineFeatures.map(quoteTomlString).join(", ")}]
49
+ `;
50
+ out += `
51
+ [entries]
52
+ client = "src/client.ts"
53
+ `;
54
+ if (spec.game) out += `conformance = "src/conformance.ts"
55
+ `;
56
+ const caps = Object.keys(spec.capabilities);
57
+ if (caps.length > 0) {
58
+ out += "\n[capabilities]\n";
59
+ for (const c of caps) out += `${quoteTomlString(c)} = ${quoteTomlString(spec.capabilities[c])}
60
+ `;
61
+ }
62
+ if (spec.economy) out += `
63
+ ${spec.economy}`;
64
+ if (spec.extraManifest) out += `
65
+ ${spec.extraManifest}`;
66
+ out += `
67
+ [rating]
68
+ violence = "none"
69
+ sexuality = "none"
70
+ language = "none"
71
+ fear = "none"
72
+ simulated_gambling = false
73
+
74
+ [delivery]
75
+ min_device_tier = "${spec.minDeviceTier ?? "low"}"
76
+ download_size = "2 MiB"
77
+
78
+ [[delivery.groups]]
79
+ name = "core"
80
+ before_play = true
81
+ assets = ["assets/core/**"]
82
+
83
+ [[delivery.groups]]
84
+ name = "extras"
85
+ assets = ["assets/**"]
86
+ `;
87
+ return out;
88
+ }
89
+ function titleFromName(name) {
90
+ return name.split(/[-_\s]+/).filter((w) => w.length > 0).map((w) => w[0].toUpperCase() + w.slice(1)).join(" ");
91
+ }
92
+ function materialize(name, spec) {
93
+ const title = titleFromName(name);
94
+ return [
95
+ { path: MANIFEST_FILE, content: manifest(title, spec) },
96
+ { path: LOCKFILE, content: serializeLockfile(currentLockfile()) },
97
+ { path: "package.json", content: packageJson(name) },
98
+ { path: "tsconfig.json", content: TSCONFIG },
99
+ { path: ".gitignore", content: GITIGNORE },
100
+ ...spec.files.map((f) => ({ path: f.path, content: f.content.replaceAll("__TITLE__", title) }))
101
+ ];
102
+ }
103
+
104
+ export { materialize, titleFromName };