tailwind-styled-v4 5.0.36 → 5.0.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/dist/analyzer.d.mts +152 -5
  2. package/dist/analyzer.d.ts +152 -5
  3. package/dist/analyzer.js +213 -161
  4. package/dist/analyzer.js.map +1 -1
  5. package/dist/analyzer.mjs +118 -82
  6. package/dist/analyzer.mjs.map +1 -1
  7. package/dist/animate.d.mts +30 -3
  8. package/dist/animate.d.ts +30 -3
  9. package/dist/animate.js +131 -87
  10. package/dist/animate.js.map +1 -1
  11. package/dist/animate.mjs +28 -14
  12. package/dist/animate.mjs.map +1 -1
  13. package/dist/atomic.js +105 -68
  14. package/dist/atomic.js.map +1 -1
  15. package/dist/atomic.mjs +40 -13
  16. package/dist/atomic.mjs.map +1 -1
  17. package/dist/cli.js +577 -426
  18. package/dist/cli.js.map +1 -1
  19. package/dist/cli.mjs +466 -304
  20. package/dist/cli.mjs.map +1 -1
  21. package/dist/compiler.d.mts +5 -0
  22. package/dist/compiler.d.ts +5 -0
  23. package/dist/compiler.js +826 -508
  24. package/dist/compiler.js.map +1 -1
  25. package/dist/compiler.mjs +287 -29
  26. package/dist/compiler.mjs.map +1 -1
  27. package/dist/dashboard.js +71 -41
  28. package/dist/dashboard.js.map +1 -1
  29. package/dist/dashboard.mjs +12 -6
  30. package/dist/dashboard.mjs.map +1 -1
  31. package/dist/devtools.d.mts +88 -2
  32. package/dist/devtools.d.ts +88 -2
  33. package/dist/devtools.js +333 -289
  34. package/dist/devtools.js.map +1 -1
  35. package/dist/devtools.mjs +26 -11
  36. package/dist/devtools.mjs.map +1 -1
  37. package/dist/engine.d.mts +557 -6
  38. package/dist/engine.d.ts +557 -6
  39. package/dist/engine.js +679 -502
  40. package/dist/engine.js.map +1 -1
  41. package/dist/engine.mjs +467 -307
  42. package/dist/engine.mjs.map +1 -1
  43. package/dist/index.d.mts +180 -127
  44. package/dist/index.d.ts +180 -127
  45. package/dist/index.js +1329 -7441
  46. package/dist/index.js.map +1 -1
  47. package/dist/index.mjs +1266 -7385
  48. package/dist/index.mjs.map +1 -1
  49. package/dist/next.js +318 -243
  50. package/dist/next.js.map +1 -1
  51. package/dist/next.mjs +256 -181
  52. package/dist/next.mjs.map +1 -1
  53. package/dist/plugin-api.d.mts +4 -2
  54. package/dist/plugin-api.d.ts +4 -2
  55. package/dist/plugin-api.js +93 -49
  56. package/dist/plugin-api.js.map +1 -1
  57. package/dist/plugin-api.mjs +26 -6
  58. package/dist/plugin-api.mjs.map +1 -1
  59. package/dist/plugin-registry.js +103 -62
  60. package/dist/plugin-registry.js.map +1 -1
  61. package/dist/plugin-registry.mjs +53 -35
  62. package/dist/plugin-registry.mjs.map +1 -1
  63. package/dist/plugin.d.mts +165 -5
  64. package/dist/plugin.d.ts +165 -5
  65. package/dist/plugin.js +115 -50
  66. package/dist/plugin.js.map +1 -1
  67. package/dist/plugin.mjs +44 -6
  68. package/dist/plugin.mjs.map +1 -1
  69. package/dist/preset.js +47 -15
  70. package/dist/preset.js.map +1 -1
  71. package/dist/preset.mjs +13 -5
  72. package/dist/preset.mjs.map +1 -1
  73. package/dist/rspack.js +82 -50
  74. package/dist/rspack.js.map +1 -1
  75. package/dist/rspack.mjs +20 -12
  76. package/dist/rspack.mjs.map +1 -1
  77. package/dist/runtime-css.js +62 -24
  78. package/dist/runtime-css.js.map +1 -1
  79. package/dist/runtime-css.mjs +15 -7
  80. package/dist/runtime-css.mjs.map +1 -1
  81. package/dist/runtime.d.mts +38 -3
  82. package/dist/runtime.d.ts +38 -3
  83. package/dist/runtime.js +97 -44
  84. package/dist/runtime.js.map +1 -1
  85. package/dist/runtime.mjs +31 -8
  86. package/dist/runtime.mjs.map +1 -1
  87. package/dist/scanner.d.mts +58 -4
  88. package/dist/scanner.d.ts +58 -4
  89. package/dist/scanner.js +163 -120
  90. package/dist/scanner.js.map +1 -1
  91. package/dist/scanner.mjs +67 -39
  92. package/dist/scanner.mjs.map +1 -1
  93. package/dist/shared.d.mts +185 -3
  94. package/dist/shared.d.ts +185 -3
  95. package/dist/shared.js +441 -295
  96. package/dist/shared.js.map +1 -1
  97. package/dist/shared.mjs +253 -122
  98. package/dist/shared.mjs.map +1 -1
  99. package/dist/storybook-addon.d.mts +2 -2
  100. package/dist/storybook-addon.d.ts +2 -2
  101. package/dist/storybook-addon.js +39 -10
  102. package/dist/storybook-addon.js.map +1 -1
  103. package/dist/storybook-addon.mjs +8 -3
  104. package/dist/storybook-addon.mjs.map +1 -1
  105. package/dist/svelte.d.mts +2 -1
  106. package/dist/svelte.d.ts +2 -1
  107. package/dist/svelte.js +88 -64
  108. package/dist/svelte.js.map +1 -1
  109. package/dist/svelte.mjs +28 -13
  110. package/dist/svelte.mjs.map +1 -1
  111. package/dist/syntax.js +68 -37
  112. package/dist/syntax.js.map +1 -1
  113. package/dist/syntax.mjs +8 -7
  114. package/dist/syntax.mjs.map +1 -1
  115. package/dist/testing.js +55 -18
  116. package/dist/testing.js.map +1 -1
  117. package/dist/testing.mjs +16 -3
  118. package/dist/testing.mjs.map +1 -1
  119. package/dist/theme.d.mts +38 -3
  120. package/dist/theme.d.ts +38 -3
  121. package/dist/theme.js +131 -74
  122. package/dist/theme.js.map +1 -1
  123. package/dist/theme.mjs +42 -13
  124. package/dist/theme.mjs.map +1 -1
  125. package/dist/turbopackLoader.js +150 -116
  126. package/dist/turbopackLoader.js.map +1 -1
  127. package/dist/turbopackLoader.mjs +124 -81
  128. package/dist/turbopackLoader.mjs.map +1 -1
  129. package/dist/tw.js +560 -421
  130. package/dist/tw.js.map +1 -1
  131. package/dist/tw.mjs +460 -302
  132. package/dist/tw.mjs.map +1 -1
  133. package/dist/vite.js +561 -446
  134. package/dist/vite.js.map +1 -1
  135. package/dist/vite.mjs +433 -321
  136. package/dist/vite.mjs.map +1 -1
  137. package/dist/vue.d.mts +4 -1
  138. package/dist/vue.d.ts +4 -1
  139. package/dist/vue.js +95 -70
  140. package/dist/vue.js.map +1 -1
  141. package/dist/vue.mjs +30 -14
  142. package/dist/vue.mjs.map +1 -1
  143. package/dist/webpackLoader.js +110 -78
  144. package/dist/webpackLoader.js.map +1 -1
  145. package/dist/webpackLoader.mjs +45 -17
  146. package/dist/webpackLoader.mjs.map +1 -1
  147. package/native/tailwind-styled-native.linux-x64-gnu.node +0 -0
  148. package/native/tailwind-styled-native.node +0 -0
  149. package/package.json +3 -1
  150. package/dist/analyzeWorkspace-B1_XRfdl.d.ts +0 -134
  151. package/dist/analyzeWorkspace-hYfu4Hg3.d.mts +0 -134
  152. package/dist/index-DQI6O24n.d.mts +0 -464
  153. package/dist/index-NDINUhLN.d.mts +0 -90
  154. package/dist/index-NDINUhLN.d.ts +0 -90
  155. package/dist/index-UkYbyBkR.d.ts +0 -464
  156. package/dist/liveTokenEngine-CN9ian1R.d.ts +0 -38
  157. package/dist/liveTokenEngine-DKoWRtqH.d.mts +0 -38
  158. package/dist/schemas-DR-SLxZZ.d.mts +0 -59
  159. package/dist/schemas-DR-SLxZZ.d.ts +0 -59
  160. package/dist/trace-Dz4vmZdy.d.mts +0 -96
  161. package/dist/trace-Dz4vmZdy.d.ts +0 -96
  162. package/dist/types-DXr2PmGP.d.mts +0 -31
  163. package/dist/types-DXr2PmGP.d.ts +0 -31
