@polyhedral/cli 0.1.0-beta.6 → 0.1.0-beta.8

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 (51) hide show
  1. package/README.md +8 -2
  2. package/dist/commands/dev.js.map +1 -1
  3. package/dist/commands/docs.d.ts.map +1 -1
  4. package/dist/commands/docs.js +2 -3
  5. package/dist/commands/docs.js.map +1 -1
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/login.d.ts.map +1 -1
  8. package/dist/commands/login.js +35 -42
  9. package/dist/commands/login.js.map +1 -1
  10. package/dist/commands/pull.d.ts.map +1 -1
  11. package/dist/commands/pull.js +1 -0
  12. package/dist/commands/pull.js.map +1 -1
  13. package/dist/index.js +2 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/lib/api-client.d.ts +2 -0
  16. package/dist/lib/api-client.d.ts.map +1 -1
  17. package/dist/lib/api-client.js +7 -0
  18. package/dist/lib/api-client.js.map +1 -1
  19. package/dist/lib/auto-update.d.ts +24 -0
  20. package/dist/lib/auto-update.d.ts.map +1 -0
  21. package/dist/lib/auto-update.js +107 -0
  22. package/dist/lib/auto-update.js.map +1 -0
  23. package/dist/lib/config.d.ts +6 -0
  24. package/dist/lib/config.d.ts.map +1 -1
  25. package/dist/lib/config.js +23 -2
  26. package/dist/lib/config.js.map +1 -1
  27. package/dist/lib/format.js +1 -1
  28. package/dist/lib/format.js.map +1 -1
  29. package/dist/lib/install.d.ts +32 -0
  30. package/dist/lib/install.d.ts.map +1 -0
  31. package/dist/lib/install.js +85 -0
  32. package/dist/lib/install.js.map +1 -0
  33. package/dist/lib/prompt.d.ts +6 -0
  34. package/dist/lib/prompt.d.ts.map +1 -1
  35. package/dist/lib/prompt.js +32 -5
  36. package/dist/lib/prompt.js.map +1 -1
  37. package/dist/lib/template-data.d.ts +1 -0
  38. package/dist/lib/template-data.d.ts.map +1 -1
  39. package/dist/lib/template-data.js +1 -0
  40. package/dist/lib/template-data.js.map +1 -1
  41. package/dist/lib/validate-local.d.ts +5 -0
  42. package/dist/lib/validate-local.d.ts.map +1 -1
  43. package/dist/lib/validate-local.js +51 -20
  44. package/dist/lib/validate-local.js.map +1 -1
  45. package/dist/types.d.ts +2 -0
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/update-worker.d.ts +2 -0
  48. package/dist/update-worker.d.ts.map +1 -0
  49. package/dist/update-worker.js +23 -0
  50. package/dist/update-worker.js.map +1 -0
  51. package/package.json +11 -9
package/README.md CHANGED
@@ -10,10 +10,16 @@ npm install -g @polyhedral/cli
10
10
 
11
11
  Requires Node.js 20+. Or use `npx @polyhedral/cli` without installing.
12
12
 
13
+ ### Updates
14
+
15
+ The CLI keeps itself up to date. Once a day it checks npm for a newer build on its channel (a `beta` build follows `beta`). When it finds one, it installs it in the background after your command finishes, and the next run tells you it updated. This works for global installs through npm, pnpm, yarn, or bun.
16
+
17
+ If it can't update itself, it tells you the command to run instead. That happens when the global folder needs `sudo`, in CI, and in non-interactive runs. Set `POLYHEDRAL_NO_AUTO_UPDATE=1` to turn self-updating off, or `NO_UPDATE_NOTIFIER=1` to turn off the check entirely.
18
+
13
19
  ## Quick Start
14
20
 
