@nqlib/nqui 0.1.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/INSTALLATION.md +221 -0
- package/README.md +276 -0
- package/dist/App.d.ts +3 -0
- package/dist/App.d.ts.map +1 -0
- package/dist/components/AppLayout.d.ts +2 -0
- package/dist/components/AppLayout.d.ts.map +1 -0
- package/dist/components/app-sidebar.d.ts +4 -0
- package/dist/components/app-sidebar.d.ts.map +1 -0
- package/dist/components/component-example.d.ts +2 -0
- package/dist/components/component-example.d.ts.map +1 -0
- package/dist/components/custom/color-picker.d.ts +9 -0
- package/dist/components/custom/color-picker.d.ts.map +1 -0
- package/dist/components/custom/color-slider.d.ts +22 -0
- package/dist/components/custom/color-slider.d.ts.map +1 -0
- package/dist/components/custom/enhanced-button.d.ts +34 -0
- package/dist/components/custom/enhanced-button.d.ts.map +1 -0
- package/dist/components/custom/enhanced-checkbox.d.ts +28 -0
- package/dist/components/custom/enhanced-checkbox.d.ts.map +1 -0
- package/dist/components/custom/enhanced-radio-group.d.ts +36 -0
- package/dist/components/custom/enhanced-radio-group.d.ts.map +1 -0
- package/dist/components/custom/enhanced-scroll-area.d.ts +34 -0
- package/dist/components/custom/enhanced-scroll-area.d.ts.map +1 -0
- package/dist/components/custom/enhanced-separator.d.ts +36 -0
- package/dist/components/custom/enhanced-separator.d.ts.map +1 -0
- package/dist/components/custom/nqui-logo.d.ts +9 -0
- package/dist/components/custom/nqui-logo.d.ts.map +1 -0
- package/dist/components/custom/rating.d.ts +60 -0
- package/dist/components/custom/rating.d.ts.map +1 -0
- package/dist/components/custom/table-of-contents.d.ts +77 -0
- package/dist/components/custom/table-of-contents.d.ts.map +1 -0
- package/dist/components/debug/crosshair.d.ts +5 -0
- package/dist/components/debug/crosshair.d.ts.map +1 -0
- package/dist/components/debug/debug-panel.d.ts +5 -0
- package/dist/components/debug/debug-panel.d.ts.map +1 -0
- package/dist/components/debug/dependencies.d.ts +23 -0
- package/dist/components/debug/dependencies.d.ts.map +1 -0
- package/dist/components/debug/index.d.ts +17 -0
- package/dist/components/debug/index.d.ts.map +1 -0
- package/dist/components/debug/magnifier.d.ts +9 -0
- package/dist/components/debug/magnifier.d.ts.map +1 -0
- package/dist/components/debug/ui-tester.d.ts +13 -0
- package/dist/components/debug/ui-tester.d.ts.map +1 -0
- package/dist/components/debug/utils/css-variable-parser.d.ts +28 -0
- package/dist/components/debug/utils/css-variable-parser.d.ts.map +1 -0
- package/dist/components/debug/utils/element-selector.d.ts +24 -0
- package/dist/components/debug/utils/element-selector.d.ts.map +1 -0
- package/dist/components/debug/utils/style-injector.d.ts +40 -0
- package/dist/components/debug/utils/style-injector.d.ts.map +1 -0
- package/dist/components/debug/utils/style-parser.d.ts +53 -0
- package/dist/components/debug/utils/style-parser.d.ts.map +1 -0
- package/dist/components/example.d.ts +7 -0
- package/dist/components/example.d.ts.map +1 -0
- package/dist/components/login-form.d.ts +2 -0
- package/dist/components/login-form.d.ts.map +1 -0
- package/dist/components/nav-user.d.ts +8 -0
- package/dist/components/nav-user.d.ts.map +1 -0
- package/dist/components/showcase/app-builder/app-builder-context.d.ts +16 -0
- package/dist/components/showcase/app-builder/app-builder-context.d.ts.map +1 -0
- package/dist/components/showcase/app-builder/app-canvas.d.ts +11 -0
- package/dist/components/showcase/app-builder/app-canvas.d.ts.map +1 -0
- package/dist/components/showcase/app-builder/widget-configurator.d.ts +10 -0
- package/dist/components/showcase/app-builder/widget-configurator.d.ts.map +1 -0
- package/dist/components/showcase/app-builder/widget-palette.d.ts +6 -0
- package/dist/components/showcase/app-builder/widget-palette.d.ts.map +1 -0
- package/dist/components/showcase/app-builder/widget-registry.d.ts +29 -0
- package/dist/components/showcase/app-builder/widget-registry.d.ts.map +1 -0
- package/dist/components/showcase/app-builder/widget-renderer.d.ts +7 -0
- package/dist/components/showcase/app-builder/widget-renderer.d.ts.map +1 -0
- package/dist/components/theme-toggle.d.ts +2 -0
- package/dist/components/theme-toggle.d.ts.map +1 -0
- package/dist/components/ui/accordion.d.ts +8 -0
- package/dist/components/ui/accordion.d.ts.map +1 -0
- package/dist/components/ui/alert-dialog.d.ts +19 -0
- package/dist/components/ui/alert-dialog.d.ts.map +1 -0
- package/dist/components/ui/alert.d.ts +11 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/aspect-ratio.d.ts +4 -0
- package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
- package/dist/components/ui/avatar.d.ts +7 -0
- package/dist/components/ui/avatar.d.ts.map +1 -0
- package/dist/components/ui/badge.d.ts +10 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/breadcrumb.d.ts +20 -0
- package/dist/components/ui/breadcrumb.d.ts.map +1 -0
- package/dist/components/ui/button-group.d.ts +12 -0
- package/dist/components/ui/button-group.d.ts.map +1 -0
- package/dist/components/ui/button.d.ts +12 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/calendar.d.ts +9 -0
- package/dist/components/ui/calendar.d.ts.map +1 -0
- package/dist/components/ui/card.d.ts +9 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/carousel.d.ts +29 -0
- package/dist/components/ui/carousel.d.ts.map +1 -0
- package/dist/components/ui/chart.d.ts +41 -0
- package/dist/components/ui/chart.d.ts.map +1 -0
- package/dist/components/ui/checkbox.d.ts +5 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/collapsible.d.ts +6 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/combobox.d.ts +25 -0
- package/dist/components/ui/combobox.d.ts.map +1 -0
- package/dist/components/ui/command.d.ts +19 -0
- package/dist/components/ui/command.d.ts.map +1 -0
- package/dist/components/ui/context-menu.d.ts +28 -0
- package/dist/components/ui/context-menu.d.ts.map +1 -0
- package/dist/components/ui/dialog.d.ts +18 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/drawer.d.ts +14 -0
- package/dist/components/ui/drawer.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +28 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/empty.d.ts +12 -0
- package/dist/components/ui/empty.d.ts.map +1 -0
- package/dist/components/ui/field.d.ts +25 -0
- package/dist/components/ui/field.d.ts.map +1 -0
- package/dist/components/ui/hover-card.d.ts +7 -0
- package/dist/components/ui/hover-card.d.ts.map +1 -0
- package/dist/components/ui/input-group.d.ts +17 -0
- package/dist/components/ui/input-group.d.ts.map +1 -0
- package/dist/components/ui/input-otp.d.ts +12 -0
- package/dist/components/ui/input-otp.d.ts.map +1 -0
- package/dist/components/ui/input.d.ts +4 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/item.d.ts +24 -0
- package/dist/components/ui/item.d.ts.map +1 -0
- package/dist/components/ui/kbd.d.ts +4 -0
- package/dist/components/ui/kbd.d.ts.map +1 -0
- package/dist/components/ui/label.d.ts +6 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/menubar.d.ts +27 -0
- package/dist/components/ui/menubar.d.ts.map +1 -0
- package/dist/components/ui/native-select.d.ts +9 -0
- package/dist/components/ui/native-select.d.ts.map +1 -0
- package/dist/components/ui/navigation-menu.d.ts +15 -0
- package/dist/components/ui/navigation-menu.d.ts.map +1 -0
- package/dist/components/ui/pagination.d.ts +14 -0
- package/dist/components/ui/pagination.d.ts.map +1 -0
- package/dist/components/ui/popover.d.ts +11 -0
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/progress.d.ts +5 -0
- package/dist/components/ui/progress.d.ts.map +1 -0
- package/dist/components/ui/radio-group.d.ts +6 -0
- package/dist/components/ui/radio-group.d.ts.map +1 -0
- package/dist/components/ui/resizable.d.ts +8 -0
- package/dist/components/ui/resizable.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +6 -0
- package/dist/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/select.d.ts +16 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/separator.d.ts +5 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/sheet.d.ts +26 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/sidebar.d.ts +66 -0
- package/dist/components/ui/sidebar.d.ts.map +1 -0
- package/dist/components/ui/skeleton.d.ts +3 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/slider.d.ts +5 -0
- package/dist/components/ui/slider.d.ts.map +1 -0
- package/dist/components/ui/sonner.d.ts +4 -0
- package/dist/components/ui/sonner.d.ts.map +1 -0
- package/dist/components/ui/spinner.d.ts +3 -0
- package/dist/components/ui/spinner.d.ts.map +1 -0
- package/dist/components/ui/switch.d.ts +5 -0
- package/dist/components/ui/switch.d.ts.map +1 -0
- package/dist/components/ui/table.d.ts +11 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/tabs.d.ts +12 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/textarea.d.ts +4 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/toggle-group.d.ts +11 -0
- package/dist/components/ui/toggle-group.d.ts.map +1 -0
- package/dist/components/ui/toggle.d.ts +10 -0
- package/dist/components/ui/toggle.d.ts.map +1 -0
- package/dist/components/ui/tooltip.d.ts +8 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/hooks/use-mobile.d.ts +2 -0
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/hooks/use-scroll-spy.d.ts +50 -0
- package/dist/hooks/use-scroll-spy.d.ts.map +1 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/mockdata/toc.d.ts +11 -0
- package/dist/mockdata/toc.d.ts.map +1 -0
- package/dist/nqui.cjs.js +521 -0
- package/dist/nqui.css +148 -0
- package/dist/nqui.es.js +35453 -0
- package/dist/pages/AppBuilder.d.ts +2 -0
- package/dist/pages/AppBuilder.d.ts.map +1 -0
- package/dist/pages/Dashboard.d.ts +2 -0
- package/dist/pages/Dashboard.d.ts.map +1 -0
- package/dist/pages/Drafts.d.ts +2 -0
- package/dist/pages/Drafts.d.ts.map +1 -0
- package/dist/pages/Inbox.d.ts +2 -0
- package/dist/pages/Inbox.d.ts.map +1 -0
- package/dist/pages/Junk.d.ts +2 -0
- package/dist/pages/Junk.d.ts.map +1 -0
- package/dist/pages/Sent.d.ts +2 -0
- package/dist/pages/Sent.d.ts.map +1 -0
- package/dist/pages/Settings.d.ts +2 -0
- package/dist/pages/Settings.d.ts.map +1 -0
- package/dist/pages/Trash.d.ts +2 -0
- package/dist/pages/Trash.d.ts.map +1 -0
- package/dist/styles.css +544 -0
- package/dist/vite.svg +1 -0
- package/package.json +128 -0
- package/scripts/build-styles.js +205 -0
- package/scripts/examples/nextjs-layout.tsx +30 -0
- package/scripts/examples/nextjs-page.tsx +66 -0
- package/scripts/init-css.js +568 -0
- package/scripts/init-debug-css.js +123 -0
- package/scripts/publish-npmjs.js +87 -0
- package/scripts/validate-exports.mjs +117 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Publish to npmjs.com registry
|
|
5
|
+
* Temporarily overrides publishConfig and .npmrc to use npmjs.com instead of GitHub Packages
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
9
|
+
import { execSync } from 'child_process';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
import { dirname, join } from 'path';
|
|
12
|
+
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = dirname(__filename);
|
|
15
|
+
const rootDir = join(__dirname, '..');
|
|
16
|
+
const packageJsonPath = join(rootDir, 'package.json');
|
|
17
|
+
const npmrcPath = join(rootDir, '.npmrc');
|
|
18
|
+
|
|
19
|
+
// Read package.json
|
|
20
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
21
|
+
|
|
22
|
+
// Save original publishConfig
|
|
23
|
+
const originalPublishConfig = packageJson.publishConfig;
|
|
24
|
+
|
|
25
|
+
// Override publishConfig for npmjs.com
|
|
26
|
+
packageJson.publishConfig = {
|
|
27
|
+
registry: 'https://registry.npmjs.com',
|
|
28
|
+
access: 'public'
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// Write modified package.json
|
|
32
|
+
writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
|
|
33
|
+
|
|
34
|
+
// Handle .npmrc file if it exists
|
|
35
|
+
let originalNpmrc = null;
|
|
36
|
+
let npmrcExists = false;
|
|
37
|
+
|
|
38
|
+
if (existsSync(npmrcPath)) {
|
|
39
|
+
npmrcExists = true;
|
|
40
|
+
originalNpmrc = readFileSync(npmrcPath, 'utf-8');
|
|
41
|
+
|
|
42
|
+
// Remove or comment out scoped registry line that points to GitHub Packages
|
|
43
|
+
const lines = originalNpmrc.split('\n');
|
|
44
|
+
const modifiedLines = lines.map(line => {
|
|
45
|
+
// Comment out scoped registry lines for @nqlib
|
|
46
|
+
if (line.trim().startsWith('@nqlib:registry=')) {
|
|
47
|
+
return `# ${line} # Temporarily disabled for npmjs.com publish`;
|
|
48
|
+
}
|
|
49
|
+
return line;
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
writeFileSync(npmrcPath, modifiedLines.join('\n'));
|
|
53
|
+
console.log('📝 Temporarily modified .npmrc');
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
try {
|
|
57
|
+
console.log('📦 Publishing to npmjs.com...');
|
|
58
|
+
execSync('npm publish --registry=https://registry.npmjs.com --access=public', {
|
|
59
|
+
stdio: 'inherit',
|
|
60
|
+
cwd: rootDir,
|
|
61
|
+
env: {
|
|
62
|
+
...process.env,
|
|
63
|
+
// Force npm to use npmjs.com registry
|
|
64
|
+
npm_config_registry: 'https://registry.npmjs.com'
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
console.log('✅ Published to npmjs.com successfully!');
|
|
68
|
+
} catch (error) {
|
|
69
|
+
console.error('❌ Failed to publish to npmjs.com');
|
|
70
|
+
throw error;
|
|
71
|
+
} finally {
|
|
72
|
+
// Restore original publishConfig
|
|
73
|
+
if (originalPublishConfig) {
|
|
74
|
+
packageJson.publishConfig = originalPublishConfig;
|
|
75
|
+
} else {
|
|
76
|
+
delete packageJson.publishConfig;
|
|
77
|
+
}
|
|
78
|
+
writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
|
|
79
|
+
console.log('🔄 Restored publishConfig');
|
|
80
|
+
|
|
81
|
+
// Restore .npmrc if it existed
|
|
82
|
+
if (npmrcExists && originalNpmrc !== null) {
|
|
83
|
+
writeFileSync(npmrcPath, originalNpmrc);
|
|
84
|
+
console.log('🔄 Restored .npmrc');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { readFileSync, readdirSync } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = dirname(__filename);
|
|
7
|
+
const rootDir = join(__dirname, '..');
|
|
8
|
+
const uiDir = join(rootDir, 'src/components/ui');
|
|
9
|
+
const indexFile = join(rootDir, 'src/index.ts');
|
|
10
|
+
|
|
11
|
+
// Read index.ts to find all export statements
|
|
12
|
+
const indexContent = readFileSync(indexFile, 'utf-8');
|
|
13
|
+
|
|
14
|
+
// Extract export statements
|
|
15
|
+
const exportRegex = /export\s+{([^}]+)}\s+from\s+["']\.\/components\/ui\/([^"']+)["']/g;
|
|
16
|
+
const exports = [];
|
|
17
|
+
let match;
|
|
18
|
+
|
|
19
|
+
while ((match = exportRegex.exec(indexContent)) !== null) {
|
|
20
|
+
const exportsList = match[1].split(',').map(e => e.trim());
|
|
21
|
+
const filePath = match[2];
|
|
22
|
+
exports.push({ file: filePath, exports: exportsList });
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
console.log('🔍 Validating exports...\n');
|
|
26
|
+
|
|
27
|
+
const errors = [];
|
|
28
|
+
|
|
29
|
+
for (const { file, exports: expectedExports } of exports) {
|
|
30
|
+
// Try .tsx first, then .ts
|
|
31
|
+
let filePath = join(uiDir, `${file}.tsx`);
|
|
32
|
+
if (!filePath.includes('.')) {
|
|
33
|
+
filePath = join(uiDir, `${file}.tsx`);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
try {
|
|
37
|
+
// Check if file exists, try .ts if .tsx doesn't exist
|
|
38
|
+
let fileContent;
|
|
39
|
+
try {
|
|
40
|
+
fileContent = readFileSync(filePath, 'utf-8');
|
|
41
|
+
} catch (e) {
|
|
42
|
+
if (e.code === 'ENOENT') {
|
|
43
|
+
filePath = join(uiDir, `${file}.ts`);
|
|
44
|
+
fileContent = readFileSync(filePath, 'utf-8');
|
|
45
|
+
} else {
|
|
46
|
+
throw e;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Extract actual exports from the file
|
|
51
|
+
const actualExportRegex = /export\s+{([^}]+)}\s+from|export\s+(?:const|function|class|type|interface)\s+(\w+)/g;
|
|
52
|
+
const actualExports = new Set();
|
|
53
|
+
|
|
54
|
+
// Check for named exports in export { ... } statements
|
|
55
|
+
const namedExportRegex = /export\s+{([^}]+)}/g;
|
|
56
|
+
let namedMatch;
|
|
57
|
+
while ((namedMatch = namedExportRegex.exec(fileContent)) !== null) {
|
|
58
|
+
const exports = namedMatch[1].split(',').map(e => e.trim().split(/\s+as\s+/)[0].trim());
|
|
59
|
+
exports.forEach(exp => actualExports.add(exp));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Check for direct exports: export function/const/class
|
|
63
|
+
const directExportRegex = /export\s+(?:const|function|class|type|interface)\s+(\w+)/g;
|
|
64
|
+
let directMatch;
|
|
65
|
+
while ((directMatch = directExportRegex.exec(fileContent)) !== null) {
|
|
66
|
+
actualExports.add(directMatch[1]);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Check for default exports that might be re-exported
|
|
70
|
+
const defaultExportRegex = /export\s+default\s+(\w+)/;
|
|
71
|
+
const defaultMatch = defaultExportRegex.exec(fileContent);
|
|
72
|
+
if (defaultMatch) {
|
|
73
|
+
actualExports.add(defaultMatch[1]);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Validate each expected export
|
|
77
|
+
for (const expected of expectedExports) {
|
|
78
|
+
// Handle type exports and aliases, skip empty strings
|
|
79
|
+
const exportName = expected.split(/\s+as\s+/)[0].trim();
|
|
80
|
+
|
|
81
|
+
if (!exportName || exportName === '') continue;
|
|
82
|
+
|
|
83
|
+
if (!actualExports.has(exportName)) {
|
|
84
|
+
errors.push({
|
|
85
|
+
file,
|
|
86
|
+
missing: exportName,
|
|
87
|
+
available: Array.from(actualExports).sort()
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
} catch (err) {
|
|
92
|
+
if (err.code === 'ENOENT') {
|
|
93
|
+
errors.push({ file, error: 'File not found' });
|
|
94
|
+
} else {
|
|
95
|
+
errors.push({ file, error: err.message });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (errors.length > 0) {
|
|
101
|
+
console.log('❌ Found export errors:\n');
|
|
102
|
+
errors.forEach(({ file, missing, available, error }) => {
|
|
103
|
+
if (error) {
|
|
104
|
+
console.log(` ${file}: ${error}`);
|
|
105
|
+
} else {
|
|
106
|
+
console.log(` ${file}: Missing export "${missing}"`);
|
|
107
|
+
if (available && available.length > 0) {
|
|
108
|
+
console.log(` Available exports: ${available.join(', ')}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
process.exit(1);
|
|
113
|
+
} else {
|
|
114
|
+
console.log('✅ All exports are valid!');
|
|
115
|
+
process.exit(0);
|
|
116
|
+
}
|
|
117
|
+
|