@marko/language-tools 2.3.1 → 2.4.1

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.
@@ -24,13 +24,13 @@ declare global {
24
24
 
25
25
  export function getGlobal<Override>(
26
26
  override: Override,
27
- ): 1 extends Override & 0 ? Marko.Global : Override;
27
+ ): [0] extends [1 & Override] ? Marko.Global : Override;
28
28
 
29
- export function attrTagNames<Input, Keys extends keyof Input>(
29
+ export function attrTagNames<Input, Keys extends keyof Input & string>(
30
30
  input: Input,
31
31
  ): Record<string, never> & {
32
32
  [Key in Keys as `@${Input[Key] extends infer Value
33
- ? Value extends { renderBody?: any }
33
+ ? Value extends Marko.AttrTag<any>
34
34
  ? Key
35
35
  : never
36
36
  : never}`]: Input[Key];
@@ -144,7 +144,7 @@ declare global {
144
144
  export function renderPreferLocal<Name, Fallback>(
145
145
  name: Name,
146
146
  fallback: Fallback,
147
- ): 0 extends 1 & Name ? Fallback : DynamicRenderer<Name>;
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<
@@ -211,7 +211,7 @@ declare global {
211
211
 
212
212
  export function forAttrTag<
213
213
  Value extends Iterable<any> | readonly any[],
214
- Return,
214
+ const Return,
215
215
  >(
216
216
  input: {
217
217
  of: Value;
@@ -226,12 +226,12 @@ declare global {
226
226
  ): {
227
227
  [Key in keyof Return]: Return[Key] extends
228
228
  | readonly (infer Item)[]
229
- | infer Item extends Record<PropertyKey, any>
229
+ | (infer Item extends Record<PropertyKey, any>)
230
230
  ? AttrTagByListSize<Value, Item>
231
231
  : never;
232
232
  };
233
233
 
234
- export function forAttrTag<Value extends object, Return>(
234
+ export function forAttrTag<Value extends object, const Return>(
235
235
  input: {
236
236
  in: Value;
237
237
  },
@@ -239,7 +239,7 @@ declare global {
239
239
  ): {
240
240
  [Key in keyof Return]: Return[Key] extends
241
241
  | readonly (infer Item)[]
242
- | infer Item extends Record<PropertyKey, any>
242
+ | (infer Item extends Record<PropertyKey, any>)
243
243
  ? AttrTagByObjectSize<Value, Item>
244
244
  : never;
245
245
  };
@@ -248,7 +248,7 @@ declare global {
248
248
  From extends void | number,
249
249
  To extends number,
250
250
  Step extends void | number,
251
- Return,
251
+ const Return,
252
252
  >(
253
253
  input: {
254
254
  from?: From;
@@ -259,18 +259,18 @@ declare global {
259
259
  ): {
260
260
  [Key in keyof Return]: Return[Key] extends
261
261
  | readonly (infer Item)[]
262
- | infer Item extends Record<PropertyKey, any>
262
+ | (infer Item extends Record<PropertyKey, any>)
263
263
  ? number extends From | To | Step
264
- ? MaybeRepeatable<Item>
264
+ ? undefined | Marko.AttrTag<Item>
265
265
  : Step extends 0
266
266
  ? never
267
267
  : [To] extends [From extends void ? 0 : From]
268
268
  ? undefined
269
- : Repeatable<Item>
269
+ : Marko.AttrTag<Item>
270
270
  : never;
271
271
  };
272
272
 
273
- export function forAttrTag<Return>(attrs: {
273
+ export function forAttrTag<const Return>(attrs: {
274
274
  input:
275
275
  | {
276
276
  of: any;
@@ -287,8 +287,8 @@ declare global {
287
287
  }): {
288
288
  [Key in keyof Return]: Return[Key] extends
289
289
  | readonly (infer Item)[]
290
- | infer Item extends Record<PropertyKey, any>
291
- ? MaybeRepeatable<Item>
290
+ | (infer Item extends Record<PropertyKey, any>)
291
+ ? undefined | Marko.AttrTag<Item>
292
292
  : never;
293
293
  };
294
294
 
@@ -296,9 +296,13 @@ declare global {
296
296
  ...attrs: Attrs
297
297
  ): MergeAttrTags<Attrs>;
298
298
 
299
+ export function repeatedAttrTag<AttrTag>(
300
+ ...attrTags: Marko.AttrTag<AttrTag>[]
301
+ ): AttrTag;
302
+
299
303
  // TODO: this could be improved.
300
304
  // currently falls back to DefaultRenderer too eagerly.
301
- export type DynamicRenderer<Name> = 0 extends 1 & Name
305
+ export type DynamicRenderer<Name> = [0] extends [1 & Name]
302
306
  ? DefaultRenderer
303
307
  : [Name] extends [Marko.Template]
304
308
  ? TemplateRenderer<Name>
@@ -306,14 +310,10 @@ declare global {
306
310
  ? NativeTagRenderer<Name>
307
311
  : [Name] extends [AnyMarkoBody]
308
312
  ? 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
- >
313
+ : [Name] extends [
314
+ { renderBody?: infer Name extends AnyMarkoBody },
315
+ ]
316
+ ? BodyRenderer<Name>
317
317
  : DefaultRenderer;
318
318
 
319
319
  export type TemplateRenderer<Template> = Template extends {
@@ -345,12 +345,8 @@ declare global {
345
345
  export interface BodyRenderer<Body extends AnyMarkoBody> {
346
346
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
347
347
  (): () => <__marko_internal_input extends unknown>(
348
- input: Marko.Directives &
349
- RenderBodyInput<BodyParameters<Body>> &
350
- Relate<
351
- __marko_internal_input,
352
- Marko.Directives & RenderBodyInput<BodyParameters<Body>>
353
- >,
348
+ ...args: BodyParamsWithDefault<Body> &
349
+ Relate<__marko_internal_input, BodyParamsWithDefault<Body>>
354
350
  ) => ReturnAndScope<
355
351
  Scopes<__marko_internal_input>,
356
352
  BodyReturnType<Body>
@@ -397,17 +393,14 @@ type ReturnAndScope<Scope, Return> = {
397
393
  scope: Scope;
398
394
  };
399
395
 
400
- type RenderBodyInput<Args extends readonly unknown[]> = Args extends {
401
- length: infer Length;
402
- }
403
- ? number extends Length
404
- ? { value?: Args }
405
- : 0 extends Length
406
- ? { value?: [] }
407
- : { value: Args }
408
- : never;
396
+ type BodyParamsWithDefault<Body extends AnyMarkoBody> =
397
+ Body extends Marko.Body<infer Params, any>
398
+ ? Params extends []
399
+ ? [input?: Record<string, never>]
400
+ : Params
401
+ : never;
409
402
 
410
- type Scopes<Input> = 0 extends 1 & Input
403
+ type Scopes<Input> = [0] extends [1 & Input]
411
404
  ? never
412
405
  : Input extends Record<any, unknown>
413
406
  ? MergeScopes<FlatScopes<Input>>
@@ -425,7 +418,7 @@ type ComponentEventHandlers<Component extends Marko.Component> = {
425
418
 
426
419
  type FlatScopes<Input extends object, Objects = Input> = Input[keyof Input &
427
420
  (string | number)] extends infer Prop
428
- ? 0 extends 1 & Prop
421
+ ? [0] extends [1 & Prop]
429
422
  ? unknown
430
423
  : Prop extends (...args: any) => { [Marko._.scope]: infer Scope }
431
424
  ? unknown extends Scope
@@ -472,30 +465,25 @@ type MergeAttrTag<A, B> = {
472
465
  : never;
473
466
  };
474
467
 
475
- type MergeAttrTagValue<A, B> = A extends readonly any[]
476
- ? B extends readonly any[]
477
- ? [...A, ...B]
468
+ type MergeAttrTagValue<A, B> = A extends readonly (infer AType)[]
469
+ ? B extends readonly (infer BType)[]
470
+ ? AType | BType
478
471
  : B extends void
479
472
  ? A
480
- : [...A, B]
473
+ : AType | B
481
474
  : A extends void
482
475
  ? B
483
476
  : B extends void
484
477
  ? A
485
- : [A, B];
478
+ : A | B;
486
479
 
487
480
  type AttrTagByListSize<T, Item> = T extends
488
- | readonly [any, any, ...any[]]
489
- | readonly [...any[], any, any]
490
- | readonly [any, ...any[], any]
491
- ? Repeated<Item>
492
- : T extends readonly [any]
493
- ? Item
494
- : T extends readonly [any, ...any[]] | readonly [...any[], any]
495
- ? Repeatable<Item>
496
- : T extends readonly []
497
- ? undefined
498
- : MaybeRepeatable<Item>;
481
+ | readonly [any, ...any[]]
482
+ | readonly [...any[], any]
483
+ ? Marko.AttrTag<Item>
484
+ : T extends readonly []
485
+ ? undefined
486
+ : undefined | Marko.AttrTag<Item>;
499
487
 
500
488
  type AttrTagByObjectSize<
501
489
  Value,
@@ -505,22 +493,7 @@ type AttrTagByObjectSize<
505
493
  > = CheckNever<
506
494
  Keys,
507
495
  undefined,
508
- CheckUnionSize<
509
- KnownKeys,
510
- [Keys] extends [KnownKeys] ? Item : Repeatable<Item>,
511
- Repeated<Item>,
512
- MaybeRepeatable<Item>
513
- >
514
- >;
515
-
516
- type CheckUnionSize<T, IfOne, IfMany, Else, Copy = T> = CheckNever<
517
- T,
518
- Else,
519
- T extends T
520
- ? (Copy extends T ? never : true) extends never
521
- ? IfOne
522
- : IfMany
523
- : never
496
+ CheckNever<KnownKeys, Marko.AttrTag<Item>, undefined | Marko.AttrTag<Item>>
524
497
  >;
525
498
 
526
499
  type RecordKeys<T> = keyof {
@@ -545,8 +518,4 @@ type UnionToIntersection<T> = (T extends any ? (_: T) => any : never) extends (
545
518
  ? U
546
519
  : never;
547
520
 
548
- type Repeated<T> = [T, T, ...T[]];
549
- type Repeatable<T> = T | Repeated<T>;
550
- type MaybeRepeatable<T> = undefined | Repeatable<T>;
551
-
552
521
  export {};
package/package.json CHANGED
@@ -1,28 +1,26 @@
1
1
  {
2
2
  "name": "@marko/language-tools",
3
3
  "description": "Marko Language Tools",
4
- "version": "2.3.1",
4
+ "version": "2.4.1",
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
- "@babel/helper-validator-identifier": "^7.22.20",
11
- "@babel/parser": "^7.23.9",
12
- "@luxass/strip-json-comments": "^1.2.0",
10
+ "@babel/parser": "^7.25.8",
11
+ "@luxass/strip-json-comments": "^1.3.2",
13
12
  "htmljs-parser": "^5.5.2",
14
13
  "relative-import-path": "^1.0.0"
15
14
  },
16
15
  "devDependencies": {
17
- "@babel/code-frame": "^7.23.5",
18
- "@marko/compiler": "^5.34.6",
19
- "@marko/translator-default": "^5.31.13",
16
+ "@babel/code-frame": "^7.25.7",
17
+ "@marko/compiler": "^5.37.19",
18
+ "@marko/translator-default": "^6.0.19",
20
19
  "@types/babel__code-frame": "^7.0.6",
21
- "@types/babel__helper-validator-identifier": "^7.15.2",
22
- "@typescript/vfs": "^1.5.0",
23
- "marko": "^5.32.7",
20
+ "@typescript/vfs": "^1.6.0",
21
+ "marko": "^5.35.27",
24
22
  "mitata": "^0.1.8",
25
- "tsx": "^4.7.0"
23
+ "tsx": "^4.19.1"
26
24
  },
27
25
  "exports": {
28
26
  ".": {
@@ -1 +0,0 @@
1
- export declare function isValidIdentifier(name: string): boolean;