@samebase/alchemy-convex 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -3
- package/lib/index.d.ts +26 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +53 -8
- package/lib/index.js.map +1 -1
- package/package.json +9 -8
- package/src/Component.ts +54 -0
- package/src/Deployment.ts +20 -6
- package/src/index.ts +1 -0
package/README.md
CHANGED
|
@@ -12,19 +12,22 @@ This is a community provider, maintained by [Samebase](https://samebase.com). Th
|
|
|
12
12
|
follows the "Convex Plain" mode of [rjdellecese/confect#408](https://github.com/rjdellecese/confect/issues/408).
|
|
13
13
|
[docs/design/convex-plane.md](docs/design/convex-plane.md) records the decisions.
|
|
14
14
|
|
|
15
|
-
Status: pinned to `alchemy@2.0.0-beta.
|
|
15
|
+
Status: pinned to `alchemy@2.0.0-beta.84` and Effect 4. Alchemy ships breaking changes between
|
|
16
16
|
betas; upgrade this package and Alchemy together. A live test runs the full sequence with the real
|
|
17
17
|
Convex CLI: create, push, no-op, change, preview, deploy keys alone, and destroy.
|
|
18
18
|
|
|
19
19
|
## Install
|
|
20
20
|
|
|
21
21
|
```sh
|
|
22
|
-
pnpm add -D @samebase/alchemy-convex alchemy@2.0.0-beta.
|
|
22
|
+
pnpm add -D @samebase/alchemy-convex alchemy@2.0.0-beta.84 effect@^4.0.5 @effect/platform-node@^4.0.5 convex
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
Use one version for `effect` and for each `@effect/*` package. A mix fails at load time, such as
|
|
26
26
|
`@effect/platform-node-shared` 4.0.5 next to `effect` 4.0.3.
|
|
27
27
|
|
|
28
|
+
Alchemy providers are separate packages. The example below also needs
|
|
29
|
+
`@alchemy.run/cloudflare@2.0.0-beta.84`, the same version as `alchemy`.
|
|
30
|
+
|
|
28
31
|
## Example
|
|
29
32
|
|
|
30
33
|
```ts
|
|
@@ -60,7 +63,7 @@ export default Alchemy.Stack(
|
|
|
60
63
|
);
|
|
61
64
|
```
|
|
62
65
|
|
|
63
|
-
The imports are `alchemy`,
|
|
66
|
+
The imports are `alchemy`, `@alchemy.run/cloudflare`, `alchemy/RemovalPolicy`, `effect/Config`,
|
|
64
67
|
`effect/Effect`, `effect/Layer`, and `@samebase/alchemy-convex` as `Convex`. Order follows the
|
|
65
68
|
outputs: the project exists before its deployment, and the push finishes before the site build. The
|
|
66
69
|
first `alchemy deploy --stage prod` takes over the existing project, and its production
|
|
@@ -91,6 +94,55 @@ Effect.gen(function* () {
|
|
|
91
94
|
State always holds `rootDir`, `"."` included, so a reader of the state finds the app directory of
|
|
92
95
|
each deployment.
|
|
93
96
|
|
|
97
|
+
### Resources associated with an installed component
|
|
98
|
+
|
|
99
|
+
Keep the component's native Alchemy resource declarations. Connect their namespace to the installed
|
|
100
|
+
component name in the consuming app's stack. The name comes from the app's `convex.config.ts`:
|
|
101
|
+
`app.use(mail, { name: "mail" })` installs the component as `"mail"`.
|
|
102
|
+
|
|
103
|
+
```ts
|
|
104
|
+
import { bindComponent } from "@samebase/alchemy-convex";
|
|
105
|
+
import * as Effect from "effect/Effect";
|
|
106
|
+
|
|
107
|
+
// `production` is this app's Convex.Deployment. EmailInbox creates its resources under "Mail".
|
|
108
|
+
Effect.gen(function* () {
|
|
109
|
+
const inbox = yield* EmailInbox("Mail", {
|
|
110
|
+
convexSiteUrl: production.siteUrl,
|
|
111
|
+
zone,
|
|
112
|
+
sendingDomain,
|
|
113
|
+
});
|
|
114
|
+
yield* bindComponent({
|
|
115
|
+
deployment: production,
|
|
116
|
+
component: "mail",
|
|
117
|
+
namespace: inbox.worker.Namespace,
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
The deployment's Alchemy state row stores this entry in its native `bindings` array:
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"sid": "convex.component:[\"Mail\"]",
|
|
127
|
+
"data": { "type": "component", "path": "mail", "namespace": ["Mail"] }
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Readers inspect each binding's `data`. The deployment attributes identify the Convex deployment;
|
|
132
|
+
the row's stack and stage identify the Alchemy scope. The live repository reader includes the
|
|
133
|
+
binding through its existing resource JSON. No extra resource list, state table, or subscription
|
|
134
|
+
is needed.
|
|
135
|
+
|
|
136
|
+
Use actual namespace ancestry when grouping resources. A slash in a resource's logical ID is not a
|
|
137
|
+
namespace boundary. For a nested install, join the installed names with slashes, such as
|
|
138
|
+
`"workspace/mail"`. An undefined namespace means the stack root. Each namespace can be assigned to
|
|
139
|
+
one component per deployment; a component can have multiple namespaces. A more specific child
|
|
140
|
+
namespace takes precedence when displaying resources.
|
|
141
|
+
|
|
142
|
+
The connection is declared metadata. It does not check that the component is installed, push code,
|
|
143
|
+
set environment values, or change resource deletion policies. Removing the call removes the binding
|
|
144
|
+
on the next apply.
|
|
145
|
+
|
|
94
146
|
## Credentials
|
|
95
147
|
|
|
96
148
|
Credentials are a layer, never props, so they do not go into Alchemy state. `Convex.providers()`
|
package/lib/index.d.ts
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Stack } from "alchemy/Stack";
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Schema from "effect/Schema";
|
|
4
|
+
import * as Context from "effect/Context";
|
|
3
5
|
import * as Layer from "effect/Layer";
|
|
4
6
|
import * as Redacted from "effect/Redacted";
|
|
5
|
-
import * as Schema from "effect/Schema";
|
|
6
7
|
import { Resource } from "alchemy";
|
|
7
8
|
import * as Provider from "alchemy/Provider";
|
|
8
9
|
import * as ChildProcessSpawner from "effect/process/ChildProcessSpawner";
|
|
9
10
|
import { createDeploymentClient, createManagementClient } from "@convex-dev/platform";
|
|
10
11
|
import "effect/Scope";
|
|
11
12
|
import { State, StateStoreError } from "alchemy/State";
|
|
13
|
+
import { NamespaceNode } from "alchemy/Namespace";
|
|
12
14
|
import { InputProps } from "alchemy/Input";
|
|
13
15
|
import { components } from "@convex-dev/platform/managementApi";
|
|
14
16
|
//#region src/Credentials.d.ts
|
|
@@ -250,7 +252,7 @@ interface DeploymentAttributes extends DeploymentTarget {
|
|
|
250
252
|
/** The names of the `env` variables that this resource set on the deployment, sorted. */
|
|
251
253
|
readonly envNames: readonly string[];
|
|
252
254
|
}
|
|
253
|
-
export type Deployment = Resource<"Convex.Deployment", DeploymentProps, DeploymentAttributes,
|
|
255
|
+
export type Deployment = Resource<"Convex.Deployment", DeploymentProps, DeploymentAttributes, ComponentBinding, Providers>;
|
|
254
256
|
/** The props of a `Convex.Deployment` call: Alchemy inputs, with `rootDir` a plain string. */
|
|
255
257
|
type DeploymentInput = DeploymentProps extends (infer P) ? P extends DeploymentProps ? InputProps<P, "rootDir"> : never : never;
|
|
256
258
|
declare const AbsoluteRootDir_base: Schema.Class<AbsoluteRootDir, Schema.TaggedStruct<"AbsoluteRootDir", {
|
|
@@ -310,6 +312,26 @@ export declare class AmbiguousDeployment extends AmbiguousDeployment_base {
|
|
|
310
312
|
get message(): string;
|
|
311
313
|
}
|
|
312
314
|
//#endregion
|
|
315
|
+
//#region src/Component.d.ts
|
|
316
|
+
/** A component's resources occupy this namespace in the deployment's Alchemy stack and stage. */
|
|
317
|
+
interface ComponentBinding {
|
|
318
|
+
readonly type: "component";
|
|
319
|
+
readonly path: string;
|
|
320
|
+
readonly namespace: readonly string[];
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Associate a native namespace with an installed component. `component` is the
|
|
324
|
+
* installed name from the app's `convex.config.ts`; a nested install joins the
|
|
325
|
+
* names with slashes, such as `"workspace/mail"`. An undefined namespace
|
|
326
|
+
* associates the stack root. This records display metadata; it does not install
|
|
327
|
+
* the component, set its environment, or change removal policies.
|
|
328
|
+
*/
|
|
329
|
+
export declare const bindComponent: (options: {
|
|
330
|
+
deployment: Deployment;
|
|
331
|
+
component: string;
|
|
332
|
+
namespace: NamespaceNode | undefined;
|
|
333
|
+
}) => Effect.Effect<undefined, never, Stack>;
|
|
334
|
+
//#endregion
|
|
313
335
|
//#region src/Project.d.ts
|
|
314
336
|
/** Region names the Management API accepts, from the generated schema. */
|
|
315
337
|
type DeploymentRegion = components["schemas"]["RegionName"];
|
|
@@ -448,5 +470,5 @@ export declare const state: (options?: {
|
|
|
448
470
|
readonly team?: string | number;
|
|
449
471
|
}) => Layer.Layer<State, never, ChildProcessSpawner.ChildProcessSpawner>;
|
|
450
472
|
//#endregion
|
|
451
|
-
export type { DeploymentAttributes, DeploymentInput, DeploymentProps, DeploymentRegion, EnvValue, ProjectAttributes, ProjectProps, RunRecord, Source };
|
|
473
|
+
export type { ComponentBinding, DeploymentAttributes, DeploymentInput, DeploymentProps, DeploymentRegion, EnvValue, ProjectAttributes, ProjectProps, RunRecord, Source };
|
|
452
474
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/Credentials.ts","../src/ManagementApi.ts","../src/Providers.ts","../src/Push.ts","../src/Deployment.ts","../src/Project.ts","../src/RunRecord.ts","../src/State.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/Credentials.ts","../src/ManagementApi.ts","../src/Providers.ts","../src/Push.ts","../src/Deployment.ts","../src/Component.ts","../src/Project.ts","../src/RunRecord.ts","../src/State.ts"],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
|
+
import { toPath } from "alchemy/FQN";
|
|
3
|
+
import { Stack } from "alchemy/Stack";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Schema from "effect/Schema";
|
|
2
6
|
import { access, mkdtemp, readFile, realpath, rm, writeFile } from "node:fs/promises";
|
|
3
7
|
import { homedir, tmpdir } from "node:os";
|
|
4
8
|
import { dirname, join, posix, relative, resolve, sep, win32 } from "node:path";
|
|
5
9
|
import * as Config from "effect/Config";
|
|
6
10
|
import * as Context from "effect/Context";
|
|
7
|
-
import * as Effect from "effect/Effect";
|
|
8
11
|
import * as Layer from "effect/Layer";
|
|
9
12
|
import * as Option from "effect/Option";
|
|
10
13
|
import * as Redacted from "effect/Redacted";
|
|
11
14
|
import * as Result from "effect/Result";
|
|
12
|
-
import * as Schema from "effect/Schema";
|
|
13
15
|
import { Resource } from "alchemy";
|
|
14
16
|
import { AdoptPolicy, OwnedBySomeoneElse, Unowned } from "alchemy/AdoptPolicy";
|
|
15
|
-
import { isResolved } from "alchemy/Diff";
|
|
17
|
+
import { diffBindings, isResolved } from "alchemy/Diff";
|
|
16
18
|
import * as Provider from "alchemy/Provider";
|
|
17
19
|
import * as ChildProcessSpawner from "effect/process/ChildProcessSpawner";
|
|
18
20
|
import { AlchemyContext } from "alchemy/AlchemyContext";
|
|
19
|
-
import { Stack } from "alchemy/Stack";
|
|
20
21
|
import { createDeploymentClient, createManagementClient } from "@convex-dev/platform";
|
|
21
22
|
import * as Schedule from "effect/Schedule";
|
|
22
23
|
import { createHash } from "node:crypto";
|
|
@@ -29,6 +30,31 @@ import { execFile } from "node:child_process";
|
|
|
29
30
|
import { fileURLToPath } from "node:url";
|
|
30
31
|
import * as Scope from "effect/Scope";
|
|
31
32
|
import { STATE_STORE_VERSION, State, StateStoreError, encodeState, reviveState } from "alchemy/State";
|
|
33
|
+
//#region src/Component.ts
|
|
34
|
+
/**
|
|
35
|
+
* Associate a native namespace with an installed component. `component` is the
|
|
36
|
+
* installed name from the app's `convex.config.ts`; a nested install joins the
|
|
37
|
+
* names with slashes, such as `"workspace/mail"`. An undefined namespace
|
|
38
|
+
* associates the stack root. This records display metadata; it does not install
|
|
39
|
+
* the component, set its environment, or change removal policies.
|
|
40
|
+
*/
|
|
41
|
+
const bindComponent = (options) => Effect.gen(function* () {
|
|
42
|
+
if (options.component === "") return yield* Effect.die(/* @__PURE__ */ new Error("The component name is empty."));
|
|
43
|
+
const namespace = toPath(options.namespace);
|
|
44
|
+
const sid = `convex.component:${JSON.stringify(namespace)}`;
|
|
45
|
+
const previous = (yield* Stack).bindings[options.deployment.FQN]?.find((binding) => binding.sid === sid);
|
|
46
|
+
if (previous !== void 0) {
|
|
47
|
+
const existing = Schema.decodeUnknownSync(Schema.Struct({ path: Schema.String }))(previous.data);
|
|
48
|
+
if (existing.path !== options.component) return yield* Effect.die(/* @__PURE__ */ new Error(`Alchemy namespace ${JSON.stringify(namespace)} is already bound to ${existing.path}.`));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
yield* options.deployment.bind(sid, {
|
|
52
|
+
type: "component",
|
|
53
|
+
path: options.component,
|
|
54
|
+
namespace
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//#endregion
|
|
32
58
|
//#region src/Credentials.ts
|
|
33
59
|
var Credentials = class extends Context.Service()("@samebase/alchemy-convex/Credentials") {};
|
|
34
60
|
/** Environment variable for the access token, read by {@link fromConfig}. */
|
|
@@ -898,15 +924,34 @@ const DeploymentProvider = () => Provider.effect(DeploymentResource, Effect.gen(
|
|
|
898
924
|
"type",
|
|
899
925
|
"previewName"
|
|
900
926
|
],
|
|
901
|
-
diff: Effect.fn(function* ({ news, olds, output }) {
|
|
927
|
+
diff: Effect.fn(function* ({ news, olds, output, oldBindings, newBindings }) {
|
|
902
928
|
if (!isResolved(news) || output === void 0) return void 0;
|
|
903
929
|
yield* checkIdentity(output, news);
|
|
930
|
+
if (!isResolved(newBindings)) return void 0;
|
|
904
931
|
const rootDir = news.rootDir ?? ".";
|
|
905
932
|
if (news.source !== void 0) yield* checkSource(rootDir, news.source);
|
|
906
933
|
if (olds.rootDir !== rootDir) return { action: "update" };
|
|
907
934
|
const access = yield* accessFor(addressOf(news), changesEnv(news, output));
|
|
908
|
-
|
|
909
|
-
|
|
935
|
+
const current = yield* live(access, output);
|
|
936
|
+
if (current?.name !== output.name) return { action: "update" };
|
|
937
|
+
if ((yield* wantedHash(news, rootDir, output.name)) !== output.hash) return { action: "update" };
|
|
938
|
+
if (diffBindings(oldBindings, newBindings).every((binding) => binding.action === "noop")) return { action: "noop" };
|
|
939
|
+
return {
|
|
940
|
+
action: "update",
|
|
941
|
+
stables: [
|
|
942
|
+
"hash",
|
|
943
|
+
"envNames",
|
|
944
|
+
...[
|
|
945
|
+
"projectId",
|
|
946
|
+
"type",
|
|
947
|
+
"previewName",
|
|
948
|
+
"name",
|
|
949
|
+
"reference",
|
|
950
|
+
"url",
|
|
951
|
+
"siteUrl"
|
|
952
|
+
].filter((key) => current[key] === output[key])
|
|
953
|
+
]
|
|
954
|
+
};
|
|
910
955
|
}),
|
|
911
956
|
read: Effect.fn(function* ({ olds, output }) {
|
|
912
957
|
if (output !== void 0) {
|
|
@@ -1769,6 +1814,6 @@ const state = (options = {}) => Layer.effect(State, Effect.gen(function* () {
|
|
|
1769
1814
|
}).pipe(Effect.provideContext(context), Effect.orDie));
|
|
1770
1815
|
}));
|
|
1771
1816
|
//#endregion
|
|
1772
|
-
export { ACCESS_TOKEN_ENV, AbsoluteRootDir, AmbiguousDeployment, AmbiguousProject, CodePushFailed, ConvexApiError, ConvexAppNotFound, ConvexCliNotFound, CreatedProjectNotFound, Credentials, CredentialsError, DEPLOY_KEY_ENV, Deployment, DeploymentIdentityChange, EnvironmentNeedsDeployKey, ManagementApi, ProductionDeploymentNotFound, Project, ProjectDeploymentChange, ProjectNotFound, ProjectTeamChange, Providers, PushTargetMismatch, RUN_RECORD_KEY, RunRecordError, STORE_PROJECT_NAME, VariablesOwnedBySomeoneElse, fromConfig, fromValues, parseDeployOutput, providers, runRecord, state, withRunRecord };
|
|
1817
|
+
export { ACCESS_TOKEN_ENV, AbsoluteRootDir, AmbiguousDeployment, AmbiguousProject, CodePushFailed, ConvexApiError, ConvexAppNotFound, ConvexCliNotFound, CreatedProjectNotFound, Credentials, CredentialsError, DEPLOY_KEY_ENV, Deployment, DeploymentIdentityChange, EnvironmentNeedsDeployKey, ManagementApi, ProductionDeploymentNotFound, Project, ProjectDeploymentChange, ProjectNotFound, ProjectTeamChange, Providers, PushTargetMismatch, RUN_RECORD_KEY, RunRecordError, STORE_PROJECT_NAME, VariablesOwnedBySomeoneElse, bindComponent, fromConfig, fromValues, parseDeployOutput, providers, runRecord, state, withRunRecord };
|
|
1773
1818
|
|
|
1774
1819
|
//# sourceMappingURL=index.js.map
|