@wix/web50-cli 0.1.0 → 0.1.2

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 (134) hide show
  1. package/bin/web5.js +1 -2
  2. package/dist/cjs/auth/deviceFlow.js +175 -16
  3. package/dist/cjs/auth/deviceFlow.js.map +1 -1
  4. package/dist/cjs/auth/index.js +93 -10
  5. package/dist/cjs/auth/index.js.map +1 -1
  6. package/dist/cjs/auth/secretStore.js.map +1 -1
  7. package/dist/cjs/cli.js +29 -1
  8. package/dist/cjs/cli.js.map +1 -1
  9. package/dist/cjs/commands/bundle.js +103 -0
  10. package/dist/cjs/commands/bundle.js.map +1 -0
  11. package/dist/cjs/commands/conversation.js +50 -0
  12. package/dist/cjs/commands/conversation.js.map +1 -0
  13. package/dist/cjs/commands/conversationWizard.js +528 -0
  14. package/dist/cjs/commands/conversationWizard.js.map +1 -0
  15. package/dist/cjs/commands/deploy.js +237 -0
  16. package/dist/cjs/commands/deploy.js.map +1 -0
  17. package/dist/cjs/commands/ecom.js +239 -0
  18. package/dist/cjs/commands/ecom.js.map +1 -0
  19. package/dist/cjs/commands/embed.js +118 -0
  20. package/dist/cjs/commands/embed.js.map +1 -0
  21. package/dist/cjs/commands/init.js +65 -29
  22. package/dist/cjs/commands/init.js.map +1 -1
  23. package/dist/cjs/commands/instructions.js +456 -0
  24. package/dist/cjs/commands/instructions.js.map +1 -0
  25. package/dist/cjs/commands/login.js +63 -4
  26. package/dist/cjs/commands/login.js.map +1 -1
  27. package/dist/cjs/commands/logout.js +16 -0
  28. package/dist/cjs/commands/logout.js.map +1 -0
  29. package/dist/cjs/commands/serve.js +122 -0
  30. package/dist/cjs/commands/serve.js.map +1 -0
  31. package/dist/cjs/commands/storybook.js +102 -0
  32. package/dist/cjs/commands/storybook.js.map +1 -0
  33. package/dist/cjs/commands/validate.js +617 -17
  34. package/dist/cjs/commands/validate.js.map +1 -1
  35. package/dist/cjs/commands/whoami.js +48 -0
  36. package/dist/cjs/commands/whoami.js.map +1 -0
  37. package/dist/cjs/templates/aiInstructionsSchema.js +5 -1
  38. package/dist/cjs/templates/aiInstructionsSchema.js.map +1 -1
  39. package/dist/cjs/templates/cmsMappingSchema.js +132 -0
  40. package/dist/cjs/templates/cmsMappingSchema.js.map +1 -0
  41. package/dist/cjs/utils/print.js +12 -0
  42. package/dist/cjs/utils/print.js.map +1 -1
  43. package/dist/cjs/utils/project.js +24 -0
  44. package/dist/cjs/utils/project.js.map +1 -1
  45. package/dist/cjs/utils/wixApi.js +57 -0
  46. package/dist/cjs/utils/wixApi.js.map +1 -0
  47. package/dist/esm/auth/deviceFlow.js +182 -17
  48. package/dist/esm/auth/deviceFlow.js.map +1 -1
  49. package/dist/esm/auth/index.js +98 -11
  50. package/dist/esm/auth/index.js.map +1 -1
  51. package/dist/esm/auth/secretStore.js.map +1 -1
  52. package/dist/esm/cli.js +29 -1
  53. package/dist/esm/cli.js.map +1 -1
  54. package/dist/esm/commands/bundle.js +100 -0
  55. package/dist/esm/commands/bundle.js.map +1 -0
  56. package/dist/esm/commands/conversation.js +44 -0
  57. package/dist/esm/commands/conversation.js.map +1 -0
  58. package/dist/esm/commands/conversationWizard.js +529 -0
  59. package/dist/esm/commands/conversationWizard.js.map +1 -0
  60. package/dist/esm/commands/deploy.js +239 -0
  61. package/dist/esm/commands/deploy.js.map +1 -0
  62. package/dist/esm/commands/ecom.js +234 -0
  63. package/dist/esm/commands/ecom.js.map +1 -0
  64. package/dist/esm/commands/embed.js +112 -0
  65. package/dist/esm/commands/embed.js.map +1 -0
  66. package/dist/esm/commands/init.js +66 -30
  67. package/dist/esm/commands/init.js.map +1 -1
  68. package/dist/esm/commands/instructions.js +459 -0
  69. package/dist/esm/commands/instructions.js.map +1 -0
  70. package/dist/esm/commands/login.js +66 -6
  71. package/dist/esm/commands/login.js.map +1 -1
  72. package/dist/esm/commands/logout.js +12 -0
  73. package/dist/esm/commands/logout.js.map +1 -0
  74. package/dist/esm/commands/serve.js +117 -0
  75. package/dist/esm/commands/serve.js.map +1 -0
  76. package/dist/esm/commands/storybook.js +97 -0
  77. package/dist/esm/commands/storybook.js.map +1 -0
  78. package/dist/esm/commands/validate.js +623 -19
  79. package/dist/esm/commands/validate.js.map +1 -1
  80. package/dist/esm/commands/whoami.js +44 -0
  81. package/dist/esm/commands/whoami.js.map +1 -0
  82. package/dist/esm/templates/aiInstructionsSchema.js +5 -1
  83. package/dist/esm/templates/aiInstructionsSchema.js.map +1 -1
  84. package/dist/esm/templates/cmsMappingSchema.js +128 -0
  85. package/dist/esm/templates/cmsMappingSchema.js.map +1 -0
  86. package/dist/esm/utils/print.js +10 -0
  87. package/dist/esm/utils/print.js.map +1 -1
  88. package/dist/esm/utils/project.js +23 -0
  89. package/dist/esm/utils/project.js.map +1 -1
  90. package/dist/esm/utils/wixApi.js +53 -0
  91. package/dist/esm/utils/wixApi.js.map +1 -0
  92. package/dist/types/auth/deviceFlow.d.ts +3 -1
  93. package/dist/types/auth/deviceFlow.d.ts.map +1 -1
  94. package/dist/types/auth/index.d.ts +6 -1
  95. package/dist/types/auth/index.d.ts.map +1 -1
  96. package/dist/types/auth/secretStore.d.ts +2 -0
  97. package/dist/types/auth/secretStore.d.ts.map +1 -1
  98. package/dist/types/commands/bundle.d.ts +10 -0
  99. package/dist/types/commands/bundle.d.ts.map +1 -0
  100. package/dist/types/commands/conversation.d.ts +3 -0
  101. package/dist/types/commands/conversation.d.ts.map +1 -0
  102. package/dist/types/commands/conversationWizard.d.ts +3 -0
  103. package/dist/types/commands/conversationWizard.d.ts.map +1 -0
  104. package/dist/types/commands/deploy.d.ts +3 -0
  105. package/dist/types/commands/deploy.d.ts.map +1 -0
  106. package/dist/types/commands/ecom.d.ts +3 -0
  107. package/dist/types/commands/ecom.d.ts.map +1 -0
  108. package/dist/types/commands/embed.d.ts +3 -0
  109. package/dist/types/commands/embed.d.ts.map +1 -0
  110. package/dist/types/commands/init.d.ts.map +1 -1
  111. package/dist/types/commands/instructions.d.ts +3 -0
  112. package/dist/types/commands/instructions.d.ts.map +1 -0
  113. package/dist/types/commands/login.d.ts.map +1 -1
  114. package/dist/types/commands/logout.d.ts +3 -0
  115. package/dist/types/commands/logout.d.ts.map +1 -0
  116. package/dist/types/commands/serve.d.ts +3 -0
  117. package/dist/types/commands/serve.d.ts.map +1 -0
  118. package/dist/types/commands/storybook.d.ts +3 -0
  119. package/dist/types/commands/storybook.d.ts.map +1 -0
  120. package/dist/types/commands/validate.d.ts +7 -0
  121. package/dist/types/commands/validate.d.ts.map +1 -1
  122. package/dist/types/commands/whoami.d.ts +3 -0
  123. package/dist/types/commands/whoami.d.ts.map +1 -0
  124. package/dist/types/templates/aiInstructionsSchema.d.ts.map +1 -1
  125. package/dist/types/templates/cmsMappingSchema.d.ts +2 -0
  126. package/dist/types/templates/cmsMappingSchema.d.ts.map +1 -0
  127. package/dist/types/utils/print.d.ts +3 -0
  128. package/dist/types/utils/print.d.ts.map +1 -1
  129. package/dist/types/utils/project.d.ts +12 -0
  130. package/dist/types/utils/project.d.ts.map +1 -1
  131. package/dist/types/utils/wixApi.d.ts +9 -0
  132. package/dist/types/utils/wixApi.d.ts.map +1 -0
  133. package/package.json +5 -5
  134. package/defaults/package.json +0 -42
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.embedCommand = void 0;
6
+ var _commander = require("commander");
7
+ var readline = _interopRequireWildcard(require("readline"));
8
+ var _child_process = require("child_process");
9
+ var _inquirer = _interopRequireDefault(require("inquirer"));
10
+ var _wixApi = require("../utils/wixApi");
11
+ var _print = require("../utils/print");
12
+ var _project = require("../utils/project");
13
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
+ function copyToClipboard(text) {
15
+ const cmd = process.platform === 'win32' ? `echo ${text} | clip` : process.platform === 'darwin' ? 'pbcopy' : 'xclip -selection clipboard';
16
+ (0, _child_process.execSync)(process.platform === 'win32' ? `echo ${text} | clip` : cmd, process.platform === 'win32' ? undefined : {
17
+ input: text
18
+ });
19
+ }
20
+ async function promptCopyToClipboard(text) {
21
+ const rl = readline.createInterface({
22
+ input: process.stdin,
23
+ output: process.stdout
24
+ });
25
+ return new Promise(resolve => {
26
+ rl.question('\nPress Enter to copy to clipboard...', () => {
27
+ rl.close();
28
+ copyToClipboard(text);
29
+ console.log('Copied to clipboard.');
30
+ resolve();
31
+ });
32
+ });
33
+ }
34
+ async function promptForType() {
35
+ const {
36
+ type
37
+ } = await _inquirer.default.prompt([{
38
+ type: 'list',
39
+ name: 'type',
40
+ message: 'Select embed type:',
41
+ choices: [{
42
+ name: 'Script tag',
43
+ value: 'script'
44
+ }, {
45
+ name: 'React component',
46
+ value: 'react'
47
+ }]
48
+ }]);
49
+ return type;
50
+ }
51
+ async function getOrCreateClientId() {
52
+ var _createData$oAuthApp;
53
+ console.log('Searching for client ID...');
54
+ const queryData = await (0, _wixApi.wixRequest)({
55
+ path: '/oauth-app/v1/oauth-apps/query',
56
+ method: 'POST',
57
+ body: {}
58
+ });
59
+ const apps = queryData.oAuthApps ?? [];
60
+ const existing = apps.find(app => app.name === 'web5');
61
+ if (existing) {
62
+ console.log(`Found client ID: ${existing.id}`);
63
+ return existing.id;
64
+ }
65
+ console.log('Client ID not found, creating...');
66
+ const createData = await (0, _wixApi.wixRequest)({
67
+ path: '/oauth-app/v1/oauth-apps',
68
+ method: 'POST',
69
+ body: {
70
+ oAuthApp: {
71
+ name: 'web5',
72
+ application_type: 'WEB_APP'
73
+ }
74
+ }
75
+ });
76
+ const id = (_createData$oAuthApp = createData.oAuthApp) == null ? void 0 : _createData$oAuthApp.id;
77
+ if (!id) {
78
+ throw new Error('Failed to create OAuth app — no ID returned');
79
+ }
80
+ console.log(`Client ID created: ${id}`);
81
+ return id;
82
+ }
83
+ const embedCommand = exports.embedCommand = new _commander.Command('embed').description('Generate embed code for a Web5 component').option('--type <type>', 'Embed type: script or react').option('--client-id <id>', 'Use this client ID instead of fetching from the API').option('--no-clipboard', 'Print to stdout only — skip the clipboard prompt').action(async opts => {
84
+ try {
85
+ const type = opts.type ?? (await promptForType());
86
+ if (type === 'react') {
87
+ console.log('no react for now');
88
+ return;
89
+ }
90
+ const root = (0, _project.findProjectRoot)(process.cwd());
91
+ const config = root ? (0, _project.readConfig)(root) : null;
92
+ const clientId = opts.clientId ?? ((config == null ? void 0 : config.clientId) || undefined) ?? (await getOrCreateClientId());
93
+ if (root && config && config.clientId !== clientId) {
94
+ (0, _project.writeConfig)(root, {
95
+ ...config,
96
+ clientId
97
+ });
98
+ }
99
+ const embedScript = `<script src="https://www.wix.com/embed/v1/component.js" data-client-id="${clientId}"></script>`;
100
+ if ((0, _print.isJsonMode)()) {
101
+ console.log(JSON.stringify({
102
+ type,
103
+ clientId,
104
+ embedCode: embedScript
105
+ }));
106
+ return;
107
+ }
108
+ console.log('\nEmbed script:\n');
109
+ console.log(embedScript);
110
+ if (opts.clipboard !== false && process.stdout.isTTY) {
111
+ await promptCopyToClipboard(embedScript);
112
+ }
113
+ } catch (err) {
114
+ console.error('Error:', err.message);
115
+ process.exit(1);
116
+ }
117
+ });
118
+ //# sourceMappingURL=embed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_commander","require","readline","_interopRequireWildcard","_child_process","_inquirer","_interopRequireDefault","_wixApi","_print","_project","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","copyToClipboard","text","cmd","process","platform","execSync","undefined","input","promptCopyToClipboard","rl","createInterface","stdin","output","stdout","Promise","resolve","question","close","console","log","promptForType","type","inquirer","prompt","name","message","choices","value","getOrCreateClientId","_createData$oAuthApp","queryData","wixRequest","path","method","body","apps","oAuthApps","existing","find","app","id","createData","oAuthApp","application_type","Error","embedCommand","exports","Command","description","option","action","opts","root","findProjectRoot","cwd","config","readConfig","clientId","writeConfig","embedScript","isJsonMode","JSON","stringify","embedCode","clipboard","isTTY","err","error","exit"],"sources":["../../../src/commands/embed.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as readline from 'readline';\nimport { execSync } from 'child_process';\nimport inquirer from 'inquirer';\nimport { wixRequest } from '../utils/wixApi';\nimport { isJsonMode } from '../utils/print';\nimport { findProjectRoot, readConfig, writeConfig } from '../utils/project';\n\nfunction copyToClipboard(text: string): void {\n const cmd =\n process.platform === 'win32'\n ? `echo ${text} | clip`\n : process.platform === 'darwin'\n ? 'pbcopy'\n : 'xclip -selection clipboard';\n\n execSync(\n process.platform === 'win32' ? `echo ${text} | clip` : cmd,\n process.platform === 'win32' ? undefined : { input: text },\n );\n}\n\nasync function promptCopyToClipboard(text: string): Promise<void> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n return new Promise((resolve) => {\n rl.question('\\nPress Enter to copy to clipboard...', () => {\n rl.close();\n copyToClipboard(text);\n console.log('Copied to clipboard.');\n resolve();\n });\n });\n}\n\ntype EmbedType = 'script' | 'react';\n\ninterface OAuthApp {\n id: string;\n name: string;\n}\n\ninterface QueryResponse {\n oAuthApps?: OAuthApp[];\n}\n\ninterface CreateResponse {\n oAuthApp?: OAuthApp;\n}\n\nasync function promptForType(): Promise<EmbedType> {\n const { type } = await inquirer.prompt<{ type: EmbedType }>([\n {\n type: 'list',\n name: 'type',\n message: 'Select embed type:',\n choices: [\n { name: 'Script tag', value: 'script' },\n { name: 'React component', value: 'react' },\n ],\n },\n ]);\n return type;\n}\n\nasync function getOrCreateClientId(): Promise<string> {\n console.log('Searching for client ID...');\n\n const queryData = await wixRequest<QueryResponse>({\n path: '/oauth-app/v1/oauth-apps/query',\n method: 'POST',\n body: {},\n });\n\n const apps = queryData.oAuthApps ?? [];\n const existing = apps.find((app) => app.name === 'web5');\n\n if (existing) {\n console.log(`Found client ID: ${existing.id}`);\n return existing.id;\n }\n\n console.log('Client ID not found, creating...');\n\n const createData = await wixRequest<CreateResponse>({\n path: '/oauth-app/v1/oauth-apps',\n method: 'POST',\n body: { oAuthApp: { name: 'web5', application_type: 'WEB_APP' } },\n });\n\n const id = createData.oAuthApp?.id;\n if (!id) {\n throw new Error('Failed to create OAuth app — no ID returned');\n }\n\n console.log(`Client ID created: ${id}`);\n return id;\n}\n\nexport const embedCommand = new Command('embed')\n .description('Generate embed code for a Web5 component')\n .option('--type <type>', 'Embed type: script or react')\n .option(\n '--client-id <id>',\n 'Use this client ID instead of fetching from the API',\n )\n .option('--no-clipboard', 'Print to stdout only — skip the clipboard prompt')\n .action(\n async (opts: { type?: string; clientId?: string; clipboard: boolean }) => {\n try {\n const type: EmbedType =\n (opts.type as EmbedType) ?? (await promptForType());\n\n if (type === 'react') {\n console.log('no react for now');\n return;\n }\n\n const root = findProjectRoot(process.cwd());\n const config = root ? readConfig(root) : null;\n\n const clientId =\n opts.clientId ??\n (config?.clientId || undefined) ??\n (await getOrCreateClientId());\n\n if (root && config && config.clientId !== clientId) {\n writeConfig(root, { ...config, clientId });\n }\n\n const embedScript = `<script src=\"https://www.wix.com/embed/v1/component.js\" data-client-id=\"${clientId}\"></script>`;\n\n if (isJsonMode()) {\n console.log(\n JSON.stringify({ type, clientId, embedCode: embedScript }),\n );\n return;\n }\n\n console.log('\\nEmbed script:\\n');\n console.log(embedScript);\n\n if (opts.clipboard !== false && process.stdout.isTTY) {\n await promptCopyToClipboard(embedScript);\n }\n } catch (err) {\n console.error('Error:', (err as Error).message);\n process.exit(1);\n }\n },\n );\n"],"mappings":";;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAC,uBAAA,CAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AACA,IAAAI,SAAA,GAAAC,sBAAA,CAAAL,OAAA;AACA,IAAAM,OAAA,GAAAN,OAAA;AACA,IAAAO,MAAA,GAAAP,OAAA;AACA,IAAAQ,QAAA,GAAAR,OAAA;AAA4E,SAAAE,wBAAAO,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAT,uBAAA,YAAAA,CAAAO,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAE5E,SAASkB,eAAeA,CAACC,IAAY,EAAQ;EAC3C,MAAMC,GAAG,GACPC,OAAO,CAACC,QAAQ,KAAK,OAAO,GACxB,QAAQH,IAAI,SAAS,GACrBE,OAAO,CAACC,QAAQ,KAAK,QAAQ,GAC7B,QAAQ,GACR,4BAA4B;EAElC,IAAAC,uBAAQ,EACNF,OAAO,CAACC,QAAQ,KAAK,OAAO,GAAG,QAAQH,IAAI,SAAS,GAAGC,GAAG,EAC1DC,OAAO,CAACC,QAAQ,KAAK,OAAO,GAAGE,SAAS,GAAG;IAAEC,KAAK,EAAEN;EAAK,CAC3D,CAAC;AACH;AAEA,eAAeO,qBAAqBA,CAACP,IAAY,EAAiB;EAChE,MAAMQ,EAAE,GAAGpC,QAAQ,CAACqC,eAAe,CAAC;IAClCH,KAAK,EAAEJ,OAAO,CAACQ,KAAK;IACpBC,MAAM,EAAET,OAAO,CAACU;EAClB,CAAC,CAAC;EACF,OAAO,IAAIC,OAAO,CAAEC,OAAO,IAAK;IAC9BN,EAAE,CAACO,QAAQ,CAAC,uCAAuC,EAAE,MAAM;MACzDP,EAAE,CAACQ,KAAK,CAAC,CAAC;MACVjB,eAAe,CAACC,IAAI,CAAC;MACrBiB,OAAO,CAACC,GAAG,CAAC,sBAAsB,CAAC;MACnCJ,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ;AAiBA,eAAeK,aAAaA,CAAA,EAAuB;EACjD,MAAM;IAAEC;EAAK,CAAC,GAAG,MAAMC,iBAAQ,CAACC,MAAM,CAAsB,CAC1D;IACEF,IAAI,EAAE,MAAM;IACZG,IAAI,EAAE,MAAM;IACZC,OAAO,EAAE,oBAAoB;IAC7BC,OAAO,EAAE,CACP;MAAEF,IAAI,EAAE,YAAY;MAAEG,KAAK,EAAE;IAAS,CAAC,EACvC;MAAEH,IAAI,EAAE,iBAAiB;MAAEG,KAAK,EAAE;IAAQ,CAAC;EAE/C,CAAC,CACF,CAAC;EACF,OAAON,IAAI;AACb;AAEA,eAAeO,mBAAmBA,CAAA,EAAoB;EAAA,IAAAC,oBAAA;EACpDX,OAAO,CAACC,GAAG,CAAC,4BAA4B,CAAC;EAEzC,MAAMW,SAAS,GAAG,MAAM,IAAAC,kBAAU,EAAgB;IAChDC,IAAI,EAAE,gCAAgC;IACtCC,MAAM,EAAE,MAAM;IACdC,IAAI,EAAE,CAAC;EACT,CAAC,CAAC;EAEF,MAAMC,IAAI,GAAGL,SAAS,CAACM,SAAS,IAAI,EAAE;EACtC,MAAMC,QAAQ,GAAGF,IAAI,CAACG,IAAI,CAAEC,GAAG,IAAKA,GAAG,CAACf,IAAI,KAAK,MAAM,CAAC;EAExD,IAAIa,QAAQ,EAAE;IACZnB,OAAO,CAACC,GAAG,CAAC,oBAAoBkB,QAAQ,CAACG,EAAE,EAAE,CAAC;IAC9C,OAAOH,QAAQ,CAACG,EAAE;EACpB;EAEAtB,OAAO,CAACC,GAAG,CAAC,kCAAkC,CAAC;EAE/C,MAAMsB,UAAU,GAAG,MAAM,IAAAV,kBAAU,EAAiB;IAClDC,IAAI,EAAE,0BAA0B;IAChCC,MAAM,EAAE,MAAM;IACdC,IAAI,EAAE;MAAEQ,QAAQ,EAAE;QAAElB,IAAI,EAAE,MAAM;QAAEmB,gBAAgB,EAAE;MAAU;IAAE;EAClE,CAAC,CAAC;EAEF,MAAMH,EAAE,IAAAX,oBAAA,GAAGY,UAAU,CAACC,QAAQ,qBAAnBb,oBAAA,CAAqBW,EAAE;EAClC,IAAI,CAACA,EAAE,EAAE;IACP,MAAM,IAAII,KAAK,CAAC,6CAA6C,CAAC;EAChE;EAEA1B,OAAO,CAACC,GAAG,CAAC,sBAAsBqB,EAAE,EAAE,CAAC;EACvC,OAAOA,EAAE;AACX;AAEO,MAAMK,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG,IAAIE,kBAAO,CAAC,OAAO,CAAC,CAC7CC,WAAW,CAAC,0CAA0C,CAAC,CACvDC,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC,CACtDA,MAAM,CACL,kBAAkB,EAClB,qDACF,CAAC,CACAA,MAAM,CAAC,gBAAgB,EAAE,kDAAkD,CAAC,CAC5EC,MAAM,CACL,MAAOC,IAA8D,IAAK;EACxE,IAAI;IACF,MAAM9B,IAAe,GAClB8B,IAAI,CAAC9B,IAAI,KAAmB,MAAMD,aAAa,CAAC,CAAC,CAAC;IAErD,IAAIC,IAAI,KAAK,OAAO,EAAE;MACpBH,OAAO,CAACC,GAAG,CAAC,kBAAkB,CAAC;MAC/B;IACF;IAEA,MAAMiC,IAAI,GAAG,IAAAC,wBAAe,EAAClD,OAAO,CAACmD,GAAG,CAAC,CAAC,CAAC;IAC3C,MAAMC,MAAM,GAAGH,IAAI,GAAG,IAAAI,mBAAU,EAACJ,IAAI,CAAC,GAAG,IAAI;IAE7C,MAAMK,QAAQ,GACZN,IAAI,CAACM,QAAQ,KACZ,CAAAF,MAAM,oBAANA,MAAM,CAAEE,QAAQ,KAAInD,SAAS,CAAC,KAC9B,MAAMsB,mBAAmB,CAAC,CAAC,CAAC;IAE/B,IAAIwB,IAAI,IAAIG,MAAM,IAAIA,MAAM,CAACE,QAAQ,KAAKA,QAAQ,EAAE;MAClD,IAAAC,oBAAW,EAACN,IAAI,EAAE;QAAE,GAAGG,MAAM;QAAEE;MAAS,CAAC,CAAC;IAC5C;IAEA,MAAME,WAAW,GAAG,2EAA2EF,QAAQ,aAAa;IAEpH,IAAI,IAAAG,iBAAU,EAAC,CAAC,EAAE;MAChB1C,OAAO,CAACC,GAAG,CACT0C,IAAI,CAACC,SAAS,CAAC;QAAEzC,IAAI;QAAEoC,QAAQ;QAAEM,SAAS,EAAEJ;MAAY,CAAC,CAC3D,CAAC;MACD;IACF;IAEAzC,OAAO,CAACC,GAAG,CAAC,mBAAmB,CAAC;IAChCD,OAAO,CAACC,GAAG,CAACwC,WAAW,CAAC;IAExB,IAAIR,IAAI,CAACa,SAAS,KAAK,KAAK,IAAI7D,OAAO,CAACU,MAAM,CAACoD,KAAK,EAAE;MACpD,MAAMzD,qBAAqB,CAACmD,WAAW,CAAC;IAC1C;EACF,CAAC,CAAC,OAAOO,GAAG,EAAE;IACZhD,OAAO,CAACiD,KAAK,CAAC,QAAQ,EAAGD,GAAG,CAAWzC,OAAO,CAAC;IAC/CtB,OAAO,CAACiE,IAAI,CAAC,CAAC,CAAC;EACjB;AACF,CACF,CAAC","ignoreList":[]}
@@ -8,10 +8,25 @@ var _inquirer = _interopRequireDefault(require("inquirer"));
8
8
  var path = _interopRequireWildcard(require("path"));
