@graftland/cli 0.4.1 → 0.4.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/Manage.d.ts +4 -3
- package/dist/Manage.d.ts.map +1 -1
- package/dist/Manage.js +18 -0
- package/dist/Manage.js.map +1 -1
- package/dist/Start.d.ts +6 -0
- package/dist/Start.d.ts.map +1 -1
- package/dist/Start.js +8 -3
- package/dist/Start.js.map +1 -1
- package/dist/bin.js +9 -4
- package/dist/bin.js.map +1 -1
- package/dist/internal/commandHost.js +1 -1
- package/dist/internal/env.js +71 -26
- package/dist/internal/env.js.map +1 -1
- package/dist/internal/schemaFile.js +115 -0
- package/dist/internal/schemaFile.js.map +1 -0
- package/dist/internal/schemaFileName.js +6 -0
- package/dist/internal/schemaFileName.js.map +1 -0
- package/package.json +6 -6
- package/schema.json +0 -2321
- package/src/Manage.ts +26 -0
- package/src/Start.ts +22 -3
- package/src/bin.ts +29 -1
- package/src/internal/env.ts +175 -46
- package/src/internal/schemaFile.ts +186 -0
- package/src/internal/schemaFileName.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaFile.js","names":["Importer.make"],"sources":["../../src/internal/schemaFile.ts"],"sourcesContent":["/** Composes the editor schema of a project's config file from its installed plugins. */\nimport {\n\tArray,\n\tEffect,\n\tFileSystem,\n\tOption,\n\tPath,\n\tPredicate,\n\tRecord,\n\tSchema,\n\ttype PlatformError,\n} from \"effect\"\n\nimport { make } from \"./configSchema\"\nimport * as Importer from \"./importer\"\n\n/** A dependency's `./schema` export could not be read. */\nexport class SchemaRegistrationError extends Schema.TaggedError<\n\tSchemaRegistrationError,\n\t{ readonly brand: unique symbol }\n>()(\"SchemaRegistrationError\", {\n\tpackageName: Schema.String,\n\tdetail: Schema.String,\n\tcause: Schema.optionalKey(Schema.Unknown),\n}) {\n\toverride get message() {\n\t\treturn `${this.packageName}/schema: ${this.detail}`\n\t}\n}\n\nconst Dependencies = Schema.optionalKey(\n\tSchema.Record(Schema.String, Schema.String),\n)\nconst ProjectManifest = Schema.fromJsonString(\n\tSchema.Struct({\n\t\tdependencies: Dependencies,\n\t\tdevDependencies: Dependencies,\n\t\toptionalDependencies: Dependencies,\n\t}),\n)\nconst InstalledManifest = Schema.fromJsonString(\n\tSchema.Struct({\n\t\texports: Schema.optionalKey(Schema.Unknown),\n\t\tdependencies: Dependencies,\n\t\tpeerDependencies: Dependencies,\n\t}),\n)\nconst Registrations = Schema.Array(\n\tSchema.Struct({\n\t\tnames: Schema.Array(Schema.String),\n\t\tschema: Schema.Record(Schema.String, Schema.Unknown),\n\t\trequired: Schema.optionalKey(Schema.Boolean),\n\t}),\n)\n\n/**\n * The manifest of an installed package, looked up as Node does: in\n * `node_modules` of the directory and then of each parent, so hoisted\n * workspace installs are found.\n */\nconst installedManifest = (\n\tdirectory: string,\n\tpackageName: string,\n): Effect.Effect<\n\tOption.Option<string>,\n\tPlatformError.PlatformError,\n\tFileSystem.FileSystem | Path.Path\n> =>\n\tEffect.gen(function* () {\n\t\tconst fs = yield* FileSystem.FileSystem\n\t\tconst path = yield* Path.Path\n\t\tconst file = path.join(\n\t\t\tdirectory,\n\t\t\t\"node_modules\",\n\t\t\tpackageName,\n\t\t\t\"package.json\",\n\t\t)\n\t\tif (yield* fs.exists(file)) return Option.some(file)\n\t\tconst parent = path.dirname(directory)\n\t\treturn parent === directory\n\t\t\t? Option.none()\n\t\t\t: yield* installedManifest(parent, packageName)\n\t})\n\n/**\n * Whether an installed dependency is a plugin package that exports `./schema`,\n * read without importing it. Other packages, such as `effect`, may export a\n * `./schema` of their own.\n */\nconst exportsSchema = Effect.fnUntraced(function* (\n\tdirectory: string,\n\tpackageName: string,\n) {\n\tconst fs = yield* FileSystem.FileSystem\n\tconst file = yield* installedManifest(directory, packageName)\n\tif (Option.isNone(file)) {\n\t\tyield* Effect.logWarning(\n\t\t\t`${packageName} is not installed; its config is left open`,\n\t\t)\n\t\treturn false\n\t}\n\tconst text = yield* fs.readFileString(file.value)\n\tconst manifest = yield* Schema.decodeEffect(InstalledManifest)(text)\n\treturn (\n\t\tPredicate.hasProperty(manifest.exports, \"./schema\") &&\n\t\t(Record.has(manifest.dependencies ?? {}, \"@graftland/graft\") ||\n\t\t\tRecord.has(manifest.peerDependencies ?? {}, \"@graftland/graft\"))\n\t)\n})\n\nconst load = Effect.fnUntraced(function* (\n\timporter: (specifier: string) => Promise<unknown>,\n\tpackageName: string,\n) {\n\tconst failed = (detail: string) => (cause: unknown) =>\n\t\tSchemaRegistrationError.make({ packageName, detail, cause })\n\tconst module = yield* Effect.tryPromise({\n\t\ttry: () => importer(`${packageName}/schema`),\n\t\tcatch: failed(\"cannot be imported\"),\n\t})\n\tif (\n\t\t!Predicate.hasProperty(module, \"entries\") ||\n\t\t!Predicate.isFunction(module.entries)\n\t)\n\t\treturn yield* SchemaRegistrationError.make({\n\t\t\tpackageName,\n\t\t\tdetail: \"does not export an entries function\",\n\t\t})\n\tconst entries = module.entries\n\tconst value = yield* Effect.try({\n\t\ttry: () => entries(),\n\t\tcatch: failed(\"entries() threw\"),\n\t})\n\treturn yield* Schema.decodeUnknownEffect(Registrations)(value).pipe(\n\t\tEffect.mapError(failed(\"entries() returned invalid registrations\")),\n\t)\n})\n\n/**\n * The registrations exported as `./schema` by the dependencies in the\n * project's package.json. Only these modules are imported, never the plugins.\n */\nexport const registrations = Effect.fn(\"EditorSchema.registrations\")(function* (\n\tdirectory: string,\n) {\n\tconst fs = yield* FileSystem.FileSystem\n\tconst path = yield* Path.Path\n\tconst text = yield* fs.readFileString(path.join(directory, \"package.json\"))\n\tconst manifest = yield* Schema.decodeEffect(ProjectManifest)(text)\n\tconst names = Array.dedupe(\n\t\tArray.flatMap(\n\t\t\t[\n\t\t\t\tmanifest.dependencies,\n\t\t\t\tmanifest.devDependencies,\n\t\t\t\tmanifest.optionalDependencies,\n\t\t\t],\n\t\t\t(dependencies) => Record.keys(dependencies ?? {}),\n\t\t),\n\t)\n\tconst plugins = yield* Effect.filter(names, (name) =>\n\t\texportsSchema(directory, name),\n\t)\n\tconst importer = yield* Importer.make(directory)\n\tconst loaded = yield* Effect.forEach(plugins, (name) => load(importer, name))\n\treturn { plugins, entries: Array.flatten(loaded) }\n}, Effect.scoped)\n\nconst encode = Schema.encodeEffect(\n\tSchema.fromJsonString(Schema.Unknown, { space: \"\\t\" }),\n)\n\n/** Writes the editor schema for the project in a directory. */\nexport const write = Effect.fn(\"EditorSchema.write\")(function* (\n\tdirectory: string,\n\toutput: string,\n) {\n\tconst fs = yield* FileSystem.FileSystem\n\tconst { plugins, entries } = yield* registrations(directory)\n\tconst text = yield* encode(make(entries))\n\tyield* fs.writeFileString(output, text + \"\\n\")\n\tyield* Effect.logInfo(\n\t\tplugins.length === 0\n\t\t\t? `Wrote ${output}; no dependency exports ./schema`\n\t\t\t: `Wrote ${output} with ${Array.join(plugins, \", \")}`,\n\t)\n})\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaFileName.js","names":[],"sources":["../../src/internal/schemaFileName.ts"],"sourcesContent":["/** The editor schema that `graft schema` writes, and that add, remove and create keep current. */\nexport const schemaFileName = \"graft.schema.json\"\n"],"mappings":";;AACA,MAAa,iBAAiB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@graftland/cli",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=22.19.0"
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
"vitest": "5.1.0"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@graftland/graft": "0.4.
|
|
41
|
-
"@graftland/loader": "0.4.
|
|
42
|
-
"@graftland/hmr": "0.4.
|
|
43
|
-
"@graftland/create": "0.4.
|
|
44
|
-
"@graftland/package-manager": "0.4.
|
|
40
|
+
"@graftland/graft": "0.4.3",
|
|
41
|
+
"@graftland/loader": "0.4.3",
|
|
42
|
+
"@graftland/hmr": "0.4.3",
|
|
43
|
+
"@graftland/create": "0.4.3",
|
|
44
|
+
"@graftland/package-manager": "0.4.3",
|
|
45
45
|
"@effect/platform-node": "4.1.2",
|
|
46
46
|
"yaml": "2.9.1"
|
|
47
47
|
},
|