@@ -1,23 +1,30 @@
1
- 'use strict';
2
-
3
- var child_process = require('child_process');
4
- var crypto = require('crypto');
5
- var fs = require('fs');
6
- var module$1 = require('module');
7
- var path = require('path');
8
- var url = require('url');
9
-
10
- var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
11
1
  /* tailwind-styled-v4 v5.0.4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
2
+ "use strict";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
13
7
  var __commonJS = (cb, mod) => function __require() {
14
8
  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
15
9
  };
10
+ var __export = (target, all) => {
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
23
 
17
24
  // packages/domain/plugin-registry/registry.json
18
25
  var require_registry = __commonJS({
19
- "packages/domain/plugin-registry/registry.json"(exports$1, module) {
20
- module.exports = {
26
+ "packages/domain/plugin-registry/registry.json"(exports2, module2) {
27
+ module2.exports = {
21
28
  version: "5.0.0",
22
29
  updatedAt: "2026-03-23",
23
30
  official: [
@@ -79,29 +86,47 @@ var require_registry = __commonJS({
79
86
  };
80
87
  }
81
88
  });
89
+
90
+ // src/umbrella/plugin-registry.ts
91
+ var plugin_registry_exports = {};
92
+ __export(plugin_registry_exports, {
93
+ PluginRegistry: () => PluginRegistry,
94
+ PluginRegistryError: () => PluginRegistryError,
95
+ getRegistry: () => getRegistry,
96
+ registry: () => registry
97
+ });
98
+ module.exports = __toCommonJS(plugin_registry_exports);
99
+
100
+ // packages/domain/plugin-registry/src/index.ts
101
+ var import_node_child_process = require("child_process");
102
+ var import_node_fs = require("fs");
103
+ var import_node_module = require("module");
104
+ var import_node_path = require("path");
105
+ var import_node_url = require("url");
106
+ var import_meta = {};
82
107
  var _native = void 0;
83
108
  function getNative() {
84
109
  if (_native !== void 0) return _native;
85
110
  try {
86
- const runtimeDir = typeof __dirname === "string" && __dirname.length > 0 ? __dirname : typeof ({ url: (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('plugin-registry.js', document.baseURI).href)) }) !== "undefined" && (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('plugin-registry.js', document.baseURI).href)) ? url.fileURLToPath(new URL(".", (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('plugin-registry.js', document.baseURI).href)))) : process.cwd();
87
- const req = module$1.createRequire(path.join(runtimeDir, "noop.cjs"));
111
+ const runtimeDir = typeof __dirname === "string" && __dirname.length > 0 ? __dirname : typeof import_meta !== "undefined" && import_meta.url ? (0, import_node_url.fileURLToPath)(new URL(".", import_meta.url)) : process.cwd();
112
+ const req = (0, import_node_module.createRequire)((0, import_node_path.join)(runtimeDir, "noop.cjs"));
88
113
  const _pa = `${process.platform}-${process.arch}`;
89
114
  const _paGnu = _pa === "linux-x64" ? "linux-x64-gnu" : _pa === "linux-arm64" ? "linux-arm64-gnu" : _pa;
90
115
  const candidates = [
91
116
  // npm install case: dist/../native/
92
- path.resolve(runtimeDir, "..", "native", "tailwind-styled-native.node"),
93
- path.resolve(runtimeDir, "..", "native", `tailwind-styled-native.${_pa}.node`),
94
- path.resolve(runtimeDir, "..", "native", `tailwind-styled-native.${_paGnu}.node`),
95
- path.resolve(runtimeDir, "..", "native", "tailwind_styled_parser.node"),
117
+ (0, import_node_path.resolve)(runtimeDir, "..", "native", "tailwind-styled-native.node"),
118
+ (0, import_node_path.resolve)(runtimeDir, "..", "native", `tailwind-styled-native.${_pa}.node`),
119
+ (0, import_node_path.resolve)(runtimeDir, "..", "native", `tailwind-styled-native.${_paGnu}.node`),
120
+ (0, import_node_path.resolve)(runtimeDir, "..", "native", "tailwind_styled_parser.node"),
96
121
  // cwd fallback
97
- path.resolve(process.cwd(), "native", "tailwind-styled-native.node"),
98
- path.resolve(process.cwd(), "native", "tailwind_styled_parser.node"),
122
+ (0, import_node_path.resolve)(process.cwd(), "native", "tailwind-styled-native.node"),
123
+ (0, import_node_path.resolve)(process.cwd(), "native", "tailwind_styled_parser.node"),
99
124
  // monorepo dev: 4-level up
100
- path.resolve(runtimeDir, "..", "..", "..", "..", "native", "tailwind-styled-native.node"),
101
- path.resolve(runtimeDir, "..", "..", "..", "..", "native", "tailwind_styled_parser.node"),
125
+ (0, import_node_path.resolve)(runtimeDir, "..", "..", "..", "..", "native", "tailwind-styled-native.node"),
126
+ (0, import_node_path.resolve)(runtimeDir, "..", "..", "..", "..", "native", "tailwind_styled_parser.node"),
102
127
  // 3-level fallback
103
- path.resolve(runtimeDir, "..", "..", "..", "native", "tailwind-styled-native.node"),
104
- path.resolve(runtimeDir, "..", "..", "..", "native", "tailwind_styled_parser.node")
128
+ (0, import_node_path.resolve)(runtimeDir, "..", "..", "..", "native", "tailwind-styled-native.node"),
129
+ (0, import_node_path.resolve)(runtimeDir, "..", "..", "..", "native", "tailwind_styled_parser.node")
105
130
  ];
106
131
  for (const c of candidates) {
107
132
  try {
@@ -116,6 +141,12 @@ function getNative() {
116
141
  }
117
142
  return _native = null;
118
143
  }
144
+ var NATIVE_UNAVAILABLE_MESSAGE = "[tailwind-styled/plugin-registry] Native binding is required but not available.\nPlease ensure you have run: npm run build:rust";
145
+ function requireNative() {
146
+ const native = getNative();
147
+ if (!native) throw new Error(NATIVE_UNAVAILABLE_MESSAGE);
148
+ return native;
149
+ }
119
150
  var PLUGIN_NAME_REGEX = /^(@[a-z0-9-]+\/)?[a-z0-9-]+(@[0-9]+\.[0-9]+\.[0-9]+)?$/;
120
151
  var PluginRegistryError = class extends Error {
121
152
  code;
@@ -190,15 +221,8 @@ var PluginRegistry = class _PluginRegistry {
190
221
  return this.registryVersion;
191
222
  }
192
223
  search(query) {
193
- const native = getNative();
194
- if (native) {
195
- return JSON.parse(native.pluginSearch(JSON.stringify(this.plugins), query));
196
- }
197
- const q = query.trim().toLowerCase();
198
- if (!q) return [...this.plugins];
199
- return this.plugins.filter(
200
- (plugin) => plugin.name.toLowerCase().includes(q) || plugin.description.toLowerCase().includes(q) || plugin.tags.some((tag) => tag.toLowerCase().includes(q))
201
- );
224
+ const native = requireNative();
225
+ return JSON.parse(native.pluginSearch(JSON.stringify(this.plugins), query));
202
226
  }
203
227
  getAll() {
204
228
  return [...this.plugins];
@@ -209,8 +233,8 @@ var PluginRegistry = class _PluginRegistry {
209
233
  }
210
234
  install(pluginName, options = {}) {
211
235
  const npmBin = options.npmBin ?? process.env.TW_PLUGIN_NPM_BIN ?? "npm";
212
- const native = getNative();
213
- const isValidName = native ? native.pluginValidateName(pluginName) : PLUGIN_NAME_REGEX.test(pluginName);
236
+ const native = requireNative();
237
+ const isValidName = native.pluginValidateName(pluginName);
214
238
  if (!isValidName) {
215
239
  throw new PluginRegistryError({
216
240
  code: "INVALID_PLUGIN_NAME",
@@ -247,7 +271,7 @@ var PluginRegistry = class _PluginRegistry {
247
271
  if (options.dryRun) {
248
272
  return { plugin: pluginName, installed: true, command, exitCode: 0 };
249
273
  }
250
- const child = child_process.spawnSync(npmBin, ["install", pluginName], { stdio: "inherit" });
274
+ const child = (0, import_node_child_process.spawnSync)(npmBin, ["install", pluginName], { stdio: "inherit" });
251
275
  if (child.error) {
252
276
  throw new PluginRegistryError({
253
277
  code: "INSTALL_COMMAND_FAILED",
@@ -283,7 +307,7 @@ var PluginRegistry = class _PluginRegistry {
283
307
  if (options.dryRun) {
284
308
  return { plugin: pluginName, uninstalled: true, command, exitCode: 0 };
285
309
  }
286
- const child = child_process.spawnSync(npmBin, ["uninstall", pluginName], { stdio: "inherit" });
310
+ const child = (0, import_node_child_process.spawnSync)(npmBin, ["uninstall", pluginName], { stdio: "inherit" });
287
311
  if (child.status !== 0 && child.status !== null) {
288
312
  throw new PluginRegistryError({
289
313
  code: "INSTALL_FAILED",
@@ -305,14 +329,11 @@ var PluginRegistry = class _PluginRegistry {
305
329
  return { ok: true, reason: "no checksum registered (skip)" };
306
330
  }
307
331
  try {
308
- const pkgPath = path.join(process.cwd(), "node_modules", pluginName, "package.json");
309
- if (!fs.existsSync(pkgPath)) return { ok: false, reason: "plugin not installed" };
310
- const content = fs.readFileSync(pkgPath, "utf8");
311
- const native = getNative();
312
- const ok = native ? native.pluginVerifyIntegrity(content, plugin.integrity) : (() => {
313
- const hash = `sha256-${crypto.createHash("sha256").update(content).digest("base64")}`;
314
- return hash === plugin.integrity;
315
- })();
332
+ const pkgPath = (0, import_node_path.join)(process.cwd(), "node_modules", pluginName, "package.json");
333
+ if (!(0, import_node_fs.existsSync)(pkgPath)) return { ok: false, reason: "plugin not installed" };
334
+ const content = (0, import_node_fs.readFileSync)(pkgPath, "utf8");
335
+ const native = requireNative();
336
+ const ok = native.pluginVerifyIntegrity(content, plugin.integrity);
316
337
  return ok ? { ok: true } : { ok: false, reason: `Integrity mismatch: expected ${plugin.integrity}` };
317
338
  } catch (e) {
318
339
  return {
@@ -325,17 +346,12 @@ var PluginRegistry = class _PluginRegistry {
325
346
  const plugin = this.getByName(pluginName);
326
347
  if (!plugin) return { hasUpdate: false, error: `Plugin '${pluginName}' not in registry` };
327
348
  try {
328
- const pkgPath = path.join(process.cwd(), "node_modules", pluginName, "package.json");
329
- if (!fs.existsSync(pkgPath)) return { hasUpdate: false, error: "plugin not installed" };
330
- const current = JSON.parse(fs.readFileSync(pkgPath, "utf8")).version ?? "0.0.0";
349
+ const pkgPath = (0, import_node_path.join)(process.cwd(), "node_modules", pluginName, "package.json");
350
+ if (!(0, import_node_fs.existsSync)(pkgPath)) return { hasUpdate: false, error: "plugin not installed" };
351
+ const current = JSON.parse((0, import_node_fs.readFileSync)(pkgPath, "utf8")).version ?? "0.0.0";
331
352
  const latest = plugin.version;
332
- const native = getNative();
333
- const hasUpdate = native ? native.pluginSemverHasUpdate(current, latest) : (() => {
334
- const parseV = (v) => v.replace(/[^0-9.]/g, "").split(".").map(Number);
335
- const [ca, cb, cc] = parseV(current);
336
- const [la, lb, lc] = parseV(latest);
337
- return la > ca || la === ca && lb > cb || la === ca && lb === cb && lc > cc;
338
- })();
353
+ const native = requireNative();
354
+ const hasUpdate = native.pluginSemverHasUpdate(current, latest);
339
355
  return { hasUpdate, current, latest };
340
356
  } catch (e) {
341
357
  return {
@@ -345,7 +361,31 @@ var PluginRegistry = class _PluginRegistry {
345
361
  }
346
362
  }
347
363
  checkAllUpdates() {
348
- return this.plugins.map((p) => ({ name: p.name, ...this.checkForUpdate(p.name) }));
364
+ const native = requireNative();
365
+ const installed = [];
366
+ const byName = /* @__PURE__ */ new Map();
367
+ for (const p of this.plugins) {
368
+ try {
369
+ const pkgPath = (0, import_node_path.join)(process.cwd(), "node_modules", p.name, "package.json");
370
+ if (!(0, import_node_fs.existsSync)(pkgPath)) {
371
+ byName.set(p.name, { name: p.name, hasUpdate: false, error: "plugin not installed" });
372
+ continue;
373
+ }
374
+ const version = JSON.parse((0, import_node_fs.readFileSync)(pkgPath, "utf8")).version ?? "0.0.0";
375
+ installed.push({ name: p.name, version });
376
+ } catch (e) {
377
+ byName.set(p.name, {
378
+ name: p.name,
379
+ hasUpdate: false,
380
+ error: `Update check failed: ${e instanceof Error ? e.message : String(e)}`
381
+ });
382
+ }
383
+ }
384
+ const results = JSON.parse(
385
+ native.pluginCheckAllUpdates(JSON.stringify(installed), JSON.stringify(this.plugins))
386
+ );
387
+ for (const r of results) byName.set(r.name, r);
388
+ return this.plugins.map((p) => byName.get(p.name)).filter((r) => r !== void 0);
349
389
  }