15
21
  ```bash
16
- # Log in with your API key (get one from Connected Apps in your account settings)
22
+ # Log in with your API key (get one from Developer Tools in your avatar menu)
17
23
  polyhedral login
18
24
 
19
25
  # Scaffold a new template project
@@ -39,7 +45,7 @@ polyhedral dev
39
45
  | `polyhedral list` | List all your custom sheet templates |
40
46
  | `polyhedral versions` | List version history for a template |
41
47
  | `polyhedral validate` | Check a template file for syntax errors (offline) |
42
- | `polyhedral docs` | Print the full SDK reference documentation |
48
+ | `polyhedral docs` | Print the full SDK reference documentation |
43
49
 
44
50
  ### Push Options
45
51
 
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAmBjD"}
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBjD"}
@@ -1,8 +1,7 @@
1
1
  import { isJsonMode, jsonOutput } from '../lib/output.js';
2
- const DEFAULT_API_URL = 'https://polyhedral.co';
2
+ const SDK_DOCS_URL = 'https://polyhedral.co/api/sdk/docs';
3
3
  export async function docsCommand() {
4
- const apiUrl = DEFAULT_API_URL.replace(/\/$/, '');
5
- const url = `${apiUrl}/api/sdk/docs`;
4
+ const url = SDK_DOCS_URL;
6
5
  const res = await fetch(url);
7
6
  if (!res.ok) {
8
7
  console.error(`Failed to fetch SDK docs: ${res.status} ${res.statusText}`);
@@ -1 +1 @@
1
- {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAEzD,MAAM,eAAe,GAAG,uBAAuB,CAAA;AAE/C,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACjD,MAAM,GAAG,GAAG,GAAG,MAAM,eAAe,CAAA;IAEpC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;IAE5B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,6BAA6B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwB,CAAA;IAEtD,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,OAAM;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC3B,CAAC"}
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAEzD,MAAM,YAAY,GAAG,oCAAoC,CAAA;AAEzD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,GAAG,GAAG,YAAY,CAAA;IAExB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;IAE5B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,6BAA6B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwB,CAAA;IAEtD,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,OAAM;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC3B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAMA,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkD9E"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAKA,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C9E"}
@@ -1,51 +1,44 @@
1
- import { createInterface } from 'node:readline/promises';
2
- import { stdin, stdout } from 'node:process';
3
- import { loadConfig, saveConfig } from '../lib/config.js';
1
+ import { loadConfig, normalizeApiUrl, saveConfig } from '../lib/config.js';
4
2
  import { ApiClient } from '../lib/api-client.js';
5
3
  import { isJsonMode, jsonOutput } from '../lib/output.js';
4
+ import { ask, askSecret } from '../lib/prompt.js';
6
5
  export async function loginCommand(options) {
7
- const rl = createInterface({ input: stdin, output: stdout });
8
- try {
9
- const existing = await loadConfig();
10
- if (existing.apiKey) {
11
- console.log('You are already logged in.');
12
- const overwrite = await rl.question('Overwrite existing credentials? (y/N) ');
13
- if (overwrite.trim().toLowerCase() !== 'y') {
14
- console.log('Aborted.');
15
- return;
16
- }
17
- console.log('');
18
- }
19
- console.log('Log in to Polyhedral with your API key.');
20
- console.log('Generate one at https://polyhedral.co/home/connected-apps\n');
21
- const apiKey = await rl.question('API key: ');
22
- if (!apiKey.trim()) {
23
- console.error('No API key provided.');
24
- return;
25
- }
26
- const config = {
27
- apiKey: apiKey.trim(),
28
- apiUrl: options.apiUrl?.trim() || existing.apiUrl,
29
- };
30
- console.log('\nValidating API key...');
31
- const client = new ApiClient(config);
32
- try {
33
- await client.listTemplates();
34
- }
35
- catch (err) {
36
- const message = err instanceof Error ? err.message : 'Unknown error';
37
- console.error(`Authentication failed: ${message}`);
6
+ const existing = await loadConfig();
7
+ if (existing.apiKey) {
8
+ console.log('You are already logged in.');
9
+ const overwrite = await ask('Overwrite existing credentials? (y/N) ');
10
+ if (overwrite.trim().toLowerCase() !== 'y') {
11
+ console.log('Aborted.');
38
12
  return;
39
13
  }
40
- await saveConfig(config);
41
- console.log('Logged in successfully. Config saved to ~/.polyhedral/config.json');
42
- console.log('Note: API key stored in plaintext at ~/.polyhedral/config.json');
43
- if (isJsonMode()) {
44
- jsonOutput({ success: true, apiUrl: config.apiUrl });
45
- }
14
+ console.log('');
15
+ }
16
+ console.log('Log in to Polyhedral with your API key.');
17
+ console.log('Generate one from Developer Tools in your avatar menu at https://polyhedral.co\n');
18
+ const apiKey = await askSecret('API key (hidden): ');
19
+ if (!apiKey.trim()) {
20
+ console.error('No API key provided.');
21
+ return;
22
+ }
23
+ const config = {
24
+ apiKey: apiKey.trim(),
25
+ apiUrl: normalizeApiUrl(options.apiUrl?.trim() || existing.apiUrl),
26
+ };
27
+ console.log('\nValidating API key...');
28
+ const client = new ApiClient(config);
29
+ try {
30
+ await client.listTemplates();
31
+ }
32
+ catch (err) {
33
+ const message = err instanceof Error ? err.message : 'Unknown error';
34
+ console.error(`Authentication failed: ${message}`);
35
+ return;
46
36
  }
47
- finally {
48
- rl.close();
37
+ await saveConfig(config);
38
+ console.log('Logged in successfully. Config saved to ~/.polyhedral/config.json');
39
+ console.log('Note: API key stored in plaintext at ~/.polyhedral/config.json');
40
+ if (isJsonMode()) {
41
+ jsonOutput({ success: true, apiUrl: config.apiUrl });
49
42
  }
50
43
  }
51
44
  //# sourceMappingURL=login.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAEzD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC7D,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAE5D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,UAAU,EAAE,CAAA;QAEnC,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;YACzC,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CAAA;YAC7E,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;gBACvB,OAAM;YACR,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACjB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAA;QACtD,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAA;QAE1E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;YACrC,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG;YACb,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;YACrB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC,MAAM;SAClD,CAAA;QAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;QACtC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAA;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,aAAa,EAAE,CAAA;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;YACpE,OAAO,CAAC,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAA;YAClD,OAAM;QACR,CAAC;QAED,MAAM,UAAU,CAAC,MAAM,CAAC,CAAA;QACxB,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAA;QAChF,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAA;QAE7E,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC7D,MAAM,QAAQ,GAAG,MAAM,UAAU,EAAE,CAAA;IAEnC,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;QACzC,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,wCAAwC,CAAC,CAAA;QACrE,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YACvB,OAAM;QACR,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAA;IACtD,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAA;IAE/F,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,oBAAoB,CAAC,CAAA;IACpD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;QACrC,OAAM;IACR,CAAC;IAED,MAAM,MAAM,GAAG;QACb,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;QACrB,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC;KACnE,CAAA;IAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;IACtC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAA;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,aAAa,EAAE,CAAA;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;QACpE,OAAO,CAAC,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAA;QAClD,OAAM;IACR,CAAC;IAED,MAAM,UAAU,CAAC,MAAM,CAAC,CAAA;IACxB,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAA;IAChF,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAA;IAE7E,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IACtD,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AASA,wBAAsB,WAAW,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsD3F"}
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AASA,wBAAsB,WAAW,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD3F"}
@@ -42,6 +42,7 @@ export async function pullCommand(id, options) {
42
42
  description: template.description ?? undefined,
43
43
  fieldSchema: template.field_schema ?? undefined,
44
44
  nameField: template.name_field,
45
+ thumbnailField: template.thumbnail_field,
45
46
  version: template.version,
46
47
  };
47
48
  await saveManifest(updatedManifest);
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG1C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAW,EAAE,OAA6B;IAC1E,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAA;IACpC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAA;IAEpC,MAAM,QAAQ,GAAG,MAAM,eAAe,EAAE,CAAA;IAExC,MAAM,UAAU,GAAG,EAAE,IAAI,QAAQ,EAAE,UAAU,CAAA;IAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAA;QACrF,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,GAAG,CAAC,oBAAoB,UAAU,KAAK,CAAC,CAAA;IACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;IAErD,MAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI,IAAI,aAAa,CAAA;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;IAE9C,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;YACtB,GAAG,CAAC,eAAe,QAAQ,wBAAwB,CAAC,CAAA;YACpD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAA;YAC5C,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,GAAG,CAAC,UAAU,CAAC,CAAA;gBACf,OAAM;YACR,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAEjD,MAAM,eAAe,GAAa;QAChC,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,QAAQ,CAAC,UAAmC;QACvD,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,SAAS;QAC9C,WAAW,EAAE,QAAQ,CAAC,YAAY,IAAI,SAAS;QAC/C,SAAS,EAAE,QAAQ,CAAC,UAAU;QAC9B,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAA;IAED,MAAM,YAAY,CAAC,eAAe,CAAC,CAAA;IAEnC,GAAG,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAA;IACxB,GAAG,CAAC,yBAAyB,CAAC,CAAA;IAE9B,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,UAAU,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IACzD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG1C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAW,EAAE,OAA6B;IAC1E,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAA;IACpC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAA;IAEpC,MAAM,QAAQ,GAAG,MAAM,eAAe,EAAE,CAAA;IAExC,MAAM,UAAU,GAAG,EAAE,IAAI,QAAQ,EAAE,UAAU,CAAA;IAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAA;QACrF,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,GAAG,CAAC,oBAAoB,UAAU,KAAK,CAAC,CAAA;IACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;IAErD,MAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI,IAAI,aAAa,CAAA;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;IAE9C,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;YACtB,GAAG,CAAC,eAAe,QAAQ,wBAAwB,CAAC,CAAA;YACpD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAA;YAC5C,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,GAAG,CAAC,UAAU,CAAC,CAAA;gBACf,OAAM;YACR,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAEjD,MAAM,eAAe,GAAa;QAChC,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,QAAQ,CAAC,UAAmC;QACvD,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,SAAS;QAC9C,WAAW,EAAE,QAAQ,CAAC,YAAY,IAAI,SAAS;QAC/C,SAAS,EAAE,QAAQ,CAAC,UAAU;QAC9B,cAAc,EAAE,QAAQ,CAAC,eAAe;QACxC,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAA;IAED,MAAM,YAAY,CAAC,eAAe,CAAC,CAAA;IAEnC,GAAG,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAA;IACxB,GAAG,CAAC,yBAAyB,CAAC,CAAA;IAE9B,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,UAAU,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IACzD,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -15,9 +15,11 @@ import { pushCommand } from './commands/push.js';
15
15
  import { validateCommand } from './commands/validate.js';
16
16
  import { versionsCommand } from './commands/versions.js';
17
17
  import { whoamiCommand } from './commands/whoami.js';
18
+ import { checkForUpdates } from './lib/auto-update.js';
18
19
  import { setProgram } from './lib/output.js';
19
20
  const __dirname = dirname(fileURLToPath(import.meta.url));
20
21
  const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
22
+ checkForUpdates(pkg, join(__dirname, '..'), join(__dirname, 'update-worker.js'));
21
23
  const program = new Command();
22
24
  program
23
25
  .name('polyhedral')
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ export declare class ApiClient {
13
13
  description?: string;
14
14
  fieldSchema?: unknown[];
15
15
  nameField?: string | null;
16
+ thumbnailField?: string | null;
16
17
  }): Promise<Template>;
17
18
  updateTemplate(id: string, data: {
18
19
  name?: string;
@@ -21,6 +22,7 @@ export declare class ApiClient {
21
22
  description?: string;
22
23
  fieldSchema?: unknown[];
23
24
  nameField?: string | null;
25
+ thumbnailField?: string | null;
24
26
  }): Promise<Template>;
25
27
  deleteTemplate(id: string): Promise<{
26
28
  success: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAY,MAAM,aAAa,CAAA;AAEnG,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,MAAM,CAAQ;gBAEV,MAAM,EAAE,SAAS;YAKf,OAAO;IAqBf,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAIpC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI1C,cAAc,CAAC,IAAI,EAAE;QACzB,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAA;QACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAC1B,GAAG,OAAO,CAAC,QAAQ,CAAC;IAOf,cAAc,CAClB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAA;QACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAC1B,GACA,OAAO,CAAC,QAAQ,CAAC;IAOd,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAMzD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOjD,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC;QAAE,OAAO,EAAE,eAAe,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC;IAUtD,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CAGnE"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAY,MAAM,aAAa,CAAA;AAEnG,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,MAAM,CAAQ;IAEtB,YAAY,MAAM,EAAE,SAAS,EAG5B;YAEa,OAAO;IA+Bf,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAEzC;IAEK,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAE/C;IAEK,cAAc,CAAC,IAAI,EAAE;QACzB,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAA;QACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAC/B,GAAG,OAAO,CAAC,QAAQ,CAAC,CAKpB;IAEK,cAAc,CAClB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAA;QACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAC/B,GACA,OAAO,CAAC,QAAQ,CAAC,CAKnB;IAEK,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAI9D;IAEK,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAKtD;IAEK,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC;QAAE,OAAO,EAAE,eAAe,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC,CAQ3D;IAEK,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAEjE;CACF"}
@@ -15,6 +15,13 @@ export class ApiClient {
15
15
  ...options.headers,
16
16
  },
17
17
  });
18
+ // fetch strips Authorization when a redirect changes origin (www → apex,
19
+ // http → https), so this 401 is about the URL, not the key.
20
+ if (res.status === 401 && res.redirected) {
21
+ const target = new URL(res.url).origin;
22
+ throw new Error(`${this.baseUrl} redirects to ${target}, which drops your API key. ` +
23
+ `Log in with \`polyhedral login --api-url ${target}\`.`);
24
+ }
18
25
  const body = await res.json();
