betterstart-cli 0.0.88 → 0.0.90
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/{chunk-M4S53A4X.js → chunk-3CLINNJL.js} +39 -3
- package/dist/chunk-3CLINNJL.js.map +1 -0
- package/dist/cli.js +368 -308
- package/dist/cli.js.map +1 -1
- package/dist/{template-reader-X6KFP7B3.js → template-reader-PVN53GS7.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-M4S53A4X.js.map +0 -1
- /package/dist/{template-reader-X6KFP7B3.js.map → template-reader-PVN53GS7.js.map} +0 -0
|
@@ -198,6 +198,41 @@ function applyAdminNamespaceToPath(filePath, namespaceValue) {
|
|
|
198
198
|
const namespacedPath = replaceAdminDashToken(protectedNamespace.value, namespace);
|
|
199
199
|
return protectedNamespace.restore(namespacedPath);
|
|
200
200
|
}
|
|
201
|
+
var MODULE_SPECIFIER_PATTERN = /(\bfrom\s*|\bimport\s*|\brequire\s*\(\s*|\bimport\s*\(\s*)(['"])([^'"\n]+)\2/g;
|
|
202
|
+
var EXTERNAL_PACKAGE_PATTERN = /^(?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*(?:\/[^'"]*)?$/;
|
|
203
|
+
function isExternalModuleSpecifier(specifier) {
|
|
204
|
+
if (specifier.startsWith(".") || specifier.startsWith("/")) {
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
if (new RegExp(`^@${DEFAULT_ADMIN_NAMESPACE}(?:/|$)`).test(specifier)) {
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
210
|
+
return EXTERNAL_PACKAGE_PATTERN.test(specifier);
|
|
211
|
+
}
|
|
212
|
+
function protectExternalModuleSpecifiers(content) {
|
|
213
|
+
const replacements = [];
|
|
214
|
+
const protectedContent = content.replace(
|
|
215
|
+
MODULE_SPECIFIER_PATTERN,
|
|
216
|
+
(match, prefix, quote, specifier) => {
|
|
217
|
+
if (!isExternalModuleSpecifier(specifier)) {
|
|
218
|
+
return match;
|
|
219
|
+
}
|
|
220
|
+
const token = `__BETTERSTART_EXTERNAL_MODULE_${replacements.length}__`;
|
|
221
|
+
replacements.push([token, specifier]);
|
|
222
|
+
return `${prefix}${quote}${token}${quote}`;
|
|
223
|
+
}
|
|
224
|
+
);
|
|
225
|
+
return {
|
|
226
|
+
content: protectedContent,
|
|
227
|
+
restore(value) {
|
|
228
|
+
let restored = value;
|
|
229
|
+
for (const [token, specifier] of replacements) {
|
|
230
|
+
restored = restored.replaceAll(token, specifier);
|
|
231
|
+
}
|
|
232
|
+
return restored;
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
}
|
|
201
236
|
function protectAdminRoleLiterals(content) {
|
|
202
237
|
const protectedValues = [
|
|
203
238
|
"UserRole.ADMIN",
|
|
@@ -230,7 +265,8 @@ function protectAdminRoleLiterals(content) {
|
|
|
230
265
|
}
|
|
231
266
|
function applyAdminNamespaceToContent(content, namespaceValue) {
|
|
232
267
|
const namespace = resolveAdminNamespace(namespaceValue);
|
|
233
|
-
const { content:
|
|
268
|
+
const { content: externalSafeContent, restore: restoreExternalModules } = protectExternalModuleSpecifiers(content);
|
|
269
|
+
const { content: protectedContent, restore } = protectAdminRoleLiterals(externalSafeContent);
|
|
234
270
|
const canonicalContent = protectedContent.replaceAll("MediaListParams", `${namespace.pascal}MediaQuery`).replaceAll("MediaListResult", `${namespace.pascal}MediaPage`).replaceAll(
|
|
235
271
|
`${namespace.pascal}MediaQuery, ${namespace.pascal}MediaPage`,
|
|
236
272
|
`${namespace.pascal}MediaPage, ${namespace.pascal}MediaQuery`
|
|
@@ -252,7 +288,7 @@ function applyAdminNamespaceToContent(content, namespaceValue) {
|
|
|
252
288
|
),
|
|
253
289
|
namespace
|
|
254
290
|
);
|
|
255
|
-
return restore(protectedNamespace.restore(namespacedContent));
|
|
291
|
+
return restoreExternalModules(restore(protectedNamespace.restore(namespacedContent)));
|
|
256
292
|
}
|
|
257
293
|
|
|
258
294
|
// adapters/next/template-reader.ts
|
|
@@ -303,4 +339,4 @@ export {
|
|
|
303
339
|
readNamespacedTemplate,
|
|
304
340
|
namespacedTemplatePath
|
|
305
341
|
};
|
|
306
|
-
//# sourceMappingURL=chunk-
|
|
342
|
+
//# sourceMappingURL=chunk-3CLINNJL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../adapters/next/template-reader.ts","../core-engine/utils/cli-root.ts","../core-engine/utils/string.ts","../adapters/next/config/namespace.ts"],"sourcesContent":["import fs from 'node:fs'\nimport path from 'node:path'\nimport { resolveCliAssetPath } from '@core-engine/utils/cli-root.js'\nimport {\n applyAdminNamespaceToContent,\n applyAdminNamespaceToPath\n} from '@next-adapter/config/namespace.js'\n\n/**\n * Read a Next init template file by its relative path.\n * Used by scaffolders and update-component to get template content.\n */\nexport function readTemplate(relativePath: string): string {\n return fs.readFileSync(\n path.join(resolveCliAssetPath('adapters', 'next', 'templates', 'init'), relativePath),\n 'utf-8'\n )\n}\n\nexport function applyNextCacheApiForVersion(content: string, nextMajorVersion: number): string {\n if (nextMajorVersion >= 16) {\n return content\n }\n\n return content\n .replace(\n /import \\{ cacheLife, cacheTag \\} from 'next\\/cache'\\n/g,\n \"import { unstable_cacheTag as cacheTag } from 'next/cache'\\n\"\n )\n .replace(/\\n {2}cacheLife\\('max'\\)/g, '')\n .replace(\n /import \\{ updateTag \\} from 'next\\/cache'\\n/g,\n \"import { revalidateTag } from 'next/cache'\\n\"\n )\n .replace(/revalidateTag\\(([^,\\n]+), \\{ expire: 0 \\}\\)/g, 'revalidateTag($1)')\n .replace(/\\bupdateTag\\(/g, 'revalidateTag(')\n}\n\nexport function readNamespacedTemplate(relativePath: string, namespace: string): string {\n return applyAdminNamespaceToContent(readTemplate(relativePath), namespace)\n}\n\nexport function namespacedTemplatePath(relativePath: string, namespace: string): string {\n return applyAdminNamespaceToPath(relativePath, namespace)\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\n/**\n * Find the CLI package root by looking for package.json with our name.\n * Works both from source (src/) and built (dist/) locations.\n */\nexport function findCliRoot(): string {\n let dir = new URL('.', import.meta.url).pathname\n for (let i = 0; i < 5; i++) {\n const pkgPath = path.join(dir, 'package.json')\n if (fs.existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'))\n if (pkg.name === 'betterstart-cli') {\n return dir\n }\n } catch {\n // continue\n }\n }\n dir = path.dirname(dir)\n }\n // Fallback: assume 2 levels up from dist/\n return path.resolve(new URL('.', import.meta.url).pathname, '..', '..')\n}\n\nexport function resolveCliAssetPath(...segments: string[]): string {\n const root = findCliRoot()\n const builtPath = path.join(root, 'dist', 'assets', ...segments)\n if (fs.existsSync(builtPath)) {\n return builtPath\n }\n\n return path.join(root, ...segments)\n}\n","/**\n * Shared string helpers used across all generators.\n */\n\nexport function toPascalCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .split(/[-_\\s]+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join('')\n}\n\nexport function toCamelCase(str: string): string {\n const p = toPascalCase(str)\n return p.charAt(0).toLowerCase() + p.slice(1)\n}\n\nexport function singularize(str: string): string {\n if (str.endsWith('ies')) return `${str.slice(0, -3)}y`\n if (str.endsWith('ves')) return `${str.slice(0, -3)}f`\n if (\n str.endsWith('sses') ||\n str.endsWith('xes') ||\n str.endsWith('ches') ||\n str.endsWith('shes') ||\n str.endsWith('zes')\n )\n return str.slice(0, -2)\n if (str.endsWith('s') && !str.endsWith('ss')) return str.slice(0, -1)\n return str\n}\n\nexport function pluralize(str: string): string {\n if (str.endsWith('s') && !str.endsWith('ss')) return str\n if (str.endsWith('y') && !['ay', 'ey', 'iy', 'oy', 'uy'].some((v) => str.endsWith(v)))\n return `${str.slice(0, -1)}ies`\n if (str.endsWith('s') || str.endsWith('x') || str.endsWith('ch') || str.endsWith('sh'))\n return `${str}es`\n return `${str}s`\n}\n\nexport function toKebabCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase()\n}\n\nexport function toScreamingSnake(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, '$1_$2')\n .replace(/[\\s-]+/g, '_')\n .toUpperCase()\n}\n\nexport function quotePropertyName(name: string): string {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name) ? name : `'${name}'`\n}\n\nexport function singularizeLabel(label: string): string {\n const words = label.split(' ')\n const lastWord = words[words.length - 1]\n words[words.length - 1] = singularize(lastWord.toLowerCase())\n words[words.length - 1] =\n words[words.length - 1].charAt(0).toUpperCase() + words[words.length - 1].slice(1)\n return words.join(' ')\n}\n","import type { BetterstartNextPaths } from '@core-engine/config/types.js'\nimport { toCamelCase, toPascalCase, toScreamingSnake } from '@core-engine/utils/string.js'\n\nexport const DEFAULT_ADMIN_NAMESPACE = 'admin'\n\nconst NAMESPACE_PATTERN = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/\n\nexport interface AdminNamespace {\n segment: string\n alias: string\n camel: string\n pascal: string\n screaming: string\n routePath: string\n apiPath: string\n cssRootClass: string\n globalsFile: string\n routeGroup: string\n}\n\nexport function validateAdminNamespace(value: string): string {\n const segment = value.trim()\n\n if (!NAMESPACE_PATTERN.test(segment)) {\n throw new Error(\n 'Namespace must be one lowercase kebab-case segment starting with a letter, for example \"admin\" or \"admin-panel\".'\n )\n }\n\n return segment\n}\n\nexport function validateAdminDashboardPath(value: string): string {\n const input = value.trim()\n const segment = input.startsWith('/') ? input.slice(1) : input\n\n if (input.startsWith('/') && input !== `/${segment}`) {\n throw new Error(\n 'Dashboard path must be one lowercase kebab-case segment starting with a letter, for example \"/admin\" or \"/admin-panel\".'\n )\n }\n\n try {\n return validateAdminNamespace(segment)\n } catch {\n throw new Error(\n 'Dashboard path must be one lowercase kebab-case segment starting with a letter, for example \"/admin\" or \"/admin-panel\".'\n )\n }\n}\n\nexport function resolveAdminNamespace(value = DEFAULT_ADMIN_NAMESPACE): AdminNamespace {\n const segment = validateAdminNamespace(value)\n const pascal = toPascalCase(segment)\n\n return {\n segment,\n alias: `@${segment}`,\n camel: toCamelCase(segment),\n pascal,\n screaming: toScreamingSnake(segment),\n routePath: `/${segment}`,\n apiPath: `/api/${segment}`,\n cssRootClass: `${segment}-root`,\n globalsFile: `${segment}-globals.css`,\n routeGroup: `(${segment})`\n }\n}\n\nexport function deriveNamespacePaths(\n namespaceValue: string,\n srcDir: boolean\n): BetterstartNextPaths {\n const namespace = resolveAdminNamespace(namespaceValue)\n const appBase = srcDir ? './src/app' : './app'\n\n return {\n admin: `./${namespace.segment}`,\n schemas: `./${namespace.segment}/schemas`,\n pages: `${appBase}/${namespace.routeGroup}/${namespace.segment}/(authenticated)`,\n login: `${appBase}/${namespace.routeGroup}/${namespace.segment}/(auth)/login`,\n api: `${appBase}/${namespace.routeGroup}/api/${namespace.segment}`\n }\n}\n\nexport function deriveMigrationsDir(namespaceValue: string): string {\n const namespace = resolveAdminNamespace(namespaceValue)\n return `./${namespace.segment}/lib/db/migrations`\n}\n\nfunction replaceAdminDashToken(value: string, namespace: AdminNamespace): string {\n return value.replaceAll('admin-', `${namespace.segment}-`)\n}\n\nfunction replaceAdminScreamingToken(value: string, namespace: AdminNamespace): string {\n return value.replaceAll('ADMIN_', `${namespace.screaming}_`)\n}\n\nfunction replaceAdminPascalToken(value: string, namespace: AdminNamespace): string {\n return value.replaceAll('Admin', namespace.pascal)\n}\n\nfunction replaceAdminCamelToken(value: string, namespace: AdminNamespace): string {\n return value.replace(/\\badmin(?=[A-Z])/g, namespace.camel)\n}\n\nfunction protectExistingNamespaceLiterals(\n value: string,\n namespace: AdminNamespace\n): {\n value: string\n restore: (output: string) => string\n} {\n if (namespace.segment === DEFAULT_ADMIN_NAMESPACE) {\n return {\n value,\n restore(output: string): string {\n return output\n }\n }\n }\n\n const literals = Array.from(\n new Set([\n namespace.alias,\n namespace.apiPath,\n namespace.routePath,\n namespace.routeGroup,\n namespace.cssRootClass,\n namespace.globalsFile,\n `${namespace.segment}/`,\n `${namespace.segment}-`,\n namespace.screaming,\n namespace.pascal,\n namespace.camel\n ])\n ).sort((a, b) => b.length - a.length)\n\n const replacements: Array<[string, string]> = []\n let protectedValue = value\n\n for (const [index, literal] of literals.entries()) {\n if (!protectedValue.includes(literal)) {\n continue\n }\n\n const token = `__BSTART_NS_${index}__`\n protectedValue = protectedValue.replaceAll(literal, token)\n replacements.push([token, literal])\n }\n\n return {\n value: protectedValue,\n restore(output: string): string {\n let restored = output\n for (const [token, literal] of replacements) {\n restored = restored.replaceAll(token, literal)\n }\n return restored\n }\n }\n}\n\nexport function applyAdminNamespaceToPath(filePath: string, namespaceValue: string): string {\n const namespace = resolveAdminNamespace(namespaceValue)\n\n const canonicalPath = filePath\n .replaceAll('lib/actions/auth/middleware.ts', 'lib/actions/auth/session.ts')\n .replaceAll('lib/actions/auth/auth.ts', 'lib/actions/auth/server.ts')\n .replaceAll('lib/actions/r2/r2.ts', 'lib/actions/r2/provider.ts')\n .replaceAll('lib/actions/resend/resend.ts', 'lib/actions/resend/provider.ts')\n .replaceAll(\n 'lib/actions/mailchimp/mailchimp.ts',\n 'lib/actions/mailchimp/add-to-mailchimp-audience.ts'\n )\n .replaceAll('(admin)', namespace.routeGroup)\n .replace(/@admin(?=\\/|$)/g, namespace.alias)\n .replace(/\\/api\\/admin(?=\\/|$)/g, namespace.apiPath)\n .replace(/(^|\\/)admin(?=\\/|$)/g, `$1${namespace.segment}`)\n\n const protectedNamespace = protectExistingNamespaceLiterals(canonicalPath, namespace)\n const namespacedPath = replaceAdminDashToken(protectedNamespace.value, namespace)\n\n return protectedNamespace.restore(namespacedPath)\n}\n\nconst MODULE_SPECIFIER_PATTERN =\n /(\\bfrom\\s*|\\bimport\\s*|\\brequire\\s*\\(\\s*|\\bimport\\s*\\(\\s*)(['\"])([^'\"\\n]+)\\2/g\n\nconst EXTERNAL_PACKAGE_PATTERN =\n /^(?:@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*(?:\\/[^'\"]*)?$/\n\nfunction isExternalModuleSpecifier(specifier: string): boolean {\n if (specifier.startsWith('.') || specifier.startsWith('/')) {\n return false\n }\n\n if (new RegExp(`^@${DEFAULT_ADMIN_NAMESPACE}(?:/|$)`).test(specifier)) {\n return false\n }\n\n return EXTERNAL_PACKAGE_PATTERN.test(specifier)\n}\n\nfunction protectExternalModuleSpecifiers(content: string): {\n content: string\n restore: (value: string) => string\n} {\n const replacements: Array<[string, string]> = []\n\n const protectedContent = content.replace(\n MODULE_SPECIFIER_PATTERN,\n (match, prefix: string, quote: string, specifier: string) => {\n if (!isExternalModuleSpecifier(specifier)) {\n return match\n }\n\n const token = `__BETTERSTART_EXTERNAL_MODULE_${replacements.length}__`\n replacements.push([token, specifier])\n return `${prefix}${quote}${token}${quote}`\n }\n )\n\n return {\n content: protectedContent,\n restore(value: string): string {\n let restored = value\n for (const [token, specifier] of replacements) {\n restored = restored.replaceAll(token, specifier)\n }\n return restored\n }\n }\n}\n\nfunction protectAdminRoleLiterals(content: string): {\n content: string\n restore: (value: string) => string\n} {\n const protectedValues = [\n 'UserRole.ADMIN',\n \"'admin'\",\n '\"admin\"',\n '`admin`',\n '>Admin</SelectItem>',\n 'Manage admin users and roles'\n ]\n\n const replacements: Array<[string, string]> = []\n let protectedContent = content\n\n for (const [index, value] of protectedValues.entries()) {\n if (!protectedContent.includes(value)) {\n continue\n }\n\n const token = `__BETTERSTART_NAMESPACE_PROTECTED_${index}__`\n protectedContent = protectedContent.replaceAll(value, token)\n replacements.push([token, value])\n }\n\n return {\n content: protectedContent,\n restore(value: string): string {\n let restored = value\n for (const [token, original] of replacements) {\n restored = restored.replaceAll(token, original)\n }\n return restored\n }\n }\n}\n\nexport function applyAdminNamespaceToContent(content: string, namespaceValue: string): string {\n const namespace = resolveAdminNamespace(namespaceValue)\n const { content: externalSafeContent, restore: restoreExternalModules } =\n protectExternalModuleSpecifiers(content)\n const { content: protectedContent, restore } = protectAdminRoleLiterals(externalSafeContent)\n\n const canonicalContent = protectedContent\n .replaceAll('MediaListParams', `${namespace.pascal}MediaQuery`)\n .replaceAll('MediaListResult', `${namespace.pascal}MediaPage`)\n .replaceAll(\n `${namespace.pascal}MediaQuery, ${namespace.pascal}MediaPage`,\n `${namespace.pascal}MediaPage, ${namespace.pascal}MediaQuery`\n )\n .replaceAll('UserData', 'User')\n .replaceAll('UsersResponse', 'UsersPage')\n .replaceAll('SettingData', 'Setting')\n .replaceAll('UpsertSettingInput', 'SettingUpsertInput')\n .replaceAll('UpsertSettingResult', 'SettingUpsertResult')\n .replace(/\\bAdminThemeProvider\\b/g, `${namespace.pascal}ThemeProvider`)\n .replace(/\\bAdminThemeContext\\b/g, `${namespace.pascal}ThemeContext`)\n .replace(\n /import\\s+\\{\\s*admin\\s*\\}\\s+from\\s+(['\"])@admin\\/utils\\/app\\/admin\\1/g,\n (_match, quote: string) =>\n `import { ${namespace.camel} } from ${quote}${namespace.alias}/utils/app/${namespace.camel}${quote}`\n )\n .replace(/\\badmin(?=\\.name\\b)/g, namespace.camel)\n .replaceAll('@admin/auth/middleware', `${namespace.alias}/auth/session`)\n .replaceAll('@admin/auth/auth', `${namespace.alias}/auth/server`)\n .replaceAll('@admin/auth/client', `${namespace.alias}/auth/client`)\n .replace(/@admin\\/auth(?=['\"`\\s)]|$)/g, `${namespace.alias}/auth/server`)\n .replaceAll(\n \"import { auth, type User } from './auth'\",\n \"import { auth, type User } from './server'\"\n )\n .replace(/@admin(?=\\/|$)/g, namespace.alias)\n .replace(/\\/api\\/admin(?=\\/|['\"`]|$)/g, namespace.apiPath)\n .replace(/(^|\\/)admin(?=\\/|['\"`]|$)/g, `$1${namespace.segment}`)\n .replaceAll('(admin)', namespace.routeGroup)\n\n const protectedNamespace = protectExistingNamespaceLiterals(canonicalContent, namespace)\n const namespacedContent = replaceAdminCamelToken(\n replaceAdminPascalToken(\n replaceAdminScreamingToken(\n replaceAdminDashToken(protectedNamespace.value, namespace),\n namespace\n ),\n namespace\n ),\n namespace\n )\n\n return restoreExternalModules(restore(protectedNamespace.restore(namespacedContent)))\n}\n"],"mappings":"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","names":["fs","path","fs","path"]}
|