@ghentcdh/create-crouton 0.0.1-alpha.42 → 0.0.1-alpha.44
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 +143 -25
- package/dist/index.js.map +1 -1
- package/dist/templates/docker/.dockerignore.tmpl +4 -1
- package/dist/templates/docker/.env.infra.example.tmpl +5 -0
- package/dist/templates/docker/.env.infra.tmpl +5 -0
- package/dist/templates/docker/Dockerfile.dev.tmpl +14 -13
- package/dist/templates/docker/Dockerfile.prod.tmpl +107 -17
- package/dist/templates/docker/compose.app.tmpl +53 -0
- package/dist/templates/docker/compose.infra.yml.tmpl +24 -0
- package/dist/templates/docker/compose.yml.tmpl +4 -27
- package/dist/templates/nx/workspace/.env.example.tmpl +2 -0
- package/dist/templates/nx/workspace/.env.tmpl +2 -3
- package/dist/templates/regular/.env.example.tmpl +1 -0
- package/dist/templates/regular/.env.tmpl +1 -0
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -18854,25 +18854,38 @@ var transformDataSource = (data) => {
|
|
|
18854
18854
|
};
|
|
18855
18855
|
var DataSourceSchema = DataSourceShape.transform(transformDataSource);
|
|
18856
18856
|
|
|
18857
|
+
// ../crouton-core/src/lib/data-source/Security.schema.ts
|
|
18858
|
+
var SecuritySchema = external_exports.union([
|
|
18859
|
+
external_exports.object({ public: external_exports.literal(true) }),
|
|
18860
|
+
external_exports.object({ guard: external_exports.union([external_exports.string(), external_exports.array(external_exports.string()).min(1)]) })
|
|
18861
|
+
]);
|
|
18862
|
+
|
|
18857
18863
|
// ../crouton-core/src/lib/data-source/Operations.schema.ts
|
|
18864
|
+
var OpEntry = external_exports.union([
|
|
18865
|
+
external_exports.boolean(),
|
|
18866
|
+
external_exports.object({ security: SecuritySchema.optional() })
|
|
18867
|
+
]);
|
|
18858
18868
|
var BoolOrUpsertSchema = external_exports.union([
|
|
18859
18869
|
external_exports.boolean(),
|
|
18860
|
-
external_exports.object({
|
|
18870
|
+
external_exports.object({
|
|
18871
|
+
upsertOn: external_exports.union([external_exports.string(), external_exports.array(external_exports.string())]),
|
|
18872
|
+
security: SecuritySchema.optional()
|
|
18873
|
+
})
|
|
18861
18874
|
]);
|
|
18862
18875
|
var JsonOperationsSchema = external_exports.object({
|
|
18863
|
-
findAll:
|
|
18876
|
+
findAll: OpEntry.default(true),
|
|
18864
18877
|
// default: true — only explicit `false` disables it
|
|
18865
|
-
findOne:
|
|
18878
|
+
findOne: OpEntry.default(true),
|
|
18866
18879
|
// default: true
|
|
18867
|
-
create:
|
|
18880
|
+
create: OpEntry.default(true),
|
|
18868
18881
|
// default: true
|
|
18869
|
-
update:
|
|
18882
|
+
update: OpEntry.default(true),
|
|
18870
18883
|
// default: true
|
|
18871
|
-
patch:
|
|
18884
|
+
patch: OpEntry.default(true),
|
|
18872
18885
|
// default: true
|
|
18873
18886
|
upsert: BoolOrUpsertSchema.default(false),
|
|
18874
18887
|
// default: disabled; `true` throws at load time — must be `{ upsertOn }`
|
|
18875
|
-
delete:
|
|
18888
|
+
delete: OpEntry.default(true)
|
|
18876
18889
|
// default: true
|
|
18877
18890
|
});
|
|
18878
18891
|
|
|
@@ -19374,6 +19387,8 @@ var ResourceJsonShape = external_exports.object({
|
|
|
19374
19387
|
// default: shown, alphabetically ordered, ungrouped
|
|
19375
19388
|
display: JsonDisplaySchema.default(JsonDisplaySchema.parse({})),
|
|
19376
19389
|
// default: { mode: 'modal', customComponent: null }
|
|
19390
|
+
/** Global security block — applies to every operation unless overridden per-operation. */
|
|
19391
|
+
security: SecuritySchema.optional(),
|
|
19377
19392
|
operations: JsonOperationsSchema,
|
|
19378
19393
|
// required key — but every sub-field defaults to enabled
|
|
19379
19394
|
columns: ColumnsSchema.default(ColumnsSchema.parse({})),
|
|
@@ -19816,21 +19831,30 @@ var runCreate = async (name, opts) => {
|
|
|
19816
19831
|
M2.info(`Using pnpm ${pnpmVersion}`);
|
|
19817
19832
|
}
|
|
19818
19833
|
const dbUrl = await resolveDbUrl(opts);
|
|
19834
|
+
const postgres = opts.docker !== false ? await resolvePostgres(opts) : false;
|
|
19819
19835
|
const dbName = name.replace(/[^a-zA-Z0-9]/g, "_");
|
|
19836
|
+
const appName = prefix || name;
|
|
19820
19837
|
const tokens = {
|
|
19821
19838
|
name,
|
|
19822
19839
|
Name: toTitle(name),
|
|
19823
|
-
version: true ? "0.0.1-alpha.
|
|
19840
|
+
version: true ? "0.0.1-alpha.44" : "latest",
|
|
19824
19841
|
year: String((/* @__PURE__ */ new Date()).getFullYear()),
|
|
19825
19842
|
pmRun: pm === "npm" ? "npm run" : pm,
|
|
19826
19843
|
urlEnv: "DATABASE_URL",
|
|
19827
19844
|
dbUrl: dbUrl || `postgresql://crouton:crouton@localhost:5432/${dbName}?schema=public`,
|
|
19828
|
-
dbName
|
|
19845
|
+
dbName,
|
|
19846
|
+
appName,
|
|
19847
|
+
frontendPort: "4200",
|
|
19848
|
+
backendPort: "3000"
|
|
19829
19849
|
};
|
|
19830
19850
|
if (layout === "nx") {
|
|
19831
19851
|
tokens["nx"] = "true";
|
|
19832
|
-
tokens["backendApp"] =
|
|
19833
|
-
tokens["frontendApp"] =
|
|
19852
|
+
tokens["backendApp"] = `${appName}-backend`;
|
|
19853
|
+
tokens["frontendApp"] = `${appName}-frontend`;
|
|
19854
|
+
tokens["workspaceRoot"] = prefix || ".";
|
|
19855
|
+
tokens["dockerfileDev"] = prefix ? `${prefix}/Dockerfile.dev` : "Dockerfile.dev";
|
|
19856
|
+
tokens["envFile"] = prefix ? `${prefix}/.env` : ".env";
|
|
19857
|
+
tokens["generatedGlob"] = prefix ? `${prefix}/generated/default` : "generated/default";
|
|
19834
19858
|
if (prefix) {
|
|
19835
19859
|
tokens["prefix"] = prefix;
|
|
19836
19860
|
tokens["appsRoot"] = `${prefix}/apps`;
|
|
@@ -19846,10 +19870,23 @@ var runCreate = async (name, opts) => {
|
|
|
19846
19870
|
tokens["generatedTypesPath"] = "generated/default/types/src";
|
|
19847
19871
|
tokens["generatedClientPath"] = "generated/default/client";
|
|
19848
19872
|
}
|
|
19873
|
+
} else {
|
|
19874
|
+
tokens["regular"] = "true";
|
|
19875
|
+
tokens["dockerfileDev"] = "Dockerfile.dev";
|
|
19876
|
+
tokens["envFile"] = ".env";
|
|
19849
19877
|
}
|
|
19850
19878
|
if (frontend) {
|
|
19851
19879
|
tokens["frontend"] = "true";
|
|
19852
19880
|
}
|
|
19881
|
+
if (layout === "nx" && frontend) {
|
|
19882
|
+
tokens["nxFrontend"] = "true";
|
|
19883
|
+
}
|
|
19884
|
+
if (layout === "nx" && !frontend) {
|
|
19885
|
+
tokens["nxBackendOnly"] = "true";
|
|
19886
|
+
}
|
|
19887
|
+
if (postgres) {
|
|
19888
|
+
tokens["postgres"] = "true";
|
|
19889
|
+
}
|
|
19853
19890
|
const templateRoot = resolveTemplateDir();
|
|
19854
19891
|
const skipPaths = !frontend ? ["apps/frontend"] : [];
|
|
19855
19892
|
if (layout === "nx") {
|
|
@@ -19872,12 +19909,12 @@ var runCreate = async (name, opts) => {
|
|
|
19872
19909
|
);
|
|
19873
19910
|
files.push(...workspaceFiles);
|
|
19874
19911
|
if (opts.docker !== false) {
|
|
19875
|
-
const
|
|
19876
|
-
|
|
19877
|
-
dockerDir,
|
|
19878
|
-
"",
|
|
19912
|
+
const dockerFiles = await renderDockerTemplates(
|
|
19913
|
+
templateRoot,
|
|
19879
19914
|
tokens,
|
|
19880
|
-
targetDir
|
|
19915
|
+
targetDir,
|
|
19916
|
+
workspaceTarget,
|
|
19917
|
+
{ postgres }
|
|
19881
19918
|
);
|
|
19882
19919
|
files.push(...dockerFiles);
|
|
19883
19920
|
}
|
|
@@ -19914,13 +19951,12 @@ var runCreate = async (name, opts) => {
|
|
|
19914
19951
|
skipPaths
|
|
19915
19952
|
);
|
|
19916
19953
|
if (opts.docker !== false) {
|
|
19917
|
-
const
|
|
19918
|
-
|
|
19919
|
-
|
|
19920
|
-
|
|
19921
|
-
|
|
19922
|
-
|
|
19923
|
-
targetDir
|
|
19954
|
+
const dockerFiles = await renderDockerTemplates(
|
|
19955
|
+
templateRoot,
|
|
19956
|
+
tokens,
|
|
19957
|
+
targetDir,
|
|
19958
|
+
targetDir,
|
|
19959
|
+
{ postgres }
|
|
19924
19960
|
);
|
|
19925
19961
|
files.push(...dockerFiles);
|
|
19926
19962
|
}
|
|
@@ -19949,7 +19985,7 @@ var runCreate = async (name, opts) => {
|
|
|
19949
19985
|
const prefixFlag = prefix ? ` --prefix ${prefix}` : "";
|
|
19950
19986
|
Me(
|
|
19951
19987
|
[
|
|
19952
|
-
opts.docker !== false ? "docker compose up -d # start postgres" : null,
|
|
19988
|
+
opts.docker !== false && postgres ? "docker compose up -d # start postgres" : null,
|
|
19953
19989
|
`${pmRun} prisma:migrate # create initial migration`,
|
|
19954
19990
|
`crouton update resources${prefixFlag} # generate resource CRUD`,
|
|
19955
19991
|
`${pmRun} dev # start dev server`
|
|
@@ -19965,6 +20001,78 @@ var runCreate = async (name, opts) => {
|
|
|
19965
20001
|
throw err;
|
|
19966
20002
|
}
|
|
19967
20003
|
};
|
|
20004
|
+
var renderDockerTemplates = async (templateRoot, tokens, targetDir, workspaceTarget, opts) => {
|
|
20005
|
+
const dockerDir = resolve2(templateRoot, "docker");
|
|
20006
|
+
const files = [];
|
|
20007
|
+
const composeYml = render(
|
|
20008
|
+
await loadTemplate(dockerDir, "compose.yml.tmpl"),
|
|
20009
|
+
tokens
|
|
20010
|
+
);
|
|
20011
|
+
files.push({ path: resolve2(targetDir, "compose.yml"), contents: composeYml });
|
|
20012
|
+
const composeApp = render(
|
|
20013
|
+
await loadTemplate(dockerDir, "compose.app.tmpl"),
|
|
20014
|
+
tokens
|
|
20015
|
+
);
|
|
20016
|
+
files.push({
|
|
20017
|
+
path: resolve2(targetDir, `compose.app.${tokens["appName"]}.yml`),
|
|
20018
|
+
contents: composeApp
|
|
20019
|
+
});
|
|
20020
|
+
if (opts.postgres) {
|
|
20021
|
+
const composeInfra = render(
|
|
20022
|
+
await loadTemplate(dockerDir, "compose.infra.yml.tmpl"),
|
|
20023
|
+
tokens
|
|
20024
|
+
);
|
|
20025
|
+
files.push({
|
|
20026
|
+
path: resolve2(targetDir, "compose.infra.yml"),
|
|
20027
|
+
contents: composeInfra
|
|
20028
|
+
});
|
|
20029
|
+
const envInfra = render(
|
|
20030
|
+
await loadTemplate(dockerDir, ".env.infra.tmpl"),
|
|
20031
|
+
tokens
|
|
20032
|
+
);
|
|
20033
|
+
files.push({
|
|
20034
|
+
path: resolve2(targetDir, ".env.infra"),
|
|
20035
|
+
contents: envInfra
|
|
20036
|
+
});
|
|
20037
|
+
const envInfraExample = render(
|
|
20038
|
+
await loadTemplate(dockerDir, ".env.infra.example.tmpl"),
|
|
20039
|
+
tokens
|
|
20040
|
+
);
|
|
20041
|
+
files.push({
|
|
20042
|
+
path: resolve2(targetDir, ".env.infra.example"),
|
|
20043
|
+
contents: envInfraExample
|
|
20044
|
+
});
|
|
20045
|
+
files.push({
|
|
20046
|
+
path: resolve2(targetDir, "docker/init-data/.gitkeep"),
|
|
20047
|
+
contents: ""
|
|
20048
|
+
});
|
|
20049
|
+
}
|
|
20050
|
+
const dockerfileDev = render(
|
|
20051
|
+
await loadTemplate(dockerDir, "Dockerfile.dev.tmpl"),
|
|
20052
|
+
tokens
|
|
20053
|
+
);
|
|
20054
|
+
files.push({
|
|
20055
|
+
path: resolve2(workspaceTarget, "Dockerfile.dev"),
|
|
20056
|
+
contents: dockerfileDev
|
|
20057
|
+
});
|
|
20058
|
+
const dockerfileProd = render(
|
|
20059
|
+
await loadTemplate(dockerDir, "Dockerfile.prod.tmpl"),
|
|
20060
|
+
tokens
|
|
20061
|
+
);
|
|
20062
|
+
files.push({
|
|
20063
|
+
path: resolve2(workspaceTarget, "Dockerfile.prod"),
|
|
20064
|
+
contents: dockerfileProd
|
|
20065
|
+
});
|
|
20066
|
+
const dockerignore = render(
|
|
20067
|
+
await loadTemplate(dockerDir, ".dockerignore.tmpl"),
|
|
20068
|
+
tokens
|
|
20069
|
+
);
|
|
20070
|
+
files.push({
|
|
20071
|
+
path: resolve2(targetDir, ".dockerignore"),
|
|
20072
|
+
contents: dockerignore
|
|
20073
|
+
});
|
|
20074
|
+
return files;
|
|
20075
|
+
};
|
|
19968
20076
|
var postScaffold = async (opts, targetDir, pm, dbUrl, prefix) => {
|
|
19969
20077
|
if (opts.git !== false) {
|
|
19970
20078
|
const s = Y2();
|
|
@@ -20077,6 +20185,16 @@ var resolveDbUrl = async (opts) => {
|
|
|
20077
20185
|
);
|
|
20078
20186
|
return url2.trim();
|
|
20079
20187
|
};
|
|
20188
|
+
var resolvePostgres = async (opts) => {
|
|
20189
|
+
if (opts.yes) return opts.postgres;
|
|
20190
|
+
if (!opts.postgres) return false;
|
|
20191
|
+
return assertNotCancel(
|
|
20192
|
+
await ye({
|
|
20193
|
+
message: "Run PostgreSQL in Docker?",
|
|
20194
|
+
initialValue: true
|
|
20195
|
+
})
|
|
20196
|
+
);
|
|
20197
|
+
};
|
|
20080
20198
|
var loadAndRenderTemplates = async (templateDir, subPath, tokens, targetDir, skipPaths = []) => {
|
|
20081
20199
|
const files = [];
|
|
20082
20200
|
const dir = subPath ? resolve2(templateDir, subPath) : templateDir;
|
|
@@ -20105,7 +20223,7 @@ var loadAndRenderTemplates = async (templateDir, subPath, tokens, targetDir, ski
|
|
|
20105
20223
|
};
|
|
20106
20224
|
|
|
20107
20225
|
// src/index.ts
|
|
20108
|
-
var program2 = new Command("create-crouton").description("Scaffold a new crouton project").version("0.0.1").argument("[name]", "project name", "my-crouton-app").option("--nx", "use Nx monorepo layout").option("--no-nx", "use regular (non-Nx) layout").option("--no-frontend", "skip frontend app generation").option("--sample", "include sample resource").option("--pm <manager>", "package manager (pnpm | npm | yarn | bun)").option("--no-install", "skip dependency installation").option("--no-git", "skip git init").option("--prefix <name>", "nest apps/config under a subfolder (Nx only)").option("--no-docker", "skip Docker file generation").option("-y, --yes", "accept all defaults (non-interactive)").option("--force", "overwrite existing files").option("--db-url <url>", "database connection URL (e.g. postgresql://user:pass@localhost:5432/db)").action(async (name, opts) => {
|
|
20226
|
+
var program2 = new Command("create-crouton").description("Scaffold a new crouton project").version("0.0.1").argument("[name]", "project name", "my-crouton-app").option("--nx", "use Nx monorepo layout").option("--no-nx", "use regular (non-Nx) layout").option("--no-frontend", "skip frontend app generation").option("--sample", "include sample resource").option("--pm <manager>", "package manager (pnpm | npm | yarn | bun)").option("--no-install", "skip dependency installation").option("--no-git", "skip git init").option("--prefix <name>", "nest apps/config under a subfolder (Nx only)").option("--no-docker", "skip Docker file generation").option("--no-postgres", "skip PostgreSQL in Docker (use external DB)").option("-y, --yes", "accept all defaults (non-interactive)").option("--force", "overwrite existing files").option("--db-url <url>", "database connection URL (e.g. postgresql://user:pass@localhost:5432/db)").action(async (name, opts) => {
|
|
20109
20227
|
try {
|
|
20110
20228
|
await runCreate(name, opts);
|
|
20111
20229
|
} catch (err) {
|