create-astrale-domain 0.2.0 → 0.2.2
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 +95 -27
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -780,7 +780,7 @@ import { existsSync as existsSync2 } from "node:fs";
|
|
|
780
780
|
import { delimiter, join as join2, relative as relative2, resolve as resolve2 } from "node:path";
|
|
781
781
|
|
|
782
782
|
// src/scaffold.ts
|
|
783
|
-
import { existsSync } from "node:fs";
|
|
783
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
784
784
|
import { cp, readFile, rm, writeFile } from "node:fs/promises";
|
|
785
785
|
import { createRequire } from "node:module";
|
|
786
786
|
import { dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
@@ -804,7 +804,43 @@ var ADAPTER_PACKAGES = {
|
|
|
804
804
|
astrale: "@astrale-os/adapter-astrale",
|
|
805
805
|
cloudflare: "@astrale-os/adapter-cloudflare"
|
|
806
806
|
};
|
|
807
|
-
|
|
807
|
+
function packageJson(pkgName) {
|
|
808
|
+
const rel = LINK_TARGETS[pkgName];
|
|
809
|
+
if (rel) {
|
|
810
|
+
const local = join(WORKSPACE_ROOT, rel, "package.json");
|
|
811
|
+
if (existsSync(local)) return JSON.parse(readFileSync(local, "utf-8"));
|
|
812
|
+
}
|
|
813
|
+
const direct = tryPackageJson(require2, pkgName);
|
|
814
|
+
if (direct) return direct;
|
|
815
|
+
for (const owner of /* @__PURE__ */ new Set([BODY_PACKAGE, ...Object.values(ADAPTER_PACKAGES)])) {
|
|
816
|
+
const ownerPkgPath = tryResolve(`${owner}/package.json`);
|
|
817
|
+
if (!ownerPkgPath) continue;
|
|
818
|
+
const ownerRequire = createRequire(ownerPkgPath);
|
|
819
|
+
const nested = tryPackageJson(ownerRequire, pkgName);
|
|
820
|
+
if (nested) return nested;
|
|
821
|
+
}
|
|
822
|
+
throw new Error(`Could not read ${pkgName} package.json.`);
|
|
823
|
+
}
|
|
824
|
+
function tryResolve(id) {
|
|
825
|
+
try {
|
|
826
|
+
return require2.resolve(id);
|
|
827
|
+
} catch {
|
|
828
|
+
return void 0;
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
function tryPackageJson(req, pkgName) {
|
|
832
|
+
try {
|
|
833
|
+
return req(`${pkgName}/package.json`);
|
|
834
|
+
} catch {
|
|
835
|
+
return void 0;
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
function publishedDepVersion(pkgName) {
|
|
839
|
+
const pkg = packageJson(pkgName);
|
|
840
|
+
const version = pkg.version;
|
|
841
|
+
if (!version) throw new Error(`Could not read ${pkgName} package version.`);
|
|
842
|
+
return version;
|
|
843
|
+
}
|
|
808
844
|
function templateDir(pkg) {
|
|
809
845
|
return join(dirname(require2.resolve(`${pkg}/package.json`)), "template");
|
|
810
846
|
}
|
|
@@ -819,12 +855,15 @@ async function scaffold(opts) {
|
|
|
819
855
|
}
|
|
820
856
|
await cp(src, opts.dir, {
|
|
821
857
|
recursive: true,
|
|
822
|
-
filter: (s) => !/\/(node_modules|\.astrale|dist-client|\.wrangler)(\/|$)/.test(
|
|
858
|
+
filter: (s) => !/\/(node_modules|\.astrale|dist-client|\.wrangler|pnpm-lock\.yaml|\.DS_Store)(\/|$)/.test(
|
|
859
|
+
`/${relative(src, s)}`
|
|
860
|
+
)
|
|
823
861
|
});
|
|
824
862
|
await materializeAdapter(opts);
|
|
825
863
|
await stampOrigin(opts.dir, opts.origin);
|
|
826
864
|
await rewritePackageJson(opts.dir, opts.name, opts.link);
|
|
827
|
-
|
|
865
|
+
await rewriteWorkspaceMember(join(opts.dir, "client", "package.json"), opts.link);
|
|
866
|
+
if (!opts.link) await writeReleaseAgePolicy(opts.dir);
|
|
828
867
|
await writeFile(
|
|
829
868
|
join(opts.dir, ".env.dev"),
|
|
830
869
|
"# Dev secrets \u2014 the ENTIRE file is injected into the local runtime by `pnpm dev`.\n# Gitignored. See .env.example.\n"
|
|
@@ -858,37 +897,24 @@ async function setAdapterDep(dir, from, to) {
|
|
|
858
897
|
const pkg = JSON.parse(await readFile(path, "utf-8"));
|
|
859
898
|
if (!pkg.dependencies || !(from in pkg.dependencies)) return;
|
|
860
899
|
delete pkg.dependencies[from];
|
|
861
|
-
pkg.dependencies[to] =
|
|
900
|
+
pkg.dependencies[to] = publishedDepVersion(to);
|
|
862
901
|
pkg.dependencies = Object.fromEntries(
|
|
863
902
|
Object.entries(pkg.dependencies).sort(([a], [b3]) => a.localeCompare(b3))
|
|
864
903
|
);
|
|
865
904
|
await writeFile(path, JSON.stringify(pkg, null, 2) + "\n");
|
|
866
905
|
}
|
|
867
|
-
async function
|
|
906
|
+
async function rewriteWorkspaceMember(pkgPath, link) {
|
|
868
907
|
if (!existsSync(pkgPath)) return;
|
|
869
908
|
const pkg = JSON.parse(await readFile(pkgPath, "utf-8"));
|
|
870
|
-
|
|
871
|
-
for (const group of [pkg.dependencies, pkg.devDependencies]) {
|
|
872
|
-
if (!group) continue;
|
|
873
|
-
for (const [dep, rel] of Object.entries(LINK_TARGETS)) {
|
|
874
|
-
if (dep in group) {
|
|
875
|
-
group[dep] = `link:${join(WORKSPACE_ROOT, rel)}`;
|
|
876
|
-
changed = true;
|
|
877
|
-
}
|
|
878
|
-
}
|
|
879
|
-
}
|
|
909
|
+
const changed = rewriteAstraleDeps(pkg, link);
|
|
880
910
|
if (changed) await writeFile(pkgPath, JSON.stringify(pkg, null, 2) + "\n");
|
|
881
911
|
}
|
|
882
912
|
async function rewritePackageJson(dir, name, link) {
|
|
883
913
|
const path = join(dir, "package.json");
|
|
884
914
|
const pkg = JSON.parse(await readFile(path, "utf-8"));
|
|
885
915
|
pkg.name = name;
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
if (dep in pkg.dependencies) {
|
|
889
|
-
pkg.dependencies[dep] = `link:${join(WORKSPACE_ROOT, rel)}`;
|
|
890
|
-
}
|
|
891
|
-
}
|
|
916
|
+
rewriteAstraleDeps(pkg, link);
|
|
917
|
+
if (link) {
|
|
892
918
|
pkg.pnpm = {
|
|
893
919
|
...pkg.pnpm,
|
|
894
920
|
overrides: {
|
|
@@ -899,6 +925,50 @@ async function rewritePackageJson(dir, name, link) {
|
|
|
899
925
|
}
|
|
900
926
|
await writeFile(path, JSON.stringify(pkg, null, 2) + "\n");
|
|
901
927
|
}
|
|
928
|
+
function rewriteAstraleDeps(pkg, link) {
|
|
929
|
+
let changed = false;
|
|
930
|
+
for (const group of [pkg.dependencies, pkg.devDependencies]) {
|
|
931
|
+
if (!group) continue;
|
|
932
|
+
for (const dep of Object.keys(group)) {
|
|
933
|
+
if (!dep.startsWith("@astrale-os/")) continue;
|
|
934
|
+
const next = link && LINK_TARGETS[dep] ? `link:${join(WORKSPACE_ROOT, LINK_TARGETS[dep])}` : publishedDepVersion(dep);
|
|
935
|
+
if (group[dep] !== next) {
|
|
936
|
+
group[dep] = next;
|
|
937
|
+
changed = true;
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
return changed;
|
|
942
|
+
}
|
|
943
|
+
async function writeReleaseAgePolicy(dir) {
|
|
944
|
+
const workspace = join(dir, "pnpm-workspace.yaml");
|
|
945
|
+
if (!existsSync(workspace)) return;
|
|
946
|
+
const names = /* @__PURE__ */ new Set();
|
|
947
|
+
for (const pkgPath of [join(dir, "package.json"), join(dir, "client", "package.json")]) {
|
|
948
|
+
if (!existsSync(pkgPath)) continue;
|
|
949
|
+
const pkg = JSON.parse(await readFile(pkgPath, "utf-8"));
|
|
950
|
+
for (const group of [pkg.dependencies, pkg.devDependencies]) {
|
|
951
|
+
for (const [name, spec] of Object.entries(group ?? {})) {
|
|
952
|
+
if (name.startsWith("@astrale-os/") && !spec.startsWith("link:")) names.add(name);
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
if (names.size === 0) return;
|
|
957
|
+
const start = "# create-astrale-domain: exact first-party deps";
|
|
958
|
+
const end = "# /create-astrale-domain";
|
|
959
|
+
const block = `
|
|
960
|
+
${start}
|
|
961
|
+
minimumReleaseAgeExclude:
|
|
962
|
+
` + [...names].sort().map((name) => ` - '${name}'`).join("\n") + `
|
|
963
|
+
${end}
|
|
964
|
+
`;
|
|
965
|
+
const text = await readFile(workspace, "utf-8");
|
|
966
|
+
const pattern = new RegExp(`\\n?${escapeRegExp(start)}[\\s\\S]*?${escapeRegExp(end)}\\n?`);
|
|
967
|
+
await writeFile(workspace, text.replace(pattern, "\n").trimEnd() + block);
|
|
968
|
+
}
|
|
969
|
+
function escapeRegExp(value) {
|
|
970
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
971
|
+
}
|
|
902
972
|
function sdkZodVersion() {
|
|
903
973
|
const sdkRequire = createRequire(join(WORKSPACE_ROOT, "sdk", "package.json"));
|
|
904
974
|
const pkg = sdkRequire("zod/package.json");
|
|
@@ -973,12 +1043,11 @@ export const methods: SchemaMethodsImpl<typeof schema, Deps> = { class: {} }
|
|
|
973
1043
|
await rm(join(dir, "integrations"), { recursive: true, force: true });
|
|
974
1044
|
await rm(join(dir, "views", "welcome.ts"), { force: true });
|
|
975
1045
|
await rm(join(dir, "views", "status-page.ts"), { force: true });
|
|
976
|
-
await rm(join(dir, "runtime", "
|
|
977
|
-
await rm(join(dir, "runtime", "status-page"), { recursive: true, force: true });
|
|
1046
|
+
await rm(join(dir, "runtime", "monitoring"), { recursive: true, force: true });
|
|
978
1047
|
await rm(join(dir, "runtime", "shared.ts"), { force: true });
|
|
979
1048
|
await replaceInFile(
|
|
980
1049
|
join(dir, "domain.ts"),
|
|
981
|
-
/\n\
|
|
1050
|
+
/\n(?:[^\S\n]*\/\/[^\n]*\n)*[^\S\n]*postInstall: functions\.seed,/,
|
|
982
1051
|
""
|
|
983
1052
|
);
|
|
984
1053
|
}
|
|
@@ -1165,8 +1234,7 @@ async function main() {
|
|
|
1165
1234
|
);
|
|
1166
1235
|
}
|
|
1167
1236
|
M2.info(
|
|
1168
|
-
|
|
1169
|
-
Agent rooted at a parent workspace? Register the skills there: npx skills add ${cdTarget === dir ? dir : `./${cdTarget}`}/.agents/skills -y`
|
|
1237
|
+
"AI agent on this project? Install the authoring + ops skills once (user-level):\n npx skills add astrale-os/cli -g # or run `astrale setup`"
|
|
1170
1238
|
);
|
|
1171
1239
|
Se(`\u2713 ${slug} ready`);
|
|
1172
1240
|
return 0;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-astrale-domain",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Scaffold a standalone Astrale domain — npm create astrale-domain",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"astrale",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"type": "module",
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@clack/prompts": "^0.11.0",
|
|
22
|
-
"@astrale-os/adapter-
|
|
23
|
-
"@astrale-os/adapter-
|
|
22
|
+
"@astrale-os/adapter-astrale": "^0.3.0",
|
|
23
|
+
"@astrale-os/adapter-cloudflare": "^0.3.1"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@astrale-os/ox": ">=0.1.0 <1.0.0",
|