marko 6.0.0-next.3.85 → 6.0.0

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.
@@ -3,9 +3,11 @@ declare module "@marko/compiler/dist/types" {
3
3
  interface NodeExtra {
4
4
  confident?: boolean;
5
5
  computed?: unknown;
6
+ nullable?: boolean;
6
7
  }
7
8
  }
8
9
  export default function evaluate<T extends t.Expression>(value: T): T["extra"] & {
9
10
  confident: boolean;
11
+ nullable: boolean;
10
12
  computed: unknown;
11
13
  };
@@ -1,3 +1,6 @@
1
1
  import { types as t } from "@marko/compiler";
2
2
  export declare function generateUid(name?: string): string;
3
3
  export declare function generateUidIdentifier(name?: string): t.Identifier;
4
+ export declare function getSharedUid(name: string): string;
5
+ export declare function usedSharedUid(name: string): boolean;
6
+ export declare function getSharedUidIdentifier(name: string): t.Identifier;
@@ -5,11 +5,11 @@ export type Compare<T> = (a: T, b: T) => number;
5
5
  export declare class Sorted<T> {
6
6
  compare: Compare<T>;
7
7
  constructor(compare: Compare<T>);
8
- add<U extends T>(data: Opt<U>, item: U): OneMany<U>;
9
- union<U extends T>(a: Opt<U>, b: Opt<U>): Opt<U>;
10
- find<U extends T>(data: Opt<U>, item: U): U | undefined;
11
- findIndex<U extends T>(data: Opt<U>, item: U): number;
12
- isSuperset<U extends T>(superset: Opt<U>, subset: Opt<U>): boolean;
8
+ add<U extends NonNullable<T>>(data: Opt<U>, item: U): OneMany<U>;
9
+ union<U extends NonNullable<T>>(a: Opt<U>, b: Opt<U>): Opt<U>;
10
+ find<U extends NonNullable<T>>(data: Opt<U>, item: U): U | undefined;
11
+ findIndex<U extends NonNullable<T>>(data: Opt<U>, item: U): number;
12
+ isSuperset<U extends NonNullable<T>>(superset: Opt<U>, subset: Opt<U>): boolean;
13
13
  }
14
14
  export declare function push<T>(data: Opt<T>, item: T): Opt<T>;
15
15
  export declare function concat<T>(a: Opt<T>, b: Opt<T>): Opt<T>;
@@ -18,6 +18,8 @@ export declare function filter<T>(data: Opt<T>, cb: (item: T) => boolean): Opt<T
18
18
  export declare function forEach<T>(data: Opt<T>, cb: (item: T, index: number) => void): void;
19
19
  export declare function fromIter<T>(data: Iterable<T>): T | Many<T> | undefined;
20
20
  export declare function find<T>(data: Opt<T>, cb: (item: T, index: number) => boolean): Opt<T>;
21
- export declare function map<T, R>(data: Opt<T>, cb: (item: T, index: number) => R): R[];
21
+ export declare function toArray<T, R>(data: Opt<T>, cb: (item: T, index: number) => R): R[];
22
+ export declare function filterMap<T, R>(data: Opt<T>, cb: (item: T) => undefined | R): Opt<R>;
22
23
  export declare function findSorted<T>(compare: Compare<T>, data: T[], item: T): T | undefined;
23
- export declare function addSorted<T>(compare: Compare<T>, data: T[], item: T): T[];
24
+ export declare function findIndexSorted<T>(compare: Compare<T>, data: T[], item: T): number;
25
+ export declare function addSorted<T, U extends T[]>(compare: Compare<T>, data: U, item: T): U;
@@ -1,6 +1,7 @@
1
1
  import { types as t } from "@marko/compiler";
2
- import { type Many, type Opt, Sorted } from "./optional";
2
+ import { type Many, type OneMany, type Opt, Sorted } from "./optional";
3
3
  import { type Section } from "./sections";
4
+ import { type SerializeReason } from "./serialize-reasons";
4
5
  declare const kIsInvoked: unique symbol;
