@webbycrown/webbycommerce 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +588 -0
- package/bin/setup-debug.log +6 -0
- package/bin/setup.js +157 -0
- package/dist/_chunks/Settings-BTffXkdF.mjs +31213 -0
- package/dist/_chunks/Settings-CHavEmCV.js +31253 -0
- package/dist/_chunks/en-CN5945VW.mjs +504 -0
- package/dist/_chunks/en-Dj8IzRXD.js +504 -0
- package/dist/_chunks/index-BFH1VuAA.mjs +85 -0
- package/dist/_chunks/index-DXM6qeJr.js +84 -0
- package/dist/admin/index.js +3 -0
- package/dist/admin/index.mjs +4 -0
- package/dist/data/demo-data.json +654 -0
- package/dist/robots.txt +3 -0
- package/dist/server/index.js +10734 -0
- package/dist/uploads/.gitkeep +0 -0
- package/dist/uploads/accessories_category_2a5631094b.jpeg +0 -0
- package/dist/uploads/beauty_personal_care_category_57f8a8f1e3.jpeg +0 -0
- package/dist/uploads/books_category_a9a253eada.jpeg +0 -0
- package/dist/uploads/classic_cotton_tshirt_1_cd713425f6.png +0 -0
- package/dist/uploads/clothing_category_d5c60ef07b.jpeg +0 -0
- package/dist/uploads/daviddoe_strapi_adbcd41787.jpeg +0 -0
- package/dist/uploads/electronics_category_fc3e5ef571.jpeg +0 -0
- package/dist/uploads/ergonomic_office_chair_1_c751cffb07.png +0 -0
- package/dist/uploads/home_garden_category_4f6eb3f8d6.jpeg +0 -0
- package/dist/uploads/istockphoto_1188462138_612x612_11f295b9c0.jpg +0 -0
- package/dist/uploads/istockphoto_1188462138_612x612_396fb272fd.jpg +0 -0
- package/dist/uploads/large_daviddoe_strapi_adbcd41787.jpeg +0 -0
- package/dist/uploads/leather_travel_backpack_1_238bc1ae4d.png +0 -0
- package/dist/uploads/mechanical_keyboard_pro_1_0cd391a6ac.png +0 -0
- package/dist/uploads/medium_classic_cotton_tshirt_1_cd713425f6.png +0 -0
- package/dist/uploads/medium_daviddoe_strapi_adbcd41787.jpeg +0 -0
- package/dist/uploads/medium_ergonomic_office_chair_1_c751cffb07.png +0 -0
- package/dist/uploads/medium_leather_travel_backpack_1_238bc1ae4d.png +0 -0
- package/dist/uploads/medium_mechanical_keyboard_pro_1_0cd391a6ac.png +0 -0
- package/dist/uploads/medium_smart_watch_series_5_1_cdc2511fb7.png +0 -0
- package/dist/uploads/medium_smartphone_x_pro_1_c3f0cbd080.png +0 -0
- package/dist/uploads/medium_the_great_gatsby_special_1_2e7c76d997.png +0 -0
- package/dist/uploads/medium_wireless_headphones_1_fa75cd50c3.png +0 -0
- package/dist/uploads/medium_yoga_mat_premium_1_01f9a3b5fa.png +0 -0
- package/dist/uploads/predictive_maintenance_icons_industry_automation_600nw_2685943461_e18a8aa3b0.webp +0 -0
- package/dist/uploads/small_classic_cotton_tshirt_1_cd713425f6.png +0 -0
- package/dist/uploads/small_daviddoe_strapi_adbcd41787.jpeg +0 -0
- package/dist/uploads/small_ergonomic_office_chair_1_c751cffb07.png +0 -0
- package/dist/uploads/small_leather_travel_backpack_1_238bc1ae4d.png +0 -0
- package/dist/uploads/small_mechanical_keyboard_pro_1_0cd391a6ac.png +0 -0
- package/dist/uploads/small_smart_watch_series_5_1_cdc2511fb7.png +0 -0
- package/dist/uploads/small_smartphone_x_pro_1_c3f0cbd080.png +0 -0
- package/dist/uploads/small_the_great_gatsby_special_1_2e7c76d997.png +0 -0
- package/dist/uploads/small_wireless_headphones_1_fa75cd50c3.png +0 -0
- package/dist/uploads/small_yoga_mat_premium_1_01f9a3b5fa.png +0 -0
- package/dist/uploads/smart_watch_series_5_1_cdc2511fb7.png +0 -0
- package/dist/uploads/smartphone_x_pro_1_c3f0cbd080.png +0 -0
- package/dist/uploads/the_great_gatsby_special_1_2e7c76d997.png +0 -0
- package/dist/uploads/thumbnail_accessories_category_2a5631094b.jpeg +0 -0
- package/dist/uploads/thumbnail_beauty_personal_care_category_57f8a8f1e3.jpeg +0 -0
- package/dist/uploads/thumbnail_books_category_a9a253eada.jpeg +0 -0
- package/dist/uploads/thumbnail_classic_cotton_tshirt_1_cd713425f6.png +0 -0
- package/dist/uploads/thumbnail_clothing_category_d5c60ef07b.jpeg +0 -0
- package/dist/uploads/thumbnail_daviddoe_strapi_adbcd41787.jpeg +0 -0
- package/dist/uploads/thumbnail_electronics_category_fc3e5ef571.jpeg +0 -0
- package/dist/uploads/thumbnail_ergonomic_office_chair_1_c751cffb07.png +0 -0
- package/dist/uploads/thumbnail_home_garden_category_4f6eb3f8d6.jpeg +0 -0
- package/dist/uploads/thumbnail_istockphoto_1188462138_612x612_11f295b9c0.jpg +0 -0
- package/dist/uploads/thumbnail_istockphoto_1188462138_612x612_396fb272fd.jpg +0 -0
- package/dist/uploads/thumbnail_leather_travel_backpack_1_238bc1ae4d.png +0 -0
- package/dist/uploads/thumbnail_mechanical_keyboard_pro_1_0cd391a6ac.png +0 -0
- package/dist/uploads/thumbnail_predictive_maintenance_icons_industry_automation_600nw_2685943461_e18a8aa3b0.webp +0 -0
- package/dist/uploads/thumbnail_smart_watch_series_5_1_cdc2511fb7.png +0 -0
- package/dist/uploads/thumbnail_smartphone_x_pro_1_c3f0cbd080.png +0 -0
- package/dist/uploads/thumbnail_the_great_gatsby_special_1_2e7c76d997.png +0 -0
- package/dist/uploads/thumbnail_wireless_headphones_1_fa75cd50c3.png +0 -0
- package/dist/uploads/thumbnail_yoga_mat_premium_1_01f9a3b5fa.png +0 -0
- package/dist/uploads/webby-commerce.png +0 -0
- package/dist/uploads/wireless_headphones_1_fa75cd50c3.png +0 -0
- package/dist/uploads/yoga_mat_premium_1_01f9a3b5fa.png +0 -0
- package/package.json +81 -0
- package/strapi-server.js +9 -0
package/bin/setup.js
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
const readline = require('readline');
|
|
6
|
+
const path = require('path');
|
|
7
|
+
const fs = require('fs');
|
|
8
|
+
|
|
9
|
+
// Global log function to be accessible everywhere
|
|
10
|
+
const projectRoot = process.cwd();
|
|
11
|
+
const logPath = path.join(projectRoot, 'ecommerce-setup-debug.log');
|
|
12
|
+
const log = (msg) => {
|
|
13
|
+
try {
|
|
14
|
+
fs.appendFileSync(logPath, `[${new Date().toISOString()}] ${msg}\n`);
|
|
15
|
+
} catch (e) {
|
|
16
|
+
// Ignore logging errors
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Setup script for @webbycrown/webbycommerce
|
|
22
|
+
*/
|
|
23
|
+
async function setup() {
|
|
24
|
+
let ttyIn, ttyOut;
|
|
25
|
+
let isInteractive = false;
|
|
26
|
+
|
|
27
|
+
log('--- Setup Started ---');
|
|
28
|
+
log('Platform: ' + process.platform);
|
|
29
|
+
log('CWD: ' + projectRoot);
|
|
30
|
+
log('Is TTY: ' + process.stdout.isTTY);
|
|
31
|
+
log('Is Interactive: ' + (process.stdout.isTTY && process.stdin.isTTY));
|
|
32
|
+
|
|
33
|
+
try {
|
|
34
|
+
// Check if we're running in an interactive environment
|
|
35
|
+
isInteractive = process.stdout.isTTY && process.stdin.isTTY;
|
|
36
|
+
|
|
37
|
+
if (isInteractive) {
|
|
38
|
+
if (process.platform === 'win32') {
|
|
39
|
+
log('Attempting to open Windows console devices...');
|
|
40
|
+
try {
|
|
41
|
+
const fdIn = fs.openSync('CONIN$', 'r');
|
|
42
|
+
const fdOut = fs.openSync('CONOUT$', 'w');
|
|
43
|
+
ttyIn = fs.createReadStream(null, { fd: fdIn });
|
|
44
|
+
ttyOut = fs.createWriteStream(null, { fd: fdOut });
|
|
45
|
+
log('Opened CONIN$/CONOUT$ successfully');
|
|
46
|
+
} catch (e) {
|
|
47
|
+
log('CONIN$/CONOUT$ failed, falling back to process streams: ' + e.message);
|
|
48
|
+
ttyIn = process.stdin;
|
|
49
|
+
ttyOut = process.stdout;
|
|
50
|
+
}
|
|
51
|
+
} else {
|
|
52
|
+
try {
|
|
53
|
+
ttyIn = fs.createReadStream('/dev/tty');
|
|
54
|
+
ttyOut = fs.createWriteStream('/dev/tty');
|
|
55
|
+
log('Opened /dev/tty successfully');
|
|
56
|
+
} catch (e) {
|
|
57
|
+
log('/dev/tty failed, falling back to process streams');
|
|
58
|
+
ttyIn = process.stdin;
|
|
59
|
+
ttyOut = process.stdout;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
} else {
|
|
63
|
+
// Non-interactive environment (like local npm install)
|
|
64
|
+
log('Non-interactive environment detected, skipping interactive prompts');
|
|
65
|
+
ttyIn = process.stdin;
|
|
66
|
+
ttyOut = process.stdout;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const rl = readline.createInterface({
|
|
70
|
+
input: ttyIn,
|
|
71
|
+
output: ttyOut,
|
|
72
|
+
terminal: true
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
const question = (query) => new Promise((resolve) => {
|
|
76
|
+
if (!isInteractive) {
|
|
77
|
+
// In non-interactive environments, check environment variable or default to 'n'
|
|
78
|
+
const envSeed = process.env.STRAPI_PLUGIN_ADVANCED_ECOMMERCE_SEED_DATA;
|
|
79
|
+
if (envSeed === 'true' || envSeed === '1' || envSeed === 'yes') {
|
|
80
|
+
log('Non-interactive mode: STRAPI_PLUGIN_ADVANCED_ECOMMERCE_SEED_DATA=true detected');
|
|
81
|
+
resolve('y');
|
|
82
|
+
} else {
|
|
83
|
+
log('Non-interactive mode: no seeding requested');
|
|
84
|
+
resolve('n');
|
|
85
|
+
}
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const timer = setTimeout(() => {
|
|
90
|
+
if (ttyOut && ttyOut.writable) ttyOut.write('\nā° Setup timed out. Skipping...\n');
|
|
91
|
+
resolve('n');
|
|
92
|
+
}, 60000);
|
|
93
|
+
|
|
94
|
+
rl.question(query, (answer) => {
|
|
95
|
+
clearTimeout(timer);
|
|
96
|
+
resolve(answer);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const print = (msg) => {
|
|
101
|
+
if (ttyOut && ttyOut.writable) ttyOut.write(msg + '\n');
|
|
102
|
+
log('Output: ' + msg);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
print('\nšļø @webbycrown/webbycommerce Setup');
|
|
106
|
+
print('===============================================');
|
|
107
|
+
print('');
|
|
108
|
+
|
|
109
|
+
if (!isInteractive) {
|
|
110
|
+
print('š§ Non-interactive installation detected.');
|
|
111
|
+
print(' To seed demo data, set: STRAPI_PLUGIN_ADVANCED_ECOMMERCE_SEED_DATA=true');
|
|
112
|
+
print(' Or run setup manually: npx strapi-ecommerce-setup');
|
|
113
|
+
print('');
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Prompt for seeding demo data (only in interactive mode)
|
|
117
|
+
const seedAnswer = await question('Would you like to seed example data? (y/n): ');
|
|
118
|
+
const shouldSeed = seedAnswer.toLowerCase().trim() === 'y';
|
|
119
|
+
|
|
120
|
+
if (shouldSeed) {
|
|
121
|
+
// Set environment variable for seeding
|
|
122
|
+
process.env.STRAPI_PLUGIN_ADVANCED_ECOMMERCE_SEED_DATA = 'true';
|
|
123
|
+
print('ā
Demo data will be seeded when you start Strapi.');
|
|
124
|
+
print('');
|
|
125
|
+
} else {
|
|
126
|
+
print('ā¹ļø Demo data seeding skipped.');
|
|
127
|
+
print('');
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
print('š Installation complete! Next steps:');
|
|
131
|
+
print('1. Start your Strapi application: npm run develop');
|
|
132
|
+
|
|
133
|
+
if (shouldSeed) {
|
|
134
|
+
print('2. Demo data will be automatically seeded during startup');
|
|
135
|
+
print('3. Visit your Strapi Admin to explore the seeded data');
|
|
136
|
+
} else {
|
|
137
|
+
print('2. Go to Strapi Admin > Settings > Advanced Ecommerce');
|
|
138
|
+
print('3. Click "Seed Demo Data" to populate your store with sample products');
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
print('');
|
|
142
|
+
print('š” Additional options:');
|
|
143
|
+
print('⢠To seed data programmatically, set: STRAPI_PLUGIN_ADVANCED_ECOMMERCE_SEED_DATA=true');
|
|
144
|
+
print('⢠To run setup manually: npx strapi-ecommerce-setup');
|
|
145
|
+
print('');
|
|
146
|
+
|
|
147
|
+
rl.close();
|
|
148
|
+
} catch (error) {
|
|
149
|
+
log('FATAL ERROR: ' + error.message + '\n' + error.stack);
|
|
150
|
+
if (ttyOut && ttyOut.writable) ttyOut.write('\nā Setup encounterd an error. See ecommerce-setup-debug.log for details.\n');
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
setup().then(() => {
|
|
155
|
+
log('--- Setup Finished ---');
|
|
156
|
+
if (require.main === module) process.exit(0);
|
|
157
|
+
});
|