@jesscss/plugin-js 2.0.0-alpha.1 → 2.0.0-alpha.11

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/lib/index.d.ts CHANGED
@@ -1,4 +1,16 @@
1
1
  import { AbstractPlugin } from '@jesscss/core';
2
+ /**
3
+ * A failure raised BY a `@plugin` script (its own `throw`, or a shim member it
4
+ * cannot use), as distinct from a value the engine simply could not compute.
5
+ * The distinction is what lets the compiler report a plugin fault loudly and
6
+ * attributably instead of preserving the call verbatim.
7
+ */
8
+ export declare class PluginFunctionError extends Error {
9
+ readonly functionName: string;
10
+ readonly pluginStack: string | undefined;
11
+ readonly originalName: string;
12
+ constructor(functionName: string, reason: string, pluginStack?: string, originalName?: string);
13
+ }
2
14
  export type JavaScriptSandboxConfig = {
3
15
  allowHttp?: boolean;
4
16
  allowNetHosts?: string[];
@@ -6,20 +18,92 @@ export type JavaScriptSandboxConfig = {
6
18
  };
7
19
  export interface JsPluginOptions extends JavaScriptSandboxConfig {
8
20
  denoCommand?: string;
21
+ /**
22
+ * Runtime API exposed inside the Deno worker.
23
+ *
24
+ * Jess `@-use`/script imports run as plain ESM modules. Legacy Less
25
+ * `@plugin` loading can opt into the Less-compatible global shape.
26
+ */
27
+ runtimeApi?: 'module' | 'less';
28
+ }
29
+ /**
30
+ * Returns a copy of `env` with Node debugger/inspector-attach variables removed,
31
+ * so a spawned Deno subprocess starts regardless of the parent's debug env.
32
+ * The Deno permission sandbox is untouched; this only stops leaking the debugger
33
+ * into it.
34
+ */
35
+ export declare const sanitizeSpawnEnv: (env?: NodeJS.ProcessEnv) => NodeJS.ProcessEnv;
36
+ /**
37
+ * One scope/built-in fact resolved on the HOST and handed to the sandbox so a
38
+ * synchronous Less-4 plugin body can read it. See {@link PluginCallCapabilities}.
39
+ */
40
+ export type PluginCallFacts = {
41
+ vars: Record<string, {
42
+ value: unknown;
43
+ important?: boolean;
44
+ } | null>;
45
+ calls: Record<string, unknown>;
46
+ fileInfo: {
47
+ filename: string;
48
+ entryPath: string;
49
+ } | null;
50
+ };
51
+ export type PluginLogRecord = {
52
+ level: 'warn' | 'error' | 'info' | 'debug';
53
+ message: string;
54
+ };
55
+ /**
56
+ * The compiler-side capabilities a legacy `@plugin` function body needs. The
57
+ * dialect adapter supplies these bound to the LIVE evaluation frame of the call
58
+ * site; the sandbox reaches them only through the resolve-and-replay protocol,
59
+ * never as a live object.
60
+ */
61
+ export interface PluginCallCapabilities {
62
+ /** Resolve `@name` at the call site. `null` means "no such variable". */
63
+ lookupVariable?(name: string): {
64
+ value: unknown;
65
+ important?: boolean;
66
+ } | null;
67
+ /** Evaluate a built-in function (`less.functions.functionRegistry.get(...)`). */
68
+ callFunction?(name: string, args: unknown[]): unknown;
69
+ /** The file/entry pair a plugin reads through `this.currentFileInfo`. */
70
+ currentFileInfo?: {
71
+ filename: string;
72
+ entryPath: string;
73
+ };
74
+ /** Records a diagnostic emitted by the plugin through `less.logger`. */
75
+ log?(record: PluginLogRecord): void;
76
+ /** Propagates `!important` picked up while resolving a variable. */
77
+ markImportant?(): void;
9
78
  }
79
+ /** A `@plugin` function bound to the live call-site capabilities. */
80
+ export type ContextualPluginFunction = (args?: readonly unknown[] | unknown, capabilities?: PluginCallCapabilities) => unknown | Promise<unknown>;
10
81
  export declare class JsPlugin extends AbstractPlugin {
11
82
  opts: JsPluginOptions;
83
+ private static cleanupRegistered;
84
+ private static liveInstances;
12
85
  name: string;
13
86
  supportedExtensions: string[];
14
87
  private runtimeState;
88
+ private shuttingDown;
15
89
  private brokerServer;
16
90
  private brokerSocketPath;
17
91
  private worker;
18
92
  private workerBuffer;
19
93
  private nextRequestId;
20
94
  private pending;
95
+ private idleTimer;
96
+ /**
97
+ * Variable names each legacy plugin function has been observed to read,
98
+ * keyed by module+options+function. Prefetching them turns the steady-state
99
+ * call into a single round trip instead of one round trip per read.
100
+ */
101
+ private readonly factMemo;
21
102
  constructor(opts?: JsPluginOptions);
22
103
  prewarm(): Promise<void | undefined>;
104
+ private static registerProcessCleanup;
105
+ private clearIdleTimer;
106
+ private scheduleIdleShutdown;
23
107
  private ensureRuntimeAvailable;
24
108
  private ensureRuntime;
25
109
  private createBrokerPath;
@@ -36,6 +120,29 @@ export declare class JsPlugin extends AbstractPlugin {
36
120
  dispose(): void;
37
121
  private assertAllowedPath;
38
122
  import(absoluteFilePath: string): Promise<Record<string, any>>;
123
+ /**
124
+ * Loads a legacy Less `@plugin` wrapper file in Deno Less-compat mode.
125
+ *
126
+ * @deprecated Less `@plugin` is deprecated. Prefer `@-from` for
127
+ * ESM-style script imports or `@-use` for Sass-module-style namespace imports.
128
+ */
129
+ importLessPlugin(absoluteFilePath: string, options?: string | null): Promise<{
130
+ functions: Record<string, ContextualPluginFunction>;
131
+ }>;
132
+ /**
133
+ * Runs one legacy `@plugin` function, resolving the scope/built-in facts its
134
+ * body reads. The sandbox reports one unmet fact at a time; the host answers
135
+ * it from the LIVE call-site capabilities and replays. The names a function
136
+ * asked for are remembered per function, so steady-state calls ship the facts
137
+ * up front and complete in a single round trip.
138
+ */
139
+ private invokePluginFunction;
140
+ private resolveVariableFact;
141
+ private resolveCallFact;
142
+ /** Context-facing executable-plugin capability used by the direct AST path. */
143
+ importPlugin(absoluteFilePath: string, options?: string | null): Promise<{
144
+ functions: Record<string, ContextualPluginFunction>;
145
+ }>;
39
146
  }
40
147
  /**
41
148
  * Global flag set when @jesscss/plugin-js is loaded.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACf,MAAM,eAAe,CAAC;AAOvB,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,WAAW,eAAgB,SAAQ,uBAAuB;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoGD,qBAAa,QAAS,SAAQ,cAAc;IAevB,IAAI,EAAE,eAAe;IAdxC,IAAI,SAAQ;IACZ,mBAAmB,WAAiC;IACpD,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,MAAM,CAA6C;IAC3D,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,OAAO,CAIV;gBAEc,IAAI,GAAE,eAAoB;IAI7C,OAAO;IAIP,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,mBAAmB;YA0Bb,WAAW;IA2CzB,OAAO,CAAC,WAAW;YAkEL,YAAY;IAW1B,OAAO,CAAC,cAAc;IA6BtB,OAAO,CAAC,gBAAgB;YAQV,UAAU;IAqBxB,OAAO,CAAC,QAAQ;IAqBhB,OAAO;IAKP,OAAO,CAAC,iBAAiB;IAgBnB,MAAM,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CA6CrE;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,iCAAiC,CAAC;AAOpE,QAAA,MAAM,QAAQ,UAAY,eAAe,aAEtB,CAAC;AAEpB,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}