350
390
  };
351
391
  var _state = { defaultRegistry: null };
@@ -357,10 +397,11 @@ function getRegistry() {
357
397
  return _state.defaultRegistry;
358
398
  }
359
399
  var registry = getRegistry();
360
-
361
- exports.PluginRegistry = PluginRegistry;
362
- exports.PluginRegistryError = PluginRegistryError;
363
- exports.getRegistry = getRegistry;
364
- exports.registry = registry;
365
- //# sourceMappingURL=plugin-registry.js.map
400
+ // Annotate the CommonJS export names for ESM import in node:
401
+ 0 && (module.exports = {
402
+ PluginRegistry,
403
+ PluginRegistryError,
404
+ getRegistry,
405
+ registry
406
+ });
366
407
  //# sourceMappingURL=plugin-registry.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../packages/domain/plugin-registry/registry.json","../packages/domain/plugin-registry/src/index.ts"],"names":["exports","fileURLToPath","createRequire","join","resolve","spawnSync","existsSync","readFileSync","createHash"],"mappings":"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","file":"plugin-registry.js","sourcesContent":["{\n \"version\": \"5.0.0\",\n \"updatedAt\": \"2026-03-23\",\n \"official\": [\n {\n \"name\": \"@tailwind-styled/plugin-animation\",\n \"description\": \"Animation presets and keyframes — enter/exit transitions, spring physics, scroll-triggered\",\n \"version\": \"5.0.0\",\n \"tags\": [\"animation\", \"motion\", \"transition\", \"keyframes\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/packages/animate\",\n \"install\": \"npm install @tailwind-styled/plugin-animation@5.0.0\",\n \"integrity\": \"sha256-abc123\"\n },\n {\n \"name\": \"@tailwind-styled/plugin-typography\",\n \"description\": \"Prose and typography utilities — headings, body, code blocks, with dark mode\",\n \"version\": \"5.0.0\",\n \"tags\": [\"typography\", \"prose\", \"markdown\", \"content\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/docs/plugins\",\n \"install\": \"npm install @tailwind-styled/plugin-typography@5.0.0\",\n \"integrity\": \"sha256-def456\"\n },\n {\n \"name\": \"@tailwind-styled/plugin-forms\",\n \"description\": \"Form input styling helpers — reset, validation states, custom checkboxes/radios\",\n \"version\": \"5.0.0\",\n \"tags\": [\"forms\", \"inputs\", \"validation\", \"checkbox\", \"radio\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/docs/plugins\",\n \"install\": \"npm install @tailwind-styled/plugin-forms@5.0.0\",\n \"integrity\": \"sha256-ghi789\"\n },\n {\n \"name\": \"@tailwind-styled/plugin-container-queries\",\n \"description\": \"Container query utilities — @container breakpoints for component-level responsiveness\",\n \"version\": \"5.0.0\",\n \"tags\": [\"container-queries\", \"responsive\", \"layout\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/docs/plugins\",\n \"install\": \"npm install @tailwind-styled/plugin-container-queries@5.0.0\",\n \"integrity\": \"sha256-jkl012\"\n }\n ],\n \"community\": [\n {\n \"name\": \"tailwind-styled-animate\",\n \"description\": \"Community animation variants — bounce, pulse, wiggle, and more\",\n \"version\": \"0.1.0\",\n \"tags\": [\"animation\", \"community\"],\n \"author\": \"community\",\n \"install\": \"npm install tailwind-styled-animate\"\n },\n {\n \"name\": \"tailwind-styled-icons\",\n \"description\": \"SVG icon system integrated with tw() variant API\",\n \"version\": \"0.1.0\",\n \"tags\": [\"icons\", \"svg\", \"community\"],\n \"author\": \"community\",\n \"install\": \"npm install tailwind-styled-icons\"\n }\n ]\n}\n","import { spawnSync } from \"node:child_process\"\nimport { createHash } from \"node:crypto\"\nimport { existsSync, readFileSync } from \"node:fs\"\nimport { createRequire } from \"node:module\"\nimport { join, resolve } from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\n// ── Native bridge (lazy-loaded to avoid circular deps) ──────────────────────\ntype NativePluginRegistry = {\n pluginSearch: (pluginsJson: string, query: string) => string\n pluginValidateName: (name: string) => boolean\n pluginVerifyIntegrity: (content: string, expectedIntegrity: string) => boolean\n pluginSemverHasUpdate: (current: string, latest: string) => boolean\n pluginCheckAllUpdates: (installedJson: string, registryJson: string) => string\n}\nlet _native: NativePluginRegistry | null | undefined = undefined\nfunction getNative(): NativePluginRegistry | null {\n if (_native !== undefined) return _native\n try {\n const runtimeDir = typeof __dirname === \"string\" && __dirname.length > 0\n ? __dirname\n : typeof import.meta !== \"undefined\" && import.meta.url\n ? fileURLToPath(new URL(\".\", import.meta.url))\n : process.cwd()\n const req = createRequire(join(runtimeDir, \"noop.cjs\"))\n const _pa = `${process.platform}-${process.arch}`\n const _paGnu = _pa === \"linux-x64\" ? \"linux-x64-gnu\" : _pa === \"linux-arm64\" ? \"linux-arm64-gnu\" : _pa\n const candidates = [\n // npm install case: dist/../native/\n resolve(runtimeDir, \"..\", \"native\", \"tailwind-styled-native.node\"),\n resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_pa}.node`),\n resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_paGnu}.node`),\n resolve(runtimeDir, \"..\", \"native\", \"tailwind_styled_parser.node\"),\n // cwd fallback\n resolve(process.cwd(), \"native\", \"tailwind-styled-native.node\"),\n resolve(process.cwd(), \"native\", \"tailwind_styled_parser.node\"),\n // monorepo dev: 4-level up\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\n // 3-level fallback\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\n ]\n for (const c of candidates) {\n try {\n const mod = req(c) as Record<string, unknown>\n if (typeof mod?.pluginSearch === \"function\") {\n return (_native = mod as unknown as NativePluginRegistry)\n }\n } catch { /* continue */ }\n }\n } catch { /* ignore */ }\n return (_native = null)\n}\n\nconst PLUGIN_NAME_REGEX = /^(@[a-z0-9-]+\\/)?[a-z0-9-]+(@[0-9]+\\.[0-9]+\\.[0-9]+)?$/\n\nexport interface PluginInfo {\n name: string\n description: string\n version: string\n tags: string[]\n official?: boolean\n docs?: string\n install?: string\n integrity?: string\n}\n\ninterface RegistryData {\n version: string\n official: PluginInfo[]\n community: PluginInfo[]\n}\n\nexport interface InstallResult {\n plugin: string\n installed: boolean\n command: string\n exitCode: number\n}\n\nexport type PluginRegistryErrorCode =\n | \"INVALID_PLUGIN_NAME\"\n | \"PLUGIN_NOT_FOUND\"\n | \"EXTERNAL_CONFIRMATION_REQUIRED\"\n | \"INSTALL_COMMAND_FAILED\"\n | \"INSTALL_FAILED\"\n | \"NETWORK_ERROR\"\n | \"REGISTRY_LOAD_FAILED\"\n\nexport interface PluginRegistryErrorPayload {\n code: PluginRegistryErrorCode\n message: string\n context?: Record<string, unknown>\n}\n\nexport class PluginRegistryError extends Error {\n readonly code: PluginRegistryErrorCode\n readonly context?: Record<string, unknown>\n\n constructor(payload: PluginRegistryErrorPayload) {\n super(payload.message)\n this.name = \"PluginRegistryError\"\n this.code = payload.code\n this.context = payload.context\n }\n\n toObject(): PluginRegistryErrorPayload {\n return {\n code: this.code,\n message: this.message,\n context: this.context,\n }\n }\n}\n\nexport interface InstallOptions {\n dryRun?: boolean\n npmBin?: string\n allowExternal?: boolean\n confirmExternal?: boolean\n}\n\nexport interface RegistryOptions {\n registryUrl?: string\n}\n\nexport class PluginRegistry {\n private readonly plugins: PluginInfo[]\n private readonly registryVersion: string\n\n constructor(registryData?: RegistryData, options: RegistryOptions = {}) {\n if (options.registryUrl) {\n this.plugins = []\n this.registryVersion = \"0.0.0\"\n } else {\n const data = registryData\n const version = data?.version ?? \"4.2.0\"\n const official = (data?.official ?? []).map((item) => ({\n name: item.name,\n description: item.description,\n version: item.version,\n tags: [...item.tags],\n official: true,\n docs: item.docs,\n install: item.install,\n integrity: item.integrity,\n }))\n const community = (data?.community ?? []).map((item) => ({\n name: item.name,\n description: item.description,\n version: item.version,\n tags: [...item.tags],\n official: false,\n }))\n this.plugins = [...official, ...community]\n this.registryVersion = version\n }\n }\n\n static async loadFromUrl(url: string): Promise<PluginRegistry> {\n try {\n const response = await fetch(url)\n if (!response.ok) {\n throw new PluginRegistryError({\n code: \"NETWORK_ERROR\",\n message: `Failed to fetch registry: ${response.status} ${response.statusText}`,\n context: { url, status: response.status },\n })\n }\n const data = (await response.json()) as RegistryData\n return new PluginRegistry(data, { registryUrl: url })\n } catch (error) {\n if (error instanceof PluginRegistryError) throw error\n throw new PluginRegistryError({\n code: \"NETWORK_ERROR\",\n message: `Failed to load registry: ${error instanceof Error ? error.message : String(error)}`,\n context: { url },\n })\n }\n }\n\n getVersion(): string {\n return this.registryVersion\n }\n\n search(query: string): PluginInfo[] {\n const native = getNative()\n if (native) {\n return JSON.parse(native.pluginSearch(JSON.stringify(this.plugins), query)) as PluginInfo[]\n }\n const q = query.trim().toLowerCase()\n if (!q) return [...this.plugins]\n return this.plugins.filter((plugin) =>\n plugin.name.toLowerCase().includes(q) ||\n plugin.description.toLowerCase().includes(q) ||\n plugin.tags.some((tag) => tag.toLowerCase().includes(q))\n )\n }\n\n getAll(): PluginInfo[] {\n return [...this.plugins]\n }\n\n getByName(pluginName: string): PluginInfo | undefined {\n const nameWithoutVersion = pluginName.split(\"@\").slice(0, 2).join(\"@\")\n return this.plugins.find((plugin) => plugin.name === nameWithoutVersion)\n }\n\n install(pluginName: string, options: InstallOptions = {}): InstallResult {\n const npmBin = options.npmBin ?? process.env.TW_PLUGIN_NPM_BIN ?? \"npm\"\n\n const native = getNative()\n const isValidName = native\n ? native.pluginValidateName(pluginName)\n : PLUGIN_NAME_REGEX.test(pluginName)\n\n if (!isValidName) {\n throw new PluginRegistryError({\n code: \"INVALID_PLUGIN_NAME\",\n message: `Nama plugin tidak valid: '${pluginName}'.`,\n context: {\n pluginName,\n expectedPattern: String(PLUGIN_NAME_REGEX),\n },\n })\n }\n\n const knownPlugin = this.getByName(pluginName)\n const isExternal = !knownPlugin\n\n if (isExternal && !options.allowExternal) {\n throw new PluginRegistryError({\n code: \"PLUGIN_NOT_FOUND\",\n message: `Plugin '${pluginName}' tidak ditemukan di registry. Coba cari dengan 'tw-plugin search <keyword>'.`,\n context: {\n pluginName,\n allowExternal: false,\n },\n })\n }\n\n if (isExternal && options.allowExternal && !options.confirmExternal) {\n throw new PluginRegistryError({\n code: \"EXTERNAL_CONFIRMATION_REQUIRED\",\n message: `Plugin eksternal '${pluginName}' butuh konfirmasi. Jalankan ulang dengan --allow-external --yes.`,\n context: {\n pluginName,\n allowExternal: true,\n },\n })\n }\n\n const command = `${npmBin} install ${pluginName}`\n if (options.dryRun) {\n return { plugin: pluginName, installed: true, command, exitCode: 0 }\n }\n\n const child = spawnSync(npmBin, [\"install\", pluginName], { stdio: \"inherit\" })\n if (child.error) {\n throw new PluginRegistryError({\n code: \"INSTALL_COMMAND_FAILED\",\n message: `Gagal menjalankan perintah install: ${command}`,\n context: {\n pluginName,\n command,\n reason: child.error.message,\n },\n })\n }\n\n if (child.status !== 0) {\n throw new PluginRegistryError({\n code: \"INSTALL_FAILED\",\n message: `Install gagal (${child.status ?? 1}): ${command}`,\n context: {\n pluginName,\n command,\n exitCode: child.status ?? 1,\n },\n })\n }\n\n return {\n plugin: pluginName,\n installed: true,\n command,\n exitCode: 0,\n }\n }\n\n uninstall(\n pluginName: string,\n options: { dryRun?: boolean; npmBin?: string } = {}\n ): {\n plugin: string\n uninstalled: boolean\n command: string\n exitCode: number\n } {\n const npmBin = options.npmBin ?? process.env.TW_PLUGIN_NPM_BIN ?? \"npm\"\n const command = `${npmBin} uninstall ${pluginName}`\n\n if (options.dryRun) {\n return { plugin: pluginName, uninstalled: true, command, exitCode: 0 }\n }\n\n const child = spawnSync(npmBin, [\"uninstall\", pluginName], { stdio: \"inherit\" })\n if (child.status !== 0 && child.status !== null) {\n throw new PluginRegistryError({\n code: \"INSTALL_FAILED\",\n message: `Uninstall gagal (${child.status}): ${command}`,\n context: { pluginName, command, exitCode: child.status },\n })\n }\n\n return {\n plugin: pluginName,\n uninstalled: true,\n command,\n exitCode: child.status ?? 0,\n }\n }\n\n verifyIntegrity(pluginName: string): { ok: boolean; reason?: string } {\n const plugin = this.getByName(pluginName)\n if (!plugin) return { ok: false, reason: `Plugin '${pluginName}' not in registry` }\n if (!plugin.integrity) {\n return { ok: true, reason: \"no checksum registered (skip)\" }\n }\n try {\n const pkgPath = join(process.cwd(), \"node_modules\", pluginName, \"package.json\")\n if (!existsSync(pkgPath)) return { ok: false, reason: \"plugin not installed\" }\n const content = readFileSync(pkgPath, \"utf8\")\n const native = getNative()\n const ok = native\n ? native.pluginVerifyIntegrity(content, plugin.integrity!)\n : (() => {\n const hash = `sha256-${createHash(\"sha256\").update(content).digest(\"base64\")}`\n return hash === plugin.integrity\n })()\n return ok ? { ok: true } : { ok: false, reason: `Integrity mismatch: expected ${plugin.integrity}` }\n } catch (e: unknown) {\n return {\n ok: false,\n reason: `Integrity check failed: ${e instanceof Error ? e.message : String(e)}`,\n }\n }\n }\n\n checkForUpdate(pluginName: string): {\n hasUpdate: boolean\n current?: string\n latest?: string\n error?: string\n } {\n const plugin = this.getByName(pluginName)\n if (!plugin) return { hasUpdate: false, error: `Plugin '${pluginName}' not in registry` }\n try {\n const pkgPath = join(process.cwd(), \"node_modules\", pluginName, \"package.json\")\n if (!existsSync(pkgPath)) return { hasUpdate: false, error: \"plugin not installed\" }\n const current = JSON.parse(readFileSync(pkgPath, \"utf8\")).version ?? \"0.0.0\"\n const latest = plugin.version\n const native = getNative()\n const hasUpdate = native\n ? native.pluginSemverHasUpdate(current as string, latest)\n : (() => {\n const parseV = (v: string) => v.replace(/[^0-9.]/g, \"\").split(\".\").map(Number)\n const [ca, cb, cc] = parseV(current as string)\n const [la, lb, lc] = parseV(latest)\n return la > ca || (la === ca && lb > cb) || (la === ca && lb === cb && lc > cc)\n })()\n return { hasUpdate, current: current as string, latest }\n } catch (e: unknown) {\n return {\n hasUpdate: false,\n error: `Update check failed: ${e instanceof Error ? e.message : String(e)}`,\n }\n }\n }\n\n checkAllUpdates(): Array<{\n name: string\n hasUpdate: boolean\n current?: string\n latest?: string\n error?: string\n }> {\n return this.plugins.map((p) => ({ name: p.name, ...this.checkForUpdate(p.name) }))\n }\n}\n\nconst _state = { defaultRegistry: null as PluginRegistry | null }\n\nexport function getRegistry(): PluginRegistry {\n if (!_state.defaultRegistry) {\n const registryData = require(\"../registry.json\") as RegistryData\n _state.defaultRegistry = new PluginRegistry(registryData)\n }\n return _state.defaultRegistry\n}\n\nexport const registry = getRegistry()"]}
