@passlock/cli 2.0.0-beta.2 → 2.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +10 -11
- package/dist/init.js.map +1 -1
- package/package.json +17 -19
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command, Options } from "@effect/cli";
|
|
3
3
|
import { HttpClient, HttpClientRequest } from "@effect/platform";
|
|
4
|
-
import { NodeContext, NodeHttpClient, NodeRuntime
|
|
4
|
+
import { NodeContext, NodeHttpClient, NodeRuntime } from "@effect/platform-node";
|
|
5
5
|
import { Console, Effect, Layer, pipe } from "effect";
|
|
6
6
|
import { init } from "./init.js";
|
|
7
7
|
// prepend the correct endpoint
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,+BAA+B;AAC/B,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,EAAE,CACrC,IAAI,CACF,UAAU,CAAC,UAAU,EACrB,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EACzE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CACpC,CAAA;AAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;KACtC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KAC5B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC;KACtD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC,CAAA;AAExD,MAAM,OAAO,GAAG,IAAI,CAClB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAClD,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAChD,EACD,OAAO,CAAC,eAAe,CAAC,qCAAqC,CAAC,CAC/D,CAAA;AAED,MAAM,OAAO,GAAG,IAAI,CAClB,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,CAChC,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAC5E,EACD,OAAO,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAC9C,CAAA;AAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAEjE,6BAA6B;AAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE;IAC/B,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,gBAAgB;CAC1B,CAAC,CAAA;AAEF,sCAAsC;AACtC,IAAI,CACF,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EACjB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,EACpC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EACjC,WAAW,CAAC,OAAO,CACpB,CAAA","sourcesContent":["#!/usr/bin/env node\n\nimport { Command, Options } from \"@effect/cli\"\nimport { HttpClient, HttpClientRequest } from \"@effect/platform\"\nimport { NodeContext, NodeHttpClient, NodeRuntime } from \"@effect/platform-node\"\nimport { Console, Effect, Layer, pipe } from \"effect\"\nimport { init } from \"./init.js\"\n\n// prepend the correct endpoint\nconst mapClient = (endpoint: string) =>\n pipe(\n HttpClient.HttpClient,\n Effect.map(HttpClient.mapRequest(HttpClientRequest.prependUrl(endpoint))),\n Layer.effect(HttpClient.HttpClient)\n )\n\nconst endpoint = Options.text(\"endpoint\")\n .pipe(Options.withAlias(\"e\"))\n .pipe(Options.withDescription(\"Passlock API endpoint\"))\n .pipe(Options.withDefault(\"https://api.passlock.dev\"))\n\nconst initCmd = pipe(\n Command.make(\"init\", { endpoint }, ({ endpoint }) =>\n pipe(init, Effect.provide(mapClient(endpoint)))\n ),\n Command.withDescription(\"Setup a new Passlock cloud instance\")\n)\n\nconst mainCmd = pipe(\n Command.make(\"passlock\", {}, () =>\n Console.log(\"Passlock CLI tools\\nRun with --help for commands and options\")\n ),\n Command.withDescription(\"Passlock CLI tools\")\n)\n\nconst command = pipe(mainCmd, Command.withSubcommands([initCmd]))\n\n// Set up the CLI application\nconst cli = Command.run(command, {\n name: \"Passlock CLI tools\",\n version: \"v2.0.0.alpha.1\",\n})\n\n// Prepare and run the CLI application\npipe(\n cli(process.argv),\n Effect.provide(NodeHttpClient.layer),\n Effect.provide(NodeContext.layer),\n NodeRuntime.runMain\n)\n"]}
|
package/dist/init.d.ts
CHANGED
|
@@ -21,8 +21,8 @@ declare const DuplicateEmail_base: Schema.TaggedErrorClass<DuplicateEmail, "@err
|
|
|
21
21
|
export declare class DuplicateEmail extends DuplicateEmail_base {
|
|
22
22
|
}
|
|
23
23
|
export declare const TenancyData: Schema.TaggedStruct<"TenancyData", {
|
|
24
|
-
tenancyId: typeof Schema.String;
|
|
25
24
|
apiKey: typeof Schema.String;
|
|
25
|
+
tenancyId: typeof Schema.String;
|
|
26
26
|
}>;
|
|
27
27
|
export type TenancyData = typeof TenancyData.Type;
|
|
28
28
|
export declare const signup: (payload: SignupPayload) => Effect.Effect<TenancyData, InvalidEmail | DuplicateEmail, HttpClient.HttpClient>;
|
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,UAAU,EAAsB,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EAAQ,MAAM,EAAe,MAAM,EAAE,MAAM,QAAQ,CAAA;AAO1D,QAAA,MAAM,aAAa;;;;EAIjB,CAAA;AAEF,KAAK,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;;;;;;AAE9C,qBAAa,YAAa,SAAQ,iBAGjC;CAAG;;;;;;AAEJ,qBAAa,cAAe,SAAQ,mBAGnC;CAAG;AAEJ,eAAO,MAAM,WAAW;;;EAGtB,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;AAyDjD,eAAO,MAAM,MAAM,GACjB,SAAS,aAAa,KACrB,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,GAAG,cAAc,EAAE,UAAU,CAAC,UAAU,CA+B/E,CAAA;AAEH,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CA+ClE,CAAA"}
|
package/dist/init.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { confirm, intro, isCancel, log, outro, spinner, text
|
|
2
|
-
import kleur from "kleur";
|
|
1
|
+
import { confirm, intro, isCancel, log, outro, spinner, text } from "@clack/prompts";
|
|
3
2
|
import { HttpBody, HttpClient, HttpClientResponse } from "@effect/platform";
|
|
4
3
|
import { Data, Effect, Match, pipe, Schema } from "effect";
|
|
4
|
+
import kleur from "kleur";
|
|
5
5
|
class CancelError extends Data.TaggedError("@error/Abort") {
|
|
6
6
|
}
|
|
7
7
|
const emailRegex = /^[^@]+@[^@]+.[^@]+$/;
|
|
@@ -15,8 +15,8 @@ export class InvalidEmail extends Schema.TaggedError("@error/InvalidEmail")("@er
|
|
|
15
15
|
export class DuplicateEmail extends Schema.TaggedError("@error/DuplicateEmail")("@error/DuplicateEmail", { message: Schema.String }) {
|
|
16
16
|
}
|
|
17
17
|
export const TenancyData = Schema.TaggedStruct("TenancyData", {
|
|
18
|
-
tenancyId: Schema.String,
|
|
19
18
|
apiKey: Schema.String,
|
|
19
|
+
tenancyId: Schema.String,
|
|
20
20
|
});
|
|
21
21
|
const captureData = Effect.gen(function* () {
|
|
22
22
|
const email = yield* Effect.promise(() => text({
|
|
@@ -80,20 +80,19 @@ export const init = pipe(Effect.gen(function* () {
|
|
|
80
80
|
const { tenancyId, apiKey } = yield* pipe(signup(signupData), Effect.tapError(() => Effect.sync(() => {
|
|
81
81
|
s.stop("Something went wrong", 1);
|
|
82
82
|
})));
|
|
83
|
-
s.stop("Instance ready");
|
|
84
|
-
log.success("Here are your instance credentials
|
|
85
|
-
log.message(`Tenancy ID: ${kleur.
|
|
86
|
-
|
|
87
|
-
log.message("
|
|
88
|
-
"https://passlock.dev/getting-started/");
|
|
83
|
+
s.stop("Instance ready 🎉");
|
|
84
|
+
log.success("Here are your development instance credentials.\nPlease keep them secure:");
|
|
85
|
+
log.message(`Tenancy ID: ${kleur.green(tenancyId)}\n` + `API Key: ${kleur.green(apiKey)}`);
|
|
86
|
+
log.message(`Login to your Passlock console at\n${kleur.blue().underline("https://console.passlock.dev")}`);
|
|
87
|
+
log.message("Check out the quick start guide at\n" +
|
|
88
|
+
kleur.blue().underline("https://passlock.dev/getting-started/"));
|
|
89
89
|
outro("You're all set!");
|
|
90
90
|
}), Effect.catchTags({
|
|
91
91
|
"@error/Abort": () => Effect.sync(() => {
|
|
92
92
|
log.error("Operation cancelled");
|
|
93
93
|
}),
|
|
94
94
|
"@error/DuplicateEmail": () => Effect.sync(() => {
|
|
95
|
-
log.error("Email already registered\n" +
|
|
96
|
-
"Sign in at https://console.passlock.dev");
|
|
95
|
+
log.error("Email already registered\n" + "Sign in at https://console.passlock.dev");
|
|
97
96
|
}),
|
|
98
97
|
"@error/InvalidEmail": () => Effect.sync(() => {
|
|
99
98
|
log.error("Invalid email address");
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n confirm,\n intro,\n isCancel,\n log,\n outro,\n spinner,\n text,\n} from \"@clack/prompts\";\n\nimport kleur from \"kleur\";\n\nimport { HttpBody, HttpClient, HttpClientResponse } from \"@effect/platform\";\nimport { Data, Effect, Match, pipe, Schema } from \"effect\";\n\nclass CancelError extends Data.TaggedError(\"@error/Abort\")<object> {}\n\nconst emailRegex = /^[^@]+@[^@]+.[^@]+$/;\n\nconst SignupPayload = Schema.Struct({\n email: Schema.String,\n firstName: Schema.String,\n lastName: Schema.String,\n});\n\ntype SignupPayload = typeof SignupPayload.Type;\n\nexport class InvalidEmail extends Schema.TaggedError<InvalidEmail>(\n \"@error/InvalidEmail\",\n)(\"@error/InvalidEmail\", { message: Schema.String }) {}\n\nexport class DuplicateEmail extends Schema.TaggedError<DuplicateEmail>(\n \"@error/DuplicateEmail\",\n)(\"@error/DuplicateEmail\", { message: Schema.String }) {}\n\nexport const TenancyData = Schema.TaggedStruct(\"TenancyData\", {\n tenancyId: Schema.String,\n apiKey: Schema.String,\n});\n\nexport type TenancyData = typeof TenancyData.Type;\n\nconst captureData: Effect.Effect<SignupPayload, CancelError> = Effect.gen(\n function* () {\n const email = yield* Effect.promise(() =>\n text({\n message:\n \"Root account email? (we'll send a single use code to this address)\",\n\n placeholder: \"jdoe@gmail.com\",\n\n validate(value) {\n if (value.length === 0) return `Value is required!`;\n if (!emailRegex.test(value))\n return `Please provide a valid email address!`;\n },\n }),\n );\n\n if (isCancel(email)) return yield* new CancelError({});\n\n const firstName = yield* Effect.promise(() =>\n text({\n message: \"Your first/given name\",\n\n placeholder: \"John\",\n\n validate(value) {\n if (value.length === 0) return `Value is required!`;\n },\n }),\n );\n\n if (isCancel(firstName)) return yield* new CancelError({});\n\n const lastName = yield* Effect.promise(() =>\n text({\n message: \"Your last/family name\",\n\n placeholder: \"Doe\",\n\n validate(value) {\n if (value.length === 0) return `Value is required!`;\n },\n }),\n );\n\n if (isCancel(lastName)) return yield* new CancelError({});\n\n const isConfirmed = yield* Effect.promise(() =>\n confirm({\n message: `Using ${firstName} ${lastName} <${email}>, continue?`,\n }),\n );\n\n if (isCancel(isConfirmed)) return yield* new CancelError({});\n\n return isConfirmed ? { email, firstName, lastName } : yield* captureData;\n },\n);\n\nexport const signup = (\n payload: SignupPayload,\n): Effect.Effect<\n TenancyData,\n InvalidEmail | DuplicateEmail,\n HttpClient.HttpClient\n> =>\n pipe(\n Effect.gen(function* () {\n const client = yield* HttpClient.HttpClient;\n const encodedPayload = yield* HttpBody.json(payload);\n\n const response = yield* pipe(\n // endpoint will be prepended by the HttpClient\n client.post(\"/signup\", {\n body: encodedPayload,\n }),\n );\n\n const encoded = yield* HttpClientResponse.matchStatus(response, {\n \"2xx\": () => HttpClientResponse.schemaBodyJson(TenancyData)(response),\n orElse: () =>\n HttpClientResponse.schemaBodyJson(\n Schema.Union(InvalidEmail, DuplicateEmail),\n )(response),\n });\n\n return yield* pipe(\n Match.value(encoded),\n Match.tag(\"TenancyData\", (principal) => Effect.succeed(principal)),\n Match.tag(\"@error/InvalidEmail\", (err) => Effect.fail(err)),\n Match.tag(\"@error/DuplicateEmail\", (err) => Effect.fail(err)),\n Match.exhaustive,\n );\n }),\n Effect.catchTag(\"HttpBodyError\", Effect.die),\n Effect.catchTag(\"ParseError\", Effect.die),\n Effect.catchTag(\"RequestError\", Effect.die),\n Effect.catchTag(\"ResponseError\", Effect.die),\n );\n\nexport const init: Effect.Effect<void, never, HttpClient.HttpClient> = pipe(\n Effect.gen(function* () {\n intro(`Setting up new Passlock cloud instance...`);\n\n const signupData = yield* captureData;\n const s = spinner();\n s.start(\"Setting up instance\");\n\n const { tenancyId, apiKey } = yield* pipe(\n signup(signupData),\n Effect.tapError(() =>\n Effect.sync(() => {\n s.stop(\"Something went wrong\", 1);\n }),\n ),\n );\n s.stop(\"Instance ready\");\n\n log.success(\"Here are your instance credentials\\nPlease keep them secure\");\n\n log.message(\n `Tenancy ID: ${kleur.blue(tenancyId)}\\n` +\n `API Key: ${kleur.blue(apiKey)}`,\n );\n\n log.message(\n \"Please refer to the quick start at\\n\" +\n \"https://passlock.dev/getting-started/\",\n );\n\n outro(\"You're all set!\");\n }),\n Effect.catchTags({\n \"@error/Abort\": () =>\n Effect.sync(() => {\n log.error(\"Operation cancelled\");\n }),\n \"@error/DuplicateEmail\": () =>\n Effect.sync(() => {\n log.error(\n \"Email already registered\\n\" +\n \"Sign in at https://console.passlock.dev\",\n );\n }),\n \"@error/InvalidEmail\": () =>\n Effect.sync(() => {\n log.error(\"Invalid email address\");\n }),\n }),\n);\n"]}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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","sourcesContent":["import { confirm, intro, isCancel, log, outro, spinner, text } from \"@clack/prompts\"\nimport { HttpBody, HttpClient, HttpClientResponse } from \"@effect/platform\"\nimport { Data, Effect, Match, pipe, Schema } from \"effect\"\nimport kleur from \"kleur\"\n\nclass CancelError extends Data.TaggedError(\"@error/Abort\")<object> {}\n\nconst emailRegex = /^[^@]+@[^@]+.[^@]+$/\n\nconst SignupPayload = Schema.Struct({\n email: Schema.String,\n firstName: Schema.String,\n lastName: Schema.String,\n})\n\ntype SignupPayload = typeof SignupPayload.Type\n\nexport class InvalidEmail extends Schema.TaggedError<InvalidEmail>(\"@error/InvalidEmail\")(\n \"@error/InvalidEmail\",\n { message: Schema.String }\n) {}\n\nexport class DuplicateEmail extends Schema.TaggedError<DuplicateEmail>(\"@error/DuplicateEmail\")(\n \"@error/DuplicateEmail\",\n { message: Schema.String }\n) {}\n\nexport const TenancyData = Schema.TaggedStruct(\"TenancyData\", {\n apiKey: Schema.String,\n tenancyId: Schema.String,\n})\n\nexport type TenancyData = typeof TenancyData.Type\n\nconst captureData: Effect.Effect<SignupPayload, CancelError> = Effect.gen(function* () {\n const email = yield* Effect.promise(() =>\n text({\n message: \"Root account email? (we'll send a single use code to this address)\",\n\n placeholder: \"jdoe@gmail.com\",\n\n validate(value) {\n if (value.length === 0) return `Value is required!`\n if (!emailRegex.test(value)) return `Please provide a valid email address!`\n },\n })\n )\n\n if (isCancel(email)) return yield* new CancelError({})\n\n const firstName = yield* Effect.promise(() =>\n text({\n message: \"Your first/given name\",\n\n placeholder: \"John\",\n\n validate(value) {\n if (value.length === 0) return `Value is required!`\n },\n })\n )\n\n if (isCancel(firstName)) return yield* new CancelError({})\n\n const lastName = yield* Effect.promise(() =>\n text({\n message: \"Your last/family name\",\n\n placeholder: \"Doe\",\n\n validate(value) {\n if (value.length === 0) return `Value is required!`\n },\n })\n )\n\n if (isCancel(lastName)) return yield* new CancelError({})\n\n const isConfirmed = yield* Effect.promise(() =>\n confirm({\n message: `Using ${firstName} ${lastName} <${email}>, continue?`,\n })\n )\n\n if (isCancel(isConfirmed)) return yield* new CancelError({})\n\n return isConfirmed ? { email, firstName, lastName } : yield* captureData\n})\n\nexport const signup = (\n payload: SignupPayload\n): Effect.Effect<TenancyData, InvalidEmail | DuplicateEmail, HttpClient.HttpClient> =>\n pipe(\n Effect.gen(function* () {\n const client = yield* HttpClient.HttpClient\n const encodedPayload = yield* HttpBody.json(payload)\n\n const response = yield* pipe(\n // endpoint will be prepended by the HttpClient\n client.post(\"/signup\", {\n body: encodedPayload,\n })\n )\n\n const encoded = yield* HttpClientResponse.matchStatus(response, {\n \"2xx\": () => HttpClientResponse.schemaBodyJson(TenancyData)(response),\n orElse: () =>\n HttpClientResponse.schemaBodyJson(Schema.Union(InvalidEmail, DuplicateEmail))(response),\n })\n\n return yield* pipe(\n Match.value(encoded),\n Match.tag(\"TenancyData\", (principal) => Effect.succeed(principal)),\n Match.tag(\"@error/InvalidEmail\", (err) => Effect.fail(err)),\n Match.tag(\"@error/DuplicateEmail\", (err) => Effect.fail(err)),\n Match.exhaustive\n )\n }),\n Effect.catchTag(\"HttpBodyError\", Effect.die),\n Effect.catchTag(\"ParseError\", Effect.die),\n Effect.catchTag(\"RequestError\", Effect.die),\n Effect.catchTag(\"ResponseError\", Effect.die)\n )\n\nexport const init: Effect.Effect<void, never, HttpClient.HttpClient> = pipe(\n Effect.gen(function* () {\n intro(`Setting up new Passlock cloud instance...`)\n\n const signupData = yield* captureData\n const s = spinner()\n s.start(\"Setting up instance\")\n\n const { tenancyId, apiKey } = yield* pipe(\n signup(signupData),\n Effect.tapError(() =>\n Effect.sync(() => {\n s.stop(\"Something went wrong\", 1)\n })\n )\n )\n s.stop(\"Instance ready 🎉\")\n\n log.success(\"Here are your development instance credentials.\\nPlease keep them secure:\")\n\n log.message(`Tenancy ID: ${kleur.green(tenancyId)}\\n` + `API Key: ${kleur.green(apiKey)}`)\n\n log.message(\n `Login to your Passlock console at\\n${kleur.blue().underline(\"https://console.passlock.dev\")}`\n )\n\n log.message(\n \"Check out the quick start guide at\\n\" +\n kleur.blue().underline(\"https://passlock.dev/getting-started/\")\n )\n\n outro(\"You're all set!\")\n }),\n Effect.catchTags({\n \"@error/Abort\": () =>\n Effect.sync(() => {\n log.error(\"Operation cancelled\")\n }),\n \"@error/DuplicateEmail\": () =>\n Effect.sync(() => {\n log.error(\"Email already registered\\n\" + \"Sign in at https://console.passlock.dev\")\n }),\n \"@error/InvalidEmail\": () =>\n Effect.sync(() => {\n log.error(\"Invalid email address\")\n }),\n })\n)\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@passlock/cli",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.3",
|
|
4
4
|
"description": "CLI tooling support for the Passlock authentication framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"passkey",
|
|
@@ -43,25 +43,21 @@
|
|
|
43
43
|
],
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@clack/prompts": "^0.11.0",
|
|
46
|
-
"@effect/cli": "^0.
|
|
47
|
-
"@effect/platform": "^0.
|
|
48
|
-
"@effect/platform-node": "^0.
|
|
49
|
-
"effect": "3.19.
|
|
46
|
+
"@effect/cli": "^0.73.0",
|
|
47
|
+
"@effect/platform": "^0.94.1",
|
|
48
|
+
"@effect/platform-node": "^0.104.0",
|
|
49
|
+
"effect": "3.19.14",
|
|
50
50
|
"kleur": "^4.1.5"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@
|
|
54
|
-
"@
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"npm-check-updates": "^19.1.2",
|
|
59
|
-
"prettier": "^3.7.4",
|
|
60
|
-
"publint": "0.3.15",
|
|
53
|
+
"@types/node": "25.0.3",
|
|
54
|
+
"@biomejs/biome": "^2.3.10",
|
|
55
|
+
"globals": "^17.0.0",
|
|
56
|
+
"npm-check-updates": "^19.2.1",
|
|
57
|
+
"publint": "0.3.16",
|
|
61
58
|
"rimraf": "^6.1.2",
|
|
62
59
|
"tsx": "4.21.0",
|
|
63
|
-
"typescript": "^5.9.3"
|
|
64
|
-
"typescript-eslint": "^8.49.0"
|
|
60
|
+
"typescript": "^5.9.3"
|
|
65
61
|
},
|
|
66
62
|
"engines": {
|
|
67
63
|
"node": ">=22"
|
|
@@ -73,14 +69,16 @@
|
|
|
73
69
|
"build:readme": "LATEST=${npm_package_version} tsx ../../scripts/replace-readme-tokens.ts ./packages/cli",
|
|
74
70
|
"clean": "tsc --build --clean",
|
|
75
71
|
"clean:full": "rimraf dist tsconfig.tsbuildinfo",
|
|
76
|
-
"format": "prettier --write \"src/**/*.+(js|ts|json)\"",
|
|
77
|
-
"lint": "prettier --check \"src/**/*.+(js|ts|json)\" && eslint ./src",
|
|
78
|
-
"lint:fix": "prettier --check \"src/**/*.+(js|ts|json)\" && eslint ./src --fix",
|
|
79
72
|
"replaceTokens": "LATEST=${npm_package_version} tsx ../../scripts/replace-tokens.ts ./packages/cli",
|
|
80
73
|
"test": "vitest run",
|
|
81
74
|
"test:coverage": "vitest run --coverage",
|
|
82
75
|
"test:ui": "vitest --coverage.enabled=true --ui",
|
|
83
76
|
"test:watch": "vitest dev",
|
|
84
|
-
"typecheck": "tsc --noEmit"
|
|
77
|
+
"typecheck": "tsc --noEmit",
|
|
78
|
+
"lint": "biome check .",
|
|
79
|
+
"lint:fix": "biome check --fix .",
|
|
80
|
+
"lint:ci": "biome ci .",
|
|
81
|
+
"format": "biome format --fix .",
|
|
82
|
+
"format:check": "biome format ."
|
|
85
83
|
}
|
|
86
84
|
}
|