19
26
  if (!res.ok) {
20
27
  const err = body;
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,SAAS;IACZ,OAAO,CAAQ;IACf,MAAM,CAAQ;IAEtB,YAAY,MAAiB;QAC3B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAC/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;IAC7B,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,UAAuB,EAAE;QAC9D,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAA;QACpC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;gBACtC,GAAG,OAAO,CAAC,OAAO;aACnB;SACF,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QAE7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,IAAgB,CAAA;YAC5B,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,8BAA8B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;QAC1E,CAAC;QAED,OAAO,IAAS,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,OAAO,CAAa,6BAA6B,CAAC,CAAA;IAChE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAW,+BAA+B,EAAE,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAOpB;QACC,OAAO,IAAI,CAAC,OAAO,CAAW,6BAA6B,EAAE;YAC3D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,EAAU,EACV,IAOC;QAED,OAAO,IAAI,CAAC,OAAO,CAAW,+BAA+B,EAAE,EAAE,EAAE;YACjE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,EAAU;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAuB,+BAA+B,EAAE,EAAE,EAAE;YAC7E,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,OAAO,CAAmB,sCAAsC,EAAE;YAC5E,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;SAC/B,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,UAAkB,EAClB,OAA6C;QAE7C,OAAO,IAAI,CAAC,OAAO,CACjB,+BAA+B,UAAU,UAAU,EACnD;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CACF,CAAA;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAkB;QACnC,OAAO,IAAI,CAAC,OAAO,CAAoB,+BAA+B,UAAU,WAAW,CAAC,CAAA;IAC9F,CAAC;CACF"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface UpdateState {
2
+ from: string;
3
+ to: string;
4
+ status: 'pending' | 'updated' | 'failed';
5
+ error?: string;
6
+ at: number;
7
+ }
8
+ interface CliPackage {
9
+ name: string;
10
+ version: string;
11
+ bin: Record<string, string>;
12
+ }
13
+ /**
14
+ * Checks npm for a newer build on this build's channel (once a day, in a
15
+ * detached process — update-notifier's job) and, when one has been found,
16
+ * installs it in the background after the current command exits. Falls back
17
+ * to the usual "update available" notice whenever installing it ourselves
18
+ * isn't safe: not a global install we recognise, no write access to the
19
+ * prefix, a non-interactive run, or POLYHEDRAL_NO_AUTO_UPDATE is set. `--json`
20
+ * runs stay silent either way.
21
+ */
22
+ export declare function checkForUpdates(pkg: CliPackage, packageRoot: string, workerPath: string): void;
23
+ export {};
24
+ //# sourceMappingURL=auto-update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../src/lib/auto-update.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAA;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,EAAE,EAAE,MAAM,CAAA;CACX;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAkC9F"}
@@ -0,0 +1,107 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { accessSync, constants, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { dirname, join } from 'node:path';
5
+ import semver from 'semver';
6
+ import updateNotifier from 'update-notifier';
7
+ import { detectGlobalInstall, distTagFor, installCommand, manualUpdateCommand, npmBinPath, npmWritableDirs, } from './install.js';
8
+ const STATE_FILE = join(homedir(), '.polyhedral', 'update.json');
9
+ /** A pending install older than this was killed or hung; forget it. */
10
+ const PENDING_TTL_MS = 10 * 60 * 1000;
11
+ /**
12
+ * Checks npm for a newer build on this build's channel (once a day, in a
13
+ * detached process — update-notifier's job) and, when one has been found,
14
+ * installs it in the background after the current command exits. Falls back
15
+ * to the usual "update available" notice whenever installing it ourselves
16
+ * isn't safe: not a global install we recognise, no write access to the
17
+ * prefix, a non-interactive run, or POLYHEDRAL_NO_AUTO_UPDATE is set. `--json`
18
+ * runs stay silent either way.
19
+ */
20
+ export function checkForUpdates(pkg, packageRoot, workerPath) {
21
+ const tag = distTagFor(pkg.version);
22
+ const notifier = updateNotifier({ pkg, distTag: tag });
23
+ const install = detectGlobalInstall(packageRoot, pkg.name);
24
+ const manual = manualUpdateCommand(install, pkg.name, tag);
25
+ const json = process.argv.includes('--json');
26
+ const interactive = Boolean(process.stdout.isTTY && process.stderr.isTTY) && !json;
27
+ const last = readState();
28
+ if (last?.status === 'pending' && Date.now() - last.at < PENDING_TTL_MS)
29
+ return;
30
+ if (last) {
31
+ clearState();
32
+ if (interactive)
33
+ reportLastAttempt(last, pkg.version, manual);
34
+ }
35
+ const latest = notifier.update?.latest;
36
+ if (!latest || !semver.gt(latest, pkg.version))
37
+ return;
38
+ if (interactive &&
39
+ !('POLYHEDRAL_NO_AUTO_UPDATE' in process.env) &&
40
+ install &&
41
+ canInstall(install, pkg)) {
42
+ // Wait for exit so files aren't swapped under a running command (`dev` loads
43
+ // Babel lazily; `init` reads templates from the package directory).
44
+ process.on('exit', () => startInstall(install, pkg, latest, workerPath));
45
+ return;
46
+ }
47
+ if (!json)
48
+ notifier.notify({
49
+ message: `Update available ${pkg.version} → ${latest}\nRun ${manual} to update`,
50
+ });
51
+ }
52
+ function reportLastAttempt(state, current, manual) {
53
+ if (state.status === 'updated' && state.to === current) {
54
+ console.error(`Updated polyhedral ${state.from} → ${state.to}.`);
55
+ }
56
+ else if (state.status === 'failed') {
57
+ console.error(`Couldn't update polyhedral to ${state.to}: ${state.error}\nRun ${manual} to update.`);
58
+ }
59
+ }
60
+ function canInstall(install, pkg) {
61
+ if (install.manager !== 'npm' || !install.prefix)
62
+ return true;
63
+ const binName = Object.keys(pkg.bin)[0];
64
+ if (!existsSync(npmBinPath(install.prefix, binName)))
65
+ return false;
66
+ try {
67
+ for (const dir of npmWritableDirs(install.prefix))
68
+ accessSync(dir, constants.W_OK);
69
+ return true;
70
+ }
71
+ catch {
72
+ // Root-owned prefix: the install would need sudo, so say how instead.
73
+ return false;
74
+ }
75
+ }
76
+ function startInstall(install, pkg, latest, workerPath) {
77
+ const state = { from: pkg.version, to: latest, status: 'pending', at: Date.now() };
78
+ try {
79
+ writeState(state);
80
+ const { command, args } = installCommand(install, `${pkg.name}@${latest}`);
81
+ spawn(process.execPath, [workerPath, JSON.stringify({ command, args, state, stateFile: STATE_FILE })], {
82
+ detached: true,
83
+ stdio: 'ignore',
84
+ windowsHide: true,
85
+ }).unref();
86
+ console.error(`Updating polyhedral ${pkg.version} → ${latest} in the background.`);
87
+ }
88
+ catch {
89
+ clearState();
90
+ }
91
+ }
92
+ function readState() {
93
+ try {
94
+ return JSON.parse(readFileSync(STATE_FILE, 'utf-8'));
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ }
100
+ function writeState(state) {
101
+ mkdirSync(dirname(STATE_FILE), { recursive: true });
102
+ writeFileSync(STATE_FILE, JSON.stringify(state) + '\n', 'utf-8');
103
+ }
104
+ function clearState() {
105
+ rmSync(STATE_FILE, { force: true });
106
+ }
107
+ //# sourceMappingURL=auto-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../../src/lib/auto-update.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,10 @@
1
1
  import type { CliConfig } from '../types.js';
2
+ /**
3
+ * Plain http is only kept for local and LAN dev servers. Anywhere else the
4
+ * server redirects to https, and fetch drops the Authorization header on that
5
+ * scheme change, so every request would arrive without the API key.
6
+ */
7
+ export declare function normalizeApiUrl(url: string): string;
2
8
  export declare function loadConfig(): Promise<CliConfig>;
3
9
  export declare function saveConfig(config: CliConfig): Promise<void>;
4
10
  export declare function requireConfig(): Promise<CliConfig>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAU5C,wBAAsB,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC,CAOrD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC,CAOxD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAa5C;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUnD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC,CASrD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC,CAOxD"}
@@ -7,14 +7,35 @@ const DEFAULT_CONFIG = {
7
7
  apiKey: '',
8
8
  apiUrl: 'https://polyhedral.co',
9
9
  };
10
+ const LOCAL_HOST = /^(localhost|.+\.localhost|.+\.test|127\.\d+\.\d+\.\d+|\[::1\]|10\.\d+\.\d+\.\d+|192\.168\.\d+\.\d+|172\.(1[6-9]|2\d|3[01])\.\d+\.\d+)$/;
11
+ /**
12
+ * Plain http is only kept for local and LAN dev servers. Anywhere else the
13
+ * server redirects to https, and fetch drops the Authorization header on that
14
+ * scheme change, so every request would arrive without the API key.
15
+ */
16
+ export function normalizeApiUrl(url) {
17
+ const trimmed = url.trim().replace(/\/+$/, '');
18
+ let parsed;
19
+ try {
20
+ parsed = new URL(trimmed);
21
+ }
22
+ catch {
23
+ return trimmed;
24
+ }
25
+ if (parsed.protocol !== 'http:' || LOCAL_HOST.test(parsed.hostname))
26
+ return trimmed;
27
+ return 'https:' + trimmed.slice('http:'.length);
28
+ }
10
29
  export async function loadConfig() {
30
+ let config;
11
31
  try {
12
32
  const raw = await readFile(CONFIG_FILE, 'utf-8');
13
- return { ...DEFAULT_CONFIG, ...JSON.parse(raw) };
33
+ config = { ...DEFAULT_CONFIG, ...JSON.parse(raw) };
14
34
  }
15
35
  catch {
16
- return { ...DEFAULT_CONFIG };
36
+ config = { ...DEFAULT_CONFIG };
17
37
  }
38
+ return { ...config, apiUrl: normalizeApiUrl(config.apiUrl) };
18
39
  }
19
40
  export async function saveConfig(config) {
20
41
  await mkdir(CONFIG_DIR, { recursive: true });
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAA;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;AAEnD,MAAM,cAAc,GAAc;IAChC,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,uBAAuB;CAChC,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAChD,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAA;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,cAAc,EAAE,CAAA;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAiB;IAChD,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5C,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IACjC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAA;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAA;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;AAEnD,MAAM,cAAc,GAAc;IAChC,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,uBAAuB;CAChC,CAAA;AAED,MAAM,UAAU,GACd,wIAAwI,CAAA;AAE1I;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC9C,IAAI,MAAW,CAAA;IACf,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAA;IACnF,OAAO,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,MAAiB,CAAA;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAChD,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAA;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,CAAA;IAChC,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAA;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAiB;IAChD,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5C,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IACjC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAA;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export function formatValidationError(result) {
2
2
  if (result.line) {
3
- const column = result.column ? `, column ${result.column}` : '';
3
+ const column = result.column !== undefined ? `, column ${result.column}` : '';
4
4
  return `Line ${result.line}${column}: ${result.error}`;
5
5
  }
6
6
  return result.error ?? 'Unknown validation error';
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB,CAAC,MAAwB;IAC5D,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAC/D,OAAO,QAAQ,MAAM,CAAC,IAAI,GAAG,MAAM,KAAK,MAAM,CAAC,KAAK,EAAE,CAAA;IACxD,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,IAAI,0BAA0B,CAAA;AACnD,CAAC"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB,CAAC,MAAwB;IAC5D,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAC7E,OAAO,QAAQ,MAAM,CAAC,IAAI,GAAG,MAAM,KAAK,MAAM,CAAC,KAAK,EAAE,CAAA;IACxD,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,IAAI,0BAA0B,CAAA;AACnD,CAAC"}
@@ -0,0 +1,32 @@
1
+ export type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';
2
+ export interface GlobalInstall {
3
+ manager: PackageManager;
4
+ /** npm only: the global prefix the CLI lives under, so the update lands in the same place. */
5
+ prefix?: string;
6
+ }
7
+ export interface InstallCommand {
8
+ command: string;
9
+ args: string[];
10
+ }
11
+ /**
12
+ * The npm dist-tag this build was published under. A prerelease (`0.1.0-beta.7`)
13
+ * follows its own channel (`beta`); comparing it against `latest` would tell a
14
+ * beta user about nothing, or offer them an older build.
15
+ */
16
+ export declare function distTagFor(version: string): string;
17
+ /**
18
+ * How the running CLI was installed, read from where its package root sits on
19
+ * disk. Returns null for anything that isn't a global install we know how to
20
+ * update: npx's cache, a project's local dependency, or a linked checkout.
21
+ */
22
+ export declare function detectGlobalInstall(packageRoot: string, packageName: string, platform?: NodeJS.Platform): GlobalInstall | null;
23
+ /** Where npm links the `polyhedral` bin for a global prefix. */
24
+ export declare function npmBinPath(prefix: string, binName: string, platform?: NodeJS.Platform): string;
25
+ /** Directories npm writes to on a global install; all must be writable to update without sudo. */
26
+ export declare function npmWritableDirs(prefix: string, platform?: NodeJS.Platform): string[];
27
+ export declare function installCommand(install: GlobalInstall, spec: string): InstallCommand;
28
+ /** The command to show a person who has to update by hand. */
29
+ export declare function manualUpdateCommand(install: GlobalInstall | null, packageName: string, tag: string): string;
30
+ /** Shortest useful reason from a failed install's stderr: npm's error code, else its last real line. */
31
+ export declare function summarizeInstallError(stderr: string): string;
32
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/lib/install.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;AAE5D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,cAAc,CAAA;IACvB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,EAAE,CAAA;CACf;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,aAAa,GAAG,IAAI,CAiBtB;AAED,gEAAgE;AAChE,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,CAIR;AAED,kGAAkG;AAClG,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,EAAE,CAIV;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAmBnF;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,GAAG,IAAI,EAC7B,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GACV,MAAM,CAIR;AAED,wGAAwG;AACxG,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAO5D"}
@@ -0,0 +1,85 @@
1
+ import { posix } from 'node:path';
2
+ /**
3
+ * The npm dist-tag this build was published under. A prerelease (`0.1.0-beta.7`)
4
+ * follows its own channel (`beta`); comparing it against `latest` would tell a
5
+ * beta user about nothing, or offer them an older build.
6
+ */
7
+ export function distTagFor(version) {
8
+ const match = /^\d+\.\d+\.\d+-([0-9A-Za-z-]+)/.exec(version);
9
+ return match && !/^\d+$/.test(match[1]) ? match[1] : 'latest';
10
+ }
11
+ /**
12
+ * How the running CLI was installed, read from where its package root sits on
13
+ * disk. Returns null for anything that isn't a global install we know how to
14
+ * update: npx's cache, a project's local dependency, or a linked checkout.
15
+ */
16
+ export function detectGlobalInstall(packageRoot, packageName, platform = process.platform) {
17
+ const root = packageRoot.replaceAll('\\', '/');
18
+ const tail = `/node_modules/${packageName}`;
19
+ if (!root.endsWith(tail))
20
+ return null;
21
+ if (root.includes('/_npx/'))
22
+ return null;
23
+ if (root.includes('/.bun/install/global/'))
24
+ return { manager: 'bun' };
25
+ if (/\/pnpm\/global\//i.test(root))
26
+ return { manager: 'pnpm' };
27
+ if (/\/yarn\/global\//i.test(root))
28
+ return { manager: 'yarn' };
29
+ // npm puts globals in <prefix>/lib/node_modules, or <prefix>/node_modules on
30
+ // Windows (default prefix %APPDATA%\npm). The caller confirms the bin link exists,
31
+ // which rules out a project that happens to sit in a folder named lib.
32
+ const parent = posix.dirname(root.slice(0, -(packageName.length + 1)));
33
+ if (platform === 'win32') {
34
+ return /\/npm$/i.test(parent) ? { manager: 'npm', prefix: parent } : null;
35
+ }
36
+ return parent.endsWith('/lib') ? { manager: 'npm', prefix: posix.dirname(parent) } : null;
37
+ }
38
+ /** Where npm links the `polyhedral` bin for a global prefix. */
39
+ export function npmBinPath(prefix, binName, platform = process.platform) {
40
+ return platform === 'win32'
41
+ ? posix.join(prefix, `${binName}.cmd`)
42
+ : posix.join(prefix, 'bin', binName);
43
+ }
44
+ /** Directories npm writes to on a global install; all must be writable to update without sudo. */
45
+ export function npmWritableDirs(prefix, platform = process.platform) {
46
+ return platform === 'win32'
47
+ ? [posix.join(prefix, 'node_modules'), prefix]
48
+ : [posix.join(prefix, 'lib', 'node_modules'), posix.join(prefix, 'bin')];
49
+ }
50
+ export function installCommand(install, spec) {
51
+ switch (install.manager) {
52
+ case 'npm':
53
+ return {
54
+ command: 'npm',
55
+ args: [
56
+ 'install',
57
+ '--global',
58
+ ...(install.prefix ? ['--prefix', install.prefix] : []),
59
+ spec,
60
+ ],
61
+ };
62
+ case 'pnpm':
63
+ return { command: 'pnpm', args: ['add', '--global', spec] };
64
+ case 'yarn':
65
+ return { command: 'yarn', args: ['global', 'add', spec] };
66
+ case 'bun':
67
+ return { command: 'bun', args: ['add', '--global', spec] };
68
+ }
69
+ }
70
+ /** The command to show a person who has to update by hand. */
71
+ export function manualUpdateCommand(install, packageName, tag) {
72
+ const spec = tag === 'latest' ? packageName : `${packageName}@${tag}`;
73
+ const { command, args } = installCommand({ manager: install?.manager ?? 'npm' }, spec);
74
+ return [command, ...args].join(' ');
75
+ }
76
+ /** Shortest useful reason from a failed install's stderr: npm's error code, else its last real line. */
77
+ export function summarizeInstallError(stderr) {
78
+ const lines = stderr
79
+ .split('\n')
80
+ .map((line) => line.trim())
81
+ .filter((line) => line && !/complete log of this run/i.test(line));
82
+ const line = lines.find((l) => /\bcode E[A-Z0-9]+/.test(l)) ?? lines.at(-1) ?? 'unknown error';
83
+ return line.length > 200 ? `${line.slice(0, 197)}...` : line;
84
+ }
85
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/lib/install.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,9 @@
1
+ export declare function ask(message: string): Promise<string>;
2
+ /**
3
+ * Ask for a value without echoing it, so a pasted key never lands in the
4
+ * terminal's scrollback. Piped input has nothing to hide and is read as is.
5
+ */
6
+ export declare function askSecret(message: string): Promise<string>;
1
7
  export declare function confirm(message: string): Promise<boolean>;
2
8
  export declare function choose<T extends string>(message: string, options: {
3
9
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/lib/prompt.ts"],"names":[],"mappings":"AAIA,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU/D;AAED,wBAAsB,MAAM,CAAC,CAAC,SAAS,MAAM,EAC3C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,EAAE,EACtC,YAAY,EAAE,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAmBZ"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/lib/prompt.ts"],"names":[],"mappings":"AAKA,wBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO1D;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBhE;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK/D;AAED,wBAAsB,MAAM,CAAC,CAAC,SAAS,MAAM,EAC3C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,EAAE,EACtC,YAAY,EAAE,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAmBZ"}
@@ -1,18 +1,45 @@
1
1
  import { createInterface } from 'node:readline/promises';
2
2
  import { stdin, stdout } from 'node:process';
3
+ import { Writable } from 'node:stream';
3
4
  import { isJsonMode } from './output.js';
4
- export async function confirm(message) {
5
- if (isJsonMode())
6
- return true;
5
+ export async function ask(message) {
7
6
  const rl = createInterface({ input: stdin, output: stdout });
8
7
  try {
9
- const answer = await rl.question(message);
10
- return answer.trim().toLowerCase() === 'y';
8
+ return await rl.question(message);
11
9
  }
12
10
  finally {
13
11
  rl.close();
14
12
  }
15
13
  }
14
+ /**
15
+ * Ask for a value without echoing it, so a pasted key never lands in the
16
+ * terminal's scrollback. Piped input has nothing to hide and is read as is.
17
+ */
18
+ export async function askSecret(message) {
19
+ if (!stdin.isTTY)
20
+ return ask(message);
21
+ stdout.write(message);
22
+ const muted = new Writable({ write: (_chunk, _encoding, callback) => callback() });
23
+ const rl = createInterface({ input: stdin, output: muted, terminal: true });
24
+ // With a muted output readline swallows Ctrl+C instead of exiting.
25
+ rl.on('SIGINT', () => {
26
+ stdout.write('\n');
27
+ process.exit(130);
28
+ });
29
+ try {
30
+ return await rl.question('');
31
+ }
32
+ finally {
33
+ rl.close();
34
+ stdout.write('\n');
35
+ }
36
+ }
37
+ export async function confirm(message) {
38
+ if (isJsonMode())
39
+ return true;
40
+ const answer = await ask(message);
41
+ return answer.trim().toLowerCase() === 'y';
42
+ }
16
43
  export async function choose(message, options, defaultValue) {
17
44
  if (isJsonMode())
18
45
  return defaultValue;
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/lib/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe;IAC3C,IAAI,UAAU,EAAE;QAAE,OAAO,IAAI,CAAA;IAE7B,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC5D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACzC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAA;IAC5C,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,OAAe,EACf,OAAsC,EACtC,YAAe;IAEf,IAAI,UAAU,EAAE;QAAE,OAAO,YAAY,CAAA;IAErC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC5D,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;YACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC,CAAA;QACzD,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,OAAO,CAAC,MAAM,KAAK,CAAC,CAAA;QAClE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;QAC7C,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACzC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAA;QAC7B,CAAC;QACD,OAAO,YAAY,CAAA;IACrB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/lib/prompt.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export interface TemplatePayload {
6
6
  description?: string;
7
7
  fieldSchema?: unknown[];
8
8
  nameField?: string | null;
9
+ thumbnailField?: string | null;
9
10
  }
10
11
  export declare function buildTemplatePayload(manifest: Manifest, code: string): TemplatePayload;
11
12
  //# sourceMappingURL=template-data.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-data.d.ts","sourceRoot":"","sources":["../../src/lib/template-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAStF"}
1
+ {"version":3,"file":"template-data.d.ts","sourceRoot":"","sources":["../../src/lib/template-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAUtF"}
@@ -6,6 +6,7 @@ export function buildTemplatePayload(manifest, code) {
6
6
  description: manifest.description,
7
7
  fieldSchema: manifest.fieldSchema,
8
8
  nameField: manifest.nameField,
9
+ thumbnailField: manifest.thumbnailField,
9
10
  };
10
11
  }
11
12
  //# sourceMappingURL=template-data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-data.js","sourceRoot":"","sources":["../../src/lib/template-data.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,oBAAoB,CAAC,QAAkB,EAAE,IAAY;IACnE,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,IAAI;QACJ,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"template-data.js","sourceRoot":"","sources":["../../src/lib/template-data.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,oBAAoB,CAAC,QAAkB,EAAE,IAAY;IACnE,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,IAAI;QACJ,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,cAAc,EAAE,QAAQ,CAAC,cAAc;KACxC,CAAA;AACH,CAAC"}
@@ -1,3 +1,8 @@
1
1
  import type { ValidationResult } from '../types.js';
2
+ /**
3
+ * Compile the sheet the way Polyhedral will, without running it. Errors in the
4
+ * code come back as `valid: false`, with the line (1-based) and column
5
+ * (0-based) when Babel reports them. A failure of the compiler itself throws.
6
+ */
2
7
  export declare function validateLocal(code: string): Promise<ValidationResult>;
3
8
  //# sourceMappingURL=validate-local.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate-local.d.ts","sourceRoot":"","sources":["../../src/lib/validate-local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AASnD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwB3E"}
1
+ {"version":3,"file":"validate-local.d.ts","sourceRoot":"","sources":["../../src/lib/validate-local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAgCnD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmB3E"}
@@ -1,32 +1,63 @@
1
- /** Strips absolute paths that might leak through Babel error messages */
2
- const ABSOLUTE_PATH_RE = /\/[^\s:]*\/(?=\w+\.jsx)/g;
3
- function stripPaths(message) {
4
- return message.replace(ABSOLUTE_PATH_RE, '');
5
- }
1
+ /**
2
+ * How Polyhedral compiles an in-app sheet: @babel/standalone, pinned in
3
+ * package.json to the version the sheet iframe loads, with the options it
4
+ * gives a `<script type="text/babel" data-type="module">`. Keep in step with
5
+ * src/features/custom-sheets/sdk/sheetBabel.ts in the web app;
6
+ * __tests__/validate-local.test.ts checks that the two validators agree.
7
+ *
8
+ * The plugins are built in, so nothing resolves from the author's folder.
9
+ */
10
+ const SHEET_BABEL_OPTIONS = {
11
+ presets: ['react', ['env', { targets: { esmodules: true }, modules: false }]],
12
+ plugins: [
13
+ 'transform-class-properties',
14
+ 'transform-object-rest-spread',
15
+ 'transform-flow-strip-types',
16
+ ],
17
+ };
18
+ /** Babel resolves the filename against its working directory: `/sheet.jsx: …`. */
19
+ const FILENAME_DIRECTORY = /^\S*\/(?=sheet\.jsx: )/;
20
+ const FIXED_SYNTAX_NOTE = "Sheet code compiles with a fixed Babel setup, so this syntax can't be turned on. Rewrite this part without it.";
21
+ /**
22
+ * Compile the sheet the way Polyhedral will, without running it. Errors in the
23
+ * code come back as `valid: false`, with the line (1-based) and column
24
+ * (0-based) when Babel reports them. A failure of the compiler itself throws.
25
+ */
6
26
  export async function validateLocal(code) {
27
+ const babel = await import('@babel/standalone');
7
28
  try {
8
- const babel = await import('@babel/core');
9
- babel.transformSync(code, {
10
- presets: [['@babel/preset-react', { runtime: 'classic' }]],
11
- plugins: ['@babel/plugin-transform-modules-commonjs'],
29
+ babel.transform(code, {
30
+ ...SHEET_BABEL_OPTIONS,
12
31
  filename: 'sheet.jsx',
32
+ highlightCode: false,
13
33
  ast: false,
14
34
  code: false,
15
35
  });
16
36
  return { valid: true };
17
37
  }
18
38
  catch (err) {
19
- if (err && typeof err === 'object' && 'loc' in err) {
20
- const babelErr = err;
21
- return {
22
- valid: false,
23
- error: stripPaths(babelErr.message ?? 'Unknown syntax error'),
24
- line: babelErr.loc?.line,
25
- column: babelErr.loc?.column,
26
- };
27
- }
28
- const message = err instanceof Error ? err.message : 'Unknown validation error';
29
- return { valid: false, error: stripPaths(message) };
39
+ if (!isSheetCompileError(err))
40
+ throw err;
41
+ return {
42
+ valid: false,
43
+ error: authorMessage(err),
44
+ ...(err.loc && { line: err.loc.line, column: err.loc.column }),
45
+ };
30
46
  }
31
47
  }
48
+ function isSheetCompileError(err) {
49
+ if (!(err instanceof Error))
50
+ return false;
51
+ const { code } = err;
52
+ return code === 'BABEL_PARSE_ERROR' || code === 'BABEL_TRANSFORM_ERROR';
53
+ }
54
+ function authorMessage(err) {
55
+ const message = err.message.replace(FILENAME_DIRECTORY, '');
56
+ if (!err.missingPlugin)
57
+ return message;
58
+ // Syntax the setup doesn't enable: Babel's advice is to edit a Babel config,
59
+ // which the author doesn't have. Keep the summary and the code frame.
60
+ const [summary, codeFrame] = message.split('\n\n');
61
+ return [summary, codeFrame, FIXED_SYNTAX_NOTE].join('\n\n');
62
+ }
32
63
  //# sourceMappingURL=validate-local.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate-local.js","sourceRoot":"","sources":["../../src/lib/validate-local.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,MAAM,gBAAgB,GAAG,0BAA0B,CAAA;AAEnD,SAAS,UAAU,CAAC,OAAe;IACjC,OAAO,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;QACzC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE;YACxB,OAAO,EAAE,CAAC,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAC1D,OAAO,EAAE,CAAC,0CAA0C,CAAC;YACrD,QAAQ,EAAE,WAAW;YACrB,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,KAAK;SACZ,CAAC,CAAA;QACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACxB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACnD,MAAM,QAAQ,GAAG,GAAqE,CAAA;YACtF,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,OAAO,IAAI,sBAAsB,CAAC;gBAC7D,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI;gBACxB,MAAM,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM;aAC7B,CAAA;QACH,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAA;QAC/E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAA;IACrD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"validate-local.js","sourceRoot":"","sources":["../../src/lib/validate-local.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAG;IAC1B,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7E,OAAO,EAAE;QACP,4BAA4B;QAC5B,8BAA8B;QAC9B,4BAA4B;KAC7B;CACF,CAAA;AAED,kFAAkF;AAClF,MAAM,kBAAkB,GAAG,wBAAwB,CAAA;AAEnD,MAAM,iBAAiB,GACrB,gHAAgH,CAAA;AAQlH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;IAC/C,IAAI,CAAC;QACH,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;YACpB,GAAG,mBAAmB;YACtB,QAAQ,EAAE,WAAW;YACrB,aAAa,EAAE,KAAK;YACpB,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,KAAK;SACZ,CAAC,CAAA;QACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACxB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAA;QACxC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC;YACzB,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;SAC/D,CAAA;IACH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACzC,MAAM,EAAE,IAAI,EAAE,GAAG,GAAyB,CAAA;IAC1C,OAAO,IAAI,KAAK,mBAAmB,IAAI,IAAI,KAAK,uBAAuB,CAAA;AACzE,CAAC;AAED,SAAS,aAAa,CAAC,GAAsB;IAC3C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAA;IAC3D,IAAI,CAAC,GAAG,CAAC,aAAa;QAAE,OAAO,OAAO,CAAA;IACtC,6EAA6E;IAC7E,sEAAsE;IACtE,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAClD,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC7D,CAAC"}
package/dist/types.d.ts CHANGED
@@ -10,6 +10,7 @@ export interface Manifest {
10
10
  description?: string;
11
11
  fieldSchema?: FieldSchemaEntry[];
12
12
  nameField?: string | null;
13
+ thumbnailField?: string | null;
13
14
  version?: string;
14
15
  }
15
16
  export interface FieldSchemaEntry {
@@ -27,6 +28,7 @@ export interface Template {
27
28
  source: string | null;
28
29
  field_schema: FieldSchemaEntry[] | null;
29
30
  name_field: string | null;
31
+ thumbnail_field: string | null;
30
32
  thumbnail_url: string | null;
31
33
  version: string;
32
34
  user_id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,QAAQ,GAAG,UAAU,CAAA;IAChC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAA;IACvC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAA;IACvC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;CACd"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,QAAQ,GAAG,UAAU,CAAA;IAChC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAA;IACvC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAA;IACvC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;CACd"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=update-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-worker.d.ts","sourceRoot":"","sources":["../src/update-worker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ // Detached child started by lib/auto-update.ts after a command exits. Runs the
2
+ // global install and records the outcome, which the next run reports. Everything
3
+ // it needs is loaded before the install starts replacing this package's files.
4
+ import { spawnSync } from 'node:child_process';
5
+ import { writeFileSync } from 'node:fs';
6
+ import { summarizeInstallError } from './lib/install.js';
7
+ const { command, args, state, stateFile } = JSON.parse(process.argv[2]);
8
+ const result = spawnSync(command, args, {
9
+ encoding: 'utf-8',
10
+ shell: process.platform === 'win32',
11
+ timeout: 5 * 60 * 1000,
12
+ windowsHide: true,
13
+ });
14
+ const outcome = result.status === 0
15
+ ? { ...state, status: 'updated', at: Date.now() }
16
+ : {
17
+ ...state,
18
+ status: 'failed',
19
+ error: result.error?.message ?? summarizeInstallError(result.stderr ?? ''),
20
+ at: Date.now(),
21
+ };
22
+ writeFileSync(stateFile, JSON.stringify(outcome) + '\n', 'utf-8');
23
+ //# sourceMappingURL=update-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-worker.js","sourceRoot":"","sources":["../src/update-worker.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,iFAAiF;AACjF,+EAA+E;AAE/E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEvC,OAAO,EAAE,qBAAqB,EAAuB,MAAM,kBAAkB,CAAA;AAE7E,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAGrE,CAAA;AAED,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE;IACtC,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;IACnC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IACtB,WAAW,EAAE,IAAI;CAClB,CAAC,CAAA;AAEF,MAAM,OAAO,GACX,MAAM,CAAC,MAAM,KAAK,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE;IACjD,CAAC,CAAC;QACE,GAAG,KAAK;QACR,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,qBAAqB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QAC1E,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;KACf,CAAA;AAEP,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polyhedral/cli",
3
- "version": "0.1.0-beta.6",
3
+ "version": "0.1.0-beta.8",
4
4
  "description": "CLI tool for local Polyhedral custom sheet template development",
5
5
  "type": "module",
6
6
  "bin": {
@@ -27,15 +27,17 @@
27
27
  "node": ">=20"
28
28
  },
29
29
  "dependencies": {
30
- "@babel/core": "^7.29.0",
31
- "@babel/plugin-transform-modules-commonjs": "^7.28.6",
32
- "@babel/preset-react": "^7.28.5",
33
- "chokidar": "^4.0.3",
34
- "commander": "^13.1.0",
35
- "open": "^10.1.0"
30
+ "@babel/standalone": "7.26.10",
31
+ "chokidar": "^5.0.0",
32
+ "commander": "^15.0.0",
33
+ "open": "^11.0.4",
34
+ "semver": "^7.8.5",
35
+ "update-notifier": "^7.3.1"
36
36
  },
37
37
  "devDependencies": {
38
- "@types/node": "^20.17.47",
39
- "typescript": "5.9.3"
38
+ "@types/node": "^26.6.5",
39
+ "@types/semver": "^7.8.0",
40
+ "@types/update-notifier": "^6.0.8",
41
+ "typescript": "7.0.2"
40
42
  }
41
43
  }