@cicore/cli 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/bin/ci.js +13 -0
- package/dist/commands/addon/api-actions.d.ts +45 -0
- package/dist/commands/addon/api-actions.d.ts.map +1 -0
- package/dist/commands/addon/api-actions.js +281 -0
- package/dist/commands/addon/api-actions.js.map +1 -0
- package/dist/commands/addon/build.d.ts +11 -0
- package/dist/commands/addon/build.d.ts.map +1 -0
- package/dist/commands/addon/build.js +182 -0
- package/dist/commands/addon/build.js.map +1 -0
- package/dist/commands/addon/create.d.ts +11 -0
- package/dist/commands/addon/create.d.ts.map +1 -0
- package/dist/commands/addon/create.js +1186 -0
- package/dist/commands/addon/create.js.map +1 -0
- package/dist/commands/addon/delete.d.ts +13 -0
- package/dist/commands/addon/delete.d.ts.map +1 -0
- package/dist/commands/addon/delete.js +83 -0
- package/dist/commands/addon/delete.js.map +1 -0
- package/dist/commands/addon/deploy.d.ts +27 -0
- package/dist/commands/addon/deploy.d.ts.map +1 -0
- package/dist/commands/addon/deploy.js +459 -0
- package/dist/commands/addon/deploy.js.map +1 -0
- package/dist/commands/addon/dev-deploy.d.ts +31 -0
- package/dist/commands/addon/dev-deploy.d.ts.map +1 -0
- package/dist/commands/addon/dev-deploy.js +128 -0
- package/dist/commands/addon/dev-deploy.js.map +1 -0
- package/dist/commands/addon/dev.d.ts +36 -0
- package/dist/commands/addon/dev.d.ts.map +1 -0
- package/dist/commands/addon/dev.js +323 -0
- package/dist/commands/addon/dev.js.map +1 -0
- package/dist/commands/addon/extract-classes.d.ts +23 -0
- package/dist/commands/addon/extract-classes.d.ts.map +1 -0
- package/dist/commands/addon/extract-classes.js +281 -0
- package/dist/commands/addon/extract-classes.js.map +1 -0
- package/dist/commands/addon/generate-safelist.d.ts +24 -0
- package/dist/commands/addon/generate-safelist.d.ts.map +1 -0
- package/dist/commands/addon/generate-safelist.js +276 -0
- package/dist/commands/addon/generate-safelist.js.map +1 -0
- package/dist/commands/addon/index.d.ts +19 -0
- package/dist/commands/addon/index.d.ts.map +1 -0
- package/dist/commands/addon/index.js +296 -0
- package/dist/commands/addon/index.js.map +1 -0
- package/dist/commands/addon/init-repo.d.ts +25 -0
- package/dist/commands/addon/init-repo.d.ts.map +1 -0
- package/dist/commands/addon/init-repo.js +171 -0
- package/dist/commands/addon/init-repo.js.map +1 -0
- package/dist/commands/addon/install.d.ts +23 -0
- package/dist/commands/addon/install.d.ts.map +1 -0
- package/dist/commands/addon/install.js +84 -0
- package/dist/commands/addon/install.js.map +1 -0
- package/dist/commands/addon/list.d.ts +10 -0
- package/dist/commands/addon/list.d.ts.map +1 -0
- package/dist/commands/addon/list.js +102 -0
- package/dist/commands/addon/list.js.map +1 -0
- package/dist/commands/addon/manifest-refresh.d.ts +17 -0
- package/dist/commands/addon/manifest-refresh.d.ts.map +1 -0
- package/dist/commands/addon/manifest-refresh.js +48 -0
- package/dist/commands/addon/manifest-refresh.js.map +1 -0
- package/dist/commands/addon/migrate.d.ts +40 -0
- package/dist/commands/addon/migrate.d.ts.map +1 -0
- package/dist/commands/addon/migrate.js +236 -0
- package/dist/commands/addon/migrate.js.map +1 -0
- package/dist/commands/addon/publish.d.ts +33 -0
- package/dist/commands/addon/publish.d.ts.map +1 -0
- package/dist/commands/addon/publish.js +236 -0
- package/dist/commands/addon/publish.js.map +1 -0
- package/dist/commands/addon/scaffold-quality.d.ts +21 -0
- package/dist/commands/addon/scaffold-quality.d.ts.map +1 -0
- package/dist/commands/addon/scaffold-quality.js +90 -0
- package/dist/commands/addon/scaffold-quality.js.map +1 -0
- package/dist/commands/addon/sign.d.ts +9 -0
- package/dist/commands/addon/sign.d.ts.map +1 -0
- package/dist/commands/addon/sign.js +83 -0
- package/dist/commands/addon/sign.js.map +1 -0
- package/dist/commands/addon/toggle.d.ts +6 -0
- package/dist/commands/addon/toggle.d.ts.map +1 -0
- package/dist/commands/addon/toggle.js +46 -0
- package/dist/commands/addon/toggle.js.map +1 -0
- package/dist/commands/agent/index.d.ts +34 -0
- package/dist/commands/agent/index.d.ts.map +1 -0
- package/dist/commands/agent/index.js +564 -0
- package/dist/commands/agent/index.js.map +1 -0
- package/dist/commands/brand/index.d.ts +54 -0
- package/dist/commands/brand/index.d.ts.map +1 -0
- package/dist/commands/brand/index.js +367 -0
- package/dist/commands/brand/index.js.map +1 -0
- package/dist/commands/build/index.d.ts +53 -0
- package/dist/commands/build/index.d.ts.map +1 -0
- package/dist/commands/build/index.js +726 -0
- package/dist/commands/build/index.js.map +1 -0
- package/dist/commands/cache/flush-local.d.ts +31 -0
- package/dist/commands/cache/flush-local.d.ts.map +1 -0
- package/dist/commands/cache/flush-local.js +161 -0
- package/dist/commands/cache/flush-local.js.map +1 -0
- package/dist/commands/cache/index.d.ts +14 -0
- package/dist/commands/cache/index.d.ts.map +1 -0
- package/dist/commands/cache/index.js +453 -0
- package/dist/commands/cache/index.js.map +1 -0
- package/dist/commands/check/index.d.ts +8 -0
- package/dist/commands/check/index.d.ts.map +1 -0
- package/dist/commands/check/index.js +1316 -0
- package/dist/commands/check/index.js.map +1 -0
- package/dist/commands/cloudflare/index.d.ts +8 -0
- package/dist/commands/cloudflare/index.d.ts.map +1 -0
- package/dist/commands/cloudflare/index.js +453 -0
- package/dist/commands/cloudflare/index.js.map +1 -0
- package/dist/commands/core/create.d.ts +12 -0
- package/dist/commands/core/create.d.ts.map +1 -0
- package/dist/commands/core/create.js +206 -0
- package/dist/commands/core/create.js.map +1 -0
- package/dist/commands/core/delete.d.ts +11 -0
- package/dist/commands/core/delete.d.ts.map +1 -0
- package/dist/commands/core/delete.js +64 -0
- package/dist/commands/core/delete.js.map +1 -0
- package/dist/commands/core/env.d.ts +12 -0
- package/dist/commands/core/env.d.ts.map +1 -0
- package/dist/commands/core/env.js +95 -0
- package/dist/commands/core/env.js.map +1 -0
- package/dist/commands/core/health.d.ts +6 -0
- package/dist/commands/core/health.d.ts.map +1 -0
- package/dist/commands/core/health.js +215 -0
- package/dist/commands/core/health.js.map +1 -0
- package/dist/commands/core/index.d.ts +15 -0
- package/dist/commands/core/index.d.ts.map +1 -0
- package/dist/commands/core/index.js +86 -0
- package/dist/commands/core/index.js.map +1 -0
- package/dist/commands/core/list.d.ts +11 -0
- package/dist/commands/core/list.d.ts.map +1 -0
- package/dist/commands/core/list.js +58 -0
- package/dist/commands/core/list.js.map +1 -0
- package/dist/commands/core/rebuild.d.ts +13 -0
- package/dist/commands/core/rebuild.d.ts.map +1 -0
- package/dist/commands/core/rebuild.js +119 -0
- package/dist/commands/core/rebuild.js.map +1 -0
- package/dist/commands/db/index.d.ts +23 -0
- package/dist/commands/db/index.d.ts.map +1 -0
- package/dist/commands/db/index.js +355 -0
- package/dist/commands/db/index.js.map +1 -0
- package/dist/commands/db/promote-silo.d.ts +320 -0
- package/dist/commands/db/promote-silo.d.ts.map +1 -0
- package/dist/commands/db/promote-silo.js +930 -0
- package/dist/commands/db/promote-silo.js.map +1 -0
- package/dist/commands/db/relocate.d.ts +41 -0
- package/dist/commands/db/relocate.d.ts.map +1 -0
- package/dist/commands/db/relocate.js +482 -0
- package/dist/commands/db/relocate.js.map +1 -0
- package/dist/commands/db/rollback-silo.d.ts +44 -0
- package/dist/commands/db/rollback-silo.d.ts.map +1 -0
- package/dist/commands/db/rollback-silo.js +402 -0
- package/dist/commands/db/rollback-silo.js.map +1 -0
- package/dist/commands/deploy/index.d.ts +26 -0
- package/dist/commands/deploy/index.d.ts.map +1 -0
- package/dist/commands/deploy/index.js +107 -0
- package/dist/commands/deploy/index.js.map +1 -0
- package/dist/commands/devops/index.d.ts +6 -0
- package/dist/commands/devops/index.d.ts.map +1 -0
- package/dist/commands/devops/index.js +220 -0
- package/dist/commands/devops/index.js.map +1 -0
- package/dist/commands/domain/index.d.ts +8 -0
- package/dist/commands/domain/index.d.ts.map +1 -0
- package/dist/commands/domain/index.js +386 -0
- package/dist/commands/domain/index.js.map +1 -0
- package/dist/commands/image/index.d.ts +8 -0
- package/dist/commands/image/index.d.ts.map +1 -0
- package/dist/commands/image/index.js +308 -0
- package/dist/commands/image/index.js.map +1 -0
- package/dist/commands/install/factory-reset.d.ts +21 -0
- package/dist/commands/install/factory-reset.d.ts.map +1 -0
- package/dist/commands/install/factory-reset.js +83 -0
- package/dist/commands/install/factory-reset.js.map +1 -0
- package/dist/commands/install/index.d.ts +17 -0
- package/dist/commands/install/index.d.ts.map +1 -0
- package/dist/commands/install/index.js +44 -0
- package/dist/commands/install/index.js.map +1 -0
- package/dist/commands/install/install.d.ts +35 -0
- package/dist/commands/install/install.d.ts.map +1 -0
- package/dist/commands/install/install.js +171 -0
- package/dist/commands/install/install.js.map +1 -0
- package/dist/commands/login/index.d.ts +15 -0
- package/dist/commands/login/index.d.ts.map +1 -0
- package/dist/commands/login/index.js +58 -0
- package/dist/commands/login/index.js.map +1 -0
- package/dist/commands/nginx/index.d.ts +11 -0
- package/dist/commands/nginx/index.d.ts.map +1 -0
- package/dist/commands/nginx/index.js +580 -0
- package/dist/commands/nginx/index.js.map +1 -0
- package/dist/commands/server/bootstrap.d.ts +25 -0
- package/dist/commands/server/bootstrap.d.ts.map +1 -0
- package/dist/commands/server/bootstrap.js +260 -0
- package/dist/commands/server/bootstrap.js.map +1 -0
- package/dist/commands/server/index.d.ts +8 -0
- package/dist/commands/server/index.d.ts.map +1 -0
- package/dist/commands/server/index.js +2524 -0
- package/dist/commands/server/index.js.map +1 -0
- package/dist/commands/setup/index.d.ts +34 -0
- package/dist/commands/setup/index.d.ts.map +1 -0
- package/dist/commands/setup/index.js +423 -0
- package/dist/commands/setup/index.js.map +1 -0
- package/dist/commands/ssl/index.d.ts +8 -0
- package/dist/commands/ssl/index.d.ts.map +1 -0
- package/dist/commands/ssl/index.js +275 -0
- package/dist/commands/ssl/index.js.map +1 -0
- package/dist/commands/superadmin/index.d.ts +16 -0
- package/dist/commands/superadmin/index.d.ts.map +1 -0
- package/dist/commands/superadmin/index.js +81 -0
- package/dist/commands/superadmin/index.js.map +1 -0
- package/dist/commands/tenant/index.d.ts +6 -0
- package/dist/commands/tenant/index.d.ts.map +1 -0
- package/dist/commands/tenant/index.js +192 -0
- package/dist/commands/tenant/index.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/addon-sign.d.ts +23 -0
- package/dist/lib/addon-sign.d.ts.map +1 -0
- package/dist/lib/addon-sign.js +39 -0
- package/dist/lib/addon-sign.js.map +1 -0
- package/dist/lib/addon-sign.test.d.ts +2 -0
- package/dist/lib/addon-sign.test.d.ts.map +1 -0
- package/dist/lib/addon-sign.test.js +27 -0
- package/dist/lib/addon-sign.test.js.map +1 -0
- package/dist/lib/cdn.d.ts +25 -0
- package/dist/lib/cdn.d.ts.map +1 -0
- package/dist/lib/cdn.js +131 -0
- package/dist/lib/cdn.js.map +1 -0
- package/dist/lib/cloudflare.d.ts +133 -0
- package/dist/lib/cloudflare.d.ts.map +1 -0
- package/dist/lib/cloudflare.js +435 -0
- package/dist/lib/cloudflare.js.map +1 -0
- package/dist/lib/config.d.ts +96 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +132 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/env.d.ts +8 -0
- package/dist/lib/env.d.ts.map +1 -0
- package/dist/lib/env.js +64 -0
- package/dist/lib/env.js.map +1 -0
- package/dist/lib/hosts.d.ts +194 -0
- package/dist/lib/hosts.d.ts.map +1 -0
- package/dist/lib/hosts.js +183 -0
- package/dist/lib/hosts.js.map +1 -0
- package/dist/lib/logger.d.ts +68 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +130 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/nginx-config.d.ts +78 -0
- package/dist/lib/nginx-config.d.ts.map +1 -0
- package/dist/lib/nginx-config.js +736 -0
- package/dist/lib/nginx-config.js.map +1 -0
- package/dist/lib/ops/addon-dev.d.ts +93 -0
- package/dist/lib/ops/addon-dev.d.ts.map +1 -0
- package/dist/lib/ops/addon-dev.js +237 -0
- package/dist/lib/ops/addon-dev.js.map +1 -0
- package/dist/lib/ops/addon-quality.d.ts +38 -0
- package/dist/lib/ops/addon-quality.d.ts.map +1 -0
- package/dist/lib/ops/addon-quality.js +338 -0
- package/dist/lib/ops/addon-quality.js.map +1 -0
- package/dist/lib/ops/addon-routes.d.ts +49 -0
- package/dist/lib/ops/addon-routes.d.ts.map +1 -0
- package/dist/lib/ops/addon-routes.js +189 -0
- package/dist/lib/ops/addon-routes.js.map +1 -0
- package/dist/lib/ops/addon.d.ts +120 -0
- package/dist/lib/ops/addon.d.ts.map +1 -0
- package/dist/lib/ops/addon.js +260 -0
- package/dist/lib/ops/addon.js.map +1 -0
- package/dist/lib/ops/cdn.d.ts +87 -0
- package/dist/lib/ops/cdn.d.ts.map +1 -0
- package/dist/lib/ops/cdn.js +170 -0
- package/dist/lib/ops/cdn.js.map +1 -0
- package/dist/lib/ops/cf.d.ts +36 -0
- package/dist/lib/ops/cf.d.ts.map +1 -0
- package/dist/lib/ops/cf.js +114 -0
- package/dist/lib/ops/cf.js.map +1 -0
- package/dist/lib/ops/compose.d.ts +95 -0
- package/dist/lib/ops/compose.d.ts.map +1 -0
- package/dist/lib/ops/compose.js +165 -0
- package/dist/lib/ops/compose.js.map +1 -0
- package/dist/lib/ops/core.d.ts +117 -0
- package/dist/lib/ops/core.d.ts.map +1 -0
- package/dist/lib/ops/core.js +322 -0
- package/dist/lib/ops/core.js.map +1 -0
- package/dist/lib/ops/db.d.ts +116 -0
- package/dist/lib/ops/db.d.ts.map +1 -0
- package/dist/lib/ops/db.js +351 -0
- package/dist/lib/ops/db.js.map +1 -0
- package/dist/lib/ops/dns.d.ts +111 -0
- package/dist/lib/ops/dns.d.ts.map +1 -0
- package/dist/lib/ops/dns.js +306 -0
- package/dist/lib/ops/dns.js.map +1 -0
- package/dist/lib/ops/image.d.ts +94 -0
- package/dist/lib/ops/image.d.ts.map +1 -0
- package/dist/lib/ops/image.js +159 -0
- package/dist/lib/ops/image.js.map +1 -0
- package/dist/lib/ops/nginx.d.ts +114 -0
- package/dist/lib/ops/nginx.d.ts.map +1 -0
- package/dist/lib/ops/nginx.js +388 -0
- package/dist/lib/ops/nginx.js.map +1 -0
- package/dist/lib/ops/redis.d.ts +7 -0
- package/dist/lib/ops/redis.d.ts.map +1 -0
- package/dist/lib/ops/redis.js +35 -0
- package/dist/lib/ops/redis.js.map +1 -0
- package/dist/lib/ops/ssh.d.ts +127 -0
- package/dist/lib/ops/ssh.d.ts.map +1 -0
- package/dist/lib/ops/ssh.js +269 -0
- package/dist/lib/ops/ssh.js.map +1 -0
- package/dist/lib/prompts.d.ts +46 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +113 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/sast.d.ts +43 -0
- package/dist/lib/sast.d.ts.map +1 -0
- package/dist/lib/sast.js +79 -0
- package/dist/lib/sast.js.map +1 -0
- package/dist/lib/sast.test.d.ts +2 -0
- package/dist/lib/sast.test.d.ts.map +1 -0
- package/dist/lib/sast.test.js +33 -0
- package/dist/lib/sast.test.js.map +1 -0
- package/dist/lib/shell.d.ts +61 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +183 -0
- package/dist/lib/shell.js.map +1 -0
- package/dist/lib/ssh-config.d.ts +37 -0
- package/dist/lib/ssh-config.d.ts.map +1 -0
- package/dist/lib/ssh-config.js +122 -0
- package/dist/lib/ssh-config.js.map +1 -0
- package/dist/lib/tenant-scope.d.ts +38 -0
- package/dist/lib/tenant-scope.d.ts.map +1 -0
- package/dist/lib/tenant-scope.js +129 -0
- package/dist/lib/tenant-scope.js.map +1 -0
- package/dist/lib/tenant-scope.test.d.ts +2 -0
- package/dist/lib/tenant-scope.test.d.ts.map +1 -0
- package/dist/lib/tenant-scope.test.js +223 -0
- package/dist/lib/tenant-scope.test.js.map +1 -0
- package/package.json +58 -0
- package/templates/bootstrap/.env.template +54 -0
- package/templates/bootstrap/docker-compose.yml +145 -0
- package/templates/vhost.conf.tmpl +446 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CiCore CLI - Addon CSS Class Extraction
|
|
3
|
+
*
|
|
4
|
+
* Scans addon Vue files to extract all Tailwind CSS classes.
|
|
5
|
+
* Generates a JSON file that will be used for safelist generation.
|
|
6
|
+
*
|
|
7
|
+
* Part of the Automated Safelist Pipeline (TIER 1)
|
|
8
|
+
*
|
|
9
|
+
* @command npx vu addon extract-classes [addonName]
|
|
10
|
+
*/
|
|
11
|
+
import fs from 'fs-extra';
|
|
12
|
+
import path from 'path';
|
|
13
|
+
import { glob } from 'glob';
|
|
14
|
+
import { log } from '../../lib/logger.js';
|
|
15
|
+
import { paths } from '../../lib/config.js';
|
|
16
|
+
// Known Tailwind utility prefixes for validation
|
|
17
|
+
const TAILWIND_PREFIXES = [
|
|
18
|
+
// Colors
|
|
19
|
+
'bg-', 'text-', 'border-', 'ring-', 'shadow-', 'outline-',
|
|
20
|
+
'from-', 'via-', 'to-', 'accent-', 'caret-', 'fill-', 'stroke-',
|
|
21
|
+
'decoration-', 'divide-', 'placeholder-',
|
|
22
|
+
// Spacing
|
|
23
|
+
'p-', 'px-', 'py-', 'pt-', 'pr-', 'pb-', 'pl-', 'ps-', 'pe-',
|
|
24
|
+
'm-', 'mx-', 'my-', 'mt-', 'mr-', 'mb-', 'ml-', 'ms-', 'me-',
|
|
25
|
+
'gap-', 'gap-x-', 'gap-y-', 'space-x-', 'space-y-',
|
|
26
|
+
// Sizing
|
|
27
|
+
'w-', 'h-', 'min-w-', 'min-h-', 'max-w-', 'max-h-', 'size-',
|
|
28
|
+
// Layout
|
|
29
|
+
'grid-cols-', 'grid-rows-', 'col-', 'row-', 'columns-',
|
|
30
|
+
'flex-', 'basis-', 'grow-', 'shrink-',
|
|
31
|
+
'order-', 'aspect-', 'container',
|
|
32
|
+
// Typography
|
|
33
|
+
'font-', 'text-', 'leading-', 'tracking-', 'indent-',
|
|
34
|
+
'align-', 'whitespace-', 'break-', 'hyphens-',
|
|
35
|
+
// Borders
|
|
36
|
+
'rounded-', 'border-', 'divide-',
|
|
37
|
+
// Effects
|
|
38
|
+
'opacity-', 'blur-', 'brightness-', 'contrast-', 'drop-shadow-',
|
|
39
|
+
'grayscale-', 'hue-rotate-', 'invert-', 'saturate-', 'sepia-',
|
|
40
|
+
'backdrop-',
|
|
41
|
+
// Transitions
|
|
42
|
+
'transition-', 'duration-', 'ease-', 'delay-',
|
|
43
|
+
'animate-',
|
|
44
|
+
// Transforms
|
|
45
|
+
'scale-', 'rotate-', 'translate-', 'skew-', 'origin-',
|
|
46
|
+
// Interactivity
|
|
47
|
+
'cursor-', 'pointer-events-', 'resize-', 'scroll-', 'snap-',
|
|
48
|
+
'touch-', 'select-', 'will-change-', 'appearance-',
|
|
49
|
+
// SVG
|
|
50
|
+
'fill-', 'stroke-'
|
|
51
|
+
];
|
|
52
|
+
// Modifier prefixes (dark:, hover:, md:, etc.)
|
|
53
|
+
const MODIFIERS = [
|
|
54
|
+
'hover', 'focus', 'active', 'disabled', 'visited',
|
|
55
|
+
'first', 'last', 'odd', 'even', 'empty',
|
|
56
|
+
'focus-within', 'focus-visible', 'group-hover', 'peer-hover',
|
|
57
|
+
'dark', 'light',
|
|
58
|
+
'sm', 'md', 'lg', 'xl', '2xl',
|
|
59
|
+
'motion-safe', 'motion-reduce',
|
|
60
|
+
'print', 'portrait', 'landscape',
|
|
61
|
+
'ltr', 'rtl',
|
|
62
|
+
'open', 'closed',
|
|
63
|
+
'before', 'after', 'first-line', 'first-letter', 'marker', 'selection',
|
|
64
|
+
'placeholder', 'file', 'backdrop'
|
|
65
|
+
];
|
|
66
|
+
/**
|
|
67
|
+
* Extract all Tailwind classes from Vue file content
|
|
68
|
+
*/
|
|
69
|
+
function extractClassesFromContent(content) {
|
|
70
|
+
const classes = new Set();
|
|
71
|
+
// Pattern 1: Static class attributes
|
|
72
|
+
// class="bg-primary-500 hover:bg-primary-600"
|
|
73
|
+
const staticClassRegex = /class="([^"]+)"/g;
|
|
74
|
+
let match;
|
|
75
|
+
while ((match = staticClassRegex.exec(content)) !== null) {
|
|
76
|
+
match[1].split(/\s+/).forEach(cls => {
|
|
77
|
+
if (cls.trim())
|
|
78
|
+
classes.add(cls.trim());
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
// Pattern 2: Single-quote class attributes
|
|
82
|
+
// class='bg-primary-500'
|
|
83
|
+
const singleQuoteClassRegex = /class='([^']+)'/g;
|
|
84
|
+
while ((match = singleQuoteClassRegex.exec(content)) !== null) {
|
|
85
|
+
match[1].split(/\s+/).forEach(cls => {
|
|
86
|
+
if (cls.trim())
|
|
87
|
+
classes.add(cls.trim());
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
// Pattern 3: Dynamic class bindings - object syntax
|
|
91
|
+
// :class="{ 'ring-blue-600': active, 'bg-red-500': error }"
|
|
92
|
+
const dynamicClassObjectRegex = /:class="\{[^}]*\}/g;
|
|
93
|
+
const objectMatches = content.matchAll(dynamicClassObjectRegex);
|
|
94
|
+
for (const objMatch of objectMatches) {
|
|
95
|
+
const stringClassRegex = /'([^']+)'(?:\s*:)/g;
|
|
96
|
+
let strMatch;
|
|
97
|
+
while ((strMatch = stringClassRegex.exec(objMatch[0])) !== null) {
|
|
98
|
+
strMatch[1].split(/\s+/).forEach(cls => {
|
|
99
|
+
if (cls.trim())
|
|
100
|
+
classes.add(cls.trim());
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Pattern 4: Dynamic class bindings - array syntax
|
|
105
|
+
// :class="['bg-primary-500', isActive ? 'ring-2' : '']"
|
|
106
|
+
const arrayClassRegex = /:class="\[[^\]]+\]/g;
|
|
107
|
+
const arrayMatches = content.matchAll(arrayClassRegex);
|
|
108
|
+
for (const arrMatch of arrayMatches) {
|
|
109
|
+
const stringInArrayRegex = /'([^']+)'/g;
|
|
110
|
+
let inMatch;
|
|
111
|
+
while ((inMatch = stringInArrayRegex.exec(arrMatch[0])) !== null) {
|
|
112
|
+
inMatch[1].split(/\s+/).forEach(cls => {
|
|
113
|
+
if (cls.trim())
|
|
114
|
+
classes.add(cls.trim());
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Pattern 5: cn() / clsx() / classNames() function calls
|
|
119
|
+
// cn('hover:bg-gray-100', props.class)
|
|
120
|
+
const cnCallRegex = /(?:cn|clsx|classNames|twMerge)\([^)]*\)/g;
|
|
121
|
+
const cnMatches = content.matchAll(cnCallRegex);
|
|
122
|
+
for (const cnMatch of cnMatches) {
|
|
123
|
+
const stringInCnRegex = /['"`]([^'"`]+)['"`]/g;
|
|
124
|
+
let strMatch;
|
|
125
|
+
while ((strMatch = stringInCnRegex.exec(cnMatch[0])) !== null) {
|
|
126
|
+
strMatch[1].split(/\s+/).forEach(cls => {
|
|
127
|
+
if (cls.trim())
|
|
128
|
+
classes.add(cls.trim());
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Pattern 6: Template literals with class strings
|
|
133
|
+
// `bg-${color}-500 hover:bg-${color}-600`
|
|
134
|
+
const templateLiteralRegex = /`([^`]+)`/g;
|
|
135
|
+
while ((match = templateLiteralRegex.exec(content)) !== null) {
|
|
136
|
+
// Extract potential classes (handle ${} interpolations carefully)
|
|
137
|
+
const templateContent = match[1];
|
|
138
|
+
// Split by whitespace and filter potential class patterns
|
|
139
|
+
templateContent.split(/\s+/).forEach(part => {
|
|
140
|
+
// Skip pure interpolations like ${color}
|
|
141
|
+
if (part.includes('${') && !part.includes('-'))
|
|
142
|
+
return;
|
|
143
|
+
// If it has a known prefix after removing everything before last dash in interpolation
|
|
144
|
+
if (isLikelyTailwindClass(part)) {
|
|
145
|
+
classes.add(part);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return Array.from(classes);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Check if a string is likely a Tailwind class
|
|
153
|
+
*/
|
|
154
|
+
function isLikelyTailwindClass(cls) {
|
|
155
|
+
// Remove modifiers to check base class
|
|
156
|
+
const parts = cls.split(':');
|
|
157
|
+
const baseClass = parts[parts.length - 1];
|
|
158
|
+
// Check if starts with known prefix
|
|
159
|
+
for (const prefix of TAILWIND_PREFIXES) {
|
|
160
|
+
if (baseClass.startsWith(prefix))
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
// Check common standalone utilities
|
|
164
|
+
const standaloneClasses = [
|
|
165
|
+
'flex', 'grid', 'block', 'inline', 'hidden', 'invisible', 'visible',
|
|
166
|
+
'static', 'fixed', 'absolute', 'relative', 'sticky',
|
|
167
|
+
'overflow-hidden', 'overflow-auto', 'overflow-scroll', 'overflow-visible',
|
|
168
|
+
'truncate', 'italic', 'not-italic', 'underline', 'overline', 'line-through',
|
|
169
|
+
'uppercase', 'lowercase', 'capitalize', 'normal-case',
|
|
170
|
+
'antialiased', 'subpixel-antialiased',
|
|
171
|
+
'object-contain', 'object-cover', 'object-fill', 'object-none', 'object-scale-down',
|
|
172
|
+
'sr-only', 'not-sr-only',
|
|
173
|
+
'isolate', 'isolation-auto',
|
|
174
|
+
'table', 'table-caption', 'table-cell', 'table-column', 'table-column-group',
|
|
175
|
+
'table-footer-group', 'table-header-group', 'table-row-group', 'table-row'
|
|
176
|
+
];
|
|
177
|
+
if (standaloneClasses.includes(baseClass))
|
|
178
|
+
return true;
|
|
179
|
+
// Check if all modifiers are valid
|
|
180
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
181
|
+
if (!MODIFIERS.includes(parts[i])) {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Filter classes to only include Tailwind utilities
|
|
189
|
+
*/
|
|
190
|
+
function filterTailwindClasses(classes) {
|
|
191
|
+
return classes.filter(cls => {
|
|
192
|
+
// Skip empty classes
|
|
193
|
+
if (!cls || cls.trim() === '')
|
|
194
|
+
return false;
|
|
195
|
+
// Skip template interpolations
|
|
196
|
+
if (cls.includes('${'))
|
|
197
|
+
return false;
|
|
198
|
+
// Skip classes that are clearly not Tailwind
|
|
199
|
+
if (cls.startsWith('i-'))
|
|
200
|
+
return false; // Icon classes
|
|
201
|
+
if (cls.startsWith('v-'))
|
|
202
|
+
return false; // Vue directives
|
|
203
|
+
return isLikelyTailwindClass(cls);
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Main extraction function
|
|
208
|
+
*/
|
|
209
|
+
export async function extractClasses(addonName, options = {}) {
|
|
210
|
+
const startTime = Date.now();
|
|
211
|
+
log.title('🔍 Tailwind Class Extraction');
|
|
212
|
+
const addonsDir = path.join(paths.dev.root, 'addons');
|
|
213
|
+
const result = {};
|
|
214
|
+
// Determine which addons to scan
|
|
215
|
+
let addonsToScan = [];
|
|
216
|
+
if (addonName) {
|
|
217
|
+
// Single addon
|
|
218
|
+
const addonPath = path.join(addonsDir, addonName);
|
|
219
|
+
if (!await fs.pathExists(addonPath)) {
|
|
220
|
+
log.error(`Addon not found: ${addonName}`);
|
|
221
|
+
process.exit(1);
|
|
222
|
+
}
|
|
223
|
+
addonsToScan = [addonName];
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
// All addons
|
|
227
|
+
const entries = await fs.readdir(addonsDir, { withFileTypes: true });
|
|
228
|
+
addonsToScan = entries
|
|
229
|
+
.filter(e => e.isDirectory())
|
|
230
|
+
.map(e => e.name);
|
|
231
|
+
}
|
|
232
|
+
log.info(`Scanning ${addonsToScan.length} addon(s)...`);
|
|
233
|
+
log.blank();
|
|
234
|
+
let totalClasses = 0;
|
|
235
|
+
for (const addon of addonsToScan) {
|
|
236
|
+
const addonPath = path.join(addonsDir, addon);
|
|
237
|
+
// Find all Vue files
|
|
238
|
+
const vueFiles = await glob('**/*.vue', {
|
|
239
|
+
cwd: addonPath,
|
|
240
|
+
absolute: true
|
|
241
|
+
});
|
|
242
|
+
if (vueFiles.length === 0) {
|
|
243
|
+
if (options.verbose) {
|
|
244
|
+
log.warn(`${addon}: No Vue files found`);
|
|
245
|
+
}
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
const addonClasses = new Set();
|
|
249
|
+
for (const file of vueFiles) {
|
|
250
|
+
const content = await fs.readFile(file, 'utf-8');
|
|
251
|
+
const extractedClasses = extractClassesFromContent(content);
|
|
252
|
+
const filteredClasses = filterTailwindClasses(extractedClasses);
|
|
253
|
+
filteredClasses.forEach(cls => addonClasses.add(cls));
|
|
254
|
+
if (options.verbose && filteredClasses.length > 0) {
|
|
255
|
+
log.info(` ${path.relative(addonPath, file)}: ${filteredClasses.length} classes`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
if (addonClasses.size > 0) {
|
|
259
|
+
result[addon] = Array.from(addonClasses).sort();
|
|
260
|
+
totalClasses += addonClasses.size;
|
|
261
|
+
log.success(`${addon}: ${addonClasses.size} unique Tailwind classes from ${vueFiles.length} files`);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
log.info(`${addon}: No Tailwind classes found`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// Write output
|
|
268
|
+
const outputPath = options.output || path.join(paths.dev.root, 'temp', 'addon-classes.json');
|
|
269
|
+
await fs.ensureDir(path.dirname(outputPath));
|
|
270
|
+
await fs.writeJson(outputPath, result, { spaces: 2 });
|
|
271
|
+
const elapsed = ((Date.now() - startTime) / 1000).toFixed(2);
|
|
272
|
+
log.blank();
|
|
273
|
+
log.box('✅ Extraction Complete', [
|
|
274
|
+
`Total addons: ${Object.keys(result).length}`,
|
|
275
|
+
`Total unique classes: ${totalClasses}`,
|
|
276
|
+
`Output: ${outputPath}`,
|
|
277
|
+
`Time: ${elapsed}s`
|
|
278
|
+
]);
|
|
279
|
+
return result;
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=extract-classes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-classes.js","sourceRoot":"","sources":["../../../src/commands/addon/extract-classes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CiCore CLI - Tailwind Safelist Generator
|
|
3
|
+
*
|
|
4
|
+
* Converts extracted addon classes into optimized Tailwind safelist patterns.
|
|
5
|
+
* Uses intelligent grouping to minimize pattern count while covering all classes.
|
|
6
|
+
*
|
|
7
|
+
* Part of the Automated Safelist Pipeline (TIER 1)
|
|
8
|
+
*
|
|
9
|
+
* @command npx vu addon generate-safelist [--input path]
|
|
10
|
+
*/
|
|
11
|
+
export interface SafelistPattern {
|
|
12
|
+
pattern: string;
|
|
13
|
+
variants?: string[];
|
|
14
|
+
}
|
|
15
|
+
export interface GenerateSafelistOptions {
|
|
16
|
+
input?: string;
|
|
17
|
+
output?: string;
|
|
18
|
+
apply?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Main safelist generation function
|
|
22
|
+
*/
|
|
23
|
+
export declare function generateSafelist(options?: GenerateSafelistOptions): Promise<SafelistPattern[]>;
|
|
24
|
+
//# sourceMappingURL=generate-safelist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-safelist.d.ts","sourceRoot":"","sources":["../../../src/commands/addon/generate-safelist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAyKD,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,eAAe,EAAE,CAAC,CA0I5B"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CiCore CLI - Tailwind Safelist Generator
|
|
3
|
+
*
|
|
4
|
+
* Converts extracted addon classes into optimized Tailwind safelist patterns.
|
|
5
|
+
* Uses intelligent grouping to minimize pattern count while covering all classes.
|
|
6
|
+
*
|
|
7
|
+
* Part of the Automated Safelist Pipeline (TIER 1)
|
|
8
|
+
*
|
|
9
|
+
* @command npx vu addon generate-safelist [--input path]
|
|
10
|
+
*/
|
|
11
|
+
import fs from 'fs-extra';
|
|
12
|
+
import path from 'path';
|
|
13
|
+
import { log } from '../../lib/logger.js';
|
|
14
|
+
import { paths } from '../../lib/config.js';
|
|
15
|
+
// Color family detection
|
|
16
|
+
const COLOR_NAMES = [
|
|
17
|
+
'primary', 'secondary', 'accent', 'neutral', 'muted',
|
|
18
|
+
'gray', 'slate', 'zinc', 'stone',
|
|
19
|
+
'red', 'orange', 'amber', 'yellow', 'lime', 'green', 'emerald', 'teal',
|
|
20
|
+
'cyan', 'sky', 'blue', 'indigo', 'violet', 'purple', 'fuchsia', 'pink', 'rose',
|
|
21
|
+
'white', 'black', 'transparent', 'current', 'inherit'
|
|
22
|
+
];
|
|
23
|
+
// Shade values
|
|
24
|
+
const SHADE_VALUES = ['50', '100', '200', '300', '400', '500', '600', '700', '800', '900', '950'];
|
|
25
|
+
// Utility categories that use colors
|
|
26
|
+
const COLOR_UTILITIES = [
|
|
27
|
+
'bg', 'text', 'border', 'ring', 'shadow', 'outline',
|
|
28
|
+
'from', 'via', 'to', 'accent', 'caret', 'fill', 'stroke',
|
|
29
|
+
'decoration', 'divide', 'placeholder'
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Parse a Tailwind class into its components
|
|
33
|
+
*/
|
|
34
|
+
function parseClass(cls) {
|
|
35
|
+
const parts = cls.split(':');
|
|
36
|
+
const modifiers = parts.slice(0, -1);
|
|
37
|
+
const utility = parts[parts.length - 1];
|
|
38
|
+
// Check if this is a color utility
|
|
39
|
+
for (const colorUtil of COLOR_UTILITIES) {
|
|
40
|
+
if (utility.startsWith(`${colorUtil}-`)) {
|
|
41
|
+
const afterPrefix = utility.slice(colorUtil.length + 1);
|
|
42
|
+
// Check for color-shade pattern: bg-primary-500
|
|
43
|
+
for (const color of COLOR_NAMES) {
|
|
44
|
+
if (afterPrefix.startsWith(color)) {
|
|
45
|
+
const afterColor = afterPrefix.slice(color.length);
|
|
46
|
+
// Check for shade: -500
|
|
47
|
+
if (afterColor.startsWith('-')) {
|
|
48
|
+
const shadeStr = afterColor.slice(1);
|
|
49
|
+
// Check for opacity: -500/20
|
|
50
|
+
const [shade, opacity] = shadeStr.split('/');
|
|
51
|
+
if (SHADE_VALUES.includes(shade)) {
|
|
52
|
+
return {
|
|
53
|
+
modifiers,
|
|
54
|
+
utility: colorUtil,
|
|
55
|
+
color,
|
|
56
|
+
shade,
|
|
57
|
+
opacity
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else if (afterColor === '' || afterColor.startsWith('/')) {
|
|
62
|
+
// Direct color usage: bg-white, text-current/50
|
|
63
|
+
const [, opacity] = afterColor.split('/');
|
|
64
|
+
return {
|
|
65
|
+
modifiers,
|
|
66
|
+
utility: colorUtil,
|
|
67
|
+
color,
|
|
68
|
+
opacity
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Non-color utility
|
|
76
|
+
return {
|
|
77
|
+
modifiers,
|
|
78
|
+
utility
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Group classes by utility and extract patterns
|
|
83
|
+
*/
|
|
84
|
+
function groupClasses(classes) {
|
|
85
|
+
const groups = new Map();
|
|
86
|
+
for (const cls of classes) {
|
|
87
|
+
const parsed = parseClass(cls);
|
|
88
|
+
if (!parsed)
|
|
89
|
+
continue;
|
|
90
|
+
const key = parsed.color
|
|
91
|
+
? `${parsed.utility}-color`
|
|
92
|
+
: `utility-${parsed.utility}`;
|
|
93
|
+
if (!groups.has(key)) {
|
|
94
|
+
groups.set(key, []);
|
|
95
|
+
}
|
|
96
|
+
groups.get(key).push(parsed);
|
|
97
|
+
}
|
|
98
|
+
return groups;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Generate regex pattern for a group of color-based classes
|
|
102
|
+
*/
|
|
103
|
+
function generateColorPattern(group) {
|
|
104
|
+
if (group.length === 0)
|
|
105
|
+
return null;
|
|
106
|
+
const utility = group[0].utility;
|
|
107
|
+
const colors = new Set();
|
|
108
|
+
const shades = new Set();
|
|
109
|
+
const hasOpacity = group.some(g => g.opacity);
|
|
110
|
+
const modifiers = new Set();
|
|
111
|
+
for (const parsed of group) {
|
|
112
|
+
if (parsed.color)
|
|
113
|
+
colors.add(parsed.color);
|
|
114
|
+
if (parsed.shade)
|
|
115
|
+
shades.add(parsed.shade);
|
|
116
|
+
parsed.modifiers.forEach(m => modifiers.add(m));
|
|
117
|
+
}
|
|
118
|
+
if (colors.size === 0)
|
|
119
|
+
return null;
|
|
120
|
+
// Build regex pattern
|
|
121
|
+
const colorPattern = colors.size === 1
|
|
122
|
+
? Array.from(colors)[0]
|
|
123
|
+
: `(${Array.from(colors).sort().join('|')})`;
|
|
124
|
+
let pattern;
|
|
125
|
+
if (shades.size > 0) {
|
|
126
|
+
// 🔥 CRITICAL FIX: For gradient utilities (from, via, to), use ALL shades
|
|
127
|
+
// This ensures future gradient classes work without regenerating safelist
|
|
128
|
+
const isGradientUtility = ['from', 'via', 'to'].includes(utility);
|
|
129
|
+
const shadePattern = isGradientUtility
|
|
130
|
+
? `(${SHADE_VALUES.join('|')})` // ALL shades for gradients
|
|
131
|
+
: shades.size === 1
|
|
132
|
+
? Array.from(shades)[0]
|
|
133
|
+
: `(${Array.from(shades).sort((a, b) => parseInt(a) - parseInt(b)).join('|')})`;
|
|
134
|
+
// 🔥 For gradient utilities, always include opacity support
|
|
135
|
+
// ⚡ OPTIMIZED: Only common opacity values instead of all 1-99
|
|
136
|
+
const OPACITY_PATTERN = '(5|10|15|20|25|30|40|50|60|70|75|80|90|95)';
|
|
137
|
+
pattern = (hasOpacity || isGradientUtility)
|
|
138
|
+
? `^${utility}-${colorPattern}-${shadePattern}(\\/${OPACITY_PATTERN})?$`
|
|
139
|
+
: `^${utility}-${colorPattern}-${shadePattern}$`;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
// Direct color usage (bg-white, etc.)
|
|
143
|
+
// ⚡ OPTIMIZED: Only common opacity values instead of all 1-99
|
|
144
|
+
const OPACITY_PATTERN = '(5|10|15|20|25|30|40|50|60|70|75|80|90|95)';
|
|
145
|
+
pattern = hasOpacity
|
|
146
|
+
? `^${utility}-${colorPattern}(\\/${OPACITY_PATTERN})?$`
|
|
147
|
+
: `^${utility}-${colorPattern}$`;
|
|
148
|
+
}
|
|
149
|
+
const result = { pattern };
|
|
150
|
+
// Add modifiers as variants if present
|
|
151
|
+
if (modifiers.size > 0) {
|
|
152
|
+
result.variants = Array.from(modifiers);
|
|
153
|
+
}
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Main safelist generation function
|
|
158
|
+
*/
|
|
159
|
+
export async function generateSafelist(options = {}) {
|
|
160
|
+
const startTime = Date.now();
|
|
161
|
+
log.title('🧬 Safelist Pattern Generation');
|
|
162
|
+
// Read extracted classes
|
|
163
|
+
const inputPath = options.input || path.join(paths.dev.root, 'temp', 'addon-classes.json');
|
|
164
|
+
if (!await fs.pathExists(inputPath)) {
|
|
165
|
+
log.error(`Input file not found: ${inputPath}`);
|
|
166
|
+
log.info('Run "npx vu addon extract-classes" first');
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
const extractedClasses = await fs.readJson(inputPath);
|
|
170
|
+
// Flatten all classes
|
|
171
|
+
const allClasses = [];
|
|
172
|
+
for (const [addon, classes] of Object.entries(extractedClasses)) {
|
|
173
|
+
log.info(`${addon}: ${classes.length} classes`);
|
|
174
|
+
allClasses.push(...classes);
|
|
175
|
+
}
|
|
176
|
+
// Remove duplicates
|
|
177
|
+
const uniqueClasses = [...new Set(allClasses)];
|
|
178
|
+
log.info(`Total unique classes: ${uniqueClasses.length}`);
|
|
179
|
+
log.blank();
|
|
180
|
+
// Group classes by utility type
|
|
181
|
+
const groups = groupClasses(uniqueClasses);
|
|
182
|
+
// Generate patterns
|
|
183
|
+
const patterns = [];
|
|
184
|
+
const coveredClasses = new Set();
|
|
185
|
+
// Process color-based utilities
|
|
186
|
+
for (const colorUtil of COLOR_UTILITIES) {
|
|
187
|
+
const key = `${colorUtil}-color`;
|
|
188
|
+
const group = groups.get(key);
|
|
189
|
+
if (group && group.length > 0) {
|
|
190
|
+
const pattern = generateColorPattern(group);
|
|
191
|
+
if (pattern) {
|
|
192
|
+
patterns.push(pattern);
|
|
193
|
+
group.forEach(g => {
|
|
194
|
+
const original = g.modifiers.length > 0
|
|
195
|
+
? `${g.modifiers.join(':')}:${g.utility}-${g.color}${g.shade ? `-${g.shade}` : ''}${g.opacity ? `/${g.opacity}` : ''}`
|
|
196
|
+
: `${g.utility}-${g.color}${g.shade ? `-${g.shade}` : ''}${g.opacity ? `/${g.opacity}` : ''}`;
|
|
197
|
+
coveredClasses.add(original);
|
|
198
|
+
});
|
|
199
|
+
log.success(`${colorUtil}: pattern covers ${group.length} classes`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Handle remaining classes as literal safelist entries
|
|
204
|
+
const uncoveredClasses = uniqueClasses.filter(cls => !coveredClasses.has(cls));
|
|
205
|
+
// Add modifier-based patterns for color utilities (dark:, hover:, etc.)
|
|
206
|
+
const modifierPatterns = new Map();
|
|
207
|
+
for (const cls of uncoveredClasses) {
|
|
208
|
+
const parsed = parseClass(cls);
|
|
209
|
+
if (parsed && parsed.modifiers.length > 0 && parsed.color) {
|
|
210
|
+
const basePattern = `${parsed.utility}-${parsed.color}${parsed.shade ? `-${parsed.shade}` : ''}`;
|
|
211
|
+
const modKey = parsed.modifiers.join(':');
|
|
212
|
+
if (!modifierPatterns.has(modKey)) {
|
|
213
|
+
modifierPatterns.set(modKey, new Set());
|
|
214
|
+
}
|
|
215
|
+
modifierPatterns.get(modKey).add(basePattern);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Generate modifier patterns (dark:, hover:, etc.)
|
|
219
|
+
for (const [modifier, basePatterns] of modifierPatterns) {
|
|
220
|
+
if (basePatterns.size > 0) {
|
|
221
|
+
// For each modifier, generate a single pattern that covers all bases
|
|
222
|
+
// ⚡ OPTIMIZED: Only common opacity values instead of all 1-99
|
|
223
|
+
const OPACITY_PATTERN = '(5|10|15|20|25|30|40|50|60|70|75|80|90|95)';
|
|
224
|
+
const patterns_arr = Array.from(basePatterns);
|
|
225
|
+
const pattern = patterns_arr.length === 1
|
|
226
|
+
? `^${modifier}:${patterns_arr[0].replace(/\//g, '\\/')}(\\/${OPACITY_PATTERN})?$`
|
|
227
|
+
: `^${modifier}:(${patterns_arr.join('|').replace(/\//g, '\\/')})(\\/${OPACITY_PATTERN})?$`;
|
|
228
|
+
patterns.push({ pattern });
|
|
229
|
+
log.success(`${modifier}: pattern covers ${basePatterns.size} variants`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Generate output file
|
|
233
|
+
const outputPath = options.output || path.join(paths.dev.root, '.generated-safelist.js');
|
|
234
|
+
const outputContent = `/**
|
|
235
|
+
* Auto-generated Tailwind safelist patterns
|
|
236
|
+
* Generated by: npx vu addon generate-safelist
|
|
237
|
+
* Generated at: ${new Date().toISOString()}
|
|
238
|
+
*
|
|
239
|
+
* These patterns are automatically merged with Core's safelist
|
|
240
|
+
* to include addon-specific Tailwind classes in the production build.
|
|
241
|
+
*
|
|
242
|
+
* ⚠️ DO NOT EDIT MANUALLY - Regenerate with CLI command
|
|
243
|
+
*/
|
|
244
|
+
|
|
245
|
+
export default [
|
|
246
|
+
${patterns.map(p => {
|
|
247
|
+
if (p.variants) {
|
|
248
|
+
return ` { pattern: /${p.pattern}/, variants: ${JSON.stringify(p.variants)} }`;
|
|
249
|
+
}
|
|
250
|
+
return ` { pattern: /${p.pattern}/ }`;
|
|
251
|
+
}).join(',\n')}
|
|
252
|
+
];
|
|
253
|
+
`;
|
|
254
|
+
await fs.writeFile(outputPath, outputContent);
|
|
255
|
+
const elapsed = ((Date.now() - startTime) / 1000).toFixed(2);
|
|
256
|
+
log.blank();
|
|
257
|
+
log.box('✅ Safelist Generated', [
|
|
258
|
+
`Generated patterns: ${patterns.length}`,
|
|
259
|
+
`Covered classes: ${coveredClasses.size}`,
|
|
260
|
+
`Output: ${outputPath}`,
|
|
261
|
+
`Time: ${elapsed}s`
|
|
262
|
+
]);
|
|
263
|
+
// Show sample patterns
|
|
264
|
+
if (patterns.length > 0) {
|
|
265
|
+
log.blank();
|
|
266
|
+
log.info('Sample patterns:');
|
|
267
|
+
patterns.slice(0, 5).forEach(p => {
|
|
268
|
+
log.info(` ${p.pattern}`);
|
|
269
|
+
});
|
|
270
|
+
if (patterns.length > 5) {
|
|
271
|
+
log.info(` ... and ${patterns.length - 5} more`);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return patterns;
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=generate-safelist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-safelist.js","sourceRoot":"","sources":["../../../src/commands/addon/generate-safelist.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CiCore CLI - Addon Management Commands
|
|
3
|
+
*
|
|
4
|
+
* Commands:
|
|
5
|
+
* vu addon:create <name> - Create a new addon
|
|
6
|
+
* vu addon:list [core] - List addons
|
|
7
|
+
* vu addon:build <name> - Build addon UI
|
|
8
|
+
* vu addon:install <name> <core> - Install addon to core
|
|
9
|
+
* vu addon:enable <name> <core> - Enable addon
|
|
10
|
+
* vu addon:disable <name> <core> - Disable addon
|
|
11
|
+
* vu addon:delete <name> <core> - Delete addon from core
|
|
12
|
+
* vu addon:migrate <name> <core> - Run addon migrations
|
|
13
|
+
* vu addon:sign <name> - Sign addon for marketplace
|
|
14
|
+
* vu addon:extract-classes [name] - Extract Tailwind classes from addon(s)
|
|
15
|
+
* vu addon:generate-safelist - Generate Tailwind safelist patterns
|
|
16
|
+
*/
|
|
17
|
+
import { Command } from 'commander';
|
|
18
|
+
export declare function registerAddonCommands(program: Command): void;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/addon/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8R5D"}
|