sfcc-metadata-cli 1.1.6 → 1.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/index.html +384 -0
- package/docs/style.css +435 -0
- package/package.json +2 -2
package/docs/index.html
ADDED
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>sfcc-metadata-cli - SFCC B2C Migration CLI Tool</title>
|
|
7
|
+
<meta name="description" content="A CLI tool for creating SFCC B2C metadata migrations. Generate custom objects, site preferences, system object extensions, services, and jobs.">
|
|
8
|
+
<link rel="stylesheet" href="style.css">
|
|
9
|
+
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>⚡</text></svg>">
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<header class="hero">
|
|
13
|
+
<div class="container">
|
|
14
|
+
<h1>sfcc-metadata-cli</h1>
|
|
15
|
+
<p class="tagline">A CLI tool for creating SFCC B2C metadata migrations</p>
|
|
16
|
+
<div class="badges">
|
|
17
|
+
<a href="https://www.npmjs.com/package/sfcc-metadata-cli"><img src="https://img.shields.io/npm/v/sfcc-metadata-cli.svg" alt="npm version"></a>
|
|
18
|
+
<a href="https://github.com/Touhami-viseo/sfcc-metadata-cli/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/sfcc-metadata-cli.svg" alt="license"></a>
|
|
19
|
+
<a href="https://nodejs.org"><img src="https://img.shields.io/node/v/sfcc-metadata-cli.svg" alt="node version"></a>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="cta-buttons">
|
|
22
|
+
<a href="#installation" class="btn btn-primary">Get Started</a>
|
|
23
|
+
<a href="https://github.com/Touhami-viseo/sfcc-metadata-cli" class="btn btn-secondary">View on GitHub</a>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
</header>
|
|
27
|
+
|
|
28
|
+
<nav class="navbar">
|
|
29
|
+
<div class="container">
|
|
30
|
+
<ul>
|
|
31
|
+
<li><a href="#features">Features</a></li>
|
|
32
|
+
<li><a href="#installation">Installation</a></li>
|
|
33
|
+
<li><a href="#commands">Commands</a></li>
|
|
34
|
+
<li><a href="#examples">Examples</a></li>
|
|
35
|
+
<li><a href="#attribute-types">Attribute Types</a></li>
|
|
36
|
+
</ul>
|
|
37
|
+
</div>
|
|
38
|
+
</nav>
|
|
39
|
+
|
|
40
|
+
<main class="container">
|
|
41
|
+
<section id="features">
|
|
42
|
+
<h2>Features</h2>
|
|
43
|
+
<div class="feature-grid">
|
|
44
|
+
<div class="feature-card">
|
|
45
|
+
<div class="feature-icon">📁</div>
|
|
46
|
+
<h3>Create Migrations</h3>
|
|
47
|
+
<p>Timestamp-based naming for unique, sortable migration folders</p>
|
|
48
|
+
</div>
|
|
49
|
+
<div class="feature-card">
|
|
50
|
+
<div class="feature-icon">📦</div>
|
|
51
|
+
<h3>Custom Objects</h3>
|
|
52
|
+
<p>Generate custom object definitions with interactive prompts</p>
|
|
53
|
+
</div>
|
|
54
|
+
<div class="feature-card">
|
|
55
|
+
<div class="feature-icon">⚙️</div>
|
|
56
|
+
<h3>Site Preferences</h3>
|
|
57
|
+
<p>Add site preferences with automatic group detection</p>
|
|
58
|
+
</div>
|
|
59
|
+
<div class="feature-card">
|
|
60
|
+
<div class="feature-icon">🏢</div>
|
|
61
|
+
<h3>Org Preferences</h3>
|
|
62
|
+
<p>Organization preferences for instance-wide settings</p>
|
|
63
|
+
</div>
|
|
64
|
+
<div class="feature-card">
|
|
65
|
+
<div class="feature-icon">🔧</div>
|
|
66
|
+
<h3>System Objects</h3>
|
|
67
|
+
<p>Extend system objects with custom attributes</p>
|
|
68
|
+
</div>
|
|
69
|
+
<div class="feature-card">
|
|
70
|
+
<div class="feature-icon">🌐</div>
|
|
71
|
+
<h3>Services</h3>
|
|
72
|
+
<p>Create service definitions with credentials and profiles</p>
|
|
73
|
+
</div>
|
|
74
|
+
<div class="feature-card">
|
|
75
|
+
<div class="feature-icon">⏱️</div>
|
|
76
|
+
<h3>Jobs</h3>
|
|
77
|
+
<p>Create job definitions with step type suggestions</p>
|
|
78
|
+
</div>
|
|
79
|
+
<div class="feature-card">
|
|
80
|
+
<div class="feature-icon">🔗</div>
|
|
81
|
+
<h3>b2c-tools Integration</h3>
|
|
82
|
+
<p>Seamless integration with <a href="https://github.com/SalesforceCommerceCloud/b2c-tools">b2c-tools</a></p>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
</section>
|
|
86
|
+
|
|
87
|
+
<section id="installation">
|
|
88
|
+
<h2>Installation</h2>
|
|
89
|
+
<pre><code>npm install sfcc-metadata-cli --save-dev</code></pre>
|
|
90
|
+
|
|
91
|
+
<h3>Recommended: Add to package.json</h3>
|
|
92
|
+
<pre><code>{
|
|
93
|
+
"scripts": {
|
|
94
|
+
"migration:create": "sfcc-metadata-cli create",
|
|
95
|
+
"migration:custom-object": "sfcc-metadata-cli custom-object",
|
|
96
|
+
"migration:site-preference": "sfcc-metadata-cli site-preference",
|
|
97
|
+
"migration:org-preference": "sfcc-metadata-cli org-preference",
|
|
98
|
+
"migration:system-object": "sfcc-metadata-cli system-object",
|
|
99
|
+
"migration:service": "sfcc-metadata-cli service",
|
|
100
|
+
"migration:job": "sfcc-metadata-cli job"
|
|
101
|
+
}
|
|
102
|
+
}</code></pre>
|
|
103
|
+
</section>
|
|
104
|
+
|
|
105
|
+
<section id="commands">
|
|
106
|
+
<h2>Commands</h2>
|
|
107
|
+
|
|
108
|
+
<article class="command-section">
|
|
109
|
+
<h3>create</h3>
|
|
110
|
+
<p>Creates a new migration folder with timestamp-based naming.</p>
|
|
111
|
+
<pre><code># Interactive mode
|
|
112
|
+
npx sfcc-metadata-cli create
|
|
113
|
+
|
|
114
|
+
# With description
|
|
115
|
+
npx sfcc-metadata-cli create "add order status field"
|
|
116
|
+
# Creates: 20251231_143052_add_order_status_field
|
|
117
|
+
|
|
118
|
+
# Short format (date + sequence)
|
|
119
|
+
npx sfcc-metadata-cli create --short "fix shipping"
|
|
120
|
+
# Creates: 20251231_01_fix_shipping</code></pre>
|
|
121
|
+
<p class="aliases"><strong>Aliases:</strong> <code>new</code>, <code>init</code></p>
|
|
122
|
+
</article>
|
|
123
|
+
|
|
124
|
+
<article class="command-section">
|
|
125
|
+
<h3>custom-object</h3>
|
|
126
|
+
<p>Creates a custom object type definition in <code>meta/custom-objecttype-definitions.xml</code>.</p>
|
|
127
|
+
<pre><code># Interactive mode
|
|
128
|
+
npx sfcc-metadata-cli custom-object
|
|
129
|
+
|
|
130
|
+
# With options
|
|
131
|
+
npx sfcc-metadata-cli custom-object \
|
|
132
|
+
--type-id CacheConfig \
|
|
133
|
+
--display-name "Cache Configuration" \
|
|
134
|
+
--key-id cacheKey \
|
|
135
|
+
--storage-scope site</code></pre>
|
|
136
|
+
<p class="aliases"><strong>Aliases:</strong> <code>co</code>, <code>customobject</code></p>
|
|
137
|
+
</article>
|
|
138
|
+
|
|
139
|
+
<article class="command-section">
|
|
140
|
+
<h3>site-preference</h3>
|
|
141
|
+
<p>Creates a site preference attribute in <code>meta/system-objecttype-extensions.xml</code>.</p>
|
|
142
|
+
<pre><code># Interactive mode
|
|
143
|
+
npx sfcc-metadata-cli site-preference
|
|
144
|
+
|
|
145
|
+
# With options
|
|
146
|
+
npx sfcc-metadata-cli site-preference \
|
|
147
|
+
--attribute-id enableFeatureX \
|
|
148
|
+
--type boolean \
|
|
149
|
+
--default-value false \
|
|
150
|
+
--group "Custom Configs"</code></pre>
|
|
151
|
+
<p class="aliases"><strong>Aliases:</strong> <code>sp</code>, <code>sitepref</code>, <code>preference</code></p>
|
|
152
|
+
</article>
|
|
153
|
+
|
|
154
|
+
<article class="command-section">
|
|
155
|
+
<h3>org-preference</h3>
|
|
156
|
+
<p>Creates an organization preference attribute for instance-wide settings.</p>
|
|
157
|
+
<pre><code># Interactive mode
|
|
158
|
+
npx sfcc-metadata-cli org-preference
|
|
159
|
+
|
|
160
|
+
# With options
|
|
161
|
+
npx sfcc-metadata-cli org-preference \
|
|
162
|
+
--attribute-id globalApiKey \
|
|
163
|
+
--type string \
|
|
164
|
+
--group "Global Settings"</code></pre>
|
|
165
|
+
<p class="aliases"><strong>Aliases:</strong> <code>op</code>, <code>orgpref</code>, <code>org-pref</code></p>
|
|
166
|
+
</article>
|
|
167
|
+
|
|
168
|
+
<article class="command-section">
|
|
169
|
+
<h3>system-object</h3>
|
|
170
|
+
<p>Extends system objects (Order, Product, Customer, etc.) with custom attributes.</p>
|
|
171
|
+
<pre><code># Interactive mode
|
|
172
|
+
npx sfcc-metadata-cli system-object
|
|
173
|
+
|
|
174
|
+
# With options
|
|
175
|
+
npx sfcc-metadata-cli system-object \
|
|
176
|
+
--object-type Order \
|
|
177
|
+
--attribute-id customField \
|
|
178
|
+
--type string \
|
|
179
|
+
--group Order_Custom</code></pre>
|
|
180
|
+
<p class="aliases"><strong>Aliases:</strong> <code>so</code>, <code>sysobj</code>, <code>extend</code></p>
|
|
181
|
+
</article>
|
|
182
|
+
|
|
183
|
+
<article class="command-section">
|
|
184
|
+
<h3>service</h3>
|
|
185
|
+
<p>Creates service definitions including credentials, profiles, and services in <code>services.xml</code>.</p>
|
|
186
|
+
<pre><code># Interactive mode
|
|
187
|
+
npx sfcc-metadata-cli service
|
|
188
|
+
|
|
189
|
+
# HTTP service
|
|
190
|
+
npx sfcc-metadata-cli service \
|
|
191
|
+
--service-id MyAPI \
|
|
192
|
+
--url "https://api.example.com" \
|
|
193
|
+
--service-type HTTP \
|
|
194
|
+
--timeout 30000
|
|
195
|
+
|
|
196
|
+
# FTP service with authentication
|
|
197
|
+
npx sfcc-metadata-cli service \
|
|
198
|
+
--service-id MyFTP \
|
|
199
|
+
--url "ftp://files.example.com" \
|
|
200
|
+
--service-type FTP \
|
|
201
|
+
--user-id ftpuser</code></pre>
|
|
202
|
+
<p class="aliases"><strong>Aliases:</strong> <code>svc</code>, <code>srv</code></p>
|
|
203
|
+
</article>
|
|
204
|
+
|
|
205
|
+
<article class="command-section">
|
|
206
|
+
<h3>job</h3>
|
|
207
|
+
<p>Creates job definitions in <code>jobs.xml</code> with support for native SFCC steps and custom step types.</p>
|
|
208
|
+
<pre><code># Interactive mode (includes step type suggestions)
|
|
209
|
+
npx sfcc-metadata-cli job
|
|
210
|
+
|
|
211
|
+
# With cartridges directory for custom step discovery
|
|
212
|
+
npx sfcc-metadata-cli job --cartridges-dir ./cartridges
|
|
213
|
+
|
|
214
|
+
# With specific options
|
|
215
|
+
npx sfcc-metadata-cli job \
|
|
216
|
+
--job-id MyDailyJob \
|
|
217
|
+
--description "Daily cleanup job" \
|
|
218
|
+
--site-id RefArch</code></pre>
|
|
219
|
+
<p class="aliases"><strong>Aliases:</strong> <code>j</code></p>
|
|
220
|
+
</article>
|
|
221
|
+
|
|
222
|
+
<h3>Common Options</h3>
|
|
223
|
+
<table>
|
|
224
|
+
<thead>
|
|
225
|
+
<tr>
|
|
226
|
+
<th>Option</th>
|
|
227
|
+
<th>Alias</th>
|
|
228
|
+
<th>Description</th>
|
|
229
|
+
</tr>
|
|
230
|
+
</thead>
|
|
231
|
+
<tbody>
|
|
232
|
+
<tr>
|
|
233
|
+
<td><code>--migrations-dir</code></td>
|
|
234
|
+
<td><code>-m</code></td>
|
|
235
|
+
<td>Path to migrations directory (default: <code>./migrations</code>)</td>
|
|
236
|
+
</tr>
|
|
237
|
+
<tr>
|
|
238
|
+
<td><code>--interactive</code></td>
|
|
239
|
+
<td><code>-i</code></td>
|
|
240
|
+
<td>Enable/disable interactive mode</td>
|
|
241
|
+
</tr>
|
|
242
|
+
<tr>
|
|
243
|
+
<td><code>--help</code></td>
|
|
244
|
+
<td><code>-h</code></td>
|
|
245
|
+
<td>Show help</td>
|
|
246
|
+
</tr>
|
|
247
|
+
<tr>
|
|
248
|
+
<td><code>--version</code></td>
|
|
249
|
+
<td><code>-v</code></td>
|
|
250
|
+
<td>Show version number</td>
|
|
251
|
+
</tr>
|
|
252
|
+
</tbody>
|
|
253
|
+
</table>
|
|
254
|
+
</section>
|
|
255
|
+
|
|
256
|
+
<section id="examples">
|
|
257
|
+
<h2>Complete Migration Workflow</h2>
|
|
258
|
+
<div class="workflow">
|
|
259
|
+
<div class="workflow-step">
|
|
260
|
+
<span class="step-number">1</span>
|
|
261
|
+
<div class="step-content">
|
|
262
|
+
<h4>Create the migration folder</h4>
|
|
263
|
+
<pre><code>npx sfcc-metadata-cli create</code></pre>
|
|
264
|
+
</div>
|
|
265
|
+
</div>
|
|
266
|
+
<div class="workflow-step">
|
|
267
|
+
<span class="step-number">2</span>
|
|
268
|
+
<div class="step-content">
|
|
269
|
+
<h4>Add a custom object</h4>
|
|
270
|
+
<pre><code>npx sfcc-metadata-cli custom-object</code></pre>
|
|
271
|
+
</div>
|
|
272
|
+
</div>
|
|
273
|
+
<div class="workflow-step">
|
|
274
|
+
<span class="step-number">3</span>
|
|
275
|
+
<div class="step-content">
|
|
276
|
+
<h4>Add a site preference</h4>
|
|
277
|
+
<pre><code>npx sfcc-metadata-cli site-preference</code></pre>
|
|
278
|
+
</div>
|
|
279
|
+
</div>
|
|
280
|
+
<div class="workflow-step">
|
|
281
|
+
<span class="step-number">4</span>
|
|
282
|
+
<div class="step-content">
|
|
283
|
+
<h4>Add a service definition</h4>
|
|
284
|
+
<pre><code>npx sfcc-metadata-cli service</code></pre>
|
|
285
|
+
</div>
|
|
286
|
+
</div>
|
|
287
|
+
<div class="workflow-step">
|
|
288
|
+
<span class="step-number">5</span>
|
|
289
|
+
<div class="step-content">
|
|
290
|
+
<h4>Add a job definition</h4>
|
|
291
|
+
<pre><code>npx sfcc-metadata-cli job</code></pre>
|
|
292
|
+
</div>
|
|
293
|
+
</div>
|
|
294
|
+
<div class="workflow-step">
|
|
295
|
+
<span class="step-number">6</span>
|
|
296
|
+
<div class="step-content">
|
|
297
|
+
<h4>Apply with b2c-tools</h4>
|
|
298
|
+
<pre><code>node build/b2c-tools.js import migrate</code></pre>
|
|
299
|
+
</div>
|
|
300
|
+
</div>
|
|
301
|
+
</div>
|
|
302
|
+
</section>
|
|
303
|
+
|
|
304
|
+
<section id="attribute-types">
|
|
305
|
+
<h2>Supported Attribute Types</h2>
|
|
306
|
+
<table>
|
|
307
|
+
<thead>
|
|
308
|
+
<tr>
|
|
309
|
+
<th>Type</th>
|
|
310
|
+
<th>Description</th>
|
|
311
|
+
</tr>
|
|
312
|
+
</thead>
|
|
313
|
+
<tbody>
|
|
314
|
+
<tr><td><code>string</code></td><td>Single-line text</td></tr>
|
|
315
|
+
<tr><td><code>text</code></td><td>Multi-line text</td></tr>
|
|
316
|
+
<tr><td><code>html</code></td><td>HTML content</td></tr>
|
|
317
|
+
<tr><td><code>int</code></td><td>Integer number</td></tr>
|
|
318
|
+
<tr><td><code>double</code></td><td>Decimal number</td></tr>
|
|
319
|
+
<tr><td><code>boolean</code></td><td>True/False</td></tr>
|
|
320
|
+
<tr><td><code>date</code></td><td>Date only</td></tr>
|
|
321
|
+
<tr><td><code>datetime</code></td><td>Date and time</td></tr>
|
|
322
|
+
<tr><td><code>enum-of-string</code></td><td>Single/multi-select dropdown</td></tr>
|
|
323
|
+
<tr><td><code>enum-of-int</code></td><td>Integer enumeration</td></tr>
|
|
324
|
+
<tr><td><code>set-of-string</code></td><td>Set of strings</td></tr>
|
|
325
|
+
<tr><td><code>image</code></td><td>Image reference</td></tr>
|
|
326
|
+
<tr><td><code>password</code></td><td>Encrypted password</td></tr>
|
|
327
|
+
</tbody>
|
|
328
|
+
</table>
|
|
329
|
+
</section>
|
|
330
|
+
|
|
331
|
+
<section id="migration-naming">
|
|
332
|
+
<h2>Migration Naming Convention</h2>
|
|
333
|
+
<h3>New Format (Recommended)</h3>
|
|
334
|
+
<p>Migrations use <strong>timestamp-based naming</strong> for guaranteed uniqueness and natural sorting:</p>
|
|
335
|
+
<table>
|
|
336
|
+
<thead>
|
|
337
|
+
<tr>
|
|
338
|
+
<th>Format</th>
|
|
339
|
+
<th>Example</th>
|
|
340
|
+
<th>Description</th>
|
|
341
|
+
</tr>
|
|
342
|
+
</thead>
|
|
343
|
+
<tbody>
|
|
344
|
+
<tr>
|
|
345
|
+
<td><code>YYYYMMDD_HHMMSS</code></td>
|
|
346
|
+
<td><code>20251231_143052</code></td>
|
|
347
|
+
<td>Full timestamp</td>
|
|
348
|
+
</tr>
|
|
349
|
+
<tr>
|
|
350
|
+
<td><code>YYYYMMDD_HHMMSS_desc</code></td>
|
|
351
|
+
<td><code>20251231_143052_add_order_fields</code></td>
|
|
352
|
+
<td>With description</td>
|
|
353
|
+
</tr>
|
|
354
|
+
<tr>
|
|
355
|
+
<td><code>YYYYMMDD_NN_desc</code></td>
|
|
356
|
+
<td><code>20251231_01_fix_shipping</code></td>
|
|
357
|
+
<td>Short format (--short flag)</td>
|
|
358
|
+
</tr>
|
|
359
|
+
</tbody>
|
|
360
|
+
</table>
|
|
361
|
+
<div class="benefits">
|
|
362
|
+
<h4>Benefits:</h4>
|
|
363
|
+
<ul>
|
|
364
|
+
<li>✅ No conflicts - timestamp ensures uniqueness</li>
|
|
365
|
+
<li>✅ Self-documenting - description in the name</li>
|
|
366
|
+
<li>✅ Natural sorting - alphabetical order = chronological order</li>
|
|
367
|
+
<li>✅ Unlimited migrations per day</li>
|
|
368
|
+
</ul>
|
|
369
|
+
</div>
|
|
370
|
+
</section>
|
|
371
|
+
</main>
|
|
372
|
+
|
|
373
|
+
<footer>
|
|
374
|
+
<div class="container">
|
|
375
|
+
<p>
|
|
376
|
+
<a href="https://github.com/Touhami-viseo/sfcc-metadata-cli">GitHub</a> ·
|
|
377
|
+
<a href="https://www.npmjs.com/package/sfcc-metadata-cli">npm</a> ·
|
|
378
|
+
<a href="https://github.com/Touhami-viseo/sfcc-metadata-cli/blob/main/LICENSE">AGPL-3.0-or-later</a>
|
|
379
|
+
</p>
|
|
380
|
+
<p class="copyright">Built with ❤️ for the SFCC community</p>
|
|
381
|
+
</div>
|
|
382
|
+
</footer>
|
|
383
|
+
</body>
|
|
384
|
+
</html>
|
package/docs/style.css
ADDED
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
/* CSS Variables */
|
|
2
|
+
:root {
|
|
3
|
+
--primary-color: #0070f3;
|
|
4
|
+
--primary-hover: #0051a8;
|
|
5
|
+
--secondary-color: #6b7280;
|
|
6
|
+
--background: #ffffff;
|
|
7
|
+
--surface: #f9fafb;
|
|
8
|
+
--border: #e5e7eb;
|
|
9
|
+
--text: #1f2937;
|
|
10
|
+
--text-muted: #6b7280;
|
|
11
|
+
--code-bg: #1e293b;
|
|
12
|
+
--code-text: #e2e8f0;
|
|
13
|
+
--success: #10b981;
|
|
14
|
+
--radius: 8px;
|
|
15
|
+
--shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
16
|
+
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Reset & Base */
|
|
20
|
+
*,
|
|
21
|
+
*::before,
|
|
22
|
+
*::after {
|
|
23
|
+
box-sizing: border-box;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
html {
|
|
27
|
+
scroll-behavior: smooth;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
body {
|
|
31
|
+
margin: 0;
|
|
32
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
|
|
33
|
+
"Helvetica Neue", Arial, sans-serif;
|
|
34
|
+
line-height: 1.6;
|
|
35
|
+
color: var(--text);
|
|
36
|
+
background: var(--background);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.container {
|
|
40
|
+
max-width: 1200px;
|
|
41
|
+
margin: 0 auto;
|
|
42
|
+
padding: 0 1.5rem;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* Typography */
|
|
46
|
+
h1,
|
|
47
|
+
h2,
|
|
48
|
+
h3,
|
|
49
|
+
h4 {
|
|
50
|
+
margin-top: 0;
|
|
51
|
+
line-height: 1.3;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
h1 {
|
|
55
|
+
font-size: 3rem;
|
|
56
|
+
}
|
|
57
|
+
h2 {
|
|
58
|
+
font-size: 2rem;
|
|
59
|
+
margin-top: 3rem;
|
|
60
|
+
margin-bottom: 1.5rem;
|
|
61
|
+
}
|
|
62
|
+
h3 {
|
|
63
|
+
font-size: 1.5rem;
|
|
64
|
+
margin-top: 2rem;
|
|
65
|
+
}
|
|
66
|
+
h4 {
|
|
67
|
+
font-size: 1.125rem;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
a {
|
|
71
|
+
color: var(--primary-color);
|
|
72
|
+
text-decoration: none;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
a:hover {
|
|
76
|
+
text-decoration: underline;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* Hero Section */
|
|
80
|
+
.hero {
|
|
81
|
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
82
|
+
color: white;
|
|
83
|
+
padding: 5rem 0;
|
|
84
|
+
text-align: center;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.hero h1 {
|
|
88
|
+
margin-bottom: 0.5rem;
|
|
89
|
+
font-size: 3.5rem;
|
|
90
|
+
font-weight: 700;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.tagline {
|
|
94
|
+
font-size: 1.25rem;
|
|
95
|
+
opacity: 0.9;
|
|
96
|
+
margin-bottom: 1.5rem;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.badges {
|
|
100
|
+
display: flex;
|
|
101
|
+
justify-content: center;
|
|
102
|
+
gap: 0.5rem;
|
|
103
|
+
margin-bottom: 2rem;
|
|
104
|
+
flex-wrap: wrap;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.badges img {
|
|
108
|
+
height: 20px;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.cta-buttons {
|
|
112
|
+
display: flex;
|
|
113
|
+
justify-content: center;
|
|
114
|
+
gap: 1rem;
|
|
115
|
+
flex-wrap: wrap;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.btn {
|
|
119
|
+
display: inline-block;
|
|
120
|
+
padding: 0.75rem 1.5rem;
|
|
121
|
+
border-radius: var(--radius);
|
|
122
|
+
font-weight: 600;
|
|
123
|
+
transition: all 0.2s;
|
|
124
|
+
text-decoration: none;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.btn-primary {
|
|
128
|
+
background: white;
|
|
129
|
+
color: #764ba2;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.btn-primary:hover {
|
|
133
|
+
background: #f0f0f0;
|
|
134
|
+
text-decoration: none;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.btn-secondary {
|
|
138
|
+
background: transparent;
|
|
139
|
+
color: white;
|
|
140
|
+
border: 2px solid white;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.btn-secondary:hover {
|
|
144
|
+
background: rgba(255, 255, 255, 0.1);
|
|
145
|
+
text-decoration: none;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/* Navigation */
|
|
149
|
+
.navbar {
|
|
150
|
+
background: var(--surface);
|
|
151
|
+
border-bottom: 1px solid var(--border);
|
|
152
|
+
position: sticky;
|
|
153
|
+
top: 0;
|
|
154
|
+
z-index: 100;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.navbar ul {
|
|
158
|
+
list-style: none;
|
|
159
|
+
margin: 0;
|
|
160
|
+
padding: 0;
|
|
161
|
+
display: flex;
|
|
162
|
+
gap: 2rem;
|
|
163
|
+
justify-content: center;
|
|
164
|
+
flex-wrap: wrap;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.navbar li {
|
|
168
|
+
padding: 1rem 0;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.navbar a {
|
|
172
|
+
color: var(--text);
|
|
173
|
+
font-weight: 500;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.navbar a:hover {
|
|
177
|
+
color: var(--primary-color);
|
|
178
|
+
text-decoration: none;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/* Main Content */
|
|
182
|
+
main {
|
|
183
|
+
padding: 2rem 0 4rem;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
section {
|
|
187
|
+
margin-bottom: 3rem;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/* Feature Grid */
|
|
191
|
+
.feature-grid {
|
|
192
|
+
display: grid;
|
|
193
|
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
194
|
+
gap: 1.5rem;
|
|
195
|
+
margin-top: 1.5rem;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.feature-card {
|
|
199
|
+
background: var(--surface);
|
|
200
|
+
border: 1px solid var(--border);
|
|
201
|
+
border-radius: var(--radius);
|
|
202
|
+
padding: 1.5rem;
|
|
203
|
+
transition: box-shadow 0.2s;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.feature-card:hover {
|
|
207
|
+
box-shadow: var(--shadow-lg);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.feature-icon {
|
|
211
|
+
font-size: 2rem;
|
|
212
|
+
margin-bottom: 0.5rem;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.feature-card h3 {
|
|
216
|
+
margin: 0.5rem 0;
|
|
217
|
+
font-size: 1.125rem;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.feature-card p {
|
|
221
|
+
margin: 0;
|
|
222
|
+
color: var(--text-muted);
|
|
223
|
+
font-size: 0.95rem;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/* Code Blocks */
|
|
227
|
+
pre {
|
|
228
|
+
background: var(--code-bg);
|
|
229
|
+
color: var(--code-text);
|
|
230
|
+
padding: 1rem 1.5rem;
|
|
231
|
+
border-radius: var(--radius);
|
|
232
|
+
overflow-x: auto;
|
|
233
|
+
font-size: 0.9rem;
|
|
234
|
+
line-height: 1.5;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
code {
|
|
238
|
+
font-family: "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas,
|
|
239
|
+
monospace;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
p code,
|
|
243
|
+
li code,
|
|
244
|
+
td code {
|
|
245
|
+
background: var(--surface);
|
|
246
|
+
border: 1px solid var(--border);
|
|
247
|
+
padding: 0.125rem 0.375rem;
|
|
248
|
+
border-radius: 4px;
|
|
249
|
+
font-size: 0.875em;
|
|
250
|
+
color: #e11d48;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/* Command Sections */
|
|
254
|
+
.command-section {
|
|
255
|
+
background: var(--surface);
|
|
256
|
+
border: 1px solid var(--border);
|
|
257
|
+
border-radius: var(--radius);
|
|
258
|
+
padding: 1.5rem;
|
|
259
|
+
margin-bottom: 1.5rem;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.command-section h3 {
|
|
263
|
+
margin-top: 0;
|
|
264
|
+
color: var(--primary-color);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.aliases {
|
|
268
|
+
margin-top: 1rem;
|
|
269
|
+
padding-top: 1rem;
|
|
270
|
+
border-top: 1px solid var(--border);
|
|
271
|
+
font-size: 0.9rem;
|
|
272
|
+
color: var(--text-muted);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/* Tables */
|
|
276
|
+
table {
|
|
277
|
+
width: 100%;
|
|
278
|
+
border-collapse: collapse;
|
|
279
|
+
margin: 1rem 0;
|
|
280
|
+
font-size: 0.95rem;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
th,
|
|
284
|
+
td {
|
|
285
|
+
padding: 0.75rem 1rem;
|
|
286
|
+
text-align: left;
|
|
287
|
+
border-bottom: 1px solid var(--border);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
th {
|
|
291
|
+
background: var(--surface);
|
|
292
|
+
font-weight: 600;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
tr:hover {
|
|
296
|
+
background: var(--surface);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/* Workflow */
|
|
300
|
+
.workflow {
|
|
301
|
+
margin-top: 1.5rem;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.workflow-step {
|
|
305
|
+
display: flex;
|
|
306
|
+
gap: 1rem;
|
|
307
|
+
margin-bottom: 1.5rem;
|
|
308
|
+
align-items: flex-start;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
.step-number {
|
|
312
|
+
display: flex;
|
|
313
|
+
align-items: center;
|
|
314
|
+
justify-content: center;
|
|
315
|
+
width: 36px;
|
|
316
|
+
height: 36px;
|
|
317
|
+
background: var(--primary-color);
|
|
318
|
+
color: white;
|
|
319
|
+
border-radius: 50%;
|
|
320
|
+
font-weight: 700;
|
|
321
|
+
flex-shrink: 0;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
.step-content {
|
|
325
|
+
flex: 1;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
.step-content h4 {
|
|
329
|
+
margin: 0 0 0.5rem;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
.step-content pre {
|
|
333
|
+
margin: 0;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/* Benefits List */
|
|
337
|
+
.benefits {
|
|
338
|
+
background: var(--surface);
|
|
339
|
+
border: 1px solid var(--border);
|
|
340
|
+
border-radius: var(--radius);
|
|
341
|
+
padding: 1.5rem;
|
|
342
|
+
margin-top: 1.5rem;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
.benefits h4 {
|
|
346
|
+
margin-top: 0;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
.benefits ul {
|
|
350
|
+
margin: 0;
|
|
351
|
+
padding-left: 0;
|
|
352
|
+
list-style: none;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
.benefits li {
|
|
356
|
+
padding: 0.25rem 0;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/* Footer */
|
|
360
|
+
footer {
|
|
361
|
+
background: var(--surface);
|
|
362
|
+
border-top: 1px solid var(--border);
|
|
363
|
+
padding: 2rem 0;
|
|
364
|
+
text-align: center;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
footer p {
|
|
368
|
+
margin: 0.5rem 0;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
footer a {
|
|
372
|
+
color: var(--text);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
.copyright {
|
|
376
|
+
color: var(--text-muted);
|
|
377
|
+
font-size: 0.9rem;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/* Responsive */
|
|
381
|
+
@media (max-width: 768px) {
|
|
382
|
+
.hero h1 {
|
|
383
|
+
font-size: 2.5rem;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.tagline {
|
|
387
|
+
font-size: 1.1rem;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
h2 {
|
|
391
|
+
font-size: 1.5rem;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
.navbar ul {
|
|
395
|
+
gap: 1rem;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
pre {
|
|
399
|
+
font-size: 0.8rem;
|
|
400
|
+
padding: 1rem;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
table {
|
|
404
|
+
font-size: 0.85rem;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
th,
|
|
408
|
+
td {
|
|
409
|
+
padding: 0.5rem;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/* Dark mode support */
|
|
414
|
+
@media (prefers-color-scheme: dark) {
|
|
415
|
+
:root {
|
|
416
|
+
--background: #0f172a;
|
|
417
|
+
--surface: #1e293b;
|
|
418
|
+
--border: #334155;
|
|
419
|
+
--text: #f1f5f9;
|
|
420
|
+
--text-muted: #94a3b8;
|
|
421
|
+
--code-bg: #0f172a;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
p code,
|
|
425
|
+
li code,
|
|
426
|
+
td code {
|
|
427
|
+
background: #334155;
|
|
428
|
+
border-color: #475569;
|
|
429
|
+
color: #f472b6;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
.btn-primary {
|
|
433
|
+
color: #764ba2;
|
|
434
|
+
}
|
|
435
|
+
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sfcc-metadata-cli",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.10",
|
|
4
4
|
"description": "CLI tool for creating SFCC B2C metadata migrations",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=18"
|
|
8
8
|
},
|
|
9
9
|
"repository": {
|
|
10
|
-
"url": "https://github.com/
|
|
10
|
+
"url": "https://github.com/Dragnucs/sfcc-metadata-cli"
|
|
11
11
|
},
|
|
12
12
|
"bin": {
|
|
13
13
|
"sfcc-metadata-cli": "./index.js"
|