9
9
  var fs = _interopRequireWildcard(require("fs"));
10
10
  var _promises = require("fs/promises");
11
+ var _chalk = _interopRequireDefault(require("chalk"));
11
12
  var _print = require("../utils/print");
12
13
  var _fs2 = require("../utils/fs");
14
+ var _auth = require("../auth");
15
+ var _deviceFlow = require("../auth/deviceFlow");
13
16
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
17
  const DEFAULTS_DIR = path.join(__dirname, '../../../defaults');
18
+ function printBanner() {
19
+ const logo = ['██╗ ██╗ ███████╗ ██████╗ ███████╗', '██║ ██║ ██╔════╝ ██╔══██╗ ██╔════╝', '██║ █╗ ██║ █████╗ ██████╔╝ ███████╗', '██║███╗██║ ██╔══╝ ██╔══██╗ ╚════██║', '╚███╔███╔╝ ███████╗ ██████╔╝ ███████║', ' ╚══╝╚══╝ ╚══════╝ ╚═════╝ ╚══════╝'];
20
+ console.log('');
21
+ for (const line of logo) {
22
+ console.log(_chalk.default.cyan(line));
23
+ }
24
+ console.log('');
25
+ console.log(_chalk.default.dim(' Build AI-powered client components for the Wix platform.'));
26
+ console.log(_chalk.default.dim(' Define sections, actions, and AI instructions —'));
27
+ console.log(_chalk.default.dim(' the platform interprets user intent and delivers personalized experiences.'));
28
+ console.log('');
29
+ }
15
30
  async function copyDefault(srcRelative, destAbsolute, substitutions = {}) {
16
31
  const srcPath = path.join(DEFAULTS_DIR, srcRelative);
17
32
  let content = await (0, _promises.readFile)(srcPath, 'utf8');
@@ -20,6 +35,13 @@ async function copyDefault(srcRelative, destAbsolute, substitutions = {}) {
20
35
  }
21
36
  await (0, _fs2.atomicWrite)(destAbsolute, content);
22
37
  }
