@marko/language-tools 2.1.6 → 2.1.8

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/index.js CHANGED
@@ -2148,7 +2148,9 @@ constructor(_?: Return) {}
2148
2148
  const renderId = this.#getRenderId(tag);
2149
2149
  if (renderId) {
2150
2150
  this.#extractor.write(
2151
- `${varShared("assertRendered")}(${varShared("rendered")}, ${renderId}, `
2151
+ `${varShared("assertRendered")}(${varShared(
2152
+ "rendered"
2153
+ )}, ${renderId}, `
2152
2154
  );
2153
2155
  }
2154
2156
  if (tagName) {
@@ -3276,7 +3278,9 @@ var marko_default = {
3276
3278
  code += "<return ";
3277
3279
  if (valueType) {
3278
3280
  code += `= ${castType(
3279
- typeChecker.typeToString(typeChecker.getTypeOfSymbol(valueType))
3281
+ typeChecker.typeToString(
3282
+ typeChecker.getTypeOfSymbol(valueType)
3283
+ )
3280
3284
  )}`;
3281
3285
  } else {
3282
3286
  code += `...${castType(typeChecker.typeToString(returnType))}`;
@@ -3384,13 +3388,11 @@ var HTMLExtractor = class {
3384
3388
  #read;
3385
3389
  #nodeDetails;
3386
3390
  #nodeIdCounter;
3387
- #dynamicAttrValueCounter;
3388
3391
  constructor(parsed) {
3389
3392
  this.#extractor = new Extractor(parsed);
3390
3393
  this.#read = parsed.read.bind(parsed);
3391
3394
  this.#nodeDetails = {};
3392
3395
  this.#nodeIdCounter = 0;
3393
- this.#dynamicAttrValueCounter = 0;
3394
3396
  parsed.program.body.forEach((node) => this.#visitNode(node));
3395
3397
  }
3396
3398
  end() {
@@ -3423,6 +3425,8 @@ var HTMLExtractor = class {
3423
3425
  start: node.start + 1,
3424
3426
  end: node.start + 2
3425
3427
  }) === "!";
3428
+ this.#extractor.write("placeholder");
3429
+ break;
3426
3430
  }
3427
3431
  return isDynamic || hasDynamicBody;
3428
3432
  }
@@ -3495,7 +3499,7 @@ var HTMLExtractor = class {
3495
3499
  this.#extractor.write('"');
3496
3500
  break;
3497
3501
  case 3 /* Dynamic */:
3498
- this.#extractor.write(`="dynamic${this.#dynamicAttrValueCounter++}"`);
3502
+ this.#extractor.write(`="dynamic"`);
3499
3503
  break;
3500
3504
  }
3501
3505
  }
package/dist/index.mjs CHANGED
@@ -2116,7 +2116,9 @@ constructor(_?: Return) {}
2116
2116
  const renderId = this.#getRenderId(tag);
2117
2117
  if (renderId) {
2118
2118
  this.#extractor.write(
2119
- `${varShared("assertRendered")}(${varShared("rendered")}, ${renderId}, `
2119
+ `${varShared("assertRendered")}(${varShared(
2120
+ "rendered"
2121
+ )}, ${renderId}, `
2120
2122
  );
2121
2123
  }
2122
2124
  if (tagName) {
@@ -3244,7 +3246,9 @@ var marko_default = {
3244
3246
  code += "<return ";
3245
3247
  if (valueType) {
3246
3248
  code += `= ${castType(
3247
- typeChecker.typeToString(typeChecker.getTypeOfSymbol(valueType))
3249
+ typeChecker.typeToString(
3250
+ typeChecker.getTypeOfSymbol(valueType)
3251
+ )
3248
3252
  )}`;
3249
3253
  } else {
3250
3254
  code += `...${castType(typeChecker.typeToString(returnType))}`;
@@ -3352,13 +3356,11 @@ var HTMLExtractor = class {
3352
3356
  #read;
3353
3357
  #nodeDetails;
3354
3358
  #nodeIdCounter;
3355
- #dynamicAttrValueCounter;
3356
3359
  constructor(parsed) {
3357
3360
  this.#extractor = new Extractor(parsed);
3358
3361
  this.#read = parsed.read.bind(parsed);
3359
3362
  this.#nodeDetails = {};
3360
3363
  this.#nodeIdCounter = 0;
3361
- this.#dynamicAttrValueCounter = 0;
3362
3364
  parsed.program.body.forEach((node) => this.#visitNode(node));
3363
3365
  }
3364
3366
  end() {
@@ -3391,6 +3393,8 @@ var HTMLExtractor = class {
3391
3393
  start: node.start + 1,
3392
3394
  end: node.start + 2
3393
3395
  }) === "!";
3396
+ this.#extractor.write("placeholder");
3397
+ break;
3394
3398
  }
3395
3399
  return isDynamic || hasDynamicBody;
3396
3400
  }
@@ -3463,7 +3467,7 @@ var HTMLExtractor = class {
3463
3467
  this.#extractor.write('"');
3464
3468
  break;
3465
3469
  case 3 /* Dynamic */:
3466
- this.#extractor.write(`="dynamic${this.#dynamicAttrValueCounter++}"`);
3470
+ this.#extractor.write(`="dynamic"`);
3467
3471
  break;
3468
3472
  }
3469
3473
  }
@@ -7,7 +7,7 @@ declare global {
7
7
  // Extend the Body type to keep track of what is yielded (used for scope hoisted types).
8
8
  export interface Body<
9
9
  in Params extends readonly any[] = [],
10
- out Return = void
10
+ out Return = void,
11
11
  > {
12
12
  (...params: Params): MarkoReturn<Return>;
13
13
  }
@@ -23,11 +23,11 @@ declare global {
23
23
  export const any: any;
24
24
 
25
25
  export function getGlobal<Override>(
26
- override: Override
26
+ override: Override,
27
27
  ): 1 extends Override & 0 ? Marko.Global : Override;
28
28
 
29
29
  export function attrTagNames<Input, Keys extends keyof Input>(
30
- input: Input
30
+ input: Input,
31
31
  ): Record<string, never> & {
32
32
  [Key in Keys as `@${Input[Key] extends infer Value
33
33
  ? Value extends { renderBody?: any }
@@ -58,7 +58,7 @@ declare global {
58
58
  ): string;
59
59
 
60
60
  export function state<Component>(
61
- component: Component
61
+ component: Component,
62
62
  ): Component extends {
63
63
  state: infer State extends object;
64
64
  }
@@ -71,13 +71,13 @@ declare global {
71
71
  >;
72
72
 
73
73
  export function instance<Constructor>(
74
- constructor: Constructor
74
+ constructor: Constructor,
75
75
  ): Constructor extends abstract new (...args: any) => infer Instance
76
76
  ? Instance
77
77
  : never;
78
78
 
79
79
  export function readScopes<Rendered>(
80
- rendered: Rendered
80
+ rendered: Rendered,
81
81
  ): MergeScopes<
82
82
  Rendered extends { scopes: Record<any, infer Scope> } ? Scope : never
83
83
  > &
@@ -86,7 +86,7 @@ declare global {
86
86
  export function assertRendered<Index extends number, Rendered, Result>(
87
87
  rendered: Rendered,
88
88
  index: Index,
89
- result: Result
89
+ result: Result,
90
90
  ): asserts rendered is Rendered & {
91
91
  scopes: Record<
92
92
  Index,
@@ -123,7 +123,7 @@ declare global {
123
123
  | ((...args: any) => any)
124
124
  | false
125
125
  | void,
126
- Args extends readonly any[]
126
+ Args extends readonly any[],
127
127
  >(
128
128
  owner: Owner,
129
129
  handler: Handler,
@@ -135,37 +135,37 @@ declare global {
135
135
  : (...args: any) => any; // If typescript ever actually supports partial application maybe we do this.
136
136
 
137
137
  export function renderTemplate<Name extends Marko.Template>(
138
- imported: Promise<{ default: Name }>
138
+ imported: Promise<{ default: Name }>,
139
139
  ): TemplateRenderer<Name>;
140
140
  export function renderNativeTag<Name extends string>(
141
- tag: Name
141
+ tag: Name,
142
142
  ): NativeTagRenderer<Name>;
143
143
  export const missingTag: DefaultRenderer;
144
144
  export function renderPreferLocal<Name, Fallback>(
145
145
  name: Name,
146
- fallback: Fallback
146
+ fallback: Fallback,
147
147
  ): 0 extends 1 & Name ? Fallback : DynamicRenderer<Name>;
148
148
  export function renderDynamicTag<Name>(tag: Name): DynamicRenderer<Name>;
149
149
 
150
150
  export function returnTag<
151
- Input extends { value: unknown; valueChange?: (value: any) => void }
151
+ Input extends { value: unknown; valueChange?: (value: any) => void },
152
152
  >(input: Input): Input;
153
153
 
154
154
  export function forTag<
155
155
  Value,
156
+ Item extends Value extends
157
+ | readonly (infer Item)[]
158
+ | Iterable<infer Item>
159
+ ? Item
160
+ : unknown,
156
161
  RenderBody extends Marko.Body<
157
- [
158
- value: Value extends readonly (infer Item)[] | Iterable<infer Item>
159
- ? Item
160
- : unknown,
161
- index: number,
162
- all: Value
163
- ],
162
+ [item: Item, index: number, all: Value],
164
163
  void
165
- >
164
+ >,
166
165
  >(input: {
167
166
  of: Value;
168
167
  renderBody: RenderBody;
168
+ by?: (item: Item, index: number) => string;
169
169
  }): ReturnAndScope<RenderBodyScope<RenderBody>, void>;
170
170
 
171
171
  export function forTag<
@@ -173,22 +173,24 @@ declare global {
173
173
  RenderBody extends Marko.Body<
174
174
  [key: keyof Value, value: Value[keyof Value]],
175
175
  void
176
- >
176
+ >,
177
177
  >(input: {
178
178
  in: Value;
179
179
  renderBody: RenderBody;
180
+ by?: (value: Value[keyof Value], key: keyof Value) => string;
180
181
  }): ReturnAndScope<RenderBodyScope<RenderBody>, void>;
181
182
 
182
183
  export function forTag<
183
184
  From extends void | number,
184
185
  To extends number,
185
186
  Step extends void | number,
186
- RenderBody extends Marko.Body<[index: number], void>
187
+ RenderBody extends Marko.Body<[index: number], void>,
187
188
  >(input: {
188
189
  from?: From;
189
190
  to: To;
190
191
  step?: Step;
191
192
  renderBody: RenderBody;
193
+ by?: (index: number) => string;
192
194
  }): ReturnAndScope<RenderBodyScope<RenderBody>, void>;
193
195
 
194
196
  export function forTag<RenderBody extends AnyMarkoBody>(
@@ -204,12 +206,12 @@ declare global {
204
206
  | {
205
207
  of: readonly unknown[] | Iterable<unknown>;
206
208
  }
207
- ) & { renderBody?: RenderBody }
209
+ ) & { renderBody?: RenderBody; by?: (...args: unknown[]) => string },
208
210
  ): ReturnAndScope<RenderBodyScope<RenderBody>, void>;
209
211
 
210
212
  export function forAttrTag<
211
213
  Value extends Iterable<any> | readonly any[],
212
- Return
214
+ Return,
213
215
  >(
214
216
  input: {
215
217
  of: Value;
@@ -219,8 +221,8 @@ declare global {
219
221
  ? Item
220
222
  : unknown,
221
223
  index: number,
222
- all: Value
223
- ) => Return
224
+ all: Value,
225
+ ) => Return,
224
226
  ): {
225
227
  [Key in keyof Return]: Return[Key] extends
226
228
  | readonly (infer Item)[]
@@ -233,7 +235,7 @@ declare global {
233
235
  input: {
234
236
  in: Value;
235
237
  },
236
- renderBody: (key: keyof Value, value: Value[keyof Value]) => Return
238
+ renderBody: (key: keyof Value, value: Value[keyof Value]) => Return,
237
239
  ): {
238
240
  [Key in keyof Return]: Return[Key] extends
239
241
  | readonly (infer Item)[]
@@ -246,14 +248,14 @@ declare global {
246
248
  From extends void | number,
247
249
  To extends number,
248
250
  Step extends void | number,
249
- Return
251
+ Return,
250
252
  >(
251
253
  input: {
252
254
  from?: From;
253
255
  to: To;
254
256
  step?: Step;
255
257
  },
256
- renderBody: (index: number) => Return
258
+ renderBody: (index: number) => Return,
257
259
  ): {
258
260
  [Key in keyof Return]: Return[Key] extends
259
261
  | readonly (infer Item)[]
@@ -261,10 +263,10 @@ declare global {
261
263
  ? number extends From | To | Step
262
264
  ? MaybeRepeatable<Item>
263
265
  : Step extends 0
264
- ? never
265
- : [To] extends [From extends void ? 0 : From]
266
- ? undefined
267
- : Repeatable<Item>
266
+ ? never
267
+ : [To] extends [From extends void ? 0 : From]
268
+ ? undefined
269
+ : Repeatable<Item>
268
270
  : never;
269
271
  };
270
272
 
@@ -299,29 +301,31 @@ declare global {
299
301
  export type DynamicRenderer<Name> = 0 extends 1 & Name
300
302
  ? DefaultRenderer
301
303
  : [Name] extends [Marko.Template]
302
- ? TemplateRenderer<Name>
303
- : [Name] extends [string]
304
- ? NativeTagRenderer<Name>
305
- : [Name] extends [AnyMarkoBody]
306
- ? BodyRenderer<Name>
307
- : [Name] extends [{ renderBody?: AnyMarkoBody }]
308
- ? [Name["renderBody"]] extends [AnyMarkoBody]
309
- ? BodyRenderer<Name["renderBody"]>
310
- : BaseRenderer<
311
- RenderBodyInput<BodyParameters<Exclude<Name["renderBody"], void>>>
312
- >
313
- : DefaultRenderer;
304
+ ? TemplateRenderer<Name>
305
+ : [Name] extends [string]
306
+ ? NativeTagRenderer<Name>
307
+ : [Name] extends [AnyMarkoBody]
308
+ ? BodyRenderer<Name>
309
+ : [Name] extends [{ renderBody?: AnyMarkoBody }]
310
+ ? [Name["renderBody"]] extends [AnyMarkoBody]
311
+ ? BodyRenderer<Name["renderBody"]>
312
+ : BaseRenderer<
313
+ RenderBodyInput<
314
+ BodyParameters<Exclude<Name["renderBody"], void>>
315
+ >
316
+ >
317
+ : DefaultRenderer;
314
318
 
315
319
  export type TemplateRenderer<Template> = Template extends {
316
320
  _: infer Renderer;
317
321
  }
318
322
  ? Renderer
319
323
  : Template extends Marko.Template<
320
- infer Input extends Record<string, unknown>,
321
- infer Return
322
- >
323
- ? BaseRenderer<Input, Return>
324
- : never;
324
+ infer Input extends Record<string, unknown>,
325
+ infer Return
326
+ >
327
+ ? BaseRenderer<Input, Return>
328
+ : never;
325
329
 
326
330
  export interface NativeTagRenderer<Name extends string> {
327
331
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
@@ -331,7 +335,7 @@ declare global {
331
335
  Relate<
332
336
  __marko_internal_input,
333
337
  Marko.Directives & Marko.NativeTags[Name]["input"]
334
- >
338
+ >,
335
339
  ) => ReturnAndScope<
336
340
  Scopes<__marko_internal_input>,
337
341
  Marko.NativeTags[Name]["return"]
@@ -346,7 +350,7 @@ declare global {
346
350
  Relate<
347
351
  __marko_internal_input,
348
352
  Marko.Directives & RenderBodyInput<BodyParameters<Body>>
349
- >
353
+ >,
350
354
  ) => ReturnAndScope<
351
355
  Scopes<__marko_internal_input>,
352
356
  BodyReturnType<Body>
@@ -355,19 +359,19 @@ declare global {
355
359
 
356
360
  export interface BaseRenderer<
357
361
  Input extends Record<PropertyKey, unknown>,
358
- Return = void
362
+ Return = void,
359
363
  > {
360
364
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
361
365
  (): () => <__marko_input_with_scope extends unknown>(
362
366
  input: Marko.Directives &
363
367
  Input &
364
- Relate<__marko_input_with_scope, Marko.Directives & Input>
368
+ Relate<__marko_input_with_scope, Marko.Directives & Input>,
365
369
  ) => ReturnAndScope<Scopes<__marko_input_with_scope>, Return>;
366
370
  }
367
371
 
368
372
  export interface DefaultRenderer {
369
373
  (): () => <Input extends Record<PropertyKey, unknown>>(
370
- input: Input
374
+ input: Input,
371
375
  ) => ReturnAndScope<Scopes<Input>, void>;
372
376
  }
373
377
 
@@ -399,15 +403,15 @@ type RenderBodyInput<Args extends readonly unknown[]> = Args extends {
399
403
  ? number extends Length
400
404
  ? { value?: Args }
401
405
  : 0 extends Length
402
- ? { value?: [] }
403
- : { value: Args }
406
+ ? { value?: [] }
407
+ : { value: Args }
404
408
  : never;
405
409
 
406
410
  type Scopes<Input> = 0 extends 1 & Input
407
411
  ? never
408
412
  : Input extends Record<any, unknown>
409
- ? MergeScopes<FlatScopes<Input>>
410
- : never;
413
+ ? MergeScopes<FlatScopes<Input>>
414
+ : never;
411
415
 
412
416
  type ComponentEventHandlers<Component extends Marko.Component> = {
413
417
  [K in Exclude<
@@ -424,14 +428,14 @@ type FlatScopes<Input extends object, Objects = Input> = Input[keyof Input &
424
428
  ? 0 extends 1 & Prop
425
429
  ? unknown
426
430
  : Prop extends (...args: any) => { [Marko._.scope]: infer Scope }
427
- ? unknown extends Scope
428
- ? never
429
- : Scope
430
- : Prop extends object
431
- ? Prop extends Extract<Objects, Prop>
432
- ? never
433
- : FlatScopes<Prop, Objects | Prop>
434
- : never
431
+ ? unknown extends Scope
432
+ ? never
433
+ : Scope
434
+ : Prop extends object
435
+ ? Prop extends Extract<Objects, Prop>
436
+ ? never
437
+ : FlatScopes<Prop, Objects | Prop>
438
+ : never
435
439
  : unknown;
436
440
 
437
441
  type MergeScopes<Scopes> = {
@@ -451,12 +455,12 @@ type MergeOptionalScopes<Scopes> = {
451
455
  type MergeAttrTags<Attrs extends readonly any[]> = Attrs extends readonly [
452
456
  infer A,
453
457
  infer B,
454
- ...infer Rest
458
+ ...infer Rest,
455
459
  ]
456
460
  ? MergeAttrTags<[MergeAttrTag<A, B>, ...Rest]>
457
461
  : Attrs extends readonly [infer A]
458
- ? A
459
- : never;
462
+ ? A
463
+ : never;
460
464
 
461
465
  type MergeAttrTag<A, B> = {
462
466
  [K in keyof A | keyof B]: K extends keyof A
@@ -464,21 +468,21 @@ type MergeAttrTag<A, B> = {
464
468
  ? MergeAttrTagValue<A[K], B[K]>
465
469
  : A[K]
466
470
  : K extends keyof B
467
- ? B[K]
468
- : never;
471
+ ? B[K]
472
+ : never;
469
473
  };
470
474
 
471
475
  type MergeAttrTagValue<A, B> = A extends readonly any[]
472
476
  ? B extends readonly any[]
473
477
  ? [...A, ...B]
474
478
  : B extends void
475
- ? A
476
- : [...A, B]
479
+ ? A
480
+ : [...A, B]
477
481
  : A extends void
478
- ? B
479
- : B extends void
480
- ? A
481
- : [A, B];
482
+ ? B
483
+ : B extends void
484
+ ? A
485
+ : [A, B];
482
486
 
483
487
  type AttrTagByListSize<T, Item> = T extends
484
488
  | readonly [any, any, ...any[]]
@@ -486,18 +490,18 @@ type AttrTagByListSize<T, Item> = T extends
486
490
  | readonly [any, ...any[], any]
487
491
  ? Repeated<Item>
488
492
  : T extends readonly [any]
489
- ? Item
490
- : T extends readonly [any, ...any[]] | readonly [...any[], any]
491
- ? Repeatable<Item>
492
- : T extends readonly []
493
- ? undefined
494
- : MaybeRepeatable<Item>;
493
+ ? Item
494
+ : T extends readonly [any, ...any[]] | readonly [...any[], any]
495
+ ? Repeatable<Item>
496
+ : T extends readonly []
497
+ ? undefined
498
+ : MaybeRepeatable<Item>;
495
499
 
496
500
  type AttrTagByObjectSize<
497
501
  Value,
498
502
  Item,
499
503
  Keys = RecordKeys<Value>,
500
- KnownKeys = KnownRecordKeys<Value>
504
+ KnownKeys = KnownRecordKeys<Value>,
501
505
  > = CheckNever<
502
506
  Keys,
503
507
  undefined,
@@ -527,16 +531,16 @@ type KnownRecordKeys<T> = keyof {
527
531
  [Key in keyof T as string extends Key
528
532
  ? never
529
533
  : number extends Key
530
- ? never
531
- : symbol extends Key
532
- ? never
533
- : CheckNever<T[Key], never, Key>]: 0;
534
+ ? never
535
+ : symbol extends Key
536
+ ? never
537
+ : CheckNever<T[Key], never, Key>]: 0;
534
538
  };
535
539
 
536
540
  type CheckNever<T, If, Else> = [T] extends [never] ? If : Else;
537
541
 
538
542
  type UnionToIntersection<T> = (T extends any ? (_: T) => any : never) extends (
539
- _: infer U
543
+ _: infer U,
540
544
  ) => any
541
545
  ? U
542
546
  : never;
package/package.json CHANGED
@@ -1,27 +1,27 @@
1
1
  {
2
2
  "name": "@marko/language-tools",
3
3
  "description": "Marko Language Tools",
4
- "version": "2.1.6",
4
+ "version": "2.1.8",
5
5
  "bugs": "https://github.com/marko-js/language-server/issues/new?template=Bug_report.md",
6
6
  "peerDependencies": {
7
7
  "@marko/compiler": "^5.28.4"
8
8
  },
9
9
  "dependencies": {
10
10
  "@babel/helper-validator-identifier": "^7.22.20",
11
- "@babel/parser": "^7.23.0",
12
- "htmljs-parser": "^5.5.0",
11
+ "@babel/parser": "^7.23.5",
12
+ "htmljs-parser": "^5.5.1",
13
13
  "relative-import-path": "^1.0.0"
14
14
  },
15
15
  "devDependencies": {
16
- "@babel/code-frame": "^7.22.13",
17
- "@marko/compiler": "^5.33.2",
18
- "@marko/translator-default": "^5.31.3",
19
- "@types/babel__code-frame": "^7.0.4",
20
- "@types/babel__helper-validator-identifier": "^7.15.0",
16
+ "@babel/code-frame": "^7.23.5",
17
+ "@marko/compiler": "^5.34.1",
18
+ "@marko/translator-default": "^5.31.8",
19
+ "@types/babel__code-frame": "^7.0.6",
20
+ "@types/babel__helper-validator-identifier": "^7.15.2",
21
21
  "@typescript/vfs": "^1.5.0",
22
- "marko": "^5.31.10",
22
+ "marko": "^5.32.0",
23
23
  "mitata": "^0.1.6",
24
- "tsx": "^3.13.0"
24
+ "tsx": "^4.6.2"
25
25
  },
26
26
  "exports": {
27
27
  ".": {