5
6
  export type Aliases = undefined | Binding | {
6
7
  [property: string]: Aliases;
@@ -21,14 +22,13 @@ export interface Binding {
21
22
  section: Section;
22
23
  closureSections: Opt<Section>;
23
24
  sources: Opt<Binding>;
24
- serializeSources: Opt<InputBinding> | true;
25
+ serializeSources: undefined | SerializeReason;
25
26
  aliases: Set<Binding>;
26
27
  hoists: Map<Section, Binding>;
27
28
  property: string | undefined;
28
29
  propertyAliases: Map<string, Binding>;
29
30
  excludeProperties: undefined | string[];
30
31
  upstreamAlias: Binding | undefined;
31
- upstreamExpression: t.NodeExtra | undefined;
32
32
  downstreamExpressions: Set<ReferencedExtra>;
33
33
  scopeOffset: Binding | undefined;
34
34
  export: string | undefined;
@@ -65,17 +65,19 @@ declare module "@marko/compiler/dist/types" {
65
65
  interface FunctionExpressionExtra extends FunctionExtra {
66
66
  }
67
67
  }
68
- export declare function createBinding(name: string, type: Binding["type"], section: Section, upstreamAlias?: Binding["upstreamAlias"], upstreamExpression?: Binding["upstreamExpression"], property?: string, loc?: t.SourceLocation | null, declared?: boolean): Binding;
69
- export declare function trackVarReferences(tag: t.NodePath<t.MarkoTag>, type: BindingType, upstreamAlias?: Binding["upstreamAlias"], upstreamExpression?: Binding["upstreamExpression"]): void;
70
- export declare function trackParamsReferences(body: t.NodePath<t.MarkoTagBody | t.Program>, type: BindingType, upstreamAlias?: Binding["upstreamAlias"], upstreamExpression?: Binding["upstreamExpression"]): void;
68
+ export declare function createBinding(name: string, type: Binding["type"], section: Section, upstreamAlias?: Binding["upstreamAlias"], property?: string, loc?: t.SourceLocation | null, declared?: boolean): Binding;
69
+ export declare function trackVarReferences(tag: t.NodePath<t.MarkoTag>, type: BindingType, upstreamAlias?: Binding["upstreamAlias"]): Binding | undefined;
70
+ export declare function trackParamsReferences(body: t.NodePath<t.MarkoTagBody | t.Program>, type: BindingType, upstreamAlias?: Binding["upstreamAlias"]): Binding | undefined;
71
71
  export declare function trackHoistedReference(referencePath: t.NodePath<t.Identifier>, binding: Binding): void;
72
72
  export declare function setReferencesScope(path: t.NodePath<any>): void;
73
- export declare function mergeReferences(section: Section, target: t.Node, nodes: (t.Node | undefined)[]): void;
73
+ export declare function mergeReferences<T extends t.Node>(section: Section, target: T, nodes: (t.Node | undefined)[]): NonNullable<T["extra"]>;
74
+ export declare function compareSerializeReasons(a: OneMany<InputBinding>, b: OneMany<InputBinding>): number;
74
75
  export declare function finalizeReferences(): void;
75
76
  export declare const intersectionMeta: WeakMap<Intersection, {
76
77
  id: number;
77
78
  scopeOffset: Binding | undefined;
78
79
  }>;
80
+ export declare function setBindingValueExpr(binding: Binding, valueExpr: undefined | boolean | Opt<t.NodeExtra>): void;
79
81
  export declare const bindingUtil: Sorted<Binding>;
80
82
  export declare function addReadToExpression(path: t.NodePath, binding: Binding, node?: t.Identifier | t.MemberExpression): ReferencedExtra;
81
83
  export declare function dropReferences(node: t.Node | t.Node[]): void;
@@ -1,6 +1,8 @@
1
1
  import { types as t } from "@marko/compiler";
2
- import { type OneMany, Sorted } from "./optional";
3
- import type { Binding, InputBinding, ReferencedBindings } from "./references";
2
+ import type { AccessorPrefix } from "../../common/accessor.debug";
3
+ import { Sorted } from "./optional";
4
+ import type { Binding, ReferencedBindings } from "./references";
5
+ import { type SerializeReason } from "./serialize-reasons";
4
6
  export declare enum ContentType {
5
7
  Comment = 0,
6
8
  Dynamic = 1,
@@ -16,14 +18,15 @@ export interface Section {
16
18
  parent: Section | undefined;
17
19
  sectionAccessor: {
18
20
  binding: Binding;
19
- prefix: string;
21
+ prefix: AccessorPrefix;
20
22
  } | undefined;
21
23
  params: undefined | Binding;
22
24
  referencedClosures: ReferencedBindings;
23
25
  referencedHoists: ReferencedBindings;
24
26
  bindings: ReferencedBindings;
25
27
  hoisted: ReferencedBindings;
26
- serializeReasons: Map<symbol, true | OneMany<InputBinding>>;
28
+ serializeReason: undefined | SerializeReason;
29
+ serializeReasons: Map<symbol, SerializeReason>;
27
30
  isHoistThrough: true | undefined;
28
31
  assignments: ReferencedBindings;
29
32
  upstreamExpression: t.NodeExtra | undefined;
@@ -45,7 +48,6 @@ declare module "@marko/compiler/dist/types" {
45
48
  section?: Section;
46
49
  }
47
50
  }
48
- export declare const kBranchSerializeReason: unique symbol;
49
51
  export declare const sectionUtil: Sorted<Section>;
50
52
  export declare function startSection(path: t.NodePath<t.MarkoTagBody | t.Program>): Section | undefined;
51
53
  export declare function getOrCreateSection(path: t.NodePath<any>): Section;
@@ -1,22 +1,33 @@
1
1
  import { types as t } from "@marko/compiler";
2
2
  import { AccessorPrefix, AccessorProp } from "../../common/types";
3
- import { type Opt } from "./optional";
3
+ import { type OneMany, type Opt } from "./optional";
4
4
  import { type Binding, type InputBinding, type ReferencedBindings } from "./references";
5
5
  import type { Section } from "./sections";
6
- export declare function forcePropSerialize(section: Section, extra: t.NodeExtra, prop: AccessorProp | symbol): void;
7
- export declare function forceBindingSerialize(section: Section, binding: Binding, prefix?: AccessorPrefix): void;
8
- export declare function isPropForceSerialized(section: Section, extra: t.NodeExtra, prop: AccessorProp | symbol): boolean;
9
- export declare function isBindingForceSerialized(section: Section, binding: Binding, prefix?: AccessorPrefix): boolean;
10
- export declare function addPropSerializeReasonExpr(section: Section, extra: t.NodeExtra, prop: AccessorProp | symbol, expr: undefined | boolean | Opt<t.NodeExtra>): void;
11
- export declare function addBindingSerializeReasonExpr(section: Section, binding: Binding, expr: undefined | boolean | Opt<t.NodeExtra>, prefix?: AccessorPrefix): void;
12
- export declare function addPropSerializeReasonRef(section: Section, extra: t.NodeExtra, prop: AccessorProp | symbol, ref: undefined | boolean | ReferencedBindings): void;
13
- export declare function addBindingSerializeReasonRef(section: Section, binding: Binding, ref: undefined | boolean | ReferencedBindings, prefix?: AccessorPrefix): void;
14
- export declare function addPropSerializeReason(section: Section, extra: t.NodeExtra, prop: AccessorProp | symbol, reason: boolean | Opt<InputBinding>): void;
15
- export declare function addBindingSerializeReason(section: Section, binding: Binding, reason: boolean | Opt<InputBinding>, prefix?: AccessorPrefix): void;
16
- export declare function getPropSerializeReason(section: Section, extra: t.NodeExtra, prop: AccessorProp | symbol): true | import("./optional").OneMany<InputBinding> | undefined;
17
- export declare function getBindingSerializeReason(section: Section, binding: Binding, prefix?: AccessorPrefix): true | import("./optional").OneMany<InputBinding> | undefined;
18
- export declare function consumeSerializeReasonExprs(section: Section): Map<symbol, Opt<t.NodeExtra>> | undefined;
19
- export declare function getSerializeSourcesForExpr(expr: t.NodeExtra): true | Opt<InputBinding>;
6
+ export type DynamicSerializeReason = OneMany<InputBinding>;
7
+ export type DynamicSerializeReasons = [
8
+ DynamicSerializeReason,
9
+ ...DynamicSerializeReason[]
10
+ ];
11
+ export type SerializeReason = true | DynamicSerializeReason;
12
+ export type SerializeKey = symbol & {
13
+ __serialize_key__: 1;
14
+ };
15
+ export declare function forceParentSectionsSerialize(from: Section, to?: Section): void;
16
+ export declare function forceSectionSerialize(section: Section, prop?: AccessorProp | symbol): void;
17
+ export declare function forceBindingSerialize(section: Section, binding: Binding, prefix?: AccessorPrefix | symbol): void;
18
+ export declare function isSectionForceSerialized(section: Section, prop?: AccessorProp | symbol): boolean;
19
+ export declare function isBindingForceSerialized(section: Section, binding: Binding, prefix?: AccessorPrefix | symbol): boolean;
20
+ export declare function addSectionSerializeReasonExpr(section: Section, expr: undefined | boolean | Opt<t.NodeExtra>, prop?: AccessorProp | symbol): void;
21
+ export declare function addBindingSerializeReasonExpr(section: Section, binding: Binding, expr: undefined | boolean | Opt<t.NodeExtra>, prefix?: AccessorPrefix | symbol): void;
22
+ export declare function addSectionSerializeReasonRef(section: Section, ref: undefined | boolean | ReferencedBindings, prop?: AccessorProp | symbol): void;
23
+ export declare function addBindingSerializeReasonRef(section: Section, binding: Binding, ref: undefined | boolean | ReferencedBindings, prefix?: AccessorPrefix | symbol): void;
24
+ export declare function addSectionSerializeReason(section: Section, reason: undefined | false | SerializeReason, prop?: AccessorProp | symbol): void;
25
+ export declare function addBindingSerializeReason(section: Section, binding: Binding, reason: undefined | false | SerializeReason, prefix?: AccessorPrefix | symbol): void;
26
+ export declare function getSectionSerializeReason(section: Section, prop?: AccessorProp | symbol): SerializeReason | undefined;
27
+ export declare function getBindingSerializeReason(section: Section, binding: Binding, prefix?: AccessorPrefix | symbol): SerializeReason | undefined;
28
+ export declare function applySerializeReasonExprs(section: Section): void;
29
+ export declare function finalizeSectionSerializeReasons(section: Section): void;
30
+ export declare function getSerializeSourcesForExpr(expr: t.NodeExtra): true | InputBinding | import("./optional").Many<InputBinding> | undefined;
20
31
  export declare function getSerializeSourcesForExprs(exprs: Opt<t.NodeExtra>): true | Opt<InputBinding>;
21
- export declare function getSerializeSourcesForRef(ref: ReferencedBindings): true | Opt<InputBinding>;
22
- export declare function mergeSerializeReasons<T extends true | Opt<InputBinding>>(a: T, b: T): T;
32
+ export declare function getSerializeSourcesForRef(ref: ReferencedBindings): true | InputBinding | import("./optional").Many<InputBinding> | undefined;
33
+ export declare function mergeSerializeReasons<T extends undefined | SerializeReason>(a: T, b: T): T;
@@ -34,9 +34,8 @@ export type Signal = {
34
34
  };
35
35
  type closureSignalBuilder = (closure: Binding, render: t.Expression) => t.Expression;
36
36
  export declare function setClosureSignalBuilder(tag: t.NodePath<t.MarkoTag>, builder: closureSignalBuilder): void;
37
- export declare function serializeSectionIfNeeded(section: Section, reason: undefined | boolean | Opt<Binding>): void;
37
+ export declare function setSectionSerializedValue(section: Section, prop: AccessorProp, expression: t.Expression): void;
38
38
  export declare function setBindingSerializedValue(section: Section, binding: Binding, expression: t.Expression, prefix?: AccessorPrefix): void;
39
- export declare function setPropSerializedValue(section: Section, extra: t.NodeExtra, prop: AccessorProp, expression: t.Expression): void;
40
39
  export declare function setSerializedValue(section: Section, key: string, expression: t.Expression): void;
41
40
  export declare const getHTMLSectionStatements: (section: Section) => t.Statement[];
42
41
  export declare function getHoistFunctionIdentifier(hoistedBinding: Binding): t.Identifier;
@@ -1,6 +1,7 @@
1
1
  import { types as t } from "@marko/compiler";
2
2
  import { type Section } from "../util/sections";
3
3
  import { type Binding } from "./references";
4
+ import type { SerializeReason } from "./serialize-reasons";
4
5
  export declare function writeTo(path: t.NodePath<any>, trailer?: boolean): (strs: TemplateStringsArray, ...exprs: Array<string | t.Expression>) => void;
5
6
  export declare function consumeHTML(path: t.NodePath<any>): t.ExpressionStatement | undefined;
6
7
  export declare function flushBefore(path: t.NodePath<any>): void;
@@ -10,4 +11,4 @@ export declare function getSectionMeta(section: Section): {
10
11
  walks: t.Expression | undefined;
11
12
  writes: t.Expression | undefined;
12
13
  };
13
- export declare function markNode(path: t.NodePath<t.MarkoTag | t.MarkoPlaceholder>, binding: Binding): void;
14
+ export declare function markNode(path: t.NodePath<t.MarkoTag | t.MarkoPlaceholder>, nodeBinding: Binding, reason: undefined | false | SerializeReason): void;
@@ -1,6 +1,6 @@
1
1
  import { types as t } from "@marko/compiler";
2
2
  import { type Binding } from "../util/references";
3
- declare const kBinding: unique symbol;
3
+ declare const kNodeBinding: unique symbol;
4
4
  declare const kSiblingText: unique symbol;
5
5
  declare enum SiblingText {
6
6
  None = 0,
@@ -9,7 +9,7 @@ declare enum SiblingText {
9
9
  }
10
10
  declare module "@marko/compiler/dist/types" {
11
11
  interface MarkoPlaceholderExtra {
12
- [kBinding]?: Binding;
12
+ [kNodeBinding]?: Binding;
13
13
  [kSiblingText]?: SiblingText;
14
14
  }
15
15
  }
@@ -1,5 +1,8 @@
1
1
  import { types as t } from "@marko/compiler";
2
+ import type { DynamicSerializeReason } from "../../util/serialize-reasons";
2
3
  export declare function getTemplateContentName(): string;
4
+ export declare function getExprIfSerialized<T extends undefined | boolean | DynamicSerializeReason, U extends t.Expression>(reason: T, expr: U): T extends {} ? U : undefined;
5
+ export declare function getSerializeGuard<T extends undefined | boolean | DynamicSerializeReason>(reason: T): T extends {} ? t.Expression : undefined;
3
6
  declare const _default: {
4
7
  translate: {
5
8
  exit(this: unknown, program: t.NodePath<t.Program>): void;
@@ -1,5 +1,6 @@
1
1
  import { types as t } from "@marko/compiler";
2
2
  import { type Binding } from "../../util/references";
3
+ import type { DynamicSerializeReason, DynamicSerializeReasons, SerializeReason } from "../../util/serialize-reasons";
3
4
  export declare let cleanIdentifier: t.Identifier;
4
5
  export declare let scopeIdentifier: t.Identifier;
5
6
  export declare function isScopeIdentifier(node: t.Node): node is t.Identifier;
@@ -13,12 +14,14 @@ export type TemplateExport = {
13
14
  export type TemplateExports = TemplateExport["props"];
14
15
  declare module "@marko/compiler/dist/types" {
15
16
  interface ProgramExtra {
17
+ inputSerializeReasons?: DynamicSerializeReasons;
18
+ returnSerializeReason?: SerializeReason;
19
+ returnValueExpr?: t.NodeExtra;
16
20
  domExports?: {
17
21
  template: string;
18
22
  walks: string;
19
23
  setup: string;
20
24
  input: TemplateExport | undefined;
21
- closures: string;
22
25
  };
23
26
  }
24
27
  }
@@ -37,3 +40,4 @@ declare const _default: {
37
40
  };
38
41
  };
39
42
  export default _default;
43
+ export declare function resolveSerializeReasonId(inputSerializeReasons: DynamicSerializeReasons, reason: DynamicSerializeReason): number;
@@ -2,10 +2,12 @@ import { types as t } from "@marko/compiler";
2
2
  import { type Binding } from "../../util/references";
3
3
  declare const kChildScopeBinding: unique symbol;
4
4
  declare const kChildOffsetScopeBinding: unique symbol;
5
+ declare const kChildInputSerializePropIds: unique symbol;
5
6
  declare module "@marko/compiler/dist/types" {
6
7
  interface MarkoTagExtra {
7
8
  [kChildScopeBinding]?: Binding;
8
9
  [kChildOffsetScopeBinding]?: Binding;
10
+ [kChildInputSerializePropIds]?: [symbol, ...symbol[]];
9
11
  }
10
12
  }
11
13
  declare const _default: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "marko",
3
- "version": "6.0.0-next.3.85",
3
+ "version": "6.0.0",
4
4
  "description": "Optimized runtime for Marko templates.",
5
5
  "keywords": [
6
6
  "api",
@@ -48,7 +48,7 @@
48
48
  "build": "node -r ~ts ./scripts/bundle.ts"
49
49
  },
50
50
  "dependencies": {
51
- "@marko/compiler": "^5.39.17",
51
+ "@marko/compiler": "^5.39.18",
52
52
  "csstype": "^3.1.3",
53
53
  "magic-string": "^0.30.17"
54
54
  },