38
+ async function copyDefaultTree(srcRelative, destAbsolute, filter) {
39
+ const srcPath = path.join(DEFAULTS_DIR, srcRelative);
40
+ await (0, _promises.cp)(srcPath, destAbsolute, {
41
+ recursive: true,
42
+ filter
43
+ });
44
+ }
23
45
  function findExistingConfig(startDir) {
24
46
  let current = startDir;
25
47
  let parent = path.dirname(current);
@@ -53,8 +75,14 @@ async function resolveString(flag, isTTY, question, opts = {}) {
53
75
  const answers = await _inquirer.default.prompt(question);
54
76
  return answers.value ?? opts.defaultValue ?? '';
55
77
  }
56
- const initCommand = exports.initCommand = new _commander.Command('init').description('Scaffold a new Web5 client component library').option('--mode <mode>', 'scaffold mode: defaults or scratch', 'defaults').option('--name <name>', 'npm package name (e.g. @wix/my-components)').option('--display-name <displayName>', 'human-readable display name').option('--dir <dir>', 'output directory (default: derived from package name)').action(async opts => {
78
+ const initCommand = exports.initCommand = new _commander.Command('init').description('Scaffold a new Web5 client component library').option('--mode <mode>', 'scaffold mode: defaults or scratch', 'defaults').option('--name <name>', 'npm package name (e.g. @wix/my-components)').option('--display-name <displayName>', 'human-readable display name').option('--dir <dir>', 'output directory (default: derived from package name)').option('--msid <msid>', 'Wix site ID to bind this project to').action(async opts => {
57
79
  try {
80
+ const authed = await (0, _auth.isAuthenticated)();
81
+ if (!authed) {
82
+ (0, _print.error)('You must be logged in. Run `web5 login` first.');
83
+ process.exit(1);
84
+ }
85
+ printBanner();
58
86
  const existing = findExistingConfig(process.cwd());
59
87
  if (existing) {
60
88
  (0, _print.warn)(`web5.config.json already exists at ${existing}`);
@@ -73,27 +101,32 @@ const initCommand = exports.initCommand = new _commander.Command('init').descrip
73
101
  exitMsg: '--name is required in non-interactive mode'
74
102
  });
75
103
 
76
- // ── Collect: display name ─────────────────────────────────────────────
77
- const defaultDisplay = name.split('/').pop().replace(/-/g, ' ');
78
- const displayName = await resolveString(opts.displayName, isTTY, [{
79
- type: 'input',
80
- name: 'value',
81
- message: 'Display name:',
82
- default: defaultDisplay
83
- }], {
84
- defaultValue: defaultDisplay
85
- });
86
-
87
- // ── Collect: output directory ─────────────────────────────────────────
88
- const defaultDir = name.split('/').pop();
89
- const dir = await resolveString(opts.dir, isTTY, [{
90
- type: 'input',
91
- name: 'value',
92
- message: 'Output directory:',
93
- default: defaultDir
94
- }], {
95
- defaultValue: defaultDir
96
- });
104
+ // ── Derive: display name and output directory from package name ───────
105
+ const stem = name.split('/').pop();
106
+ const displayName = opts.displayName ?? stem.replace(/-/g, ' ');
107
+ const dir = opts.dir ?? stem;
108
+ let msid;
109
+ if (opts.msid) {
110
+ msid = opts.msid;
111
+ } else if (isTTY) {
112
+ const token = await (0, _auth.getToken)();
113
+ msid = await (0, _deviceFlow.promptSiteSelection)(token);
114
+ } else {
115
+ (0, _print.error)('--msid is required in non-interactive mode');
116
+ process.exit(1);
117
+ }
118
+ let platformType;
119
+ if (isTTY) {
120
+ const answers = await _inquirer.default.prompt([{
121
+ type: 'list',
122
+ name: 'value',
123
+ message: 'Platform type:',
124
+ choices: ['Content', 'Ecommerce']
125
+ }]);
126
+ platformType = answers.value;
127
+ } else {
128
+ platformType = 'Content';
129
+ }
97
130
  const outDir = path.resolve(process.cwd(), dir);
98
131
  if (fs.existsSync(outDir) && fs.readdirSync(outDir).length > 0) {
99
132
  (0, _print.warn)(`Directory ${outDir} already exists and is not empty`);
@@ -102,21 +135,24 @@ const initCommand = exports.initCommand = new _commander.Command('init').descrip
102
135
  void mode;
103
136
  const subs = {
104
137
  NAME: name,
105
- DISPLAY_NAME: displayName
138
+ DISPLAY_NAME: displayName,
139
+ MSID: msid,
140
+ PLATFORM_TYPE: platformType
106
141
  };
107
142
 
108
143
  // ── Root config files ─────────────────────────────────────────────────
109
- await copyDefault('web5.config.json', path.join(outDir, 'web5.config.json'), subs);
110
- await copyDefault('package.json', path.join(outDir, 'package.json'), subs);
144
+ await copyDefault('.web5.config.json', path.join(outDir, 'web5.config.json'), subs);
145
+ await copyDefault('package.template.json', path.join(outDir, 'package.json'), subs);
111
146
  await copyDefault('tsconfig.json', path.join(outDir, 'tsconfig.json'));
112
147
 
113
148
  // ── src/ ──────────────────────────────────────────────────────────────
114
149
  await copyDefault('src/index.ts', path.join(outDir, 'src', 'index.ts'), subs);
115
150
  await copyDefault('src/createRegistry.ts', path.join(outDir, 'src', 'createRegistry.ts'));
116
- await copyDefault('src/components/types.ts', path.join(outDir, 'src', 'components', 'types.ts'));
117
-
151
+ await copyDefaultTree('src/components', path.join(outDir, 'src', 'components'));
152
+ await copyDefaultTree('.storybook', path.join(outDir, '.storybook'));
153
+ await copyDefault('src/vite.cdn.config.ts', path.join(outDir, 'src', 'vite.cdn.config.ts'));
118
154
  // ── src/configuration/ ────────────────────────────────────────────────
119
- await copyDefault('src/configuration/client.config.ts', path.join(outDir, 'src', 'configuration', 'client.config.ts'));
155
+ await copyDefault('src/client.config.ts', path.join(outDir, 'src', 'client.config.ts'));
120
156
  await copyDefault('src/configuration/ai/prompt-instructions.yaml', path.join(outDir, 'src', 'configuration', 'ai', 'prompt-instructions.yaml'));
121
157
  await copyDefault('src/configuration/cms/cms-mapping.yaml', path.join(outDir, 'src', 'configuration', 'cms', 'cms-mapping.yaml'));
122
158
  await copyDefault('src/configuration/cms/cms-schema.yaml', path.join(outDir, 'src', 'configuration', 'cms', 'cms-schema.yaml'));
@@ -152,7 +188,7 @@ const initCommand = exports.initCommand = new _commander.Command('init').descrip
152
188
  console.log('');
153
189
  (0, _print.info)('Next steps:');
154
190
  (0, _print.info)(` cd ${dir}`);
155
- (0, _print.info)(' yarn install');
191
+ (0, _print.info)(' npm install');
156
192
  } catch (err_) {
157
193
  (0, _print.error)(err_ instanceof Error ? err_.message : String(err_));
158
194
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"names":["_commander","require","_inquirer","_interopRequireDefault","path","_interopRequireWildcard","fs","_promises","_print","_fs2","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULTS_DIR","join","__dirname","copyDefault","srcRelative","destAbsolute","substitutions","srcPath","content","readFile","token","value","entries","replaceAll","atomicWrite","findExistingConfig","startDir","current","parent","dirname","candidate","existsSync","resolveString","flag","isTTY","question","opts","defaultValue","undefined","exitMsg","error","process","exit","answers","inquirer","prompt","initCommand","exports","Command","description","option","action","existing","cwd","warn","Boolean","stdin","mode","name","type","message","validate","v","trim","length","defaultDisplay","split","pop","replace","displayName","defaultDir","dir","outDir","resolve","readdirSync","info","subs","NAME","DISPLAY_NAME","skill","folder","componentDir","ensureDir","success","console","log","err_","Error","String"],"sources":["../../../src/commands/init.ts"],"sourcesContent":["import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { readFile } from 'fs/promises';\nimport { success, error, info, warn } from '../utils/print';\nimport { atomicWrite, ensureDir } from '../utils/fs';\n\nconst DEFAULTS_DIR = path.join(__dirname, '../../../defaults');\n\ntype Mode = 'defaults' | 'scratch';\n\ninterface InitOptions {\n mode?: Mode;\n name?: string;\n displayName?: string;\n dir?: string;\n}\n\nasync function copyDefault(\n srcRelative: string,\n destAbsolute: string,\n substitutions: Record<string, string> = {},\n): Promise<void> {\n const srcPath = path.join(DEFAULTS_DIR, srcRelative);\n let content = await readFile(srcPath, 'utf8');\n for (const [token, value] of Object.entries(substitutions)) {\n content = content.replaceAll(`{{${token}}}`, value);\n }\n await atomicWrite(destAbsolute, content);\n}\n\nfunction findExistingConfig(startDir: string): string | null {\n let current = startDir;\n let parent = path.dirname(current);\n while (current !== parent) {\n const candidate = path.join(current, 'web5.config.json');\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n current = parent;\n parent = path.dirname(current);\n }\n const candidate = path.join(current, 'web5.config.json');\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n return null;\n}\n\nasync function resolveString(\n flag: string | undefined,\n isTTY: boolean,\n question: Parameters<typeof inquirer.prompt>[0],\n opts: { defaultValue?: string; exitMsg?: string } = {},\n): Promise<string> {\n if (flag) {\n return flag;\n }\n if (!isTTY) {\n if (opts.defaultValue !== undefined) {\n return opts.defaultValue;\n }\n if (opts.exitMsg) {\n error(opts.exitMsg);\n }\n process.exit(1);\n }\n const answers = await inquirer.prompt<{ value: string }>(question);\n return answers.value ?? opts.defaultValue ?? '';\n}\n\nexport const initCommand = new Command('init')\n .description('Scaffold a new Web5 client component library')\n .option('--mode <mode>', 'scaffold mode: defaults or scratch', 'defaults')\n .option('--name <name>', 'npm package name (e.g. @wix/my-components)')\n .option('--display-name <displayName>', 'human-readable display name')\n .option(\n '--dir <dir>',\n 'output directory (default: derived from package name)',\n )\n .action(async (opts: InitOptions) => {\n try {\n const existing = findExistingConfig(process.cwd());\n if (existing) {\n warn(`web5.config.json already exists at ${existing}`);\n warn('Proceeding will create a nested project.');\n }\n\n const isTTY = Boolean(process.stdin.isTTY);\n const mode: Mode = opts.mode ?? 'defaults';\n\n // ── Collect: package name ─────────────────────────────────────────────\n const name = await resolveString(\n opts.name,\n isTTY,\n [\n {\n type: 'input',\n name: 'value',\n message: 'Package name (e.g. @wix/my-components):',\n validate: (v: string) =>\n v.trim().length > 0 ? true : 'Package name is required',\n },\n ],\n { exitMsg: '--name is required in non-interactive mode' },\n );\n\n // ── Collect: display name ─────────────────────────────────────────────\n const defaultDisplay = name.split('/').pop()!.replace(/-/g, ' ');\n const displayName = await resolveString(\n opts.displayName,\n isTTY,\n [\n {\n type: 'input',\n name: 'value',\n message: 'Display name:',\n default: defaultDisplay,\n },\n ],\n { defaultValue: defaultDisplay },\n );\n\n // ── Collect: output directory ─────────────────────────────────────────\n const defaultDir = name.split('/').pop()!;\n const dir = await resolveString(\n opts.dir,\n isTTY,\n [\n {\n type: 'input',\n name: 'value',\n message: 'Output directory:',\n default: defaultDir,\n },\n ],\n { defaultValue: defaultDir },\n );\n\n const outDir = path.resolve(process.cwd(), dir);\n\n if (fs.existsSync(outDir) && fs.readdirSync(outDir).length > 0) {\n warn(`Directory ${outDir} already exists and is not empty`);\n }\n\n info(`Scaffolding ${name} \\u2192 ${outDir}`);\n void mode;\n\n const subs = { NAME: name, DISPLAY_NAME: displayName };\n\n // ── Root config files ─────────────────────────────────────────────────\n await copyDefault(\n 'web5.config.json',\n path.join(outDir, 'web5.config.json'),\n subs,\n );\n await copyDefault(\n 'package.json',\n path.join(outDir, 'package.json'),\n subs,\n );\n await copyDefault('tsconfig.json', path.join(outDir, 'tsconfig.json'));\n\n // ── src/ ──────────────────────────────────────────────────────────────\n await copyDefault(\n 'src/index.ts',\n path.join(outDir, 'src', 'index.ts'),\n subs,\n );\n await copyDefault(\n 'src/createRegistry.ts',\n path.join(outDir, 'src', 'createRegistry.ts'),\n );\n await copyDefault(\n 'src/components/types.ts',\n path.join(outDir, 'src', 'components', 'types.ts'),\n );\n\n // ── src/configuration/ ────────────────────────────────────────────────\n await copyDefault(\n 'src/configuration/client.config.ts',\n path.join(outDir, 'src', 'configuration', 'client.config.ts'),\n );\n await copyDefault(\n 'src/configuration/ai/prompt-instructions.yaml',\n path.join(\n outDir,\n 'src',\n 'configuration',\n 'ai',\n 'prompt-instructions.yaml',\n ),\n );\n await copyDefault(\n 'src/configuration/cms/cms-mapping.yaml',\n path.join(outDir, 'src', 'configuration', 'cms', 'cms-mapping.yaml'),\n );\n await copyDefault(\n 'src/configuration/cms/cms-schema.yaml',\n path.join(outDir, 'src', 'configuration', 'cms', 'cms-schema.yaml'),\n );\n\n // ── src/actions/ ──────────────────────────────────────────────────────\n await copyDefault(\n 'src/actions/index.ts',\n path.join(outDir, 'src', 'actions', 'index.ts'),\n );\n await copyDefault(\n 'src/actions/bookDemoAction.ts',\n path.join(outDir, 'src', 'actions', 'bookDemoAction.ts'),\n );\n await copyDefault(\n 'src/actions/book-demo.yaml',\n path.join(outDir, 'src', 'actions', 'book-demo.yaml'),\n );\n await copyDefault(\n 'src/actions/contactAction.ts',\n path.join(outDir, 'src', 'actions', 'contactAction.ts'),\n );\n await copyDefault(\n 'src/actions/contact-action.yaml',\n path.join(outDir, 'src', 'actions', 'contact-action.yaml'),\n );\n\n // ── AGENTS.md ─────────────────────────────────────────────────────────\n await copyDefault('AGENTS.md', path.join(outDir, 'AGENTS.md'), subs);\n\n // ── docs/ ─────────────────────────────────────────────────────────────\n await copyDefault(\n 'docs/architecture.md',\n path.join(outDir, 'docs', 'architecture.md'),\n subs,\n );\n await copyDefault(\n 'docs/api-reference.md',\n path.join(outDir, 'docs', 'api-reference.md'),\n subs,\n );\n\n // ── skills/ ───────────────────────────────────────────────────────────\n for (const skill of [\n 'action-add',\n 'action-remove',\n 'action-update',\n 'section-add',\n 'section-remove',\n 'section-update',\n 'slot-add',\n ]) {\n await copyDefault(\n `skills/${skill}.md`,\n path.join(outDir, 'skills', `${skill}.md`),\n );\n }\n\n // ── Component subdirectories ──────────────────────────────────────────\n for (const folder of ['base', 'slots', 'sections']) {\n const componentDir = path.join(outDir, 'src', 'components', folder);\n await ensureDir(componentDir);\n await atomicWrite(path.join(componentDir, '.gitkeep'), '');\n }\n\n // ── Done ──────────────────────────────────────────────────────────────\n success(`Created ${name}`);\n console.log('');\n info('Next steps:');\n info(` cd ${dir}`);\n info(' yarn install');\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n });\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_commander","require","_inquirer","_interopRequireDefault","path","_interopRequireWildcard","fs","_promises","_chalk","_print","_fs2","_auth","_deviceFlow","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULTS_DIR","join","__dirname","printBanner","logo","console","log","line","chalk","cyan","dim","copyDefault","srcRelative","destAbsolute","substitutions","srcPath","content","readFile","token","value","entries","replaceAll","atomicWrite","copyDefaultTree","filter","cp","recursive","findExistingConfig","startDir","current","parent","dirname","candidate","existsSync","resolveString","flag","isTTY","question","opts","defaultValue","undefined","exitMsg","error","process","exit","answers","inquirer","prompt","initCommand","exports","Command","description","option","action","authed","isAuthenticated","existing","cwd","warn","Boolean","stdin","mode","name","type","message","validate","v","trim","length","stem","split","pop","displayName","replace","dir","msid","getToken","promptSiteSelection","platformType","choices","outDir","resolve","readdirSync","info","subs","NAME","DISPLAY_NAME","MSID","PLATFORM_TYPE","skill","folder","componentDir","ensureDir","success","err_","Error","String"],"sources":["../../../src/commands/init.ts"],"sourcesContent":["import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { readFile, cp } from 'fs/promises';\nimport chalk from 'chalk';\nimport { success, error, info, warn } from '../utils/print';\nimport { atomicWrite, ensureDir } from '../utils/fs';\nimport { isAuthenticated, getToken } from '../auth';\nimport { promptSiteSelection } from '../auth/deviceFlow';\n\nconst DEFAULTS_DIR = path.join(__dirname, '../../../defaults');\n\nfunction printBanner(): void {\n const logo = [\n '██╗ ██╗ ███████╗ ██████╗ ███████╗',\n '██║ ██║ ██╔════╝ ██╔══██╗ ██╔════╝',\n '██║ █╗ ██║ █████╗ ██████╔╝ ███████╗',\n '██║███╗██║ ██╔══╝ ██╔══██╗ ╚════██║',\n '╚███╔███╔╝ ███████╗ ██████╔╝ ███████║',\n ' ╚══╝╚══╝ ╚══════╝ ╚═════╝ ╚══════╝',\n ];\n console.log('');\n for (const line of logo) {\n console.log(chalk.cyan(line));\n }\n console.log('');\n console.log(\n chalk.dim(' Build AI-powered client components for the Wix platform.'),\n );\n console.log(chalk.dim(' Define sections, actions, and AI instructions —'));\n console.log(\n chalk.dim(\n ' the platform interprets user intent and delivers personalized experiences.',\n ),\n );\n console.log('');\n}\n\ntype Mode = 'defaults' | 'scratch';\n\ninterface InitOptions {\n mode?: Mode;\n name?: string;\n displayName?: string;\n dir?: string;\n msid?: string;\n}\n\nasync function copyDefault(\n srcRelative: string,\n destAbsolute: string,\n substitutions: Record<string, string> = {},\n): Promise<void> {\n const srcPath = path.join(DEFAULTS_DIR, srcRelative);\n let content = await readFile(srcPath, 'utf8');\n for (const [token, value] of Object.entries(substitutions)) {\n content = content.replaceAll(`{{${token}}}`, value);\n }\n await atomicWrite(destAbsolute, content);\n}\n\nasync function copyDefaultTree(\n srcRelative: string,\n destAbsolute: string,\n filter?: (src: string, dest: string) => boolean,\n): Promise<void> {\n const srcPath = path.join(DEFAULTS_DIR, srcRelative);\n await cp(srcPath, destAbsolute, { recursive: true, filter });\n}\n\nfunction findExistingConfig(startDir: string): string | null {\n let current = startDir;\n let parent = path.dirname(current);\n while (current !== parent) {\n const candidate = path.join(current, 'web5.config.json');\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n current = parent;\n parent = path.dirname(current);\n }\n const candidate = path.join(current, 'web5.config.json');\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n return null;\n}\n\nasync function resolveString(\n flag: string | undefined,\n isTTY: boolean,\n question: Parameters<typeof inquirer.prompt>[0],\n opts: { defaultValue?: string; exitMsg?: string } = {},\n): Promise<string> {\n if (flag) {\n return flag;\n }\n if (!isTTY) {\n if (opts.defaultValue !== undefined) {\n return opts.defaultValue;\n }\n if (opts.exitMsg) {\n error(opts.exitMsg);\n }\n process.exit(1);\n }\n const answers = await inquirer.prompt<{ value: string }>(question);\n return answers.value ?? opts.defaultValue ?? '';\n}\n\nexport const initCommand = new Command('init')\n .description('Scaffold a new Web5 client component library')\n .option('--mode <mode>', 'scaffold mode: defaults or scratch', 'defaults')\n .option('--name <name>', 'npm package name (e.g. @wix/my-components)')\n .option('--display-name <displayName>', 'human-readable display name')\n .option(\n '--dir <dir>',\n 'output directory (default: derived from package name)',\n )\n .option('--msid <msid>', 'Wix site ID to bind this project to')\n .action(async (opts: InitOptions) => {\n try {\n const authed = await isAuthenticated();\n if (!authed) {\n error('You must be logged in. Run `web5 login` first.');\n process.exit(1);\n }\n\n printBanner();\n\n const existing = findExistingConfig(process.cwd());\n if (existing) {\n warn(`web5.config.json already exists at ${existing}`);\n warn('Proceeding will create a nested project.');\n }\n\n const isTTY = Boolean(process.stdin.isTTY);\n const mode: Mode = opts.mode ?? 'defaults';\n\n // ── Collect: package name ─────────────────────────────────────────────\n const name = await resolveString(\n opts.name,\n isTTY,\n [\n {\n type: 'input',\n name: 'value',\n message: 'Package name (e.g. @wix/my-components):',\n validate: (v: string) =>\n v.trim().length > 0 ? true : 'Package name is required',\n },\n ],\n { exitMsg: '--name is required in non-interactive mode' },\n );\n\n // ── Derive: display name and output directory from package name ───────\n const stem = name.split('/').pop()!;\n const displayName = opts.displayName ?? stem.replace(/-/g, ' ');\n const dir = opts.dir ?? stem;\n\n let msid: string;\n if (opts.msid) {\n msid = opts.msid;\n } else if (isTTY) {\n const token = await getToken();\n msid = await promptSiteSelection(token!);\n } else {\n error('--msid is required in non-interactive mode');\n process.exit(1);\n }\n\n let platformType: string;\n if (isTTY) {\n const answers = await inquirer.prompt<{ value: string }>([\n {\n type: 'list',\n name: 'value',\n message: 'Platform type:',\n choices: ['Content', 'Ecommerce'],\n },\n ]);\n platformType = answers.value;\n } else {\n platformType = 'Content';\n }\n\n const outDir = path.resolve(process.cwd(), dir);\n\n if (fs.existsSync(outDir) && fs.readdirSync(outDir).length > 0) {\n warn(`Directory ${outDir} already exists and is not empty`);\n }\n\n info(`Scaffolding ${name} \\u2192 ${outDir}`);\n void mode;\n\n const subs = {\n NAME: name,\n DISPLAY_NAME: displayName,\n MSID: msid,\n PLATFORM_TYPE: platformType,\n };\n\n // ── Root config files ─────────────────────────────────────────────────\n await copyDefault(\n '.web5.config.json',\n path.join(outDir, 'web5.config.json'),\n subs,\n );\n await copyDefault(\n 'package.template.json',\n path.join(outDir, 'package.json'),\n subs,\n );\n await copyDefault('tsconfig.json', path.join(outDir, 'tsconfig.json'));\n\n // ── src/ ──────────────────────────────────────────────────────────────\n await copyDefault(\n 'src/index.ts',\n path.join(outDir, 'src', 'index.ts'),\n subs,\n );\n await copyDefault(\n 'src/createRegistry.ts',\n path.join(outDir, 'src', 'createRegistry.ts'),\n );\n await copyDefaultTree(\n 'src/components',\n path.join(outDir, 'src', 'components'),\n );\n await copyDefaultTree('.storybook', path.join(outDir, '.storybook'));\n await copyDefault(\n 'src/vite.cdn.config.ts',\n path.join(outDir, 'src', 'vite.cdn.config.ts'),\n );\n // ── src/configuration/ ────────────────────────────────────────────────\n await copyDefault(\n 'src/client.config.ts',\n path.join(outDir, 'src', 'client.config.ts'),\n );\n await copyDefault(\n 'src/configuration/ai/prompt-instructions.yaml',\n path.join(\n outDir,\n 'src',\n 'configuration',\n 'ai',\n 'prompt-instructions.yaml',\n ),\n );\n await copyDefault(\n 'src/configuration/cms/cms-mapping.yaml',\n path.join(outDir, 'src', 'configuration', 'cms', 'cms-mapping.yaml'),\n );\n await copyDefault(\n 'src/configuration/cms/cms-schema.yaml',\n path.join(outDir, 'src', 'configuration', 'cms', 'cms-schema.yaml'),\n );\n\n // ── src/actions/ ──────────────────────────────────────────────────────\n await copyDefault(\n 'src/actions/index.ts',\n path.join(outDir, 'src', 'actions', 'index.ts'),\n );\n await copyDefault(\n 'src/actions/bookDemoAction.ts',\n path.join(outDir, 'src', 'actions', 'bookDemoAction.ts'),\n );\n await copyDefault(\n 'src/actions/book-demo.yaml',\n path.join(outDir, 'src', 'actions', 'book-demo.yaml'),\n );\n await copyDefault(\n 'src/actions/contactAction.ts',\n path.join(outDir, 'src', 'actions', 'contactAction.ts'),\n );\n await copyDefault(\n 'src/actions/contact-action.yaml',\n path.join(outDir, 'src', 'actions', 'contact-action.yaml'),\n );\n\n // ── AGENTS.md ─────────────────────────────────────────────────────────\n await copyDefault('AGENTS.md', path.join(outDir, 'AGENTS.md'), subs);\n\n // ── docs/ ─────────────────────────────────────────────────────────────\n await copyDefault(\n 'docs/architecture.md',\n path.join(outDir, 'docs', 'architecture.md'),\n subs,\n );\n await copyDefault(\n 'docs/api-reference.md',\n path.join(outDir, 'docs', 'api-reference.md'),\n subs,\n );\n\n // ── skills/ ───────────────────────────────────────────────────────────\n for (const skill of [\n 'action-add',\n 'action-remove',\n 'action-update',\n 'section-add',\n 'section-remove',\n 'section-update',\n 'slot-add',\n ]) {\n await copyDefault(\n `skills/${skill}.md`,\n path.join(outDir, 'skills', `${skill}.md`),\n );\n }\n\n // ── Component subdirectories ──────────────────────────────────────────\n for (const folder of ['base', 'slots', 'sections']) {\n const componentDir = path.join(outDir, 'src', 'components', folder);\n await ensureDir(componentDir);\n await atomicWrite(path.join(componentDir, '.gitkeep'), '');\n }\n\n // ── Done ──────────────────────────────────────────────────────────────\n success(`Created ${name}`);\n console.log('');\n info('Next steps:');\n info(` cd ${dir}`);\n info(' npm install');\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n });\n"],"mappings":"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","ignoreList":[]}