@pikku/deploy 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/LICENSE +21 -0
- package/README.md +39 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1 -0
- package/dist/manifest.d.ts +170 -0
- package/dist/manifest.js +8 -0
- package/dist/node-builtins.d.ts +13 -0
- package/dist/node-builtins.js +18 -0
- package/dist/provider-adapter.d.ts +173 -0
- package/dist/provider-adapter.js +10 -0
- package/package.json +20 -0
- package/src/index.ts +28 -0
- package/src/manifest.ts +192 -0
- package/src/node-builtins.test.ts +26 -0
- package/src/node-builtins.ts +19 -0
- package/src/provider-adapter.ts +188 -0
- package/src/shared-contract.test.ts +102 -0
- package/tsconfig.json +13 -0
- package/tsconfig.tsbuildinfo +1 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# @pikku/deploy
|
|
2
|
+
|
|
3
|
+
## 0.12.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 32616af: Give the deploy pipeline one shared contract instead of a copy per adapter
|
|
8
|
+
|
|
9
|
+
`DeploymentManifest`, `DeploymentUnit`, `EntryGenerationContext` and
|
|
10
|
+
`ProviderAdapter` were hand-copied into eleven source files across the four
|
|
11
|
+
provider adapters and the CLI — three copies inside `@pikku/deploy-cloudflare`
|
|
12
|
+
alone. Nothing compared the copies, so they had already drifted: several typed
|
|
13
|
+
`role` as a bare `string`, and none carried the manifest's addon-scoping fields.
|
|
14
|
+
|
|
15
|
+
They now live in a new zero-dependency `@pikku/deploy` package that every
|
|
16
|
+
adapter and the CLI import, and each adapter declares `implements
|
|
17
|
+
ProviderAdapter` so the compiler checks it against the contract it claims to
|
|
18
|
+
satisfy. That check immediately caught a real disagreement: the deploy result's
|
|
19
|
+
`workersDeployed` and `resourcesCreated` were `string[]` from Cloudflare — the
|
|
20
|
+
shape the result file and the generated SDK types already record — but
|
|
21
|
+
`Array<{ name: string }>` from the standalone adapter. Both are now `string[]`.
|
|
22
|
+
|
|
23
|
+
The Lambda and Azure adapters also derived their esbuild externals from a
|
|
24
|
+
hand-written list of 25 node builtins, so anything outside it (`async_hooks`,
|
|
25
|
+
`perf_hooks`, `timers`, `http2`, …) was bundled instead of resolved from the
|
|
26
|
+
runtime. They now use `nodeBuiltinExternals()`, which reads `builtinModules`
|
|
27
|
+
from the running Node and cannot fall behind it.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021 - present Yasser Fadl and Pikku contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# @pikku/deploy
|
|
2
|
+
|
|
3
|
+
The shared contract between the Pikku deploy pipeline and the provider adapters
|
|
4
|
+
that plug into it.
|
|
5
|
+
|
|
6
|
+
It holds three things:
|
|
7
|
+
|
|
8
|
+
- **`DeploymentManifest` and friends** — the provider-agnostic description of
|
|
9
|
+
what a project deploys to: units, queues, scheduled tasks, channels, agents,
|
|
10
|
+
MCP endpoints, workflows, secrets and variables.
|
|
11
|
+
- **`ProviderAdapter`** — the interface every provider implements to supply the
|
|
12
|
+
provider-specific parts: entry generation, config files, infra manifests and
|
|
13
|
+
the deploy call itself.
|
|
14
|
+
- **`nodeBuiltinExternals()`** — the esbuild externals list for providers whose
|
|
15
|
+
runtime is Node.js, derived from the running Node rather than hand-written.
|
|
16
|
+
|
|
17
|
+
Nothing here executes at request time; it is a build-time package that the CLI
|
|
18
|
+
and the `@pikku/deploy-*` adapters share so the manifest has one definition
|
|
19
|
+
instead of one per adapter.
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
import type { ProviderAdapter, EntryGenerationContext } from '@pikku/deploy'
|
|
23
|
+
import { nodeBuiltinExternals } from '@pikku/deploy'
|
|
24
|
+
|
|
25
|
+
export class MyProviderAdapter implements ProviderAdapter {
|
|
26
|
+
readonly name = 'my-provider'
|
|
27
|
+
readonly deployDirName = 'my-provider'
|
|
28
|
+
|
|
29
|
+
getExternals(): string[] {
|
|
30
|
+
return nodeBuiltinExternals('@my-sdk/*')
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
generateEntrySource(ctx: EntryGenerationContext): string {
|
|
34
|
+
return `import './${ctx.bootstrapPath}'`
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// …
|
|
38
|
+
}
|
|
39
|
+
```
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type { AgentDefinition, ChannelDefinition, DeploymentHandler, DeploymentManifest, DeploymentUnit, DeploymentUnitRole, GrantedAddon, HttpRouteInfo, MCPEndpointDefinition, QueueDefinition, ScheduledTaskDefinition, SecretDeclaration, ServiceCapability, ServiceRequirement, UnresolvedSecretRead, UnscopedAddon, VariableDeclaration, WorkflowDefinition, WorkflowStepDefinition, } from './manifest.js';
|
|
2
|
+
export type { EntryGenerationContext, ProviderAdapter, } from './provider-adapter.js';
|
|
3
|
+
export { nodeBuiltinExternals } from './node-builtins.js';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { nodeBuiltinExternals } from './node-builtins.js';
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-agnostic deployment manifest types.
|
|
3
|
+
*
|
|
4
|
+
* Core principle: one function = one deployment unit.
|
|
5
|
+
* Gateways (MCP, agents, channels, workflow orchestrators)
|
|
6
|
+
* don't bundle function code — they dispatch via RPC.
|
|
7
|
+
*/
|
|
8
|
+
/** What kind of deployment entry */
|
|
9
|
+
export type DeploymentUnitRole = 'function' | 'mcp' | 'agent' | 'channel' | 'workflow' | 'workflow-step';
|
|
10
|
+
/** What handlers a unit needs to export */
|
|
11
|
+
export type DeploymentHandler = {
|
|
12
|
+
type: 'fetch';
|
|
13
|
+
routes: HttpRouteInfo[];
|
|
14
|
+
} | {
|
|
15
|
+
type: 'queue';
|
|
16
|
+
queueName: string;
|
|
17
|
+
} | {
|
|
18
|
+
type: 'scheduled';
|
|
19
|
+
schedule: string;
|
|
20
|
+
taskName: string;
|
|
21
|
+
};
|
|
22
|
+
/** Abstract infrastructure capability */
|
|
23
|
+
export type ServiceCapability = 'database' | 'object-storage' | 'queue' | 'kv' | 'ai-model' | 'ai-storage' | 'scheduler' | 'workflow-state' | 'credential-store';
|
|
24
|
+
export interface ServiceRequirement {
|
|
25
|
+
capability: ServiceCapability;
|
|
26
|
+
/** Original service name from code (e.g. 'kysely', 'contentService') */
|
|
27
|
+
sourceServiceName: string;
|
|
28
|
+
}
|
|
29
|
+
export interface HttpRouteInfo {
|
|
30
|
+
method: string;
|
|
31
|
+
route: string;
|
|
32
|
+
pikkuFuncId: string;
|
|
33
|
+
}
|
|
34
|
+
export interface DeploymentUnit {
|
|
35
|
+
name: string;
|
|
36
|
+
role: DeploymentUnitRole;
|
|
37
|
+
/** Deploy target: serverless (CF Worker / Lambda) or server (container) */
|
|
38
|
+
target: 'serverless' | 'server';
|
|
39
|
+
/** Functions bundled in this unit (for function/workflow-step units) */
|
|
40
|
+
functionIds: string[];
|
|
41
|
+
services: ServiceRequirement[];
|
|
42
|
+
/** Other unit names this unit calls via RPC / service bindings */
|
|
43
|
+
dependsOn: string[];
|
|
44
|
+
/** What runtime handlers this unit needs to export */
|
|
45
|
+
handlers: DeploymentHandler[];
|
|
46
|
+
tags: string[];
|
|
47
|
+
/** SHA-256 of final bundled artifact (set by build pipeline) */
|
|
48
|
+
bundleHash?: string;
|
|
49
|
+
/** Final bundle size in bytes (set by build pipeline) */
|
|
50
|
+
bundleSizeBytes?: number;
|
|
51
|
+
/** SHA-256 of sorted exact dependency map (set by build pipeline) */
|
|
52
|
+
exactDependenciesHash?: string;
|
|
53
|
+
/** Top-level exact runtime dependency versions for this unit (set by build pipeline) */
|
|
54
|
+
exactDependencies?: Record<string, string>;
|
|
55
|
+
/** Top-level exact optional runtime dependency versions for this unit (set by build pipeline) */
|
|
56
|
+
exactOptionalDependencies?: Record<string, string>;
|
|
57
|
+
}
|
|
58
|
+
export interface QueueDefinition {
|
|
59
|
+
name: string;
|
|
60
|
+
consumerUnit: string;
|
|
61
|
+
consumerFunctionId: string;
|
|
62
|
+
}
|
|
63
|
+
export interface ScheduledTaskDefinition {
|
|
64
|
+
name: string;
|
|
65
|
+
schedule: string;
|
|
66
|
+
unitName: string;
|
|
67
|
+
functionId: string;
|
|
68
|
+
}
|
|
69
|
+
export interface ChannelDefinition {
|
|
70
|
+
name: string;
|
|
71
|
+
route: string;
|
|
72
|
+
unitName: string;
|
|
73
|
+
functionIds: string[];
|
|
74
|
+
}
|
|
75
|
+
export interface AgentDefinition {
|
|
76
|
+
name: string;
|
|
77
|
+
unitName: string;
|
|
78
|
+
toolFunctionIds: string[];
|
|
79
|
+
subAgentNames: string[];
|
|
80
|
+
model: string;
|
|
81
|
+
}
|
|
82
|
+
export interface MCPEndpointDefinition {
|
|
83
|
+
unitName: string;
|
|
84
|
+
toolFunctionIds: string[];
|
|
85
|
+
resourceFunctionIds: string[];
|
|
86
|
+
promptFunctionIds: string[];
|
|
87
|
+
}
|
|
88
|
+
export interface WorkflowStepDefinition {
|
|
89
|
+
name: string;
|
|
90
|
+
inline: boolean;
|
|
91
|
+
functionId?: string;
|
|
92
|
+
unitName?: string;
|
|
93
|
+
}
|
|
94
|
+
export interface WorkflowDefinition {
|
|
95
|
+
name: string;
|
|
96
|
+
pikkuFuncId: string;
|
|
97
|
+
orchestratorUnit: string;
|
|
98
|
+
steps: WorkflowStepDefinition[];
|
|
99
|
+
}
|
|
100
|
+
export interface SecretDeclaration {
|
|
101
|
+
secretId: string;
|
|
102
|
+
displayName: string;
|
|
103
|
+
description?: string;
|
|
104
|
+
/** Hosts this secret may be sent to. Absent means unrestricted. */
|
|
105
|
+
allowedHosts?: string[];
|
|
106
|
+
/** True when some code reads this secret with a statically resolvable key. */
|
|
107
|
+
read?: boolean;
|
|
108
|
+
}
|
|
109
|
+
/** Secret reads whose key the inspector could not resolve, as `file:line:source`. */
|
|
110
|
+
export type UnresolvedSecretRead = string;
|
|
111
|
+
/** A `wireAddon` instance the app exempted from secret or credential scoping. */
|
|
112
|
+
export interface UnscopedAddon {
|
|
113
|
+
namespace: string;
|
|
114
|
+
package: string;
|
|
115
|
+
/** The app's stated reason, from `wireAddon({ globalSecrets | globalCredentials })`. */
|
|
116
|
+
reason: string;
|
|
117
|
+
}
|
|
118
|
+
/** A `wireAddon` instance the app lent named secrets or credentials it never declared. */
|
|
119
|
+
export interface GrantedAddon {
|
|
120
|
+
namespace: string;
|
|
121
|
+
package: string;
|
|
122
|
+
/**
|
|
123
|
+
* The names the addon may now read, as the addon reads them — grants and
|
|
124
|
+
* override keys alike, since scoping is checked before an override renames.
|
|
125
|
+
*/
|
|
126
|
+
granted: string[];
|
|
127
|
+
}
|
|
128
|
+
export interface VariableDeclaration {
|
|
129
|
+
variableId: string;
|
|
130
|
+
displayName: string;
|
|
131
|
+
description?: string;
|
|
132
|
+
}
|
|
133
|
+
export interface DeploymentManifest {
|
|
134
|
+
projectId: string;
|
|
135
|
+
manifestVersion: 1;
|
|
136
|
+
units: DeploymentUnit[];
|
|
137
|
+
queues: QueueDefinition[];
|
|
138
|
+
scheduledTasks: ScheduledTaskDefinition[];
|
|
139
|
+
channels: ChannelDefinition[];
|
|
140
|
+
agents: AgentDefinition[];
|
|
141
|
+
mcpEndpoints: MCPEndpointDefinition[];
|
|
142
|
+
workflows: WorkflowDefinition[];
|
|
143
|
+
secrets: SecretDeclaration[];
|
|
144
|
+
/**
|
|
145
|
+
* Reads with a non-literal key. A deployment can only narrow a unit's secret
|
|
146
|
+
* scope to the declared set when this is empty.
|
|
147
|
+
*/
|
|
148
|
+
unresolvedSecretReads: UnresolvedSecretRead[];
|
|
149
|
+
/**
|
|
150
|
+
* Addon instances exempted from secret scoping. Every other addon reads only
|
|
151
|
+
* the secrets it declared, so this is the full list of packages that can
|
|
152
|
+
* reach a secret the app never named for them.
|
|
153
|
+
*/
|
|
154
|
+
unscopedSecretAddons: UnscopedAddon[];
|
|
155
|
+
/**
|
|
156
|
+
* Addon instances exempted from credential scoping. Every other addon reaches
|
|
157
|
+
* only the credentials it declared, and none can enumerate the app's users.
|
|
158
|
+
*/
|
|
159
|
+
unscopedCredentialAddons: UnscopedAddon[];
|
|
160
|
+
/**
|
|
161
|
+
* Addon instances lent named secrets on top of the ones they declared. The
|
|
162
|
+
* other half of the same waiver as `unscopedSecretAddons` — narrower, because
|
|
163
|
+
* the app named the set — so between them a deployment sees every secret an
|
|
164
|
+
* addon can reach that it did not declare for itself.
|
|
165
|
+
*/
|
|
166
|
+
grantedSecretAddons: GrantedAddon[];
|
|
167
|
+
/** Addon instances lent named credentials on top of the ones they declared. */
|
|
168
|
+
grantedCredentialAddons: GrantedAddon[];
|
|
169
|
+
variables: VariableDeclaration[];
|
|
170
|
+
}
|
package/dist/manifest.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* esbuild externals covering every Node.js builtin, under both spellings.
|
|
3
|
+
*
|
|
4
|
+
* `node:*` alone is not enough: a dependency compiled to CJS requires the bare
|
|
5
|
+
* name (`require('buffer')`), which esbuild resolves and bundles rather than
|
|
6
|
+
* leaving external. Both forms are emitted so either import style resolves to
|
|
7
|
+
* the runtime's own module.
|
|
8
|
+
*
|
|
9
|
+
* The list comes from the running Node so it cannot fall behind the runtime —
|
|
10
|
+
* a hand-written array silently stops covering builtins added since it was
|
|
11
|
+
* typed, and the missing ones get bundled instead.
|
|
12
|
+
*/
|
|
13
|
+
export declare const nodeBuiltinExternals: (...extra: string[]) => string[];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { builtinModules } from 'node:module';
|
|
2
|
+
/**
|
|
3
|
+
* esbuild externals covering every Node.js builtin, under both spellings.
|
|
4
|
+
*
|
|
5
|
+
* `node:*` alone is not enough: a dependency compiled to CJS requires the bare
|
|
6
|
+
* name (`require('buffer')`), which esbuild resolves and bundles rather than
|
|
7
|
+
* leaving external. Both forms are emitted so either import style resolves to
|
|
8
|
+
* the runtime's own module.
|
|
9
|
+
*
|
|
10
|
+
* The list comes from the running Node so it cannot fall behind the runtime —
|
|
11
|
+
* a hand-written array silently stops covering builtins added since it was
|
|
12
|
+
* typed, and the missing ones get bundled instead.
|
|
13
|
+
*/
|
|
14
|
+
export const nodeBuiltinExternals = (...extra) => [
|
|
15
|
+
'node:*',
|
|
16
|
+
...builtinModules,
|
|
17
|
+
...extra,
|
|
18
|
+
];
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider adapter interface for the deploy pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Each provider (Cloudflare, AWS, etc.) implements this to handle
|
|
5
|
+
* the provider-specific parts of deployment: entry generation,
|
|
6
|
+
* infrastructure manifests, and config files.
|
|
7
|
+
*
|
|
8
|
+
* The generic pipeline handles: analysis, codegen, bundling, plan/apply.
|
|
9
|
+
*/
|
|
10
|
+
import type { DeploymentManifest, DeploymentUnit } from './manifest.js';
|
|
11
|
+
export interface EntryGenerationContext {
|
|
12
|
+
/** The unit being generated */
|
|
13
|
+
unit: DeploymentUnit;
|
|
14
|
+
/** Absolute path to the unit's output directory */
|
|
15
|
+
unitDir: string;
|
|
16
|
+
/** Relative path to the unit's pikku-bootstrap.gen.js */
|
|
17
|
+
bootstrapPath: string;
|
|
18
|
+
/** Import statement for createConfig */
|
|
19
|
+
configImport: string;
|
|
20
|
+
/** Variable name for createConfig */
|
|
21
|
+
configVar: string;
|
|
22
|
+
/** Import statement for createSingletonServices */
|
|
23
|
+
servicesImport: string;
|
|
24
|
+
/** Variable name for createSingletonServices */
|
|
25
|
+
servicesVar: string;
|
|
26
|
+
/** Import statement for SingletonServices type (or empty string) */
|
|
27
|
+
singletonServicesImport: string;
|
|
28
|
+
/** Type expression for Partial<SingletonServices> (or fallback) */
|
|
29
|
+
servicesType: string;
|
|
30
|
+
/**
|
|
31
|
+
* `import mcpJson from '…/mcp.gen.json' with { type: 'json' }` when the unit
|
|
32
|
+
* has a non-empty mcp.gen.json, else ''. Pair with `mcpServerOption`.
|
|
33
|
+
*/
|
|
34
|
+
mcpImport: string;
|
|
35
|
+
/**
|
|
36
|
+
* `'mcpJson, '` to splice into the PikkuNodeHTTPServer *third* (options) arg —
|
|
37
|
+
* the server reads `this.options.mcpJson`, NOT the first config arg — so it
|
|
38
|
+
* mounts /mcp. Else ''. Empty is safe — trailing commas are valid.
|
|
39
|
+
*/
|
|
40
|
+
mcpServerOption: string;
|
|
41
|
+
}
|
|
42
|
+
export interface ProviderAdapter {
|
|
43
|
+
/** Provider name (e.g. 'cloudflare', 'aws') */
|
|
44
|
+
readonly name: string;
|
|
45
|
+
/** Subdirectory name under .deploy/ (e.g. 'cloudflare') */
|
|
46
|
+
readonly deployDirName: string;
|
|
47
|
+
/**
|
|
48
|
+
* When true, skips per-unit decomposition and bundles everything
|
|
49
|
+
* into a single unit using the project's full .pikku/ directory.
|
|
50
|
+
* Used by standalone adapter.
|
|
51
|
+
*/
|
|
52
|
+
readonly singleUnit?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Whether the provider's workflow runtime needs synthesized per-step
|
|
55
|
+
* dispatch queues. Defaults to `true`.
|
|
56
|
+
*
|
|
57
|
+
* - `true` (default): The deploy pipeline synthesizes a `wf-orchestrator-*`
|
|
58
|
+
* queue and a `wf-step-*` queue for every workflow step, plus producer
|
|
59
|
+
* bindings, so the workflow runtime can fan out via queues.
|
|
60
|
+
* - `false`: No synthetic workflow queues are emitted into the manifest
|
|
61
|
+
* or per-unit codegen. Use this when the provider's workflow runtime
|
|
62
|
+
* dispatches steps natively (e.g. Cloudflare's Durable-Object-based
|
|
63
|
+
* `CloudflareWorkflowService`, where the orchestrator DO advances
|
|
64
|
+
* steps directly without a queue hop). Queues created via explicit
|
|
65
|
+
* `wireQueue(...)` user code are unaffected.
|
|
66
|
+
*/
|
|
67
|
+
readonly workflowQueues?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Generate the entry file source for a deployment unit.
|
|
70
|
+
* Called once per unit.
|
|
71
|
+
*/
|
|
72
|
+
generateEntrySource(ctx: EntryGenerationContext): string;
|
|
73
|
+
/**
|
|
74
|
+
* Generate the entry file source for a `target: 'server'` (container) unit.
|
|
75
|
+
*
|
|
76
|
+
* Optional. When a provider implements it, the deploy pipeline uses it
|
|
77
|
+
* instead of the provider-agnostic `generateServerEntrySource`, so the
|
|
78
|
+
* provider can inject the SAME platform services (kysely, secrets, …) into
|
|
79
|
+
* the container that it injects into its serverless workers — sourcing the
|
|
80
|
+
* bindings from `process.env` instead of a runtime `env` object. When
|
|
81
|
+
* omitted, the pipeline falls back to the generic generator (no platform
|
|
82
|
+
* injection), which is correct for providers whose containers carry no
|
|
83
|
+
* platform services.
|
|
84
|
+
*/
|
|
85
|
+
generateServerEntrySource?(ctx: EntryGenerationContext): string;
|
|
86
|
+
/**
|
|
87
|
+
* Generate provider-specific config files per unit (e.g. wrangler.toml).
|
|
88
|
+
* Returns a map of filename → content to write into the unit directory.
|
|
89
|
+
*/
|
|
90
|
+
generateUnitConfigs(unit: DeploymentUnit, manifest: DeploymentManifest, projectId: string): Map<string, string>;
|
|
91
|
+
/**
|
|
92
|
+
* Generate provider-level infrastructure manifest (e.g. infra.json).
|
|
93
|
+
* Returns file content, or null if not applicable.
|
|
94
|
+
*/
|
|
95
|
+
generateInfraManifest(manifest: DeploymentManifest): string | null;
|
|
96
|
+
/**
|
|
97
|
+
* External modules for esbuild bundling.
|
|
98
|
+
* Defaults to ['node:*'] if not provided.
|
|
99
|
+
*/
|
|
100
|
+
getExternals?(): string[];
|
|
101
|
+
/**
|
|
102
|
+
* Regex sources for modules to stub to `export {}` during bundling — modules
|
|
103
|
+
* this provider's runtime never executes (e.g. the `postgres` driver on CF
|
|
104
|
+
* Workers, which use a libsql/Turso dialect). Unlike `getExternals`, a stub
|
|
105
|
+
* removes the bytes entirely rather than leaving a runtime import to resolve.
|
|
106
|
+
*/
|
|
107
|
+
getStubModules?(): string[];
|
|
108
|
+
/**
|
|
109
|
+
* Module aliases for esbuild bundling (e.g. { crypto: 'node:crypto' }).
|
|
110
|
+
* Used to remap bare imports to platform-compatible paths.
|
|
111
|
+
*/
|
|
112
|
+
getAliases?(): Record<string, string>;
|
|
113
|
+
/**
|
|
114
|
+
* esbuild define map for compile-time constants (e.g. { 'process.env.NODE_ENV': '"production"' }).
|
|
115
|
+
*/
|
|
116
|
+
getDefine?(): Record<string, string>;
|
|
117
|
+
/**
|
|
118
|
+
* esbuild platform target. Defaults to 'node'.
|
|
119
|
+
* Cloudflare Workers should use 'neutral'.
|
|
120
|
+
*/
|
|
121
|
+
getPlatform?(): 'node' | 'neutral' | 'browser';
|
|
122
|
+
/**
|
|
123
|
+
* esbuild output format. Defaults to 'esm'.
|
|
124
|
+
* pkg requires 'cjs' for standalone binaries.
|
|
125
|
+
*/
|
|
126
|
+
getFormat?(): 'esm' | 'cjs';
|
|
127
|
+
/**
|
|
128
|
+
* Skip the createRequire banner. CF Workers should return true —
|
|
129
|
+
* `import.meta.url` is undefined there and the banner crashes at boot.
|
|
130
|
+
*/
|
|
131
|
+
getNoRequireShim?(): boolean;
|
|
132
|
+
/**
|
|
133
|
+
* Generate additional provider-level config files (e.g. serverless.yml).
|
|
134
|
+
* Returns a map of filename → content to write into the deploy directory.
|
|
135
|
+
*/
|
|
136
|
+
generateProviderConfigs?(manifest: DeploymentManifest): Map<string, string>;
|
|
137
|
+
/**
|
|
138
|
+
* Emit any provider-specific artifacts that aren't tied to a single user
|
|
139
|
+
* unit — e.g. a synthesized proxy Worker that fronts a CF Container.
|
|
140
|
+
* Called after the infra manifest is written so providers can read it
|
|
141
|
+
* and key off resources that were provisioned in earlier steps.
|
|
142
|
+
*/
|
|
143
|
+
emitSideArtifacts?(options: {
|
|
144
|
+
buildDir: string;
|
|
145
|
+
manifest: DeploymentManifest;
|
|
146
|
+
logger: {
|
|
147
|
+
info(msg: string): void;
|
|
148
|
+
error(msg: string): void;
|
|
149
|
+
};
|
|
150
|
+
}): Promise<void>;
|
|
151
|
+
/**
|
|
152
|
+
* Deploy the built artifacts to the provider.
|
|
153
|
+
* Optional — if not implemented, the CLI just outputs the build directory.
|
|
154
|
+
*/
|
|
155
|
+
deploy?(options: {
|
|
156
|
+
buildDir: string;
|
|
157
|
+
logger: {
|
|
158
|
+
info(msg: string): void;
|
|
159
|
+
error(msg: string): void;
|
|
160
|
+
};
|
|
161
|
+
onProgress?: (step: string, detail: string) => void;
|
|
162
|
+
}): Promise<{
|
|
163
|
+
success: boolean;
|
|
164
|
+
/** Names of the deployed units, as they appear on the provider. */
|
|
165
|
+
workersDeployed?: string[];
|
|
166
|
+
/** Identifiers of the resources provisioned for this deploy. */
|
|
167
|
+
resourcesCreated?: string[];
|
|
168
|
+
errors: Array<{
|
|
169
|
+
step: string;
|
|
170
|
+
error: string;
|
|
171
|
+
}>;
|
|
172
|
+
}>;
|
|
173
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider adapter interface for the deploy pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Each provider (Cloudflare, AWS, etc.) implements this to handle
|
|
5
|
+
* the provider-specific parts of deployment: entry generation,
|
|
6
|
+
* infrastructure manifests, and config files.
|
|
7
|
+
*
|
|
8
|
+
* The generic pipeline handles: analysis, codegen, bundling, plan/apply.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pikku/deploy",
|
|
3
|
+
"version": "0.12.1",
|
|
4
|
+
"description": "Shared deploy contract for Pikku — the deployment manifest types, the provider adapter interface, and the helpers every provider adapter needs",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc -b",
|
|
9
|
+
"tsc": "tsc --noEmit",
|
|
10
|
+
"test": "node --test --import tsx src/*.test.ts"
|
|
11
|
+
},
|
|
12
|
+
"devDependencies": {
|
|
13
|
+
"tsx": "^4.23.12",
|
|
14
|
+
"typescript": "^6.0.3"
|
|
15
|
+
},
|
|
16
|
+
"exports": {
|
|
17
|
+
".": "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"license": "MIT"
|
|
20
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type {
|
|
2
|
+
AgentDefinition,
|
|
3
|
+
ChannelDefinition,
|
|
4
|
+
DeploymentHandler,
|
|
5
|
+
DeploymentManifest,
|
|
6
|
+
DeploymentUnit,
|
|
7
|
+
DeploymentUnitRole,
|
|
8
|
+
GrantedAddon,
|
|
9
|
+
HttpRouteInfo,
|
|
10
|
+
MCPEndpointDefinition,
|
|
11
|
+
QueueDefinition,
|
|
12
|
+
ScheduledTaskDefinition,
|
|
13
|
+
SecretDeclaration,
|
|
14
|
+
ServiceCapability,
|
|
15
|
+
ServiceRequirement,
|
|
16
|
+
UnresolvedSecretRead,
|
|
17
|
+
UnscopedAddon,
|
|
18
|
+
VariableDeclaration,
|
|
19
|
+
WorkflowDefinition,
|
|
20
|
+
WorkflowStepDefinition,
|
|
21
|
+
} from './manifest.js'
|
|
22
|
+
|
|
23
|
+
export type {
|
|
24
|
+
EntryGenerationContext,
|
|
25
|
+
ProviderAdapter,
|
|
26
|
+
} from './provider-adapter.js'
|
|
27
|
+
|
|
28
|
+
export { nodeBuiltinExternals } from './node-builtins.js'
|
package/src/manifest.ts
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-agnostic deployment manifest types.
|
|
3
|
+
*
|
|
4
|
+
* Core principle: one function = one deployment unit.
|
|
5
|
+
* Gateways (MCP, agents, channels, workflow orchestrators)
|
|
6
|
+
* don't bundle function code — they dispatch via RPC.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** What kind of deployment entry */
|
|
10
|
+
export type DeploymentUnitRole =
|
|
11
|
+
'function' | 'mcp' | 'agent' | 'channel' | 'workflow' | 'workflow-step'
|
|
12
|
+
|
|
13
|
+
/** What handlers a unit needs to export */
|
|
14
|
+
export type DeploymentHandler =
|
|
15
|
+
| { type: 'fetch'; routes: HttpRouteInfo[] }
|
|
16
|
+
| { type: 'queue'; queueName: string }
|
|
17
|
+
| { type: 'scheduled'; schedule: string; taskName: string }
|
|
18
|
+
|
|
19
|
+
/** Abstract infrastructure capability */
|
|
20
|
+
export type ServiceCapability =
|
|
21
|
+
| 'database'
|
|
22
|
+
| 'object-storage'
|
|
23
|
+
| 'queue'
|
|
24
|
+
| 'kv'
|
|
25
|
+
| 'ai-model'
|
|
26
|
+
| 'ai-storage'
|
|
27
|
+
| 'scheduler'
|
|
28
|
+
| 'workflow-state'
|
|
29
|
+
| 'credential-store'
|
|
30
|
+
|
|
31
|
+
export interface ServiceRequirement {
|
|
32
|
+
capability: ServiceCapability
|
|
33
|
+
/** Original service name from code (e.g. 'kysely', 'contentService') */
|
|
34
|
+
sourceServiceName: string
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface HttpRouteInfo {
|
|
38
|
+
method: string
|
|
39
|
+
route: string
|
|
40
|
+
pikkuFuncId: string
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface DeploymentUnit {
|
|
44
|
+
name: string
|
|
45
|
+
role: DeploymentUnitRole
|
|
46
|
+
/** Deploy target: serverless (CF Worker / Lambda) or server (container) */
|
|
47
|
+
target: 'serverless' | 'server'
|
|
48
|
+
/** Functions bundled in this unit (for function/workflow-step units) */
|
|
49
|
+
functionIds: string[]
|
|
50
|
+
services: ServiceRequirement[]
|
|
51
|
+
/** Other unit names this unit calls via RPC / service bindings */
|
|
52
|
+
dependsOn: string[]
|
|
53
|
+
/** What runtime handlers this unit needs to export */
|
|
54
|
+
handlers: DeploymentHandler[]
|
|
55
|
+
tags: string[]
|
|
56
|
+
/** SHA-256 of final bundled artifact (set by build pipeline) */
|
|
57
|
+
bundleHash?: string
|
|
58
|
+
/** Final bundle size in bytes (set by build pipeline) */
|
|
59
|
+
bundleSizeBytes?: number
|
|
60
|
+
/** SHA-256 of sorted exact dependency map (set by build pipeline) */
|
|
61
|
+
exactDependenciesHash?: string
|
|
62
|
+
/** Top-level exact runtime dependency versions for this unit (set by build pipeline) */
|
|
63
|
+
exactDependencies?: Record<string, string>
|
|
64
|
+
/** Top-level exact optional runtime dependency versions for this unit (set by build pipeline) */
|
|
65
|
+
exactOptionalDependencies?: Record<string, string>
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface QueueDefinition {
|
|
69
|
+
name: string
|
|
70
|
+
consumerUnit: string
|
|
71
|
+
consumerFunctionId: string
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface ScheduledTaskDefinition {
|
|
75
|
+
name: string
|
|
76
|
+
schedule: string
|
|
77
|
+
unitName: string
|
|
78
|
+
functionId: string
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface ChannelDefinition {
|
|
82
|
+
name: string
|
|
83
|
+
route: string
|
|
84
|
+
unitName: string
|
|
85
|
+
functionIds: string[]
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface AgentDefinition {
|
|
89
|
+
name: string
|
|
90
|
+
unitName: string
|
|
91
|
+
toolFunctionIds: string[]
|
|
92
|
+
subAgentNames: string[]
|
|
93
|
+
model: string
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export interface MCPEndpointDefinition {
|
|
97
|
+
unitName: string
|
|
98
|
+
toolFunctionIds: string[]
|
|
99
|
+
resourceFunctionIds: string[]
|
|
100
|
+
promptFunctionIds: string[]
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export interface WorkflowStepDefinition {
|
|
104
|
+
name: string
|
|
105
|
+
inline: boolean
|
|
106
|
+
functionId?: string
|
|
107
|
+
unitName?: string
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export interface WorkflowDefinition {
|
|
111
|
+
name: string
|
|
112
|
+
pikkuFuncId: string
|
|
113
|
+
orchestratorUnit: string
|
|
114
|
+
steps: WorkflowStepDefinition[]
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export interface SecretDeclaration {
|
|
118
|
+
secretId: string
|
|
119
|
+
displayName: string
|
|
120
|
+
description?: string
|
|
121
|
+
/** Hosts this secret may be sent to. Absent means unrestricted. */
|
|
122
|
+
allowedHosts?: string[]
|
|
123
|
+
/** True when some code reads this secret with a statically resolvable key. */
|
|
124
|
+
read?: boolean
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** Secret reads whose key the inspector could not resolve, as `file:line:source`. */
|
|
128
|
+
export type UnresolvedSecretRead = string
|
|
129
|
+
|
|
130
|
+
/** A `wireAddon` instance the app exempted from secret or credential scoping. */
|
|
131
|
+
export interface UnscopedAddon {
|
|
132
|
+
namespace: string
|
|
133
|
+
package: string
|
|
134
|
+
/** The app's stated reason, from `wireAddon({ globalSecrets | globalCredentials })`. */
|
|
135
|
+
reason: string
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** A `wireAddon` instance the app lent named secrets or credentials it never declared. */
|
|
139
|
+
export interface GrantedAddon {
|
|
140
|
+
namespace: string
|
|
141
|
+
package: string
|
|
142
|
+
/**
|
|
143
|
+
* The names the addon may now read, as the addon reads them — grants and
|
|
144
|
+
* override keys alike, since scoping is checked before an override renames.
|
|
145
|
+
*/
|
|
146
|
+
granted: string[]
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export interface VariableDeclaration {
|
|
150
|
+
variableId: string
|
|
151
|
+
displayName: string
|
|
152
|
+
description?: string
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export interface DeploymentManifest {
|
|
156
|
+
projectId: string
|
|
157
|
+
manifestVersion: 1
|
|
158
|
+
units: DeploymentUnit[]
|
|
159
|
+
queues: QueueDefinition[]
|
|
160
|
+
scheduledTasks: ScheduledTaskDefinition[]
|
|
161
|
+
channels: ChannelDefinition[]
|
|
162
|
+
agents: AgentDefinition[]
|
|
163
|
+
mcpEndpoints: MCPEndpointDefinition[]
|
|
164
|
+
workflows: WorkflowDefinition[]
|
|
165
|
+
secrets: SecretDeclaration[]
|
|
166
|
+
/**
|
|
167
|
+
* Reads with a non-literal key. A deployment can only narrow a unit's secret
|
|
168
|
+
* scope to the declared set when this is empty.
|
|
169
|
+
*/
|
|
170
|
+
unresolvedSecretReads: UnresolvedSecretRead[]
|
|
171
|
+
/**
|
|
172
|
+
* Addon instances exempted from secret scoping. Every other addon reads only
|
|
173
|
+
* the secrets it declared, so this is the full list of packages that can
|
|
174
|
+
* reach a secret the app never named for them.
|
|
175
|
+
*/
|
|
176
|
+
unscopedSecretAddons: UnscopedAddon[]
|
|
177
|
+
/**
|
|
178
|
+
* Addon instances exempted from credential scoping. Every other addon reaches
|
|
179
|
+
* only the credentials it declared, and none can enumerate the app's users.
|
|
180
|
+
*/
|
|
181
|
+
unscopedCredentialAddons: UnscopedAddon[]
|
|
182
|
+
/**
|
|
183
|
+
* Addon instances lent named secrets on top of the ones they declared. The
|
|
184
|
+
* other half of the same waiver as `unscopedSecretAddons` — narrower, because
|
|
185
|
+
* the app named the set — so between them a deployment sees every secret an
|
|
186
|
+
* addon can reach that it did not declare for itself.
|
|
187
|
+
*/
|
|
188
|
+
grantedSecretAddons: GrantedAddon[]
|
|
189
|
+
/** Addon instances lent named credentials on top of the ones they declared. */
|
|
190
|
+
grantedCredentialAddons: GrantedAddon[]
|
|
191
|
+
variables: VariableDeclaration[]
|
|
192
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { describe, it } from 'node:test'
|
|
2
|
+
import assert from 'node:assert/strict'
|
|
3
|
+
import { nodeBuiltinExternals } from './node-builtins.js'
|
|
4
|
+
|
|
5
|
+
describe('nodeBuiltinExternals', () => {
|
|
6
|
+
it('covers a builtin under both the bare and the node: spelling', () => {
|
|
7
|
+
const externals = nodeBuiltinExternals()
|
|
8
|
+
assert.ok(externals.includes('node:*'))
|
|
9
|
+
assert.ok(externals.includes('buffer'))
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
it('covers builtins a hand-written list left out', () => {
|
|
13
|
+
const externals = nodeBuiltinExternals()
|
|
14
|
+
for (const missed of ['async_hooks', 'perf_hooks', 'timers', 'http2']) {
|
|
15
|
+
assert.ok(
|
|
16
|
+
externals.includes(missed),
|
|
17
|
+
`${missed} would be bundled instead of resolved from the runtime`
|
|
18
|
+
)
|
|
19
|
+
}
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
it('appends provider-specific externals after the builtins', () => {
|
|
23
|
+
const externals = nodeBuiltinExternals('@aws-sdk/*', '@smithy/*')
|
|
24
|
+
assert.deepEqual(externals.slice(-2), ['@aws-sdk/*', '@smithy/*'])
|
|
25
|
+
})
|
|
26
|
+
})
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { builtinModules } from 'node:module'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* esbuild externals covering every Node.js builtin, under both spellings.
|
|
5
|
+
*
|
|
6
|
+
* `node:*` alone is not enough: a dependency compiled to CJS requires the bare
|
|
7
|
+
* name (`require('buffer')`), which esbuild resolves and bundles rather than
|
|
8
|
+
* leaving external. Both forms are emitted so either import style resolves to
|
|
9
|
+
* the runtime's own module.
|
|
10
|
+
*
|
|
11
|
+
* The list comes from the running Node so it cannot fall behind the runtime —
|
|
12
|
+
* a hand-written array silently stops covering builtins added since it was
|
|
13
|
+
* typed, and the missing ones get bundled instead.
|
|
14
|
+
*/
|
|
15
|
+
export const nodeBuiltinExternals = (...extra: string[]): string[] => [
|
|
16
|
+
'node:*',
|
|
17
|
+
...builtinModules,
|
|
18
|
+
...extra,
|
|
19
|
+
]
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider adapter interface for the deploy pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Each provider (Cloudflare, AWS, etc.) implements this to handle
|
|
5
|
+
* the provider-specific parts of deployment: entry generation,
|
|
6
|
+
* infrastructure manifests, and config files.
|
|
7
|
+
*
|
|
8
|
+
* The generic pipeline handles: analysis, codegen, bundling, plan/apply.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { DeploymentManifest, DeploymentUnit } from './manifest.js'
|
|
12
|
+
|
|
13
|
+
export interface EntryGenerationContext {
|
|
14
|
+
/** The unit being generated */
|
|
15
|
+
unit: DeploymentUnit
|
|
16
|
+
/** Absolute path to the unit's output directory */
|
|
17
|
+
unitDir: string
|
|
18
|
+
/** Relative path to the unit's pikku-bootstrap.gen.js */
|
|
19
|
+
bootstrapPath: string
|
|
20
|
+
/** Import statement for createConfig */
|
|
21
|
+
configImport: string
|
|
22
|
+
/** Variable name for createConfig */
|
|
23
|
+
configVar: string
|
|
24
|
+
/** Import statement for createSingletonServices */
|
|
25
|
+
servicesImport: string
|
|
26
|
+
/** Variable name for createSingletonServices */
|
|
27
|
+
servicesVar: string
|
|
28
|
+
/** Import statement for SingletonServices type (or empty string) */
|
|
29
|
+
singletonServicesImport: string
|
|
30
|
+
/** Type expression for Partial<SingletonServices> (or fallback) */
|
|
31
|
+
servicesType: string
|
|
32
|
+
/**
|
|
33
|
+
* `import mcpJson from '…/mcp.gen.json' with { type: 'json' }` when the unit
|
|
34
|
+
* has a non-empty mcp.gen.json, else ''. Pair with `mcpServerOption`.
|
|
35
|
+
*/
|
|
36
|
+
mcpImport: string
|
|
37
|
+
/**
|
|
38
|
+
* `'mcpJson, '` to splice into the PikkuNodeHTTPServer *third* (options) arg —
|
|
39
|
+
* the server reads `this.options.mcpJson`, NOT the first config arg — so it
|
|
40
|
+
* mounts /mcp. Else ''. Empty is safe — trailing commas are valid.
|
|
41
|
+
*/
|
|
42
|
+
mcpServerOption: string
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface ProviderAdapter {
|
|
46
|
+
/** Provider name (e.g. 'cloudflare', 'aws') */
|
|
47
|
+
readonly name: string
|
|
48
|
+
|
|
49
|
+
/** Subdirectory name under .deploy/ (e.g. 'cloudflare') */
|
|
50
|
+
readonly deployDirName: string
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* When true, skips per-unit decomposition and bundles everything
|
|
54
|
+
* into a single unit using the project's full .pikku/ directory.
|
|
55
|
+
* Used by standalone adapter.
|
|
56
|
+
*/
|
|
57
|
+
readonly singleUnit?: boolean
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Whether the provider's workflow runtime needs synthesized per-step
|
|
61
|
+
* dispatch queues. Defaults to `true`.
|
|
62
|
+
*
|
|
63
|
+
* - `true` (default): The deploy pipeline synthesizes a `wf-orchestrator-*`
|
|
64
|
+
* queue and a `wf-step-*` queue for every workflow step, plus producer
|
|
65
|
+
* bindings, so the workflow runtime can fan out via queues.
|
|
66
|
+
* - `false`: No synthetic workflow queues are emitted into the manifest
|
|
67
|
+
* or per-unit codegen. Use this when the provider's workflow runtime
|
|
68
|
+
* dispatches steps natively (e.g. Cloudflare's Durable-Object-based
|
|
69
|
+
* `CloudflareWorkflowService`, where the orchestrator DO advances
|
|
70
|
+
* steps directly without a queue hop). Queues created via explicit
|
|
71
|
+
* `wireQueue(...)` user code are unaffected.
|
|
72
|
+
*/
|
|
73
|
+
readonly workflowQueues?: boolean
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Generate the entry file source for a deployment unit.
|
|
77
|
+
* Called once per unit.
|
|
78
|
+
*/
|
|
79
|
+
generateEntrySource(ctx: EntryGenerationContext): string
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Generate the entry file source for a `target: 'server'` (container) unit.
|
|
83
|
+
*
|
|
84
|
+
* Optional. When a provider implements it, the deploy pipeline uses it
|
|
85
|
+
* instead of the provider-agnostic `generateServerEntrySource`, so the
|
|
86
|
+
* provider can inject the SAME platform services (kysely, secrets, …) into
|
|
87
|
+
* the container that it injects into its serverless workers — sourcing the
|
|
88
|
+
* bindings from `process.env` instead of a runtime `env` object. When
|
|
89
|
+
* omitted, the pipeline falls back to the generic generator (no platform
|
|
90
|
+
* injection), which is correct for providers whose containers carry no
|
|
91
|
+
* platform services.
|
|
92
|
+
*/
|
|
93
|
+
generateServerEntrySource?(ctx: EntryGenerationContext): string
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Generate provider-specific config files per unit (e.g. wrangler.toml).
|
|
97
|
+
* Returns a map of filename → content to write into the unit directory.
|
|
98
|
+
*/
|
|
99
|
+
generateUnitConfigs(
|
|
100
|
+
unit: DeploymentUnit,
|
|
101
|
+
manifest: DeploymentManifest,
|
|
102
|
+
projectId: string
|
|
103
|
+
): Map<string, string>
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Generate provider-level infrastructure manifest (e.g. infra.json).
|
|
107
|
+
* Returns file content, or null if not applicable.
|
|
108
|
+
*/
|
|
109
|
+
generateInfraManifest(manifest: DeploymentManifest): string | null
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* External modules for esbuild bundling.
|
|
113
|
+
* Defaults to ['node:*'] if not provided.
|
|
114
|
+
*/
|
|
115
|
+
getExternals?(): string[]
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Regex sources for modules to stub to `export {}` during bundling — modules
|
|
119
|
+
* this provider's runtime never executes (e.g. the `postgres` driver on CF
|
|
120
|
+
* Workers, which use a libsql/Turso dialect). Unlike `getExternals`, a stub
|
|
121
|
+
* removes the bytes entirely rather than leaving a runtime import to resolve.
|
|
122
|
+
*/
|
|
123
|
+
getStubModules?(): string[]
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Module aliases for esbuild bundling (e.g. { crypto: 'node:crypto' }).
|
|
127
|
+
* Used to remap bare imports to platform-compatible paths.
|
|
128
|
+
*/
|
|
129
|
+
getAliases?(): Record<string, string>
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* esbuild define map for compile-time constants (e.g. { 'process.env.NODE_ENV': '"production"' }).
|
|
133
|
+
*/
|
|
134
|
+
getDefine?(): Record<string, string>
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* esbuild platform target. Defaults to 'node'.
|
|
138
|
+
* Cloudflare Workers should use 'neutral'.
|
|
139
|
+
*/
|
|
140
|
+
getPlatform?(): 'node' | 'neutral' | 'browser'
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* esbuild output format. Defaults to 'esm'.
|
|
144
|
+
* pkg requires 'cjs' for standalone binaries.
|
|
145
|
+
*/
|
|
146
|
+
getFormat?(): 'esm' | 'cjs'
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Skip the createRequire banner. CF Workers should return true —
|
|
150
|
+
* `import.meta.url` is undefined there and the banner crashes at boot.
|
|
151
|
+
*/
|
|
152
|
+
getNoRequireShim?(): boolean
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Generate additional provider-level config files (e.g. serverless.yml).
|
|
156
|
+
* Returns a map of filename → content to write into the deploy directory.
|
|
157
|
+
*/
|
|
158
|
+
generateProviderConfigs?(manifest: DeploymentManifest): Map<string, string>
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Emit any provider-specific artifacts that aren't tied to a single user
|
|
162
|
+
* unit — e.g. a synthesized proxy Worker that fronts a CF Container.
|
|
163
|
+
* Called after the infra manifest is written so providers can read it
|
|
164
|
+
* and key off resources that were provisioned in earlier steps.
|
|
165
|
+
*/
|
|
166
|
+
emitSideArtifacts?(options: {
|
|
167
|
+
buildDir: string
|
|
168
|
+
manifest: DeploymentManifest
|
|
169
|
+
logger: { info(msg: string): void; error(msg: string): void }
|
|
170
|
+
}): Promise<void>
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Deploy the built artifacts to the provider.
|
|
174
|
+
* Optional — if not implemented, the CLI just outputs the build directory.
|
|
175
|
+
*/
|
|
176
|
+
deploy?(options: {
|
|
177
|
+
buildDir: string
|
|
178
|
+
logger: { info(msg: string): void; error(msg: string): void }
|
|
179
|
+
onProgress?: (step: string, detail: string) => void
|
|
180
|
+
}): Promise<{
|
|
181
|
+
success: boolean
|
|
182
|
+
/** Names of the deployed units, as they appear on the provider. */
|
|
183
|
+
workersDeployed?: string[]
|
|
184
|
+
/** Identifiers of the resources provisioned for this deploy. */
|
|
185
|
+
resourcesCreated?: string[]
|
|
186
|
+
errors: Array<{ step: string; error: string }>
|
|
187
|
+
}>
|
|
188
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { describe, it } from 'node:test'
|
|
2
|
+
import assert from 'node:assert/strict'
|
|
3
|
+
import { readdirSync, readFileSync, statSync } from 'node:fs'
|
|
4
|
+
import { join, relative } from 'node:path'
|
|
5
|
+
import { fileURLToPath } from 'node:url'
|
|
6
|
+
|
|
7
|
+
const packageDir = fileURLToPath(new URL('..', import.meta.url))
|
|
8
|
+
const repoRoot = join(packageDir, '..', '..', '..')
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Every name `@pikku/deploy` owns. A provider adapter that re-declares one is
|
|
12
|
+
* writing a second, unchecked copy of the contract: nothing compares the two,
|
|
13
|
+
* so the copy drifts silently until a deploy emits the wrong manifest.
|
|
14
|
+
*/
|
|
15
|
+
const OWNED_NAMES = [
|
|
16
|
+
'AgentDefinition',
|
|
17
|
+
'ChannelDefinition',
|
|
18
|
+
'DeploymentHandler',
|
|
19
|
+
'DeploymentManifest',
|
|
20
|
+
'DeploymentUnit',
|
|
21
|
+
'DeploymentUnitRole',
|
|
22
|
+
'EntryGenerationContext',
|
|
23
|
+
'GrantedAddon',
|
|
24
|
+
'HttpRouteInfo',
|
|
25
|
+
'MCPEndpointDefinition',
|
|
26
|
+
'ProviderAdapter',
|
|
27
|
+
'QueueDefinition',
|
|
28
|
+
'ScheduledTaskDefinition',
|
|
29
|
+
'SecretDeclaration',
|
|
30
|
+
'ServiceCapability',
|
|
31
|
+
'ServiceRequirement',
|
|
32
|
+
'UnresolvedSecretRead',
|
|
33
|
+
'UnscopedAddon',
|
|
34
|
+
'VariableDeclaration',
|
|
35
|
+
'WorkflowDefinition',
|
|
36
|
+
'WorkflowStepDefinition',
|
|
37
|
+
]
|
|
38
|
+
|
|
39
|
+
const sourceFiles = (dir: string): string[] => {
|
|
40
|
+
const found: string[] = []
|
|
41
|
+
for (const entry of readdirSync(dir)) {
|
|
42
|
+
if (entry === 'node_modules' || entry === 'dist') continue
|
|
43
|
+
const path = join(dir, entry)
|
|
44
|
+
if (statSync(path).isDirectory()) {
|
|
45
|
+
found.push(...sourceFiles(path))
|
|
46
|
+
} else if (entry.endsWith('.ts') && !entry.endsWith('.test.ts')) {
|
|
47
|
+
found.push(path)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return found
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const consumerFiles = (): string[] => {
|
|
54
|
+
const deployPackages = join(repoRoot, 'packages', 'deploy')
|
|
55
|
+
const files: string[] = []
|
|
56
|
+
for (const entry of readdirSync(deployPackages)) {
|
|
57
|
+
if (entry === 'deploy-core') continue
|
|
58
|
+
const src = join(deployPackages, entry, 'src')
|
|
59
|
+
try {
|
|
60
|
+
if (statSync(src).isDirectory()) files.push(...sourceFiles(src))
|
|
61
|
+
} catch {
|
|
62
|
+
continue
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
files.push(...sourceFiles(join(repoRoot, 'packages', 'cli', 'src', 'deploy')))
|
|
66
|
+
return files
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
describe('the shared deploy contract has exactly one declaration', () => {
|
|
70
|
+
it('is never re-declared by a provider adapter or by the CLI pipeline', () => {
|
|
71
|
+
const offenders: string[] = []
|
|
72
|
+
|
|
73
|
+
for (const file of consumerFiles()) {
|
|
74
|
+
const source = readFileSync(file, 'utf-8')
|
|
75
|
+
for (const name of OWNED_NAMES) {
|
|
76
|
+
const declaration = new RegExp(
|
|
77
|
+
`^\\s*(?:export\\s+)?(?:interface|type)\\s+${name}\\b`,
|
|
78
|
+
'm'
|
|
79
|
+
)
|
|
80
|
+
if (declaration.test(source)) {
|
|
81
|
+
offenders.push(`${relative(repoRoot, file)} declares ${name}`)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
assert.deepEqual(
|
|
87
|
+
offenders.sort(),
|
|
88
|
+
[],
|
|
89
|
+
`these files re-declare a type @pikku/deploy owns — import it instead:\n ${offenders.sort().join('\n ')}`
|
|
90
|
+
)
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
it('exports every name it owns from the barrel', () => {
|
|
94
|
+
const barrel = readFileSync(join(packageDir, 'src', 'index.ts'), 'utf-8')
|
|
95
|
+
const missing = OWNED_NAMES.filter((name) => !barrel.includes(name))
|
|
96
|
+
assert.deepEqual(
|
|
97
|
+
missing,
|
|
98
|
+
[],
|
|
99
|
+
`owned but not re-exported from index.ts: ${missing.join(', ')}`
|
|
100
|
+
)
|
|
101
|
+
})
|
|
102
|
+
})
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"rootDir": "./src",
|
|
5
|
+
"module": "Node18",
|
|
6
|
+
"outDir": "dist",
|
|
7
|
+
"target": "esnext",
|
|
8
|
+
"declaration": true,
|
|
9
|
+
"composite": true
|
|
10
|
+
},
|
|
11
|
+
"include": ["src/**/*.ts"],
|
|
12
|
+
"exclude": ["**/*.test.ts", "node_modules", "dist"]
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/typescript/lib/lib.es2024.d.ts","../../../node_modules/typescript/lib/lib.es2025.d.ts","../../../node_modules/typescript/lib/lib.esnext.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../../node_modules/typescript/lib/lib.es2025.collection.d.ts","../../../node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../node_modules/typescript/lib/lib.es2025.intl.d.ts","../../../node_modules/typescript/lib/lib.es2025.iterator.d.ts","../../../node_modules/typescript/lib/lib.es2025.promise.d.ts","../../../node_modules/typescript/lib/lib.es2025.regexp.d.ts","../../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../../node_modules/typescript/lib/lib.esnext.date.d.ts","../../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/typescript/lib/lib.esnext.error.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.esnext.temporal.d.ts","../../../node_modules/typescript/lib/lib.esnext.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/typescript/lib/lib.esnext.full.d.ts","./src/manifest.ts","./src/provider-adapter.ts","./src/node-builtins.ts","./src/index.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/@types/node/node_modules/undici-types/utility.d.ts","../../../node_modules/@types/node/node_modules/undici-types/header.d.ts","../../../node_modules/@types/node/node_modules/undici-types/readable.d.ts","../../../node_modules/@types/node/node_modules/undici-types/fetch.d.ts","../../../node_modules/@types/node/node_modules/undici-types/formdata.d.ts","../../../node_modules/@types/node/node_modules/undici-types/connector.d.ts","../../../node_modules/@types/node/node_modules/undici-types/client-stats.d.ts","../../../node_modules/@types/node/node_modules/undici-types/client.d.ts","../../../node_modules/@types/node/node_modules/undici-types/errors.d.ts","../../../node_modules/@types/node/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/@types/node/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/@types/node/node_modules/undici-types/global-origin.d.ts","../../../node_modules/@types/node/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/@types/node/node_modules/undici-types/pool.d.ts","../../../node_modules/@types/node/node_modules/undici-types/handlers.d.ts","../../../node_modules/@types/node/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/@types/node/node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/@types/node/node_modules/undici-types/h2c-client.d.ts","../../../node_modules/@types/node/node_modules/undici-types/agent.d.ts","../../../node_modules/@types/node/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/@types/node/node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/@types/node/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/@types/node/node_modules/undici-types/mock-client.d.ts","../../../node_modules/@types/node/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/@types/node/node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/@types/node/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/@types/node/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/@types/node/node_modules/undici-types/socks5-proxy-agent.d.ts","../../../node_modules/@types/node/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/@types/node/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/@types/node/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/@types/node/node_modules/undici-types/api.d.ts","../../../node_modules/@types/node/node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/@types/node/node_modules/undici-types/interceptors.d.ts","../../../node_modules/@types/node/node_modules/undici-types/util.d.ts","../../../node_modules/@types/node/node_modules/undici-types/cookies.d.ts","../../../node_modules/@types/node/node_modules/undici-types/patch.d.ts","../../../node_modules/@types/node/node_modules/undici-types/websocket.d.ts","../../../node_modules/@types/node/node_modules/undici-types/eventsource.d.ts","../../../node_modules/@types/node/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/@types/node/node_modules/undici-types/content-type.d.ts","../../../node_modules/@types/node/node_modules/undici-types/cache.d.ts","../../../node_modules/@types/node/node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/path/posix.d.ts","../../../node_modules/@types/node/path/win32.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/quic.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/iter.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/test/reporters.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/util/types.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/zlib/iter.d.ts","../../../node_modules/@types/node/index.d.ts"],"fileIdsList":[[100,161,162,164,172,176,179,181,182,183,196],[100,163,164,172,176,179,181,182,183,196],[164,172,176,179,181,182,183,196],[100,164,172,176,179,181,182,183,196,205],[100,164,165,170,172,175,176,179,181,182,183,185,196,201,214],[100,164,165,166,172,175,176,179,181,182,183,196],[100,164,172,176,179,181,182,183,196],[100,164,167,172,176,179,181,182,183,196,215],[100,164,168,169,172,176,179,181,182,183,187,196],[100,164,169,172,176,179,181,182,183,196,201,211],[100,164,170,172,175,176,179,181,182,183,185,196],[100,163,164,171,172,176,179,181,182,183,196],[100,164,172,173,176,179,181,182,183,196],[100,164,172,174,175,176,179,181,182,183,196],[100,163,164,172,175,176,179,181,182,183,196],[100,164,172,175,176,177,179,181,182,183,196,201,214],[100,164,172,175,176,177,179,181,182,183,196,201,203,205],[100,151,164,172,175,176,178,179,181,182,183,185,196,201,214],[100,164,172,175,176,178,179,181,182,183,185,196,201,211,214],[100,164,172,176,178,179,180,181,182,183,196,201,211,214],[98,99,100,101,102,103,104,105,106,107,108,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222],[100,164,172,175,176,179,181,182,183,196],[100,164,172,176,179,181,183,196],[100,164,172,176,179,181,182,183,184,196,214],[100,164,172,175,176,179,181,182,183,185,196,201],[100,115,118,121,122,164,172,176,179,181,182,183,196,214],[100,118,164,172,176,179,181,182,183,196,201,214],[100,118,122,164,172,176,179,181,182,183,196,214],[100,164,172,176,179,181,182,183,196,201],[100,112,164,172,176,179,181,182,183,196],[100,116,164,172,176,179,181,182,183,196],[100,114,115,118,164,172,176,179,181,182,183,196,214],[100,164,172,176,179,181,182,183,185,196,211],[100,164,172,176,179,181,182,183,196,223],[100,112,164,172,176,179,181,182,183,196,223],[100,114,118,164,172,176,179,181,182,183,185,196,214],[100,109,110,111,113,117,164,172,175,176,179,181,182,183,196,201,214],[100,118,127,135,164,172,176,179,181,182,183,196],[100,110,116,164,172,176,179,181,182,183,196],[100,118,145,146,164,172,176,179,181,182,183,196],[100,110,113,118,164,172,176,179,181,182,183,196,205,214,223],[100,118,164,172,176,179,181,182,183,196],[100,114,118,164,172,176,179,181,182,183,196,214],[100,109,164,172,176,179,181,182,183,196],[100,112,113,114,116,117,118,119,120,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,164,172,176,179,181,182,183,196],[100,118,138,141,164,172,176,179,181,182,183,196],[100,118,127,128,129,164,172,176,179,181,182,183,196],[100,116,118,128,130,164,172,176,179,181,182,183,196],[100,117,164,172,176,179,181,182,183,196],[100,110,112,118,164,172,176,179,181,182,183,196],[100,118,122,128,130,164,172,176,179,181,182,183,196],[100,122,164,172,176,179,181,182,183,196],[100,116,118,121,164,172,176,179,181,182,183,196,214],[100,110,114,118,127,164,172,176,179,181,182,183,196],[100,118,138,164,172,176,179,181,182,183,196],[100,130,164,172,176,179,181,182,183,196],[100,110,114,118,122,164,172,176,179,181,182,183,196],[100,112,118,145,164,172,176,179,181,182,183,196,205,220,223],[100,164,172,176,179,181,182,183,187,196],[100,164,172,176,179,181,182,183,188,196],[100,164,172,175,176,179,181,182,183,191,196],[100,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221],[100,164,172,176,179,181,182,183,193,196],[100,164,172,176,179,181,182,183,194,196],[100,164,169,172,176,179,181,182,183,185,196,205],[100,164,172,175,176,179,181,182,183,196,197],[100,164,172,176,179,181,182,183,196,198,215,218],[100,164,172,175,176,179,181,182,183,196,201,204,205],[100,164,172,176,179,181,182,183,196,202,205],[100,164,172,176,179,181,182,183,196,203],[100,164,172,176,179,181,182,183,196,205,215],[100,164,172,176,179,181,182,183,196,206],[100,161,164,172,176,179,181,182,183,196,201,208,214],[100,164,172,176,179,181,182,183,196,201,207],[100,164,172,175,176,179,181,182,183,196,209,210],[100,164,172,176,179,181,182,183,196,209,210],[100,164,169,172,176,179,181,182,183,185,196,201,211],[100,164,172,176,179,181,182,183,196,212],[100,164,172,176,179,181,182,183,185,196,213],[100,164,172,176,178,179,181,182,183,194,196,214],[100,164,172,176,179,181,182,183,196,215,216],[100,164,169,172,176,179,181,182,183,196,216],[100,164,172,176,179,181,182,183,196,201,217],[100,164,172,176,179,181,182,183,184,196,218],[100,164,172,176,179,181,182,183,196,219],[100,164,167,172,176,179,181,182,183,196],[100,164,169,172,176,179,181,182,183,196],[100,164,172,176,179,181,182,183,196,215],[100,151,164,172,176,179,181,182,183,196],[100,164,172,176,179,181,182,183,196,214],[100,164,172,176,179,181,182,183,196,220],[100,164,172,176,179,181,182,183,191,196],[100,164,172,176,179,181,182,183,196,210],[100,151,164,172,175,176,177,179,181,182,183,191,196,201,205,214,217,218,220],[100,164,172,176,179,181,182,183,196,201,221],[100,164,172,176,179,181,182,183,196,203,222],[94,95,96,100,164,172,176,179,181,182,183,196],[100,164,172,176,179,181,182,183,184,196],[94,100,164,172,176,179,181,182,183,196]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"999ca32883495a866aa5737fe1babc764a469e4cde6ee6b136a4b9ae68853e4b","impliedFormat":1},{"version":"17f13ecb98cbc39243f2eee1f16d45cd8ec4706b03ee314f1915f1a8b42f6984","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"2a2de5b9459b3fc44decd9ce6100b72f1b002ef523126c1d3d8b2a4a63d74d78","affectsGlobalScope":true,"impliedFormat":1},{"version":"f13f4b465c99041e912db5c44129a94588e1aafee35a50eab51044833f50b4ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"30d62269b05b584741f19a5369852d5d34895aa2ac4fd948956f886d15f9cc0d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ffbe6d7b295306b2ba88030f65b74c107d8d99bdcf596ea99c62a02f606108b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"996fb27b15277369c68a4ba46ed138b4e9e839a02fb4ec756f7997629242fd9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"79b712591b270d4778c89706ca2cfc56ddb8c3f895840e477388f1710dc5eda9","affectsGlobalScope":true,"impliedFormat":1},{"version":"20884846cef428b992b9bd032e70a4ef88e349263f63aeddf04dda837a7dba26","affectsGlobalScope":true,"impliedFormat":1},{"version":"5fcab789c73a97cd43828ee3cc94a61264cf24d4c44472ce64ced0e0f148bdb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"db59a81f070c1880ad645b2c0275022baa6a0c4f0acdc58d29d349c6efcf0903","affectsGlobalScope":true,"impliedFormat":1},{"version":"673294292640f5722b700e7d814e17aaf7d93f83a48a2c9b38f33cbc940ad8b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d786b48f934cbca483b3c6d0a798cb43bbb4ada283e76fb22c28e53ae05b9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"142efd4ce210576f777dc34df121777be89eda476942d6d6663b03dcb53be3ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"379bc41580c2d774f82e828c70308f24a005b490c25ba34d679d84bcf05c3d9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed484fb2aa8a1a23d0277056ec3336e0a0b52f9b8d6a961f338a642faf43235d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ffedae1d1c2d53fdbca1c96d3c7dda544281f7d262f99b6880634f8fd8d9820","affectsGlobalScope":true,"impliedFormat":1},{"version":"83a730b125d477dd264df8ba479afab27a3dae7152b005c214ab94dc7ee44fd3","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"ef4a897cd2a3f91000c10264e400b3667c7e51e1b7365f03b62e8081dc53bde6","impliedFormat":1},{"version":"ce239259fc0a073405b8d39ce494a2b1e3913b1164ca30dc502b7b012dafc9b9","signature":"8785dca18fb826ec42a13290d99dadfe08b98ea215ab1bd85cad053eb638f97c","impliedFormat":99},{"version":"0519b7eb57acb763a97d81f3ade49927e4299826635e4927fe8df4b0e411c5aa","signature":"9ee6040f9ccbb5538c2dc9239b660d4130feaa69867fd9415d60f2d147ff53fc","impliedFormat":99},{"version":"5c4b7c21569730d421f63356b0ba1bc971f608d8ccdc911a2ce16fe13651e34c","signature":"9f2142592764e5d52df7ee53bc130ec7a83be6e76d4cf141b505d10bb7167337","impliedFormat":99},{"version":"88e85335042b6fb6b2f40ea4aabd6d55a861b812eff6da46d590245f52fc80fb","signature":"81017c39fb10be240acd2aae07dd0f03d00f030c1e2c98e25af4961a37066ff0","impliedFormat":99},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"14e9acf826baba0ef4b5665704084896e7bcc06f65a9ab13af7e93d27d6b7069","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"21adf13435b9b748529c8cedf80f884e5130b9684188120a686cd2b26a2059c7","impliedFormat":1},{"version":"eec76bf6b9346f3f95fa402621b889489e96930e72295b0369022f332e9b4a6a","impliedFormat":1},{"version":"0ecd58f413f9bc3b7d4383eae31b0c8fc576985cd7404d6f99f8c643543ade74","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"d33ce35e3f9cfcc1d94eca415bdd3bde94d5b153ffdd33e6c4455c029986c630","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"4dc59f6e1dbf3d5f66660fceabe6c174d3261b37b696ae1854f0dbaf255fc753","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"436d7b4543b340b0f3eef4310d524242e41369b9652aa9c70428767c4dcac455","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"114f493b30f364255290472111b5a4791d5902c308645670cd0401429cbc6930","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"c8b8968311ec4e5e97b7b5fb8a65efaba455db9bdcfd7fff7fb15f6e317bfba0","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"aecbf1d9e6a18dab7d92ef8a89a1444b47e1eb6134cb2bb776a26d55ff58c29a","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"1fede9296beac11ce8e6b425396a1791f64341f2be85deebb6286faf6e16306e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce697b6a251d9cad53998c7fd3098072df883b525ec45d83530e434dc6d80dc6","impliedFormat":1},{"version":"53ff1acab080a8318445df2c7da35ec47489dc83be40569e39c7c750046e217f","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"3db996ecdee7aabecc5385976cc07eb66216034a273c07b17d1a85292e9bab0c","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"5ff4433a2deae4f85ab1377e90a7554ce6b47ae51c69a84ca30a6e22fae85834","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"c1fa52b3d014001e8662fa2669d90ea15373958a288e3b83a3b621733d25292a","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"47d480d0c84b0f6215f1f817e0939b247ebf5217b6784846b96fa6ab710ce99d","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"8413d0641f293aed551c7464615b770d34a02dedede889b9591172287d68e773","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"1b241e24f3227d078c06aeda6e050187ad59a4e591f4467abed44d92b084e08d","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"7fde0e1be5c8be204ffbf428abfcf01da2eb0f130e1bc3f539eb7275f4fd1f58","impliedFormat":1},{"version":"e284328553df5f425a5d33d36a0c3fa66b46af9d097cad6f4d2e8696dfdeb0f1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f36b3fbe2be150a9ca140da48593f21e6a8172004f92ddc549b43efec39f3e54","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"016b29bf4926b80255a108c53a1451717350059da04fcae64d1075f5e93bbb39","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"1c4f139ade4f6ebf45463505f8155173e5d7a5305e50e0aae0a5e712d6ff3b48","impliedFormat":1},{"version":"e16b319e5aca1031168de823c4946ff8e29629c4c8cc0ec0fcfe2a8ab2155043","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"2c3c5c0f54055e87640f5d233716fd889f3034fc7911d603b642369b0dbeb2a7","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"1c9e5b1a17b1fc9b3711fb36e0690421261ab2880f15b145155b5b2ba2ab6c2d","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"afa1c49f8e559e413d57343339db857d2a8159435cf9cf7d4deb41718fff1b88","impliedFormat":1},{"version":"6953d7597831d0860c7034cf4f0419687d263b6b98a4b32e37ce6d49615c36e2","impliedFormat":1}],"root":[[94,97]],"options":{"allowJs":false,"composite":true,"declaration":true,"emitDecoratorMetadata":false,"experimentalDecorators":false,"importHelpers":false,"module":101,"noImplicitAny":false,"noUnusedLocals":true,"outDir":"./dist","removeComments":false,"rootDir":"./src","skipLibCheck":true,"sourceMap":false,"strict":true,"strictNullChecks":true,"target":99,"useUnknownInCatchVariables":false},"referencedMap":[[161,1],[162,1],[163,2],[100,3],[164,4],[165,5],[166,6],[98,7],[167,8],[168,9],[169,10],[170,11],[171,12],[172,13],[173,13],[174,14],[175,15],[176,16],[177,17],[101,7],[99,7],[178,18],[179,19],[180,20],[223,21],[181,22],[182,23],[183,22],[184,24],[185,25],[127,26],[140,27],[124,28],[141,29],[150,30],[115,31],[116,32],[114,33],[149,34],[144,35],[148,36],[118,37],[137,38],[117,39],[147,40],[112,41],[113,35],[119,42],[120,7],[126,43],[123,42],[110,44],[151,45],[142,46],[130,47],[129,42],[131,48],[134,49],[128,50],[132,51],[145,34],[121,52],[122,53],[135,54],[111,29],[139,55],[138,42],[125,53],[133,56],[136,57],[143,7],[109,7],[146,58],[187,59],[188,60],[189,60],[190,60],[191,61],[192,62],[193,63],[194,64],[195,65],[196,66],[197,66],[198,67],[199,7],[200,7],[201,68],[202,69],[203,70],[204,68],[205,71],[206,72],[207,73],[208,74],[209,75],[210,76],[211,77],[212,78],[213,79],[214,80],[215,81],[216,82],[217,83],[218,84],[219,85],[102,22],[103,7],[104,86],[105,87],[106,7],[107,88],[108,7],[152,89],[153,90],[154,91],[155,91],[156,92],[157,7],[158,4],[159,93],[160,90],[220,94],[221,95],[222,96],[186,7],[91,7],[92,7],[16,7],[14,7],[15,7],[20,7],[19,7],[2,7],[21,7],[22,7],[23,7],[24,7],[25,7],[26,7],[27,7],[28,7],[3,7],[29,7],[30,7],[4,7],[31,7],[35,7],[32,7],[33,7],[34,7],[36,7],[37,7],[38,7],[5,7],[39,7],[40,7],[41,7],[42,7],[6,7],[46,7],[43,7],[44,7],[45,7],[47,7],[7,7],[48,7],[53,7],[54,7],[49,7],[50,7],[51,7],[52,7],[8,7],[58,7],[55,7],[56,7],[57,7],[59,7],[9,7],[60,7],[61,7],[62,7],[64,7],[63,7],[65,7],[66,7],[10,7],[67,7],[68,7],[69,7],[11,7],[70,7],[71,7],[72,7],[73,7],[74,7],[75,7],[12,7],[76,7],[77,7],[78,7],[79,7],[80,7],[1,7],[81,7],[82,7],[13,7],[83,7],[84,7],[85,7],[86,7],[93,7],[87,7],[88,7],[89,7],[90,7],[18,7],[17,7],[97,97],[94,7],[96,98],[95,99]],"latestChangedDtsFile":"./dist/index.d.ts","version":"6.0.3"}
|