1
+ {"version":3,"sources":["../packages/domain/plugin-registry/registry.json","../src/umbrella/plugin-registry.ts","../packages/domain/plugin-registry/src/index.ts"],"sourcesContent":["{\n \"version\": \"5.0.0\",\n \"updatedAt\": \"2026-03-23\",\n \"official\": [\n {\n \"name\": \"@tailwind-styled/plugin-animation\",\n \"description\": \"Animation presets and keyframes — enter/exit transitions, spring physics, scroll-triggered\",\n \"version\": \"5.0.0\",\n \"tags\": [\"animation\", \"motion\", \"transition\", \"keyframes\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/packages/animate\",\n \"install\": \"npm install @tailwind-styled/plugin-animation@5.0.0\",\n \"integrity\": \"sha256-abc123\"\n },\n {\n \"name\": \"@tailwind-styled/plugin-typography\",\n \"description\": \"Prose and typography utilities — headings, body, code blocks, with dark mode\",\n \"version\": \"5.0.0\",\n \"tags\": [\"typography\", \"prose\", \"markdown\", \"content\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/docs/plugins\",\n \"install\": \"npm install @tailwind-styled/plugin-typography@5.0.0\",\n \"integrity\": \"sha256-def456\"\n },\n {\n \"name\": \"@tailwind-styled/plugin-forms\",\n \"description\": \"Form input styling helpers — reset, validation states, custom checkboxes/radios\",\n \"version\": \"5.0.0\",\n \"tags\": [\"forms\", \"inputs\", \"validation\", \"checkbox\", \"radio\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/docs/plugins\",\n \"install\": \"npm install @tailwind-styled/plugin-forms@5.0.0\",\n \"integrity\": \"sha256-ghi789\"\n },\n {\n \"name\": \"@tailwind-styled/plugin-container-queries\",\n \"description\": \"Container query utilities — @container breakpoints for component-level responsiveness\",\n \"version\": \"5.0.0\",\n \"tags\": [\"container-queries\", \"responsive\", \"layout\"],\n \"docs\": \"https://github.com/tailwind-styled/tailwind-styled-v5/tree/main/docs/plugins\",\n \"install\": \"npm install @tailwind-styled/plugin-container-queries@5.0.0\",\n \"integrity\": \"sha256-jkl012\"\n }\n ],\n \"community\": [\n {\n \"name\": \"tailwind-styled-animate\",\n \"description\": \"Community animation variants — bounce, pulse, wiggle, and more\",\n \"version\": \"0.1.0\",\n \"tags\": [\"animation\", \"community\"],\n \"author\": \"community\",\n \"install\": \"npm install tailwind-styled-animate\"\n },\n {\n \"name\": \"tailwind-styled-icons\",\n \"description\": \"SVG icon system integrated with tw() variant API\",\n \"version\": \"0.1.0\",\n \"tags\": [\"icons\", \"svg\", \"community\"],\n \"author\": \"community\",\n \"install\": \"npm install tailwind-styled-icons\"\n }\n ]\n}\n","export * from \"@tailwind-styled/plugin-registry\"\n","import { spawnSync } from \"node:child_process\"\nimport { existsSync, readFileSync } from \"node:fs\"\nimport { createRequire } from \"node:module\"\nimport { join, resolve } from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\n// ── Native bridge (lazy-loaded to avoid circular deps) ──────────────────────\ntype NativePluginRegistry = {\n pluginSearch: (pluginsJson: string, query: string) => string\n pluginValidateName: (name: string) => boolean\n pluginVerifyIntegrity: (content: string, expectedIntegrity: string) => boolean\n pluginSemverHasUpdate: (current: string, latest: string) => boolean\n pluginCheckAllUpdates: (installedJson: string, registryJson: string) => string\n}\nlet _native: NativePluginRegistry | null | undefined = undefined\nfunction getNative(): NativePluginRegistry | null {\n if (_native !== undefined) return _native\n try {\n const runtimeDir = typeof __dirname === \"string\" && __dirname.length > 0\n ? __dirname\n : typeof import.meta !== \"undefined\" && import.meta.url\n ? fileURLToPath(new URL(\".\", import.meta.url))\n : process.cwd()\n const req = createRequire(join(runtimeDir, \"noop.cjs\"))\n const _pa = `${process.platform}-${process.arch}`\n const _paGnu = _pa === \"linux-x64\" ? \"linux-x64-gnu\" : _pa === \"linux-arm64\" ? \"linux-arm64-gnu\" : _pa\n const candidates = [\n // npm install case: dist/../native/\n resolve(runtimeDir, \"..\", \"native\", \"tailwind-styled-native.node\"),\n resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_pa}.node`),\n resolve(runtimeDir, \"..\", \"native\", `tailwind-styled-native.${_paGnu}.node`),\n resolve(runtimeDir, \"..\", \"native\", \"tailwind_styled_parser.node\"),\n // cwd fallback\n resolve(process.cwd(), \"native\", \"tailwind-styled-native.node\"),\n resolve(process.cwd(), \"native\", \"tailwind_styled_parser.node\"),\n // monorepo dev: 4-level up\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\n // 3-level fallback\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind-styled-native.node\"),\n resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", \"tailwind_styled_parser.node\"),\n ]\n for (const c of candidates) {\n try {\n const mod = req(c) as Record<string, unknown>\n if (typeof mod?.pluginSearch === \"function\") {\n return (_native = mod as unknown as NativePluginRegistry)\n }\n } catch { /* continue */ }\n }\n } catch { /* ignore */ }\n return (_native = null)\n}\n\nconst NATIVE_UNAVAILABLE_MESSAGE =\n \"[tailwind-styled/plugin-registry] Native binding is required but not available.\\n\" +\n \"Please ensure you have run: npm run build:rust\"\n\n/**\n * Native-only accessor. Throws if the Rust binding is missing.\n * The TS layer is a thin wrapper — no JS fallbacks (native-first philosophy).\n */\nfunction requireNative(): NativePluginRegistry {\n const native = getNative()\n if (!native) throw new Error(NATIVE_UNAVAILABLE_MESSAGE)\n return native\n}\n\nconst PLUGIN_NAME_REGEX = /^(@[a-z0-9-]+\\/)?[a-z0-9-]+(@[0-9]+\\.[0-9]+\\.[0-9]+)?$/\n\nexport interface PluginInfo {\n name: string\n description: string\n version: string\n tags: string[]\n official?: boolean\n docs?: string\n install?: string\n integrity?: string\n}\n\ninterface RegistryData {\n version: string\n official: PluginInfo[]\n community: PluginInfo[]\n}\n\nexport interface InstallResult {\n plugin: string\n installed: boolean\n command: string\n exitCode: number\n}\n\nexport type PluginRegistryErrorCode =\n | \"INVALID_PLUGIN_NAME\"\n | \"PLUGIN_NOT_FOUND\"\n | \"EXTERNAL_CONFIRMATION_REQUIRED\"\n | \"INSTALL_COMMAND_FAILED\"\n | \"INSTALL_FAILED\"\n | \"NETWORK_ERROR\"\n | \"REGISTRY_LOAD_FAILED\"\n\nexport interface PluginRegistryErrorPayload {\n code: PluginRegistryErrorCode\n message: string\n context?: Record<string, unknown>\n}\n\nexport class PluginRegistryError extends Error {\n readonly code: PluginRegistryErrorCode\n readonly context?: Record<string, unknown>\n\n constructor(payload: PluginRegistryErrorPayload) {\n super(payload.message)\n this.name = \"PluginRegistryError\"\n this.code = payload.code\n this.context = payload.context\n }\n\n toObject(): PluginRegistryErrorPayload {\n return {\n code: this.code,\n message: this.message,\n context: this.context,\n }\n }\n}\n\nexport interface InstallOptions {\n dryRun?: boolean\n npmBin?: string\n allowExternal?: boolean\n confirmExternal?: boolean\n}\n\nexport interface RegistryOptions {\n registryUrl?: string\n}\n\nexport class PluginRegistry {\n private readonly plugins: PluginInfo[]\n private readonly registryVersion: string\n\n constructor(registryData?: RegistryData, options: RegistryOptions = {}) {\n if (options.registryUrl) {\n this.plugins = []\n this.registryVersion = \"0.0.0\"\n } else {\n const data = registryData\n const version = data?.version ?? \"4.2.0\"\n const official = (data?.official ?? []).map((item) => ({\n name: item.name,\n description: item.description,\n version: item.version,\n tags: [...item.tags],\n official: true,\n docs: item.docs,\n install: item.install,\n integrity: item.integrity,\n }))\n const community = (data?.community ?? []).map((item) => ({\n name: item.name,\n description: item.description,\n version: item.version,\n tags: [...item.tags],\n official: false,\n }))\n this.plugins = [...official, ...community]\n this.registryVersion = version\n }\n }\n\n static async loadFromUrl(url: string): Promise<PluginRegistry> {\n try {\n const response = await fetch(url)\n if (!response.ok) {\n throw new PluginRegistryError({\n code: \"NETWORK_ERROR\",\n message: `Failed to fetch registry: ${response.status} ${response.statusText}`,\n context: { url, status: response.status },\n })\n }\n const data = (await response.json()) as RegistryData\n return new PluginRegistry(data, { registryUrl: url })\n } catch (error) {\n if (error instanceof PluginRegistryError) throw error\n throw new PluginRegistryError({\n code: \"NETWORK_ERROR\",\n message: `Failed to load registry: ${error instanceof Error ? error.message : String(error)}`,\n context: { url },\n })\n }\n }\n\n getVersion(): string {\n return this.registryVersion\n }\n\n search(query: string): PluginInfo[] {\n const native = requireNative()\n return JSON.parse(native.pluginSearch(JSON.stringify(this.plugins), query)) as PluginInfo[]\n }\n\n getAll(): PluginInfo[] {\n return [...this.plugins]\n }\n\n getByName(pluginName: string): PluginInfo | undefined {\n const nameWithoutVersion = pluginName.split(\"@\").slice(0, 2).join(\"@\")\n return this.plugins.find((plugin) => plugin.name === nameWithoutVersion)\n }\n\n install(pluginName: string, options: InstallOptions = {}): InstallResult {\n const npmBin = options.npmBin ?? process.env.TW_PLUGIN_NPM_BIN ?? \"npm\"\n\n const native = requireNative()\n const isValidName = native.pluginValidateName(pluginName)\n\n if (!isValidName) {\n throw new PluginRegistryError({\n code: \"INVALID_PLUGIN_NAME\",\n message: `Nama plugin tidak valid: '${pluginName}'.`,\n context: {\n pluginName,\n expectedPattern: String(PLUGIN_NAME_REGEX),\n },\n })\n }\n\n const knownPlugin = this.getByName(pluginName)\n const isExternal = !knownPlugin\n\n if (isExternal && !options.allowExternal) {\n throw new PluginRegistryError({\n code: \"PLUGIN_NOT_FOUND\",\n message: `Plugin '${pluginName}' tidak ditemukan di registry. Coba cari dengan 'tw-plugin search <keyword>'.`,\n context: {\n pluginName,\n allowExternal: false,\n },\n })\n }\n\n if (isExternal && options.allowExternal && !options.confirmExternal) {\n throw new PluginRegistryError({\n code: \"EXTERNAL_CONFIRMATION_REQUIRED\",\n message: `Plugin eksternal '${pluginName}' butuh konfirmasi. Jalankan ulang dengan --allow-external --yes.`,\n context: {\n pluginName,\n allowExternal: true,\n },\n })\n }\n\n const command = `${npmBin} install ${pluginName}`\n if (options.dryRun) {\n return { plugin: pluginName, installed: true, command, exitCode: 0 }\n }\n\n const child = spawnSync(npmBin, [\"install\", pluginName], { stdio: \"inherit\" })\n if (child.error) {\n throw new PluginRegistryError({\n code: \"INSTALL_COMMAND_FAILED\",\n message: `Gagal menjalankan perintah install: ${command}`,\n context: {\n pluginName,\n command,\n reason: child.error.message,\n },\n })\n }\n\n if (child.status !== 0) {\n throw new PluginRegistryError({\n code: \"INSTALL_FAILED\",\n message: `Install gagal (${child.status ?? 1}): ${command}`,\n context: {\n pluginName,\n command,\n exitCode: child.status ?? 1,\n },\n })\n }\n\n return {\n plugin: pluginName,\n installed: true,\n command,\n exitCode: 0,\n }\n }\n\n uninstall(\n pluginName: string,\n options: { dryRun?: boolean; npmBin?: string } = {}\n ): {\n plugin: string\n uninstalled: boolean\n command: string\n exitCode: number\n } {\n const npmBin = options.npmBin ?? process.env.TW_PLUGIN_NPM_BIN ?? \"npm\"\n const command = `${npmBin} uninstall ${pluginName}`\n\n if (options.dryRun) {\n return { plugin: pluginName, uninstalled: true, command, exitCode: 0 }\n }\n\n const child = spawnSync(npmBin, [\"uninstall\", pluginName], { stdio: \"inherit\" })\n if (child.status !== 0 && child.status !== null) {\n throw new PluginRegistryError({\n code: \"INSTALL_FAILED\",\n message: `Uninstall gagal (${child.status}): ${command}`,\n context: { pluginName, command, exitCode: child.status },\n })\n }\n\n return {\n plugin: pluginName,\n uninstalled: true,\n command,\n exitCode: child.status ?? 0,\n }\n }\n\n verifyIntegrity(pluginName: string): { ok: boolean; reason?: string } {\n const plugin = this.getByName(pluginName)\n if (!plugin) return { ok: false, reason: `Plugin '${pluginName}' not in registry` }\n if (!plugin.integrity) {\n return { ok: true, reason: \"no checksum registered (skip)\" }\n }\n try {\n const pkgPath = join(process.cwd(), \"node_modules\", pluginName, \"package.json\")\n if (!existsSync(pkgPath)) return { ok: false, reason: \"plugin not installed\" }\n const content = readFileSync(pkgPath, \"utf8\")\n const native = requireNative()\n const ok = native.pluginVerifyIntegrity(content, plugin.integrity!)\n return ok ? { ok: true } : { ok: false, reason: `Integrity mismatch: expected ${plugin.integrity}` }\n } catch (e: unknown) {\n return {\n ok: false,\n reason: `Integrity check failed: ${e instanceof Error ? e.message : String(e)}`,\n }\n }\n }\n\n checkForUpdate(pluginName: string): {\n hasUpdate: boolean\n current?: string\n latest?: string\n error?: string\n } {\n const plugin = this.getByName(pluginName)\n if (!plugin) return { hasUpdate: false, error: `Plugin '${pluginName}' not in registry` }\n try {\n const pkgPath = join(process.cwd(), \"node_modules\", pluginName, \"package.json\")\n if (!existsSync(pkgPath)) return { hasUpdate: false, error: \"plugin not installed\" }\n const current = JSON.parse(readFileSync(pkgPath, \"utf8\")).version ?? \"0.0.0\"\n const latest = plugin.version\n const native = requireNative()\n const hasUpdate = native.pluginSemverHasUpdate(current as string, latest)\n return { hasUpdate, current: current as string, latest }\n } catch (e: unknown) {\n return {\n hasUpdate: false,\n error: `Update check failed: ${e instanceof Error ? e.message : String(e)}`,\n }\n }\n }\n\n checkAllUpdates(): Array<{\n name: string\n hasUpdate: boolean\n current?: string\n latest?: string\n error?: string\n }> {\n type UpdateResult = {\n name: string\n hasUpdate: boolean\n current?: string\n latest?: string\n error?: string\n }\n const native = requireNative()\n\n // FS I/O stays in JS — gather installed versions for every registry plugin.\n const installed: Array<{ name: string; version: string }> = []\n const byName = new Map<string, UpdateResult>()\n for (const p of this.plugins) {\n try {\n const pkgPath = join(process.cwd(), \"node_modules\", p.name, \"package.json\")\n if (!existsSync(pkgPath)) {\n byName.set(p.name, { name: p.name, hasUpdate: false, error: \"plugin not installed\" })\n continue\n }\n const version = JSON.parse(readFileSync(pkgPath, \"utf8\")).version ?? \"0.0.0\"\n installed.push({ name: p.name, version: version as string })\n } catch (e: unknown) {\n byName.set(p.name, {\n name: p.name,\n hasUpdate: false,\n error: `Update check failed: ${e instanceof Error ? e.message : String(e)}`,\n })\n }\n }\n\n // Single native batch call does all semver comparisons (1 FFI crossing, not N).\n const results = JSON.parse(\n native.pluginCheckAllUpdates(JSON.stringify(installed), JSON.stringify(this.plugins))\n ) as UpdateResult[]\n for (const r of results) byName.set(r.name, r)\n\n // Preserve registry order.\n return this.plugins.map((p) => byName.get(p.name)).filter((r): r is UpdateResult => r !== undefined)\n }\n}\n\nconst _state = { defaultRegistry: null as PluginRegistry | null }\n\nexport function getRegistry(): PluginRegistry {\n if (!_state.defaultRegistry) {\n const registryData = require(\"../registry.json\") as RegistryData\n _state.defaultRegistry = new PluginRegistry(registryData)\n }\n return _state.defaultRegistry\n}\n\nexport const registry = getRegistry()"],"mappings":"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","names":["exports","module"]}
@@ -1,10 +1,3 @@
1
- import { spawnSync } from 'child_process';
2
- import { createHash } from 'crypto';
3
- import { existsSync, readFileSync } from 'fs';
4
- import { createRequire } from 'module';
5
- import { join, resolve } from 'path';
6
- import { fileURLToPath } from 'url';
7
-
8
1
  /* tailwind-styled-v4 v5.0.4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
9
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
10
3
  var __commonJS = (cb, mod) => function __require() {
@@ -13,7 +6,7 @@ var __commonJS = (cb, mod) => function __require() {
13
6
 
14
7
  // packages/domain/plugin-registry/registry.json
15
8
  var require_registry = __commonJS({
16
- "packages/domain/plugin-registry/registry.json"(exports$1, module) {
9
+ "packages/domain/plugin-registry/registry.json"(exports, module) {
17
10
  module.exports = {
18
11
  version: "5.0.0",
19
12
  updatedAt: "2026-03-23",
@@ -76,6 +69,13 @@ var require_registry = __commonJS({
76
69
  };
77
70
  }
78
71
  });
72
+
73
+ // packages/domain/plugin-registry/src/index.ts
74
+ import { spawnSync } from "child_process";
75
+ import { existsSync, readFileSync } from "fs";
76
+ import { createRequire } from "module";
77
+ import { join, resolve } from "path";
78
+ import { fileURLToPath } from "url";
79
79
  var _native = void 0;
80
80
  function getNative() {
81
81
  if (_native !== void 0) return _native;
@@ -113,6 +113,12 @@ function getNative() {
113
113
  }
114
114
  return _native = null;
115
115
  }
116
+ var NATIVE_UNAVAILABLE_MESSAGE = "[tailwind-styled/plugin-registry] Native binding is required but not available.\nPlease ensure you have run: npm run build:rust";
117
+ function requireNative() {
118
+ const native = getNative();
119
+ if (!native) throw new Error(NATIVE_UNAVAILABLE_MESSAGE);
120
+ return native;
121
+ }
116
122
  var PLUGIN_NAME_REGEX = /^(@[a-z0-9-]+\/)?[a-z0-9-]+(@[0-9]+\.[0-9]+\.[0-9]+)?$/;
117
123
  var PluginRegistryError = class extends Error {
118
124
  code;
@@ -187,15 +193,8 @@ var PluginRegistry = class _PluginRegistry {
187
193
  return this.registryVersion;
188
194
  }
189
195
  search(query) {
190
- const native = getNative();
191
- if (native) {
192
- return JSON.parse(native.pluginSearch(JSON.stringify(this.plugins), query));
193
- }
194
- const q = query.trim().toLowerCase();
195
- if (!q) return [...this.plugins];
196
- return this.plugins.filter(
197
- (plugin) => plugin.name.toLowerCase().includes(q) || plugin.description.toLowerCase().includes(q) || plugin.tags.some((tag) => tag.toLowerCase().includes(q))
198
- );
196
+ const native = requireNative();
197
+ return JSON.parse(native.pluginSearch(JSON.stringify(this.plugins), query));
199
198
  }
200
199
  getAll() {
201
200
  return [...this.plugins];
@@ -206,8 +205,8 @@ var PluginRegistry = class _PluginRegistry {
206
205
  }
207
206
  install(pluginName, options = {}) {
208
207
  const npmBin = options.npmBin ?? process.env.TW_PLUGIN_NPM_BIN ?? "npm";
209
- const native = getNative();
210
- const isValidName = native ? native.pluginValidateName(pluginName) : PLUGIN_NAME_REGEX.test(pluginName);
208
+ const native = requireNative();
209
+ const isValidName = native.pluginValidateName(pluginName);
211
210
  if (!isValidName) {
212
211
  throw new PluginRegistryError({
213
212
  code: "INVALID_PLUGIN_NAME",
@@ -305,11 +304,8 @@ var PluginRegistry = class _PluginRegistry {
305
304
  const pkgPath = join(process.cwd(), "node_modules", pluginName, "package.json");
306
305
  if (!existsSync(pkgPath)) return { ok: false, reason: "plugin not installed" };
307
306
  const content = readFileSync(pkgPath, "utf8");
308
- const native = getNative();
309
- const ok = native ? native.pluginVerifyIntegrity(content, plugin.integrity) : (() => {
310
- const hash = `sha256-${createHash("sha256").update(content).digest("base64")}`;
311
- return hash === plugin.integrity;
312
- })();
307
+ const native = requireNative();
308
+ const ok = native.pluginVerifyIntegrity(content, plugin.integrity);
313
309
  return ok ? { ok: true } : { ok: false, reason: `Integrity mismatch: expected ${plugin.integrity}` };
314
310
  } catch (e) {
315
311
  return {
@@ -326,13 +322,8 @@ var PluginRegistry = class _PluginRegistry {
326
322
  if (!existsSync(pkgPath)) return { hasUpdate: false, error: "plugin not installed" };
327
323
  const current = JSON.parse(readFileSync(pkgPath, "utf8")).version ?? "0.0.0";
328
324
  const latest = plugin.version;
329
- const native = getNative();
330
- const hasUpdate = native ? native.pluginSemverHasUpdate(current, latest) : (() => {
331
- const parseV = (v) => v.replace(/[^0-9.]/g, "").split(".").map(Number);
332
- const [ca, cb, cc] = parseV(current);
333
- const [la, lb, lc] = parseV(latest);
334
- return la > ca || la === ca && lb > cb || la === ca && lb === cb && lc > cc;
335
- })();
325
+ const native = requireNative();
326
+ const hasUpdate = native.pluginSemverHasUpdate(current, latest);
336
327
  return { hasUpdate, current, latest };
337
328
  } catch (e) {
338
329
  return {
@@ -342,7 +333,31 @@ var PluginRegistry = class _PluginRegistry {
342
333
  }
343
334
  }
344
335
  checkAllUpdates() {
345
- return this.plugins.map((p) => ({ name: p.name, ...this.checkForUpdate(p.name) }));
336
+ const native = requireNative();
337
+ const installed = [];
338
+ const byName = /* @__PURE__ */ new Map();
339
+ for (const p of this.plugins) {
340
+ try {
341
+ const pkgPath = join(process.cwd(), "node_modules", p.name, "package.json");
342
+ if (!existsSync(pkgPath)) {
343
+ byName.set(p.name, { name: p.name, hasUpdate: false, error: "plugin not installed" });
344
+ continue;
345
+ }
346
+ const version = JSON.parse(readFileSync(pkgPath, "utf8")).version ?? "0.0.0";
347
+ installed.push({ name: p.name, version });
348
+ } catch (e) {
349
+ byName.set(p.name, {
350
+ name: p.name,
351
+ hasUpdate: false,
352
+ error: `Update check failed: ${e instanceof Error ? e.message : String(e)}`
353
+ });
354
+ }
355
+ }
356
+ const results = JSON.parse(
357
+ native.pluginCheckAllUpdates(JSON.stringify(installed), JSON.stringify(this.plugins))
358
+ );
359
+ for (const r of results) byName.set(r.name, r);
360
+ return this.plugins.map((p) => byName.get(p.name)).filter((r) => r !== void 0);
346
361
  }
347
362
  };
348
363
  var _state = { defaultRegistry: null };
@@ -354,7 +369,10 @@ function getRegistry() {
354
369
  return _state.defaultRegistry;
355
370
  }
356
371
  var registry = getRegistry();
357
-
358
- export { PluginRegistry, PluginRegistryError, getRegistry, registry };
359
- //# sourceMappingURL=plugin-registry.mjs.map
372
+ export {
373
+ PluginRegistry,
374
+ PluginRegistryError,
375
+ getRegistry,
376
+ registry
377
+ };
360
378
  //# sourceMappingURL=plugin-registry.mjs.map