tailwind-styled-v4 5.0.37 → 5.0.39
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/dist/analyzer.js +213 -161
- package/dist/analyzer.js.map +1 -1
- package/dist/analyzer.mjs +121 -83
- package/dist/analyzer.mjs.map +1 -1
- package/dist/animate.js +131 -87
- package/dist/animate.js.map +1 -1
- package/dist/animate.mjs +31 -15
- package/dist/animate.mjs.map +1 -1
- package/dist/atomic.js +107 -67
- package/dist/atomic.js.map +1 -1
- package/dist/atomic.mjs +47 -14
- package/dist/atomic.mjs.map +1 -1
- package/dist/cli.js +601 -428
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +504 -313
- package/dist/cli.mjs.map +1 -1
- package/dist/compiler.js +833 -508
- package/dist/compiler.js.map +1 -1
- package/dist/compiler.mjs +298 -30
- package/dist/compiler.mjs.map +1 -1
- package/dist/dashboard.js +72 -41
- package/dist/dashboard.js.map +1 -1
- package/dist/dashboard.mjs +12 -6
- package/dist/dashboard.mjs.map +1 -1
- package/dist/devtools.js +335 -289
- package/dist/devtools.js.map +1 -1
- package/dist/devtools.mjs +28 -11
- package/dist/devtools.mjs.map +1 -1
- package/dist/engine.js +719 -506
- package/dist/engine.js.map +1 -1
- package/dist/engine.mjs +520 -318
- package/dist/engine.mjs.map +1 -1
- package/dist/index.d.mts +145 -319
- package/dist/index.d.ts +145 -319
- package/dist/index.js +1337 -7442
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1275 -7386
- package/dist/index.mjs.map +1 -1
- package/dist/next.js +327 -242
- package/dist/next.js.map +1 -1
- package/dist/next.mjs +272 -184
- package/dist/next.mjs.map +1 -1
- package/dist/plugin-api.js +94 -49
- package/dist/plugin-api.js.map +1 -1
- package/dist/plugin-api.mjs +26 -6
- package/dist/plugin-api.mjs.map +1 -1
- package/dist/plugin-registry.js +68 -40
- package/dist/plugin-registry.js.map +1 -1
- package/dist/plugin-registry.mjs +14 -10
- package/dist/plugin-registry.mjs.map +1 -1
- package/dist/plugin.js +102 -53
- package/dist/plugin.js.map +1 -1
- package/dist/plugin.mjs +30 -6
- package/dist/plugin.mjs.map +1 -1
- package/dist/preset.js +48 -15
- package/dist/preset.js.map +1 -1
- package/dist/preset.mjs +13 -5
- package/dist/preset.mjs.map +1 -1
- package/dist/rspack.js +108 -53
- package/dist/rspack.js.map +1 -1
- package/dist/rspack.mjs +50 -18
- package/dist/rspack.mjs.map +1 -1
- package/dist/runtime-css.js +63 -24
- package/dist/runtime-css.js.map +1 -1
- package/dist/runtime-css.mjs +15 -7
- package/dist/runtime-css.mjs.map +1 -1
- package/dist/runtime.js +98 -44
- package/dist/runtime.js.map +1 -1
- package/dist/runtime.mjs +31 -8
- package/dist/runtime.mjs.map +1 -1
- package/dist/scanner.js +164 -120
- package/dist/scanner.js.map +1 -1
- package/dist/scanner.mjs +70 -40
- package/dist/scanner.mjs.map +1 -1
- package/dist/shared.d.mts +0 -12
- package/dist/shared.d.ts +0 -12
- package/dist/shared.js +481 -299
- package/dist/shared.js.map +1 -1
- package/dist/shared.mjs +304 -133
- package/dist/shared.mjs.map +1 -1
- package/dist/storybook-addon.js +40 -10
- package/dist/storybook-addon.js.map +1 -1
- package/dist/storybook-addon.mjs +8 -3
- package/dist/storybook-addon.mjs.map +1 -1
- package/dist/svelte.js +95 -64
- package/dist/svelte.js.map +1 -1
- package/dist/svelte.mjs +37 -14
- package/dist/svelte.mjs.map +1 -1
- package/dist/syntax.js +69 -37
- package/dist/syntax.js.map +1 -1
- package/dist/syntax.mjs +8 -7
- package/dist/syntax.mjs.map +1 -1
- package/dist/testing.js +56 -18
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs +16 -3
- package/dist/testing.mjs.map +1 -1
- package/dist/theme.js +133 -74
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs +45 -14
- package/dist/theme.mjs.map +1 -1
- package/dist/turbopackLoader.js +156 -115
- package/dist/turbopackLoader.js.map +1 -1
- package/dist/turbopackLoader.mjs +135 -82
- package/dist/turbopackLoader.mjs.map +1 -1
- package/dist/tw.js +584 -423
- package/dist/tw.js.map +1 -1
- package/dist/tw.mjs +498 -311
- package/dist/tw.mjs.map +1 -1
- package/dist/vite.js +599 -450
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +484 -332
- package/dist/vite.mjs.map +1 -1
- package/dist/vue.js +102 -70
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs +39 -15
- package/dist/vue.mjs.map +1 -1
- package/dist/webpackLoader.js +112 -77
- package/dist/webpackLoader.js.map +1 -1
- package/dist/webpackLoader.mjs +52 -18
- package/dist/webpackLoader.mjs.map +1 -1
- package/native/tailwind-styled-native.linux-x64-gnu.node +0 -0
- package/native/tailwind-styled-native.node +0 -0
- package/package.json +3 -1
package/dist/plugin-api.js
CHANGED
|
@@ -1,9 +1,53 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var zod = require('zod');
|
|
4
|
-
|
|
1
|
+
const __importMetaUrl = typeof __filename !== "undefined" ? require("node:url").pathToFileURL(__filename).href : "file://unknown";
|
|
5
2
|
/* tailwind-styled-v4 v5.0.4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
3
|
+
"use strict";
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
6
21
|
|
|
22
|
+
// src/umbrella/plugin-api.ts
|
|
23
|
+
var plugin_api_exports = {};
|
|
24
|
+
__export(plugin_api_exports, {
|
|
25
|
+
PluginManifestSchema: () => PluginManifestSchema,
|
|
26
|
+
TokenRegistrationSchema: () => TokenRegistrationSchema,
|
|
27
|
+
TransformRegistrationSchema: () => TransformRegistrationSchema,
|
|
28
|
+
TwPluginOptionsSchema: () => TwPluginOptionsSchema,
|
|
29
|
+
createGlobalPluginContext: () => createGlobalPluginContext,
|
|
30
|
+
createPluginContext: () => createPluginContext,
|
|
31
|
+
createPluginRegistry: () => createPluginRegistry,
|
|
32
|
+
createTw: () => createTw,
|
|
33
|
+
getGlobalRegistry: () => getGlobalRegistry,
|
|
34
|
+
parsePluginManifest: () => parsePluginManifest,
|
|
35
|
+
parseTokenRegistration: () => parseTokenRegistration,
|
|
36
|
+
parseTwPluginOptions: () => parseTwPluginOptions,
|
|
37
|
+
presetScrollbar: () => presetScrollbar,
|
|
38
|
+
presetTokens: () => presetTokens,
|
|
39
|
+
presetVariants: () => presetVariants,
|
|
40
|
+
readToken: () => readToken,
|
|
41
|
+
registerToken: () => registerToken,
|
|
42
|
+
registerTransform: () => registerTransform,
|
|
43
|
+
resetGlobalRegistry: () => resetGlobalRegistry,
|
|
44
|
+
resolveTokenEngine: () => resolveTokenEngine,
|
|
45
|
+
use: () => use
|
|
46
|
+
});
|
|
47
|
+
module.exports = __toCommonJS(plugin_api_exports);
|
|
48
|
+
|
|
49
|
+
// packages/domain/plugin-api/src/schemas.ts
|
|
50
|
+
var import_zod = require("zod");
|
|
7
51
|
var formatIssues = (error) => error.issues.map((issue) => {
|
|
8
52
|
const p = issue.path.length > 0 ? issue.path.join(".") : "<root>";
|
|
9
53
|
return `${p}: ${issue.message}`;
|
|
@@ -13,44 +57,44 @@ var parseWithSchema = (schema, data, label) => {
|
|
|
13
57
|
if (parsed.success) return parsed.data;
|
|
14
58
|
throw new TypeError(`${label}: ${formatIssues(parsed.error)}`);
|
|
15
59
|
};
|
|
16
|
-
var DesignTokensSchema =
|
|
17
|
-
var TwClassResultSchema =
|
|
18
|
-
css:
|
|
19
|
-
classes:
|
|
60
|
+
var DesignTokensSchema = import_zod.z.record(import_zod.z.string(), import_zod.z.union([import_zod.z.string(), import_zod.z.number(), import_zod.z.lazy(() => DesignTokensSchema)]));
|
|
61
|
+
var TwClassResultSchema = import_zod.z.object({
|
|
62
|
+
css: import_zod.z.string(),
|
|
63
|
+
classes: import_zod.z.array(import_zod.z.string())
|
|
20
64
|
});
|
|
21
|
-
var TwPluginOptionsSchema =
|
|
22
|
-
classProcessor:
|
|
65
|
+
var TwPluginOptionsSchema = import_zod.z.object({
|
|
66
|
+
classProcessor: import_zod.z.function({ input: [import_zod.z.array(import_zod.z.string())], output: TwClassResultSchema }).optional(),
|
|
23
67
|
tokens: DesignTokensSchema.optional(),
|
|
24
|
-
debug:
|
|
25
|
-
minify:
|
|
68
|
+
debug: import_zod.z.boolean().optional(),
|
|
69
|
+
minify: import_zod.z.boolean().optional()
|
|
26
70
|
});
|
|
27
|
-
var PluginManifestSchema =
|
|
28
|
-
name:
|
|
29
|
-
setup:
|
|
71
|
+
var PluginManifestSchema = import_zod.z.object({
|
|
72
|
+
name: import_zod.z.string().min(1),
|
|
73
|
+
setup: import_zod.z.function({ input: [import_zod.z.unknown()], output: import_zod.z.unknown() })
|
|
30
74
|
});
|
|
31
|
-
var TransformRegistrationSchema =
|
|
32
|
-
var TokenRegistrationSchema =
|
|
33
|
-
name:
|
|
34
|
-
value:
|
|
75
|
+
var TransformRegistrationSchema = import_zod.z.function({ input: [import_zod.z.unknown()], output: import_zod.z.unknown() });
|
|
76
|
+
var TokenRegistrationSchema = import_zod.z.object({
|
|
77
|
+
name: import_zod.z.string().min(1),
|
|
78
|
+
value: import_zod.z.string()
|
|
35
79
|
});
|
|
36
80
|
var parseTwPluginOptions = (options) => parseWithSchema(TwPluginOptionsSchema, options ?? {}, "plugin options are invalid");
|
|
37
81
|
var parsePluginManifest = (plugin) => parseWithSchema(PluginManifestSchema, plugin, "plugin manifest is invalid");
|
|
38
82
|
var parseTokenRegistration = (data) => parseWithSchema(TokenRegistrationSchema, data, "token registration is invalid");
|
|
39
|
-
var PluginNameSchema =
|
|
83
|
+
var PluginNameSchema = import_zod.z.string().min(1, "Plugin name cannot be empty").regex(
|
|
40
84
|
/^(@[a-z0-9-]+\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,
|
|
41
85
|
"Plugin name must follow npm naming: lowercase, hyphens allowed, no leading/trailing hyphens"
|
|
42
86
|
);
|
|
43
|
-
var SemverSchema =
|
|
87
|
+
var SemverSchema = import_zod.z.string().regex(/^\d+\.\d+\.\d+(-[a-z0-9.]+)?$/, "Version must follow semver: x.y.z or x.y.z-prerelease");
|
|
44
88
|
var FullPluginManifestSchema = PluginManifestSchema.extend({
|
|
45
89
|
name: PluginNameSchema,
|
|
46
90
|
version: SemverSchema.optional(),
|
|
47
|
-
description:
|
|
48
|
-
keywords:
|
|
91
|
+
description: import_zod.z.string().max(200).optional(),
|
|
92
|
+
keywords: import_zod.z.array(import_zod.z.string()).max(10).optional()
|
|
49
93
|
});
|
|
50
|
-
|
|
94
|
+
var PluginRegistrationPayloadSchema = import_zod.z.object({
|
|
51
95
|
plugin: FullPluginManifestSchema,
|
|
52
|
-
config:
|
|
53
|
-
priority:
|
|
96
|
+
config: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).optional(),
|
|
97
|
+
priority: import_zod.z.number().int().min(0).max(100).optional()
|
|
54
98
|
});
|
|
55
99
|
|
|
56
100
|
// packages/domain/plugin-api/src/index.ts
|
|
@@ -223,27 +267,28 @@ function presetScrollbar() {
|
|
|
223
267
|
}
|
|
224
268
|
};
|
|
225
269
|
}
|
|
226
|
-
|
|
227
|
-
exports
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
270
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
271
|
+
0 && (module.exports = {
|
|
272
|
+
PluginManifestSchema,
|
|
273
|
+
TokenRegistrationSchema,
|
|
274
|
+
TransformRegistrationSchema,
|
|
275
|
+
TwPluginOptionsSchema,
|
|
276
|
+
createGlobalPluginContext,
|
|
277
|
+
createPluginContext,
|
|
278
|
+
createPluginRegistry,
|
|
279
|
+
createTw,
|
|
280
|
+
getGlobalRegistry,
|
|
281
|
+
parsePluginManifest,
|
|
282
|
+
parseTokenRegistration,
|
|
283
|
+
parseTwPluginOptions,
|
|
284
|
+
presetScrollbar,
|
|
285
|
+
presetTokens,
|
|
286
|
+
presetVariants,
|
|
287
|
+
readToken,
|
|
288
|
+
registerToken,
|
|
289
|
+
registerTransform,
|
|
290
|
+
resetGlobalRegistry,
|
|
291
|
+
resolveTokenEngine,
|
|
292
|
+
use
|
|
293
|
+
});
|
|
249
294
|
//# sourceMappingURL=plugin-api.js.map
|
package/dist/plugin-api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/domain/plugin-api/src/schemas.ts","../packages/domain/plugin-api/src/index.ts"],"names":["z","config"],"mappings":"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","file":"plugin-api.js","sourcesContent":["import { z } from \"zod\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\n}\n\nexport const DesignTokensSchema: z.ZodType<\n Record<string, string | number | Record<string, unknown>>\n> = z.record(z.string(), z.union([z.string(), z.number(), z.lazy(() => DesignTokensSchema)]))\n\nexport const TwClassResultSchema = z.object({\n css: z.string(),\n classes: z.array(z.string()),\n})\n\nexport const TwPluginOptionsSchema = z.object({\n classProcessor: z\n .function({ input: [z.array(z.string())], output: TwClassResultSchema })\n .optional(),\n tokens: DesignTokensSchema.optional(),\n debug: z.boolean().optional(),\n minify: z.boolean().optional(),\n})\n\nexport type TwPluginOptionsInput = z.infer<typeof TwPluginOptionsSchema>\n\nexport const PluginManifestSchema = z.object({\n name: z.string().min(1),\n setup: z.function({ input: [z.unknown()], output: z.unknown() }),\n})\n\nexport type PluginManifestInput = z.infer<typeof PluginManifestSchema>\n\nexport const TransformRegistrationSchema = z.function({ input: [z.unknown()], output: z.unknown() })\n\nexport const TokenRegistrationSchema = z.object({\n name: z.string().min(1),\n value: z.string(),\n})\n\nexport type TokenRegistrationInput = z.infer<typeof TokenRegistrationSchema>\n\nexport const parseTwPluginOptions = (options: unknown) =>\n parseWithSchema(TwPluginOptionsSchema, options ?? {}, \"plugin options are invalid\")\n\nexport const parsePluginManifest = (plugin: unknown) =>\n parseWithSchema(PluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\nexport const parseTokenRegistration = (data: unknown) =>\n parseWithSchema(TokenRegistrationSchema, data, \"token registration is invalid\")\n\n// ── Enhanced plugin validation (dari monorepo checklist) ────────────────────\n\n/** Nama plugin harus mengikuti format npm package */\nexport const PluginNameSchema = z.string()\n .min(1, \"Plugin name cannot be empty\")\n .regex(\n /^(@[a-z0-9-]+\\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,\n \"Plugin name must follow npm naming: lowercase, hyphens allowed, no leading/trailing hyphens\"\n )\n\n/** Versi semantic versioning */\nexport const SemverSchema = z.string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.]+)?$/, \"Version must follow semver: x.y.z or x.y.z-prerelease\")\n\n/** Full plugin manifest dengan validasi nama dan versi */\nexport const FullPluginManifestSchema = PluginManifestSchema.extend({\n name: PluginNameSchema,\n version: SemverSchema.optional(),\n description: z.string().max(200).optional(),\n keywords: z.array(z.string()).max(10).optional(),\n})\n\nexport type FullPluginManifest = z.infer<typeof FullPluginManifestSchema>\n\n/** Validate full plugin manifest */\nexport const parseFullPluginManifest = (plugin: unknown): FullPluginManifest =>\n parseWithSchema(FullPluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\n/** Validate plugin name only */\nexport const validatePluginName = (name: unknown): string =>\n parseWithSchema(PluginNameSchema, name, \"plugin name is invalid\")\n\n/** Zod validation for plugin registration payload */\nexport const PluginRegistrationPayloadSchema = z.object({\n plugin: FullPluginManifestSchema,\n config: z.record(z.string(), z.unknown()).optional(),\n priority: z.number().int().min(0).max(100).optional(),\n})\n\nexport type PluginRegistrationPayload = z.infer<typeof PluginRegistrationPayloadSchema>\n\nexport const parsePluginRegistrationPayload = (payload: unknown): PluginRegistrationPayload =>\n parseWithSchema(PluginRegistrationPayloadSchema, payload, \"plugin registration payload is invalid\")\n","import { parsePluginManifest, parseTokenRegistration, TransformRegistrationSchema } from \"./schemas\"\nimport type { CompoundCondition, TokenMap } from \"@tailwind-styled/shared\"\n\nexport interface TwClassResult {\n css: string\n classes: string[]\n}\n\nexport interface DesignTokens {\n [key: string]: string | number | DesignTokens\n}\n\nexport interface TwPluginOptions {\n classProcessor?: (classes: string[]) => TwClassResult\n tokens?: DesignTokens\n debug?: boolean\n minify?: boolean\n}\n\nexport type VariantResolver = (selector: string) => string\n\nexport interface UtilityDefinition {\n [property: string]: string\n}\n\nexport type { CompoundCondition, TokenMap }\n\nexport interface ComponentConfig {\n base: string\n variants: Record<string, Record<string, string>>\n compoundVariants: Array<{ class: string } & CompoundCondition>\n defaultVariants: Record<string, string>\n}\n\nexport interface TransformMeta {\n componentName: string\n tag: string\n}\n\nexport type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig\n\nexport type CssHook = (css: string) => string\n\nexport interface TwContext {\n addVariant(name: string, resolver: VariantResolver): void\n addUtility(name: string, styles: UtilityDefinition): void\n addToken(name: string, value: string): void\n addTransform(fn: TransformFn): void\n onGenerateCSS(hook: CssHook): void\n onBuildEnd(hook: () => void | Promise<void>): void\n getToken(name: string): string | undefined\n subscribeTokens(callback: (tokens: TokenMap) => void): () => void\n readonly config: Record<string, unknown>\n}\n\nexport interface TwPlugin {\n name: string\n setup(ctx: TwContext): void\n}\n\nexport interface PluginRegistry {\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n transforms: TransformFn[]\n cssHooks: CssHook[]\n buildHooks: Array<() => void | Promise<void>>\n plugins: Set<string>\n}\n\nexport interface TokenEngineAPI {\n getToken?: (name: string) => string | undefined\n getTokens?: () => Record<string, string> | undefined\n subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void\n subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void\n}\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nexport function resolveTokenEngine(): TokenEngineAPI | undefined {\n const engine = (globalThis as Record<string, unknown>)[TOKEN_ENGINE_KEY]\n if (engine && typeof engine === \"object\") {\n return engine as TokenEngineAPI\n }\n return undefined\n}\n\nexport function readToken(engine: TokenEngineAPI | undefined, name: string): string | undefined {\n if (!engine) return undefined\n if (typeof engine.getToken === \"function\") return engine.getToken(name)\n if (typeof engine.getTokens === \"function\") {\n const tokens = engine.getTokens()\n return tokens?.[name]\n }\n return undefined\n}\n\nexport interface TransformContext {\n filename?: string\n componentName?: string\n tag?: string\n}\n\nexport interface TwGlobalRegistry {\n transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>\n tokens: Record<string, string>\n variants: Map<string, VariantResolver>\n}\n\nconst transformRegistry: TwGlobalRegistry = {\n transforms: [],\n tokens: {},\n variants: new Map(),\n}\n\nconst normalizeTokenName = (name: string): string =>\n name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n\nexport function getGlobalRegistry(): TwGlobalRegistry {\n return transformRegistry\n}\n\nexport function registerTransform(\n transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig\n): void {\n TransformRegistrationSchema.parse(transform)\n transformRegistry.transforms.push(transform)\n}\n\nexport function registerToken(name: string, value: string): void {\n const parsed = parseTokenRegistration({ name, value })\n transformRegistry.tokens[parsed.name] = parsed.value\n}\n\nexport function createPluginRegistry(): PluginRegistry {\n return {\n variants: new Map(),\n utilities: new Map(),\n tokens: new Map(),\n transforms: [],\n cssHooks: [],\n buildHooks: [],\n plugins: new Set(),\n }\n}\n\nconst legacyState = { globalRegistry: createPluginRegistry() }\n\nexport function resetGlobalRegistry(): void {\n transformRegistry.transforms.length = 0\n transformRegistry.variants.clear()\n for (const key of Object.keys(transformRegistry.tokens)) {\n delete transformRegistry.tokens[key]\n }\n legacyState.globalRegistry = createPluginRegistry()\n}\n\nexport function createPluginContext(\n registry: PluginRegistry,\n config: Record<string, unknown> = {}\n): TwContext {\n const isLegacyRegistry = registry === legacyState.globalRegistry\n\n return {\n config,\n addVariant(name, resolver) {\n registry.variants.set(name, resolver)\n if (isLegacyRegistry) {\n transformRegistry.variants.set(name, resolver)\n }\n },\n addUtility(name, styles) {\n registry.utilities.set(name, styles)\n },\n addToken(name, value) {\n const parsed = parseTokenRegistration({ name, value })\n const normalized = normalizeTokenName(parsed.name)\n registry.tokens.set(normalized, parsed.value)\n if (isLegacyRegistry) {\n transformRegistry.tokens[normalized] = parsed.value\n }\n },\n addTransform(fn) {\n TransformRegistrationSchema.parse(fn)\n registry.transforms.push(fn)\n if (isLegacyRegistry) {\n transformRegistry.transforms.push((config, ctx) =>\n fn(config, {\n componentName: ctx.componentName ?? \"\",\n tag: ctx.tag ?? \"\",\n })\n )\n }\n },\n onGenerateCSS(hook) {\n registry.cssHooks.push(hook)\n },\n onBuildEnd(hook) {\n registry.buildHooks.push(hook)\n },\n getToken(name) {\n const normalized = normalizeTokenName(name)\n // Check local registry first (populated by addToken), then fallback to token engine\n const local = registry.tokens.get(normalized)\n if (local !== undefined) return local\n return readToken(resolveTokenEngine(), normalized)\n },\n subscribeTokens(callback) {\n const engine = resolveTokenEngine()\n if (!engine) return () => {}\n if (typeof engine.subscribeTokens === \"function\") return engine.subscribeTokens(callback)\n if (typeof engine.subscribe === \"function\") return engine.subscribe(callback)\n return () => {}\n },\n }\n}\n\nexport function createTw(config: Record<string, unknown> = {}): TwContext & {\n registry: {\n plugins: Set<string>\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n }\n use: (plugin: TwPlugin) => void\n} {\n const registry = createPluginRegistry()\n const ctx = createPluginContext(registry, config)\n\n const result = ctx as TwContext & {\n registry: {\n plugins: Set<string>\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n }\n use: (plugin: TwPlugin) => void\n }\n\n result.registry = {\n plugins: registry.plugins,\n variants: registry.variants,\n utilities: registry.utilities,\n tokens: registry.tokens,\n }\n\n result.use = (plugin: TwPlugin) => {\n const manifest = parsePluginManifest(plugin)\n manifest.setup(ctx)\n registry.plugins.add(manifest.name)\n }\n\n if (config.plugins && Array.isArray(config.plugins)) {\n for (const plugin of config.plugins) {\n result.use(parsePluginManifest(plugin))\n }\n }\n\n return result\n}\n\n/**\n * Creates a TwContext that writes through to the global (legacy) registry.\n * Used by createTwPlugin() in the plugin package.\n */\nexport function createGlobalPluginContext(config: Record<string, unknown> = {}): TwContext {\n return createPluginContext(legacyState.globalRegistry, config)\n}\n\nexport function use(plugin: TwPlugin): void {\n const ctx = createPluginContext(legacyState.globalRegistry)\n parsePluginManifest(plugin).setup(ctx)\n}\n\nexport function presetTokens(tokens: Record<string, string>): TwPlugin {\n return {\n name: \"preset-tokens\",\n setup(ctx) {\n for (const [name, value] of Object.entries(tokens)) {\n ctx.addToken(name, value)\n }\n },\n }\n}\n\nexport function presetVariants(variants: Record<string, VariantResolver>): TwPlugin {\n return {\n name: \"preset-variants\",\n setup(ctx) {\n for (const [name, resolver] of Object.entries(variants)) {\n ctx.addVariant(name, resolver)\n }\n },\n }\n}\n\nexport function presetScrollbar(): TwPlugin {\n return {\n name: \"preset-scrollbar\",\n setup(ctx) {\n ctx.addVariant(\"scrollbar-thin\", () => \"::-webkit-scrollbar{width:8px;height:8px}\")\n ctx.addVariant(\"scrollbar-none\", () => \"::-webkit-scrollbar{display:none}\")\n ctx.addUtility(\"scrollbar-hide\", { \"-ms-overflow-style\": \"none\", \"scrollbar-width\": \"none\" })\n },\n }\n}\n\n// Re-export schemas\nexport {\n type PluginManifestInput,\n PluginManifestSchema,\n parsePluginManifest,\n parseTokenRegistration,\n parseTwPluginOptions,\n type TokenRegistrationInput,\n TokenRegistrationSchema,\n TransformRegistrationSchema,\n type TwPluginOptionsInput,\n TwPluginOptionsSchema,\n} from \"./schemas\""]}
|
|
1
|
+
{"version":3,"sources":["../src/umbrella/plugin-api.ts","../packages/domain/plugin-api/src/schemas.ts","../packages/domain/plugin-api/src/index.ts"],"sourcesContent":["export * from \"@tailwind-styled/plugin-api\"\n","import { z } from \"zod\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\n}\n\nexport const DesignTokensSchema: z.ZodType<\n Record<string, string | number | Record<string, unknown>>\n> = z.record(z.string(), z.union([z.string(), z.number(), z.lazy(() => DesignTokensSchema)]))\n\nexport const TwClassResultSchema = z.object({\n css: z.string(),\n classes: z.array(z.string()),\n})\n\nexport const TwPluginOptionsSchema = z.object({\n classProcessor: z\n .function({ input: [z.array(z.string())], output: TwClassResultSchema })\n .optional(),\n tokens: DesignTokensSchema.optional(),\n debug: z.boolean().optional(),\n minify: z.boolean().optional(),\n})\n\nexport type TwPluginOptionsInput = z.infer<typeof TwPluginOptionsSchema>\n\nexport const PluginManifestSchema = z.object({\n name: z.string().min(1),\n setup: z.function({ input: [z.unknown()], output: z.unknown() }),\n})\n\nexport type PluginManifestInput = z.infer<typeof PluginManifestSchema>\n\nexport const TransformRegistrationSchema = z.function({ input: [z.unknown()], output: z.unknown() })\n\nexport const TokenRegistrationSchema = z.object({\n name: z.string().min(1),\n value: z.string(),\n})\n\nexport type TokenRegistrationInput = z.infer<typeof TokenRegistrationSchema>\n\nexport const parseTwPluginOptions = (options: unknown) =>\n parseWithSchema(TwPluginOptionsSchema, options ?? {}, \"plugin options are invalid\")\n\nexport const parsePluginManifest = (plugin: unknown) =>\n parseWithSchema(PluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\nexport const parseTokenRegistration = (data: unknown) =>\n parseWithSchema(TokenRegistrationSchema, data, \"token registration is invalid\")\n\n// ── Enhanced plugin validation (dari monorepo checklist) ────────────────────\n\n/** Nama plugin harus mengikuti format npm package */\nexport const PluginNameSchema = z.string()\n .min(1, \"Plugin name cannot be empty\")\n .regex(\n /^(@[a-z0-9-]+\\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,\n \"Plugin name must follow npm naming: lowercase, hyphens allowed, no leading/trailing hyphens\"\n )\n\n/** Versi semantic versioning */\nexport const SemverSchema = z.string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.]+)?$/, \"Version must follow semver: x.y.z or x.y.z-prerelease\")\n\n/** Full plugin manifest dengan validasi nama dan versi */\nexport const FullPluginManifestSchema = PluginManifestSchema.extend({\n name: PluginNameSchema,\n version: SemverSchema.optional(),\n description: z.string().max(200).optional(),\n keywords: z.array(z.string()).max(10).optional(),\n})\n\nexport type FullPluginManifest = z.infer<typeof FullPluginManifestSchema>\n\n/** Validate full plugin manifest */\nexport const parseFullPluginManifest = (plugin: unknown): FullPluginManifest =>\n parseWithSchema(FullPluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\n/** Validate plugin name only */\nexport const validatePluginName = (name: unknown): string =>\n parseWithSchema(PluginNameSchema, name, \"plugin name is invalid\")\n\n/** Zod validation for plugin registration payload */\nexport const PluginRegistrationPayloadSchema = z.object({\n plugin: FullPluginManifestSchema,\n config: z.record(z.string(), z.unknown()).optional(),\n priority: z.number().int().min(0).max(100).optional(),\n})\n\nexport type PluginRegistrationPayload = z.infer<typeof PluginRegistrationPayloadSchema>\n\nexport const parsePluginRegistrationPayload = (payload: unknown): PluginRegistrationPayload =>\n parseWithSchema(PluginRegistrationPayloadSchema, payload, \"plugin registration payload is invalid\")\n","import { parsePluginManifest, parseTokenRegistration, TransformRegistrationSchema } from \"./schemas\"\nimport type { CompoundCondition, TokenMap } from \"@tailwind-styled/shared\"\n\nexport interface TwClassResult {\n css: string\n classes: string[]\n}\n\nexport interface DesignTokens {\n [key: string]: string | number | DesignTokens\n}\n\nexport interface TwPluginOptions {\n classProcessor?: (classes: string[]) => TwClassResult\n tokens?: DesignTokens\n debug?: boolean\n minify?: boolean\n}\n\nexport type VariantResolver = (selector: string) => string\n\nexport interface UtilityDefinition {\n [property: string]: string\n}\n\nexport type { CompoundCondition, TokenMap }\n\nexport interface ComponentConfig {\n base: string\n variants: Record<string, Record<string, string>>\n compoundVariants: Array<{ class: string } & CompoundCondition>\n defaultVariants: Record<string, string>\n}\n\nexport interface TransformMeta {\n componentName: string\n tag: string\n}\n\nexport type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig\n\nexport type CssHook = (css: string) => string\n\nexport interface TwContext {\n addVariant(name: string, resolver: VariantResolver): void\n addUtility(name: string, styles: UtilityDefinition): void\n addToken(name: string, value: string): void\n addTransform(fn: TransformFn): void\n onGenerateCSS(hook: CssHook): void\n onBuildEnd(hook: () => void | Promise<void>): void\n getToken(name: string): string | undefined\n subscribeTokens(callback: (tokens: TokenMap) => void): () => void\n readonly config: Record<string, unknown>\n}\n\nexport interface TwPlugin {\n name: string\n setup(ctx: TwContext): void\n}\n\nexport interface PluginRegistry {\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n transforms: TransformFn[]\n cssHooks: CssHook[]\n buildHooks: Array<() => void | Promise<void>>\n plugins: Set<string>\n}\n\nexport interface TokenEngineAPI {\n getToken?: (name: string) => string | undefined\n getTokens?: () => Record<string, string> | undefined\n subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void\n subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void\n}\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nexport function resolveTokenEngine(): TokenEngineAPI | undefined {\n const engine = (globalThis as Record<string, unknown>)[TOKEN_ENGINE_KEY]\n if (engine && typeof engine === \"object\") {\n return engine as TokenEngineAPI\n }\n return undefined\n}\n\nexport function readToken(engine: TokenEngineAPI | undefined, name: string): string | undefined {\n if (!engine) return undefined\n if (typeof engine.getToken === \"function\") return engine.getToken(name)\n if (typeof engine.getTokens === \"function\") {\n const tokens = engine.getTokens()\n return tokens?.[name]\n }\n return undefined\n}\n\nexport interface TransformContext {\n filename?: string\n componentName?: string\n tag?: string\n}\n\nexport interface TwGlobalRegistry {\n transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>\n tokens: Record<string, string>\n variants: Map<string, VariantResolver>\n}\n\nconst transformRegistry: TwGlobalRegistry = {\n transforms: [],\n tokens: {},\n variants: new Map(),\n}\n\nconst normalizeTokenName = (name: string): string =>\n name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n\nexport function getGlobalRegistry(): TwGlobalRegistry {\n return transformRegistry\n}\n\nexport function registerTransform(\n transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig\n): void {\n TransformRegistrationSchema.parse(transform)\n transformRegistry.transforms.push(transform)\n}\n\nexport function registerToken(name: string, value: string): void {\n const parsed = parseTokenRegistration({ name, value })\n transformRegistry.tokens[parsed.name] = parsed.value\n}\n\nexport function createPluginRegistry(): PluginRegistry {\n return {\n variants: new Map(),\n utilities: new Map(),\n tokens: new Map(),\n transforms: [],\n cssHooks: [],\n buildHooks: [],\n plugins: new Set(),\n }\n}\n\nconst legacyState = { globalRegistry: createPluginRegistry() }\n\nexport function resetGlobalRegistry(): void {\n transformRegistry.transforms.length = 0\n transformRegistry.variants.clear()\n for (const key of Object.keys(transformRegistry.tokens)) {\n delete transformRegistry.tokens[key]\n }\n legacyState.globalRegistry = createPluginRegistry()\n}\n\nexport function createPluginContext(\n registry: PluginRegistry,\n config: Record<string, unknown> = {}\n): TwContext {\n const isLegacyRegistry = registry === legacyState.globalRegistry\n\n return {\n config,\n addVariant(name, resolver) {\n registry.variants.set(name, resolver)\n if (isLegacyRegistry) {\n transformRegistry.variants.set(name, resolver)\n }\n },\n addUtility(name, styles) {\n registry.utilities.set(name, styles)\n },\n addToken(name, value) {\n const parsed = parseTokenRegistration({ name, value })\n const normalized = normalizeTokenName(parsed.name)\n registry.tokens.set(normalized, parsed.value)\n if (isLegacyRegistry) {\n transformRegistry.tokens[normalized] = parsed.value\n }\n },\n addTransform(fn) {\n TransformRegistrationSchema.parse(fn)\n registry.transforms.push(fn)\n if (isLegacyRegistry) {\n transformRegistry.transforms.push((config, ctx) =>\n fn(config, {\n componentName: ctx.componentName ?? \"\",\n tag: ctx.tag ?? \"\",\n })\n )\n }\n },\n onGenerateCSS(hook) {\n registry.cssHooks.push(hook)\n },\n onBuildEnd(hook) {\n registry.buildHooks.push(hook)\n },\n getToken(name) {\n const normalized = normalizeTokenName(name)\n // Check local registry first (populated by addToken), then fallback to token engine\n const local = registry.tokens.get(normalized)\n if (local !== undefined) return local\n return readToken(resolveTokenEngine(), normalized)\n },\n subscribeTokens(callback) {\n const engine = resolveTokenEngine()\n if (!engine) return () => {}\n if (typeof engine.subscribeTokens === \"function\") return engine.subscribeTokens(callback)\n if (typeof engine.subscribe === \"function\") return engine.subscribe(callback)\n return () => {}\n },\n }\n}\n\nexport function createTw(config: Record<string, unknown> = {}): TwContext & {\n registry: {\n plugins: Set<string>\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n }\n use: (plugin: TwPlugin) => void\n} {\n const registry = createPluginRegistry()\n const ctx = createPluginContext(registry, config)\n\n const result = ctx as TwContext & {\n registry: {\n plugins: Set<string>\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n }\n use: (plugin: TwPlugin) => void\n }\n\n result.registry = {\n plugins: registry.plugins,\n variants: registry.variants,\n utilities: registry.utilities,\n tokens: registry.tokens,\n }\n\n result.use = (plugin: TwPlugin) => {\n const manifest = parsePluginManifest(plugin)\n manifest.setup(ctx)\n registry.plugins.add(manifest.name)\n }\n\n if (config.plugins && Array.isArray(config.plugins)) {\n for (const plugin of config.plugins) {\n result.use(parsePluginManifest(plugin))\n }\n }\n\n return result\n}\n\n/**\n * Creates a TwContext that writes through to the global (legacy) registry.\n * Used by createTwPlugin() in the plugin package.\n */\nexport function createGlobalPluginContext(config: Record<string, unknown> = {}): TwContext {\n return createPluginContext(legacyState.globalRegistry, config)\n}\n\nexport function use(plugin: TwPlugin): void {\n const ctx = createPluginContext(legacyState.globalRegistry)\n parsePluginManifest(plugin).setup(ctx)\n}\n\nexport function presetTokens(tokens: Record<string, string>): TwPlugin {\n return {\n name: \"preset-tokens\",\n setup(ctx) {\n for (const [name, value] of Object.entries(tokens)) {\n ctx.addToken(name, value)\n }\n },\n }\n}\n\nexport function presetVariants(variants: Record<string, VariantResolver>): TwPlugin {\n return {\n name: \"preset-variants\",\n setup(ctx) {\n for (const [name, resolver] of Object.entries(variants)) {\n ctx.addVariant(name, resolver)\n }\n },\n }\n}\n\nexport function presetScrollbar(): TwPlugin {\n return {\n name: \"preset-scrollbar\",\n setup(ctx) {\n ctx.addVariant(\"scrollbar-thin\", () => \"::-webkit-scrollbar{width:8px;height:8px}\")\n ctx.addVariant(\"scrollbar-none\", () => \"::-webkit-scrollbar{display:none}\")\n ctx.addUtility(\"scrollbar-hide\", { \"-ms-overflow-style\": \"none\", \"scrollbar-width\": \"none\" })\n },\n }\n}\n\n// Re-export schemas\nexport {\n type PluginManifestInput,\n PluginManifestSchema,\n parsePluginManifest,\n parseTokenRegistration,\n parseTwPluginOptions,\n type TokenRegistrationInput,\n TokenRegistrationSchema,\n TransformRegistrationSchema,\n type TwPluginOptionsInput,\n TwPluginOptionsSchema,\n} from \"./schemas\""],"mappings":"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","names":["config"]}
|
package/dist/plugin-api.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
|
|
3
1
|
/* tailwind-styled-v4 v5.0.4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
4
2
|
|
|
3
|
+
// packages/domain/plugin-api/src/schemas.ts
|
|
4
|
+
import { z } from "zod";
|
|
5
5
|
var formatIssues = (error) => error.issues.map((issue) => {
|
|
6
6
|
const p = issue.path.length > 0 ? issue.path.join(".") : "<root>";
|
|
7
7
|
return `${p}: ${issue.message}`;
|
|
@@ -45,7 +45,7 @@ var FullPluginManifestSchema = PluginManifestSchema.extend({
|
|
|
45
45
|
description: z.string().max(200).optional(),
|
|
46
46
|
keywords: z.array(z.string()).max(10).optional()
|
|
47
47
|
});
|
|
48
|
-
z.object({
|
|
48
|
+
var PluginRegistrationPayloadSchema = z.object({
|
|
49
49
|
plugin: FullPluginManifestSchema,
|
|
50
50
|
config: z.record(z.string(), z.unknown()).optional(),
|
|
51
51
|
priority: z.number().int().min(0).max(100).optional()
|
|
@@ -221,7 +221,27 @@ function presetScrollbar() {
|
|
|
221
221
|
}
|
|
222
222
|
};
|
|
223
223
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
224
|
+
export {
|
|
225
|
+
PluginManifestSchema,
|
|
226
|
+
TokenRegistrationSchema,
|
|
227
|
+
TransformRegistrationSchema,
|
|
228
|
+
TwPluginOptionsSchema,
|
|
229
|
+
createGlobalPluginContext,
|
|
230
|
+
createPluginContext,
|
|
231
|
+
createPluginRegistry,
|
|
232
|
+
createTw,
|
|
233
|
+
getGlobalRegistry,
|
|
234
|
+
parsePluginManifest,
|
|
235
|
+
parseTokenRegistration,
|
|
236
|
+
parseTwPluginOptions,
|
|
237
|
+
presetScrollbar,
|
|
238
|
+
presetTokens,
|
|
239
|
+
presetVariants,
|
|
240
|
+
readToken,
|
|
241
|
+
registerToken,
|
|
242
|
+
registerTransform,
|
|
243
|
+
resetGlobalRegistry,
|
|
244
|
+
resolveTokenEngine,
|
|
245
|
+
use
|
|
246
|
+
};
|
|
227
247
|
//# sourceMappingURL=plugin-api.mjs.map
|
package/dist/plugin-api.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/domain/plugin-api/src/schemas.ts","../packages/domain/plugin-api/src/index.ts"],"names":["config"],"mappings":"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","file":"plugin-api.mjs","sourcesContent":["import { z } from \"zod\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\n}\n\nexport const DesignTokensSchema: z.ZodType<\n Record<string, string | number | Record<string, unknown>>\n> = z.record(z.string(), z.union([z.string(), z.number(), z.lazy(() => DesignTokensSchema)]))\n\nexport const TwClassResultSchema = z.object({\n css: z.string(),\n classes: z.array(z.string()),\n})\n\nexport const TwPluginOptionsSchema = z.object({\n classProcessor: z\n .function({ input: [z.array(z.string())], output: TwClassResultSchema })\n .optional(),\n tokens: DesignTokensSchema.optional(),\n debug: z.boolean().optional(),\n minify: z.boolean().optional(),\n})\n\nexport type TwPluginOptionsInput = z.infer<typeof TwPluginOptionsSchema>\n\nexport const PluginManifestSchema = z.object({\n name: z.string().min(1),\n setup: z.function({ input: [z.unknown()], output: z.unknown() }),\n})\n\nexport type PluginManifestInput = z.infer<typeof PluginManifestSchema>\n\nexport const TransformRegistrationSchema = z.function({ input: [z.unknown()], output: z.unknown() })\n\nexport const TokenRegistrationSchema = z.object({\n name: z.string().min(1),\n value: z.string(),\n})\n\nexport type TokenRegistrationInput = z.infer<typeof TokenRegistrationSchema>\n\nexport const parseTwPluginOptions = (options: unknown) =>\n parseWithSchema(TwPluginOptionsSchema, options ?? {}, \"plugin options are invalid\")\n\nexport const parsePluginManifest = (plugin: unknown) =>\n parseWithSchema(PluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\nexport const parseTokenRegistration = (data: unknown) =>\n parseWithSchema(TokenRegistrationSchema, data, \"token registration is invalid\")\n\n// ── Enhanced plugin validation (dari monorepo checklist) ────────────────────\n\n/** Nama plugin harus mengikuti format npm package */\nexport const PluginNameSchema = z.string()\n .min(1, \"Plugin name cannot be empty\")\n .regex(\n /^(@[a-z0-9-]+\\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,\n \"Plugin name must follow npm naming: lowercase, hyphens allowed, no leading/trailing hyphens\"\n )\n\n/** Versi semantic versioning */\nexport const SemverSchema = z.string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.]+)?$/, \"Version must follow semver: x.y.z or x.y.z-prerelease\")\n\n/** Full plugin manifest dengan validasi nama dan versi */\nexport const FullPluginManifestSchema = PluginManifestSchema.extend({\n name: PluginNameSchema,\n version: SemverSchema.optional(),\n description: z.string().max(200).optional(),\n keywords: z.array(z.string()).max(10).optional(),\n})\n\nexport type FullPluginManifest = z.infer<typeof FullPluginManifestSchema>\n\n/** Validate full plugin manifest */\nexport const parseFullPluginManifest = (plugin: unknown): FullPluginManifest =>\n parseWithSchema(FullPluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\n/** Validate plugin name only */\nexport const validatePluginName = (name: unknown): string =>\n parseWithSchema(PluginNameSchema, name, \"plugin name is invalid\")\n\n/** Zod validation for plugin registration payload */\nexport const PluginRegistrationPayloadSchema = z.object({\n plugin: FullPluginManifestSchema,\n config: z.record(z.string(), z.unknown()).optional(),\n priority: z.number().int().min(0).max(100).optional(),\n})\n\nexport type PluginRegistrationPayload = z.infer<typeof PluginRegistrationPayloadSchema>\n\nexport const parsePluginRegistrationPayload = (payload: unknown): PluginRegistrationPayload =>\n parseWithSchema(PluginRegistrationPayloadSchema, payload, \"plugin registration payload is invalid\")\n","import { parsePluginManifest, parseTokenRegistration, TransformRegistrationSchema } from \"./schemas\"\nimport type { CompoundCondition, TokenMap } from \"@tailwind-styled/shared\"\n\nexport interface TwClassResult {\n css: string\n classes: string[]\n}\n\nexport interface DesignTokens {\n [key: string]: string | number | DesignTokens\n}\n\nexport interface TwPluginOptions {\n classProcessor?: (classes: string[]) => TwClassResult\n tokens?: DesignTokens\n debug?: boolean\n minify?: boolean\n}\n\nexport type VariantResolver = (selector: string) => string\n\nexport interface UtilityDefinition {\n [property: string]: string\n}\n\nexport type { CompoundCondition, TokenMap }\n\nexport interface ComponentConfig {\n base: string\n variants: Record<string, Record<string, string>>\n compoundVariants: Array<{ class: string } & CompoundCondition>\n defaultVariants: Record<string, string>\n}\n\nexport interface TransformMeta {\n componentName: string\n tag: string\n}\n\nexport type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig\n\nexport type CssHook = (css: string) => string\n\nexport interface TwContext {\n addVariant(name: string, resolver: VariantResolver): void\n addUtility(name: string, styles: UtilityDefinition): void\n addToken(name: string, value: string): void\n addTransform(fn: TransformFn): void\n onGenerateCSS(hook: CssHook): void\n onBuildEnd(hook: () => void | Promise<void>): void\n getToken(name: string): string | undefined\n subscribeTokens(callback: (tokens: TokenMap) => void): () => void\n readonly config: Record<string, unknown>\n}\n\nexport interface TwPlugin {\n name: string\n setup(ctx: TwContext): void\n}\n\nexport interface PluginRegistry {\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n transforms: TransformFn[]\n cssHooks: CssHook[]\n buildHooks: Array<() => void | Promise<void>>\n plugins: Set<string>\n}\n\nexport interface TokenEngineAPI {\n getToken?: (name: string) => string | undefined\n getTokens?: () => Record<string, string> | undefined\n subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void\n subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void\n}\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nexport function resolveTokenEngine(): TokenEngineAPI | undefined {\n const engine = (globalThis as Record<string, unknown>)[TOKEN_ENGINE_KEY]\n if (engine && typeof engine === \"object\") {\n return engine as TokenEngineAPI\n }\n return undefined\n}\n\nexport function readToken(engine: TokenEngineAPI | undefined, name: string): string | undefined {\n if (!engine) return undefined\n if (typeof engine.getToken === \"function\") return engine.getToken(name)\n if (typeof engine.getTokens === \"function\") {\n const tokens = engine.getTokens()\n return tokens?.[name]\n }\n return undefined\n}\n\nexport interface TransformContext {\n filename?: string\n componentName?: string\n tag?: string\n}\n\nexport interface TwGlobalRegistry {\n transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>\n tokens: Record<string, string>\n variants: Map<string, VariantResolver>\n}\n\nconst transformRegistry: TwGlobalRegistry = {\n transforms: [],\n tokens: {},\n variants: new Map(),\n}\n\nconst normalizeTokenName = (name: string): string =>\n name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n\nexport function getGlobalRegistry(): TwGlobalRegistry {\n return transformRegistry\n}\n\nexport function registerTransform(\n transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig\n): void {\n TransformRegistrationSchema.parse(transform)\n transformRegistry.transforms.push(transform)\n}\n\nexport function registerToken(name: string, value: string): void {\n const parsed = parseTokenRegistration({ name, value })\n transformRegistry.tokens[parsed.name] = parsed.value\n}\n\nexport function createPluginRegistry(): PluginRegistry {\n return {\n variants: new Map(),\n utilities: new Map(),\n tokens: new Map(),\n transforms: [],\n cssHooks: [],\n buildHooks: [],\n plugins: new Set(),\n }\n}\n\nconst legacyState = { globalRegistry: createPluginRegistry() }\n\nexport function resetGlobalRegistry(): void {\n transformRegistry.transforms.length = 0\n transformRegistry.variants.clear()\n for (const key of Object.keys(transformRegistry.tokens)) {\n delete transformRegistry.tokens[key]\n }\n legacyState.globalRegistry = createPluginRegistry()\n}\n\nexport function createPluginContext(\n registry: PluginRegistry,\n config: Record<string, unknown> = {}\n): TwContext {\n const isLegacyRegistry = registry === legacyState.globalRegistry\n\n return {\n config,\n addVariant(name, resolver) {\n registry.variants.set(name, resolver)\n if (isLegacyRegistry) {\n transformRegistry.variants.set(name, resolver)\n }\n },\n addUtility(name, styles) {\n registry.utilities.set(name, styles)\n },\n addToken(name, value) {\n const parsed = parseTokenRegistration({ name, value })\n const normalized = normalizeTokenName(parsed.name)\n registry.tokens.set(normalized, parsed.value)\n if (isLegacyRegistry) {\n transformRegistry.tokens[normalized] = parsed.value\n }\n },\n addTransform(fn) {\n TransformRegistrationSchema.parse(fn)\n registry.transforms.push(fn)\n if (isLegacyRegistry) {\n transformRegistry.transforms.push((config, ctx) =>\n fn(config, {\n componentName: ctx.componentName ?? \"\",\n tag: ctx.tag ?? \"\",\n })\n )\n }\n },\n onGenerateCSS(hook) {\n registry.cssHooks.push(hook)\n },\n onBuildEnd(hook) {\n registry.buildHooks.push(hook)\n },\n getToken(name) {\n const normalized = normalizeTokenName(name)\n // Check local registry first (populated by addToken), then fallback to token engine\n const local = registry.tokens.get(normalized)\n if (local !== undefined) return local\n return readToken(resolveTokenEngine(), normalized)\n },\n subscribeTokens(callback) {\n const engine = resolveTokenEngine()\n if (!engine) return () => {}\n if (typeof engine.subscribeTokens === \"function\") return engine.subscribeTokens(callback)\n if (typeof engine.subscribe === \"function\") return engine.subscribe(callback)\n return () => {}\n },\n }\n}\n\nexport function createTw(config: Record<string, unknown> = {}): TwContext & {\n registry: {\n plugins: Set<string>\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n }\n use: (plugin: TwPlugin) => void\n} {\n const registry = createPluginRegistry()\n const ctx = createPluginContext(registry, config)\n\n const result = ctx as TwContext & {\n registry: {\n plugins: Set<string>\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n }\n use: (plugin: TwPlugin) => void\n }\n\n result.registry = {\n plugins: registry.plugins,\n variants: registry.variants,\n utilities: registry.utilities,\n tokens: registry.tokens,\n }\n\n result.use = (plugin: TwPlugin) => {\n const manifest = parsePluginManifest(plugin)\n manifest.setup(ctx)\n registry.plugins.add(manifest.name)\n }\n\n if (config.plugins && Array.isArray(config.plugins)) {\n for (const plugin of config.plugins) {\n result.use(parsePluginManifest(plugin))\n }\n }\n\n return result\n}\n\n/**\n * Creates a TwContext that writes through to the global (legacy) registry.\n * Used by createTwPlugin() in the plugin package.\n */\nexport function createGlobalPluginContext(config: Record<string, unknown> = {}): TwContext {\n return createPluginContext(legacyState.globalRegistry, config)\n}\n\nexport function use(plugin: TwPlugin): void {\n const ctx = createPluginContext(legacyState.globalRegistry)\n parsePluginManifest(plugin).setup(ctx)\n}\n\nexport function presetTokens(tokens: Record<string, string>): TwPlugin {\n return {\n name: \"preset-tokens\",\n setup(ctx) {\n for (const [name, value] of Object.entries(tokens)) {\n ctx.addToken(name, value)\n }\n },\n }\n}\n\nexport function presetVariants(variants: Record<string, VariantResolver>): TwPlugin {\n return {\n name: \"preset-variants\",\n setup(ctx) {\n for (const [name, resolver] of Object.entries(variants)) {\n ctx.addVariant(name, resolver)\n }\n },\n }\n}\n\nexport function presetScrollbar(): TwPlugin {\n return {\n name: \"preset-scrollbar\",\n setup(ctx) {\n ctx.addVariant(\"scrollbar-thin\", () => \"::-webkit-scrollbar{width:8px;height:8px}\")\n ctx.addVariant(\"scrollbar-none\", () => \"::-webkit-scrollbar{display:none}\")\n ctx.addUtility(\"scrollbar-hide\", { \"-ms-overflow-style\": \"none\", \"scrollbar-width\": \"none\" })\n },\n }\n}\n\n// Re-export schemas\nexport {\n type PluginManifestInput,\n PluginManifestSchema,\n parsePluginManifest,\n parseTokenRegistration,\n parseTwPluginOptions,\n type TokenRegistrationInput,\n TokenRegistrationSchema,\n TransformRegistrationSchema,\n type TwPluginOptionsInput,\n TwPluginOptionsSchema,\n} from \"./schemas\""]}
|
|
1
|
+
{"version":3,"sources":["../packages/domain/plugin-api/src/schemas.ts","../packages/domain/plugin-api/src/index.ts"],"sourcesContent":["import { z } from \"zod\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\n}\n\nexport const DesignTokensSchema: z.ZodType<\n Record<string, string | number | Record<string, unknown>>\n> = z.record(z.string(), z.union([z.string(), z.number(), z.lazy(() => DesignTokensSchema)]))\n\nexport const TwClassResultSchema = z.object({\n css: z.string(),\n classes: z.array(z.string()),\n})\n\nexport const TwPluginOptionsSchema = z.object({\n classProcessor: z\n .function({ input: [z.array(z.string())], output: TwClassResultSchema })\n .optional(),\n tokens: DesignTokensSchema.optional(),\n debug: z.boolean().optional(),\n minify: z.boolean().optional(),\n})\n\nexport type TwPluginOptionsInput = z.infer<typeof TwPluginOptionsSchema>\n\nexport const PluginManifestSchema = z.object({\n name: z.string().min(1),\n setup: z.function({ input: [z.unknown()], output: z.unknown() }),\n})\n\nexport type PluginManifestInput = z.infer<typeof PluginManifestSchema>\n\nexport const TransformRegistrationSchema = z.function({ input: [z.unknown()], output: z.unknown() })\n\nexport const TokenRegistrationSchema = z.object({\n name: z.string().min(1),\n value: z.string(),\n})\n\nexport type TokenRegistrationInput = z.infer<typeof TokenRegistrationSchema>\n\nexport const parseTwPluginOptions = (options: unknown) =>\n parseWithSchema(TwPluginOptionsSchema, options ?? {}, \"plugin options are invalid\")\n\nexport const parsePluginManifest = (plugin: unknown) =>\n parseWithSchema(PluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\nexport const parseTokenRegistration = (data: unknown) =>\n parseWithSchema(TokenRegistrationSchema, data, \"token registration is invalid\")\n\n// ── Enhanced plugin validation (dari monorepo checklist) ────────────────────\n\n/** Nama plugin harus mengikuti format npm package */\nexport const PluginNameSchema = z.string()\n .min(1, \"Plugin name cannot be empty\")\n .regex(\n /^(@[a-z0-9-]+\\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,\n \"Plugin name must follow npm naming: lowercase, hyphens allowed, no leading/trailing hyphens\"\n )\n\n/** Versi semantic versioning */\nexport const SemverSchema = z.string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.]+)?$/, \"Version must follow semver: x.y.z or x.y.z-prerelease\")\n\n/** Full plugin manifest dengan validasi nama dan versi */\nexport const FullPluginManifestSchema = PluginManifestSchema.extend({\n name: PluginNameSchema,\n version: SemverSchema.optional(),\n description: z.string().max(200).optional(),\n keywords: z.array(z.string()).max(10).optional(),\n})\n\nexport type FullPluginManifest = z.infer<typeof FullPluginManifestSchema>\n\n/** Validate full plugin manifest */\nexport const parseFullPluginManifest = (plugin: unknown): FullPluginManifest =>\n parseWithSchema(FullPluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\n/** Validate plugin name only */\nexport const validatePluginName = (name: unknown): string =>\n parseWithSchema(PluginNameSchema, name, \"plugin name is invalid\")\n\n/** Zod validation for plugin registration payload */\nexport const PluginRegistrationPayloadSchema = z.object({\n plugin: FullPluginManifestSchema,\n config: z.record(z.string(), z.unknown()).optional(),\n priority: z.number().int().min(0).max(100).optional(),\n})\n\nexport type PluginRegistrationPayload = z.infer<typeof PluginRegistrationPayloadSchema>\n\nexport const parsePluginRegistrationPayload = (payload: unknown): PluginRegistrationPayload =>\n parseWithSchema(PluginRegistrationPayloadSchema, payload, \"plugin registration payload is invalid\")\n","import { parsePluginManifest, parseTokenRegistration, TransformRegistrationSchema } from \"./schemas\"\nimport type { CompoundCondition, TokenMap } from \"@tailwind-styled/shared\"\n\nexport interface TwClassResult {\n css: string\n classes: string[]\n}\n\nexport interface DesignTokens {\n [key: string]: string | number | DesignTokens\n}\n\nexport interface TwPluginOptions {\n classProcessor?: (classes: string[]) => TwClassResult\n tokens?: DesignTokens\n debug?: boolean\n minify?: boolean\n}\n\nexport type VariantResolver = (selector: string) => string\n\nexport interface UtilityDefinition {\n [property: string]: string\n}\n\nexport type { CompoundCondition, TokenMap }\n\nexport interface ComponentConfig {\n base: string\n variants: Record<string, Record<string, string>>\n compoundVariants: Array<{ class: string } & CompoundCondition>\n defaultVariants: Record<string, string>\n}\n\nexport interface TransformMeta {\n componentName: string\n tag: string\n}\n\nexport type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig\n\nexport type CssHook = (css: string) => string\n\nexport interface TwContext {\n addVariant(name: string, resolver: VariantResolver): void\n addUtility(name: string, styles: UtilityDefinition): void\n addToken(name: string, value: string): void\n addTransform(fn: TransformFn): void\n onGenerateCSS(hook: CssHook): void\n onBuildEnd(hook: () => void | Promise<void>): void\n getToken(name: string): string | undefined\n subscribeTokens(callback: (tokens: TokenMap) => void): () => void\n readonly config: Record<string, unknown>\n}\n\nexport interface TwPlugin {\n name: string\n setup(ctx: TwContext): void\n}\n\nexport interface PluginRegistry {\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n transforms: TransformFn[]\n cssHooks: CssHook[]\n buildHooks: Array<() => void | Promise<void>>\n plugins: Set<string>\n}\n\nexport interface TokenEngineAPI {\n getToken?: (name: string) => string | undefined\n getTokens?: () => Record<string, string> | undefined\n subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void\n subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void\n}\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nexport function resolveTokenEngine(): TokenEngineAPI | undefined {\n const engine = (globalThis as Record<string, unknown>)[TOKEN_ENGINE_KEY]\n if (engine && typeof engine === \"object\") {\n return engine as TokenEngineAPI\n }\n return undefined\n}\n\nexport function readToken(engine: TokenEngineAPI | undefined, name: string): string | undefined {\n if (!engine) return undefined\n if (typeof engine.getToken === \"function\") return engine.getToken(name)\n if (typeof engine.getTokens === \"function\") {\n const tokens = engine.getTokens()\n return tokens?.[name]\n }\n return undefined\n}\n\nexport interface TransformContext {\n filename?: string\n componentName?: string\n tag?: string\n}\n\nexport interface TwGlobalRegistry {\n transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>\n tokens: Record<string, string>\n variants: Map<string, VariantResolver>\n}\n\nconst transformRegistry: TwGlobalRegistry = {\n transforms: [],\n tokens: {},\n variants: new Map(),\n}\n\nconst normalizeTokenName = (name: string): string =>\n name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n\nexport function getGlobalRegistry(): TwGlobalRegistry {\n return transformRegistry\n}\n\nexport function registerTransform(\n transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig\n): void {\n TransformRegistrationSchema.parse(transform)\n transformRegistry.transforms.push(transform)\n}\n\nexport function registerToken(name: string, value: string): void {\n const parsed = parseTokenRegistration({ name, value })\n transformRegistry.tokens[parsed.name] = parsed.value\n}\n\nexport function createPluginRegistry(): PluginRegistry {\n return {\n variants: new Map(),\n utilities: new Map(),\n tokens: new Map(),\n transforms: [],\n cssHooks: [],\n buildHooks: [],\n plugins: new Set(),\n }\n}\n\nconst legacyState = { globalRegistry: createPluginRegistry() }\n\nexport function resetGlobalRegistry(): void {\n transformRegistry.transforms.length = 0\n transformRegistry.variants.clear()\n for (const key of Object.keys(transformRegistry.tokens)) {\n delete transformRegistry.tokens[key]\n }\n legacyState.globalRegistry = createPluginRegistry()\n}\n\nexport function createPluginContext(\n registry: PluginRegistry,\n config: Record<string, unknown> = {}\n): TwContext {\n const isLegacyRegistry = registry === legacyState.globalRegistry\n\n return {\n config,\n addVariant(name, resolver) {\n registry.variants.set(name, resolver)\n if (isLegacyRegistry) {\n transformRegistry.variants.set(name, resolver)\n }\n },\n addUtility(name, styles) {\n registry.utilities.set(name, styles)\n },\n addToken(name, value) {\n const parsed = parseTokenRegistration({ name, value })\n const normalized = normalizeTokenName(parsed.name)\n registry.tokens.set(normalized, parsed.value)\n if (isLegacyRegistry) {\n transformRegistry.tokens[normalized] = parsed.value\n }\n },\n addTransform(fn) {\n TransformRegistrationSchema.parse(fn)\n registry.transforms.push(fn)\n if (isLegacyRegistry) {\n transformRegistry.transforms.push((config, ctx) =>\n fn(config, {\n componentName: ctx.componentName ?? \"\",\n tag: ctx.tag ?? \"\",\n })\n )\n }\n },\n onGenerateCSS(hook) {\n registry.cssHooks.push(hook)\n },\n onBuildEnd(hook) {\n registry.buildHooks.push(hook)\n },\n getToken(name) {\n const normalized = normalizeTokenName(name)\n // Check local registry first (populated by addToken), then fallback to token engine\n const local = registry.tokens.get(normalized)\n if (local !== undefined) return local\n return readToken(resolveTokenEngine(), normalized)\n },\n subscribeTokens(callback) {\n const engine = resolveTokenEngine()\n if (!engine) return () => {}\n if (typeof engine.subscribeTokens === \"function\") return engine.subscribeTokens(callback)\n if (typeof engine.subscribe === \"function\") return engine.subscribe(callback)\n return () => {}\n },\n }\n}\n\nexport function createTw(config: Record<string, unknown> = {}): TwContext & {\n registry: {\n plugins: Set<string>\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n }\n use: (plugin: TwPlugin) => void\n} {\n const registry = createPluginRegistry()\n const ctx = createPluginContext(registry, config)\n\n const result = ctx as TwContext & {\n registry: {\n plugins: Set<string>\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n }\n use: (plugin: TwPlugin) => void\n }\n\n result.registry = {\n plugins: registry.plugins,\n variants: registry.variants,\n utilities: registry.utilities,\n tokens: registry.tokens,\n }\n\n result.use = (plugin: TwPlugin) => {\n const manifest = parsePluginManifest(plugin)\n manifest.setup(ctx)\n registry.plugins.add(manifest.name)\n }\n\n if (config.plugins && Array.isArray(config.plugins)) {\n for (const plugin of config.plugins) {\n result.use(parsePluginManifest(plugin))\n }\n }\n\n return result\n}\n\n/**\n * Creates a TwContext that writes through to the global (legacy) registry.\n * Used by createTwPlugin() in the plugin package.\n */\nexport function createGlobalPluginContext(config: Record<string, unknown> = {}): TwContext {\n return createPluginContext(legacyState.globalRegistry, config)\n}\n\nexport function use(plugin: TwPlugin): void {\n const ctx = createPluginContext(legacyState.globalRegistry)\n parsePluginManifest(plugin).setup(ctx)\n}\n\nexport function presetTokens(tokens: Record<string, string>): TwPlugin {\n return {\n name: \"preset-tokens\",\n setup(ctx) {\n for (const [name, value] of Object.entries(tokens)) {\n ctx.addToken(name, value)\n }\n },\n }\n}\n\nexport function presetVariants(variants: Record<string, VariantResolver>): TwPlugin {\n return {\n name: \"preset-variants\",\n setup(ctx) {\n for (const [name, resolver] of Object.entries(variants)) {\n ctx.addVariant(name, resolver)\n }\n },\n }\n}\n\nexport function presetScrollbar(): TwPlugin {\n return {\n name: \"preset-scrollbar\",\n setup(ctx) {\n ctx.addVariant(\"scrollbar-thin\", () => \"::-webkit-scrollbar{width:8px;height:8px}\")\n ctx.addVariant(\"scrollbar-none\", () => \"::-webkit-scrollbar{display:none}\")\n ctx.addUtility(\"scrollbar-hide\", { \"-ms-overflow-style\": \"none\", \"scrollbar-width\": \"none\" })\n },\n }\n}\n\n// Re-export schemas\nexport {\n type PluginManifestInput,\n PluginManifestSchema,\n parsePluginManifest,\n parseTokenRegistration,\n parseTwPluginOptions,\n type TokenRegistrationInput,\n TokenRegistrationSchema,\n TransformRegistrationSchema,\n type TwPluginOptionsInput,\n TwPluginOptionsSchema,\n} from \"./schemas\""],"mappings":"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","names":["config"]}
|
package/dist/plugin-registry.js
CHANGED
|
@@ -1,22 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var child_process = require('child_process');
|
|
4
|
-
var fs = require('fs');
|
|
5
|
-
var module$1 = require('module');
|
|
6
|
-
var path = require('path');
|
|
7
|
-
var url = require('url');
|
|
8
|
-
|
|
9
|
-
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
1
|
+
const __importMetaUrl = typeof __filename !== "undefined" ? require("node:url").pathToFileURL(__filename).href : "file://unknown";
|
|
10
2
|
/* tailwind-styled-v4 v5.0.4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
3
|
+
"use strict";
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
11
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
12
8
|
var __commonJS = (cb, mod) => function __require() {
|
|
13
9
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
14
10
|
};
|
|
11
|
+
var __export = (target, all) => {
|
|
12
|
+
for (var name in all)
|
|
13
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
14
|
+
};
|
|
15
|
+
var __copyProps = (to, from, except, desc) => {
|
|
16
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
17
|
+
for (let key of __getOwnPropNames(from))
|
|
18
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
19
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
20
|
+
}
|
|
21
|
+
return to;
|
|
22
|
+
};
|
|
23
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
24
|
|
|
16
25
|
// packages/domain/plugin-registry/registry.json
|
|
17
26
|
var require_registry = __commonJS({
|
|
18
|
-
"packages/domain/plugin-registry/registry.json"(
|
|
19
|
-
|
|
27
|
+
"packages/domain/plugin-registry/registry.json"(exports2, module2) {
|
|
28
|
+
module2.exports = {
|
|
20
29
|
version: "5.0.0",
|
|
21
30
|
updatedAt: "2026-03-23",
|
|
22
31
|
official: [
|
|
@@ -78,29 +87,47 @@ var require_registry = __commonJS({
|
|
|
78
87
|
};
|
|
79
88
|
}
|
|
80
89
|
});
|
|
90
|
+
|
|
91
|
+
// src/umbrella/plugin-registry.ts
|
|
92
|
+
var plugin_registry_exports = {};
|
|
93
|
+
__export(plugin_registry_exports, {
|
|
94
|
+
PluginRegistry: () => PluginRegistry,
|
|
95
|
+
PluginRegistryError: () => PluginRegistryError,
|
|
96
|
+
getRegistry: () => getRegistry,
|
|
97
|
+
registry: () => registry
|
|
98
|
+
});
|
|
99
|
+
module.exports = __toCommonJS(plugin_registry_exports);
|
|
100
|
+
|
|
101
|
+
// packages/domain/plugin-registry/src/index.ts
|
|
102
|
+
var import_node_child_process = require("child_process");
|
|
103
|
+
var import_node_fs = require("fs");
|
|
104
|
+
var import_node_module = require("module");
|
|
105
|
+
var import_node_path = require("path");
|
|
106
|
+
var import_node_url = require("url");
|
|
107
|
+
var import_meta = {};
|
|
81
108
|
var _native = void 0;
|
|
82
109
|
function getNative() {
|
|
83
110
|
if (_native !== void 0) return _native;
|
|
84
111
|
try {
|
|
85
|
-
const runtimeDir = typeof __dirname === "string" && __dirname.length > 0 ? __dirname : typeof
|
|
86
|
-
const req =
|
|
112
|
+
const runtimeDir = typeof __dirname === "string" && __dirname.length > 0 ? __dirname : typeof import_meta !== "undefined" && __importMetaUrl ? (0, import_node_url.fileURLToPath)(new URL(".", __importMetaUrl)) : process.cwd();
|
|
113
|
+
const req = (0, import_node_module.createRequire)((0, import_node_path.join)(runtimeDir, "noop.cjs"));
|
|
87
114
|
const _pa = `${process.platform}-${process.arch}`;
|
|
88
115
|
const _paGnu = _pa === "linux-x64" ? "linux-x64-gnu" : _pa === "linux-arm64" ? "linux-arm64-gnu" : _pa;
|
|
89
116
|
const candidates = [
|
|
90
117
|
// npm install case: dist/../native/
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
118
|
+
(0, import_node_path.resolve)(runtimeDir, "..", "native", "tailwind-styled-native.node"),
|
|
119
|
+
(0, import_node_path.resolve)(runtimeDir, "..", "native", `tailwind-styled-native.${_pa}.node`),
|
|
120
|
+
(0, import_node_path.resolve)(runtimeDir, "..", "native", `tailwind-styled-native.${_paGnu}.node`),
|
|
121
|
+
(0, import_node_path.resolve)(runtimeDir, "..", "native", "tailwind_styled_parser.node"),
|
|
95
122
|
// cwd fallback
|
|
96
|
-
|
|
97
|
-
|
|
123
|
+
(0, import_node_path.resolve)(process.cwd(), "native", "tailwind-styled-native.node"),
|
|
124
|
+
(0, import_node_path.resolve)(process.cwd(), "native", "tailwind_styled_parser.node"),
|
|
98
125
|
// monorepo dev: 4-level up
|
|
99
|
-
|
|
100
|
-
|
|
126
|
+
(0, import_node_path.resolve)(runtimeDir, "..", "..", "..", "..", "native", "tailwind-styled-native.node"),
|
|
127
|
+
(0, import_node_path.resolve)(runtimeDir, "..", "..", "..", "..", "native", "tailwind_styled_parser.node"),
|
|
101
128
|
// 3-level fallback
|
|
102
|
-
|
|
103
|
-
|
|
129
|
+
(0, import_node_path.resolve)(runtimeDir, "..", "..", "..", "native", "tailwind-styled-native.node"),
|
|
130
|
+
(0, import_node_path.resolve)(runtimeDir, "..", "..", "..", "native", "tailwind_styled_parser.node")
|
|
104
131
|
];
|
|
105
132
|
for (const c of candidates) {
|
|
106
133
|
try {
|
|
@@ -245,7 +272,7 @@ var PluginRegistry = class _PluginRegistry {
|
|
|
245
272
|
if (options.dryRun) {
|
|
246
273
|
return { plugin: pluginName, installed: true, command, exitCode: 0 };
|
|
247
274
|
}
|
|
248
|
-
const child =
|
|
275
|
+
const child = (0, import_node_child_process.spawnSync)(npmBin, ["install", pluginName], { stdio: "inherit" });
|
|
249
276
|
if (child.error) {
|
|
250
277
|
throw new PluginRegistryError({
|
|
251
278
|
code: "INSTALL_COMMAND_FAILED",
|
|
@@ -281,7 +308,7 @@ var PluginRegistry = class _PluginRegistry {
|
|
|
281
308
|
if (options.dryRun) {
|
|
282
309
|
return { plugin: pluginName, uninstalled: true, command, exitCode: 0 };
|
|
283
310
|
}
|
|
284
|
-
const child =
|
|
311
|
+
const child = (0, import_node_child_process.spawnSync)(npmBin, ["uninstall", pluginName], { stdio: "inherit" });
|
|
285
312
|
if (child.status !== 0 && child.status !== null) {
|
|
286
313
|
throw new PluginRegistryError({
|
|
287
314
|
code: "INSTALL_FAILED",
|
|
@@ -303,9 +330,9 @@ var PluginRegistry = class _PluginRegistry {
|
|
|
303
330
|
return { ok: true, reason: "no checksum registered (skip)" };
|
|
304
331
|
}
|
|
305
332
|
try {
|
|
306
|
-
const pkgPath =
|
|
307
|
-
if (!
|
|
308
|
-
const content =
|
|
333
|
+
const pkgPath = (0, import_node_path.join)(process.cwd(), "node_modules", pluginName, "package.json");
|
|
334
|
+
if (!(0, import_node_fs.existsSync)(pkgPath)) return { ok: false, reason: "plugin not installed" };
|
|
335
|
+
const content = (0, import_node_fs.readFileSync)(pkgPath, "utf8");
|
|
309
336
|
const native = requireNative();
|
|
310
337
|
const ok = native.pluginVerifyIntegrity(content, plugin.integrity);
|
|
311
338
|
return ok ? { ok: true } : { ok: false, reason: `Integrity mismatch: expected ${plugin.integrity}` };
|
|
@@ -320,9 +347,9 @@ var PluginRegistry = class _PluginRegistry {
|
|
|
320
347
|
const plugin = this.getByName(pluginName);
|
|
321
348
|
if (!plugin) return { hasUpdate: false, error: `Plugin '${pluginName}' not in registry` };
|
|
322
349
|
try {
|
|
323
|
-
const pkgPath =
|
|
324
|
-
if (!
|
|
325
|
-
const current = JSON.parse(
|
|
350
|
+
const pkgPath = (0, import_node_path.join)(process.cwd(), "node_modules", pluginName, "package.json");
|
|
351
|
+
if (!(0, import_node_fs.existsSync)(pkgPath)) return { hasUpdate: false, error: "plugin not installed" };
|
|
352
|
+
const current = JSON.parse((0, import_node_fs.readFileSync)(pkgPath, "utf8")).version ?? "0.0.0";
|
|
326
353
|
const latest = plugin.version;
|
|
327
354
|
const native = requireNative();
|
|
328
355
|
const hasUpdate = native.pluginSemverHasUpdate(current, latest);
|
|
@@ -340,12 +367,12 @@ var PluginRegistry = class _PluginRegistry {
|
|
|
340
367
|
const byName = /* @__PURE__ */ new Map();
|
|
341
368
|
for (const p of this.plugins) {
|
|
342
369
|
try {
|
|
343
|
-
const pkgPath =
|
|
344
|
-
if (!
|
|
370
|
+
const pkgPath = (0, import_node_path.join)(process.cwd(), "node_modules", p.name, "package.json");
|
|
371
|
+
if (!(0, import_node_fs.existsSync)(pkgPath)) {
|
|
345
372
|
byName.set(p.name, { name: p.name, hasUpdate: false, error: "plugin not installed" });
|
|
346
373
|
continue;
|
|
347
374
|
}
|
|
348
|
-
const version = JSON.parse(
|
|
375
|
+
const version = JSON.parse((0, import_node_fs.readFileSync)(pkgPath, "utf8")).version ?? "0.0.0";
|
|
349
376
|
installed.push({ name: p.name, version });
|
|
350
377
|
} catch (e) {
|
|
351
378
|
byName.set(p.name, {
|
|
@@ -371,10 +398,11 @@ function getRegistry() {
|
|
|
371
398
|
return _state.defaultRegistry;
|
|
372
399
|
}
|
|
373
400
|
var registry = getRegistry();
|
|
374
|
-
|
|
375
|
-
exports
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
401
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
402
|
+
0 && (module.exports = {
|
|
403
|
+
PluginRegistry,
|
|
404
|
+
PluginRegistryError,
|
|
405
|
+
getRegistry,
|
|
406
|
+
registry
|
|
407
|
+
});
|
|
380
408
|
//# sourceMappingURL=plugin-registry.js.map
|