svelte-effect-runtime 3.4.7 → 3.4.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/chunks/{client-CsVu54pU.js → client-D_DE2cFa.js} +11 -42
- package/.dist/chunks/{client-CsVu54pU.js.map → client-D_DE2cFa.js.map} +1 -1
- package/.dist/chunks/{dispatcher-pHH4JcFR.js → dispatcher-BdvO4AAS.js} +2 -2
- package/.dist/chunks/{dispatcher-pHH4JcFR.js.map → dispatcher-BdvO4AAS.js.map} +1 -1
- package/.dist/chunks/{dispatcher-LtvFKYUp.js → dispatcher-NpL5xhWF.js} +3 -3
- package/.dist/chunks/{dispatcher-LtvFKYUp.js.map → dispatcher-NpL5xhWF.js.map} +1 -1
- package/.dist/chunks/{errors-Dcf0MVbq.js → errors-Bl3NVEez.js} +21 -3
- package/.dist/chunks/{errors-Dcf0MVbq.js.map → errors-Bl3NVEez.js.map} +1 -1
- package/.dist/chunks/live-DEmS7qpO.js +103 -0
- package/.dist/chunks/live-DEmS7qpO.js.map +1 -0
- package/.dist/chunks/{runtime-ekkMQ-wL.js → runtime-BNNW2GDT.js} +3 -3
- package/.dist/chunks/{runtime-ekkMQ-wL.js.map → runtime-BNNW2GDT.js.map} +1 -1
- package/.dist/chunks/{transform-CEK6Ccll.js → transform-C2fCVPL_.js} +172 -105
- package/.dist/chunks/transform-C2fCVPL_.js.map +1 -0
- package/.dist/dispatcher.js +1 -1
- package/.dist/errors.d.ts +15 -0
- package/.dist/generators.d.ts +3 -1
- package/.dist/internal/generators.js +20 -3
- package/.dist/internal/generators.js.map +1 -0
- package/.dist/internal/remote-client.js +1 -1
- package/.dist/live.d.ts +100 -0
- package/.dist/markup/promise.js +1 -1
- package/.dist/markup/run.js +1 -1
- package/.dist/markup/transform/constants.d.ts +1 -0
- package/.dist/markup/transform/types.d.ts +1 -0
- package/.dist/markup/transform.js +1 -1
- package/.dist/markup/value.js +1 -1
- package/.dist/mod.d.ts +5 -2
- package/.dist/mod.js +4 -3
- package/.dist/mod.js.map +1 -1
- package/.dist/remote/client/query.d.ts +6 -16
- package/.dist/remote/client/types.d.ts +2 -11
- package/.dist/remote/client.js +1 -1
- package/.dist/remote/server.js +1 -1
- package/.dist/runtime/transform.js +57 -26
- package/.dist/runtime/transform.js.map +1 -1
- package/.dist/script-transform/imports.d.ts +2 -0
- package/.dist/script-transform/types.d.ts +8 -0
- package/.dist/server/effects.d.ts +7 -7
- package/.dist/server/index.d.ts +3 -1
- package/.dist/server/types.d.ts +25 -50
- package/.dist/server/wrappers.d.ts +2 -2
- package/.dist/server.d.ts +2 -2
- package/.dist/server.js +40 -65
- package/.dist/server.js.map +1 -1
- package/.dist/yieldable.d.ts +41 -0
- package/package.json +1 -1
- package/.dist/chunks/transform-CEK6Ccll.js.map +0 -1
package/.dist/mod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.js","names":[],"sources":["../../modules/svelte-effect-runtime/src/mod.ts"],"sourcesContent":["import { Dispatcher as InternalDispatcher } from \"$/dispatcher.ts\";\nimport { ServerOnlyImportError } from \"$/errors.ts\";\nimport type { ErrorEffectFactory, RedirectEffectFactory } from \"$/server/control-flow.ts\";\nimport type { RequestEvent as RequestEventShape } from \"$/server/runtime.ts\";\nimport type {\n\tCommandFactory,\n\tFormFactory,\n\tPrerenderFactory,\n\tQueryFactory,\n\tServerRuntimeFactory,\n} from \"$/server/types.ts\";\nimport type { Context, Layer, ManagedRuntime } from \"effect\";\n\n/**\n * Public API surface for `svelte-effect-runtime`.\n *\n * Call {@link ClientRuntime.make} in `hooks.client.ts`, call\n * {@link ServerRuntime.make} in `hooks.server.ts`, and let the Vite plugin\n * route server-only helpers to the server entrypoint automatically.\n *\n * @module\n */\n\n/**\n * Client-side runtime singleton. Call `ClientRuntime.make(layer?)` once\n * in `hooks.client.ts` to provide services to every component's effect\n * blocks.\n *\n * If never called, a default empty-layer runtime is created lazily on\n * the first `yield*` expression.\n *\n * @example\n * ```ts\n * import { ClientRuntime } from \"svelte-effect-runtime\";\n * import { Db } from \"./db.ts\";\n *\n * ClientRuntime.make(Db.Live);\n * ```\n *\n * @since 2.0.0\n */\nexport class ClientRuntime {\n\t/**\n\t * Build and cache the client-side dispatcher runtime.\n\t *\n\t * @since 2.0.0\n\t * @param layer - Optional Effect layer to provide to the runtime.\n\t */\n\tstatic make<R = never>(layer?: Layer.Layer<R>): void {\n\t\tInternalDispatcher.make(layer);\n\t}\n}\n\n/**\n * Server-side runtime singleton export. In SvelteKit server files the Vite\n * plugin rewrites root imports to `svelte-effect-runtime/server`, so this\n * name resolves to the real server implementation before it is evaluated.\n *\n * @example\n * ```ts\n * import { ServerRuntime } from \"svelte-effect-runtime\";\n *\n * ServerRuntime.make();\n * ```\n *\n * @since 2.0.0\n */\nexport const ServerRuntime: ServerRuntimeFactory = make_server_only_class(\"ServerRuntime\") as never;\n\n/**\n * Remote query factory export for `.remote.ts` files imported from the root\n * entrypoint. The Vite plugin rewrites it to the real server implementation.\n *\n * @example\n * ```ts\n * import { Query } from \"svelte-effect-runtime\";\n *\n * export const GetPosts = Query(Effect.succeed([]));\n * ```\n *\n * @since 2.0.0\n */\nexport const Query: QueryFactory = Object.assign(make_server_only_function(\"Query\"), {\n\tbatch: make_server_only_function(\"Query.batch\"),\n\tlive: make_server_only_function(\"Query.live\"),\n}) as never;\n\n/**\n * Remote command factory export for `.remote.ts` files imported from the root\n * entrypoint. The Vite plugin rewrites it to the real server implementation.\n *\n * @example\n * ```ts\n * import { Command } from \"svelte-effect-runtime\";\n *\n * export const SavePost = Command(Schema.String, (id) => Effect.succeed(id));\n * ```\n *\n * @since 2.0.0\n */\nexport const Command: CommandFactory = make_server_only_function(\"Command\") as never;\n\n/**\n * SvelteKit HTTP error control-flow export for `.remote.ts` files imported\n * from the root entrypoint. The Vite plugin rewrites it to the real server\n * implementation.\n *\n * @example\n * ```ts\n * import { Error } from \"svelte-effect-runtime\";\n *\n * return yield* Error(\"NotFound\", \"Post not found\");\n * ```\n *\n * @since 2.3.0\n */\nexport const Error: ErrorEffectFactory = make_server_only_function(\"Error\") as never;\n\n/**\n * Remote form factory export for `.remote.ts` files imported from the root\n * entrypoint. The Vite plugin rewrites it to the real server implementation.\n *\n * @example\n * ```ts\n * import { Form } from \"svelte-effect-runtime\";\n *\n * export const CreatePost = Form(PostInput, ({ data }) => Effect.succeed(data));\n * ```\n *\n * @since 2.0.0\n */\nexport const Form: FormFactory = make_server_only_function(\"Form\") as never;\n\n/**\n * Remote prerender factory export for `.remote.ts` files imported from the\n * root entrypoint. The Vite plugin rewrites it to the real server\n * implementation.\n *\n * @example\n * ```ts\n * import { Prerender } from \"svelte-effect-runtime\";\n *\n * export const GetBuildInfo = Prerender(() => Effect.succeed(\"ready\"));\n * ```\n *\n * @since 2.0.0\n */\nexport const Prerender: PrerenderFactory = make_server_only_function(\"Prerender\") as never;\n\n/**\n * SvelteKit redirect control-flow export for `.remote.ts` files imported from\n * the root entrypoint. The Vite plugin rewrites it to the real server\n * implementation.\n *\n * @example\n * ```ts\n * import { Redirect } from \"svelte-effect-runtime\";\n *\n * return yield* Redirect(\"SeeOther\", \"/posts\");\n * ```\n *\n * @since 2.3.0\n */\nexport const Redirect: RedirectEffectFactory = make_server_only_function(\"Redirect\") as never;\n\n/**\n * Current SvelteKit request event service export for `.remote.ts` files\n * imported from the root entrypoint. The Vite plugin rewrites it to the real\n * server implementation.\n *\n * @example\n * ```ts\n * import { RequestEvent } from \"svelte-effect-runtime\";\n *\n * const event = yield* RequestEvent;\n * ```\n *\n * @since 2.0.0\n */\nexport const RequestEvent: Context.Reference<RequestEventShape> = make_server_only_function(\n\t\"RequestEvent\",\n) as never;\n\n/**\n * Returns the active server runtime when imported from a server file. The Vite\n * plugin rewrites root imports to the real server implementation.\n *\n * @example\n * ```ts\n * import { get_server_runtime_or_throw } from \"svelte-effect-runtime\";\n *\n * const runtime = get_server_runtime_or_throw();\n * ```\n *\n * @since 2.0.0\n */\nexport const get_server_runtime_or_throw: () => ManagedRuntime.ManagedRuntime<unknown, never> =\n\tmake_server_only_function(\"get_server_runtime_or_throw\") as never;\n\n/** Re-export error types users need for typed catch handlers. */\nexport type {\n\tFormError,\n\tFormIssue,\n\tRemoteFailure,\n\tRemoteHttpError,\n\tRemoteTransportError,\n\tRemoteValidationError,\n} from \"$/remote/shared.ts\";\n\nexport {\n\tAsyncEffectInEventCallbackError,\n\tAsyncEffectInSyncRuneError,\n\tAwaitInEffectWorkError,\n\tBatchQueryHandlerMissingError,\n\tDispatcherDisposedError,\n\tInvalidCommandFactoryError,\n\tInvalidLiveQueryFactoryError,\n\tInvalidLiveQueryReturnError,\n\tInvalidQueryFactoryError,\n\tInvalidRemoteFormResponseError,\n\tPreprocessError,\n\tRemoteErrorDecodeError,\n\tRemoteFormEndpointMissingError,\n\tRemoteHelperContextError,\n\tRemoteHelperError,\n\tRequestEventUnavailableError,\n\tRuntimeAlreadyInitializedError,\n\tRuntimeError,\n\tServerOnlyImportError,\n\tSvelteKitServerExportUnavailableError,\n\tUncheckedCommandHandlerMissingError,\n\tUncheckedFormHandlerMissingError,\n\tUncheckedLiveQueryHandlerMissingError,\n\tUncheckedPrerenderHandlerMissingError,\n\tUncheckedQueryHandlerMissingError,\n\tUnknownRuntimeError,\n\tUnsupportedMarkupEffectPositionError,\n\tUnsupportedRemoteFormResponseError,\n\tVitePreTransformPluginConflictError,\n\tYieldStarInEventCallbackError,\n} from \"$/errors.ts\";\n\nexport {\n\tis_form_error,\n\tis_remote_http_error,\n\tis_remote_transport_error,\n\tis_remote_validation_error,\n} from \"$/remote/shared.ts\";\n\n/** Re-export app setup helpers so users can import them from root. */\nexport { effect, type EffectOptions } from \"$/vite.ts\";\n\n/** Re-export server helper types from the root entrypoint. */\nexport type {\n\tErrorBody,\n\tErrorEffectFactory,\n\tErrorProperties,\n\tErrorStatus,\n\tErrorStatusName,\n\tRedirectEffectFactory,\n\tRedirectOptions,\n\tRedirectStatus,\n\tRedirectStatusName,\n} from \"$/server/control-flow.ts\";\n\n/** Re-export server helper types from the root entrypoint. */\nexport type {\n\tCommandFactory,\n\tEffectLike,\n\tEffectRemoteBatchHandler,\n\tEffectRemoteCommand,\n\tEffectRemoteForm,\n\tEffectRemoteFunction,\n\tEffectRemoteLiveQuery,\n\tEffectRemoteLiveQueryFunction,\n\tEffectRemoteLiveQueryResource,\n\tEffectRemoteLiveSource,\n\tEffectRemoteQuery,\n\tEffectRemoteQueryFunction,\n\tFormFactory,\n\tFormInvalid,\n\tPrerenderFactory,\n\tPrerenderOptions,\n\tQueryBatchFactory,\n\tQueryFactory,\n\tQueryLiveFactory,\n\tRemoteFormHandler,\n\tRemoteHandler,\n\tRemoteLiveHandler,\n\tSchemaEncodedInput,\n\tSchemaInput,\n\tServerRuntimeFactory,\n\tStandardSchema,\n\tStandardSchemaInput,\n\tStandardSchemaOutput,\n} from \"$/server/types.ts\";\n\nfunction make_server_only_class(name: string): unknown {\n\treturn class ServerOnlyRuntime {\n\t\tstatic make(): never {\n\t\t\tthrow make_server_only_error(name);\n\t\t}\n\t};\n}\n\nfunction make_server_only_function(name: string): (...args: unknown[]) => never {\n\treturn (..._args: unknown[]): never => {\n\t\tthrow make_server_only_error(name);\n\t};\n}\n\nfunction make_server_only_error(name: string): globalThis.Error {\n\treturn new ServerOnlyImportError(name);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,IAAa,gBAAb,MAA2B;;;;;;;CAO1B,OAAO,KAAgB,OAA8B;EACpD,WAAmB,KAAK,KAAK;CAC9B;AACD;;;;;;;;;;;;;;;AAgBA,MAAa,gBAAsC,uBAAuB,eAAe;;;;;;;;;;;;;;AAezF,MAAa,QAAsB,OAAO,OAAO,0BAA0B,OAAO,GAAG;CACpF,OAAO,0BAA0B,aAAa;CAC9C,MAAM,0BAA0B,YAAY;AAC7C,CAAC;;;;;;;;;;;;;;AAeD,MAAa,UAA0B,0BAA0B,SAAS;;;;;;;;;;;;;;;AAgB1E,MAAa,QAA4B,0BAA0B,OAAO;;;;;;;;;;;;;;AAe1E,MAAa,OAAoB,0BAA0B,MAAM;;;;;;;;;;;;;;;AAgBjE,MAAa,YAA8B,0BAA0B,WAAW;;;;;;;;;;;;;;;AAgBhF,MAAa,WAAkC,0BAA0B,UAAU;;;;;;;;;;;;;;;AAgBnF,MAAa,eAAqD,0BACjE,cACD;;;;;;;;;;;;;;AAeA,MAAa,8BACZ,0BAA0B,6BAA6B;AAoGxD,SAAS,uBAAuB,MAAuB;CACtD,OAAO,MAAM,kBAAkB;EAC9B,OAAO,OAAc;GACpB,MAAM,uBAAuB,IAAI;EAClC;CACD;AACD;AAEA,SAAS,0BAA0B,MAA6C;CAC/E,QAAQ,GAAG,UAA4B;EACtC,MAAM,uBAAuB,IAAI;CAClC;AACD;AAEA,SAAS,uBAAuB,MAAgC;CAC/D,OAAO,IAAI,sBAAsB,IAAI;AACtC"}
|
|
1
|
+
{"version":3,"file":"mod.js","names":[],"sources":["../../modules/svelte-effect-runtime/src/mod.ts"],"sourcesContent":["import { Dispatcher as InternalDispatcher } from \"$/dispatcher.ts\";\nimport { ServerOnlyImportError } from \"$/errors.ts\";\nimport type { ErrorEffectFactory, RedirectEffectFactory } from \"$/server/control-flow.ts\";\nimport type { RequestEvent as RequestEventShape } from \"$/server/runtime.ts\";\nimport type {\n\tCommandFactory,\n\tFormFactory,\n\tPrerenderFactory,\n\tQueryFactory,\n\tServerRuntimeFactory,\n} from \"$/server/types.ts\";\nimport type { Context, Layer, ManagedRuntime } from \"effect\";\n\n/**\n * Public API surface for `svelte-effect-runtime`.\n *\n * Call {@link ClientRuntime.make} in `hooks.client.ts`, call\n * {@link ServerRuntime.make} in `hooks.server.ts`, and let the Vite plugin\n * route server-only helpers to the server entrypoint automatically.\n *\n * @module\n */\n\n/**\n * Client-side runtime singleton. Call `ClientRuntime.make(layer?)` once\n * in `hooks.client.ts` to provide services to every component's effect\n * blocks.\n *\n * If never called, a default empty-layer runtime is created lazily on\n * the first `yield*` expression.\n *\n * @example\n * ```ts\n * import { ClientRuntime } from \"svelte-effect-runtime\";\n * import { Db } from \"./db.ts\";\n *\n * ClientRuntime.make(Db.Live);\n * ```\n *\n * @since 2.0.0\n */\nexport class ClientRuntime {\n\t/**\n\t * Build and cache the client-side dispatcher runtime.\n\t *\n\t * @since 2.0.0\n\t * @param layer - Optional Effect layer to provide to the runtime.\n\t */\n\tstatic make<R = never>(layer?: Layer.Layer<R>): void {\n\t\tInternalDispatcher.make(layer);\n\t}\n}\n\n/**\n * Server-side runtime singleton export. In SvelteKit server files the Vite\n * plugin rewrites root imports to `svelte-effect-runtime/server`, so this\n * name resolves to the real server implementation before it is evaluated.\n *\n * @example\n * ```ts\n * import { ServerRuntime } from \"svelte-effect-runtime\";\n *\n * ServerRuntime.make();\n * ```\n *\n * @since 2.0.0\n */\nexport const ServerRuntime: ServerRuntimeFactory = make_server_only_class(\"ServerRuntime\") as never;\n\n/**\n * Remote query factory export for `.remote.ts` files imported from the root\n * entrypoint. The Vite plugin rewrites it to the real server implementation.\n *\n * @example\n * ```ts\n * import { Query } from \"svelte-effect-runtime\";\n *\n * export const GetPosts = Query(Effect.succeed([]));\n * ```\n *\n * @since 2.0.0\n */\nexport const Query: QueryFactory = Object.assign(make_server_only_function(\"Query\"), {\n\tbatch: make_server_only_function(\"Query.batch\"),\n\tlive: make_server_only_function(\"Query.live\"),\n}) as never;\n\n/**\n * Remote command factory export for `.remote.ts` files imported from the root\n * entrypoint. The Vite plugin rewrites it to the real server implementation.\n *\n * @example\n * ```ts\n * import { Command } from \"svelte-effect-runtime\";\n *\n * export const SavePost = Command(Schema.String, (id) => Effect.succeed(id));\n * ```\n *\n * @since 2.0.0\n */\nexport const Command: CommandFactory = make_server_only_function(\"Command\") as never;\n\n/**\n * SvelteKit HTTP error control-flow export for `.remote.ts` files imported\n * from the root entrypoint. The Vite plugin rewrites it to the real server\n * implementation.\n *\n * @example\n * ```ts\n * import { Error } from \"svelte-effect-runtime\";\n *\n * return yield* Error(\"NotFound\", \"Post not found\");\n * ```\n *\n * @since 2.3.0\n */\nexport const Error: ErrorEffectFactory = make_server_only_function(\"Error\") as never;\n\n/**\n * Remote form factory export for `.remote.ts` files imported from the root\n * entrypoint. The Vite plugin rewrites it to the real server implementation.\n *\n * @example\n * ```ts\n * import { Form } from \"svelte-effect-runtime\";\n *\n * export const CreatePost = Form(PostInput, ({ data }) => Effect.succeed(data));\n * ```\n *\n * @since 2.0.0\n */\nexport const Form: FormFactory = make_server_only_function(\"Form\") as never;\n\n/**\n * Remote prerender factory export for `.remote.ts` files imported from the\n * root entrypoint. The Vite plugin rewrites it to the real server\n * implementation.\n *\n * @example\n * ```ts\n * import { Prerender } from \"svelte-effect-runtime\";\n *\n * export const GetBuildInfo = Prerender(() => Effect.succeed(\"ready\"));\n * ```\n *\n * @since 2.0.0\n */\nexport const Prerender: PrerenderFactory = make_server_only_function(\"Prerender\") as never;\n\nexport { Live } from \"$/live.ts\";\n\n/**\n * SvelteKit redirect control-flow export for `.remote.ts` files imported from\n * the root entrypoint. The Vite plugin rewrites it to the real server\n * implementation.\n *\n * @example\n * ```ts\n * import { Redirect } from \"svelte-effect-runtime\";\n *\n * return yield* Redirect(\"SeeOther\", \"/posts\");\n * ```\n *\n * @since 2.3.0\n */\nexport const Redirect: RedirectEffectFactory = make_server_only_function(\"Redirect\") as never;\n\n/**\n * Current SvelteKit request event service export for `.remote.ts` files\n * imported from the root entrypoint. The Vite plugin rewrites it to the real\n * server implementation.\n *\n * @example\n * ```ts\n * import { RequestEvent } from \"svelte-effect-runtime\";\n *\n * const event = yield* RequestEvent;\n * ```\n *\n * @since 2.0.0\n */\nexport const RequestEvent: Context.Reference<RequestEventShape> = make_server_only_function(\n\t\"RequestEvent\",\n) as never;\n\n/**\n * Returns the active server runtime when imported from a server file. The Vite\n * plugin rewrites root imports to the real server implementation.\n *\n * @example\n * ```ts\n * import { get_server_runtime_or_throw } from \"svelte-effect-runtime\";\n *\n * const runtime = get_server_runtime_or_throw();\n * ```\n *\n * @since 2.0.0\n */\nexport const get_server_runtime_or_throw: () => ManagedRuntime.ManagedRuntime<unknown, never> =\n\tmake_server_only_function(\"get_server_runtime_or_throw\") as never;\n\n/** Re-export error types users need for typed catch handlers. */\nexport type {\n\tFormError,\n\tFormIssue,\n\tRemoteFailure,\n\tRemoteHttpError,\n\tRemoteTransportError,\n\tRemoteValidationError,\n} from \"$/remote/shared.ts\";\n\nexport {\n\tAsyncEffectInEventCallbackError,\n\tAsyncEffectInSyncRuneError,\n\tAwaitInEffectWorkError,\n\tBatchQueryHandlerMissingError,\n\tDispatcherDisposedError,\n\tEmptyStreamYieldError,\n\tInvalidCommandFactoryError,\n\tInvalidLiveQueryFactoryError,\n\tInvalidLiveQueryReturnError,\n\tInvalidQueryFactoryError,\n\tInvalidRemoteFormResponseError,\n\tPreprocessError,\n\tRemoteErrorDecodeError,\n\tRemoteFormEndpointMissingError,\n\tRemoteHelperContextError,\n\tRemoteHelperError,\n\tRequestEventUnavailableError,\n\tRuntimeAlreadyInitializedError,\n\tRuntimeError,\n\tServerOnlyImportError,\n\tSvelteKitServerExportUnavailableError,\n\tUncheckedCommandHandlerMissingError,\n\tUncheckedFormHandlerMissingError,\n\tUncheckedLiveQueryHandlerMissingError,\n\tUncheckedPrerenderHandlerMissingError,\n\tUncheckedQueryHandlerMissingError,\n\tUnknownRuntimeError,\n\tUnsupportedMarkupEffectPositionError,\n\tUnsupportedRemoteFormResponseError,\n\tVitePreTransformPluginConflictError,\n\tYieldStarInEventCallbackError,\n} from \"$/errors.ts\";\n\nexport {\n\tis_form_error,\n\tis_remote_http_error,\n\tis_remote_transport_error,\n\tis_remote_validation_error,\n} from \"$/remote/shared.ts\";\n\n/** Re-export app setup helpers so users can import them from root. */\nexport { effect, type EffectOptions } from \"$/vite.ts\";\n\n/** Re-export server helper types from the root entrypoint. */\nexport type {\n\tErrorBody,\n\tErrorEffectFactory,\n\tErrorProperties,\n\tErrorStatus,\n\tErrorStatusName,\n\tRedirectEffectFactory,\n\tRedirectOptions,\n\tRedirectStatus,\n\tRedirectStatusName,\n} from \"$/server/control-flow.ts\";\n\n/** Re-export server helper types from the root entrypoint. */\nexport type { LiveFactory, LiveStatus, RemoteLiveStream } from \"$/live.ts\";\n\n/** Re-export server helper types from the root entrypoint. */\nexport type {\n\tCommandFactory,\n\tEffectLike,\n\tEffectRemoteBatchHandler,\n\tEffectRemoteCommand,\n\tEffectRemoteForm,\n\tEffectRemoteFunction,\n\tEffectRemoteLiveQuery,\n\tEffectRemoteLiveQueryFunction,\n\tEffectRemoteQuery,\n\tEffectRemoteQueryFunction,\n\tFormFactory,\n\tFormInvalid,\n\tPrerenderFactory,\n\tPrerenderOptions,\n\tQueryBatchFactory,\n\tQueryFactory,\n\tQueryLiveFactory,\n\tRemoteFormHandler,\n\tRemoteHandler,\n\tRemoteLiveHandler,\n\tRemoteLiveSource,\n\tSchemaEncodedInput,\n\tSchemaInput,\n\tServerRuntimeFactory,\n\tStandardSchema,\n\tStandardSchemaInput,\n\tStandardSchemaOutput,\n} from \"$/server/types.ts\";\n\nfunction make_server_only_class(name: string): unknown {\n\treturn class ServerOnlyRuntime {\n\t\tstatic make(): never {\n\t\t\tthrow make_server_only_error(name);\n\t\t}\n\t};\n}\n\nfunction make_server_only_function(name: string): (...args: unknown[]) => never {\n\treturn (..._args: unknown[]): never => {\n\t\tthrow make_server_only_error(name);\n\t};\n}\n\nfunction make_server_only_error(name: string): globalThis.Error {\n\treturn new ServerOnlyImportError(name);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,IAAa,gBAAb,MAA2B;;;;;;;CAO1B,OAAO,KAAgB,OAA8B;EACpD,WAAmB,KAAK,KAAK;CAC9B;AACD;;;;;;;;;;;;;;;AAgBA,MAAa,gBAAsC,uBAAuB,eAAe;;;;;;;;;;;;;;AAezF,MAAa,QAAsB,OAAO,OAAO,0BAA0B,OAAO,GAAG;CACpF,OAAO,0BAA0B,aAAa;CAC9C,MAAM,0BAA0B,YAAY;AAC7C,CAAC;;;;;;;;;;;;;;AAeD,MAAa,UAA0B,0BAA0B,SAAS;;;;;;;;;;;;;;;AAgB1E,MAAa,QAA4B,0BAA0B,OAAO;;;;;;;;;;;;;;AAe1E,MAAa,OAAoB,0BAA0B,MAAM;;;;;;;;;;;;;;;AAgBjE,MAAa,YAA8B,0BAA0B,WAAW;;;;;;;;;;;;;;;AAkBhF,MAAa,WAAkC,0BAA0B,UAAU;;;;;;;;;;;;;;;AAgBnF,MAAa,eAAqD,0BACjE,cACD;;;;;;;;;;;;;;AAeA,MAAa,8BACZ,0BAA0B,6BAA6B;AAuGxD,SAAS,uBAAuB,MAAuB;CACtD,OAAO,MAAM,kBAAkB;EAC9B,OAAO,OAAc;GACpB,MAAM,uBAAuB,IAAI;EAClC;CACD;AACD;AAEA,SAAS,0BAA0B,MAA6C;CAC/E,QAAQ,GAAG,UAA4B;EACtC,MAAM,uBAAuB,IAAI;CAClC;AACD;AAEA,SAAS,uBAAuB,MAAgC;CAC/D,OAAO,IAAI,sBAAsB,IAAI;AACtC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { EffectRemoteQueryUpdateBrand } from "./types.js";
|
|
2
2
|
import type { RemoteFailure } from "../shared.js";
|
|
3
|
+
import { type RemoteLiveStream } from "../../live.js";
|
|
3
4
|
import { Effect } from "effect";
|
|
4
5
|
type RemoteInput<Input> = undefined extends Input ? Input | void : Input;
|
|
5
6
|
type DecodePayload<Output> = (value: unknown) => Output;
|
|
@@ -17,16 +18,6 @@ type RemoteQueryEffect<Output, ErrorType = never> = RemoteResourceEffect<Output,
|
|
|
17
18
|
readonly set: (value: Output) => void;
|
|
18
19
|
readonly withOverride: (update: (current: Output) => Output) => unknown;
|
|
19
20
|
};
|
|
20
|
-
type RemoteLiveQueryEffect<Output, ErrorType = never> = Effect.Effect<RemoteLiveQueryResource<Output>, RemoteFailure<ErrorType>>;
|
|
21
|
-
type RemoteLiveQueryResource<Output> = {
|
|
22
|
-
readonly connected: boolean;
|
|
23
|
-
readonly current: Output | undefined;
|
|
24
|
-
readonly done: boolean;
|
|
25
|
-
readonly error: unknown;
|
|
26
|
-
readonly loading: boolean;
|
|
27
|
-
readonly ready: boolean;
|
|
28
|
-
readonly reconnect: () => Effect.Effect<void, unknown, never>;
|
|
29
|
-
} & AsyncIterable<Output>;
|
|
30
21
|
/**
|
|
31
22
|
* Creates a remote query adapter. The returned function takes input and
|
|
32
23
|
* returns an `Effect` that executes SvelteKit's native query function.
|
|
@@ -49,14 +40,13 @@ export declare function create_remote_query_adapter<Input, Output, ErrorType = n
|
|
|
49
40
|
export declare function create_remote_query_adapter<Input, Output, ErrorType = never>(native_factory: NativeQueryFactory<Input>, decode_payload: (value: unknown) => unknown, _base?: string): EffectRemoteQueryUpdateBrand & ((input: RemoteInput<Input>) => RemoteQueryEffect<Output, ErrorType>);
|
|
50
41
|
/**
|
|
51
42
|
* Creates a remote live query adapter. The returned function takes input and
|
|
52
|
-
* returns an
|
|
53
|
-
* and reconnect controls.
|
|
43
|
+
* returns an Effect Stream whose transport state is exposed through `Live`.
|
|
54
44
|
*
|
|
55
45
|
* @example
|
|
56
46
|
* ```ts
|
|
57
47
|
* const getTime = create_remote_live_query_adapter(nativeLive, (value) => value);
|
|
58
|
-
* const time =
|
|
59
|
-
* const
|
|
48
|
+
* const time = getTime();
|
|
49
|
+
* const first = yield* Stream.runHead(time);
|
|
60
50
|
* ```
|
|
61
51
|
*
|
|
62
52
|
* @since 2.0.0
|
|
@@ -64,8 +54,8 @@ export declare function create_remote_query_adapter<Input, Output, ErrorType = n
|
|
|
64
54
|
* @param _decode_payload - Deprecated payload decoder retained for parity with
|
|
65
55
|
* other remote adapters.
|
|
66
56
|
* @param _base - Deprecated transport base retained for compatibility.
|
|
67
|
-
* @returns A function returning
|
|
57
|
+
* @returns A function returning a remote live stream.
|
|
68
58
|
* @internal
|
|
69
59
|
*/
|
|
70
|
-
export declare function create_remote_live_query_adapter<Input, Output, ErrorType = never>(native_factory: unknown, _decode_payload: (value: unknown) => unknown, _base?: string): EffectRemoteQueryUpdateBrand & ((input: RemoteInput<Input>) =>
|
|
60
|
+
export declare function create_remote_live_query_adapter<Input, Output, ErrorType = never>(native_factory: unknown, _decode_payload: (value: unknown) => unknown, _base?: string): EffectRemoteQueryUpdateBrand & ((input: RemoteInput<Input>) => RemoteLiveStream<Output, ErrorType>);
|
|
71
61
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { RemoteForm, RemoteFormInput, RemoteLiveQuery, RemoteQuery, RemoteQueryOverride } from "@sveltejs/kit";
|
|
2
2
|
import type { RemoteFailure } from "../shared.js";
|
|
3
|
-
import type { Effect } from "effect";
|
|
3
|
+
import type { Effect, Stream } from "effect";
|
|
4
4
|
/**
|
|
5
5
|
* Type-only marker attached to SER query and live-query adapter functions so
|
|
6
6
|
* form updates can distinguish them from command adapters.
|
|
@@ -31,21 +31,12 @@ type EffectRemoteQueryUpdates<Updates extends readonly unknown[]> = Updates & {
|
|
|
31
31
|
};
|
|
32
32
|
type NativeRemoteQueryUpdate = RemoteQuery<unknown> | RemoteLiveQuery<unknown> | RemoteQueryOverride;
|
|
33
33
|
type EffectRemoteQueryUpdateFunction = EffectRemoteQueryUpdateBrand & ((input: never) => EffectRemoteQueryUpdateResource);
|
|
34
|
-
type EffectRemoteLiveQueryUpdateFunction = EffectRemoteQueryUpdateBrand & ((input: never) =>
|
|
34
|
+
type EffectRemoteLiveQueryUpdateFunction = EffectRemoteQueryUpdateBrand & ((input: never) => Stream.Stream<unknown, unknown, unknown>);
|
|
35
35
|
type EffectRemoteQueryUpdateResource = Effect.Effect<unknown, unknown> & {
|
|
36
36
|
readonly refresh: () => Effect.Effect<void, unknown, never>;
|
|
37
37
|
readonly set: (value: never) => void;
|
|
38
38
|
readonly withOverride: (update: (current: never) => unknown) => unknown;
|
|
39
39
|
};
|
|
40
|
-
type EffectRemoteLiveQueryUpdateResource = {
|
|
41
|
-
readonly connected: boolean;
|
|
42
|
-
readonly current: unknown;
|
|
43
|
-
readonly done: boolean;
|
|
44
|
-
readonly error: unknown;
|
|
45
|
-
readonly loading: boolean;
|
|
46
|
-
readonly ready: boolean;
|
|
47
|
-
readonly reconnect: () => Effect.Effect<void, unknown, never>;
|
|
48
|
-
} & AsyncIterable<unknown>;
|
|
49
40
|
/**
|
|
50
41
|
* Represents a pending operation counter that remote command adapters
|
|
51
42
|
* use to track in-flight requests.
|
package/.dist/remote/client.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as create_remote_command_adapter, n as create_remote_query_adapter, r as create_remote_form_adapter, t as create_remote_live_query_adapter } from "../chunks/client-
|
|
1
|
+
import { i as create_remote_command_adapter, n as create_remote_query_adapter, r as create_remote_form_adapter, t as create_remote_live_query_adapter } from "../chunks/client-D_DE2cFa.js";
|
|
2
2
|
export { create_remote_command_adapter, create_remote_form_adapter, create_remote_live_query_adapter, create_remote_query_adapter };
|
package/.dist/remote/server.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { g as RemoteHelperError, h as RemoteHelperContextError } from "../chunks/errors-Bl3NVEez.js";
|
|
2
2
|
import { create_serialized_remote_failure_envelope } from "./shared.js";
|
|
3
3
|
import { Cause, Effect, Exit } from "effect";
|
|
4
4
|
import { isHttpError, isRedirect, isValidationError } from "@sveltejs/kit";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as
|
|
1
|
+
import { f as PreprocessError, r as AwaitInEffectWorkError } from "../chunks/errors-Bl3NVEez.js";
|
|
2
|
+
import { a as slice_start, c as contains_top_level_await, d as collect_top_level_binding_names, f as has_local_import_binding, i as slice, l as find_yield_star_node, n as validate_rune_yield_usage, o as collect_free_identifiers, p as make_imports, r as create_source_map, s as collect_yield_star_nodes, t as transform_markup_effect, u as is_yield_star_expression } from "../chunks/transform-C2fCVPL_.js";
|
|
3
3
|
import { contains_top_level_yield_star } from "../detect.js";
|
|
4
4
|
import ts from "typescript";
|
|
5
5
|
import MagicString from "magic-string";
|
|
@@ -58,7 +58,7 @@ function lower_statement(stmt, content, context) {
|
|
|
58
58
|
return {
|
|
59
59
|
temps: [],
|
|
60
60
|
rewritten_text: "",
|
|
61
|
-
effect_blocks: [make_effect_block([
|
|
61
|
+
effect_blocks: [make_effect_block([wrap_yield_stars_in_node(stmt, content, context)], collect_deps(text))],
|
|
62
62
|
range: {
|
|
63
63
|
start: stmt.getFullStart(),
|
|
64
64
|
end: stmt.end
|
|
@@ -109,7 +109,7 @@ function lower_expression_statement(stmt, content, context) {
|
|
|
109
109
|
return {
|
|
110
110
|
temps: [],
|
|
111
111
|
rewritten_text: "",
|
|
112
|
-
effect_blocks: [make_effect_block([text + ";"], collect_deps(text))],
|
|
112
|
+
effect_blocks: [make_effect_block([wrap_yield_text(text, context) + ";"], collect_deps(text))],
|
|
113
113
|
range: {
|
|
114
114
|
start: stmt.getFullStart(),
|
|
115
115
|
end: stmt.end
|
|
@@ -124,7 +124,7 @@ function lower_expression_statement(stmt, content, context) {
|
|
|
124
124
|
return {
|
|
125
125
|
temps: [],
|
|
126
126
|
rewritten_text: "",
|
|
127
|
-
effect_blocks: [make_effect_block([`${target} = ${yield_text};`], collect_deps(yield_text, target_names))],
|
|
127
|
+
effect_blocks: [make_effect_block([`${target} = ${wrap_yield_text(yield_text, context)};`], collect_deps(yield_text, target_names))],
|
|
128
128
|
range: {
|
|
129
129
|
start: stmt.getStart(),
|
|
130
130
|
end: stmt.end
|
|
@@ -185,7 +185,7 @@ function lower_expression_yields(expr, content, hint, context) {
|
|
|
185
185
|
type: type_helper.type
|
|
186
186
|
});
|
|
187
187
|
} else temps.push({ name: temp_name });
|
|
188
|
-
statements.push(`${temp_name} = ${yield_text};`);
|
|
188
|
+
statements.push(`${temp_name} = ${wrap_yield_text(yield_text, context)};`);
|
|
189
189
|
deps.push(...collect_deps(yield_text));
|
|
190
190
|
replacements.push({
|
|
191
191
|
start: node.getStart(),
|
|
@@ -238,7 +238,7 @@ function make_awaited_yield_expression(node, content, hint, context) {
|
|
|
238
238
|
const helper_id = make_script_effect_id(node, context);
|
|
239
239
|
const deps_text = `[${collect_deps(yield_text).join(", ")}]`;
|
|
240
240
|
return {
|
|
241
|
-
declaration: `function* ${helper_name}() { return (${yield_text}); }`,
|
|
241
|
+
declaration: `function* ${helper_name}() { return (${wrap_yield_text(yield_text, context)}); }`,
|
|
242
242
|
expression: [
|
|
243
243
|
`await ${context.dispatcher_name}().promise({`,
|
|
244
244
|
`id: ${JSON.stringify(helper_id)}, `,
|
|
@@ -253,11 +253,30 @@ function make_yield_type_helper(yield_text, hint, context) {
|
|
|
253
253
|
const helper_name = context.next_type_helper_name(hint);
|
|
254
254
|
return {
|
|
255
255
|
declaration: `function ${helper_name}() { return (${strip_yield_star(yield_text)}); }`,
|
|
256
|
-
type: `${context.
|
|
256
|
+
type: `${context.yield_success_name}<ReturnType<typeof ${helper_name}>> | undefined`
|
|
257
257
|
};
|
|
258
258
|
}
|
|
259
259
|
function strip_yield_star(yield_text) {
|
|
260
|
-
return yield_text.replace(/^yield
|
|
260
|
+
return yield_text.replace(/^yield\s*\*\s*/, "");
|
|
261
|
+
}
|
|
262
|
+
function wrap_yield_text(yield_text, context) {
|
|
263
|
+
return `yield* ${context.yieldable_name}(${strip_yield_star(yield_text)})`;
|
|
264
|
+
}
|
|
265
|
+
function wrap_yield_stars_in_node(node, content, context) {
|
|
266
|
+
const replacements = [];
|
|
267
|
+
collect_yield_star_nodes(node, (yield_node) => {
|
|
268
|
+
const yield_text = slice_start(content, yield_node).trim();
|
|
269
|
+
replacements.push({
|
|
270
|
+
start: yield_node.getStart(),
|
|
271
|
+
end: yield_node.end,
|
|
272
|
+
text: wrap_yield_text(yield_text, context)
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
replacements.sort((a, b) => b.start - a.start);
|
|
276
|
+
const offset = node.getFullStart();
|
|
277
|
+
let text = slice(content, node);
|
|
278
|
+
for (const replacement of replacements) text = text.slice(0, replacement.start - offset) + replacement.text + text.slice(replacement.end - offset);
|
|
279
|
+
return text.trim();
|
|
261
280
|
}
|
|
262
281
|
function make_script_effect_id(expr, context) {
|
|
263
282
|
return `${context.filename}:${expr.getStart()}:${expr.end}`;
|
|
@@ -341,7 +360,7 @@ function transform_script_effect(content, filename, options = {}) {
|
|
|
341
360
|
const emit_types = options.emit_types ?? true;
|
|
342
361
|
let has_effect = false;
|
|
343
362
|
let uses_dispatcher_promise = false;
|
|
344
|
-
let
|
|
363
|
+
let uses_yield_success_types = false;
|
|
345
364
|
/** Phase 1: detect imports already provided by the user. */
|
|
346
365
|
const has_effect_import = has_local_import_binding(source_file, "effect", "Effect");
|
|
347
366
|
const has_dispatcher_import = has_local_import_binding(source_file, "svelte-effect-runtime/internal/generators", "get_dispatcher");
|
|
@@ -353,13 +372,17 @@ function transform_script_effect(content, filename, options = {}) {
|
|
|
353
372
|
dispatcher_value: name_allocator.reserve("__SER___dispatcher"),
|
|
354
373
|
effect: has_effect_import ? "Effect" : reserve_runtime_import("Effect"),
|
|
355
374
|
program: name_allocator.reserve("__SER___program"),
|
|
356
|
-
untrack: has_untrack_import ? "untrack" : reserve_runtime_import("untrack")
|
|
375
|
+
untrack: has_untrack_import ? "untrack" : reserve_runtime_import("untrack"),
|
|
376
|
+
yield_success: reserve_runtime_import("YieldSuccess"),
|
|
377
|
+
yieldable: reserve_runtime_import("ToEffect")
|
|
357
378
|
};
|
|
358
379
|
const context = {
|
|
359
380
|
filename,
|
|
360
381
|
dispatcher_name: runtime_bindings.dispatcher,
|
|
361
382
|
effect_name: runtime_bindings.effect,
|
|
362
383
|
emit_types,
|
|
384
|
+
yield_success_name: runtime_bindings.yield_success,
|
|
385
|
+
yieldable_name: runtime_bindings.yieldable,
|
|
363
386
|
next_helper_name(hint) {
|
|
364
387
|
return name_allocator.reserve(make_generated_name(hint ?? "helper", ""));
|
|
365
388
|
},
|
|
@@ -389,7 +412,7 @@ function transform_script_effect(content, filename, options = {}) {
|
|
|
389
412
|
}
|
|
390
413
|
effect_blocks.push(...lowered.effect_blocks);
|
|
391
414
|
uses_dispatcher_promise ||= lowered.uses_dispatcher_promise ?? false;
|
|
392
|
-
|
|
415
|
+
uses_yield_success_types ||= lowered.temps.some((temp) => temp.type?.includes(runtime_bindings.yield_success) ?? false);
|
|
393
416
|
}
|
|
394
417
|
if (!has_effect) {
|
|
395
418
|
block_refs.push({
|
|
@@ -404,8 +427,10 @@ function transform_script_effect(content, filename, options = {}) {
|
|
|
404
427
|
/** Phase 3: inject runtime imports after the last user import. */
|
|
405
428
|
const imports = make_imports(has_effect_import, has_dispatcher_import, has_untrack_import, runtime_bindings, {
|
|
406
429
|
needs_dispatcher: effect_blocks.length > 0 || uses_dispatcher_promise,
|
|
407
|
-
needs_effect: effect_blocks.length > 0
|
|
408
|
-
needs_untrack: effect_blocks.length > 0
|
|
430
|
+
needs_effect: effect_blocks.length > 0,
|
|
431
|
+
needs_untrack: effect_blocks.length > 0,
|
|
432
|
+
needs_yield_success: uses_yield_success_types,
|
|
433
|
+
needs_yieldable: effect_blocks.length > 0 || uses_dispatcher_promise
|
|
409
434
|
});
|
|
410
435
|
const last_import = [...source_file.statements].reverse().find(ts.isImportDeclaration);
|
|
411
436
|
if (imports) if (last_import) magic.appendRight(last_import.end, "\n" + imports);
|
|
@@ -424,20 +449,22 @@ function transform_script_effect(content, filename, options = {}) {
|
|
|
424
449
|
code,
|
|
425
450
|
blocks: block_refs,
|
|
426
451
|
map: create_source_map(magic, filename),
|
|
427
|
-
relocations: create_script_relocations(content, code, source_file)
|
|
452
|
+
relocations: create_script_relocations(content, code, source_file, runtime_bindings.yieldable)
|
|
428
453
|
};
|
|
429
454
|
}
|
|
430
|
-
function create_script_relocations(content, code, source_file) {
|
|
455
|
+
function create_script_relocations(content, code, source_file, yieldable_name) {
|
|
431
456
|
const candidates = source_file.statements.flatMap((stmt) => {
|
|
432
457
|
const relocations = [];
|
|
433
458
|
if (contains_top_level_yield_star(stmt) && ts.isVariableStatement(stmt)) for (const decl of stmt.declarationList.declarations) collect_binding_relocation_candidates(decl.name, relocations);
|
|
434
459
|
collect_yield_star_nodes(stmt, (node) => {
|
|
435
|
-
const
|
|
460
|
+
const expression = ts.isBinaryExpression(node) ? node.right : node;
|
|
461
|
+
const text = content.slice(expression.getStart(), expression.end).trim();
|
|
436
462
|
relocations.push({
|
|
437
|
-
originalStart:
|
|
438
|
-
originalEnd:
|
|
463
|
+
originalStart: expression.getStart(),
|
|
464
|
+
originalEnd: expression.end,
|
|
439
465
|
text,
|
|
440
|
-
match: "
|
|
466
|
+
match: "yield_operand",
|
|
467
|
+
wrapper: `${yieldable_name}(${text})`
|
|
441
468
|
});
|
|
442
469
|
});
|
|
443
470
|
return relocations;
|
|
@@ -477,13 +504,17 @@ function collect_binding_relocation_candidates(name, candidates) {
|
|
|
477
504
|
function find_available_generated_text(code, candidate, used_ranges) {
|
|
478
505
|
let search_start = 0;
|
|
479
506
|
while (search_start < code.length) {
|
|
480
|
-
const
|
|
507
|
+
const search_text = candidate.match === "yield_operand" ? candidate.wrapper : candidate.text;
|
|
508
|
+
if (!search_text) return -1;
|
|
509
|
+
const index = code.indexOf(search_text, search_start);
|
|
481
510
|
if (index < 0) return -1;
|
|
482
|
-
const
|
|
483
|
-
const
|
|
484
|
-
const
|
|
485
|
-
|
|
486
|
-
|
|
511
|
+
const operand_offset = candidate.match === "yield_operand" && candidate.wrapper ? candidate.wrapper.indexOf(candidate.text) : 0;
|
|
512
|
+
const start = index + Math.max(operand_offset, 0);
|
|
513
|
+
const end = start + candidate.text.length;
|
|
514
|
+
const overlaps_used_range = used_ranges.some((range) => start < range.end && end > range.start);
|
|
515
|
+
const is_text_match = candidate.match !== "identifier" || is_identifier_text_match(code, start, end);
|
|
516
|
+
if (!overlaps_used_range && is_text_match) return start;
|
|
517
|
+
search_start = candidate.match === "identifier" ? index + 1 : index + search_text.length;
|
|
487
518
|
}
|
|
488
519
|
return -1;
|
|
489
520
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/script-transform/runtime-block.ts","../../../modules/svelte-effect-runtime/src/script-transform/lower.ts","../../../modules/svelte-effect-runtime/src/script-transform/index.ts","../../../modules/svelte-effect-runtime/src/runtime/transform.ts"],"sourcesContent":["import type { EffectBlock, RuntimeImportBindings } from \"./types.ts\";\n\n/**\n * Builds the runtime blocks appended to lowered script effect code.\n *\n * @since 2.0.0\n * @param blocks - Effect bodies and dependency reads to emit.\n * @returns Full `$effect` blocks that fork generated `Effect.gen` programs.\n */\nexport function make_runtime_block(blocks: EffectBlock[]): string {\n\tconst bindings: RuntimeImportBindings = {\n\t\tcancel: \"__SER___cancel\",\n\t\tdispatcher: \"get_dispatcher\",\n\t\tdispatcher_value: \"__SER___dispatcher\",\n\t\teffect: \"Effect\",\n\t\tprogram: \"__SER___program\",\n\t\tuntrack: \"untrack\",\n\t};\n\n\treturn make_runtime_block_with_bindings(blocks, bindings);\n}\n\n/**\n * Builds the runtime blocks appended to lowered script effect code with\n * explicit runtime import bindings.\n *\n * @since 2.4.2\n * @param blocks - Effect bodies and dependency reads to emit.\n * @param bindings - Runtime binding names available in the generated code.\n * @returns Full `$effect` blocks that fork generated `Effect.gen` programs.\n */\nexport function make_runtime_block_with_bindings(\n\tblocks: EffectBlock[],\n\tbindings: RuntimeImportBindings,\n): string {\n\tconst merged_block = merge_effect_blocks(blocks);\n\tconst dep_reads = merged_block.deps.map((dep) => ` ${dep};`);\n\n\tconst body = merged_block.statements.map((statement) => ` ${statement}`).join(\"\\n\");\n\n\treturn [\n\t\t\"\",\n\t\t\"$effect(() => {\",\n\t\t...dep_reads,\n\t\t` const ${bindings.dispatcher_value} = ${bindings.dispatcher}();`,\n\t\t` const ${bindings.program} = ${bindings.effect}.gen(function* () {`,\n\t\tbody,\n\t\t\" });\",\n\t\t` const ${bindings.cancel} = ${bindings.untrack}(() => ${bindings.dispatcher_value}.fork(${bindings.program}));`,\n\t\t` import.meta.hot?.dispose(${bindings.cancel});`,\n\t\t` return ${bindings.cancel};`,\n\t\t\"});\",\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\nfunction merge_effect_blocks(blocks: EffectBlock[]): EffectBlock {\n\tconst statements = blocks.flatMap((block) => block.statements);\n\tconst deps = blocks.flatMap((block) => block.deps);\n\n\treturn {\n\t\tstatements,\n\t\tdeps: [...new Set(deps)],\n\t};\n}\n","import { collect_free_identifiers } from \"$/markup/transform/expressions.ts\";\nimport { contains_top_level_yield_star } from \"$/detect.ts\";\nimport { collect_yield_star_nodes, find_yield_star_node, is_yield_star_expression } from \"./ast.ts\";\nimport { slice, slice_start } from \"./source.ts\";\nimport type {\n\tEffectBlock,\n\tLoweredExpression,\n\tLoweredStatement,\n\tScriptLoweringContext,\n\tTempBinding,\n} from \"./types.ts\";\n\nimport ts from \"typescript\";\n\n/**\n * Delegates a statement to the correct lowerer based on syntax kind.\n *\n * @since 2.0.0\n * @param stmt - Statement to lower.\n * @param content - Original source text.\n * @param context - Lowering services for this transform pass.\n * @returns Lowered statement descriptor.\n */\nexport function lower_statement(\n\tstmt: ts.Statement,\n\tcontent: string,\n\tcontext: ScriptLoweringContext,\n): LoweredStatement {\n\tif (ts.isExpressionStatement(stmt)) {\n\t\treturn lower_expression_statement(stmt, content, context);\n\t}\n\n\tif (ts.isVariableStatement(stmt)) {\n\t\treturn lower_variable_statement(stmt, content, context);\n\t}\n\n\tconst text = slice(content, stmt);\n\n\treturn {\n\t\ttemps: [],\n\t\trewritten_text: \"\",\n\t\teffect_blocks: [make_effect_block([text], collect_deps(text))],\n\t\trange: { start: stmt.getFullStart(), end: stmt.end },\n\t};\n}\n\nfunction lower_variable_statement(\n\tstmt: ts.VariableStatement,\n\tcontent: string,\n\tcontext: ScriptLoweringContext,\n): LoweredStatement {\n\tconst helper_declarations: string[] = [];\n\tconst rewritten_decls: string[] = [];\n\n\tconst decl_list = stmt.declarationList;\n\tconst kind = (decl_list.flags & ts.NodeFlags.Let) !== 0 ? \"let\" : \"const\";\n\tlet uses_dispatcher_promise = false;\n\n\tfor (const decl of decl_list.declarations) {\n\t\tif (!contains_top_level_yield_star(decl)) {\n\t\t\trewritten_decls.push(slice(content, decl).trim());\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst lowered = lower_node_yields_to_await(\n\t\t\tdecl,\n\t\t\tcontent,\n\t\t\tmake_binding_hint(decl.name),\n\t\t\tcontext,\n\t\t);\n\n\t\thelper_declarations.push(...lowered.helper_declarations);\n\t\trewritten_decls.push(lowered.rewritten_text);\n\t\tuses_dispatcher_promise ||= lowered.uses_dispatcher_promise;\n\t}\n\n\tconst rewritten_text = `${kind} ${rewritten_decls.join(\", \")};`;\n\n\treturn {\n\t\ttemps: [],\n\t\ttype_helpers: helper_declarations,\n\t\trewritten_text,\n\t\teffect_blocks: [],\n\t\tuses_dispatcher_promise,\n\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t};\n}\n\nfunction lower_expression_statement(\n\tstmt: ts.ExpressionStatement,\n\tcontent: string,\n\tcontext: ScriptLoweringContext,\n): LoweredStatement {\n\tconst expr = stmt.expression;\n\n\tif (!contains_top_level_yield_star(expr)) {\n\t\treturn {\n\t\t\ttemps: [],\n\t\t\trewritten_text: slice(content, stmt).trim(),\n\t\t\teffect_blocks: [],\n\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tif (is_yield_star_expression(expr)) {\n\t\tconst text = slice(content, expr).trim();\n\n\t\treturn {\n\t\t\ttemps: [],\n\t\t\trewritten_text: \"\",\n\t\t\teffect_blocks: [make_effect_block([text + \";\"], collect_deps(text))],\n\t\t\trange: { start: stmt.getFullStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tif (ts.isBinaryExpression(expr) && is_assignment_operator(expr)) {\n\t\tconst target = slice(content, expr.left).trim();\n\t\tconst target_names = collect_assignment_target_names(expr.left);\n\n\t\tif (\n\t\t\texpr.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n\t\t\tis_yield_star_expression(expr.right)\n\t\t) {\n\t\t\tconst yield_text = extract_yield_star_full_text(expr.right, content);\n\n\t\t\treturn {\n\t\t\t\ttemps: [],\n\t\t\t\trewritten_text: \"\",\n\t\t\t\teffect_blocks: [\n\t\t\t\t\tmake_effect_block(\n\t\t\t\t\t\t[`${target} = ${yield_text};`],\n\t\t\t\t\t\tcollect_deps(yield_text, target_names),\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t\t};\n\t\t}\n\n\t\tconst lowered = lower_expression_yields(\n\t\t\texpr.right,\n\t\t\tcontent,\n\t\t\tmake_temp_hint(target),\n\t\t\tcontext,\n\t\t);\n\t\tconst temp_names = lowered.temps.map((temp) => temp.name);\n\t\tconst statement = `${target} ${slice(\n\t\t\tcontent,\n\t\t\texpr.operatorToken,\n\t\t).trim()} ${lowered.rewritten_expr};`;\n\n\t\treturn {\n\t\t\ttemps: lowered.temps,\n\t\t\ttype_helpers: lowered.type_helpers,\n\t\t\trewritten_text: \"\",\n\t\t\teffect_blocks: [\n\t\t\t\tmake_effect_block(\n\t\t\t\t\t[...lowered.effect_blocks.flatMap((block) => block.statements), statement],\n\t\t\t\t\t[\n\t\t\t\t\t\t...lowered.effect_blocks.flatMap((block) => block.deps),\n\t\t\t\t\t\t...collect_deps(lowered.rewritten_expr, [...target_names, ...temp_names]),\n\t\t\t\t\t],\n\t\t\t\t),\n\t\t\t],\n\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tconst lowered = lower_expression_yields(expr, content, \"call\", context);\n\n\tif (is_top_level_rune_call(expr)) {\n\t\treturn {\n\t\t\ttemps: lowered.temps,\n\t\t\ttype_helpers: lowered.type_helpers,\n\t\t\trewritten_text: lowered.rewritten_expr + \";\",\n\t\t\teffect_blocks: lowered.effect_blocks,\n\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tconst temp_names = lowered.temps.map((temp) => temp.name);\n\n\treturn {\n\t\ttemps: lowered.temps,\n\t\ttype_helpers: lowered.type_helpers,\n\t\trewritten_text: \"\",\n\t\teffect_blocks: [\n\t\t\tmake_effect_block(\n\t\t\t\t[\n\t\t\t\t\t...lowered.effect_blocks.flatMap((block) => block.statements),\n\t\t\t\t\tlowered.rewritten_expr + \";\",\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t...lowered.effect_blocks.flatMap((block) => block.deps),\n\t\t\t\t\t...collect_deps(lowered.rewritten_expr, temp_names),\n\t\t\t\t],\n\t\t\t),\n\t\t],\n\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t};\n}\n\nfunction lower_expression_yields(\n\texpr: ts.Expression,\n\tcontent: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): LoweredExpression {\n\tconst replacements: Array<{\n\t\tstart: number;\n\t\tend: number;\n\t\ttext: string;\n\t}> = [];\n\n\tconst temps: TempBinding[] = [];\n\tconst type_helpers: string[] = [];\n\tconst statements: string[] = [];\n\tconst deps: string[] = [];\n\n\tcollect_yield_star_nodes(expr, (node) => {\n\t\tconst temp_name = context.next_temp_name(hint);\n\t\tconst yield_text = slice_start(content, node).trim();\n\t\tconst type_helper = make_yield_type_helper(yield_text, hint, context);\n\n\t\tif (type_helper) {\n\t\t\ttype_helpers.push(type_helper.declaration);\n\t\t\ttemps.push({ name: temp_name, type: type_helper.type });\n\t\t} else {\n\t\t\ttemps.push({ name: temp_name });\n\t\t}\n\n\t\tstatements.push(`${temp_name} = ${yield_text};`);\n\t\tdeps.push(...collect_deps(yield_text));\n\t\treplacements.push({\n\t\t\tstart: node.getStart(),\n\t\t\tend: node.end,\n\t\t\ttext: temp_name,\n\t\t});\n\t});\n\n\tif (replacements.length === 0) {\n\t\treturn {\n\t\t\ttemps,\n\t\t\ttype_helpers,\n\t\t\trewritten_expr: slice(content, expr).trim(),\n\t\t\teffect_blocks: [],\n\t\t};\n\t}\n\n\treplacements.sort((a, b) => b.start - a.start);\n\n\tlet text = slice(content, expr);\n\n\tconst offset_in_expr = expr.getFullStart();\n\n\tfor (const replacement of replacements) {\n\t\ttext =\n\t\t\ttext.slice(0, replacement.start - offset_in_expr) +\n\t\t\treplacement.text +\n\t\t\ttext.slice(replacement.end - offset_in_expr);\n\t}\n\n\treturn {\n\t\ttemps,\n\t\ttype_helpers,\n\t\trewritten_expr: text.trim(),\n\t\teffect_blocks: [make_effect_block(statements, deps)],\n\t};\n}\n\nfunction lower_node_yields_to_await(\n\tnode: ts.Node,\n\tcontent: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): {\n\thelper_declarations: string[];\n\trewritten_text: string;\n\tuses_dispatcher_promise: boolean;\n} {\n\tconst helper_declarations: string[] = [];\n\tconst replacements: Array<{\n\t\tstart: number;\n\t\tend: number;\n\t\ttext: string;\n\t}> = [];\n\n\tcollect_yield_star_nodes(node, (yield_node) => {\n\t\tconst awaited = make_awaited_yield_expression(yield_node, content, hint, context);\n\n\t\thelper_declarations.push(awaited.declaration);\n\t\treplacements.push({\n\t\t\tstart: yield_node.getStart(),\n\t\t\tend: yield_node.end,\n\t\t\ttext: awaited.expression,\n\t\t});\n\t});\n\n\treplacements.sort((a, b) => b.start - a.start);\n\n\tlet text = slice_start(content, node);\n\tconst offset_in_node = node.getStart();\n\n\tfor (const replacement of replacements) {\n\t\ttext =\n\t\t\ttext.slice(0, replacement.start - offset_in_node) +\n\t\t\treplacement.text +\n\t\t\ttext.slice(replacement.end - offset_in_node);\n\t}\n\n\treturn {\n\t\thelper_declarations,\n\t\trewritten_text: text.trim(),\n\t\tuses_dispatcher_promise: replacements.length > 0,\n\t};\n}\n\nfunction make_awaited_yield_expression(\n\tnode: ts.Node,\n\tcontent: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): { declaration: string; expression: string } {\n\tconst yield_text = slice_start(content, node).trim();\n\tconst helper_name = context.next_helper_name(`effect_${hint}`);\n\tconst helper_id = make_script_effect_id(node, context);\n\tconst deps = collect_deps(yield_text);\n\tconst deps_text = `[${deps.join(\", \")}]`;\n\n\treturn {\n\t\tdeclaration: `function* ${helper_name}() { return (${yield_text}); }`,\n\t\texpression: [\n\t\t\t`await ${context.dispatcher_name}().promise({`,\n\t\t\t`id: ${JSON.stringify(helper_id)}, `,\n\t\t\t`deps: ${deps_text}, `,\n\t\t\t`factory: () => ${helper_name}()`,\n\t\t\t`})`,\n\t\t].join(\"\"),\n\t};\n}\n\nfunction make_yield_type_helper(\n\tyield_text: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): { declaration: string; type: string } | undefined {\n\tif (!context.emit_types) {\n\t\treturn undefined;\n\t}\n\n\tconst helper_name = context.next_type_helper_name(hint);\n\tconst effect_text = strip_yield_star(yield_text);\n\n\treturn {\n\t\tdeclaration: `function ${helper_name}() { return (${effect_text}); }`,\n\t\ttype: `${context.effect_name}.Success<ReturnType<typeof ${helper_name}>> | undefined`,\n\t};\n}\n\nfunction strip_yield_star(yield_text: string): string {\n\treturn yield_text.replace(/^yield\\*\\s*/, \"\");\n}\n\nfunction make_script_effect_id(expr: ts.Node, context: ScriptLoweringContext): string {\n\treturn `${context.filename}:${expr.getStart()}:${expr.end}`;\n}\n\nfunction is_assignment_operator(expr: ts.BinaryExpression): boolean {\n\treturn (\n\t\texpr.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&\n\t\texpr.operatorToken.kind <= ts.SyntaxKind.LastAssignment\n\t);\n}\n\nfunction is_top_level_rune_call(expr: ts.Expression): boolean {\n\tif (!ts.isCallExpression(expr)) {\n\t\treturn false;\n\t}\n\n\tconst callee = expr.expression;\n\n\tif (ts.isIdentifier(callee)) {\n\t\treturn callee.text.startsWith(\"$\");\n\t}\n\n\treturn (\n\t\tts.isPropertyAccessExpression(callee) &&\n\t\tts.isIdentifier(callee.expression) &&\n\t\tcallee.expression.text.startsWith(\"$\")\n\t);\n}\n\nfunction make_temp_hint(target: string): string {\n\tconst match = target.match(/[A-Za-z_$][\\w$]*$/);\n\n\treturn match?.[0] ?? \"assignment\";\n}\n\nfunction make_binding_hint(name: ts.BindingName): string {\n\tif (ts.isIdentifier(name)) {\n\t\treturn name.text;\n\t}\n\n\treturn \"destructure\";\n}\n\nfunction extract_yield_star_full_text(expr: ts.Expression, content: string): string {\n\tlet found: string | undefined;\n\n\tfind_yield_star_node(expr, (node) => {\n\t\tfound = slice_start(content, node).trim();\n\t});\n\n\treturn found ?? \"undefined\";\n}\n\nfunction make_effect_block(statements: string[], deps: string[]): EffectBlock {\n\treturn {\n\t\tstatements,\n\t\tdeps: [...new Set(deps)],\n\t};\n}\n\nfunction collect_deps(expr_text: string, excluded_names: readonly string[] = []): string[] {\n\tconst excluded = new Set(excluded_names);\n\n\treturn collect_free_identifiers(expr_text).filter(\n\t\t(identifier) => !identifier.startsWith(\"__SER___\") && !excluded.has(identifier),\n\t);\n}\n\nfunction collect_assignment_target_names(node: ts.Node): string[] {\n\tif (ts.isIdentifier(node)) {\n\t\treturn [node.text];\n\t}\n\n\tif (ts.isParenthesizedExpression(node)) {\n\t\treturn collect_assignment_target_names(node.expression);\n\t}\n\n\tif (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) {\n\t\treturn collect_assignment_target_names(node.expression);\n\t}\n\n\tif (ts.isObjectLiteralExpression(node)) {\n\t\treturn node.properties.flatMap((property) => {\n\t\t\tif (ts.isShorthandPropertyAssignment(property)) {\n\t\t\t\treturn [property.name.text];\n\t\t\t}\n\n\t\t\tif (ts.isPropertyAssignment(property)) {\n\t\t\t\treturn collect_assignment_target_names(property.initializer);\n\t\t\t}\n\n\t\t\tif (ts.isSpreadAssignment(property)) {\n\t\t\t\treturn collect_assignment_target_names(property.expression);\n\t\t\t}\n\n\t\t\treturn [];\n\t\t});\n\t}\n\n\tif (ts.isArrayLiteralExpression(node)) {\n\t\treturn node.elements.flatMap((element) =>\n\t\t\tts.isSpreadElement(element)\n\t\t\t\t? collect_assignment_target_names(element.expression)\n\t\t\t\t: collect_assignment_target_names(element),\n\t\t);\n\t}\n\n\treturn [];\n}\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\nimport {\n\tcollect_top_level_binding_names,\n\thas_local_import_binding,\n\tmake_imports,\n} from \"./imports.ts\";\nimport { create_source_map, slice } from \"./source.ts\";\nimport { AwaitInEffectWorkError, PreprocessError } from \"$/errors.ts\";\nimport { make_runtime_block_with_bindings } from \"./runtime-block.ts\";\nimport { collect_yield_star_nodes, contains_top_level_await } from \"./ast.ts\";\nimport { lower_statement } from \"./lower.ts\";\nimport { validate_rune_yield_usage } from \"./runes.ts\";\nimport type {\n\tBlockRef,\n\tEffectBlock,\n\tRelocation,\n\tRuntimeImportBindings,\n\tScriptLoweringContext,\n\tScriptTransformResult,\n} from \"./types.ts\";\n\nimport MagicString from \"magic-string\";\nimport ts from \"typescript\";\n\nexport type { BlockRef, ScriptTransformResult } from \"./types.ts\";\n\ninterface ScriptTransformOptions {\n\temit_types?: boolean;\n}\n\n/**\n * Transforms a `<script effect>` body by lowering top-level `yield*`\n * expressions into Svelte-compatible async rendering declarations or into\n * dependency-tracked `$effect` blocks for effectful statements.\n *\n * @example\n * ```ts\n * const result = transform_script_effect(\n * `let user = $state(yield* getUser(id));`,\n * \"App.svelte\",\n * );\n * ```\n *\n * @since 2.0.0\n * @param content - The raw `<script effect>` body content.\n * @param filename - The source filename, used in error messages.\n * @param options - Optional transform settings for generated script code.\n * @returns The transformed code and any block references.\n */\nexport function transform_script_effect(\n\tcontent: string,\n\tfilename: string,\n\toptions: ScriptTransformOptions = {},\n): ScriptTransformResult {\n\tlet temp_counter = 0;\n\n\tconst source_file = ts.createSourceFile(\n\t\tfilename,\n\t\tcontent,\n\t\tts.ScriptTarget.Latest,\n\t\ttrue,\n\t\tts.ScriptKind.TS,\n\t);\n\n\tconst magic = new MagicString(content);\n\tconst effect_blocks: EffectBlock[] = [];\n\tconst block_refs: BlockRef[] = [];\n\tconst top_level_binding_names = collect_top_level_binding_names(source_file);\n\tconst top_level_binding_names_set = new Set(top_level_binding_names);\n\tconst name_allocator = make_name_allocator(top_level_binding_names);\n\tconst emit_types = options.emit_types ?? true;\n\n\tlet has_effect = false;\n\tlet uses_dispatcher_promise = false;\n\tlet uses_effect_types = false;\n\n\t/** Phase 1: detect imports already provided by the user. */\n\tconst has_effect_import = has_local_import_binding(source_file, \"effect\", \"Effect\");\n\n\tconst has_dispatcher_import = has_local_import_binding(\n\t\tsource_file,\n\t\t\"svelte-effect-runtime/internal/generators\",\n\t\t\"get_dispatcher\",\n\t);\n\n\tconst has_untrack_import = has_local_import_binding(source_file, \"svelte\", \"untrack\");\n\n\tconst reserve_runtime_import = (name: string) =>\n\t\ttop_level_binding_names_set.has(name)\n\t\t\t? name_allocator.reserve(make_generated_name(name, \"\"))\n\t\t\t: name_allocator.reserve(name);\n\n\tconst runtime_bindings: RuntimeImportBindings = {\n\t\tcancel: name_allocator.reserve(\"__SER___cancel\"),\n\t\tdispatcher: has_dispatcher_import\n\t\t\t? \"get_dispatcher\"\n\t\t\t: reserve_runtime_import(\"get_dispatcher\"),\n\t\tdispatcher_value: name_allocator.reserve(\"__SER___dispatcher\"),\n\t\teffect: has_effect_import ? \"Effect\" : reserve_runtime_import(\"Effect\"),\n\t\tprogram: name_allocator.reserve(\"__SER___program\"),\n\t\tuntrack: has_untrack_import ? \"untrack\" : reserve_runtime_import(\"untrack\"),\n\t};\n\n\tconst context: ScriptLoweringContext = {\n\t\tfilename,\n\t\tdispatcher_name: runtime_bindings.dispatcher,\n\t\teffect_name: runtime_bindings.effect,\n\t\temit_types,\n\t\tnext_helper_name(hint?: string) {\n\t\t\treturn name_allocator.reserve(make_generated_name(hint ?? \"helper\", \"\"));\n\t\t},\n\t\tnext_temp_name(hint?: string) {\n\t\t\tconst suffix = temp_counter === 0 ? \"\" : `_${temp_counter}`;\n\t\t\tconst name = make_generated_name(hint ?? String(temp_counter), suffix);\n\n\t\t\ttemp_counter += 1;\n\n\t\t\treturn name_allocator.reserve(name);\n\t\t},\n\t\tnext_type_helper_name(hint?: string) {\n\t\t\treturn name_allocator.reserve(make_generated_name(`type_${hint ?? \"effect\"}`, \"\"));\n\t\t},\n\t};\n\n\t/** Phase 2: lower every top-level statement that contains `yield*`. */\n\tfor (const stmt of source_file.statements) {\n\t\tvalidate_rune_yield_usage(stmt, content, filename);\n\t\tvalidate_script_yield_boundaries(stmt, content, filename);\n\n\t\tconst has_top_level_yield_star = contains_top_level_yield_star(stmt);\n\n\t\tif (!has_top_level_yield_star) {\n\t\t\tcontinue;\n\t\t}\n\n\t\thas_effect = true;\n\t\tconst lowered = lower_statement(stmt, content, context);\n\n\t\tif (lowered.effect_blocks.length > 0 && contains_top_level_await(stmt)) {\n\t\t\tconst text = slice(content, stmt);\n\t\t\tthrow new AwaitInEffectWorkError(filename, text);\n\t\t}\n\n\t\tmagic.overwrite(lowered.range.start, lowered.range.end, lowered.rewritten_text);\n\n\t\tif (lowered.temps.length > 0 || lowered.type_helpers?.length) {\n\t\t\tconst temp_declarations = lowered.temps.map((temp) =>\n\t\t\t\ttemp.type\n\t\t\t\t\t? `let ${temp.name} = $state<${temp.type}>(undefined);`\n\t\t\t\t\t: `let ${temp.name} = $state(undefined);`,\n\t\t\t);\n\n\t\t\tconst prefix = [...(lowered.type_helpers ?? []), ...temp_declarations].join(\"\\n\");\n\n\t\t\tmagic.appendLeft(lowered.range.start, prefix + \"\\n\");\n\t\t}\n\n\t\teffect_blocks.push(...lowered.effect_blocks);\n\t\tuses_dispatcher_promise ||= lowered.uses_dispatcher_promise ?? false;\n\t\tuses_effect_types ||= lowered.temps.some(\n\t\t\t(temp) => temp.type?.includes(`${runtime_bindings.effect}.Success`) ?? false,\n\t\t);\n\t}\n\n\tif (!has_effect) {\n\t\tblock_refs.push({ id: filename, kind: \"script\" });\n\n\t\treturn { code: content, blocks: block_refs };\n\t}\n\n\t/** Phase 3: inject runtime imports after the last user import. */\n\tconst imports = make_imports(\n\t\thas_effect_import,\n\t\thas_dispatcher_import,\n\t\thas_untrack_import,\n\t\truntime_bindings,\n\t\t{\n\t\t\tneeds_dispatcher: effect_blocks.length > 0 || uses_dispatcher_promise,\n\t\t\tneeds_effect: effect_blocks.length > 0 || uses_effect_types,\n\t\t\tneeds_untrack: effect_blocks.length > 0,\n\t\t},\n\t);\n\n\tconst last_import = [...source_file.statements].reverse().find(ts.isImportDeclaration);\n\n\tif (imports) {\n\t\tif (last_import) {\n\t\t\tmagic.appendRight(last_import.end, \"\\n\" + imports);\n\t\t} else {\n\t\t\tmagic.prepend(imports + \"\\n\");\n\t\t}\n\t}\n\n\t/** Phase 4: append the runtime program and lifecycle wiring. */\n\tif (effect_blocks.length > 0) {\n\t\tconst runtime_block = make_runtime_block_with_bindings(effect_blocks, runtime_bindings);\n\n\t\tmagic.append(\"\\n\" + runtime_block);\n\t}\n\n\tblock_refs.push({ id: filename, kind: \"script\" });\n\n\tconst code = magic.toString();\n\n\treturn {\n\t\tcode,\n\t\tblocks: block_refs,\n\t\tmap: create_source_map(magic, filename),\n\t\trelocations: create_script_relocations(content, code, source_file),\n\t};\n}\n\nfunction create_script_relocations(\n\tcontent: string,\n\tcode: string,\n\tsource_file: ts.SourceFile,\n): Relocation[] {\n\tconst candidates = source_file.statements.flatMap((stmt) => {\n\t\tconst relocations: RelocationCandidate[] = [];\n\n\t\tif (contains_top_level_yield_star(stmt) && ts.isVariableStatement(stmt)) {\n\t\t\tfor (const decl of stmt.declarationList.declarations) {\n\t\t\t\tcollect_binding_relocation_candidates(decl.name, relocations);\n\t\t\t}\n\t\t}\n\n\t\tcollect_yield_star_nodes(stmt, (node) => {\n\t\t\tconst text = content.slice(node.getStart(), node.end).trim();\n\n\t\t\trelocations.push({\n\t\t\t\toriginalStart: node.getStart(),\n\t\t\t\toriginalEnd: node.end,\n\t\t\t\ttext,\n\t\t\t\tmatch: \"exact\",\n\t\t\t});\n\t\t});\n\n\t\treturn relocations;\n\t});\n\n\tconst used_ranges: Array<{ start: number; end: number }> = [];\n\n\treturn candidates.flatMap((candidate) => {\n\t\tconst generated_start = find_available_generated_text(code, candidate, used_ranges);\n\n\t\tif (generated_start < 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst generated_end = generated_start + candidate.text.length;\n\t\tused_ranges.push({ start: generated_start, end: generated_end });\n\n\t\treturn [\n\t\t\t{\n\t\t\t\toriginalStart: candidate.originalStart,\n\t\t\t\toriginalEnd: candidate.originalEnd,\n\t\t\t\tgeneratedStart: generated_start,\n\t\t\t\tgeneratedEnd: generated_end,\n\t\t\t},\n\t\t];\n\t});\n}\n\ntype RelocationCandidate = {\n\toriginalStart: number;\n\toriginalEnd: number;\n\ttext: string;\n\tmatch: \"exact\" | \"identifier\";\n};\n\nfunction collect_binding_relocation_candidates(\n\tname: ts.BindingName,\n\tcandidates: RelocationCandidate[],\n): void {\n\tif (ts.isIdentifier(name)) {\n\t\tcandidates.push({\n\t\t\toriginalStart: name.getStart(),\n\t\t\toriginalEnd: name.end,\n\t\t\ttext: name.text,\n\t\t\tmatch: \"identifier\",\n\t\t});\n\n\t\treturn;\n\t}\n\n\tfor (const element of name.elements) {\n\t\tif (ts.isOmittedExpression(element)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tcollect_binding_relocation_candidates(element.name, candidates);\n\t}\n}\n\nfunction find_available_generated_text(\n\tcode: string,\n\tcandidate: RelocationCandidate,\n\tused_ranges: Array<{ start: number; end: number }>,\n): number {\n\tlet search_start = 0;\n\n\twhile (search_start < code.length) {\n\t\tconst index = code.indexOf(candidate.text, search_start);\n\n\t\tif (index < 0) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst end = index + candidate.text.length;\n\t\tconst overlaps_used_range = used_ranges.some(\n\t\t\t(range) => index < range.end && end > range.start,\n\t\t);\n\t\tconst is_text_match =\n\t\t\tcandidate.match === \"exact\" || is_identifier_text_match(code, index, end);\n\n\t\tif (!overlaps_used_range && is_text_match) {\n\t\t\treturn index;\n\t\t}\n\n\t\tsearch_start = candidate.match === \"identifier\" ? index + 1 : end;\n\t}\n\n\treturn -1;\n}\n\nfunction is_identifier_text_match(code: string, start: number, end: number): boolean {\n\tconst before = start === 0 ? 0 : code.charCodeAt(start - 1);\n\tconst after = end >= code.length ? 0 : code.charCodeAt(end);\n\n\treturn !is_identifier_part(before) && !is_identifier_part(after);\n}\n\nfunction is_identifier_part(char_code: number): boolean {\n\treturn (\n\t\t(char_code >= 65 && char_code <= 90) ||\n\t\t(char_code >= 97 && char_code <= 122) ||\n\t\t(char_code >= 48 && char_code <= 57) ||\n\t\tchar_code === 36 ||\n\t\tchar_code === 95\n\t);\n}\n\nfunction validate_script_yield_boundaries(\n\tstmt: ts.Statement,\n\tcontent: string,\n\tfilename: string,\n): void {\n\tconst bad_member = find_class_member_with_yield_star(stmt);\n\n\tif (!bad_member) {\n\t\treturn;\n\t}\n\n\tthrow new PreprocessError(\n\t\t[\n\t\t\t`[ASYNC_EFFECT_IN_CLASS_MEMBER]: ${filename}: yield* cannot be used inside class members.`,\n\t\t\t`Class fields and methods are not component top-level reactive work. Move the Effect work into a script effect statement before assigning it to the class instance.`,\n\t\t\t\"\",\n\t\t\t\"Problematic member:\",\n\t\t\tslice(content, bad_member),\n\t\t].join(\"\\n\"),\n\t\tfilename,\n\t);\n}\n\nfunction find_class_member_with_yield_star(stmt: ts.Statement): ts.Node | undefined {\n\tlet found: ts.Node | undefined;\n\n\tfunction visit(node: ts.Node): void {\n\t\tif (found) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tts.isPropertyDeclaration(node) &&\n\t\t\tnode.initializer &&\n\t\t\tcontains_top_level_yield_star(node.initializer)\n\t\t) {\n\t\t\tfound = node;\n\t\t\treturn;\n\t\t}\n\n\t\tnode.forEachChild(visit);\n\t}\n\n\tvisit(stmt);\n\n\treturn found;\n}\n\nfunction make_name_allocator(initial_names: readonly string[]): {\n\treserve(name: string): string;\n} {\n\tconst used_names = new Set(initial_names);\n\n\treturn {\n\t\treserve(name: string): string {\n\t\t\tlet candidate = name;\n\t\t\tlet suffix = 1;\n\n\t\t\twhile (used_names.has(candidate)) {\n\t\t\t\tcandidate = `${name}_${suffix}`;\n\t\t\t\tsuffix += 1;\n\t\t\t}\n\n\t\t\tused_names.add(candidate);\n\n\t\t\treturn candidate;\n\t\t},\n\t};\n}\n\nfunction make_generated_name(hint: string, suffix: string): string {\n\tconst normalized_hint = hint.replace(/[^A-Za-z0-9_$]/g, \"_\");\n\tconst safe_hint = /^[A-Za-z_$]/.test(normalized_hint)\n\t\t? normalized_hint\n\t\t: `temp_${normalized_hint}`;\n\n\treturn `__SER___${safe_hint}${suffix}`;\n}\n","import { type MarkupTransformTarget, transform_markup_effect } from \"$/markup/transform.ts\";\nimport { transform_script_effect } from \"$/script-transform/index.ts\";\n\n/**\n * Result returned by the direct whole-file Svelte transform.\n *\n * @example\n * ```ts\n * const result = transform_svelte_effect(\"<p>{yield* load()}</p>\", \"App.svelte\");\n * result.code;\n * ```\n *\n * @since 2.5.0\n */\nexport interface SvelteTransformResult {\n\t/** Transformed Svelte source. */\n\tcode: string;\n}\n\n/**\n * Options accepted by the direct whole-file Svelte transform.\n *\n * @example\n * ```ts\n * const options: SvelteTransformOptions = { target: \"client\" };\n * ```\n *\n * @since 2.5.0\n */\nexport interface SvelteTransformOptions {\n\t/** Markup emission target passed through to the markup transform. */\n\ttarget?: MarkupTransformTarget;\n}\n\n/**\n * Lowers SER syntax in a complete Svelte component without using Svelte's\n * adapter API.\n *\n * @example\n * ```ts\n * const result = transform_svelte_effect(\n * \"<script effect>const value = yield* load()</script>\",\n * \"App.svelte\",\n * );\n * ```\n *\n * @since 2.5.0\n * @param content - Full Svelte component source to lower before Svelte parses\n * it.\n * @param filename - Component filename used in generated cache identifiers and\n * diagnostics.\n * @param options - Optional target configuration for markup lowering.\n * @returns The transformed component source.\n */\nexport function transform_svelte_effect(\n\tcontent: string,\n\tfilename = \"unknown.svelte\",\n\toptions: SvelteTransformOptions = {},\n): SvelteTransformResult {\n\tconst script = find_script(content);\n\n\tlet combined = content;\n\n\tif (script?.has_effect) {\n\t\tconst result = transform_script_effect(script.text, filename, {\n\t\t\temit_types: script.is_typescript,\n\t\t});\n\n\t\tcombined =\n\t\t\tcontent.slice(0, script.effect_attr_start) +\n\t\t\tcontent.slice(script.effect_attr_end, script.open_end) +\n\t\t\tresult.code +\n\t\t\tcontent.slice(script.close_start);\n\t}\n\n\tconst result = transform_markup_effect(combined, filename, {\n\t\ttarget: options.target,\n\t});\n\n\treturn { code: result.code };\n}\n\nfunction find_script(content: string):\n\t| {\n\t\t\ttext: string;\n\t\t\topen_end: number;\n\t\t\tclose_start: number;\n\t\t\thas_effect: boolean;\n\t\t\teffect_attr_start: number;\n\t\t\teffect_attr_end: number;\n\t\t\tis_typescript: boolean;\n\t }\n\t| undefined {\n\tconst pattern = /<script\\b([^>]*)>([\\s\\S]*?)<\\/script\\s*>/gi;\n\n\tfor (const match of content.matchAll(pattern)) {\n\t\tif (match.index === undefined || /\\bmodule\\b/.test(match[1] ?? \"\")) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst attrs = match[1] ?? \"\";\n\t\tconst effect_match = /\\s+effect(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s>]+))?/.exec(attrs);\n\t\tconst open_end = match.index + match[0].indexOf(\">\") + 1;\n\t\tconst attr_start = effect_match?.index ?? attrs.length;\n\t\tconst attr_end = attr_start + (effect_match?.[0].length ?? 0);\n\n\t\treturn {\n\t\t\ttext: match[2],\n\t\t\topen_end,\n\t\t\tclose_start: match.index + match[0].lastIndexOf(\"<\"),\n\t\t\thas_effect: effect_match !== null,\n\t\t\teffect_attr_start: match.index + \"<script\".length + attr_start,\n\t\t\teffect_attr_end: match.index + \"<script\".length + attr_end,\n\t\t\tis_typescript: has_typescript_lang(attrs),\n\t\t};\n\t}\n\n\treturn undefined;\n}\n\nfunction has_typescript_lang(attrs: string): boolean {\n\tconst lang_match = /\\blang\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s>]+))/i.exec(attrs);\n\tconst lang = (lang_match?.[1] ?? lang_match?.[2] ?? lang_match?.[3] ?? \"\").toLowerCase();\n\n\treturn lang === \"ts\" || lang === \"typescript\";\n}\n\nexport {\n\ttype MarkupTransformOptions,\n\ttype MarkupTransformResult,\n\ttype MarkupTransformTarget,\n\ttransform_markup_effect,\n} from \"$/markup/transform.ts\";\n\nexport {\n\ttype BlockRef,\n\ttype ScriptTransformResult,\n\ttransform_script_effect,\n} from \"$/script-transform/index.ts\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transform.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/script-transform/runtime-block.ts","../../../modules/svelte-effect-runtime/src/script-transform/lower.ts","../../../modules/svelte-effect-runtime/src/script-transform/index.ts","../../../modules/svelte-effect-runtime/src/runtime/transform.ts"],"sourcesContent":["import type { EffectBlock, RuntimeImportBindings } from \"./types.ts\";\n\n/**\n * Builds the runtime blocks appended to lowered script effect code.\n *\n * @since 2.0.0\n * @param blocks - Effect bodies and dependency reads to emit.\n * @returns Full `$effect` blocks that fork generated `Effect.gen` programs.\n */\nexport function make_runtime_block(blocks: EffectBlock[]): string {\n\tconst bindings: RuntimeImportBindings = {\n\t\tcancel: \"__SER___cancel\",\n\t\tdispatcher: \"get_dispatcher\",\n\t\tdispatcher_value: \"__SER___dispatcher\",\n\t\teffect: \"Effect\",\n\t\tprogram: \"__SER___program\",\n\t\tuntrack: \"untrack\",\n\t\tyield_success: \"YieldSuccess\",\n\t\tyieldable: \"ToEffect\",\n\t};\n\n\treturn make_runtime_block_with_bindings(blocks, bindings);\n}\n\n/**\n * Builds the runtime blocks appended to lowered script effect code with\n * explicit runtime import bindings.\n *\n * @since 2.4.2\n * @param blocks - Effect bodies and dependency reads to emit.\n * @param bindings - Runtime binding names available in the generated code.\n * @returns Full `$effect` blocks that fork generated `Effect.gen` programs.\n */\nexport function make_runtime_block_with_bindings(\n\tblocks: EffectBlock[],\n\tbindings: RuntimeImportBindings,\n): string {\n\tconst merged_block = merge_effect_blocks(blocks);\n\tconst dep_reads = merged_block.deps.map((dep) => ` ${dep};`);\n\n\tconst body = merged_block.statements.map((statement) => ` ${statement}`).join(\"\\n\");\n\n\treturn [\n\t\t\"\",\n\t\t\"$effect(() => {\",\n\t\t...dep_reads,\n\t\t` const ${bindings.dispatcher_value} = ${bindings.dispatcher}();`,\n\t\t` const ${bindings.program} = ${bindings.effect}.gen(function* () {`,\n\t\tbody,\n\t\t\" });\",\n\t\t` const ${bindings.cancel} = ${bindings.untrack}(() => ${bindings.dispatcher_value}.fork(${bindings.program}));`,\n\t\t` import.meta.hot?.dispose(${bindings.cancel});`,\n\t\t` return ${bindings.cancel};`,\n\t\t\"});\",\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\nfunction merge_effect_blocks(blocks: EffectBlock[]): EffectBlock {\n\tconst statements = blocks.flatMap((block) => block.statements);\n\tconst deps = blocks.flatMap((block) => block.deps);\n\n\treturn {\n\t\tstatements,\n\t\tdeps: [...new Set(deps)],\n\t};\n}\n","import { collect_free_identifiers } from \"$/markup/transform/expressions.ts\";\nimport { contains_top_level_yield_star } from \"$/detect.ts\";\nimport { collect_yield_star_nodes, find_yield_star_node, is_yield_star_expression } from \"./ast.ts\";\nimport { slice, slice_start } from \"./source.ts\";\nimport type {\n\tEffectBlock,\n\tLoweredExpression,\n\tLoweredStatement,\n\tScriptLoweringContext,\n\tTempBinding,\n} from \"./types.ts\";\n\nimport ts from \"typescript\";\n\n/**\n * Delegates a statement to the correct lowerer based on syntax kind.\n *\n * @since 2.0.0\n * @param stmt - Statement to lower.\n * @param content - Original source text.\n * @param context - Lowering services for this transform pass.\n * @returns Lowered statement descriptor.\n */\nexport function lower_statement(\n\tstmt: ts.Statement,\n\tcontent: string,\n\tcontext: ScriptLoweringContext,\n): LoweredStatement {\n\tif (ts.isExpressionStatement(stmt)) {\n\t\treturn lower_expression_statement(stmt, content, context);\n\t}\n\n\tif (ts.isVariableStatement(stmt)) {\n\t\treturn lower_variable_statement(stmt, content, context);\n\t}\n\n\tconst text = slice(content, stmt);\n\tconst wrapped_text = wrap_yield_stars_in_node(stmt, content, context);\n\n\treturn {\n\t\ttemps: [],\n\t\trewritten_text: \"\",\n\t\teffect_blocks: [make_effect_block([wrapped_text], collect_deps(text))],\n\t\trange: { start: stmt.getFullStart(), end: stmt.end },\n\t};\n}\n\nfunction lower_variable_statement(\n\tstmt: ts.VariableStatement,\n\tcontent: string,\n\tcontext: ScriptLoweringContext,\n): LoweredStatement {\n\tconst helper_declarations: string[] = [];\n\tconst rewritten_decls: string[] = [];\n\n\tconst decl_list = stmt.declarationList;\n\tconst kind = (decl_list.flags & ts.NodeFlags.Let) !== 0 ? \"let\" : \"const\";\n\tlet uses_dispatcher_promise = false;\n\n\tfor (const decl of decl_list.declarations) {\n\t\tif (!contains_top_level_yield_star(decl)) {\n\t\t\trewritten_decls.push(slice(content, decl).trim());\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst lowered = lower_node_yields_to_await(\n\t\t\tdecl,\n\t\t\tcontent,\n\t\t\tmake_binding_hint(decl.name),\n\t\t\tcontext,\n\t\t);\n\n\t\thelper_declarations.push(...lowered.helper_declarations);\n\t\trewritten_decls.push(lowered.rewritten_text);\n\t\tuses_dispatcher_promise ||= lowered.uses_dispatcher_promise;\n\t}\n\n\tconst rewritten_text = `${kind} ${rewritten_decls.join(\", \")};`;\n\n\treturn {\n\t\ttemps: [],\n\t\ttype_helpers: helper_declarations,\n\t\trewritten_text,\n\t\teffect_blocks: [],\n\t\tuses_dispatcher_promise,\n\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t};\n}\n\nfunction lower_expression_statement(\n\tstmt: ts.ExpressionStatement,\n\tcontent: string,\n\tcontext: ScriptLoweringContext,\n): LoweredStatement {\n\tconst expr = stmt.expression;\n\n\tif (!contains_top_level_yield_star(expr)) {\n\t\treturn {\n\t\t\ttemps: [],\n\t\t\trewritten_text: slice(content, stmt).trim(),\n\t\t\teffect_blocks: [],\n\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tif (is_yield_star_expression(expr)) {\n\t\tconst text = slice(content, expr).trim();\n\t\tconst yield_text = wrap_yield_text(text, context);\n\n\t\treturn {\n\t\t\ttemps: [],\n\t\t\trewritten_text: \"\",\n\t\t\teffect_blocks: [make_effect_block([yield_text + \";\"], collect_deps(text))],\n\t\t\trange: { start: stmt.getFullStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tif (ts.isBinaryExpression(expr) && is_assignment_operator(expr)) {\n\t\tconst target = slice(content, expr.left).trim();\n\t\tconst target_names = collect_assignment_target_names(expr.left);\n\n\t\tif (\n\t\t\texpr.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n\t\t\tis_yield_star_expression(expr.right)\n\t\t) {\n\t\t\tconst yield_text = extract_yield_star_full_text(expr.right, content);\n\t\t\tconst wrapped_yield_text = wrap_yield_text(yield_text, context);\n\n\t\t\treturn {\n\t\t\t\ttemps: [],\n\t\t\t\trewritten_text: \"\",\n\t\t\t\teffect_blocks: [\n\t\t\t\t\tmake_effect_block(\n\t\t\t\t\t\t[`${target} = ${wrapped_yield_text};`],\n\t\t\t\t\t\tcollect_deps(yield_text, target_names),\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t\t};\n\t\t}\n\n\t\tconst lowered = lower_expression_yields(\n\t\t\texpr.right,\n\t\t\tcontent,\n\t\t\tmake_temp_hint(target),\n\t\t\tcontext,\n\t\t);\n\t\tconst temp_names = lowered.temps.map((temp) => temp.name);\n\t\tconst statement = `${target} ${slice(\n\t\t\tcontent,\n\t\t\texpr.operatorToken,\n\t\t).trim()} ${lowered.rewritten_expr};`;\n\n\t\treturn {\n\t\t\ttemps: lowered.temps,\n\t\t\ttype_helpers: lowered.type_helpers,\n\t\t\trewritten_text: \"\",\n\t\t\teffect_blocks: [\n\t\t\t\tmake_effect_block(\n\t\t\t\t\t[...lowered.effect_blocks.flatMap((block) => block.statements), statement],\n\t\t\t\t\t[\n\t\t\t\t\t\t...lowered.effect_blocks.flatMap((block) => block.deps),\n\t\t\t\t\t\t...collect_deps(lowered.rewritten_expr, [...target_names, ...temp_names]),\n\t\t\t\t\t],\n\t\t\t\t),\n\t\t\t],\n\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tconst lowered = lower_expression_yields(expr, content, \"call\", context);\n\n\tif (is_top_level_rune_call(expr)) {\n\t\treturn {\n\t\t\ttemps: lowered.temps,\n\t\t\ttype_helpers: lowered.type_helpers,\n\t\t\trewritten_text: lowered.rewritten_expr + \";\",\n\t\t\teffect_blocks: lowered.effect_blocks,\n\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tconst temp_names = lowered.temps.map((temp) => temp.name);\n\n\treturn {\n\t\ttemps: lowered.temps,\n\t\ttype_helpers: lowered.type_helpers,\n\t\trewritten_text: \"\",\n\t\teffect_blocks: [\n\t\t\tmake_effect_block(\n\t\t\t\t[\n\t\t\t\t\t...lowered.effect_blocks.flatMap((block) => block.statements),\n\t\t\t\t\tlowered.rewritten_expr + \";\",\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t...lowered.effect_blocks.flatMap((block) => block.deps),\n\t\t\t\t\t...collect_deps(lowered.rewritten_expr, temp_names),\n\t\t\t\t],\n\t\t\t),\n\t\t],\n\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t};\n}\n\nfunction lower_expression_yields(\n\texpr: ts.Expression,\n\tcontent: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): LoweredExpression {\n\tconst replacements: Array<{\n\t\tstart: number;\n\t\tend: number;\n\t\ttext: string;\n\t}> = [];\n\n\tconst temps: TempBinding[] = [];\n\tconst type_helpers: string[] = [];\n\tconst statements: string[] = [];\n\tconst deps: string[] = [];\n\n\tcollect_yield_star_nodes(expr, (node) => {\n\t\tconst temp_name = context.next_temp_name(hint);\n\t\tconst yield_text = slice_start(content, node).trim();\n\t\tconst type_helper = make_yield_type_helper(yield_text, hint, context);\n\n\t\tif (type_helper) {\n\t\t\ttype_helpers.push(type_helper.declaration);\n\t\t\ttemps.push({ name: temp_name, type: type_helper.type });\n\t\t} else {\n\t\t\ttemps.push({ name: temp_name });\n\t\t}\n\n\t\tstatements.push(`${temp_name} = ${wrap_yield_text(yield_text, context)};`);\n\t\tdeps.push(...collect_deps(yield_text));\n\t\treplacements.push({\n\t\t\tstart: node.getStart(),\n\t\t\tend: node.end,\n\t\t\ttext: temp_name,\n\t\t});\n\t});\n\n\tif (replacements.length === 0) {\n\t\treturn {\n\t\t\ttemps,\n\t\t\ttype_helpers,\n\t\t\trewritten_expr: slice(content, expr).trim(),\n\t\t\teffect_blocks: [],\n\t\t};\n\t}\n\n\treplacements.sort((a, b) => b.start - a.start);\n\n\tlet text = slice(content, expr);\n\n\tconst offset_in_expr = expr.getFullStart();\n\n\tfor (const replacement of replacements) {\n\t\ttext =\n\t\t\ttext.slice(0, replacement.start - offset_in_expr) +\n\t\t\treplacement.text +\n\t\t\ttext.slice(replacement.end - offset_in_expr);\n\t}\n\n\treturn {\n\t\ttemps,\n\t\ttype_helpers,\n\t\trewritten_expr: text.trim(),\n\t\teffect_blocks: [make_effect_block(statements, deps)],\n\t};\n}\n\nfunction lower_node_yields_to_await(\n\tnode: ts.Node,\n\tcontent: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): {\n\thelper_declarations: string[];\n\trewritten_text: string;\n\tuses_dispatcher_promise: boolean;\n} {\n\tconst helper_declarations: string[] = [];\n\tconst replacements: Array<{\n\t\tstart: number;\n\t\tend: number;\n\t\ttext: string;\n\t}> = [];\n\n\tcollect_yield_star_nodes(node, (yield_node) => {\n\t\tconst awaited = make_awaited_yield_expression(yield_node, content, hint, context);\n\n\t\thelper_declarations.push(awaited.declaration);\n\t\treplacements.push({\n\t\t\tstart: yield_node.getStart(),\n\t\t\tend: yield_node.end,\n\t\t\ttext: awaited.expression,\n\t\t});\n\t});\n\n\treplacements.sort((a, b) => b.start - a.start);\n\n\tlet text = slice_start(content, node);\n\tconst offset_in_node = node.getStart();\n\n\tfor (const replacement of replacements) {\n\t\ttext =\n\t\t\ttext.slice(0, replacement.start - offset_in_node) +\n\t\t\treplacement.text +\n\t\t\ttext.slice(replacement.end - offset_in_node);\n\t}\n\n\treturn {\n\t\thelper_declarations,\n\t\trewritten_text: text.trim(),\n\t\tuses_dispatcher_promise: replacements.length > 0,\n\t};\n}\n\nfunction make_awaited_yield_expression(\n\tnode: ts.Node,\n\tcontent: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): { declaration: string; expression: string } {\n\tconst yield_text = slice_start(content, node).trim();\n\tconst helper_name = context.next_helper_name(`effect_${hint}`);\n\tconst helper_id = make_script_effect_id(node, context);\n\tconst deps = collect_deps(yield_text);\n\tconst deps_text = `[${deps.join(\", \")}]`;\n\tconst wrapped_yield_text = wrap_yield_text(yield_text, context);\n\n\treturn {\n\t\tdeclaration: `function* ${helper_name}() { return (${wrapped_yield_text}); }`,\n\t\texpression: [\n\t\t\t`await ${context.dispatcher_name}().promise({`,\n\t\t\t`id: ${JSON.stringify(helper_id)}, `,\n\t\t\t`deps: ${deps_text}, `,\n\t\t\t`factory: () => ${helper_name}()`,\n\t\t\t`})`,\n\t\t].join(\"\"),\n\t};\n}\n\nfunction make_yield_type_helper(\n\tyield_text: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): { declaration: string; type: string } | undefined {\n\tif (!context.emit_types) {\n\t\treturn undefined;\n\t}\n\n\tconst helper_name = context.next_type_helper_name(hint);\n\tconst effect_text = strip_yield_star(yield_text);\n\n\treturn {\n\t\tdeclaration: `function ${helper_name}() { return (${effect_text}); }`,\n\t\ttype: `${context.yield_success_name}<ReturnType<typeof ${helper_name}>> | undefined`,\n\t};\n}\n\nfunction strip_yield_star(yield_text: string): string {\n\treturn yield_text.replace(/^yield\\s*\\*\\s*/, \"\");\n}\n\nfunction wrap_yield_text(yield_text: string, context: ScriptLoweringContext): string {\n\treturn `yield* ${context.yieldable_name}(${strip_yield_star(yield_text)})`;\n}\n\nfunction wrap_yield_stars_in_node(\n\tnode: ts.Node,\n\tcontent: string,\n\tcontext: ScriptLoweringContext,\n): string {\n\tconst replacements: Array<{\n\t\tstart: number;\n\t\tend: number;\n\t\ttext: string;\n\t}> = [];\n\n\tcollect_yield_star_nodes(node, (yield_node) => {\n\t\tconst yield_text = slice_start(content, yield_node).trim();\n\n\t\treplacements.push({\n\t\t\tstart: yield_node.getStart(),\n\t\t\tend: yield_node.end,\n\t\t\ttext: wrap_yield_text(yield_text, context),\n\t\t});\n\t});\n\n\treplacements.sort((a, b) => b.start - a.start);\n\n\tconst offset = node.getFullStart();\n\tlet text = slice(content, node);\n\n\tfor (const replacement of replacements) {\n\t\ttext =\n\t\t\ttext.slice(0, replacement.start - offset) +\n\t\t\treplacement.text +\n\t\t\ttext.slice(replacement.end - offset);\n\t}\n\n\treturn text.trim();\n}\n\nfunction make_script_effect_id(expr: ts.Node, context: ScriptLoweringContext): string {\n\treturn `${context.filename}:${expr.getStart()}:${expr.end}`;\n}\n\nfunction is_assignment_operator(expr: ts.BinaryExpression): boolean {\n\treturn (\n\t\texpr.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&\n\t\texpr.operatorToken.kind <= ts.SyntaxKind.LastAssignment\n\t);\n}\n\nfunction is_top_level_rune_call(expr: ts.Expression): boolean {\n\tif (!ts.isCallExpression(expr)) {\n\t\treturn false;\n\t}\n\n\tconst callee = expr.expression;\n\n\tif (ts.isIdentifier(callee)) {\n\t\treturn callee.text.startsWith(\"$\");\n\t}\n\n\treturn (\n\t\tts.isPropertyAccessExpression(callee) &&\n\t\tts.isIdentifier(callee.expression) &&\n\t\tcallee.expression.text.startsWith(\"$\")\n\t);\n}\n\nfunction make_temp_hint(target: string): string {\n\tconst match = target.match(/[A-Za-z_$][\\w$]*$/);\n\n\treturn match?.[0] ?? \"assignment\";\n}\n\nfunction make_binding_hint(name: ts.BindingName): string {\n\tif (ts.isIdentifier(name)) {\n\t\treturn name.text;\n\t}\n\n\treturn \"destructure\";\n}\n\nfunction extract_yield_star_full_text(expr: ts.Expression, content: string): string {\n\tlet found: string | undefined;\n\n\tfind_yield_star_node(expr, (node) => {\n\t\tfound = slice_start(content, node).trim();\n\t});\n\n\treturn found ?? \"undefined\";\n}\n\nfunction make_effect_block(statements: string[], deps: string[]): EffectBlock {\n\treturn {\n\t\tstatements,\n\t\tdeps: [...new Set(deps)],\n\t};\n}\n\nfunction collect_deps(expr_text: string, excluded_names: readonly string[] = []): string[] {\n\tconst excluded = new Set(excluded_names);\n\n\treturn collect_free_identifiers(expr_text).filter(\n\t\t(identifier) => !identifier.startsWith(\"__SER___\") && !excluded.has(identifier),\n\t);\n}\n\nfunction collect_assignment_target_names(node: ts.Node): string[] {\n\tif (ts.isIdentifier(node)) {\n\t\treturn [node.text];\n\t}\n\n\tif (ts.isParenthesizedExpression(node)) {\n\t\treturn collect_assignment_target_names(node.expression);\n\t}\n\n\tif (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) {\n\t\treturn collect_assignment_target_names(node.expression);\n\t}\n\n\tif (ts.isObjectLiteralExpression(node)) {\n\t\treturn node.properties.flatMap((property) => {\n\t\t\tif (ts.isShorthandPropertyAssignment(property)) {\n\t\t\t\treturn [property.name.text];\n\t\t\t}\n\n\t\t\tif (ts.isPropertyAssignment(property)) {\n\t\t\t\treturn collect_assignment_target_names(property.initializer);\n\t\t\t}\n\n\t\t\tif (ts.isSpreadAssignment(property)) {\n\t\t\t\treturn collect_assignment_target_names(property.expression);\n\t\t\t}\n\n\t\t\treturn [];\n\t\t});\n\t}\n\n\tif (ts.isArrayLiteralExpression(node)) {\n\t\treturn node.elements.flatMap((element) =>\n\t\t\tts.isSpreadElement(element)\n\t\t\t\t? collect_assignment_target_names(element.expression)\n\t\t\t\t: collect_assignment_target_names(element),\n\t\t);\n\t}\n\n\treturn [];\n}\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\nimport {\n\tcollect_top_level_binding_names,\n\thas_local_import_binding,\n\tmake_imports,\n} from \"./imports.ts\";\nimport { create_source_map, slice } from \"./source.ts\";\nimport { AwaitInEffectWorkError, PreprocessError } from \"$/errors.ts\";\nimport { make_runtime_block_with_bindings } from \"./runtime-block.ts\";\nimport { collect_yield_star_nodes, contains_top_level_await } from \"./ast.ts\";\nimport { lower_statement } from \"./lower.ts\";\nimport { validate_rune_yield_usage } from \"./runes.ts\";\nimport type {\n\tBlockRef,\n\tEffectBlock,\n\tRelocation,\n\tRuntimeImportBindings,\n\tScriptLoweringContext,\n\tScriptTransformResult,\n} from \"./types.ts\";\n\nimport MagicString from \"magic-string\";\nimport ts from \"typescript\";\n\nexport type { BlockRef, ScriptTransformResult } from \"./types.ts\";\n\ninterface ScriptTransformOptions {\n\temit_types?: boolean;\n}\n\n/**\n * Transforms a `<script effect>` body by lowering top-level `yield*`\n * expressions into Svelte-compatible async rendering declarations or into\n * dependency-tracked `$effect` blocks for effectful statements.\n *\n * @example\n * ```ts\n * const result = transform_script_effect(\n * `let user = $state(yield* getUser(id));`,\n * \"App.svelte\",\n * );\n * ```\n *\n * @since 2.0.0\n * @param content - The raw `<script effect>` body content.\n * @param filename - The source filename, used in error messages.\n * @param options - Optional transform settings for generated script code.\n * @returns The transformed code and any block references.\n */\nexport function transform_script_effect(\n\tcontent: string,\n\tfilename: string,\n\toptions: ScriptTransformOptions = {},\n): ScriptTransformResult {\n\tlet temp_counter = 0;\n\n\tconst source_file = ts.createSourceFile(\n\t\tfilename,\n\t\tcontent,\n\t\tts.ScriptTarget.Latest,\n\t\ttrue,\n\t\tts.ScriptKind.TS,\n\t);\n\n\tconst magic = new MagicString(content);\n\tconst effect_blocks: EffectBlock[] = [];\n\tconst block_refs: BlockRef[] = [];\n\tconst top_level_binding_names = collect_top_level_binding_names(source_file);\n\tconst top_level_binding_names_set = new Set(top_level_binding_names);\n\tconst name_allocator = make_name_allocator(top_level_binding_names);\n\tconst emit_types = options.emit_types ?? true;\n\n\tlet has_effect = false;\n\tlet uses_dispatcher_promise = false;\n\tlet uses_yield_success_types = false;\n\n\t/** Phase 1: detect imports already provided by the user. */\n\tconst has_effect_import = has_local_import_binding(source_file, \"effect\", \"Effect\");\n\n\tconst has_dispatcher_import = has_local_import_binding(\n\t\tsource_file,\n\t\t\"svelte-effect-runtime/internal/generators\",\n\t\t\"get_dispatcher\",\n\t);\n\n\tconst has_untrack_import = has_local_import_binding(source_file, \"svelte\", \"untrack\");\n\n\tconst reserve_runtime_import = (name: string) =>\n\t\ttop_level_binding_names_set.has(name)\n\t\t\t? name_allocator.reserve(make_generated_name(name, \"\"))\n\t\t\t: name_allocator.reserve(name);\n\n\tconst runtime_bindings: RuntimeImportBindings = {\n\t\tcancel: name_allocator.reserve(\"__SER___cancel\"),\n\t\tdispatcher: has_dispatcher_import\n\t\t\t? \"get_dispatcher\"\n\t\t\t: reserve_runtime_import(\"get_dispatcher\"),\n\t\tdispatcher_value: name_allocator.reserve(\"__SER___dispatcher\"),\n\t\teffect: has_effect_import ? \"Effect\" : reserve_runtime_import(\"Effect\"),\n\t\tprogram: name_allocator.reserve(\"__SER___program\"),\n\t\tuntrack: has_untrack_import ? \"untrack\" : reserve_runtime_import(\"untrack\"),\n\t\tyield_success: reserve_runtime_import(\"YieldSuccess\"),\n\t\tyieldable: reserve_runtime_import(\"ToEffect\"),\n\t};\n\n\tconst context: ScriptLoweringContext = {\n\t\tfilename,\n\t\tdispatcher_name: runtime_bindings.dispatcher,\n\t\teffect_name: runtime_bindings.effect,\n\t\temit_types,\n\t\tyield_success_name: runtime_bindings.yield_success,\n\t\tyieldable_name: runtime_bindings.yieldable,\n\t\tnext_helper_name(hint?: string) {\n\t\t\treturn name_allocator.reserve(make_generated_name(hint ?? \"helper\", \"\"));\n\t\t},\n\t\tnext_temp_name(hint?: string) {\n\t\t\tconst suffix = temp_counter === 0 ? \"\" : `_${temp_counter}`;\n\t\t\tconst name = make_generated_name(hint ?? String(temp_counter), suffix);\n\n\t\t\ttemp_counter += 1;\n\n\t\t\treturn name_allocator.reserve(name);\n\t\t},\n\t\tnext_type_helper_name(hint?: string) {\n\t\t\treturn name_allocator.reserve(make_generated_name(`type_${hint ?? \"effect\"}`, \"\"));\n\t\t},\n\t};\n\n\t/** Phase 2: lower every top-level statement that contains `yield*`. */\n\tfor (const stmt of source_file.statements) {\n\t\tvalidate_rune_yield_usage(stmt, content, filename);\n\t\tvalidate_script_yield_boundaries(stmt, content, filename);\n\n\t\tconst has_top_level_yield_star = contains_top_level_yield_star(stmt);\n\n\t\tif (!has_top_level_yield_star) {\n\t\t\tcontinue;\n\t\t}\n\n\t\thas_effect = true;\n\t\tconst lowered = lower_statement(stmt, content, context);\n\n\t\tif (lowered.effect_blocks.length > 0 && contains_top_level_await(stmt)) {\n\t\t\tconst text = slice(content, stmt);\n\t\t\tthrow new AwaitInEffectWorkError(filename, text);\n\t\t}\n\n\t\tmagic.overwrite(lowered.range.start, lowered.range.end, lowered.rewritten_text);\n\n\t\tif (lowered.temps.length > 0 || lowered.type_helpers?.length) {\n\t\t\tconst temp_declarations = lowered.temps.map((temp) =>\n\t\t\t\ttemp.type\n\t\t\t\t\t? `let ${temp.name} = $state<${temp.type}>(undefined);`\n\t\t\t\t\t: `let ${temp.name} = $state(undefined);`,\n\t\t\t);\n\n\t\t\tconst prefix = [...(lowered.type_helpers ?? []), ...temp_declarations].join(\"\\n\");\n\n\t\t\tmagic.appendLeft(lowered.range.start, prefix + \"\\n\");\n\t\t}\n\n\t\teffect_blocks.push(...lowered.effect_blocks);\n\t\tuses_dispatcher_promise ||= lowered.uses_dispatcher_promise ?? false;\n\t\tuses_yield_success_types ||= lowered.temps.some(\n\t\t\t(temp) => temp.type?.includes(runtime_bindings.yield_success) ?? false,\n\t\t);\n\t}\n\n\tif (!has_effect) {\n\t\tblock_refs.push({ id: filename, kind: \"script\" });\n\n\t\treturn { code: content, blocks: block_refs };\n\t}\n\n\t/** Phase 3: inject runtime imports after the last user import. */\n\tconst imports = make_imports(\n\t\thas_effect_import,\n\t\thas_dispatcher_import,\n\t\thas_untrack_import,\n\t\truntime_bindings,\n\t\t{\n\t\t\tneeds_dispatcher: effect_blocks.length > 0 || uses_dispatcher_promise,\n\t\t\tneeds_effect: effect_blocks.length > 0,\n\t\t\tneeds_untrack: effect_blocks.length > 0,\n\t\t\tneeds_yield_success: uses_yield_success_types,\n\t\t\tneeds_yieldable: effect_blocks.length > 0 || uses_dispatcher_promise,\n\t\t},\n\t);\n\n\tconst last_import = [...source_file.statements].reverse().find(ts.isImportDeclaration);\n\n\tif (imports) {\n\t\tif (last_import) {\n\t\t\tmagic.appendRight(last_import.end, \"\\n\" + imports);\n\t\t} else {\n\t\t\tmagic.prepend(imports + \"\\n\");\n\t\t}\n\t}\n\n\t/** Phase 4: append the runtime program and lifecycle wiring. */\n\tif (effect_blocks.length > 0) {\n\t\tconst runtime_block = make_runtime_block_with_bindings(effect_blocks, runtime_bindings);\n\n\t\tmagic.append(\"\\n\" + runtime_block);\n\t}\n\n\tblock_refs.push({ id: filename, kind: \"script\" });\n\n\tconst code = magic.toString();\n\n\treturn {\n\t\tcode,\n\t\tblocks: block_refs,\n\t\tmap: create_source_map(magic, filename),\n\t\trelocations: create_script_relocations(\n\t\t\tcontent,\n\t\t\tcode,\n\t\t\tsource_file,\n\t\t\truntime_bindings.yieldable,\n\t\t),\n\t};\n}\n\nfunction create_script_relocations(\n\tcontent: string,\n\tcode: string,\n\tsource_file: ts.SourceFile,\n\tyieldable_name: string,\n): Relocation[] {\n\tconst candidates = source_file.statements.flatMap((stmt) => {\n\t\tconst relocations: RelocationCandidate[] = [];\n\n\t\tif (contains_top_level_yield_star(stmt) && ts.isVariableStatement(stmt)) {\n\t\t\tfor (const decl of stmt.declarationList.declarations) {\n\t\t\t\tcollect_binding_relocation_candidates(decl.name, relocations);\n\t\t\t}\n\t\t}\n\n\t\tcollect_yield_star_nodes(stmt, (node) => {\n\t\t\tconst expression = ts.isBinaryExpression(node) ? node.right : node;\n\t\t\tconst text = content.slice(expression.getStart(), expression.end).trim();\n\n\t\t\trelocations.push({\n\t\t\t\toriginalStart: expression.getStart(),\n\t\t\t\toriginalEnd: expression.end,\n\t\t\t\ttext,\n\t\t\t\tmatch: \"yield_operand\",\n\t\t\t\twrapper: `${yieldable_name}(${text})`,\n\t\t\t});\n\t\t});\n\n\t\treturn relocations;\n\t});\n\n\tconst used_ranges: Array<{ start: number; end: number }> = [];\n\n\treturn candidates.flatMap((candidate) => {\n\t\tconst generated_start = find_available_generated_text(code, candidate, used_ranges);\n\n\t\tif (generated_start < 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst generated_end = generated_start + candidate.text.length;\n\t\tused_ranges.push({ start: generated_start, end: generated_end });\n\n\t\treturn [\n\t\t\t{\n\t\t\t\toriginalStart: candidate.originalStart,\n\t\t\t\toriginalEnd: candidate.originalEnd,\n\t\t\t\tgeneratedStart: generated_start,\n\t\t\t\tgeneratedEnd: generated_end,\n\t\t\t},\n\t\t];\n\t});\n}\n\ntype RelocationCandidate = {\n\toriginalStart: number;\n\toriginalEnd: number;\n\ttext: string;\n\tmatch: \"exact\" | \"identifier\" | \"yield_operand\";\n\twrapper?: string;\n};\n\nfunction collect_binding_relocation_candidates(\n\tname: ts.BindingName,\n\tcandidates: RelocationCandidate[],\n): void {\n\tif (ts.isIdentifier(name)) {\n\t\tcandidates.push({\n\t\t\toriginalStart: name.getStart(),\n\t\t\toriginalEnd: name.end,\n\t\t\ttext: name.text,\n\t\t\tmatch: \"identifier\",\n\t\t});\n\n\t\treturn;\n\t}\n\n\tfor (const element of name.elements) {\n\t\tif (ts.isOmittedExpression(element)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tcollect_binding_relocation_candidates(element.name, candidates);\n\t}\n}\n\nfunction find_available_generated_text(\n\tcode: string,\n\tcandidate: RelocationCandidate,\n\tused_ranges: Array<{ start: number; end: number }>,\n): number {\n\tlet search_start = 0;\n\n\twhile (search_start < code.length) {\n\t\tconst search_text =\n\t\t\tcandidate.match === \"yield_operand\" ? candidate.wrapper : candidate.text;\n\n\t\tif (!search_text) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst index = code.indexOf(search_text, search_start);\n\n\t\tif (index < 0) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst operand_offset =\n\t\t\tcandidate.match === \"yield_operand\" && candidate.wrapper\n\t\t\t\t? candidate.wrapper.indexOf(candidate.text)\n\t\t\t\t: 0;\n\t\tconst start = index + Math.max(operand_offset, 0);\n\t\tconst end = start + candidate.text.length;\n\t\tconst overlaps_used_range = used_ranges.some(\n\t\t\t(range) => start < range.end && end > range.start,\n\t\t);\n\t\tconst is_text_match =\n\t\t\tcandidate.match !== \"identifier\" || is_identifier_text_match(code, start, end);\n\n\t\tif (!overlaps_used_range && is_text_match) {\n\t\t\treturn start;\n\t\t}\n\n\t\tsearch_start = candidate.match === \"identifier\" ? index + 1 : index + search_text.length;\n\t}\n\n\treturn -1;\n}\n\nfunction is_identifier_text_match(code: string, start: number, end: number): boolean {\n\tconst before = start === 0 ? 0 : code.charCodeAt(start - 1);\n\tconst after = end >= code.length ? 0 : code.charCodeAt(end);\n\n\treturn !is_identifier_part(before) && !is_identifier_part(after);\n}\n\nfunction is_identifier_part(char_code: number): boolean {\n\treturn (\n\t\t(char_code >= 65 && char_code <= 90) ||\n\t\t(char_code >= 97 && char_code <= 122) ||\n\t\t(char_code >= 48 && char_code <= 57) ||\n\t\tchar_code === 36 ||\n\t\tchar_code === 95\n\t);\n}\n\nfunction validate_script_yield_boundaries(\n\tstmt: ts.Statement,\n\tcontent: string,\n\tfilename: string,\n): void {\n\tconst bad_member = find_class_member_with_yield_star(stmt);\n\n\tif (!bad_member) {\n\t\treturn;\n\t}\n\n\tthrow new PreprocessError(\n\t\t[\n\t\t\t`[ASYNC_EFFECT_IN_CLASS_MEMBER]: ${filename}: yield* cannot be used inside class members.`,\n\t\t\t`Class fields and methods are not component top-level reactive work. Move the Effect work into a script effect statement before assigning it to the class instance.`,\n\t\t\t\"\",\n\t\t\t\"Problematic member:\",\n\t\t\tslice(content, bad_member),\n\t\t].join(\"\\n\"),\n\t\tfilename,\n\t);\n}\n\nfunction find_class_member_with_yield_star(stmt: ts.Statement): ts.Node | undefined {\n\tlet found: ts.Node | undefined;\n\n\tfunction visit(node: ts.Node): void {\n\t\tif (found) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tts.isPropertyDeclaration(node) &&\n\t\t\tnode.initializer &&\n\t\t\tcontains_top_level_yield_star(node.initializer)\n\t\t) {\n\t\t\tfound = node;\n\t\t\treturn;\n\t\t}\n\n\t\tnode.forEachChild(visit);\n\t}\n\n\tvisit(stmt);\n\n\treturn found;\n}\n\nfunction make_name_allocator(initial_names: readonly string[]): {\n\treserve(name: string): string;\n} {\n\tconst used_names = new Set(initial_names);\n\n\treturn {\n\t\treserve(name: string): string {\n\t\t\tlet candidate = name;\n\t\t\tlet suffix = 1;\n\n\t\t\twhile (used_names.has(candidate)) {\n\t\t\t\tcandidate = `${name}_${suffix}`;\n\t\t\t\tsuffix += 1;\n\t\t\t}\n\n\t\t\tused_names.add(candidate);\n\n\t\t\treturn candidate;\n\t\t},\n\t};\n}\n\nfunction make_generated_name(hint: string, suffix: string): string {\n\tconst normalized_hint = hint.replace(/[^A-Za-z0-9_$]/g, \"_\");\n\tconst safe_hint = /^[A-Za-z_$]/.test(normalized_hint)\n\t\t? normalized_hint\n\t\t: `temp_${normalized_hint}`;\n\n\treturn `__SER___${safe_hint}${suffix}`;\n}\n","import { type MarkupTransformTarget, transform_markup_effect } from \"$/markup/transform.ts\";\nimport { transform_script_effect } from \"$/script-transform/index.ts\";\n\n/**\n * Result returned by the direct whole-file Svelte transform.\n *\n * @example\n * ```ts\n * const result = transform_svelte_effect(\"<p>{yield* load()}</p>\", \"App.svelte\");\n * result.code;\n * ```\n *\n * @since 2.5.0\n */\nexport interface SvelteTransformResult {\n\t/** Transformed Svelte source. */\n\tcode: string;\n}\n\n/**\n * Options accepted by the direct whole-file Svelte transform.\n *\n * @example\n * ```ts\n * const options: SvelteTransformOptions = { target: \"client\" };\n * ```\n *\n * @since 2.5.0\n */\nexport interface SvelteTransformOptions {\n\t/** Markup emission target passed through to the markup transform. */\n\ttarget?: MarkupTransformTarget;\n}\n\n/**\n * Lowers SER syntax in a complete Svelte component without using Svelte's\n * adapter API.\n *\n * @example\n * ```ts\n * const result = transform_svelte_effect(\n * \"<script effect>const value = yield* load()</script>\",\n * \"App.svelte\",\n * );\n * ```\n *\n * @since 2.5.0\n * @param content - Full Svelte component source to lower before Svelte parses\n * it.\n * @param filename - Component filename used in generated cache identifiers and\n * diagnostics.\n * @param options - Optional target configuration for markup lowering.\n * @returns The transformed component source.\n */\nexport function transform_svelte_effect(\n\tcontent: string,\n\tfilename = \"unknown.svelte\",\n\toptions: SvelteTransformOptions = {},\n): SvelteTransformResult {\n\tconst script = find_script(content);\n\n\tlet combined = content;\n\n\tif (script?.has_effect) {\n\t\tconst result = transform_script_effect(script.text, filename, {\n\t\t\temit_types: script.is_typescript,\n\t\t});\n\n\t\tcombined =\n\t\t\tcontent.slice(0, script.effect_attr_start) +\n\t\t\tcontent.slice(script.effect_attr_end, script.open_end) +\n\t\t\tresult.code +\n\t\t\tcontent.slice(script.close_start);\n\t}\n\n\tconst result = transform_markup_effect(combined, filename, {\n\t\ttarget: options.target,\n\t});\n\n\treturn { code: result.code };\n}\n\nfunction find_script(content: string):\n\t| {\n\t\t\ttext: string;\n\t\t\topen_end: number;\n\t\t\tclose_start: number;\n\t\t\thas_effect: boolean;\n\t\t\teffect_attr_start: number;\n\t\t\teffect_attr_end: number;\n\t\t\tis_typescript: boolean;\n\t }\n\t| undefined {\n\tconst pattern = /<script\\b([^>]*)>([\\s\\S]*?)<\\/script\\s*>/gi;\n\n\tfor (const match of content.matchAll(pattern)) {\n\t\tif (match.index === undefined || /\\bmodule\\b/.test(match[1] ?? \"\")) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst attrs = match[1] ?? \"\";\n\t\tconst effect_match = /\\s+effect(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s>]+))?/.exec(attrs);\n\t\tconst open_end = match.index + match[0].indexOf(\">\") + 1;\n\t\tconst attr_start = effect_match?.index ?? attrs.length;\n\t\tconst attr_end = attr_start + (effect_match?.[0].length ?? 0);\n\n\t\treturn {\n\t\t\ttext: match[2],\n\t\t\topen_end,\n\t\t\tclose_start: match.index + match[0].lastIndexOf(\"<\"),\n\t\t\thas_effect: effect_match !== null,\n\t\t\teffect_attr_start: match.index + \"<script\".length + attr_start,\n\t\t\teffect_attr_end: match.index + \"<script\".length + attr_end,\n\t\t\tis_typescript: has_typescript_lang(attrs),\n\t\t};\n\t}\n\n\treturn undefined;\n}\n\nfunction has_typescript_lang(attrs: string): boolean {\n\tconst lang_match = /\\blang\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s>]+))/i.exec(attrs);\n\tconst lang = (lang_match?.[1] ?? lang_match?.[2] ?? lang_match?.[3] ?? \"\").toLowerCase();\n\n\treturn lang === \"ts\" || lang === \"typescript\";\n}\n\nexport {\n\ttype MarkupTransformOptions,\n\ttype MarkupTransformResult,\n\ttype MarkupTransformTarget,\n\ttransform_markup_effect,\n} from \"$/markup/transform.ts\";\n\nexport {\n\ttype BlockRef,\n\ttype ScriptTransformResult,\n\ttransform_script_effect,\n} from \"$/script-transform/index.ts\";\n"],"mappings":"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"}
|
|
@@ -177,6 +177,10 @@ export interface ScriptLoweringContext {
|
|
|
177
177
|
dispatcher_name: string;
|
|
178
178
|
/** Binding name used for the Effect namespace in generated code. */
|
|
179
179
|
effect_name: string;
|
|
180
|
+
/** Binding name used for the yieldable normalization helper. */
|
|
181
|
+
yieldable_name: string;
|
|
182
|
+
/** Binding name used for yieldable success type extraction. */
|
|
183
|
+
yield_success_name: string;
|
|
180
184
|
/** Whether generated state placeholders should carry TypeScript types. */
|
|
181
185
|
emit_types: boolean;
|
|
182
186
|
/**
|
|
@@ -231,4 +235,8 @@ export interface RuntimeImportBindings {
|
|
|
231
235
|
cancel: string;
|
|
232
236
|
/** Binding name used for Svelte's untrack helper. */
|
|
233
237
|
untrack: string;
|
|
238
|
+
/** Binding name used for the yieldable normalization helper. */
|
|
239
|
+
yieldable: string;
|
|
240
|
+
/** Binding name used for yieldable success type extraction. */
|
|
241
|
+
yield_success: string;
|
|
234
242
|
}
|