diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index 3c3629e64..000000000
--- a/.eslintignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules
diff --git a/.eslintrc.json b/.eslintrc.json
deleted file mode 100644
index 9d56a6621..000000000
--- a/.eslintrc.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "root": true,
- "ignorePatterns": ["**/*"],
- "plugins": ["@nx"],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {
- "@nx/enforce-module-boundaries": [
- "error",
- {
- "enforceBuildableLibDependency": true,
- "allow": [],
- "depConstraints": [
- {
- "sourceTag": "*",
- "onlyDependOnLibsWithTags": ["*"]
- }
- ]
- }
- ]
- }
- },
- {
- "files": ["*.ts", "*.tsx"],
- "extends": ["plugin:@nx/typescript"],
- "rules": {
- "@typescript-eslint/no-extra-semi": "error",
- "no-extra-semi": "off"
- }
- },
- {
- "files": ["*.js", "*.jsx"],
- "extends": ["plugin:@nx/javascript"],
- "rules": {
- "@typescript-eslint/no-extra-semi": "error",
- "no-extra-semi": "off"
- }
- },
- {
- "files": "*.json",
- "parser": "jsonc-eslint-parser",
- "rules": {}
- }
- ]
-}
diff --git a/.gitignore b/.gitignore
index 01e584836..4be7361b3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -69,3 +69,4 @@ tmpanalogapp*
vite.config.*.timestamp*
.vite-inspect
vitest.config.*.timestamp*
+gradle.properties
diff --git a/.prettierignore b/.prettierignore
index fac759de7..2cb245d31 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -12,3 +12,4 @@ pnpm-lock.yaml
/packages/create-analog/template-*
.vite-inspect
.all-contributorsrc
+.cursor/rules/nx-rules.mdc
diff --git a/apps/analog-app-e2e-cypress/.eslintrc.json b/apps/analog-app-e2e-cypress/.eslintrc.json
deleted file mode 100644
index 4c5989b23..000000000
--- a/apps/analog-app-e2e-cypress/.eslintrc.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "extends": ["plugin:cypress/recommended", "../../.eslintrc.json"],
- "ignorePatterns": ["!**/*"],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["src/plugins/index.js"],
- "rules": {
- "@typescript-eslint/no-var-requires": "off",
- "no-undef": "off"
- }
- }
- ]
-}
diff --git a/apps/analog-app-e2e-cypress/eslint.config.mjs b/apps/analog-app-e2e-cypress/eslint.config.mjs
new file mode 100644
index 000000000..5fe6ce453
--- /dev/null
+++ b/apps/analog-app-e2e-cypress/eslint.config.mjs
@@ -0,0 +1,30 @@
+import { FlatCompat } from '@eslint/eslintrc';
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+import js from '@eslint/js';
+import baseConfig from '../../eslint.config.mjs';
+
+const compat = new FlatCompat({
+ baseDirectory: dirname(fileURLToPath(import.meta.url)),
+ recommendedConfig: js.configs.recommended,
+});
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ ...compat.extends('plugin:cypress/recommended'),
+ {
+ files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
+ // Override or add rules here
+ rules: {},
+ },
+ {
+ files: ['src/plugins/index.js'],
+ rules: {
+ '@typescript-eslint/no-var-requires': 'off',
+ 'no-undef': 'off',
+ },
+ },
+];
diff --git a/apps/analog-app-e2e-playwright/.eslintrc.json b/apps/analog-app-e2e-playwright/.eslintrc.json
deleted file mode 100644
index c3eaca421..000000000
--- a/apps/analog-app-e2e-playwright/.eslintrc.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": [
- "!**/*",
- "**/vite.config.*.timestamp*",
- "**/vitest.config.*.timestamp*"
- ],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["src/plugins/index.js"],
- "rules": {
- "@typescript-eslint/no-var-requires": "off",
- "no-undef": "off"
- }
- }
- ]
-}
diff --git a/apps/analog-app-e2e-playwright/eslint.config.mjs b/apps/analog-app-e2e-playwright/eslint.config.mjs
new file mode 100644
index 000000000..57515642e
--- /dev/null
+++ b/apps/analog-app-e2e-playwright/eslint.config.mjs
@@ -0,0 +1,23 @@
+import baseConfig from '../../eslint.config.mjs';
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ {
+ files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
+ // Override or add rules here
+ rules: {},
+ },
+ {
+ files: ['src/plugins/index.js'],
+ rules: {
+ '@typescript-eslint/no-var-requires': 'off',
+ 'no-undef': 'off',
+ },
+ },
+ {
+ ignores: ['**/vite.config.*.timestamp*', '**/vitest.config.*.timestamp*'],
+ },
+];
diff --git a/apps/analog-app-e2e-playwright/tests/app.spec.ts b/apps/analog-app-e2e-playwright/tests/app.spec.ts
index 468347b84..fd1e915f5 100644
--- a/apps/analog-app-e2e-playwright/tests/app.spec.ts
+++ b/apps/analog-app-e2e-playwright/tests/app.spec.ts
@@ -31,8 +31,17 @@ afterEach(async () => {
describe('My Store', () => {
test(`Given the user has navigated to the home page
Then the app title is visible`, async () => {
- await expect(
- page.locator('role=heading[level=1] >> text=My Store'),
- ).toContain(/My Store/i);
+ // Wait for the page to be fully loaded and Angular to be ready
+ await page.waitForLoadState('networkidle');
+
+ // Wait for the Angular app to be fully rendered
+ await page.waitForSelector('analogjs-root');
+
+ // Wait for the top bar component to be rendered
+ await page.waitForSelector('analogjs-top-bar');
+
+ // Now check for the heading - use a simpler selector that should work
+ const heading = page.locator('h1:has-text("My Store")');
+ await expect(await heading.textContent()).toContain('My Store');
});
});
diff --git a/apps/analog-app-e2e-playwright/tsconfig.json b/apps/analog-app-e2e-playwright/tsconfig.json
new file mode 100644
index 000000000..af69525e1
--- /dev/null
+++ b/apps/analog-app-e2e-playwright/tsconfig.json
@@ -0,0 +1,22 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "sourceMap": false,
+ "outDir": "../../dist/out-tsc",
+ "allowJs": true,
+ "types": ["node", "vitest/globals"],
+ "forceConsistentCasingInFileNames": true,
+ "strict": true,
+ "noImplicitOverride": true,
+ "noPropertyAccessFromIndexSignature": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["tests/**/*.ts", "src/**/*.js"],
+ "angularCompilerOptions": {
+ "enableI18nLegacyMessageIdFormat": false,
+ "strictInjectionParameters": true,
+ "strictInputAccessModifiers": true,
+ "strictTemplates": true
+ }
+}
diff --git a/apps/analog-app-e2e-playwright/vite.config.ts b/apps/analog-app-e2e-playwright/vite.config.ts
index 8be049b53..a541b6ffc 100644
--- a/apps/analog-app-e2e-playwright/vite.config.ts
+++ b/apps/analog-app-e2e-playwright/vite.config.ts
@@ -11,6 +11,7 @@ export default defineConfig(({ mode }) => {
globals: true,
environment: 'node',
include: ['**/*.spec.ts'],
+ testTimeout: 30000, // Increase timeout to 30 seconds for e2e tests
cache: {
dir: `../../node_modules/.vitest`,
},
diff --git a/apps/analog-app/.eslintrc.json b/apps/analog-app/.eslintrc.json
deleted file mode 100644
index 60078d28c..000000000
--- a/apps/analog-app/.eslintrc.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": [
- "!**/*",
- "**/vite.config.*.timestamp*",
- "**/vitest.config.*.timestamp*",
- "storybook-static"
- ],
- "overrides": [
- {
- "files": ["*.ts"],
- "extends": [
- "plugin:@nx/angular",
- "plugin:@angular-eslint/template/process-inline-templates"
- ],
- "rules": {
- "@angular-eslint/directive-selector": [
- "error",
- {
- "type": "attribute",
- "prefix": "analogjs",
- "style": "camelCase"
- }
- ],
- "@angular-eslint/component-selector": [
- "error",
- {
- "type": "element",
- "prefix": "analogjs",
- "style": "kebab-case"
- }
- ],
- "@angular-eslint/prefer-standalone": "off"
- }
- },
- {
- "files": ["*.html"],
- "extends": ["plugin:@nx/angular-template"],
- "rules": {}
- }
- ]
-}
diff --git a/apps/analog-app/.storybook/main.ts b/apps/analog-app/.storybook/main.ts
index d520199a1..fa865343f 100644
--- a/apps/analog-app/.storybook/main.ts
+++ b/apps/analog-app/.storybook/main.ts
@@ -1,10 +1,10 @@
-import type { StorybookConfig } from '@analogjs/storybook-angular';
+import type { StorybookConfig } from '@benpsnyder/analogjs-esm-storybook-angular';
const config: StorybookConfig = {
stories: ['../src/**/*.@(mdx|stories.@(js|jsx|ts|tsx))'],
addons: ['@storybook/addon-links', '@storybook/addon-docs'],
framework: {
- name: '@analogjs/storybook-angular',
+ name: '@benpsnyder/analogjs-esm-storybook-angular',
options: {},
},
};
diff --git a/apps/analog-app/.storybook/preview.ts b/apps/analog-app/.storybook/preview.ts
index acdea0921..402f19824 100644
--- a/apps/analog-app/.storybook/preview.ts
+++ b/apps/analog-app/.storybook/preview.ts
@@ -1,6 +1,9 @@
import 'zone.js';
-import { applicationConfig, type Preview } from '@analogjs/storybook-angular';
+import {
+ applicationConfig,
+ type Preview,
+} from '@benpsnyder/analogjs-esm-storybook-angular';
import { provideNoopAnimations } from '@angular/platform-browser/animations';
// compodoc configuration
diff --git a/apps/analog-app/documentation.json b/apps/analog-app/documentation.json
index e5e742bf7..b64bd9b3b 100644
--- a/apps/analog-app/documentation.json
+++ b/apps/analog-app/documentation.json
@@ -18,7 +18,7 @@
"deprecated": false,
"deprecationMessage": "",
"type": "StorybookConfig",
- "defaultValue": "{\n stories: ['../src/**/*.@(mdx|stories.@(js|jsx|ts|tsx))'],\n addons: [],\n framework: {\n name: '@analogjs/storybook-angular',\n options: {},\n },\n}"
+ "defaultValue": "{\n stories: ['../src/**/*.@(mdx|stories.@(js|jsx|ts|tsx))'],\n addons: [],\n framework: {\n name: '@benpsnyder/analogjs-esm-storybook-angular',\n options: {},\n },\n}"
},
{
"name": "Large",
@@ -188,7 +188,7 @@
"deprecated": false,
"deprecationMessage": "",
"type": "StorybookConfig",
- "defaultValue": "{\n stories: ['../src/**/*.@(mdx|stories.@(js|jsx|ts|tsx))'],\n addons: [],\n framework: {\n name: '@analogjs/storybook-angular',\n options: {},\n },\n}"
+ "defaultValue": "{\n stories: ['../src/**/*.@(mdx|stories.@(js|jsx|ts|tsx))'],\n addons: [],\n framework: {\n name: '@benpsnyder/analogjs-esm-storybook-angular',\n options: {},\n },\n}"
}
],
"apps/analog-app/src/stories/button.stories.ts": [
diff --git a/apps/analog-app/eslint.config.mjs b/apps/analog-app/eslint.config.mjs
new file mode 100644
index 000000000..921a11a5f
--- /dev/null
+++ b/apps/analog-app/eslint.config.mjs
@@ -0,0 +1,66 @@
+import { FlatCompat } from '@eslint/eslintrc';
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+import js from '@eslint/js';
+import baseConfig from '../../eslint.config.mjs';
+
+const compat = new FlatCompat({
+ baseDirectory: dirname(fileURLToPath(import.meta.url)),
+ recommendedConfig: js.configs.recommended,
+});
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ ...compat
+ .config({
+ extends: [
+ 'plugin:@nx/angular',
+ 'plugin:@angular-eslint/template/process-inline-templates',
+ ],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.ts'],
+ rules: {
+ ...config.rules,
+ '@angular-eslint/directive-selector': [
+ 'error',
+ {
+ type: 'attribute',
+ prefix: 'analogjs',
+ style: 'camelCase',
+ },
+ ],
+ '@angular-eslint/component-selector': [
+ 'error',
+ {
+ type: 'element',
+ prefix: 'analogjs',
+ style: 'kebab-case',
+ },
+ ],
+ '@angular-eslint/prefer-standalone': 'off',
+ },
+ })),
+ ...compat
+ .config({
+ extends: ['plugin:@nx/angular-template'],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.html'],
+ rules: {
+ ...config.rules,
+ },
+ })),
+ {
+ ignores: [
+ '**/vite.config.*.timestamp*',
+ '**/vitest.config.*.timestamp*',
+ 'storybook-static',
+ ],
+ },
+];
diff --git a/apps/analog-app/project.json b/apps/analog-app/project.json
index 8b6e002cd..1d712dfc9 100644
--- a/apps/analog-app/project.json
+++ b/apps/analog-app/project.json
@@ -4,8 +4,8 @@
"projectType": "application",
"sourceRoot": "apps/analog-app/src",
"prefix": "analogjs",
- "implicitDependencies": ["vitest-angular", "storybook-angular"],
"tags": [],
+ "implicitDependencies": ["vitest-angular", "storybook-angular"],
"targets": {
"build": {
"executor": "@nx/vite:build",
@@ -70,7 +70,7 @@
"dependsOn": ["^build"]
},
"storybook": {
- "executor": "@analogjs/storybook-angular:start-storybook",
+ "executor": "@benpsnyder/analogjs-esm-storybook-angular:start-storybook",
"dependsOn": ["^build"],
"options": {
"configDir": "apps/analog-app/.storybook",
@@ -80,7 +80,7 @@
}
},
"build-storybook": {
- "executor": "@analogjs/storybook-angular:build-storybook",
+ "executor": "@benpsnyder/analogjs-esm-storybook-angular:build-storybook",
"options": {
"configDir": "apps/analog-app/.storybook",
"compodoc": false,
diff --git a/apps/analog-app/src/app/app.component.spec.ts b/apps/analog-app/src/app/app.component.spec.ts
index 663157b05..c81f14a0d 100644
--- a/apps/analog-app/src/app/app.component.spec.ts
+++ b/apps/analog-app/src/app/app.component.spec.ts
@@ -1,7 +1,7 @@
import { TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from './app.component';
-import { TopBarComponent } from '@analogjs/top-bar';
+import { TopBarComponent } from '@benpsnyder/analogjs-esm-top-bar';
describe('AppComponent', () => {
beforeEach(async () => {
diff --git a/apps/analog-app/src/app/app.component.ts b/apps/analog-app/src/app/app.component.ts
index 74a056659..b2ad04357 100644
--- a/apps/analog-app/src/app/app.component.ts
+++ b/apps/analog-app/src/app/app.component.ts
@@ -1,6 +1,6 @@
import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
-import { TopBarComponent } from '@analogjs/top-bar';
+import { TopBarComponent } from '@benpsnyder/analogjs-esm-top-bar';
@Component({
selector: 'analogjs-root',
diff --git a/apps/analog-app/src/app/app.config.ts b/apps/analog-app/src/app/app.config.ts
index cc9784ce2..3abd484c6 100644
--- a/apps/analog-app/src/app/app.config.ts
+++ b/apps/analog-app/src/app/app.config.ts
@@ -13,7 +13,7 @@ import {
withExtraRoutes,
withDebugRoutes,
requestContextInterceptor,
-} from '@analogjs/router';
+} from '@benpsnyder/analogjs-esm-router';
import { withNavigationErrorHandler } from '@angular/router';
const fallbackRoutes = [
diff --git a/apps/analog-app/src/app/pages/(home).page.ts b/apps/analog-app/src/app/pages/(home).page.ts
index 669496e88..243db453f 100644
--- a/apps/analog-app/src/app/pages/(home).page.ts
+++ b/apps/analog-app/src/app/pages/(home).page.ts
@@ -1,4 +1,4 @@
-import { RouteMeta, injectLoad } from '@analogjs/router';
+import { RouteMeta, injectLoad } from '@benpsnyder/analogjs-esm-router';
import { Component } from '@angular/core';
import { toSignal } from '@angular/core/rxjs-interop';
import { RouterLinkWithHref } from '@angular/router';
diff --git a/apps/analog-app/src/app/pages/(home).server.ts b/apps/analog-app/src/app/pages/(home).server.ts
index ab7a41724..614366b39 100644
--- a/apps/analog-app/src/app/pages/(home).server.ts
+++ b/apps/analog-app/src/app/pages/(home).server.ts
@@ -1,5 +1,5 @@
import { setCookie } from 'h3';
-import { PageServerLoad } from '@analogjs/router';
+import { PageServerLoad } from '@benpsnyder/analogjs-esm-router';
import { Product } from '../products';
diff --git a/apps/analog-app/src/app/pages/[...slug].server.ts b/apps/analog-app/src/app/pages/[...slug].server.ts
index a5ab19bf2..ad33b083e 100644
--- a/apps/analog-app/src/app/pages/[...slug].server.ts
+++ b/apps/analog-app/src/app/pages/[...slug].server.ts
@@ -1,4 +1,4 @@
-import { PageServerLoad } from '@analogjs/router';
+import { PageServerLoad } from '@benpsnyder/analogjs-esm-router';
export function load({ params }: PageServerLoad) {
console.log('params', params);
diff --git a/apps/analog-app/src/app/pages/client/(client).page.ts b/apps/analog-app/src/app/pages/client/(client).page.ts
index 729287b03..d2a43e9e3 100644
--- a/apps/analog-app/src/app/pages/client/(client).page.ts
+++ b/apps/analog-app/src/app/pages/client/(client).page.ts
@@ -1,5 +1,5 @@
import { ChangeDetectionStrategy, Component, signal } from '@angular/core';
-import { ServerOnly } from '@analogjs/router';
+import { ServerOnly } from '@benpsnyder/analogjs-esm-router';
@Component({
imports: [ServerOnly],
diff --git a/apps/analog-app/src/app/pages/newsletter.page.ts b/apps/analog-app/src/app/pages/newsletter.page.ts
index 100e4b318..165d79e37 100644
--- a/apps/analog-app/src/app/pages/newsletter.page.ts
+++ b/apps/analog-app/src/app/pages/newsletter.page.ts
@@ -1,6 +1,6 @@
import { Component, signal } from '@angular/core';
-import { FormAction } from '@analogjs/router';
+import { FormAction } from '@benpsnyder/analogjs-esm-router';
import { type NewsletterSubmitResponse } from './newsletter.server';
diff --git a/apps/analog-app/src/app/pages/newsletter.server.ts b/apps/analog-app/src/app/pages/newsletter.server.ts
index ed74cbaa2..fd61423ca 100644
--- a/apps/analog-app/src/app/pages/newsletter.server.ts
+++ b/apps/analog-app/src/app/pages/newsletter.server.ts
@@ -3,7 +3,7 @@ import {
redirect,
json,
fail,
-} from '@analogjs/router/server/actions';
+} from '@benpsnyder/analogjs-esm-router/server/actions';
import { readFormData } from 'h3';
export type NewsletterSubmitResponse = {
diff --git a/apps/analog-app/src/app/pages/products.[productId].page.ts b/apps/analog-app/src/app/pages/products.[productId].page.ts
index 2fb3120a8..62de961b8 100644
--- a/apps/analog-app/src/app/pages/products.[productId].page.ts
+++ b/apps/analog-app/src/app/pages/products.[productId].page.ts
@@ -1,4 +1,4 @@
-import { injectActivatedRoute } from '@analogjs/router';
+import { injectActivatedRoute } from '@benpsnyder/analogjs-esm-router';
import { CurrencyPipe } from '@angular/common';
import { HttpClient } from '@angular/common/http';
import { Component, inject, OnInit } from '@angular/core';
diff --git a/apps/analog-app/src/app/pages/products.[productId].server.ts b/apps/analog-app/src/app/pages/products.[productId].server.ts
index e2b5e707d..7b071cc21 100644
--- a/apps/analog-app/src/app/pages/products.[productId].server.ts
+++ b/apps/analog-app/src/app/pages/products.[productId].server.ts
@@ -1,4 +1,4 @@
-import { PageServerLoad } from '@analogjs/router';
+import { PageServerLoad } from '@benpsnyder/analogjs-esm-router';
export const load = async ({ params, fetch }: PageServerLoad) => {
return {
diff --git a/apps/analog-app/src/app/pages/search.page.ts b/apps/analog-app/src/app/pages/search.page.ts
index 82a00e45a..6934b589b 100644
--- a/apps/analog-app/src/app/pages/search.page.ts
+++ b/apps/analog-app/src/app/pages/search.page.ts
@@ -1,6 +1,6 @@
import { Component, computed } from '@angular/core';
import { toSignal } from '@angular/core/rxjs-interop';
-import { injectLoad, FormAction } from '@analogjs/router';
+import { injectLoad, FormAction } from '@benpsnyder/analogjs-esm-router';
import type { load } from './search.server';
diff --git a/apps/analog-app/src/app/pages/search.server.ts b/apps/analog-app/src/app/pages/search.server.ts
index 58858355b..81d71bde0 100644
--- a/apps/analog-app/src/app/pages/search.server.ts
+++ b/apps/analog-app/src/app/pages/search.server.ts
@@ -1,4 +1,4 @@
-import type { PageServerLoad } from '@analogjs/router';
+import type { PageServerLoad } from '@benpsnyder/analogjs-esm-router';
import { getQuery } from 'h3';
export async function load({ event }: PageServerLoad) {
diff --git a/apps/analog-app/src/app/pages/server/(server).page.ts b/apps/analog-app/src/app/pages/server/(server).page.ts
index 1aef0a8ea..e5bcd37eb 100644
--- a/apps/analog-app/src/app/pages/server/(server).page.ts
+++ b/apps/analog-app/src/app/pages/server/(server).page.ts
@@ -1,6 +1,6 @@
-import { RouteMeta } from '@analogjs/router';
+import { RouteMeta } from '@benpsnyder/analogjs-esm-router';
-import { ServerOnly } from '@analogjs/router';
+import { ServerOnly } from '@benpsnyder/analogjs-esm-router';
export const routeMeta: RouteMeta = {
data: {
diff --git a/apps/analog-app/src/app/pages/shipping/[...slug].server.ts b/apps/analog-app/src/app/pages/shipping/[...slug].server.ts
index 3df66e3d7..97a23e191 100644
--- a/apps/analog-app/src/app/pages/shipping/[...slug].server.ts
+++ b/apps/analog-app/src/app/pages/shipping/[...slug].server.ts
@@ -1,4 +1,4 @@
-import { PageServerLoad } from '@analogjs/router';
+import { PageServerLoad } from '@benpsnyder/analogjs-esm-router';
export function load({ params }: PageServerLoad) {
console.log('slug', params?.['slug']);
diff --git a/apps/analog-app/src/app/pages/shipping/index.server.ts b/apps/analog-app/src/app/pages/shipping/index.server.ts
index f525b5acd..b5852fe19 100644
--- a/apps/analog-app/src/app/pages/shipping/index.server.ts
+++ b/apps/analog-app/src/app/pages/shipping/index.server.ts
@@ -1,5 +1,5 @@
import { parseCookies } from 'h3';
-import { PageServerLoad } from '@analogjs/router';
+import { PageServerLoad } from '@benpsnyder/analogjs-esm-router';
export const load = async ({ event }: PageServerLoad) => {
console.log('shipping');
diff --git a/apps/analog-app/src/main-cf.server.ts b/apps/analog-app/src/main-cf.server.ts
index 1d121c645..afab16178 100644
--- a/apps/analog-app/src/main-cf.server.ts
+++ b/apps/analog-app/src/main-cf.server.ts
@@ -2,8 +2,8 @@ import 'zone.js/node';
import { enableProdMode } from '@angular/core';
import { bootstrapApplication } from '@angular/platform-browser';
import { renderApplication } from '@angular/platform-server';
-import { provideServerContext } from '@analogjs/router/server';
-import { ServerContext } from '@analogjs/router/tokens';
+import { provideServerContext } from '@benpsnyder/analogjs-esm-router/server';
+import { ServerContext } from '@benpsnyder/analogjs-esm-router/tokens';
import { config } from './app/app.config.server';
import { AppComponent } from './app/app.component';
diff --git a/apps/analog-app/src/main.server.ts b/apps/analog-app/src/main.server.ts
index 3715f0e1e..dd4ca872a 100644
--- a/apps/analog-app/src/main.server.ts
+++ b/apps/analog-app/src/main.server.ts
@@ -1,6 +1,6 @@
import 'zone.js/node';
import '@angular/platform-server/init';
-import { render } from '@analogjs/router/server';
+import { render } from '@benpsnyder/analogjs-esm-router/server';
import { config } from './app/app.config.server';
import { AppComponent } from './app/app.component';
diff --git a/apps/analog-app/src/main.ts b/apps/analog-app/src/main.ts
index e77461139..d5522aa3d 100644
--- a/apps/analog-app/src/main.ts
+++ b/apps/analog-app/src/main.ts
@@ -1,4 +1,5 @@
import 'zone.js';
+import '@angular/compiler';
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app/app.component';
diff --git a/apps/analog-app/src/server/components/hello.ts b/apps/analog-app/src/server/components/hello.ts
index e7cf32db8..eb3669815 100644
--- a/apps/analog-app/src/server/components/hello.ts
+++ b/apps/analog-app/src/server/components/hello.ts
@@ -8,7 +8,7 @@ import {
import {
injectStaticOutputs,
injectStaticProps,
-} from '@analogjs/router/server';
+} from '@benpsnyder/analogjs-esm-router/server';
@Component({
selector: 'app-hello',
diff --git a/apps/analog-app/src/stories/button.stories.ts b/apps/analog-app/src/stories/button.stories.ts
index 58cbc526e..d910aedcb 100644
--- a/apps/analog-app/src/stories/button.stories.ts
+++ b/apps/analog-app/src/stories/button.stories.ts
@@ -1,4 +1,7 @@
-import type { Meta, StoryObj } from '@analogjs/storybook-angular';
+import type {
+ Meta,
+ StoryObj,
+} from '@benpsnyder/analogjs-esm-storybook-angular';
import { ButtonComponent } from './button.component';
diff --git a/apps/analog-app/src/stories/header.stories.ts b/apps/analog-app/src/stories/header.stories.ts
index 922f23a76..b426d8405 100644
--- a/apps/analog-app/src/stories/header.stories.ts
+++ b/apps/analog-app/src/stories/header.stories.ts
@@ -1,4 +1,7 @@
-import type { Meta, StoryObj } from '@analogjs/storybook-angular';
+import type {
+ Meta,
+ StoryObj,
+} from '@benpsnyder/analogjs-esm-storybook-angular';
import { HeaderComponent } from './header.component';
diff --git a/apps/analog-app/src/stories/page.stories.ts b/apps/analog-app/src/stories/page.stories.ts
index 4c4fb70dc..1af484bfa 100644
--- a/apps/analog-app/src/stories/page.stories.ts
+++ b/apps/analog-app/src/stories/page.stories.ts
@@ -1,4 +1,7 @@
-import type { Meta, StoryObj } from '@analogjs/storybook-angular';
+import type {
+ Meta,
+ StoryObj,
+} from '@benpsnyder/analogjs-esm-storybook-angular';
import { within, userEvent, expect } from 'storybook/test';
import { PageComponent } from './page.component';
diff --git a/apps/analog-app/src/test-setup.ts b/apps/analog-app/src/test-setup.ts
index 704df181c..59700a68b 100644
--- a/apps/analog-app/src/test-setup.ts
+++ b/apps/analog-app/src/test-setup.ts
@@ -1,4 +1,4 @@
-import '@analogjs/vite-plugin-angular/setup-vitest';
+import '@benpsnyder/analogjs-esm-vite-plugin-angular/setup-vitest';
import {
BrowserDynamicTestingModule,
diff --git a/apps/analog-app/tsconfig.app.json b/apps/analog-app/tsconfig.app.json
index 3d713f612..95e3d2018 100644
--- a/apps/analog-app/tsconfig.app.json
+++ b/apps/analog-app/tsconfig.app.json
@@ -3,7 +3,6 @@
"compilerOptions": {
"outDir": "../../dist/out-tsc",
"types": [],
- "target": "ES2022",
"useDefineForClassFields": false
},
"files": ["src/main.ts", "src/main.server.ts"],
diff --git a/apps/analog-app/tsconfig.json b/apps/analog-app/tsconfig.json
index 084295db3..81ffa3611 100644
--- a/apps/analog-app/tsconfig.json
+++ b/apps/analog-app/tsconfig.json
@@ -17,14 +17,8 @@
}
],
"compilerOptions": {
- "target": "es2020",
"forceConsistentCasingInFileNames": true,
- "strict": true,
- "noImplicitOverride": true,
- "noPropertyAccessFromIndexSignature": true,
- "noImplicitReturns": true,
- "noFallthroughCasesInSwitch": true,
- "resolveJsonModule": true
+ "noImplicitReturns": true
},
"angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false,
diff --git a/apps/analog-app/vite.config.ts b/apps/analog-app/vite.config.ts
index 3903c9399..9fa8bd920 100644
--- a/apps/analog-app/vite.config.ts
+++ b/apps/analog-app/vite.config.ts
@@ -1,6 +1,6 @@
///
-import analog from '@analogjs/platform';
+import analog from '@benpsnyder/analogjs-esm-platform';
import { visualizer } from 'rollup-plugin-visualizer';
import { defineConfig, Plugin } from 'vite';
import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
diff --git a/apps/analog-preset-e2e/tests/analog-preset.spec.ts b/apps/analog-preset-e2e/tests/analog-preset.spec.ts
index 38ee03935..317a9595d 100644
--- a/apps/analog-preset-e2e/tests/analog-preset.spec.ts
+++ b/apps/analog-preset-e2e/tests/analog-preset.spec.ts
@@ -7,7 +7,7 @@ describe('analog-preset-e2e', () => {
const tmpDir = `${process.cwd()}/${project}`;
await runCommandAsync(
- `npx create-nx-workspace@latest ${project} --preset @analogjs/platform --analogAppName analog-app --no-nx-cloud`,
+ `npx create-nx-workspace@latest ${project} --preset @benpsnyder/analogjs-esm-platform --analogAppName analog-app --no-nx-cloud`,
{ cwd: process.cwd() },
);
diff --git a/apps/astro-app-e2e-playwright/.eslintrc.json b/apps/astro-app-e2e-playwright/.eslintrc.json
deleted file mode 100644
index c3eaca421..000000000
--- a/apps/astro-app-e2e-playwright/.eslintrc.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": [
- "!**/*",
- "**/vite.config.*.timestamp*",
- "**/vitest.config.*.timestamp*"
- ],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["src/plugins/index.js"],
- "rules": {
- "@typescript-eslint/no-var-requires": "off",
- "no-undef": "off"
- }
- }
- ]
-}
diff --git a/apps/astro-app-e2e-playwright/eslint.config.mjs b/apps/astro-app-e2e-playwright/eslint.config.mjs
new file mode 100644
index 000000000..57515642e
--- /dev/null
+++ b/apps/astro-app-e2e-playwright/eslint.config.mjs
@@ -0,0 +1,23 @@
+import baseConfig from '../../eslint.config.mjs';
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ {
+ files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
+ // Override or add rules here
+ rules: {},
+ },
+ {
+ files: ['src/plugins/index.js'],
+ rules: {
+ '@typescript-eslint/no-var-requires': 'off',
+ 'no-undef': 'off',
+ },
+ },
+ {
+ ignores: ['**/vite.config.*.timestamp*', '**/vitest.config.*.timestamp*'],
+ },
+];
diff --git a/apps/astro-app/.astro/settings.json b/apps/astro-app/.astro/settings.json
deleted file mode 100644
index dd97b8205..000000000
--- a/apps/astro-app/.astro/settings.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "_variables": {
- "lastUpdateCheck": 1743174745314
- }
-}
diff --git a/apps/astro-app/src/components/todos.component.ts b/apps/astro-app/src/components/todos.component.ts
index fdcaef14e..2546dc278 100644
--- a/apps/astro-app/src/components/todos.component.ts
+++ b/apps/astro-app/src/components/todos.component.ts
@@ -1,4 +1,4 @@
-import { Component, OnInit, inject } from '@angular/core';
+import { Component, type OnInit, inject } from '@angular/core';
import { NgFor } from '@angular/common';
import { provideHttpClient, HttpClient } from '@angular/common/http';
@@ -31,6 +31,8 @@ export class TodosComponent implements OnInit {
ngOnInit() {
this.http
.get('https://jsonplaceholder.typicode.com/todos')
- .subscribe((todos) => (this.todos = todos));
+ .subscribe((todos) => {
+ this.todos = todos;
+ });
}
}
diff --git a/apps/astro-app/src/pages/index.astro b/apps/astro-app/src/pages/index.astro
index 9316708d9..c1b7c5801 100644
--- a/apps/astro-app/src/pages/index.astro
+++ b/apps/astro-app/src/pages/index.astro
@@ -1,9 +1,9 @@
---
import Layout from '../layouts/Layout.astro';
import Card from '../components/Card.astro';
-import { CardComponent } from '../components/card.component.ts';
+import { CardComponent } from '../components/card.component';
import { Instructions } from '../components/Instructions';
-import { TodosComponent } from '../components/todos.component.ts';
+import { TodosComponent } from '../components/todos.component';
const serverSideTitle = 'Angular (server side binding)';
---
diff --git a/apps/astro-app/src/pages/test.mdx b/apps/astro-app/src/pages/test.mdx
index b3dc08637..b10c6902a 100644
--- a/apps/astro-app/src/pages/test.mdx
+++ b/apps/astro-app/src/pages/test.mdx
@@ -1,4 +1,4 @@
-import { CardComponent } from '../components/card.component.ts';
+import { CardComponent } from '../components/card.component';
Angular Component in an MDX file
diff --git a/apps/astro-app/tsconfig.app.json b/apps/astro-app/tsconfig.app.json
index 1744525fc..c60168eca 100644
--- a/apps/astro-app/tsconfig.app.json
+++ b/apps/astro-app/tsconfig.app.json
@@ -18,7 +18,6 @@
"importHelpers": true,
"noEmit": false,
"target": "es2020",
- "module": "es2020",
"lib": ["es2020", "dom"],
"skipLibCheck": true,
"ignoreDeprecations": "5.0"
diff --git a/apps/blog-app-e2e-cypress/.eslintrc.json b/apps/blog-app-e2e-cypress/.eslintrc.json
deleted file mode 100644
index 696cb8b12..000000000
--- a/apps/blog-app-e2e-cypress/.eslintrc.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "extends": ["plugin:cypress/recommended", "../../.eslintrc.json"],
- "ignorePatterns": ["!**/*"],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- }
- ]
-}
diff --git a/apps/blog-app-e2e-cypress/eslint.config.mjs b/apps/blog-app-e2e-cypress/eslint.config.mjs
new file mode 100644
index 000000000..1c62a3fd2
--- /dev/null
+++ b/apps/blog-app-e2e-cypress/eslint.config.mjs
@@ -0,0 +1,23 @@
+import { FlatCompat } from '@eslint/eslintrc';
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+import js from '@eslint/js';
+import baseConfig from '../../eslint.config.mjs';
+
+const compat = new FlatCompat({
+ baseDirectory: dirname(fileURLToPath(import.meta.url)),
+ recommendedConfig: js.configs.recommended,
+});
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ ...compat.extends('plugin:cypress/recommended'),
+ {
+ files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
+ // Override or add rules here
+ rules: {},
+ },
+];
diff --git a/apps/blog-app-e2e-cypress/src/e2e/app.cy.ts b/apps/blog-app-e2e-cypress/src/e2e/app.cy.ts
index 6d75a9db4..1d93fed88 100644
--- a/apps/blog-app-e2e-cypress/src/e2e/app.cy.ts
+++ b/apps/blog-app-e2e-cypress/src/e2e/app.cy.ts
@@ -6,7 +6,12 @@ describe('blog-app', () => {
});
it('should serve up HTML for pre-rendered markdown route', () => {
cy.visit('/blog/2022-12-27-my-first-post');
- cy.get('h1').should('contain', 'My First Post');
+
+ // Wait for the page to load and the Angular app to be ready
+ cy.get('blog-root', { timeout: 10000 }).should('exist');
+
+ // Wait for the h1 element and check its content
+ cy.get('h1', { timeout: 10000 }).should('contain', 'My First Post');
});
it('should serve up XML for pre-rendered XML route from vite.config at /api/rss.xml', () => {
cy.request('/api/rss.xml')
diff --git a/apps/blog-app/src/app/app.config.ts b/apps/blog-app/src/app/app.config.ts
index bc3e4f1b3..b05c81eb0 100644
--- a/apps/blog-app/src/app/app.config.ts
+++ b/apps/blog-app/src/app/app.config.ts
@@ -1,6 +1,9 @@
-import { provideContent, withMarkdownRenderer } from '@analogjs/content';
-import { withShikiHighlighter } from '@analogjs/content/shiki-highlighter';
-import { provideFileRouter } from '@analogjs/router';
+import {
+ provideContent,
+ withMarkdownRenderer,
+} from '@benpsnyder/analogjs-esm-content';
+import { withShikiHighlighter } from '@benpsnyder/analogjs-esm-content/shiki-highlighter';
+import { provideFileRouter } from '@benpsnyder/analogjs-esm-router';
import { provideHttpClient } from '@angular/common/http';
import { ApplicationConfig } from '@angular/core';
import { provideClientHydration } from '@angular/platform-browser';
diff --git a/apps/blog-app/src/app/pages/archived/[slug].page.ts b/apps/blog-app/src/app/pages/archived/[slug].page.ts
index 3fcfc9ae6..f8a47d663 100644
--- a/apps/blog-app/src/app/pages/archived/[slug].page.ts
+++ b/apps/blog-app/src/app/pages/archived/[slug].page.ts
@@ -2,8 +2,8 @@ import {
ContentRenderer,
injectContent,
MarkdownComponent,
-} from '@analogjs/content';
-import { RouteMeta } from '@analogjs/router';
+} from '@benpsnyder/analogjs-esm-content';
+import { RouteMeta } from '@benpsnyder/analogjs-esm-router';
import { AsyncPipe, JsonPipe, NgFor, NgIf } from '@angular/common';
import { Component, inject } from '@angular/core';
import { map } from 'rxjs';
diff --git a/apps/blog-app/src/app/pages/archived/index.page.ts b/apps/blog-app/src/app/pages/archived/index.page.ts
index 2dbd42218..3fdd77d29 100644
--- a/apps/blog-app/src/app/pages/archived/index.page.ts
+++ b/apps/blog-app/src/app/pages/archived/index.page.ts
@@ -1,4 +1,4 @@
-import { injectContentFiles } from '@analogjs/content';
+import { injectContentFiles } from '@benpsnyder/analogjs-esm-content';
import { Component } from '@angular/core';
import { ArchivedPostAttributes } from './models';
import { RouterLink } from '@angular/router';
diff --git a/apps/blog-app/src/app/pages/archived/resolvers.ts b/apps/blog-app/src/app/pages/archived/resolvers.ts
index 118bc3751..e43559465 100644
--- a/apps/blog-app/src/app/pages/archived/resolvers.ts
+++ b/apps/blog-app/src/app/pages/archived/resolvers.ts
@@ -1,5 +1,5 @@
-import { injectContentFiles } from '@analogjs/content';
-import { MetaTag } from '@analogjs/router';
+import { injectContentFiles } from '@benpsnyder/analogjs-esm-content';
+import { MetaTag } from '@benpsnyder/analogjs-esm-router';
import { ActivatedRouteSnapshot, ResolveFn } from '@angular/router';
import { ArchivedPostAttributes } from './models';
diff --git a/apps/blog-app/src/app/pages/blog/[slug].page.ts b/apps/blog-app/src/app/pages/blog/[slug].page.ts
index 32f71681f..03fdec036 100644
--- a/apps/blog-app/src/app/pages/blog/[slug].page.ts
+++ b/apps/blog-app/src/app/pages/blog/[slug].page.ts
@@ -2,8 +2,8 @@ import {
ContentRenderer,
injectContent,
MarkdownComponent,
-} from '@analogjs/content';
-import { RouteMeta } from '@analogjs/router';
+} from '@benpsnyder/analogjs-esm-content';
+import { RouteMeta } from '@benpsnyder/analogjs-esm-router';
import { AsyncPipe, JsonPipe, NgFor, NgIf } from '@angular/common';
import { Component, inject } from '@angular/core';
import { map } from 'rxjs';
diff --git a/apps/blog-app/src/app/pages/blog/index.page.ts b/apps/blog-app/src/app/pages/blog/index.page.ts
index 8f74b6eed..98b4d0ac6 100644
--- a/apps/blog-app/src/app/pages/blog/index.page.ts
+++ b/apps/blog-app/src/app/pages/blog/index.page.ts
@@ -1,4 +1,4 @@
-import { injectContentFiles } from '@analogjs/content';
+import { injectContentFiles } from '@benpsnyder/analogjs-esm-content';
import { Component } from '@angular/core';
import { PostAttributes } from './models';
import { RouterLink } from '@angular/router';
diff --git a/apps/blog-app/src/app/pages/blog/resolvers.ts b/apps/blog-app/src/app/pages/blog/resolvers.ts
index 5402abd59..6dd605db6 100644
--- a/apps/blog-app/src/app/pages/blog/resolvers.ts
+++ b/apps/blog-app/src/app/pages/blog/resolvers.ts
@@ -1,5 +1,5 @@
-import { injectContentFiles } from '@analogjs/content';
-import { MetaTag } from '@analogjs/router';
+import { injectContentFiles } from '@benpsnyder/analogjs-esm-content';
+import { MetaTag } from '@benpsnyder/analogjs-esm-router';
import { ActivatedRouteSnapshot, ResolveFn } from '@angular/router';
import { PostAttributes } from './models';
diff --git a/apps/blog-app/src/app/pages/index.page.ts b/apps/blog-app/src/app/pages/index.page.ts
index 9811ea22a..731111fcd 100644
--- a/apps/blog-app/src/app/pages/index.page.ts
+++ b/apps/blog-app/src/app/pages/index.page.ts
@@ -1,4 +1,4 @@
-import { RouteMeta } from '@analogjs/router';
+import { RouteMeta } from '@benpsnyder/analogjs-esm-router';
export const routeMeta: RouteMeta = {
redirectTo: '/blog',
diff --git a/apps/blog-app/src/main.server.ts b/apps/blog-app/src/main.server.ts
index 3715f0e1e..dd4ca872a 100644
--- a/apps/blog-app/src/main.server.ts
+++ b/apps/blog-app/src/main.server.ts
@@ -1,6 +1,6 @@
import 'zone.js/node';
import '@angular/platform-server/init';
-import { render } from '@analogjs/router/server';
+import { render } from '@benpsnyder/analogjs-esm-router/server';
import { config } from './app/app.config.server';
import { AppComponent } from './app/app.component';
diff --git a/apps/blog-app/src/server/routes/v1/[...slug].ts b/apps/blog-app/src/server/routes/v1/[...slug].ts
index 5ad4d9f6c..3c0207680 100644
--- a/apps/blog-app/src/server/routes/v1/[...slug].ts
+++ b/apps/blog-app/src/server/routes/v1/[...slug].ts
@@ -1,6 +1,6 @@
import { defineEventHandler, getQuery, getRequestURL } from 'h3';
-import { ImageResponse } from '@analogjs/content/og';
+import { ImageResponse } from '@benpsnyder/analogjs-esm-content/og';
export default defineEventHandler(async (event) => {
const fontFile = await fetch(
@@ -22,7 +22,7 @@ export default defineEventHandler(async (event) => {
${query['title'] ? `${query['title']}` : 'Hello World'}
-
+
`;
return new ImageResponse(template, {
diff --git a/apps/blog-app/tsconfig.json b/apps/blog-app/tsconfig.json
index 073154256..a40eac889 100644
--- a/apps/blog-app/tsconfig.json
+++ b/apps/blog-app/tsconfig.json
@@ -1,13 +1,8 @@
{
"compilerOptions": {
- "target": "es2022",
"useDefineForClassFields": false,
"forceConsistentCasingInFileNames": true,
- "strict": true,
- "noImplicitOverride": true,
- "noPropertyAccessFromIndexSignature": true,
- "noImplicitReturns": true,
- "noFallthroughCasesInSwitch": true
+ "noImplicitReturns": true
},
"files": [],
"include": [],
diff --git a/apps/blog-app/vite.config.ts b/apps/blog-app/vite.config.ts
index ac0413bf4..3b563fa11 100644
--- a/apps/blog-app/vite.config.ts
+++ b/apps/blog-app/vite.config.ts
@@ -1,9 +1,10 @@
///
-import analog, { type PrerenderContentFile } from '@analogjs/platform';
+import analog, {
+ type PrerenderContentFile,
+} from '@benpsnyder/analogjs-esm-platform';
import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
import { defineConfig } from 'vite';
-import fs from 'node:fs';
// Only run in Netlify CI
let base = process.env['URL'] || 'http://localhost:3000';
diff --git a/apps/create-analog-e2e/tests/create-analog.spec.ts b/apps/create-analog-e2e/tests/create-analog.spec.ts
index e7c99edbe..d38ebd813 100644
--- a/apps/create-analog-e2e/tests/create-analog.spec.ts
+++ b/apps/create-analog-e2e/tests/create-analog.spec.ts
@@ -145,7 +145,7 @@ describe.skip('create-analog e2e', () => {
// ensure highlighter is added
expect(appConfigContent).toContain(
- `import { withPrismHighlighter } from '@analogjs/content/prism-highlighter'`,
+ `import { withPrismHighlighter } from '@benpsnyder/analogjs-esm-content/prism-highlighter'`,
);
expect(() =>
diff --git a/apps/docs-app/.gitignore b/apps/docs-app/.gitignore
new file mode 100644
index 000000000..378eac25d
--- /dev/null
+++ b/apps/docs-app/.gitignore
@@ -0,0 +1 @@
+build
diff --git a/apps/docs-app/babel.config.js b/apps/docs-app/babel.config.js
deleted file mode 100644
index e00595dae..000000000
--- a/apps/docs-app/babel.config.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
-};
diff --git a/apps/docs-app/docs/contributing.md b/apps/docs-app/docs/contributing.md
index a5b461283..24bfb8d76 100644
--- a/apps/docs-app/docs/contributing.md
+++ b/apps/docs-app/docs/contributing.md
@@ -1,6 +1,25 @@
---
sidebar_position: 4
-title: Contributing
+title: Contributing to Analog - How to Help
+description: Learn how to contribute to Analog. Find guidelines for bug reports, feature requests, pull requests, and development setup. Join the Analog community and help improve the framework.
+keywords:
+ [
+ 'contributing',
+ 'open source',
+ 'pull requests',
+ 'bug reports',
+ 'feature requests',
+ 'development',
+ 'community',
+ ]
+image: https://analogjs.org/img/analog-banner.png
+url: https://analogjs.org/docs/contributing
+type: documentation
+author: Analog Team
+publishedTime: '2022-01-01T00:00:00.000Z'
+modifiedTime: '2024-01-01T00:00:00.000Z'
+section: Contributing
+tags: ['contributing', 'open-source', 'development']
---
import Contributing, { toc as ContributingToc } from '../../../CONTRIBUTING.md';
diff --git a/apps/docs-app/docs/integrations/ionic/index.md b/apps/docs-app/docs/integrations/ionic/index.md
index 7fbc36aa9..75e2d74e3 100644
--- a/apps/docs-app/docs/integrations/ionic/index.md
+++ b/apps/docs-app/docs/integrations/ionic/index.md
@@ -239,7 +239,6 @@ export default defineConfig(({ mode }) => {
Ionic Framework [doesn't support Angular's new Client Hydration](https://github.com/ionic-team/ionic-framework/issues/28625#issuecomment-1843919548), as Angular [doesn't support SSR with web components](https://github.com/angular/angular/issues/52275), and when they are supported, work has to be done on the Stencil components to enable it. So right now there are three options to handle this:
1. Remove `provideClientHydration()` from `app.config.ts` providers.
-
- This removes the new client hydration mechanism from Angular and reverts to the previous one, which will cause a flicker when re-rendering the DOM from the client.
```ts
@@ -261,7 +260,6 @@ Ionic Framework [doesn't support Angular's new Client Hydration](https://github.
```
2. Add `ngSkipHydration` attribute to the `ion-app` tag.
-
- This will disable the client hydration mechanism for the `ion-app` element and children, but will continue to use client hydration on other elements. This will also cause a flicker in the page for the Ionic components. This is not that helpful for other elements/components as, with Ionic apps, all your Ionic components exist inside the `ion-app` tag.
```ts
@@ -282,7 +280,6 @@ Ionic Framework [doesn't support Angular's new Client Hydration](https://github.
```
3. Disable SSR completely
-
- Disable SSR in the `vite.config.ts` file. This **will eliminate the flickering** but you will lose all the benefits of having SSR in your app.
```ts
diff --git a/apps/docs-app/docusaurus.config.js b/apps/docs-app/docusaurus.config.ts
similarity index 60%
rename from apps/docs-app/docusaurus.config.js
rename to apps/docs-app/docusaurus.config.ts
index e9582530f..faf0dbb78 100644
--- a/apps/docs-app/docusaurus.config.js
+++ b/apps/docs-app/docusaurus.config.ts
@@ -1,20 +1,33 @@
// @ts-check
-
import fs from 'node:fs';
import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { dirname, join } from 'node:path';
+import type { Config } from '@docusaurus/types';
+import type * as Preset from '@docusaurus/preset-classic';
+
import { themes } from 'prism-react-renderer';
-themes.nightOwl['plain'].backgroundColor = '#0a1429';
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = dirname(__filename);
+themes.nightOwl['plain'].backgroundColor = '#0a1429';
const organizationName = 'analogjs';
const projectName = 'analog';
const title = 'Analog';
const url = 'https://analogjs.org';
-
const DOCUSAURUS_BASE_URL = process.env.DOCUSAURUS_BASE_URL ?? '/docs';
-/** @type {import('@docusaurus/types').Config} */
-const config = {
+const config: Config = {
baseUrl: '/',
+ // Performance improvements with Docusaurus Faster and v4 future flags
+ future: {
+ experimental_faster: true,
+ v4: true,
+ },
+ // Enable mermaid diagrams
+ markdown: {
+ mermaid: true,
+ },
// Even if you don't use internalization, you can use this field to set useful
// metadata like html lang. For example, if your site is Chinese, you may want
// to replace "en" with "zh-Hans".
@@ -55,6 +68,13 @@ const config = {
onBrokenMarkdownLinks: 'throw',
organizationName,
plugins: [
+ // Rsdoctor plugin for build analysis (enabled via RSDOCTOR=true environment variable)
+ process.env.RSDOCTOR === 'true' && [
+ 'rsdoctor',
+ {
+ /* options */
+ },
+ ],
// Adapted from https://github.com/prisma/docs/blob/22208d52e4168028dbbe8b020b10682e6b526e50/docusaurus.config.ts
async function pluginLlmsTxt(context) {
return {
@@ -63,28 +83,22 @@ const config = {
const { siteDir } = context;
const contentDir = path.join(siteDir, 'docs');
const allMdx = [];
-
// recursive function to get all mdx files
const getMdFiles = async (dir) => {
const entries = await fs.promises.readdir(dir, {
withFileTypes: true,
});
-
for (const entry of entries) {
const fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
await getMdFiles(fullPath);
} else if (entry.name.endsWith('.md')) {
const content = await fs.promises.readFile(fullPath, 'utf8');
-
// extract title from frontmatter if it exists
const titleMatch = content.match(/^#\s(.*?)$/m);
-
const title = titleMatch ? titleMatch[1] : '';
-
// Get the relative path for URL construction
const relativePath = path.relative(contentDir, fullPath);
-
// Convert file path to URL path by:
// 1. Removing numeric prefixes (like 100-, 01-, etc.)
// 2. Removing the .md extension
@@ -93,69 +107,56 @@ const config = {
.replace(/\/\d+-/g, '/')
.replace(/index\.md$/, '')
.replace(/\.md$/, '');
-
// Construct the full URL
const fullUrl = `https://analogjs.org/docs/${urlPath}`;
-
// strip frontmatter
const contentWithoutFrontmatter = content.replace(
/^---\n[\s\S]*?\n---\n/,
'',
);
-
// combine title and content with URL
const contentWithTitle = title
? `# ${title}\n\nURL: ${fullUrl}\n${contentWithoutFrontmatter}`
: contentWithoutFrontmatter;
-
allMdx.push(contentWithTitle);
}
}
};
-
await getMdFiles(contentDir);
return { allMdx };
},
postBuild: async ({ content, routes, outDir }) => {
const { allMdx } = content;
-
// Write concatenated MDX content
const concatenatedPath = path.join(outDir, 'llms-full.txt');
await fs.promises.writeFile(
concatenatedPath,
allMdx.join('\n---\n\n'),
);
-
// we need to dig down several layers:
// find PluginRouteConfig marked by plugin.name === "docusaurus-plugin-content-docs"
const docsPluginRouteConfig = routes.filter(
(route) => route.plugin.name === 'docusaurus-plugin-content-docs',
)[0];
-
// docsPluginRouteConfig has a routes property has a record with the path "/" that contains all docs routes.
const allDocsRouteConfig = docsPluginRouteConfig.routes?.filter(
(route) => route.path === DOCUSAURUS_BASE_URL,
)[0];
-
// A little type checking first
if (!allDocsRouteConfig?.props?.version) {
return;
}
-
// this route config has a `props` property that contains the current documentation.
const currentVersionDocsRoutes =
allDocsRouteConfig.props.version.docs;
-
// for every single docs route we now parse a path (which is the key) and a title
const docsRecords = Object.entries(currentVersionDocsRoutes)
.filter(([path, rec]) => !!rec.title && !!path)
.map(([path, record]) => {
return `- [${record.title}](${url}${DOCUSAURUS_BASE_URL}/${path.replace('/index', '')}): ${record.description || record.title}`;
});
-
// Build up llms.txt file
const llmsTxt = `# ${context.siteConfig.title}\n\n## Docs\n\n${docsRecords.join('\n')}\n`;
-
// Write llms.txt file
const llmsTxtPath = path.join(outDir, 'llms.txt');
await fs.promises.writeFile(llmsTxtPath, llmsTxt);
@@ -166,141 +167,164 @@ const config = {
presets: [
[
'classic',
- /** @type {import('@docusaurus/preset-classic').Options} */
- ({
+ {
blog: false,
docs: {
editUrl: `https://github.com/${organizationName}/${projectName}/edit/main/apps/docs-app`,
- sidebarPath: require.resolve('./sidebars.js'),
+ sidebarPath: join(__dirname, 'sidebars.ts'),
},
theme: {
- customCss: require.resolve('./src/css/custom.css'),
+ customCss: join(__dirname, 'src/css/custom.css'),
},
- }),
+ svgr: {
+ svgrConfig: {
+ // SVGR options for better SVG optimization
+ svgoConfig: {
+ plugins: [
+ {
+ name: 'preset-default',
+ params: {
+ overrides: {
+ removeViewBox: false,
+ },
+ },
+ },
+ ],
+ },
+ },
+ },
+ } satisfies Preset.Options,
],
],
+ // Add mermaid theme
+ themes: ['@docusaurus/theme-mermaid'],
projectName,
tagline: 'The fullstack Angular meta-framework',
- themeConfig:
- /** @type {import('@docusaurus/preset-classic').ThemeConfig} */
- ({
- colorMode: {
- respectPrefersColorScheme: true,
+ themeConfig: {
+ colorMode: {
+ respectPrefersColorScheme: true,
+ },
+ metadata: [
+ {
+ name: 'twitter:image',
+ content: 'https://analogjs.org/img/analog-banner.png',
},
- metadata: [
+ ],
+ image: 'img/analog-banner.png',
+ footer: {
+ logo: {
+ alt: 'Analog logo',
+ href: '/',
+ src: 'img/logos/analog-logo.svg',
+ },
+ links: [
{
- name: 'twitter:image',
- content: 'https://analogjs.org/img/analog-banner.png',
+ title: 'Documentation',
+ items: [
+ {
+ label: 'Introduction',
+ to: 'docs',
+ },
+ {
+ label: 'Getting Started',
+ to: 'docs/getting-started',
+ },
+ ],
},
- ],
- image: 'img/analog-banner.png',
- footer: {
- logo: {
- alt: 'Analog logo',
- href: '/',
- src: 'img/logos/analog-logo.svg',
+ {
+ title: 'Open source',
+ items: [
+ {
+ label: 'Contributors',
+ to: 'docs/contributors',
+ },
+ {
+ label: 'Contributing',
+ to: 'docs/contributing',
+ },
+ {
+ label: 'Sponsoring',
+ to: 'docs/sponsoring',
+ },
+ ],
},
- links: [
- {
- title: 'Documentation',
- items: [
- {
- label: 'Introduction',
- to: 'docs',
- },
- {
- label: 'Getting Started',
- to: 'docs/getting-started',
- },
- ],
- },
- {
- title: 'Open source',
- items: [
- {
- label: 'Contributors',
- to: 'docs/contributors',
- },
- {
- label: 'Contributing',
- to: 'docs/contributing',
- },
- {
- label: 'Sponsoring',
- to: 'docs/sponsoring',
- },
- ],
- },
- {
- title: 'More',
- items: [
- {
- label: 'GitHub',
- href: `https://github.com/${organizationName}/${projectName}`,
- },
- {
- label: 'Stack Overflow',
- href: 'https://stackoverflow.com/questions/tagged/analogjs',
- },
- ],
- },
- ],
- copyright: `
+ {
+ title: 'More',
+ items: [
+ {
+ label: 'GitHub',
+ href: `https://github.com/${organizationName}/${projectName}`,
+ },
+ {
+ label: 'Stack Overflow',
+ href: 'https://stackoverflow.com/questions/tagged/analogjs',
+ },
+ ],
+ },
+ ],
+ copyright: `
Copyright © 2022-${new Date().getFullYear()} Analog. Licensed under MIT.
`,
+ },
+ navbar: {
+ title,
+ hideOnScroll: true,
+ logo: {
+ alt: 'Analog logo',
+ src: 'img/logos/analog-logo.svg',
},
- navbar: {
- title,
- hideOnScroll: true,
- logo: {
- alt: 'Analog logo',
- src: 'img/logos/analog-logo.svg',
+ items: [
+ {
+ activeBasePath: 'docs',
+ label: 'Docs',
+ position: 'left',
+ to: 'docs',
},
- items: [
- {
- activeBasePath: 'docs',
- label: 'Docs',
- position: 'left',
- to: 'docs',
- },
- {
- activeBasePath: 'docs',
- label: 'Support',
- position: 'left',
- to: 'docs/support',
- },
- {
- href: `https://github.com/${organizationName}/${projectName}`,
- label: 'GitHub',
- position: 'right',
- },
- {
- href: 'https://chat.analogjs.org',
- label: 'Discord',
- position: 'right',
- },
- {
- type: 'localeDropdown',
- position: 'right',
- },
- ],
- },
- prism: {
- defaultLanguage: 'typescript',
- theme: themes.nightOwlLight,
- darkTheme: themes.nightOwl,
- additionalLanguages: ['toml', 'json', 'bash'],
- },
- algolia: {
- appId: '8W3CAMYOQF',
- apiKey: '650d723674c8cd38658add35fb9433e3',
- indexName: 'analogjs',
+ {
+ activeBasePath: 'docs',
+ label: 'Support',
+ position: 'left',
+ to: 'docs/support',
+ },
+ {
+ href: `https://github.com/${organizationName}/${projectName}`,
+ label: 'GitHub',
+ position: 'right',
+ },
+ {
+ href: 'https://chat.analogjs.org',
+ label: 'Discord',
+ position: 'right',
+ },
+ {
+ type: 'localeDropdown',
+ position: 'right',
+ },
+ ],
+ },
+ prism: {
+ defaultLanguage: 'typescript',
+ theme: themes.nightOwlLight,
+ darkTheme: themes.nightOwl,
+ additionalLanguages: ['toml', 'json', 'bash'],
+ },
+ // Mermaid diagram configuration
+ mermaid: {
+ theme: { light: 'neutral', dark: 'forest' },
+ options: {
+ maxTextSize: 50,
},
- }),
+ },
+ algolia: {
+ appId: '8W3CAMYOQF',
+ apiKey: '650d723674c8cd38658add35fb9433e3',
+ indexName: 'analogjs',
+ },
+ } satisfies Preset.ThemeConfig,
title,
// GitHub Pages adds a trailing slash to Docusaurus URLs by default.
trailingSlash: false,
url,
};
-module.exports = config;
+export default config;
diff --git a/apps/docs-app/i18n/de/docusaurus-theme-classic/footer.json b/apps/docs-app/i18n/de/docusaurus-theme-classic/footer.json
index 5740f5703..55a21abf5 100644
--- a/apps/docs-app/i18n/de/docusaurus-theme-classic/footer.json
+++ b/apps/docs-app/i18n/de/docusaurus-theme-classic/footer.json
@@ -33,7 +33,7 @@
},
"link.item.label.GitHub": {
"message": "GitHub",
- "description": "The label of footer link with label=GitHub linking to https://github.com/analogjs/analog"
+ "description": "The label of footer link with label=GitHub linking to https://github.com/benpsnyder/analog"
},
"link.item.label.Stack Overflow": {
"message": "Stack Overflow",
diff --git a/apps/docs-app/i18n/es/docusaurus-plugin-content-docs/current/integrations/ionic/index.md b/apps/docs-app/i18n/es/docusaurus-plugin-content-docs/current/integrations/ionic/index.md
index d62ff39e1..6ef2347bf 100644
--- a/apps/docs-app/i18n/es/docusaurus-plugin-content-docs/current/integrations/ionic/index.md
+++ b/apps/docs-app/i18n/es/docusaurus-plugin-content-docs/current/integrations/ionic/index.md
@@ -240,7 +240,6 @@ pnpm install ionicons
El **Ionic Framework** [no soporta la nueva Hidratación del Cliente de Angular](https://github.com/ionic-team/ionic-framework/issues/28625#issuecomment-1843919548), ya que Angular [no soporta SSR con web components](https://github.com/angular/angular/issues/52275), y cuando sean soportados, se deberá trabajar en los componentes de **Stencil** para habilitarlo. Por lo tanto, actualmente hay tres opciones para manejar esto:
1. **Eliminar `provideClientHydration()`** de los proveedores en `app.config.ts`.
-
- Esto elimina el nuevo mecanismo de hidratación del cliente de Angular y vuelve al anterior, lo que causará un parpadeo al re-renderizar el DOM desde el cliente.
```ts
@@ -262,7 +261,6 @@ El **Ionic Framework** [no soporta la nueva Hidratación del Cliente de Angular]
```
2. **Agregar el atributo `ngSkipHydration`** a la etiqueta `ion-app`.
-
- Esto deshabilitará el mecanismo de hidratación del cliente para el elemento `ion-app` y sus hijos, pero continuará usando la hidratación del cliente en otros elementos. Esto también causará un parpadeo en la página para los componentes Ionic. No es muy útil para otros elementos/componentes ya que, con aplicaciones Ionic, todos tus componentes Ionic existen dentro de la etiqueta `ion-app`.
```ts
@@ -283,7 +281,6 @@ El **Ionic Framework** [no soporta la nueva Hidratación del Cliente de Angular]
```
3. **Deshabilitar SSR completamente**
-
- Deshabilita SSR en el archivo `vite.config.ts`. Esto **eliminará el parpadeo** pero perderás todos los beneficios de tener SSR en tu aplicación.
```ts
diff --git a/apps/docs-app/i18n/es/docusaurus-theme-classic/footer.json b/apps/docs-app/i18n/es/docusaurus-theme-classic/footer.json
index 9fa952bf5..23bef1e53 100644
--- a/apps/docs-app/i18n/es/docusaurus-theme-classic/footer.json
+++ b/apps/docs-app/i18n/es/docusaurus-theme-classic/footer.json
@@ -33,7 +33,7 @@
},
"link.item.label.GitHub": {
"message": "GitHub",
- "description": "The label of footer link with label=GitHub linking to https://github.com/analogjs/analog"
+ "description": "The label of footer link with label=GitHub linking to https://github.com/benpsnyder/analog"
},
"link.item.label.Stack Overflow": {
"message": "Stack Overflow",
diff --git a/apps/docs-app/i18n/fr/docusaurus-theme-classic/footer.json b/apps/docs-app/i18n/fr/docusaurus-theme-classic/footer.json
index 6ed2ccd03..663833d5a 100644
--- a/apps/docs-app/i18n/fr/docusaurus-theme-classic/footer.json
+++ b/apps/docs-app/i18n/fr/docusaurus-theme-classic/footer.json
@@ -33,7 +33,7 @@
},
"link.item.label.GitHub": {
"message": "GitHub",
- "description": "The label of footer link with label=GitHub linking to https://github.com/analogjs/analog"
+ "description": "The label of footer link with label=GitHub linking to https://github.com/benpsnyder/analog"
},
"link.item.label.Stack Overflow": {
"message": "Stack Overflow",
diff --git a/apps/docs-app/i18n/ko/docusaurus-theme-classic/footer.json b/apps/docs-app/i18n/ko/docusaurus-theme-classic/footer.json
index 8c4100c4c..70ca757be 100644
--- a/apps/docs-app/i18n/ko/docusaurus-theme-classic/footer.json
+++ b/apps/docs-app/i18n/ko/docusaurus-theme-classic/footer.json
@@ -33,7 +33,7 @@
},
"link.item.label.GitHub": {
"message": "GitHub",
- "description": "The label of footer link with label=GitHub linking to https://github.com/analogjs/analog"
+ "description": "The label of footer link with label=GitHub linking to https://github.com/benpsnyder/analog"
},
"link.item.label.Stack Overflow": {
"message": "Stack Overflow",
diff --git a/apps/docs-app/i18n/pt-br/docusaurus-theme-classic/footer.json b/apps/docs-app/i18n/pt-br/docusaurus-theme-classic/footer.json
index 3f9e56b6e..a8a4be265 100644
--- a/apps/docs-app/i18n/pt-br/docusaurus-theme-classic/footer.json
+++ b/apps/docs-app/i18n/pt-br/docusaurus-theme-classic/footer.json
@@ -33,7 +33,7 @@
},
"link.item.label.GitHub": {
"message": "GitHub",
- "description": "The label of footer link with label=GitHub linking to https://github.com/analogjs/analog"
+ "description": "The label of footer link with label=GitHub linking to https://github.com/benpsnyder/analog"
},
"link.item.label.Stack Overflow": {
"message": "Stack Overflow",
diff --git a/apps/docs-app/i18n/tr/docusaurus-theme-classic/footer.json b/apps/docs-app/i18n/tr/docusaurus-theme-classic/footer.json
index 750954d95..46a9cfb08 100644
--- a/apps/docs-app/i18n/tr/docusaurus-theme-classic/footer.json
+++ b/apps/docs-app/i18n/tr/docusaurus-theme-classic/footer.json
@@ -33,7 +33,7 @@
},
"link.item.label.GitHub": {
"message": "GitHub",
- "description": "The label of footer link with label=GitHub linking to https://github.com/analogjs/analog"
+ "description": "The label of footer link with label=GitHub linking to https://github.com/benpsnyder/analog"
},
"link.item.label.Stack Overflow": {
"message": "Stack Overflow",
diff --git a/apps/docs-app/i18n/zh-hans/docusaurus-plugin-content-docs/current/integrations/ionic/index.md b/apps/docs-app/i18n/zh-hans/docusaurus-plugin-content-docs/current/integrations/ionic/index.md
index e3ccd48f7..5b2db9983 100644
--- a/apps/docs-app/i18n/zh-hans/docusaurus-plugin-content-docs/current/integrations/ionic/index.md
+++ b/apps/docs-app/i18n/zh-hans/docusaurus-plugin-content-docs/current/integrations/ionic/index.md
@@ -228,7 +228,6 @@ export default defineConfig(({ mode }) => {
Ionic 框架 [尚不支持 Angular 新的客户端水合](https://github.com/ionic-team/ionic-framework/issues/28625#issuecomment-1843919548), 因为 Angular [不支持带有 web components 的 SSR](https://github.com/angular/angular/issues/52275), 并且当它们受支持时,必须对 Stencil 组件进行一些工作才能启用它。因此目前有三个选项可以解决这个问题:
1. 从 `app.config.ts` 依赖提供者里移除 `provideClientHydration()`。
-
- 下面的代码移除 Angular 新的客户端水合机制并改为上一个版本,新的版本会导致客户端重渲染时的闪屏现象。
```ts
@@ -250,7 +249,6 @@ Ionic 框架 [尚不支持 Angular 新的客户端水合](https://github.com/ion
```
2. 在 `ion-app` 标签上添加 `ngSkipHydration` 属性。
-
- 这将在 `ion-app` 元素及其子元素上禁用客户端水合机制,但将继续对其他元素使用客户端水合。这还会导致 Ionic 组件的页面闪,而且对其他元素/组件没有太大帮助,因为对于 Ionic 应用,您的所有 Ionic 组件都存在于 `ion-app` 标签内。
```ts
@@ -271,7 +269,6 @@ Ionic 框架 [尚不支持 Angular 新的客户端水合](https://github.com/ion
```
3. 完全禁用 SSR
-
- 在 `vite.config.ts` 里禁用 SSR。这将 **消除闪烁** 但是你将失去 SSR 带来的任何好处。
```ts
diff --git a/apps/docs-app/i18n/zh-hans/docusaurus-theme-classic/footer.json b/apps/docs-app/i18n/zh-hans/docusaurus-theme-classic/footer.json
index d65294075..3af04f825 100644
--- a/apps/docs-app/i18n/zh-hans/docusaurus-theme-classic/footer.json
+++ b/apps/docs-app/i18n/zh-hans/docusaurus-theme-classic/footer.json
@@ -33,7 +33,7 @@
},
"link.item.label.GitHub": {
"message": "GitHub",
- "description": "The label of footer link with label=GitHub linking to https://github.com/analogjs/analog"
+ "description": "The label of footer link with label=GitHub linking to https://github.com/benpsnyder/analog"
},
"link.item.label.Stack Overflow": {
"message": "Stack Overflow",
diff --git a/apps/docs-app/package.json b/apps/docs-app/package.json
index 74deaa696..43156e895 100644
--- a/apps/docs-app/package.json
+++ b/apps/docs-app/package.json
@@ -4,26 +4,37 @@
"private": true,
"scripts": {
"docusaurus": "docusaurus",
+ "start": "docusaurus start",
+ "build": "docusaurus build && pnpx rimraf ../../dist/apps/docs-app && pnpx make-dir-cli ../../dist/apps && mv build ../../dist/apps/docs-app",
"swizzle": "docusaurus swizzle",
+ "deploy": "docusaurus deploy",
"clear": "docusaurus clear",
+ "serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
- "typecheck": "tsc"
+ "typecheck": "tsc",
+ "build:analyze": "RSDOCTOR=true docusaurus build && rm -rf ../../dist/apps/docs-app && mv build ../../dist/apps/docs-app"
},
"dependencies": {
- "@docusaurus/core": "3.5.2",
- "@docusaurus/preset-classic": "3.5.2",
+ "@docusaurus/core": "3.8.1",
+ "@docusaurus/plugin-sitemap": "^3.8.1",
+ "@docusaurus/preset-classic": "3.8.1",
+ "@docusaurus/theme-mermaid": "^3.8.1",
+ "@docusaurus/plugin-content-docs": "^3.8.1",
"@mdx-js/react": "^3.1.0",
"clsx": "^2.1.1",
- "prism-react-renderer": "^2.4.0",
- "react": "^18.3.1",
- "react-dom": "^18.3.1"
+ "prism-react-renderer": "^2.4.1",
+ "react": "^19.1.1",
+ "react-dom": "^19.1.1"
},
"devDependencies": {
- "@docusaurus/module-type-aliases": "3.5.2",
- "@docusaurus/tsconfig": "3.5.2",
- "@docusaurus/types": "3.5.2",
- "typescript": "~5.5.4"
+ "@docusaurus/faster": "^3.8.1",
+ "@docusaurus/module-type-aliases": "3.8.1",
+ "@docusaurus/plugin-rsdoctor": "^3.8.1",
+ "@docusaurus/tsconfig": "3.8.1",
+ "@docusaurus/types": "3.8.1",
+ "typescript": "~5.9.2",
+ "p-map": "^7.0.3"
},
"browserslist": {
"production": [
diff --git a/apps/docs-app/project.json b/apps/docs-app/project.json
index 120e9e780..bf465f1fd 100644
--- a/apps/docs-app/project.json
+++ b/apps/docs-app/project.json
@@ -12,8 +12,7 @@
"executor": "nx:run-commands",
"options": {
"cwd": "apps/docs-app",
- "command": "docusaurus build --out-dir={args.out-dir}",
- "out-dir": "../../dist/apps/docs-app"
+ "command": "docusaurus build && pnpx rimraf ../../dist/apps/docs-app && pnpx make-dir-cli ../../dist/apps && mv build ../../dist/apps/docs-app"
},
"outputs": ["{workspaceRoot}/dist/apps/docs-app"]
},
@@ -30,7 +29,7 @@
"executor": "nx:run-commands",
"options": {
"cwd": "apps/docs-app",
- "command": "docusaurus serve --config apps/docs-app/docusaurus.config.js --dir dist/apps/docs-app"
+ "command": "docusaurus serve --config apps/docs-app/docusaurus.config.ts --dir dist/apps/docs-app"
},
"dependsOn": ["build"]
},
diff --git a/apps/docs-app/sidebars.js b/apps/docs-app/sidebars.ts
similarity index 60%
rename from apps/docs-app/sidebars.js
rename to apps/docs-app/sidebars.ts
index 226174717..8eb2fed17 100644
--- a/apps/docs-app/sidebars.js
+++ b/apps/docs-app/sidebars.ts
@@ -9,10 +9,9 @@
* Create as many sidebars as you want.
*/
-// @ts-check
+import type { SidebarsConfig } from '@docusaurus/plugin-content-docs';
-/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
-const sidebars = {
+const sidebars: SidebarsConfig = {
// By default, Docusaurus generates a sidebar from the docs folder structure
docsSidebar: [
// { type: 'autogenerated', dirName: '.' },
@@ -42,7 +41,7 @@ const sidebars = {
{
type: 'doc',
id: 'features/routing/metadata',
- label: 'Route Metadata',
+ label: 'Route Metadata & SEO',
},
{
type: 'doc',
@@ -95,31 +94,25 @@ const sidebars = {
},
{
type: 'category',
- label: 'Static Site Generation',
+ label: 'Rendering',
items: [
{
type: 'doc',
- id: 'features/server/static-site-generation',
- label: 'Overview',
+ id: 'features/server/server-side-rendering',
+ label: 'Server-Side Rendering (SSR)',
},
- ],
- },
- {
- type: 'category',
- label: 'Server Side Rendering',
- items: [
{
type: 'doc',
- id: 'features/server/server-side-rendering',
- label: 'Overview',
+ id: 'features/server/static-site-generation',
+ label: 'Static Site Generation (SSG)',
},
+ // {
+ // type: 'doc',
+ // id: 'features/server/hybrid-rendering',
+ // label: 'Hybrid Rendering',
+ // },
],
},
- {
- type: 'doc',
- id: 'guides/forms',
- label: 'Form Actions',
- },
{
type: 'category',
label: 'Code Generation',
@@ -193,48 +186,136 @@ const sidebars = {
{
type: 'doc',
id: 'guides/compatibility',
- label: 'Version Compatibilty',
+ label: 'Version Compatibility',
+ },
+ {
+ type: 'doc',
+ id: 'guides/forms',
+ label: 'Form Actions',
},
],
},
{
type: 'category',
- label: 'Integrations',
+ label: 'Packages',
items: [
+ // {
+ // type: 'category',
+ // label: 'Content',
+ // items: [
+ // {
+ // type: 'doc',
+ // id: 'packages/content/overview',
+ // label: 'Overview',
+ // },
+ // {
+ // type: 'doc',
+ // id: 'packages/content/shiki-highlighter',
+ // label: 'Shiki Highlighter',
+ // },
+ // {
+ // type: 'doc',
+ // id: 'packages/content/prism-highlighter',
+ // label: 'Prism Highlighter',
+ // },
+ // ],
+ // },
{
- type: 'doc',
- id: 'integrations/nx/index',
- label: 'Nx',
- },
- {
- type: 'doc',
- id: 'packages/astro-angular/overview',
- label: 'Astro',
- },
- {
- type: 'doc',
- id: 'packages/vite-plugin-angular/overview',
- label: 'Vite',
- },
- {
- type: 'doc',
- id: 'packages/vite-plugin-nitro/overview',
- label: 'Nitro',
+ type: 'category',
+ label: 'Router',
+ items: [
+ {
+ type: 'doc',
+ id: 'packages/router/overview',
+ label: 'Overview',
+ },
+ // {
+ // type: 'doc',
+ // id: 'packages/router/api-reference',
+ // label: 'API Reference',
+ // },
+ ],
},
+ // {
+ // type: 'category',
+ // label: 'Testing',
+ // items: [
+ // {
+ // type: 'doc',
+ // id: 'packages/vitest-angular/overview',
+ // label: 'Vitest Angular',
+ // },
+ // ],
+ // },
+ // {
+ // type: 'category',
+ // label: 'Platform',
+ // items: [
+ // {
+ // type: 'doc',
+ // id: 'packages/platform/overview',
+ // label: 'Overview',
+ // },
+ // ],
+ // },
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Integrations',
+ items: [
{
- type: 'doc',
- id: 'integrations/angular-material/index',
- label: 'Angular Material',
+ type: 'category',
+ label: 'Build Tools',
+ items: [
+ {
+ type: 'doc',
+ id: 'integrations/nx/index',
+ label: 'Nx',
+ },
+ {
+ type: 'doc',
+ id: 'packages/vite-plugin-angular/overview',
+ label: 'Vite',
+ },
+ {
+ type: 'doc',
+ id: 'packages/vite-plugin-nitro/overview',
+ label: 'Nitro',
+ },
+ ],
},
{
- type: 'doc',
- id: 'integrations/ionic/index',
- label: 'Ionic Framework',
+ type: 'category',
+ label: 'UI Frameworks',
+ items: [
+ {
+ type: 'doc',
+ id: 'integrations/angular-material/index',
+ label: 'Angular Material',
+ },
+ {
+ type: 'doc',
+ id: 'integrations/ionic/index',
+ label: 'Ionic Framework',
+ },
+ ],
},
{
- type: 'doc',
- id: 'integrations/storybook/index',
- label: 'Storybook',
+ type: 'category',
+ label: 'Content & Development',
+ items: [
+ {
+ type: 'doc',
+ id: 'packages/astro-angular/overview',
+ label: 'Astro',
+ },
+ {
+ type: 'doc',
+ id: 'integrations/storybook/index',
+ label: 'Storybook',
+ },
+ ],
},
],
},
@@ -273,4 +354,4 @@ const sidebars = {
*/
};
-module.exports = sidebars;
+export default sidebars;
diff --git a/apps/docs-app/src/components/HomepageFeatures/index.tsx b/apps/docs-app/src/components/HomepageFeatures/index.tsx
index 46e3cd12f..c65e1a49f 100644
--- a/apps/docs-app/src/components/HomepageFeatures/index.tsx
+++ b/apps/docs-app/src/components/HomepageFeatures/index.tsx
@@ -2,6 +2,9 @@ import clsx from 'clsx';
import React from 'react';
import styles from './styles.module.css';
import Translate, { translate } from '@docusaurus/Translate';
+import ViteLogoSvg from '@site/static/img/logos/vite-logo.svg';
+import AngularLogoSvg from '@site/static/img/logos/angular-logo.svg';
+import AnalogLogoSvg from '@site/static/img/logos/analog-logo.svg';
type FeatureItem = {
title: string;
@@ -17,7 +20,7 @@ const FeatureList: FeatureItem[] = [
id: 'features.title.vitePowered',
description: 'The title of the feature "Vite-powered"',
}),
- Svg: require('@site/static/img/logos/vite-logo.svg').default,
+ Svg: ViteLogoSvg,
description: (
<>
@@ -57,7 +60,7 @@ const FeatureList: FeatureItem[] = [
description:
'The title of the feature "File-based routing and API routes"',
}),
- Svg: require('@site/static/img/logos/analog-logo.svg').default,
+ Svg: AnalogLogoSvg,
description: (
<>
> =
- require('@site/static/img/logos/stackblitz-logo.svg').default;
+ StackblitzLogoSvg;
export default function StackblitzButton(): JSX.Element {
return (
diff --git a/apps/docs-app/static/robots.txt b/apps/docs-app/static/robots.txt
new file mode 100644
index 000000000..209d9a441
--- /dev/null
+++ b/apps/docs-app/static/robots.txt
@@ -0,0 +1,17 @@
+User-agent: *
+Allow: /
+
+# Sitemap
+Sitemap: https://analogjs.org/sitemap.xml
+
+# Disallow admin and private areas
+Disallow: /admin/
+Disallow: /private/
+Disallow: /api/
+
+# Allow all documentation
+Allow: /docs/
+Allow: /blog/
+
+# Crawl delay (optional)
+Crawl-delay: 1
diff --git a/apps/docs-app/tsconfig.json b/apps/docs-app/tsconfig.json
index fea9d2758..920d7a652 100644
--- a/apps/docs-app/tsconfig.json
+++ b/apps/docs-app/tsconfig.json
@@ -1,20 +1,8 @@
{
- "extends": "../../tsconfig.base.json",
+ // This file is not used in compilation. It is here just for a nice editor experience.
+ "extends": "@docusaurus/tsconfig",
"compilerOptions": {
- "allowJs": true,
- "esModuleInterop": true,
- "jsx": "react",
- "lib": ["DOM"],
- "noEmit": true,
- "noImplicitAny": false,
- "types": [
- "node",
- "@docusaurus/module-type-aliases",
- "@docusaurus/theme-classic"
- ],
- "baseUrl": ".",
- "paths": {
- "@site/*": ["./*"]
- }
- }
+ "baseUrl": "."
+ },
+ "exclude": [".docusaurus", "build"]
}
diff --git a/apps/ng-app/.eslintrc.json b/apps/ng-app/.eslintrc.json
deleted file mode 100644
index a96f2e938..000000000
--- a/apps/ng-app/.eslintrc.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": [
- "!**/*",
- "**/vite.config.*.timestamp*",
- "**/vitest.config.*.timestamp*"
- ],
- "overrides": [
- {
- "files": ["*.ts"],
- "extends": [
- "plugin:@nx/angular",
- "plugin:@angular-eslint/template/process-inline-templates"
- ],
- "rules": {
- "@angular-eslint/directive-selector": [
- "error",
- {
- "type": "attribute",
- "prefix": "app",
- "style": "camelCase"
- }
- ],
- "@angular-eslint/component-selector": [
- "error",
- {
- "type": "element",
- "prefix": "app",
- "style": "kebab-case"
- }
- ],
- "@angular-eslint/prefer-standalone": "off"
- }
- },
- {
- "files": ["*.html"],
- "extends": ["plugin:@nx/angular-template"],
- "rules": {}
- }
- ]
-}
diff --git a/apps/ng-app/eslint.config.mjs b/apps/ng-app/eslint.config.mjs
new file mode 100644
index 000000000..04bea4047
--- /dev/null
+++ b/apps/ng-app/eslint.config.mjs
@@ -0,0 +1,62 @@
+import { FlatCompat } from '@eslint/eslintrc';
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+import js from '@eslint/js';
+import baseConfig from '../../eslint.config.mjs';
+
+const compat = new FlatCompat({
+ baseDirectory: dirname(fileURLToPath(import.meta.url)),
+ recommendedConfig: js.configs.recommended,
+});
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ ...compat
+ .config({
+ extends: [
+ 'plugin:@nx/angular',
+ 'plugin:@angular-eslint/template/process-inline-templates',
+ ],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.ts'],
+ rules: {
+ ...config.rules,
+ '@angular-eslint/directive-selector': [
+ 'error',
+ {
+ type: 'attribute',
+ prefix: 'app',
+ style: 'camelCase',
+ },
+ ],
+ '@angular-eslint/component-selector': [
+ 'error',
+ {
+ type: 'element',
+ prefix: 'app',
+ style: 'kebab-case',
+ },
+ ],
+ '@angular-eslint/prefer-standalone': 'off',
+ },
+ })),
+ ...compat
+ .config({
+ extends: ['plugin:@nx/angular-template'],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.html'],
+ rules: {
+ ...config.rules,
+ },
+ })),
+ {
+ ignores: ['**/vite.config.*.timestamp*', '**/vitest.config.*.timestamp*'],
+ },
+];
diff --git a/apps/ng-app/src/app/app.config.ts b/apps/ng-app/src/app/app.config.ts
index 6cfcf379e..0af424f4a 100644
--- a/apps/ng-app/src/app/app.config.ts
+++ b/apps/ng-app/src/app/app.config.ts
@@ -1,8 +1,11 @@
-import { withPrismHighlighter } from '@analogjs/content/prism-highlighter';
-import { provideFileRouter } from '@analogjs/router';
+import { withPrismHighlighter } from '@benpsnyder/analogjs-esm-content/prism-highlighter';
+import { provideFileRouter } from '@benpsnyder/analogjs-esm-router';
import { provideHttpClient } from '@angular/common/http';
import { ApplicationConfig } from '@angular/core';
-import { provideContent, withMarkdownRenderer } from '@analogjs/content';
+import {
+ provideContent,
+ withMarkdownRenderer,
+} from '@benpsnyder/analogjs-esm-content';
export const appConfig: ApplicationConfig = {
providers: [
diff --git a/apps/ng-app/src/test-setup.ts b/apps/ng-app/src/test-setup.ts
index 704df181c..59700a68b 100644
--- a/apps/ng-app/src/test-setup.ts
+++ b/apps/ng-app/src/test-setup.ts
@@ -1,4 +1,4 @@
-import '@analogjs/vite-plugin-angular/setup-vitest';
+import '@benpsnyder/analogjs-esm-vite-plugin-angular/setup-vitest';
import {
BrowserDynamicTestingModule,
diff --git a/apps/ng-app/tsconfig.json b/apps/ng-app/tsconfig.json
index cd3727d6f..9f68f277b 100644
--- a/apps/ng-app/tsconfig.json
+++ b/apps/ng-app/tsconfig.json
@@ -1,14 +1,9 @@
{
"compilerOptions": {
- "target": "es2022",
"useDefineForClassFields": false,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
- "strict": true,
- "noImplicitOverride": true,
- "noPropertyAccessFromIndexSignature": true,
- "noImplicitReturns": true,
- "noFallthroughCasesInSwitch": true
+ "noImplicitReturns": true
},
"files": [],
"include": [],
diff --git a/apps/ng-app/vite.config.ts b/apps/ng-app/vite.config.ts
index 4c6292004..12f88d044 100644
--- a/apps/ng-app/vite.config.ts
+++ b/apps/ng-app/vite.config.ts
@@ -1,7 +1,7 @@
///
import { defineConfig } from 'vite';
-import analog from '@analogjs/platform';
+import analog from '@benpsnyder/analogjs-esm-platform';
import { type VFile } from 'vfile';
// https://vitejs.dev/config/
diff --git a/apps/nx-plugin-e2e/tests/nx-plugin.spec.ts b/apps/nx-plugin-e2e/tests/nx-plugin.spec.ts
index f4716d0df..d7fe20a08 100644
--- a/apps/nx-plugin-e2e/tests/nx-plugin.spec.ts
+++ b/apps/nx-plugin-e2e/tests/nx-plugin.spec.ts
@@ -17,7 +17,10 @@ describe.skip('nx-plugin e2e', () => {
// on a unique project in the workspace, such that they
// are not dependent on one another.
beforeAll(async () => {
- ensureNxProject('@analogjs/platform', 'node_modules/@analogjs/platform');
+ ensureNxProject(
+ '@benpsnyder/analogjs-esm-platform',
+ 'node_modules/@benpsnyder/analogjs-esm-platform',
+ );
});
afterAll(async () => {
@@ -29,7 +32,7 @@ describe.skip('nx-plugin e2e', () => {
it('should create hello-world', async () => {
const project = uniq('app');
await runNxCommandAsync(
- `generate @analogjs/platform:application ${project} --addTailwind=true --addTRPC=true`,
+ `generate @benpsnyder/analogjs-esm-platform:application ${project} --addTailwind=true --addTRPC=true`,
);
copyNodeModules(['@analogjs']);
diff --git a/apps/trpc-app-e2e-playwright/.eslintrc.json b/apps/trpc-app-e2e-playwright/.eslintrc.json
deleted file mode 100644
index c3eaca421..000000000
--- a/apps/trpc-app-e2e-playwright/.eslintrc.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": [
- "!**/*",
- "**/vite.config.*.timestamp*",
- "**/vitest.config.*.timestamp*"
- ],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["src/plugins/index.js"],
- "rules": {
- "@typescript-eslint/no-var-requires": "off",
- "no-undef": "off"
- }
- }
- ]
-}
diff --git a/apps/trpc-app-e2e-playwright/eslint.config.mjs b/apps/trpc-app-e2e-playwright/eslint.config.mjs
new file mode 100644
index 000000000..57515642e
--- /dev/null
+++ b/apps/trpc-app-e2e-playwright/eslint.config.mjs
@@ -0,0 +1,23 @@
+import baseConfig from '../../eslint.config.mjs';
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ {
+ files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
+ // Override or add rules here
+ rules: {},
+ },
+ {
+ files: ['src/plugins/index.js'],
+ rules: {
+ '@typescript-eslint/no-var-requires': 'off',
+ 'no-undef': 'off',
+ },
+ },
+ {
+ ignores: ['**/vite.config.*.timestamp*', '**/vitest.config.*.timestamp*'],
+ },
+];
diff --git a/apps/trpc-app-e2e-playwright/project.json b/apps/trpc-app-e2e-playwright/project.json
index 78ef33c24..8a4374134 100644
--- a/apps/trpc-app-e2e-playwright/project.json
+++ b/apps/trpc-app-e2e-playwright/project.json
@@ -6,6 +6,9 @@
"tags": [],
"implicitDependencies": ["trpc-app"],
"targets": {
+ "build": {
+ "executor": "nx:noop"
+ },
"vitest": {
"executor": "@nx/vite:test"
},
diff --git a/apps/trpc-app-e2e-playwright/tests/app.spec.ts b/apps/trpc-app-e2e-playwright/tests/app.spec.ts
index 3fb4c825b..a6760c030 100644
--- a/apps/trpc-app-e2e-playwright/tests/app.spec.ts
+++ b/apps/trpc-app-e2e-playwright/tests/app.spec.ts
@@ -35,12 +35,18 @@ afterEach(async () => {
await page.close();
});
-describe.skip('tRPC Demo App', () => {
+describe('tRPC Demo App', () => {
test(`Given the user has navigated to the home page
Then the app title is visible`, async () => {
- await expect(
- page.locator('role=heading[level=1] >> text=Analog + tRPC'),
- ).toContain(/Analog + tRPC/i);
+ // Wait for the page to be fully loaded and Angular to be ready
+ await page.waitForLoadState('networkidle');
+
+ // Wait for the Angular app to be fully rendered
+ await page.waitForSelector('trpc-app-home');
+
+ // Now check for the heading - use a simpler selector that should work
+ const heading = page.locator('h1:has-text("Analog + tRPC")');
+ await expect(await heading.textContent()).toContain('Analog + tRPC');
});
test(`
@@ -50,12 +56,16 @@ describe.skip('tRPC Demo App', () => {
After the users clicks the "Login" button and gets authorized, deleting the note again should work successfully,
and the error should disappear.
`, async (ctx) => {
+ // Wait for the page to be fully loaded before starting the test
+ await page.waitForLoadState('networkidle');
+
await ctx.notesPage.typeNote(notes.first.note);
await ctx.notesPage.addNote();
expect(await ctx.notesPage.notes().elementHandles()).toHaveLength(1);
await ctx.notesPage.page.reload();
+ await page.waitForLoadState('networkidle');
expect(await ctx.notesPage.notes().elementHandles()).toHaveLength(1);
await ctx.notesPage.removeNote(0);
@@ -64,7 +74,22 @@ describe.skip('tRPC Demo App', () => {
await ctx.notesPage.toggleLogin();
await ctx.notesPage.removeNote(0);
- await page.waitForSelector('.no-notes');
+
+ // Wait for either .no-notes selector OR notes to be 0 length
+ try {
+ await page.waitForSelector('.no-notes', { timeout: 10000 });
+ } catch {
+ // If .no-notes selector doesn't exist, just check that notes length is 0
+ await page.waitForFunction(
+ () => {
+ const notes = document.querySelectorAll('.note');
+ return notes.length === 0;
+ },
+ {},
+ { timeout: 10000 },
+ );
+ }
+
expect(await ctx.notesPage.notes().elementHandles()).toHaveLength(0);
expect(await ctx.notesPage.getDeleteErrorCount()).toBe(0);
});
diff --git a/apps/trpc-app-e2e-playwright/tests/fixtures/notes.po.ts b/apps/trpc-app-e2e-playwright/tests/fixtures/notes.po.ts
index 8a4d4f648..7b243333d 100644
--- a/apps/trpc-app-e2e-playwright/tests/fixtures/notes.po.ts
+++ b/apps/trpc-app-e2e-playwright/tests/fixtures/notes.po.ts
@@ -13,7 +13,7 @@ export class NotesPage {
async addNote() {
await this.waitForTrpcResponse(this.page.getByTestId('addNoteBtn').click());
- await this.page.waitForSelector('.note');
+ await this.page.waitForSelector('.note', { timeout: 15000 });
}
async removeNote(index: number) {
@@ -32,9 +32,12 @@ export class NotesPage {
private async waitForTrpcResponse(promise: Promise) {
await Promise.all([
- this.page.waitForResponse((response) => {
- return response.url().includes('trpc') && response.status() === 200;
- }),
+ this.page.waitForResponse(
+ (response) => {
+ return response.url().includes('trpc') && response.status() === 200;
+ },
+ { timeout: 15000 },
+ ),
promise,
]);
}
diff --git a/apps/trpc-app-e2e-playwright/vite.config.ts b/apps/trpc-app-e2e-playwright/vite.config.ts
index c6c0c0532..ed044826d 100644
--- a/apps/trpc-app-e2e-playwright/vite.config.ts
+++ b/apps/trpc-app-e2e-playwright/vite.config.ts
@@ -5,12 +5,12 @@ import { defineConfig } from 'vite';
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
return {
- root: 'tests',
test: {
reporters: ['default'],
globals: true,
- environment: 'node',
- include: ['**/*.spec.ts'],
+ environment: 'jsdom',
+ include: ['tests/**/*.spec.ts'],
+ testTimeout: 30000, // Increase timeout to 30 seconds for e2e tests
cache: {
dir: `../../node_modules/.vitest`,
},
diff --git a/apps/trpc-app/.eslintrc.json b/apps/trpc-app/.eslintrc.json
deleted file mode 100644
index 405d56515..000000000
--- a/apps/trpc-app/.eslintrc.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": [
- "!**/*",
- "**/vite.config.*.timestamp*",
- "**/vitest.config.*.timestamp*"
- ],
- "overrides": [
- {
- "files": ["*.ts"],
- "extends": [
- "plugin:@nx/angular",
- "plugin:@angular-eslint/template/process-inline-templates"
- ],
- "rules": {
- "@angular-eslint/directive-selector": [
- "error",
- {
- "type": "attribute",
- "prefix": "trpcApp",
- "style": "camelCase"
- }
- ],
- "@angular-eslint/component-selector": [
- "error",
- {
- "type": "element",
- "prefix": "trpc-app",
- "style": "kebab-case"
- }
- ],
- "@angular-eslint/prefer-standalone": "off"
- }
- },
- {
- "files": ["*.html"],
- "extends": ["plugin:@nx/angular-template"],
- "rules": {}
- }
- ]
-}
diff --git a/apps/trpc-app/eslint.config.mjs b/apps/trpc-app/eslint.config.mjs
new file mode 100644
index 000000000..189315764
--- /dev/null
+++ b/apps/trpc-app/eslint.config.mjs
@@ -0,0 +1,62 @@
+import { FlatCompat } from '@eslint/eslintrc';
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+import js from '@eslint/js';
+import baseConfig from '../../eslint.config.mjs';
+
+const compat = new FlatCompat({
+ baseDirectory: dirname(fileURLToPath(import.meta.url)),
+ recommendedConfig: js.configs.recommended,
+});
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ ...compat
+ .config({
+ extends: [
+ 'plugin:@nx/angular',
+ 'plugin:@angular-eslint/template/process-inline-templates',
+ ],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.ts'],
+ rules: {
+ ...config.rules,
+ '@angular-eslint/directive-selector': [
+ 'error',
+ {
+ type: 'attribute',
+ prefix: 'trpcApp',
+ style: 'camelCase',
+ },
+ ],
+ '@angular-eslint/component-selector': [
+ 'error',
+ {
+ type: 'element',
+ prefix: 'trpc-app',
+ style: 'kebab-case',
+ },
+ ],
+ '@angular-eslint/prefer-standalone': 'off',
+ },
+ })),
+ ...compat
+ .config({
+ extends: ['plugin:@nx/angular-template'],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.html'],
+ rules: {
+ ...config.rules,
+ },
+ })),
+ {
+ ignores: ['**/vite.config.*.timestamp*', '**/vitest.config.*.timestamp*'],
+ },
+];
diff --git a/apps/trpc-app/src/app.config.ts b/apps/trpc-app/src/app.config.ts
index 1da0c1946..db2c20bc9 100644
--- a/apps/trpc-app/src/app.config.ts
+++ b/apps/trpc-app/src/app.config.ts
@@ -1,6 +1,6 @@
import { ApplicationConfig } from '@angular/core';
import { provideClientHydration } from '@angular/platform-browser';
-import { provideFileRouter } from '@analogjs/router';
+import { provideFileRouter } from '@benpsnyder/analogjs-esm-router';
import { provideTrpcClient } from './trpc-client';
export const appConfig: ApplicationConfig = {
diff --git a/apps/trpc-app/src/app/pages/index.page.ts b/apps/trpc-app/src/app/pages/index.page.ts
index 7d9e5f4e6..bf9a1ee20 100644
--- a/apps/trpc-app/src/app/pages/index.page.ts
+++ b/apps/trpc-app/src/app/pages/index.page.ts
@@ -9,7 +9,7 @@ import { AsyncPipe, DatePipe, JsonPipe, NgFor, NgIf } from '@angular/common';
import { FormsModule, NgForm } from '@angular/forms';
import { Note } from '../../note';
import { catchError, of, shareReplay, Subject, switchMap, take } from 'rxjs';
-import { waitFor } from '@analogjs/trpc';
+import { waitFor } from '@benpsnyder/analogjs-esm-trpc';
import { TRPCClientError } from '@trpc/client';
import { AppRouter } from '../../server/trpc/routers';
@@ -41,12 +41,14 @@ const btnTw =
@@ -134,16 +136,18 @@ export default class HomeComponent {
};
public addPost(form: NgForm) {
- if (!form.valid) {
+ if (!form.valid || !this.newNote?.trim()) {
form.form.markAllAsTouched();
return;
}
this._trpc.note.create
- .mutate({ title: this.newNote })
+ .mutate({ title: this.newNote.trim() })
.pipe(take(1))
- .subscribe(() => this.triggerRefresh$.next());
- this.newNote = '';
- form.form.reset();
+ .subscribe(() => {
+ this.triggerRefresh$.next();
+ this.newNote = '';
+ form.form.reset();
+ });
}
public removePost(id: number) {
diff --git a/apps/trpc-app/src/main.server.ts b/apps/trpc-app/src/main.server.ts
index 4db4761f6..7d0d8cfe4 100644
--- a/apps/trpc-app/src/main.server.ts
+++ b/apps/trpc-app/src/main.server.ts
@@ -1,6 +1,6 @@
import 'zone.js/node';
import '@angular/platform-server/init';
-import { render } from '@analogjs/router/server';
+import { render } from '@benpsnyder/analogjs-esm-router/server';
import { config } from './app.config.server';
import { AppComponent } from './app/app.component';
diff --git a/apps/trpc-app/src/server/routes/trpc/[trpc].ts b/apps/trpc-app/src/server/routes/trpc/[trpc].ts
index 8cf41a672..ccaa081fe 100644
--- a/apps/trpc-app/src/server/routes/trpc/[trpc].ts
+++ b/apps/trpc-app/src/server/routes/trpc/[trpc].ts
@@ -1,6 +1,6 @@
import { appRouter } from '../../trpc/routers';
import { createContext } from '../../trpc/context';
-import { createTrpcNitroHandler } from '@analogjs/trpc/server';
+import { createTrpcNitroHandler } from '@benpsnyder/analogjs-esm-trpc/server';
// export API handler
export default createTrpcNitroHandler({
router: appRouter,
diff --git a/apps/trpc-app/src/server/trpc/routers/index.ts b/apps/trpc-app/src/server/trpc/routers/index.ts
index 49c415a63..4e26e771c 100644
--- a/apps/trpc-app/src/server/trpc/routers/index.ts
+++ b/apps/trpc-app/src/server/trpc/routers/index.ts
@@ -4,5 +4,9 @@ import { noteRouter } from './notes';
export const appRouter = router({
note: noteRouter,
});
+
// export type definition of API
export type AppRouter = typeof appRouter;
+
+// Also export createCaller for server-side usage
+export const createCaller = appRouter.createCaller;
diff --git a/apps/trpc-app/src/test-setup.ts b/apps/trpc-app/src/test-setup.ts
index 704df181c..59700a68b 100644
--- a/apps/trpc-app/src/test-setup.ts
+++ b/apps/trpc-app/src/test-setup.ts
@@ -1,4 +1,4 @@
-import '@analogjs/vite-plugin-angular/setup-vitest';
+import '@benpsnyder/analogjs-esm-vite-plugin-angular/setup-vitest';
import {
BrowserDynamicTestingModule,
diff --git a/apps/trpc-app/src/trpc-client.ts b/apps/trpc-app/src/trpc-client.ts
index 0c68031fd..74f8a7d1d 100644
--- a/apps/trpc-app/src/trpc-client.ts
+++ b/apps/trpc-app/src/trpc-client.ts
@@ -1,16 +1,18 @@
-import { AppRouter } from './server/trpc/routers';
-import { createTrpcClient } from '@analogjs/trpc';
+import type { AppRouter } from './server/trpc/routers';
+import type { CreateTrpcProxyClient } from '@benpsnyder/analogjs-esm-trpc';
+import { createTrpcClient } from '@benpsnyder/analogjs-esm-trpc';
import { inject } from '@angular/core';
import superjson from 'superjson';
export const { provideTrpcClient, TrpcClient, TrpcHeaders } =
createTrpcClient({
url: '/api/trpc',
- options: {
- transformer: superjson,
- },
+ transformer: superjson,
});
-export function injectTrpcClient() {
- return inject(TrpcClient);
+// Ensure the injected type is preserved
+export function injectTrpcClient(): CreateTrpcProxyClient {
+ const client = inject(TrpcClient);
+ // Add type assertion to help with debugging
+ return client as CreateTrpcProxyClient;
}
diff --git a/apps/trpc-app/tsconfig.json b/apps/trpc-app/tsconfig.json
index 309fb1784..7c746a723 100644
--- a/apps/trpc-app/tsconfig.json
+++ b/apps/trpc-app/tsconfig.json
@@ -15,13 +15,8 @@
}
],
"compilerOptions": {
- "target": "es2020",
"forceConsistentCasingInFileNames": true,
- "strict": true,
- "noImplicitOverride": true,
- "noPropertyAccessFromIndexSignature": true,
- "noImplicitReturns": true,
- "noFallthroughCasesInSwitch": true
+ "noImplicitReturns": true
},
"angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false,
diff --git a/apps/trpc-app/vite.config.ts b/apps/trpc-app/vite.config.ts
index 238956f66..3e3e472ad 100644
--- a/apps/trpc-app/vite.config.ts
+++ b/apps/trpc-app/vite.config.ts
@@ -1,6 +1,6 @@
///
-import analog from '@analogjs/platform';
+import analog from '@benpsnyder/analogjs-esm-platform';
import { visualizer } from 'rollup-plugin-visualizer';
import { defineConfig, Plugin } from 'vite';
import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
@@ -14,7 +14,7 @@ export default defineConfig(({ mode }) => {
include: ['@angular/common', '@angular/forms', 'isomorphic-fetch'],
},
ssr: {
- noExternal: ['@analogjs/trpc', '@trpc/server'],
+ noExternal: ['@benpsnyder/analogjs-esm-trpc', '@trpc/server'],
},
build: {
outDir: '../../dist/apps/trpc-app/client',
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 000000000..c8390ce49
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,65 @@
+import { FlatCompat } from '@eslint/eslintrc';
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+import js from '@eslint/js';
+import nxEslintPlugin from '@nx/eslint-plugin';
+
+const compat = new FlatCompat({
+ baseDirectory: dirname(fileURLToPath(import.meta.url)),
+ recommendedConfig: js.configs.recommended,
+});
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ { plugins: { '@nx': nxEslintPlugin } },
+ {
+ files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
+ rules: {
+ '@nx/enforce-module-boundaries': [
+ 'error',
+ {
+ enforceBuildableLibDependency: true,
+ allow: [],
+ depConstraints: [
+ {
+ sourceTag: '*',
+ onlyDependOnLibsWithTags: ['*'],
+ },
+ ],
+ },
+ ],
+ },
+ },
+ ...compat
+ .config({
+ extends: ['plugin:@nx/typescript'],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],
+ rules: {
+ ...config.rules,
+ },
+ })),
+ ...compat
+ .config({
+ extends: ['plugin:@nx/javascript'],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.js', '**/*.jsx', '**/*.cjs', '**/*.mjs'],
+ rules: {
+ ...config.rules,
+ },
+ })),
+ {
+ files: ['**/*.json'],
+ // Override or add rules here
+ rules: {},
+ languageOptions: {
+ parser: await import('jsonc-eslint-parser'),
+ },
+ },
+];
diff --git a/jsr.json b/jsr.json
new file mode 100644
index 000000000..e17abe92d
--- /dev/null
+++ b/jsr.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://jsr.io/schema/config-file.v1.json",
+ "name": "@benpsnyder",
+ "version": "2.0.0-alpha.16",
+ "exports": {},
+ "publish": {
+ "exclude": [
+ "**/*.spec.ts",
+ "**/*.test.ts",
+ "**/test-setup.ts",
+ "**/__tests__/**",
+ "**/coverage/**",
+ "**/dist/**",
+ "**/node_modules/**",
+ "**/*.map",
+ ".nx/**",
+ ".vscode/**",
+ ".git/**",
+ "apps/**",
+ "libs/**",
+ "tools/**"
+ ]
+ }
+}
diff --git a/libs/card/.eslintrc.json b/libs/card/.eslintrc.json
deleted file mode 100644
index ffb3dffdf..000000000
--- a/libs/card/.eslintrc.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": [
- "!**/*",
- "**/vite.config.*.timestamp*",
- "**/vitest.config.*.timestamp*"
- ],
- "overrides": [
- {
- "files": ["*.ts"],
- "extends": [
- "plugin:@nx/angular",
- "plugin:@angular-eslint/template/process-inline-templates"
- ],
- "rules": {
- "@angular-eslint/directive-selector": [
- "error",
- {
- "type": "attribute",
- "prefix": "lib",
- "style": "camelCase"
- }
- ],
- "@angular-eslint/component-selector": [
- "error",
- {
- "type": "element",
- "prefix": "lib",
- "style": "kebab-case"
- }
- ],
- "@angular-eslint/prefer-standalone": "off"
- }
- },
- {
- "files": ["*.html"],
- "extends": ["plugin:@nx/angular-template"],
- "rules": {}
- }
- ]
-}
diff --git a/libs/card/eslint.config.mjs b/libs/card/eslint.config.mjs
new file mode 100644
index 000000000..03a617caf
--- /dev/null
+++ b/libs/card/eslint.config.mjs
@@ -0,0 +1,62 @@
+import { FlatCompat } from '@eslint/eslintrc';
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+import js from '@eslint/js';
+import baseConfig from '../../eslint.config.mjs';
+
+const compat = new FlatCompat({
+ baseDirectory: dirname(fileURLToPath(import.meta.url)),
+ recommendedConfig: js.configs.recommended,
+});
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ ...compat
+ .config({
+ extends: [
+ 'plugin:@nx/angular',
+ 'plugin:@angular-eslint/template/process-inline-templates',
+ ],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.ts'],
+ rules: {
+ ...config.rules,
+ '@angular-eslint/directive-selector': [
+ 'error',
+ {
+ type: 'attribute',
+ prefix: 'lib',
+ style: 'camelCase',
+ },
+ ],
+ '@angular-eslint/component-selector': [
+ 'error',
+ {
+ type: 'element',
+ prefix: 'lib',
+ style: 'kebab-case',
+ },
+ ],
+ '@angular-eslint/prefer-standalone': 'off',
+ },
+ })),
+ ...compat
+ .config({
+ extends: ['plugin:@nx/angular-template'],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.html'],
+ rules: {
+ ...config.rules,
+ },
+ })),
+ {
+ ignores: ['**/vite.config.*.timestamp*', '**/vitest.config.*.timestamp*'],
+ },
+];
diff --git a/libs/card/src/test-setup.ts b/libs/card/src/test-setup.ts
index b56bce0e3..2f1b86437 100644
--- a/libs/card/src/test-setup.ts
+++ b/libs/card/src/test-setup.ts
@@ -1,4 +1,4 @@
-import '@analogjs/vitest-angular/setup-zone';
+import '@benpsnyder/analogjs-esm-vitest-angular/setup-zone';
/**
* Initialize TestBed for all tests inside of content
diff --git a/libs/card/vite.config.ts b/libs/card/vite.config.ts
index 5ec2c5193..91dbe0ca8 100644
--- a/libs/card/vite.config.ts
+++ b/libs/card/vite.config.ts
@@ -1,13 +1,14 @@
///
import { defineConfig } from 'vite';
-import angular from '@analogjs/vite-plugin-angular';
+import angular from '@benpsnyder/analogjs-esm-vite-plugin-angular';
+import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
return {
root: __dirname,
- plugins: [angular()],
+ plugins: [angular(), nxViteTsPaths()],
test: {
reporters: ['default'],
globals: true,
diff --git a/libs/my-package/.eslintrc.json b/libs/my-package/.eslintrc.json
deleted file mode 100644
index d86c1b8b3..000000000
--- a/libs/my-package/.eslintrc.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": ["!**/*"],
- "overrides": [
- {
- "files": ["*.ts"],
- "extends": [
- "plugin:@nx/angular",
- "plugin:@angular-eslint/template/process-inline-templates"
- ],
- "rules": {
- "@angular-eslint/directive-selector": [
- "error",
- {
- "type": "attribute",
- "prefix": "lib",
- "style": "camelCase"
- }
- ],
- "@angular-eslint/component-selector": [
- "error",
- {
- "type": "element",
- "prefix": "lib",
- "style": "kebab-case"
- }
- ]
- }
- },
- {
- "files": ["*.html"],
- "extends": ["plugin:@nx/angular-template"],
- "rules": {}
- }
- ]
-}
diff --git a/libs/my-package/eslint.config.mjs b/libs/my-package/eslint.config.mjs
new file mode 100644
index 000000000..51ae62986
--- /dev/null
+++ b/libs/my-package/eslint.config.mjs
@@ -0,0 +1,58 @@
+import { FlatCompat } from '@eslint/eslintrc';
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+import js from '@eslint/js';
+import baseConfig from '../../eslint.config.mjs';
+
+const compat = new FlatCompat({
+ baseDirectory: dirname(fileURLToPath(import.meta.url)),
+ recommendedConfig: js.configs.recommended,
+});
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ ...compat
+ .config({
+ extends: [
+ 'plugin:@nx/angular',
+ 'plugin:@angular-eslint/template/process-inline-templates',
+ ],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.ts'],
+ rules: {
+ ...config.rules,
+ '@angular-eslint/directive-selector': [
+ 'error',
+ {
+ type: 'attribute',
+ prefix: 'lib',
+ style: 'camelCase',
+ },
+ ],
+ '@angular-eslint/component-selector': [
+ 'error',
+ {
+ type: 'element',
+ prefix: 'lib',
+ style: 'kebab-case',
+ },
+ ],
+ },
+ })),
+ ...compat
+ .config({
+ extends: ['plugin:@nx/angular-template'],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.html'],
+ rules: {
+ ...config.rules,
+ },
+ })),
+];
diff --git a/libs/my-package/package.json b/libs/my-package/package.json
index 4bf0131b2..81f0d6cf6 100644
--- a/libs/my-package/package.json
+++ b/libs/my-package/package.json
@@ -1,5 +1,5 @@
{
- "name": "@analogjs/my-package",
+ "name": "@benpsnyder/analogjs-esm-my-package",
"type": "module",
"private": true,
"peerDependencies": {
diff --git a/libs/my-package/project.json b/libs/my-package/project.json
index 4bf868391..fed91c454 100644
--- a/libs/my-package/project.json
+++ b/libs/my-package/project.json
@@ -5,6 +5,7 @@
"prefix": "lib",
"projectType": "library",
"tags": [],
+ "implicitDependencies": ["platform"],
"targets": {
"build": {
"executor": "@nx/vite:build",
diff --git a/libs/my-package/src/test-setup.ts b/libs/my-package/src/test-setup.ts
index b56bce0e3..2f1b86437 100644
--- a/libs/my-package/src/test-setup.ts
+++ b/libs/my-package/src/test-setup.ts
@@ -1,4 +1,4 @@
-import '@analogjs/vitest-angular/setup-zone';
+import '@benpsnyder/analogjs-esm-vitest-angular/setup-zone';
/**
* Initialize TestBed for all tests inside of content
diff --git a/libs/my-package/vite.config.ts b/libs/my-package/vite.config.ts
index b149cbd5e..0ccca810a 100644
--- a/libs/my-package/vite.config.ts
+++ b/libs/my-package/vite.config.ts
@@ -1,5 +1,5 @@
///
-import angular from '@analogjs/vite-plugin-angular';
+import angular from '@benpsnyder/analogjs-esm-vite-plugin-angular';
import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin';
import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
import { defineConfig } from 'vite';
diff --git a/libs/shared/feature/.eslintrc.json b/libs/shared/feature/.eslintrc.json
deleted file mode 100644
index 0665e2326..000000000
--- a/libs/shared/feature/.eslintrc.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "extends": ["../../../.eslintrc.json"],
- "ignorePatterns": ["!**/*"],
- "overrides": [
- {
- "files": ["*.ts"],
- "extends": [
- "plugin:@nx/angular",
- "plugin:@angular-eslint/template/process-inline-templates"
- ],
- "rules": {
- "@angular-eslint/directive-selector": [
- "error",
- {
- "type": "attribute",
- "prefix": "lib",
- "style": "camelCase"
- }
- ],
- "@angular-eslint/component-selector": [
- "error",
- {
- "type": "element",
- "prefix": "lib",
- "style": "kebab-case"
- }
- ],
- "@angular-eslint/prefer-standalone": "off"
- }
- },
- {
- "files": ["*.html"],
- "extends": ["plugin:@nx/angular-template"],
- "rules": {}
- }
- ]
-}
diff --git a/libs/shared/feature/eslint.config.mjs b/libs/shared/feature/eslint.config.mjs
new file mode 100644
index 000000000..e0edb65bf
--- /dev/null
+++ b/libs/shared/feature/eslint.config.mjs
@@ -0,0 +1,59 @@
+import { FlatCompat } from '@eslint/eslintrc';
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+import js from '@eslint/js';
+import baseConfig from '../../../eslint.config.mjs';
+
+const compat = new FlatCompat({
+ baseDirectory: dirname(fileURLToPath(import.meta.url)),
+ recommendedConfig: js.configs.recommended,
+});
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ ...compat
+ .config({
+ extends: [
+ 'plugin:@nx/angular',
+ 'plugin:@angular-eslint/template/process-inline-templates',
+ ],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.ts'],
+ rules: {
+ ...config.rules,
+ '@angular-eslint/directive-selector': [
+ 'error',
+ {
+ type: 'attribute',
+ prefix: 'lib',
+ style: 'camelCase',
+ },
+ ],
+ '@angular-eslint/component-selector': [
+ 'error',
+ {
+ type: 'element',
+ prefix: 'lib',
+ style: 'kebab-case',
+ },
+ ],
+ '@angular-eslint/prefer-standalone': 'off',
+ },
+ })),
+ ...compat
+ .config({
+ extends: ['plugin:@nx/angular-template'],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.html'],
+ rules: {
+ ...config.rules,
+ },
+ })),
+];
diff --git a/libs/shared/feature/src/test-setup.ts b/libs/shared/feature/src/test-setup.ts
index b56bce0e3..2f1b86437 100644
--- a/libs/shared/feature/src/test-setup.ts
+++ b/libs/shared/feature/src/test-setup.ts
@@ -1,4 +1,4 @@
-import '@analogjs/vitest-angular/setup-zone';
+import '@benpsnyder/analogjs-esm-vitest-angular/setup-zone';
/**
* Initialize TestBed for all tests inside of content
diff --git a/libs/top-bar/.eslintrc.json b/libs/top-bar/.eslintrc.json
deleted file mode 100644
index 1a75f851a..000000000
--- a/libs/top-bar/.eslintrc.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": [
- "!**/*",
- "**/vite.config.*.timestamp*",
- "**/vitest.config.*.timestamp*"
- ],
- "overrides": [
- {
- "files": ["*.ts"],
- "rules": {
- "@angular-eslint/directive-selector": [
- "error",
- {
- "type": "attribute",
- "prefix": "analogjs",
- "style": "camelCase"
- }
- ],
- "@angular-eslint/component-selector": [
- "error",
- {
- "type": "element",
- "prefix": "analogjs",
- "style": "kebab-case"
- }
- ],
- "@angular-eslint/prefer-standalone": "off"
- },
- "extends": [
- "plugin:@nx/angular",
- "plugin:@angular-eslint/template/process-inline-templates"
- ]
- },
- {
- "files": ["*.html"],
- "extends": ["plugin:@nx/angular-template"],
- "rules": {}
- }
- ]
-}
diff --git a/libs/top-bar/eslint.config.mjs b/libs/top-bar/eslint.config.mjs
new file mode 100644
index 000000000..804890e06
--- /dev/null
+++ b/libs/top-bar/eslint.config.mjs
@@ -0,0 +1,62 @@
+import { FlatCompat } from '@eslint/eslintrc';
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+import js from '@eslint/js';
+import baseConfig from '../../eslint.config.mjs';
+
+const compat = new FlatCompat({
+ baseDirectory: dirname(fileURLToPath(import.meta.url)),
+ recommendedConfig: js.configs.recommended,
+});
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ ...compat
+ .config({
+ extends: [
+ 'plugin:@nx/angular',
+ 'plugin:@angular-eslint/template/process-inline-templates',
+ ],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.ts'],
+ rules: {
+ ...config.rules,
+ '@angular-eslint/directive-selector': [
+ 'error',
+ {
+ type: 'attribute',
+ prefix: 'analogjs',
+ style: 'camelCase',
+ },
+ ],
+ '@angular-eslint/component-selector': [
+ 'error',
+ {
+ type: 'element',
+ prefix: 'analogjs',
+ style: 'kebab-case',
+ },
+ ],
+ '@angular-eslint/prefer-standalone': 'off',
+ },
+ })),
+ ...compat
+ .config({
+ extends: ['plugin:@nx/angular-template'],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.html'],
+ rules: {
+ ...config.rules,
+ },
+ })),
+ {
+ ignores: ['**/vite.config.*.timestamp*', '**/vitest.config.*.timestamp*'],
+ },
+];
diff --git a/libs/top-bar/src/test-setup.ts b/libs/top-bar/src/test-setup.ts
index d4a9f171e..8c8458a6b 100644
--- a/libs/top-bar/src/test-setup.ts
+++ b/libs/top-bar/src/test-setup.ts
@@ -1,4 +1,4 @@
-import '@analogjs/vite-plugin-angular/setup-vitest';
+import '@benpsnyder/analogjs-esm-vite-plugin-angular/setup-vitest';
import '@angular/compiler';
/**
diff --git a/libs/top-bar/vite.config.ts b/libs/top-bar/vite.config.ts
index d68a9fa3a..5ac7bf134 100644
--- a/libs/top-bar/vite.config.ts
+++ b/libs/top-bar/vite.config.ts
@@ -1,13 +1,14 @@
///
import { defineConfig } from 'vite';
-import angular from '@analogjs/vite-plugin-angular';
+import angular from '@benpsnyder/analogjs-esm-vite-plugin-angular';
+import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
return {
root: __dirname,
- plugins: [angular()],
+ plugins: [angular(), nxViteTsPaths()],
test: {
reporters: ['default'],
globals: true,
diff --git a/nx.json b/nx.json
index 9482aea68..41ec2f670 100644
--- a/nx.json
+++ b/nx.json
@@ -23,13 +23,18 @@
"dependsOn": ["^build"]
},
"build-package": {
- "cache": false
+ "cache": false,
+ "dependsOn": ["^build"]
},
"@nx/js:tsc": {
"cache": false
},
"@nx/eslint:lint": {
- "inputs": ["default", "{workspaceRoot}/.eslintrc.json"],
+ "inputs": [
+ "default",
+ "{workspaceRoot}/.eslintrc.json",
+ "{workspaceRoot}/eslint.config.mjs"
+ ],
"cache": true
},
"@angular-devkit/build-angular:application": {
@@ -69,12 +74,18 @@
"!{projectRoot}/tsconfig.spec.json",
"!{projectRoot}/**/*.stories.@(js|jsx|ts|tsx|mdx)",
"!{projectRoot}/.storybook/**/*",
- "!{projectRoot}/tsconfig.storybook.json"
+ "!{projectRoot}/tsconfig.storybook.json",
+ "!{projectRoot}/eslint.config.mjs"
],
"projectSpecificFiles": []
},
+ "parallel": 5,
"nxCloudAccessToken": "NDRkYzdkYmMtNDI3NS00MDI0LWFkMGQtMmI0Zjc2MTY2YzU0fHJlYWQtb25seQ==",
"defaultBase": "beta",
+ "tui": {
+ "autoExit": true,
+ "enabled": true
+ },
"plugins": [
{
"plugin": "@nx/playwright/plugin",
diff --git a/package.json b/package.json
index 3a19ab2e6..c38ef8750 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,15 @@
"contributors:generate": "all-contributors generate",
"prettify": "prettier --write .",
"prettier:check": "prettier --check .",
- "build:test": "nx build ng-app --skip-nx-cache"
+ "build:test": "nx build ng-app --skip-nx-cache",
+ "jsr:dry-run": "bun scripts/publish.ts --jsr --dry-run",
+ "jsr:publish": "bun scripts/publish.ts --jsr",
+ "jsr:setup": "bun scripts/setup-jsr-configs.ts",
+ "npm:dry-run": "bun scripts/publish.ts --npm --dry-run",
+ "npm:publish": "bun scripts/publish.ts --npm",
+ "publish:dry-run": "bun scripts/publish.ts --both --dry-run",
+ "publish:both": "bun scripts/publish.ts --both",
+ "sync:upstream": "./scripts/sync-from-upstream.sh"
},
"engines": {
"node": "^18.13.0 || ^20.0.0 || ^22.0.0",
@@ -34,12 +42,12 @@
],
"author": "Brandon Roberts ",
"bugs": {
- "url": "https://github.com/analogjs/analog/issues"
+ "url": "https://github.com/benpsnyder/analog/issues"
},
"homepage": "https://analogjs.org",
"repository": {
"type": "git",
- "url": "https://github.com/analogjs/analog.git"
+ "url": "https://github.com/benpsnyder/analog.git"
},
"private": true,
"dependencies": {
@@ -57,31 +65,31 @@
"@angular/ssr": "20.1.4",
"@astrojs/mdx": "^3.1.9",
"@astrojs/react": "^4.3.0",
- "@babel/core": "^7.28.0",
+ "@babel/core": "^7.28.3",
"@mdx-js/react": "3.1.0",
"@nx/angular": "21.3.11",
"@nx/devkit": "21.3.11",
- "@trpc/client": "^10.45.2",
- "@trpc/server": "^10.45.2",
+ "@trpc/client": "^11.0.0",
+ "@trpc/server": "^11.0.0",
"ajv-formats": "^3.0.1",
"defu": "^6.1.4",
"destr": "^2.0.5",
"front-matter": "^4.0.2",
"isomorphic-fetch": "^3.0.0",
- "marked": "^15.0.12",
+ "marked": "^16.1.2",
"marked-gfm-heading-id": "^4.1.2",
"marked-highlight": "^2.2.2",
- "mermaid": "^10.9.3",
+ "mermaid": "^11.9.0",
"radix3": "^1.1.2",
- "react": "^18.3.1",
- "react-dom": "^18.3.1",
+ "react": "^19.1.1",
+ "react-dom": "^19.1.1",
"rxjs": "7.8.2",
- "semver": "^7.5.1",
- "superjson": "^2.2.1",
- "tslib": "^2.7.0",
- "ufo": "^1.5.4",
+ "semver": "^7.7.2",
+ "superjson": "^2.2.2",
+ "tslib": "^2.8.1",
+ "ufo": "^1.6.1",
"xhr2": "^0.2.1",
- "zod": "^3.25.76",
+ "zod": "^4.0.17",
"zone.js": "^0.15.0"
},
"devDependencies": {
@@ -97,10 +105,12 @@
"@angular/compiler-cli": "20.1.4",
"@angular/language-service": "20.1.4",
"@astrojs/markdown-component": "^1.0.5",
- "@commitlint/cli": "^17.8.1",
- "@commitlint/config-conventional": "^17.8.1",
+ "@commitlint/cli": "^19.8.1",
+ "@commitlint/config-conventional": "^19.8.1",
"@compodoc/compodoc": "^1.1.26",
- "@netlify/functions": "^2.8.2",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "~9.33.0",
+ "@netlify/functions": "^4.2.1",
"@nx/cypress": "21.3.11",
"@nx/eslint": "21.3.11",
"@nx/eslint-plugin": "21.3.11",
@@ -114,43 +124,45 @@
"@playwright/test": "^1.54.2",
"@schematics/angular": "20.1.4",
"@semantic-release/changelog": "^6.0.3",
- "@semantic-release/exec": "^6.0.3",
+ "@semantic-release/exec": "^7.1.0",
"@semantic-release/git": "^10.0.1",
"@storybook/addon-docs": "9.0.18",
"@storybook/addon-links": "9.0.18",
+ "@storybook/addon-vitest": "9.0.18",
"@storybook/angular": "9.0.18",
"@storybook/builder-vite": "9.0.18",
"@swc-node/register": "1.10.10",
"@swc/cli": "0.7.8",
- "@swc/core": "1.5.29",
+ "@swc/core": "1.13.3",
"@swc/helpers": "0.5.17",
- "@types/babel__core": "^7.20.0",
+ "@types/babel__core": "^7.20.5",
"@types/hast": "^3.0.4",
"@types/jest": "30.0.0",
- "@types/marked": "^5.0.2",
- "@types/node": "22.17.0",
+ "@types/marked": "^6.0.0",
+ "@types/node": "24.3.0",
"@types/prismjs": "^1.26.5",
- "@types/react": "^18.3.23",
- "@types/react-dom": "^18.3.7",
- "@typescript-eslint/eslint-plugin": "7.18.0",
- "@typescript-eslint/parser": "7.18.0",
- "@typescript-eslint/utils": "^8.13.0",
- "@vitest/coverage-v8": "^3.0.5",
- "@vitest/ui": "^3.0.0",
- "all-contributors-cli": "^6.24.0",
+ "@types/react": "^19.1.9",
+ "@types/react-dom": "^19.1.7",
+ "@types/semver": "^7.7.0",
+ "@typescript-eslint/eslint-plugin": "^8.39.1",
+ "@typescript-eslint/utils": "^8.39.1",
+ "@vitest/coverage-v8": "^3.2.4",
+ "@vitest/ui": "^3.2.4",
+ "all-contributors-cli": "^6.26.1",
"astro": "4.16.18",
"autoprefixer": "^10.4.21",
- "conventional-changelog": "^4.0.0",
- "conventional-changelog-cli": "^3.0.0",
- "cpy-cli": "^5.0.0",
+ "conventional-changelog": "^7.1.1",
+ "conventional-changelog-cli": "^5.0.0",
+ "cpy-cli": "^6.0.0",
"cypress": "14.5.3",
- "esbuild": "0.25.8",
- "eslint": "8.57.1",
+ "esbuild": "0.25.9",
+ "eslint": "^9.33.0",
"eslint-config-prettier": "10.1.8",
- "eslint-plugin-cypress": "3.6.0",
- "eslint-plugin-playwright": "^1.8.3",
+ "eslint-plugin-cypress": "5.1.1",
+ "eslint-plugin-playwright": "^2.2.2",
"execa": "^9.6.0",
"fast-glob": "^3.2.12",
+ "tinyglobby": "^0.2.14",
"fd-package-json": "^2.0.0",
"find-up": "^7.0.0",
"fs-extra": "^11.1.1",
@@ -162,52 +174,56 @@
"jiti": "2.5.1",
"jsdom": "26.1.0",
"jsonc-eslint-parser": "^2.4.0",
- "kolorist": "^1.6.0",
- "lint-staged": "^13.3.0",
- "marked-mangle": "^1.1.10",
- "marked-shiki": "^1.1.0",
- "minimist": "^1.2.7",
+ "kolorist": "^1.8.0",
+ "lint-staged": "^16.1.5",
+ "marked-mangle": "^1.1.11",
+ "marked-shiki": "^1.2.1",
+ "minimist": "^1.2.8",
"ng-packagr": "20.1.0",
- "nitropack": "^2.11.0",
+ "nitropack": "^2.12.4",
"nx": "21.3.11",
- "playwright": "^1.49.1",
- "postcss": "^8.4.21",
+ "playwright": "^1.54.2",
+ "postcss": "^8.5.6",
"postcss-import": "~16.1.1",
"postcss-preset-env": "~10.2.4",
"postcss-url": "~10.1.3",
- "prettier": "^3.5.0",
- "prismjs": "^1.29.0",
+ "prettier": "^3.5.4",
+ "prismjs": "^1.30.0",
"prompts": "^2.4.2",
"rimraf": "^6.0.1",
- "rollup-plugin-visualizer": "^5.14.0",
+ "rollup-plugin-visualizer": "^6.0.3",
"satori": "^0.16.2",
"satori-html": "^0.3.2",
- "semantic-release": "^22.0.7",
+ "semantic-release": "^24.2.7",
"semantic-release-replace-plugin": "^1.2.7",
- "sharp": "^0.33.5",
- "shiki": "^1.6.1",
- "start-server-and-test": "^1.15.4",
- "storybook": "9.0.9",
+ "sharp": "^0.34.3",
+ "shiki": "^3.9.2",
+ "start-server-and-test": "^2.0.13",
+ "storybook": "9.1.2",
"tailwindcss": "^3.1.0",
- "ts-dedent": "^2.0.0",
- "ts-jest": "29.4.0",
+ "ts-dedent": "^2.2.0",
+ "ts-jest": "29.4.1",
"ts-morph": "^26.0.0",
"ts-node": "10.9.2",
"typescript": "~5.8.3",
+ "typescript-eslint": "^8.39.1",
"vfile": "^6.0.3",
- "vite": "7.0.0",
+ "vite": "npm:rolldown-vite@7.1.2",
"vite-plugin-eslint": "^1.8.1",
"vite-plugin-inspect": "11.3.2",
- "vite-tsconfig-paths": "4.2.0",
+ "vite-tsconfig-paths": "5.1.4",
"vitefu": "^1.1.1",
"vitest": "^3.2.4",
- "webpack-bundle-analyzer": "^4.7.0",
+ "webpack-bundle-analyzer": "^4.10.2",
"xmlbuilder2": "^3.0.2"
},
"pnpm": {
"ignoredBuiltDependencies": [
"cypress"
],
+ "overrides": {
+ "vite": "npm:rolldown-vite@7.1.2"
+ },
"onlyBuiltDependencies": [
"@compodoc/compodoc",
"@swc/core",
diff --git a/packages/astro-angular/.eslintrc.json b/packages/astro-angular/.eslintrc.json
deleted file mode 100644
index dfe5ab470..000000000
--- a/packages/astro-angular/.eslintrc.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": [
- "!**/*",
- "**/vite.config.*.timestamp*",
- "**/vitest.config.*.timestamp*"
- ],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["*.ts", "*.tsx"],
- "rules": {}
- },
- {
- "files": ["*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["*.ts"],
- "rules": {
- "@angular-eslint/prefer-standalone": "off"
- }
- }
- ]
-}
diff --git a/packages/astro-angular/eslint.config.mjs b/packages/astro-angular/eslint.config.mjs
new file mode 100644
index 000000000..f63359250
--- /dev/null
+++ b/packages/astro-angular/eslint.config.mjs
@@ -0,0 +1,32 @@
+import baseConfig from '../../eslint.config.mjs';
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ {
+ files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
+ // Override or add rules here
+ rules: {},
+ },
+ {
+ files: ['**/*.ts', '**/*.tsx'],
+ // Override or add rules here
+ rules: {},
+ },
+ {
+ files: ['**/*.js', '**/*.jsx'],
+ // Override or add rules here
+ rules: {},
+ },
+ {
+ files: ['**/*.ts'],
+ rules: {
+ '@angular-eslint/prefer-standalone': 'off',
+ },
+ },
+ {
+ ignores: ['**/vite.config.*.timestamp*', '**/vitest.config.*.timestamp*'],
+ },
+];
diff --git a/packages/astro-angular/package.json b/packages/astro-angular/package.json
index c5277c7c4..768f561fc 100644
--- a/packages/astro-angular/package.json
+++ b/packages/astro-angular/package.json
@@ -1,5 +1,5 @@
{
- "name": "@analogjs/astro-angular",
+ "name": "@benpsnyder/analogjs-esm-astro-angular",
"version": "2.0.0-alpha.16",
"description": "Use Angular components within Astro",
"type": "module",
@@ -20,19 +20,19 @@
],
"license": "MIT",
"bugs": {
- "url": "https://github.com/analogjs/analog/issues"
+ "url": "https://github.com/benpsnyder/analog/issues"
},
"homepage": "https://analogjs.org",
"repository": {
"type": "git",
- "url": "https://github.com/analogjs/analog.git"
+ "url": "https://github.com/benpsnyder/analog.git"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/brandonroberts"
},
"dependencies": {
- "@analogjs/vite-plugin-angular": "^2.0.0-alpha.16"
+ "@benpsnyder/analogjs-esm-vite-plugin-angular": "^2.0.0-alpha.16"
},
"peerDependencies": {
"@angular-devkit/build-angular": ">=16.0.0",
@@ -51,13 +51,13 @@
},
"ng-update": {
"packageGroup": [
- "@analogjs/platform",
- "@analogjs/content",
- "@analogjs/router",
- "@analogjs/storybook-angular",
- "@analogjs/vite-plugin-angular",
- "@analogjs/vite-plugin-nitro",
- "@analogjs/vitest-angular"
+ "@benpsnyder/analogjs-esm-platform",
+ "@benpsnyder/analogjs-esm-content",
+ "@benpsnyder/analogjs-esm-router",
+ "@benpsnyder/analogjs-esm-storybook-angular",
+ "@benpsnyder/analogjs-esm-vite-plugin-angular",
+ "@benpsnyder/analogjs-esm-vite-plugin-nitro",
+ "@benpsnyder/analogjs-esm-vitest-angular"
],
"migrations": "./migrations/migration.json"
}
diff --git a/packages/astro-angular/project.json b/packages/astro-angular/project.json
index bfa366f35..913aa86db 100644
--- a/packages/astro-angular/project.json
+++ b/packages/astro-angular/project.json
@@ -7,9 +7,8 @@
"targets": {
"build": {
"executor": "@nx/js:tsc",
-
"options": {
- "outputPath": "node_modules/@analogjs/astro-angular",
+ "outputPath": "node_modules/@benpsnyder/analogjs-esm-astro-angular",
"main": "packages/astro-angular/src/index.ts",
"tsConfig": "packages/astro-angular/tsconfig.lib.json",
"assets": [
diff --git a/packages/astro-angular/src/index.ts b/packages/astro-angular/src/index.ts
index 3ec005503..47c076d1a 100644
--- a/packages/astro-angular/src/index.ts
+++ b/packages/astro-angular/src/index.ts
@@ -1,7 +1,18 @@
-import viteAngular, { PluginOptions } from '@analogjs/vite-plugin-angular';
+import viteAngular, {
+ PluginOptions,
+} from '@benpsnyder/analogjs-esm-vite-plugin-angular';
import { enableProdMode } from '@angular/core';
import type { AstroIntegration, AstroRenderer, ViteUserConfig } from 'astro';
-import type { DeepPartial } from 'astro/dist/type-utils';
+
+// Define DeepPartial locally using Astro's implementation instead of importing from astro/dist/type-utils
+// Source: https://raw.githubusercontent.com/withastro/astro/92881331d1138ae146bbc4b0bfb9c675ca3f3d55/packages/astro/src/type-utils.ts
+type DeepPartial = {
+ [P in keyof T]?: T[P] extends (infer U)[]
+ ? DeepPartial[]
+ : T[P] extends object | undefined
+ ? DeepPartial
+ : T[P];
+};
interface AngularOptions {
vite?: PluginOptions;
@@ -9,9 +20,9 @@ interface AngularOptions {
function getRenderer(): AstroRenderer {
return {
- name: '@analogjs/astro-angular',
- clientEntrypoint: '@analogjs/astro-angular/client.js',
- serverEntrypoint: '@analogjs/astro-angular/server.js',
+ name: '@benpsnyder/analogjs-esm-astro-angular',
+ clientEntrypoint: '@benpsnyder/analogjs-esm-astro-angular/client.js',
+ serverEntrypoint: '@benpsnyder/analogjs-esm-astro-angular/server.js',
};
}
@@ -24,18 +35,18 @@ function getViteConfiguration(vite?: PluginOptions) {
include: [
'@angular/platform-browser',
'@angular/core',
- '@analogjs/astro-angular/client.js',
+ '@benpsnyder/analogjs-esm-astro-angular/client.js',
],
exclude: [
'@angular/platform-server',
- '@analogjs/astro-angular/server.js',
+ '@benpsnyder/analogjs-esm-astro-angular/server.js',
],
},
plugins: [
viteAngular(vite),
{
- name: '@analogjs/astro-angular-platform-server',
+ name: '@benpsnyder/analogjs-esm-astro-angular-platform-server',
transform(code: string, id: string) {
if (id.includes('platform-server')) {
code = code.replace(/global\./g, 'globalThis.');
@@ -53,7 +64,7 @@ function getViteConfiguration(vite?: PluginOptions) {
},
],
ssr: {
- noExternal: ['@angular/**', '@analogjs/**'],
+ noExternal: ['@angular/**', '@benpsnyder/analogjs-esm-**'],
},
};
}
@@ -62,7 +73,7 @@ export default function (options?: AngularOptions): AstroIntegration {
process.env['ANALOG_ASTRO'] = 'true';
return {
- name: '@analogjs/astro-angular',
+ name: '@benpsnyder/analogjs-esm-astro-angular',
hooks: {
'astro:config:setup': ({
addRenderer,
diff --git a/packages/astro-angular/src/server.ts b/packages/astro-angular/src/server.ts
index 8738d2146..ef6f273d3 100644
--- a/packages/astro-angular/src/server.ts
+++ b/packages/astro-angular/src/server.ts
@@ -21,7 +21,7 @@ import { bootstrapApplication } from '@angular/platform-browser';
const ANALOG_ASTRO_STATIC_PROPS = new InjectionToken<{
props: Record;
mirror: ComponentMirror;
-}>('@analogjs/astro-angular: Static Props w/ Mirror Provider', {
+}>('@benpsnyder/analogjs-esm-astro-angular: Static Props w/ Mirror Provider', {
factory() {
return { props: {}, mirror: {} as ComponentMirror };
},
diff --git a/packages/astro-angular/src/test-setup.ts b/packages/astro-angular/src/test-setup.ts
index 130578f1e..fb6a39460 100644
--- a/packages/astro-angular/src/test-setup.ts
+++ b/packages/astro-angular/src/test-setup.ts
@@ -1 +1 @@
-import '@analogjs/vite-plugin-angular/setup-vitest';
+import '@benpsnyder/analogjs-esm-vite-plugin-angular/setup-vitest';
diff --git a/packages/astro-angular/tsconfig.lib.json b/packages/astro-angular/tsconfig.lib.json
index c8dc0d2db..e9b628ecc 100644
--- a/packages/astro-angular/tsconfig.lib.json
+++ b/packages/astro-angular/tsconfig.lib.json
@@ -7,8 +7,8 @@
"inlineSources": true,
"types": [],
"paths": {
- "@analogjs/vite-plugin-angular": [
- "./node_modules/@analogjs/vite-plugin-angular"
+ "@benpsnyder/analogjs-esm-vite-plugin-angular": [
+ "./node_modules/@benpsnyder/analogjs-esm-vite-plugin-angular"
]
}
},
diff --git a/packages/astro-angular/tsconfig.spec.json b/packages/astro-angular/tsconfig.spec.json
index 1b8475d0c..fc491bbfe 100644
--- a/packages/astro-angular/tsconfig.spec.json
+++ b/packages/astro-angular/tsconfig.spec.json
@@ -2,7 +2,6 @@
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
- "module": "commonjs",
"types": ["node", "vitest/globals"]
},
"files": ["src/test-setup.ts"],
diff --git a/packages/astro-angular/vite.config.ts b/packages/astro-angular/vite.config.ts
index 3633bf97b..bae98bc94 100644
--- a/packages/astro-angular/vite.config.ts
+++ b/packages/astro-angular/vite.config.ts
@@ -6,7 +6,7 @@ import { defineConfig } from 'vite';
export default defineConfig(({ mode }) => {
return {
root: __dirname,
- esbuild: false,
+ oxc: false,
resolve: {
mainFields: ['module'],
},
diff --git a/packages/content-plugin/.eslintrc.json b/packages/content-plugin/.eslintrc.json
deleted file mode 100644
index b6e4cc425..000000000
--- a/packages/content-plugin/.eslintrc.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": [
- "!**/*",
- "**/vite.config.*.timestamp*",
- "**/vitest.config.*.timestamp*"
- ],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["*.ts", "*.tsx"],
- "rules": {}
- },
- {
- "files": ["*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["*.json"],
- "parser": "jsonc-eslint-parser",
- "rules": {
- "@nx/dependency-checks": "error"
- }
- },
- {
- "files": ["./package.json", "./migrations.json"],
- "parser": "jsonc-eslint-parser",
- "rules": {
- "@nx/nx-plugin-checks": "error"
- }
- }
- ]
-}
diff --git a/packages/content-plugin/eslint.config.mjs b/packages/content-plugin/eslint.config.mjs
new file mode 100644
index 000000000..3ba7b5d72
--- /dev/null
+++ b/packages/content-plugin/eslint.config.mjs
@@ -0,0 +1,53 @@
+import { FlatCompat } from '@eslint/eslintrc';
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+import js from '@eslint/js';
+import baseConfig from '../../eslint.config.mjs';
+
+const compat = new FlatCompat({
+ baseDirectory: dirname(fileURLToPath(import.meta.url)),
+ recommendedConfig: js.configs.recommended,
+});
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ {
+ files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
+ // Override or add rules here
+ rules: {},
+ },
+ {
+ files: ['**/*.ts', '**/*.tsx'],
+ // Override or add rules here
+ rules: {},
+ },
+ {
+ files: ['**/*.js', '**/*.jsx'],
+ // Override or add rules here
+ rules: {},
+ },
+ {
+ files: ['**/*.json'],
+ rules: {
+ '@nx/dependency-checks': 'error',
+ },
+ languageOptions: {
+ parser: await import('jsonc-eslint-parser'),
+ },
+ },
+ {
+ files: ['./package.json', './migrations.json'],
+ rules: {
+ '@nx/nx-plugin-checks': 'error',
+ },
+ languageOptions: {
+ parser: await import('jsonc-eslint-parser'),
+ },
+ },
+ {
+ ignores: ['**/vite.config.*.timestamp*', '**/vitest.config.*.timestamp*'],
+ },
+];
diff --git a/packages/content-plugin/project.json b/packages/content-plugin/project.json
index 340bd699c..61c3a4d63 100644
--- a/packages/content-plugin/project.json
+++ b/packages/content-plugin/project.json
@@ -9,7 +9,7 @@
"executor": "@nx/js:tsc",
"outputs": ["{options.outputPath}"],
"options": {
- "outputPath": "node_modules/@analogjs/content/plugin",
+ "outputPath": "node_modules/@benpsnyder/analogjs-esm-content/plugin",
"main": "packages/content-plugin/src/index.ts",
"tsConfig": "packages/content-plugin/tsconfig.lib.json",
"assets": [
diff --git a/packages/content-plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.spec.ts b/packages/content-plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.spec.ts
index 709bdd2f8..688a3b92b 100644
--- a/packages/content-plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.spec.ts
+++ b/packages/content-plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.spec.ts
@@ -27,8 +27,8 @@ describe('update-markdown-renderer-feature migration', () => {
`import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
import { provideHttpClient, withFetch } from '@angular/common/http';
import { provideClientHydration } from '@angular/platform-browser';
-import { provideFileRouter } from '@analogjs/router';
-import { provideContent, withMarkdownRenderer } from '@analogjs/content';
+import { provideFileRouter } from '@benpsnyder/analogjs-esm-router';
+import { provideContent, withMarkdownRenderer } from '@benpsnyder/analogjs-esm-content';
export const appConfig: ApplicationConfig = {
providers: [
@@ -52,6 +52,8 @@ export const appConfig: ApplicationConfig = {
'utf-8',
);
expect(configContent).toContain('withPrismHighlighter()');
- expect(configContent).toContain('@analogjs/content/prism-highlighter');
- });
+ expect(configContent).toContain(
+ '@benpsnyder/analogjs-esm-content/prism-highlighter',
+ );
+ }, 15000);
});
diff --git a/packages/content-plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.ts b/packages/content-plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.ts
index 25cc49acf..126bbcb57 100644
--- a/packages/content-plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.ts
+++ b/packages/content-plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.ts
@@ -38,7 +38,8 @@ export default async function update(host: Tree) {
if (provideContentNode) {
sourceFile.addImportDeclaration({
- moduleSpecifier: '@analogjs/content/prism-highlighter',
+ moduleSpecifier:
+ '@benpsnyder/analogjs-esm-content/prism-highlighter',
namedImports: ['withPrismHighlighter'],
});
diff --git a/packages/content-plugin/tsconfig.json b/packages/content-plugin/tsconfig.json
index b71725538..f5a01e571 100644
--- a/packages/content-plugin/tsconfig.json
+++ b/packages/content-plugin/tsconfig.json
@@ -1,8 +1,6 @@
{
"extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "module": "CommonJS"
- },
+ "compilerOptions": {},
"files": [],
"include": [],
"references": [
diff --git a/packages/content-plugin/tsconfig.spec.json b/packages/content-plugin/tsconfig.spec.json
index 0cb93bd6e..d96bc9fc6 100644
--- a/packages/content-plugin/tsconfig.spec.json
+++ b/packages/content-plugin/tsconfig.spec.json
@@ -2,7 +2,6 @@
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
- "module": "commonjs",
"types": ["jest", "node"]
},
"include": ["src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"],
diff --git a/packages/content/.eslintrc.json b/packages/content/.eslintrc.json
deleted file mode 100644
index 6b9078f05..000000000
--- a/packages/content/.eslintrc.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": [
- "!**/*",
- "**/vite.config.*.timestamp*",
- "**/vitest.config.*.timestamp*"
- ],
- "overrides": [
- {
- "files": ["*.ts"],
- "rules": {
- "@angular-eslint/directive-selector": [
- "error",
- {
- "type": "attribute",
- "prefix": "analog",
- "style": "camelCase"
- }
- ],
- "@angular-eslint/component-selector": [
- "error",
- {
- "type": "element",
- "prefix": "analog",
- "style": "kebab-case"
- }
- ],
- "@angular-eslint/prefer-standalone": "off"
- },
- "extends": [
- "plugin:@nx/angular",
- "plugin:@angular-eslint/template/process-inline-templates"
- ]
- },
- {
- "files": ["*.html"],
- "extends": ["plugin:@nx/angular-template"],
- "rules": {}
- }
- ]
-}
diff --git a/packages/content/eslint.config.mjs b/packages/content/eslint.config.mjs
new file mode 100644
index 000000000..4b419d93e
--- /dev/null
+++ b/packages/content/eslint.config.mjs
@@ -0,0 +1,62 @@
+import { FlatCompat } from '@eslint/eslintrc';
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+import js from '@eslint/js';
+import baseConfig from '../../eslint.config.mjs';
+
+const compat = new FlatCompat({
+ baseDirectory: dirname(fileURLToPath(import.meta.url)),
+ recommendedConfig: js.configs.recommended,
+});
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ ...compat
+ .config({
+ extends: [
+ 'plugin:@nx/angular',
+ 'plugin:@angular-eslint/template/process-inline-templates',
+ ],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.ts'],
+ rules: {
+ ...config.rules,
+ '@angular-eslint/directive-selector': [
+ 'error',
+ {
+ type: 'attribute',
+ prefix: 'analog',
+ style: 'camelCase',
+ },
+ ],
+ '@angular-eslint/component-selector': [
+ 'error',
+ {
+ type: 'element',
+ prefix: 'analog',
+ style: 'kebab-case',
+ },
+ ],
+ '@angular-eslint/prefer-standalone': 'off',
+ },
+ })),
+ ...compat
+ .config({
+ extends: ['plugin:@nx/angular-template'],
+ })
+ .map((config) => ({
+ ...config,
+ files: ['**/*.html'],
+ rules: {
+ ...config.rules,
+ },
+ })),
+ {
+ ignores: ['**/vite.config.*.timestamp*', '**/vitest.config.*.timestamp*'],
+ },
+];
diff --git a/packages/content/jsr.json b/packages/content/jsr.json
new file mode 100644
index 000000000..bf74c72b6
--- /dev/null
+++ b/packages/content/jsr.json
@@ -0,0 +1,52 @@
+{
+ "$schema": "https://jsr.io/schema/config-file.v1.json",
+ "name": "@benpsnyder/analogjs-esm-content",
+ "version": "2.0.0-alpha.16",
+ "description": "Content Rendering for Analog - ESM edition",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/benpsnyder/analog.git"
+ },
+ "exports": {
+ ".": "./src/index.ts",
+ "./package.json": "./package.json",
+ "./prism-highlighter": "./prism-highlighter/src/index.ts",
+ "./shiki-highlighter": "./shiki-highlighter/src/index.ts",
+ "./og": "./og/src/index.ts"
+ },
+ "publish": {
+ "exclude": [
+ "**/*.spec.ts",
+ "**/*.test.ts",
+ "**/test-setup.ts",
+ "**/__tests__/**",
+ "**/coverage/**",
+ "**/node_modules/**",
+ "**/*.map",
+ "migrations/**",
+ "tsconfig.*.json",
+ "jest.config.*",
+ "vite.config.*",
+ "ng-package.json",
+ "plugin/**"
+ ]
+ },
+ "peerDependencies": {
+ "@angular/common": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
+ "@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
+ "@angular/platform-browser": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
+ "@angular/router": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
+ "@nx/devkit": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
+ "front-matter": "^4.0.2",
+ "marked": "^15.0.7",
+ "marked-gfm-heading-id": "^4.1.1",
+ "marked-highlight": "^2.2.1",
+ "marked-mangle": "^1.1.10",
+ "rxjs": "^6.5.0 || ^7.5.0",
+ "prismjs": "^1.29.0",
+ "satori": "^0.10.14",
+ "satori-html": "^0.3.2",
+ "sharp": "^0.33.5"
+ }
+}
diff --git a/packages/content/ng-package.json b/packages/content/ng-package.json
index 4f372f4be..74ab87a09 100644
--- a/packages/content/ng-package.json
+++ b/packages/content/ng-package.json
@@ -1,6 +1,6 @@
{
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
- "dest": "../../node_modules/@analogjs/content",
+ "dest": "../../node_modules/@benpsnyder/analogjs-esm-content",
"lib": {
"entryFile": "src/index.ts"
}
diff --git a/packages/content/package.json b/packages/content/package.json
index e80d528f7..cf587cb42 100644
--- a/packages/content/package.json
+++ b/packages/content/package.json
@@ -1,5 +1,5 @@
{
- "name": "@analogjs/content",
+ "name": "@benpsnyder/analogjs-esm-content",
"version": "2.0.0-alpha.16",
"description": "Content Rendering for Analog",
"type": "module",
@@ -11,12 +11,12 @@
],
"license": "MIT",
"bugs": {
- "url": "https://github.com/analogjs/analog/issues"
+ "url": "https://github.com/benpsnyder/analog/issues"
},
"homepage": "https://analogjs.org",
"repository": {
"type": "git",
- "url": "https://github.com/analogjs/analog.git"
+ "url": "https://github.com/benpsnyder/analog.git"
},
"funding": {
"type": "github",
@@ -55,13 +55,13 @@
},
"ng-update": {
"packageGroup": [
- "@analogjs/platform",
- "@analogjs/content",
- "@analogjs/router",
- "@analogjs/storybook-angular",
- "@analogjs/vite-plugin-angular",
- "@analogjs/vite-plugin-nitro",
- "@analogjs/vitest-angular"
+ "@benpsnyder/analogjs-esm-platform",
+ "@benpsnyder/analogjs-esm-content",
+ "@benpsnyder/analogjs-esm-router",
+ "@benpsnyder/analogjs-esm-storybook-angular",
+ "@benpsnyder/analogjs-esm-vite-plugin-angular",
+ "@benpsnyder/analogjs-esm-vite-plugin-nitro",
+ "@benpsnyder/analogjs-esm-vitest-angular"
],
"migrations": "./plugin/migrations.json"
}
diff --git a/packages/content/prism-highlighter/src/index.ts b/packages/content/prism-highlighter/src/index.ts
index ca24cc99f..65c95b1d7 100644
--- a/packages/content/prism-highlighter/src/index.ts
+++ b/packages/content/prism-highlighter/src/index.ts
@@ -1,4 +1,7 @@
-import { ContentRenderer, NoopContentRenderer } from '@analogjs/content';
+import {
+ ContentRenderer,
+ NoopContentRenderer,
+} from '@benpsnyder/analogjs-esm-content';
import { Provider } from '@angular/core';
import { PrismHighlighter } from './lib/prism-highlighter';
diff --git a/packages/content/prism-highlighter/src/lib/prism-highlighter.ts b/packages/content/prism-highlighter/src/lib/prism-highlighter.ts
index 9fc8a0af1..92e26aa89 100644
--- a/packages/content/prism-highlighter/src/lib/prism-highlighter.ts
+++ b/packages/content/prism-highlighter/src/lib/prism-highlighter.ts
@@ -1,4 +1,4 @@
-import { MarkedContentHighlighter } from '@analogjs/content';
+import { MarkedContentHighlighter } from '@benpsnyder/analogjs-esm-content';
import { Injectable } from '@angular/core';
import { markedHighlight } from 'marked-highlight';
diff --git a/packages/content/project.json b/packages/content/project.json
index 1505ba879..5f8e894c7 100644
--- a/packages/content/project.json
+++ b/packages/content/project.json
@@ -8,12 +8,14 @@
"targets": {
"build": {
"executor": "nx:run-commands",
- "outputs": ["{workspaceRoot}/node_modules/@analogjs/content"],
+ "outputs": [
+ "{workspaceRoot}/node_modules/@benpsnyder/analogjs-esm-content"
+ ],
"options": {
"commands": [
"nx build-package content",
"nx build content-plugin",
- "npx rimraf node_modules/@analogjs/content/.npmignore"
+ "npx rimraf node_modules/@benpsnyder/analogjs-esm-content/.npmignore"
],
"parallel": false
},
@@ -21,7 +23,9 @@
},
"build-package": {
"executor": "@angular-devkit/build-angular:ng-packagr",
- "outputs": ["{workspaceRoot}/node_modules/@analogjs/content"],
+ "outputs": [
+ "{workspaceRoot}/node_modules/@benpsnyder/analogjs-esm-content"
+ ],
"options": {
"project": "packages/content/ng-package.json"
},
diff --git a/packages/content/shiki-highlighter/src/index.ts b/packages/content/shiki-highlighter/src/index.ts
index 79f88a320..86451233b 100644
--- a/packages/content/shiki-highlighter/src/index.ts
+++ b/packages/content/shiki-highlighter/src/index.ts
@@ -1,4 +1,7 @@
-import { ContentRenderer, NoopContentRenderer } from '@analogjs/content';
+import {
+ ContentRenderer,
+ NoopContentRenderer,
+} from '@benpsnyder/analogjs-esm-content';
import { Provider } from '@angular/core';
import type {
BundledLanguage,
diff --git a/packages/content/src/jsr-types.ts b/packages/content/src/jsr-types.ts
new file mode 100644
index 000000000..de0873787
--- /dev/null
+++ b/packages/content/src/jsr-types.ts
@@ -0,0 +1,36 @@
+// Standalone type definitions for JSR publication
+// These are minimal type exports without external dependencies
+
+export interface ContentFile {
+ /** The filename of the content (without the extension) */
+ filename: string;
+ /** The slug of the content file for routing */
+ slug: string;
+ /** Front-matter attributes */
+ attributes: Record;
+ /** The content as a string */
+ content: string;
+}
+
+export interface MarkdownContentOptions {
+ /** Custom marked configuration */
+ marked?: any;
+ /** Enable or disable syntax highlighting */
+ highlighter?: boolean;
+ /** Custom highlighter configuration */
+ highlighterOptions?: any;
+}
+
+export interface ContentRenderer {
+ /** Render the content as HTML */
+ render(content: string, options?: any): Promise;
+}
+
+export interface ContentProviderOptions {
+ /** The subdirectory to search for content files */
+ subdirectory?: string;
+ /** File extensions to include */
+ extensions?: string[];
+ /** Custom content renderer */
+ renderer?: ContentRenderer;
+}
diff --git a/packages/content/src/lib/content-files-list-token.ts b/packages/content/src/lib/content-files-list-token.ts
index 3c9eea9e3..0d71ee1ca 100644
--- a/packages/content/src/lib/content-files-list-token.ts
+++ b/packages/content/src/lib/content-files-list-token.ts
@@ -8,7 +8,7 @@ function getSlug(filename: string) {
}
export const CONTENT_FILES_LIST_TOKEN = new InjectionToken(
- '@analogjs/content Content Files List',
+ '@benpsnyder/analogjs-esm-content Content Files List',
{
providedIn: 'root',
factory() {
diff --git a/packages/content/src/lib/content-files-token.ts b/packages/content/src/lib/content-files-token.ts
index 2f8a4e620..0176081a4 100644
--- a/packages/content/src/lib/content-files-token.ts
+++ b/packages/content/src/lib/content-files-token.ts
@@ -5,7 +5,7 @@ import { CONTENT_FILES_LIST_TOKEN } from './content-files-list-token';
export const CONTENT_FILES_TOKEN = new InjectionToken<
Record Promise>
->('@analogjs/content Content Files', {
+>('@benpsnyder/analogjs-esm-content Content Files', {
providedIn: 'root',
factory() {
const contentFiles = getContentFiles();
diff --git a/packages/content/src/test-setup.ts b/packages/content/src/test-setup.ts
index d4a9f171e..8c8458a6b 100644
--- a/packages/content/src/test-setup.ts
+++ b/packages/content/src/test-setup.ts
@@ -1,4 +1,4 @@
-import '@analogjs/vite-plugin-angular/setup-vitest';
+import '@benpsnyder/analogjs-esm-vite-plugin-angular/setup-vitest';
import '@angular/compiler';
/**
diff --git a/packages/content/tsconfig.spec.json b/packages/content/tsconfig.spec.json
index 1b8475d0c..fc491bbfe 100644
--- a/packages/content/tsconfig.spec.json
+++ b/packages/content/tsconfig.spec.json
@@ -2,7 +2,6 @@
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
- "module": "commonjs",
"types": ["node", "vitest/globals"]
},
"files": ["src/test-setup.ts"],
diff --git a/packages/create-analog/package.json b/packages/create-analog/package.json
index 89477e75f..8538a170b 100644
--- a/packages/create-analog/package.json
+++ b/packages/create-analog/package.json
@@ -24,16 +24,16 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/analogjs/analog.git"
+ "url": "git+https://github.com/benpsnyder/analog.git"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/brandonroberts"
},
"bugs": {
- "url": "https://github.com/analogjs/analog/issues"
+ "url": "https://github.com/benpsnyder/analog/issues"
},
- "homepage": "https://github.com/analogjs/analog/tree/main#readme",
+ "homepage": "https://github.com/benpsnyder/analog/tree/main#readme",
"dependencies": {
"kolorist": "^1.6.0",
"minimist": "^1.2.7",
diff --git a/packages/create-analog/template-angular-v17/angular.json b/packages/create-analog/template-angular-v17/angular.json
index 60b166f35..e5f1ceed9 100644
--- a/packages/create-analog/template-angular-v17/angular.json
+++ b/packages/create-analog/template-angular-v17/angular.json
@@ -10,7 +10,7 @@
"prefix": "app",
"architect": {
"build": {
- "builder": "@analogjs/platform:vite",
+ "builder": "@benpsnyder/analogjs-esm-platform:vite",
"options": {
"configFile": "vite.config.ts",
"main": "src/main.ts",
@@ -29,7 +29,7 @@
}
},
"serve": {
- "builder": "@analogjs/platform:vite-dev-server",
+ "builder": "@benpsnyder/analogjs-esm-platform:vite-dev-server",
"defaultConfiguration": "development",
"options": {
"buildTarget": "my-app:build",
@@ -46,7 +46,7 @@
}
},
"test": {
- "builder": "@analogjs/vitest-angular:test"
+ "builder": "@benpsnyder/analogjs-esm-vitest-angular:test"
}
}
}
diff --git a/packages/create-analog/template-angular-v17/package.json b/packages/create-analog/template-angular-v17/package.json
index 24387ca6a..35944e347 100644
--- a/packages/create-analog/template-angular-v17/package.json
+++ b/packages/create-analog/template-angular-v17/package.json
@@ -15,8 +15,8 @@
"test": "ng test"
},
"dependencies": {
- "@analogjs/content": "^2.0.0-alpha.16",
- "@analogjs/router": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-content": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-router": "^2.0.0-alpha.16",
"@angular/animations": "^17.2.0",
"@angular/common": "^17.2.0",
"@angular/compiler": "^17.2.0",
@@ -38,9 +38,9 @@
"zone.js": "~0.14.0"
},
"devDependencies": {
- "@analogjs/platform": "^2.0.0-alpha.16",
- "@analogjs/vite-plugin-angular": "^2.0.0-alpha.16",
- "@analogjs/vitest-angular": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-platform": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-vite-plugin-angular": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-vitest-angular": "^2.0.0-alpha.16",
"@angular-devkit/build-angular": "^17.2.0",
"@angular/cli": "^17.2.0",
"@angular/compiler-cli": "^17.2.0",
diff --git a/packages/create-analog/template-angular-v17/src/app/app.config.ts b/packages/create-analog/template-angular-v17/src/app/app.config.ts
index c80ece763..6340715a0 100644
--- a/packages/create-analog/template-angular-v17/src/app/app.config.ts
+++ b/packages/create-analog/template-angular-v17/src/app/app.config.ts
@@ -1,7 +1,7 @@
import { provideHttpClient, withFetch } from '@angular/common/http';
import { ApplicationConfig } from '@angular/core';
import { provideClientHydration } from '@angular/platform-browser';
-import { provideFileRouter } from '@analogjs/router';
+import { provideFileRouter } from '@benpsnyder/analogjs-esm-router';
export const appConfig: ApplicationConfig = {
providers: [
diff --git a/packages/create-analog/template-angular-v17/src/test.ts b/packages/create-analog/template-angular-v17/src/test.ts
index 318c3b9d7..ad87fb9e1 100644
--- a/packages/create-analog/template-angular-v17/src/test.ts
+++ b/packages/create-analog/template-angular-v17/src/test.ts
@@ -1,4 +1,4 @@
-import '@analogjs/vitest-angular/setup-zone';
+import '@benpsnyder/analogjs-esm-vitest-angular/setup-zone';
import {
BrowserDynamicTestingModule,
diff --git a/packages/create-analog/template-angular-v17/vite.config.ts b/packages/create-analog/template-angular-v17/vite.config.ts
index 6faced7aa..6578a3c46 100644
--- a/packages/create-analog/template-angular-v17/vite.config.ts
+++ b/packages/create-analog/template-angular-v17/vite.config.ts
@@ -1,7 +1,7 @@
///
import { defineConfig } from 'vite';
-import analog from '@analogjs/platform';
+import analog from '@benpsnyder/analogjs-esm-platform';
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => ({
diff --git a/packages/create-analog/template-angular-v18/angular.json b/packages/create-analog/template-angular-v18/angular.json
index 60b166f35..e5f1ceed9 100644
--- a/packages/create-analog/template-angular-v18/angular.json
+++ b/packages/create-analog/template-angular-v18/angular.json
@@ -10,7 +10,7 @@
"prefix": "app",
"architect": {
"build": {
- "builder": "@analogjs/platform:vite",
+ "builder": "@benpsnyder/analogjs-esm-platform:vite",
"options": {
"configFile": "vite.config.ts",
"main": "src/main.ts",
@@ -29,7 +29,7 @@
}
},
"serve": {
- "builder": "@analogjs/platform:vite-dev-server",
+ "builder": "@benpsnyder/analogjs-esm-platform:vite-dev-server",
"defaultConfiguration": "development",
"options": {
"buildTarget": "my-app:build",
@@ -46,7 +46,7 @@
}
},
"test": {
- "builder": "@analogjs/vitest-angular:test"
+ "builder": "@benpsnyder/analogjs-esm-vitest-angular:test"
}
}
}
diff --git a/packages/create-analog/template-angular-v18/package.json b/packages/create-analog/template-angular-v18/package.json
index b7d592867..6645c07ed 100644
--- a/packages/create-analog/template-angular-v18/package.json
+++ b/packages/create-analog/template-angular-v18/package.json
@@ -15,8 +15,8 @@
},
"private": true,
"dependencies": {
- "@analogjs/content": "^2.0.0-alpha.16",
- "@analogjs/router": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-content": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-router": "^2.0.0-alpha.16",
"@angular/animations": "^18.0.0",
"@angular/build": "^18.0.0",
"@angular/common": "^18.0.0",
@@ -38,9 +38,9 @@
"zone.js": "~0.14.3"
},
"devDependencies": {
- "@analogjs/platform": "^2.0.0-alpha.16",
- "@analogjs/vite-plugin-angular": "^2.0.0-alpha.16",
- "@analogjs/vitest-angular": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-platform": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-vite-plugin-angular": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-vitest-angular": "^2.0.0-alpha.16",
"@angular/cli": "^18.0.0",
"@angular/compiler-cli": "^18.0.0",
"jsdom": "^22.0.0",
diff --git a/packages/create-analog/template-angular-v18/src/app/app.config.ts b/packages/create-analog/template-angular-v18/src/app/app.config.ts
index a1a58ee8f..0f8d35b49 100644
--- a/packages/create-analog/template-angular-v18/src/app/app.config.ts
+++ b/packages/create-analog/template-angular-v18/src/app/app.config.ts
@@ -5,7 +5,7 @@ import {
} from '@angular/common/http';
import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
import { provideClientHydration } from '@angular/platform-browser';
-import { provideFileRouter, requestContextInterceptor } from '@analogjs/router';
+import { provideFileRouter, requestContextInterceptor } from '@benpsnyder/analogjs-esm-router';
export const appConfig: ApplicationConfig = {
providers: [
diff --git a/packages/create-analog/template-angular-v18/src/main.server.ts b/packages/create-analog/template-angular-v18/src/main.server.ts
index f365e2b63..a807bff02 100644
--- a/packages/create-analog/template-angular-v18/src/main.server.ts
+++ b/packages/create-analog/template-angular-v18/src/main.server.ts
@@ -3,8 +3,8 @@ import '@angular/platform-server/init';
import { enableProdMode } from '@angular/core';
import { bootstrapApplication } from '@angular/platform-browser';
import { renderApplication } from '@angular/platform-server';
-import { provideServerContext } from '@analogjs/router/server';
-import { ServerContext } from '@analogjs/router/tokens';
+import { provideServerContext } from '@benpsnyder/analogjs-esm-router/server';
+import { ServerContext } from '@benpsnyder/analogjs-esm-router/tokens';
__APP_COMPONENT_IMPORT__
import { config } from './app/app.config.server';
diff --git a/packages/create-analog/template-angular-v18/src/test-setup.ts b/packages/create-analog/template-angular-v18/src/test-setup.ts
index 318c3b9d7..ad87fb9e1 100644
--- a/packages/create-analog/template-angular-v18/src/test-setup.ts
+++ b/packages/create-analog/template-angular-v18/src/test-setup.ts
@@ -1,4 +1,4 @@
-import '@analogjs/vitest-angular/setup-zone';
+import '@benpsnyder/analogjs-esm-vitest-angular/setup-zone';
import {
BrowserDynamicTestingModule,
diff --git a/packages/create-analog/template-angular-v18/vite.config.ts b/packages/create-analog/template-angular-v18/vite.config.ts
index ec4afce89..8886577ef 100644
--- a/packages/create-analog/template-angular-v18/vite.config.ts
+++ b/packages/create-analog/template-angular-v18/vite.config.ts
@@ -1,7 +1,7 @@
///
import { defineConfig } from 'vite';
-import analog from '@analogjs/platform';
+import analog from '@benpsnyder/analogjs-esm-platform';
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => ({
diff --git a/packages/create-analog/template-angular-v19/angular.json b/packages/create-analog/template-angular-v19/angular.json
index 60b166f35..e5f1ceed9 100644
--- a/packages/create-analog/template-angular-v19/angular.json
+++ b/packages/create-analog/template-angular-v19/angular.json
@@ -10,7 +10,7 @@
"prefix": "app",
"architect": {
"build": {
- "builder": "@analogjs/platform:vite",
+ "builder": "@benpsnyder/analogjs-esm-platform:vite",
"options": {
"configFile": "vite.config.ts",
"main": "src/main.ts",
@@ -29,7 +29,7 @@
}
},
"serve": {
- "builder": "@analogjs/platform:vite-dev-server",
+ "builder": "@benpsnyder/analogjs-esm-platform:vite-dev-server",
"defaultConfiguration": "development",
"options": {
"buildTarget": "my-app:build",
@@ -46,7 +46,7 @@
}
},
"test": {
- "builder": "@analogjs/vitest-angular:test"
+ "builder": "@benpsnyder/analogjs-esm-vitest-angular:test"
}
}
}
diff --git a/packages/create-analog/template-angular-v19/package.json b/packages/create-analog/template-angular-v19/package.json
index fc79d593b..6f6429c5c 100644
--- a/packages/create-analog/template-angular-v19/package.json
+++ b/packages/create-analog/template-angular-v19/package.json
@@ -15,8 +15,8 @@
},
"private": true,
"dependencies": {
- "@analogjs/content": "^1.17.0-beta.6",
- "@analogjs/router": "^1.17.0-beta.6",
+ "@benpsnyder/analogjs-esm-content": "^1.17.0-beta.6",
+ "@benpsnyder/analogjs-esm-router": "^1.17.0-beta.6",
"@angular/animations": "^19.0.0",
"@angular/common": "^19.0.0",
"@angular/compiler": "^19.0.0",
@@ -37,9 +37,9 @@
"zone.js": "~0.15.0"
},
"devDependencies": {
- "@analogjs/platform": "^1.17.0-beta.6",
- "@analogjs/vite-plugin-angular": "^1.17.0-beta.6",
- "@analogjs/vitest-angular": "^1.17.0-beta.6",
+ "@benpsnyder/analogjs-esm-platform": "^1.17.0-beta.6",
+ "@benpsnyder/analogjs-esm-vite-plugin-angular": "^1.17.0-beta.6",
+ "@benpsnyder/analogjs-esm-vitest-angular": "^1.17.0-beta.6",
"@angular-devkit/build-angular": "^19.0.0",
"@angular/build": "^19.0.0",
"@angular/cli": "^19.0.0",
diff --git a/packages/create-analog/template-angular-v19/src/app/app.config.ts b/packages/create-analog/template-angular-v19/src/app/app.config.ts
index a1a58ee8f..0f8d35b49 100644
--- a/packages/create-analog/template-angular-v19/src/app/app.config.ts
+++ b/packages/create-analog/template-angular-v19/src/app/app.config.ts
@@ -5,7 +5,7 @@ import {
} from '@angular/common/http';
import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
import { provideClientHydration } from '@angular/platform-browser';
-import { provideFileRouter, requestContextInterceptor } from '@analogjs/router';
+import { provideFileRouter, requestContextInterceptor } from '@benpsnyder/analogjs-esm-router';
export const appConfig: ApplicationConfig = {
providers: [
diff --git a/packages/create-analog/template-angular-v19/src/main.server.ts b/packages/create-analog/template-angular-v19/src/main.server.ts
index d3f23684e..e4868f52f 100644
--- a/packages/create-analog/template-angular-v19/src/main.server.ts
+++ b/packages/create-analog/template-angular-v19/src/main.server.ts
@@ -1,6 +1,6 @@
import 'zone.js/node';
import '@angular/platform-server/init';
-import { render } from '@analogjs/router/server';
+import { render } from '@benpsnyder/analogjs-esm-router/server';
__APP_COMPONENT_IMPORT__
import { config } from './app/app.config.server';
diff --git a/packages/create-analog/template-angular-v19/src/test-setup.ts b/packages/create-analog/template-angular-v19/src/test-setup.ts
index 318c3b9d7..ad87fb9e1 100644
--- a/packages/create-analog/template-angular-v19/src/test-setup.ts
+++ b/packages/create-analog/template-angular-v19/src/test-setup.ts
@@ -1,4 +1,4 @@
-import '@analogjs/vitest-angular/setup-zone';
+import '@benpsnyder/analogjs-esm-vitest-angular/setup-zone';
import {
BrowserDynamicTestingModule,
diff --git a/packages/create-analog/template-angular-v19/vite.config.ts b/packages/create-analog/template-angular-v19/vite.config.ts
index 2a8fdd9ae..7041f5e7b 100644
--- a/packages/create-analog/template-angular-v19/vite.config.ts
+++ b/packages/create-analog/template-angular-v19/vite.config.ts
@@ -1,7 +1,7 @@
///
import { defineConfig } from 'vite';
-import analog from '@analogjs/platform';__TAILWIND_IMPORT__
+import analog from '@benpsnyder/analogjs-esm-platform';__TAILWIND_IMPORT__
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => ({
diff --git a/packages/create-analog/template-blog/angular.json b/packages/create-analog/template-blog/angular.json
index f56eb3afa..3e043c031 100644
--- a/packages/create-analog/template-blog/angular.json
+++ b/packages/create-analog/template-blog/angular.json
@@ -10,7 +10,7 @@
"prefix": "blog",
"architect": {
"build": {
- "builder": "@analogjs/platform:vite",
+ "builder": "@benpsnyder/analogjs-esm-platform:vite",
"options": {
"configFile": "vite.config.ts",
"main": "src/main.ts",
@@ -29,7 +29,7 @@
}
},
"serve": {
- "builder": "@analogjs/platform:vite-dev-server",
+ "builder": "@benpsnyder/analogjs-esm-platform:vite-dev-server",
"defaultConfiguration": "development",
"options": {
"buildTarget": "blog:build",
@@ -46,7 +46,7 @@
}
},
"test": {
- "builder": "@analogjs/vitest-angular:test"
+ "builder": "@benpsnyder/analogjs-esm-vitest-angular:test"
}
}
}
diff --git a/packages/create-analog/template-blog/package.json b/packages/create-analog/template-blog/package.json
index bd044fbd3..18dfb4bff 100644
--- a/packages/create-analog/template-blog/package.json
+++ b/packages/create-analog/template-blog/package.json
@@ -16,8 +16,8 @@
},
"private": true,
"dependencies": {
- "@analogjs/content": "^2.0.0-alpha.16",
- "@analogjs/router": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-content": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-router": "^2.0.0-alpha.16",
"@angular/animations": "^19.0.0",
"@angular/common": "^19.0.0",
"@angular/compiler": "^19.0.0",
@@ -37,21 +37,21 @@
"zone.js": "~0.15.0"
},
"devDependencies": {
- "@analogjs/platform": "^2.0.0-alpha.16",
- "@analogjs/vite-plugin-angular": "^2.0.0-alpha.16",
- "@analogjs/vitest-angular": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-platform": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-vite-plugin-angular": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-vitest-angular": "^2.0.0-alpha.16",
"@angular-devkit/build-angular": "^19.0.0",
"@angular/build": "^19.0.0",
"@angular/cli": "^19.0.0",
"@angular/compiler-cli": "^19.0.0",
"jsdom": "^22.0.0",
"typescript": "~5.8.0",
- "vite": "^7.0.0",
+ "vite": "npm:rolldown-vite@7.1.2",
"vite-tsconfig-paths": "^4.2.0",
"vitest": "^3.0.0"
},
"overrides": {
- "@analogjs/platform": {
+ "@benpsnyder/analogjs-esm-platform": {
"vite": "$vite"
}
}
diff --git a/packages/create-analog/template-blog/src/app/app.config.ts b/packages/create-analog/template-blog/src/app/app.config.ts
index 266227dc6..8ef17651e 100644
--- a/packages/create-analog/template-blog/src/app/app.config.ts
+++ b/packages/create-analog/template-blog/src/app/app.config.ts
@@ -9,9 +9,9 @@ import {
provideZoneChangeDetection
} from '@angular/core';
import { provideClientHydration, withEventReplay } from '@angular/platform-browser';
-import { provideFileRouter, requestContextInterceptor } from '@analogjs/router';
-import { provideContent, withMarkdownRenderer } from '@analogjs/content';
-import { __HIGHLIGHTER__ } from '@analogjs/content/__HIGHLIGHTER_ENTRY_POINT__';
+import { provideFileRouter, requestContextInterceptor } from '@benpsnyder/analogjs-esm-router';
+import { provideContent, withMarkdownRenderer } from '@benpsnyder/analogjs-esm-content';
+import { __HIGHLIGHTER__ } from '@benpsnyder/analogjs-esm-content/__HIGHLIGHTER_ENTRY_POINT__';
export const appConfig: ApplicationConfig = {
providers: [
diff --git a/packages/create-analog/template-blog/src/app/pages/blog/[slug].page.ts b/packages/create-analog/template-blog/src/app/pages/blog/[slug].page.ts
index 8f0b5d314..55e7ba4fa 100644
--- a/packages/create-analog/template-blog/src/app/pages/blog/[slug].page.ts
+++ b/packages/create-analog/template-blog/src/app/pages/blog/[slug].page.ts
@@ -1,6 +1,6 @@
import { Component } from '@angular/core';
import { AsyncPipe } from '@angular/common';
-import { injectContent, MarkdownComponent } from '@analogjs/content';
+import { injectContent, MarkdownComponent } from '@benpsnyder/analogjs-esm-content';
import PostAttributes from '../../post-attributes';
diff --git a/packages/create-analog/template-blog/src/app/pages/blog/index.page.ts b/packages/create-analog/template-blog/src/app/pages/blog/index.page.ts
index dd6a37bbb..3b15898a8 100644
--- a/packages/create-analog/template-blog/src/app/pages/blog/index.page.ts
+++ b/packages/create-analog/template-blog/src/app/pages/blog/index.page.ts
@@ -1,6 +1,6 @@
import { Component } from '@angular/core';
import { RouterLink } from '@angular/router';
-import { injectContentFiles } from '@analogjs/content';
+import { injectContentFiles } from '@benpsnyder/analogjs-esm-content';
import PostAttributes from '../../post-attributes';
diff --git a/packages/create-analog/template-blog/src/app/pages/index.page.ts b/packages/create-analog/template-blog/src/app/pages/index.page.ts
index 9811ea22a..731111fcd 100644
--- a/packages/create-analog/template-blog/src/app/pages/index.page.ts
+++ b/packages/create-analog/template-blog/src/app/pages/index.page.ts
@@ -1,4 +1,4 @@
-import { RouteMeta } from '@analogjs/router';
+import { RouteMeta } from '@benpsnyder/analogjs-esm-router';
export const routeMeta: RouteMeta = {
redirectTo: '/blog',
diff --git a/packages/create-analog/template-blog/src/main.server.ts b/packages/create-analog/template-blog/src/main.server.ts
index d3f23684e..e4868f52f 100644
--- a/packages/create-analog/template-blog/src/main.server.ts
+++ b/packages/create-analog/template-blog/src/main.server.ts
@@ -1,6 +1,6 @@
import 'zone.js/node';
import '@angular/platform-server/init';
-import { render } from '@analogjs/router/server';
+import { render } from '@benpsnyder/analogjs-esm-router/server';
__APP_COMPONENT_IMPORT__
import { config } from './app/app.config.server';
diff --git a/packages/create-analog/template-blog/src/test-setup.ts b/packages/create-analog/template-blog/src/test-setup.ts
index 9157d5fd3..ad1599b2e 100644
--- a/packages/create-analog/template-blog/src/test-setup.ts
+++ b/packages/create-analog/template-blog/src/test-setup.ts
@@ -1,5 +1,5 @@
import '@angular/compiler';
-import '@analogjs/vitest-angular/setup-zone';
+import '@benpsnyder/analogjs-esm-vitest-angular/setup-zone';
import {
BrowserTestingModule,
diff --git a/packages/create-analog/template-blog/tsconfig.json b/packages/create-analog/template-blog/tsconfig.json
index bb1824fe6..78cfa28fa 100644
--- a/packages/create-analog/template-blog/tsconfig.json
+++ b/packages/create-analog/template-blog/tsconfig.json
@@ -18,9 +18,12 @@
"importHelpers": true,
"target": "ES2022",
"module": "ES2022",
+ "moduleDetection": "force",
+ "allowJs": true,
"lib": ["ES2022", "dom"],
"useDefineForClassFields": false,
- "skipLibCheck": true
+ "skipLibCheck": true,
+ "noUncheckedIndexedAccess": true,
},
"angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false,
diff --git a/packages/create-analog/template-blog/vite.config.ts b/packages/create-analog/template-blog/vite.config.ts
index 560f5e269..c9a5a7b3f 100644
--- a/packages/create-analog/template-blog/vite.config.ts
+++ b/packages/create-analog/template-blog/vite.config.ts
@@ -1,7 +1,7 @@
///
import { defineConfig } from 'vite';
-import analog from '@analogjs/platform';__TAILWIND_IMPORT__
+import analog from '@benpsnyder/analogjs-esm-platform';__TAILWIND_IMPORT__
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => ({
diff --git a/packages/create-analog/template-latest/angular.json b/packages/create-analog/template-latest/angular.json
index 60b166f35..e5f1ceed9 100644
--- a/packages/create-analog/template-latest/angular.json
+++ b/packages/create-analog/template-latest/angular.json
@@ -10,7 +10,7 @@
"prefix": "app",
"architect": {
"build": {
- "builder": "@analogjs/platform:vite",
+ "builder": "@benpsnyder/analogjs-esm-platform:vite",
"options": {
"configFile": "vite.config.ts",
"main": "src/main.ts",
@@ -29,7 +29,7 @@
}
},
"serve": {
- "builder": "@analogjs/platform:vite-dev-server",
+ "builder": "@benpsnyder/analogjs-esm-platform:vite-dev-server",
"defaultConfiguration": "development",
"options": {
"buildTarget": "my-app:build",
@@ -46,7 +46,7 @@
}
},
"test": {
- "builder": "@analogjs/vitest-angular:test"
+ "builder": "@benpsnyder/analogjs-esm-vitest-angular:test"
}
}
}
diff --git a/packages/create-analog/template-latest/package.json b/packages/create-analog/template-latest/package.json
index 1388675a7..3a7755637 100644
--- a/packages/create-analog/template-latest/package.json
+++ b/packages/create-analog/template-latest/package.json
@@ -16,8 +16,8 @@
},
"private": true,
"dependencies": {
- "@analogjs/content": "^2.0.0-alpha.16",
- "@analogjs/router": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-content": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-router": "^2.0.0-alpha.16",
"@angular/animations": "^19.0.0",
"@angular/common": "^19.0.0",
"@angular/compiler": "^19.0.0",
@@ -38,21 +38,21 @@
"zone.js": "~0.15.0"
},
"devDependencies": {
- "@analogjs/platform": "^2.0.0-alpha.16",
- "@analogjs/vite-plugin-angular": "^2.0.0-alpha.16",
- "@analogjs/vitest-angular": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-platform": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-vite-plugin-angular": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-vitest-angular": "^2.0.0-alpha.16",
"@angular-devkit/build-angular": "^19.0.0",
"@angular/build": "^19.0.0",
"@angular/cli": "^19.0.0",
"@angular/compiler-cli": "^19.0.0",
"jsdom": "^22.0.0",
"typescript": "~5.8.0",
- "vite": "^7.0.0",
+ "vite": "npm:rolldown-vite@7.1.2",
"vite-tsconfig-paths": "^4.2.0",
"vitest": "^3.0.0"
},
"overrides": {
- "@analogjs/platform": {
+ "@benpsnyder/analogjs-esm-platform": {
"vite": "$vite"
}
}
diff --git a/packages/create-analog/template-latest/src/app/app.config.ts b/packages/create-analog/template-latest/src/app/app.config.ts
index 008ab66b2..e892101dc 100644
--- a/packages/create-analog/template-latest/src/app/app.config.ts
+++ b/packages/create-analog/template-latest/src/app/app.config.ts
@@ -9,7 +9,7 @@ import {
provideZoneChangeDetection
} from '@angular/core';
import { provideClientHydration, withEventReplay } from '@angular/platform-browser';
-import { provideFileRouter, requestContextInterceptor } from '@analogjs/router';
+import { provideFileRouter, requestContextInterceptor } from '@benpsnyder/analogjs-esm-router';
export const appConfig: ApplicationConfig = {
providers: [
diff --git a/packages/create-analog/template-latest/src/main.server.ts b/packages/create-analog/template-latest/src/main.server.ts
index d3f23684e..e4868f52f 100644
--- a/packages/create-analog/template-latest/src/main.server.ts
+++ b/packages/create-analog/template-latest/src/main.server.ts
@@ -1,6 +1,6 @@
import 'zone.js/node';
import '@angular/platform-server/init';
-import { render } from '@analogjs/router/server';
+import { render } from '@benpsnyder/analogjs-esm-router/server';
__APP_COMPONENT_IMPORT__
import { config } from './app/app.config.server';
diff --git a/packages/create-analog/template-latest/src/test-setup.ts b/packages/create-analog/template-latest/src/test-setup.ts
index 9157d5fd3..ad1599b2e 100644
--- a/packages/create-analog/template-latest/src/test-setup.ts
+++ b/packages/create-analog/template-latest/src/test-setup.ts
@@ -1,5 +1,5 @@
import '@angular/compiler';
-import '@analogjs/vitest-angular/setup-zone';
+import '@benpsnyder/analogjs-esm-vitest-angular/setup-zone';
import {
BrowserTestingModule,
diff --git a/packages/create-analog/template-latest/tsconfig.json b/packages/create-analog/template-latest/tsconfig.json
index bb1824fe6..78cfa28fa 100644
--- a/packages/create-analog/template-latest/tsconfig.json
+++ b/packages/create-analog/template-latest/tsconfig.json
@@ -18,9 +18,12 @@
"importHelpers": true,
"target": "ES2022",
"module": "ES2022",
+ "moduleDetection": "force",
+ "allowJs": true,
"lib": ["ES2022", "dom"],
"useDefineForClassFields": false,
- "skipLibCheck": true
+ "skipLibCheck": true,
+ "noUncheckedIndexedAccess": true,
},
"angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false,
diff --git a/packages/create-analog/template-latest/vite.config.ts b/packages/create-analog/template-latest/vite.config.ts
index 2a8fdd9ae..7041f5e7b 100644
--- a/packages/create-analog/template-latest/vite.config.ts
+++ b/packages/create-analog/template-latest/vite.config.ts
@@ -1,7 +1,7 @@
///
import { defineConfig } from 'vite';
-import analog from '@analogjs/platform';__TAILWIND_IMPORT__
+import analog from '@benpsnyder/analogjs-esm-platform';__TAILWIND_IMPORT__
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => ({
diff --git a/packages/create-analog/template-minimal/angular.json b/packages/create-analog/template-minimal/angular.json
index 98e71a303..7359aa6de 100644
--- a/packages/create-analog/template-minimal/angular.json
+++ b/packages/create-analog/template-minimal/angular.json
@@ -10,7 +10,7 @@
"prefix": "app",
"architect": {
"build": {
- "builder": "@analogjs/platform:vite",
+ "builder": "@benpsnyder/analogjs-esm-platform:vite",
"options": {
"configFile": "vite.config.ts",
"main": "src/main.ts",
@@ -29,7 +29,7 @@
}
},
"serve": {
- "builder": "@analogjs/platform:vite-dev-server",
+ "builder": "@benpsnyder/analogjs-esm-platform:vite-dev-server",
"defaultConfiguration": "development",
"options": {
"buildTarget": "my-app:build",
diff --git a/packages/create-analog/template-minimal/package.json b/packages/create-analog/template-minimal/package.json
index 1388675a7..3a7755637 100644
--- a/packages/create-analog/template-minimal/package.json
+++ b/packages/create-analog/template-minimal/package.json
@@ -16,8 +16,8 @@
},
"private": true,
"dependencies": {
- "@analogjs/content": "^2.0.0-alpha.16",
- "@analogjs/router": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-content": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-router": "^2.0.0-alpha.16",
"@angular/animations": "^19.0.0",
"@angular/common": "^19.0.0",
"@angular/compiler": "^19.0.0",
@@ -38,21 +38,21 @@
"zone.js": "~0.15.0"
},
"devDependencies": {
- "@analogjs/platform": "^2.0.0-alpha.16",
- "@analogjs/vite-plugin-angular": "^2.0.0-alpha.16",
- "@analogjs/vitest-angular": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-platform": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-vite-plugin-angular": "^2.0.0-alpha.16",
+ "@benpsnyder/analogjs-esm-vitest-angular": "^2.0.0-alpha.16",
"@angular-devkit/build-angular": "^19.0.0",
"@angular/build": "^19.0.0",
"@angular/cli": "^19.0.0",
"@angular/compiler-cli": "^19.0.0",
"jsdom": "^22.0.0",
"typescript": "~5.8.0",
- "vite": "^7.0.0",
+ "vite": "npm:rolldown-vite@7.1.2",
"vite-tsconfig-paths": "^4.2.0",
"vitest": "^3.0.0"
},
"overrides": {
- "@analogjs/platform": {
+ "@benpsnyder/analogjs-esm-platform": {
"vite": "$vite"
}
}
diff --git a/packages/create-analog/template-minimal/src/app/app.config.ts b/packages/create-analog/template-minimal/src/app/app.config.ts
index 008ab66b2..e892101dc 100644
--- a/packages/create-analog/template-minimal/src/app/app.config.ts
+++ b/packages/create-analog/template-minimal/src/app/app.config.ts
@@ -9,7 +9,7 @@ import {
provideZoneChangeDetection
} from '@angular/core';
import { provideClientHydration, withEventReplay } from '@angular/platform-browser';
-import { provideFileRouter, requestContextInterceptor } from '@analogjs/router';
+import { provideFileRouter, requestContextInterceptor } from '@benpsnyder/analogjs-esm-router';
export const appConfig: ApplicationConfig = {
providers: [
diff --git a/packages/create-analog/template-minimal/src/main.server.ts b/packages/create-analog/template-minimal/src/main.server.ts
index d3f23684e..e4868f52f 100644
--- a/packages/create-analog/template-minimal/src/main.server.ts
+++ b/packages/create-analog/template-minimal/src/main.server.ts
@@ -1,6 +1,6 @@
import 'zone.js/node';
import '@angular/platform-server/init';
-import { render } from '@analogjs/router/server';
+import { render } from '@benpsnyder/analogjs-esm-router/server';
__APP_COMPONENT_IMPORT__
import { config } from './app/app.config.server';
diff --git a/packages/create-analog/template-minimal/tsconfig.json b/packages/create-analog/template-minimal/tsconfig.json
index b35e861f6..1eb9ac1a9 100644
--- a/packages/create-analog/template-minimal/tsconfig.json
+++ b/packages/create-analog/template-minimal/tsconfig.json
@@ -19,9 +19,12 @@
"importHelpers": true,
"target": "ES2022",
"module": "ES2022",
+ "moduleDetection": "force",
+ "allowJs": true,
"lib": ["ES2022", "dom"],
"useDefineForClassFields": false,
- "skipLibCheck": true
+ "skipLibCheck": true,
+ "noUncheckedIndexedAccess": true,
},
"angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false,
diff --git a/packages/create-analog/template-minimal/vite.config.ts b/packages/create-analog/template-minimal/vite.config.ts
index f34573d3e..8b4969999 100644
--- a/packages/create-analog/template-minimal/vite.config.ts
+++ b/packages/create-analog/template-minimal/vite.config.ts
@@ -1,7 +1,7 @@
///
import { defineConfig } from 'vite';
-import analog from '@analogjs/platform';__TAILWIND_IMPORT__
+import analog from '@benpsnyder/analogjs-esm-platform';__TAILWIND_IMPORT__
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => ({
diff --git a/packages/create-analog/tsconfig.lib.json b/packages/create-analog/tsconfig.lib.json
index fa1fb03bf..d41db6785 100644
--- a/packages/create-analog/tsconfig.lib.json
+++ b/packages/create-analog/tsconfig.lib.json
@@ -1,7 +1,6 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
- "module": "commonjs",
"outDir": "../../dist/out-tsc",
"inlineSourceMap": true,
"sourceMap": false,
diff --git a/packages/create-analog/tsconfig.spec.json b/packages/create-analog/tsconfig.spec.json
index 14e698cc1..f55852090 100644
--- a/packages/create-analog/tsconfig.spec.json
+++ b/packages/create-analog/tsconfig.spec.json
@@ -2,7 +2,6 @@
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
- "module": "commonjs",
"types": ["vitest/globals", "node"]
},
"include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"]
diff --git a/packages/nx-plugin/.eslintrc.json b/packages/nx-plugin/.eslintrc.json
deleted file mode 100644
index d102cd105..000000000
--- a/packages/nx-plugin/.eslintrc.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": [
- "!**/*",
- "**/vite.config.*.timestamp*",
- "**/vitest.config.*.timestamp*"
- ],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["*.ts", "*.tsx"],
- "rules": {}
- },
- {
- "files": ["*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["./package.json", "./generators.json", "./executors.json"],
- "parser": "jsonc-eslint-parser",
- "rules": {
- "@nx/nx-plugin-checks": "error"
- }
- }
- ]
-}
diff --git a/packages/nx-plugin/eslint.config.mjs b/packages/nx-plugin/eslint.config.mjs
new file mode 100644
index 000000000..4c696cf58
--- /dev/null
+++ b/packages/nx-plugin/eslint.config.mjs
@@ -0,0 +1,44 @@
+import { FlatCompat } from '@eslint/eslintrc';
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+import js from '@eslint/js';
+import baseConfig from '../../eslint.config.mjs';
+
+const compat = new FlatCompat({
+ baseDirectory: dirname(fileURLToPath(import.meta.url)),
+ recommendedConfig: js.configs.recommended,
+});
+
+export default [
+ {
+ ignores: ['**/dist'],
+ },
+ ...baseConfig,
+ {
+ files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
+ // Override or add rules here
+ rules: {},
+ },
+ {
+ files: ['**/*.ts', '**/*.tsx'],
+ // Override or add rules here
+ rules: {},
+ },
+ {
+ files: ['**/*.js', '**/*.jsx'],
+ // Override or add rules here
+ rules: {},
+ },
+ {
+ files: ['./package.json', './generators.json', './executors.json'],
+ rules: {
+ '@nx/nx-plugin-checks': 'error',
+ },
+ languageOptions: {
+ parser: await import('jsonc-eslint-parser'),
+ },
+ },
+ {
+ ignores: ['**/vite.config.*.timestamp*', '**/vitest.config.*.timestamp*'],
+ },
+];
diff --git a/packages/nx-plugin/package.json b/packages/nx-plugin/package.json
index 9f746ab5e..e86ef705d 100644
--- a/packages/nx-plugin/package.json
+++ b/packages/nx-plugin/package.json
@@ -1,5 +1,11 @@
{
- "name": "@analogjs/nx",
+ "name": "@benpsnyder/analogjs-esm-nx",
"version": "0.0.1",
- "main": "src/index.js"
+ "main": "src/index.js",
+ "dependencies": {
+ "semver": "^7.7.2"
+ },
+ "devDependencies": {
+ "@types/semver": "^7.7.0"
+ }
}
diff --git a/packages/nx-plugin/project.json b/packages/nx-plugin/project.json
index 04ea36a98..3c88442f5 100644
--- a/packages/nx-plugin/project.json
+++ b/packages/nx-plugin/project.json
@@ -7,9 +7,8 @@
"targets": {
"build": {
"executor": "@nx/js:tsc",
-
"options": {
- "outputPath": "node_modules/@analogjs/platform/src/lib/nx-plugin",
+ "outputPath": "node_modules/@benpsnyder/analogjs-esm-platform/src/lib/nx-plugin",
"main": "packages/nx-plugin/src/index.ts",
"tsConfig": "packages/nx-plugin/tsconfig.lib.json",
"clean": true,
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular-v15/src/main.server.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular-v15/src/main.server.ts__template__
index 0d4209a48..1fb1cce50 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular-v15/src/main.server.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular-v15/src/main.server.ts__template__
@@ -1,7 +1,7 @@
import 'zone.js/node';
import { enableProdMode } from '@angular/core';
import { renderApplication } from '@angular/platform-server';
-import { provideFileRouter } from '@analogjs/router';
+import { provideFileRouter } from '@benpsnyder/analogjs-esm-router';
import { withEnabledBlockingInitialNavigation } from '@angular/router';
import { AppComponent } from './app/app.component';
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular-v15/src/main.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular-v15/src/main.ts__template__
index a9c476d2e..a42c12c81 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular-v15/src/main.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular-v15/src/main.ts__template__
@@ -1,6 +1,6 @@
import 'zone.js';
import { bootstrapApplication } from '@angular/platform-browser';
-import { provideFileRouter } from '@analogjs/router';
+import { provideFileRouter } from '@benpsnyder/analogjs-esm-router';
import { AppComponent } from './app/app.component';
import { mainProviders } from './main.providers';
<% if (addTRPC) { %>
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular-v15/src/test-setup.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular-v15/src/test-setup.ts__template__
index 318c3b9d7..ad87fb9e1 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular-v15/src/test-setup.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular-v15/src/test-setup.ts__template__
@@ -1,4 +1,4 @@
-import '@analogjs/vitest-angular/setup-zone';
+import '@benpsnyder/analogjs-esm-vitest-angular/setup-zone';
import {
BrowserDynamicTestingModule,
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular-v15/vite.config.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular-v15/vite.config.ts__template__
index c9fb26142..7bdaa431c 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular-v15/vite.config.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular-v15/vite.config.ts__template__
@@ -1,6 +1,6 @@
///
-import analog from '@analogjs/platform';
+import analog from '@benpsnyder/analogjs-esm-platform';
import { defineConfig, Plugin } from 'vite';
import tsConfigPaths from 'vite-tsconfig-paths';
@@ -13,7 +13,7 @@ export default defineConfig(({ mode }) => {
host: '127.0.0.1'
},
ssr: {
- noExternal: '@analogjs/trpc/**',
+ noExternal: '@benpsnyder/analogjs-esm-trpc/**',
},
<% } %>
optimizeDeps: {
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular-v17/src/app/app.config.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular-v17/src/app/app.config.ts__template__
index e86975921..46586c782 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular-v17/src/app/app.config.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular-v17/src/app/app.config.ts__template__
@@ -1,7 +1,7 @@
import { ApplicationConfig } from '@angular/core';
import { provideHttpClient, withFetch } from '@angular/common/http';
import { provideClientHydration } from '@angular/platform-browser';
-import { provideFileRouter } from '@analogjs/router';
+import { provideFileRouter } from '@benpsnyder/analogjs-esm-router';
<% if (addTRPC) { %>
import { provideTrpcClient } from '../trpc-client';
<% } %>
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular-v17/src/test-setup.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular-v17/src/test-setup.ts__template__
index 318c3b9d7..ad87fb9e1 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular-v17/src/test-setup.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular-v17/src/test-setup.ts__template__
@@ -1,4 +1,4 @@
-import '@analogjs/vitest-angular/setup-zone';
+import '@benpsnyder/analogjs-esm-vitest-angular/setup-zone';
import {
BrowserDynamicTestingModule,
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular-v17/vite.config.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular-v17/vite.config.ts__template__
index 8a70c0c22..b53d73515 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular-v17/vite.config.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular-v17/vite.config.ts__template__
@@ -1,6 +1,6 @@
///
-import analog from '@analogjs/platform';
+import analog from '@benpsnyder/analogjs-esm-platform';
import { defineConfig, Plugin } from 'vite';
import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
<% if (addTailwind) { %>
@@ -16,7 +16,7 @@ export default defineConfig(({ mode }) => {
cacheDir: `<%= offsetFromRoot %>node_modules/.vite`,
<% if (addTRPC) { %>
ssr: {
- noExternal: ['@analogjs/trpc','@trpc/server'],
+ noExternal: ['@benpsnyder/analogjs-esm-trpc','@trpc/server'],
},
<% } %>
build: {
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular-v18/src/app/app.config.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular-v18/src/app/app.config.ts__template__
index f4db4a87c..b74b2fe5a 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular-v18/src/app/app.config.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular-v18/src/app/app.config.ts__template__
@@ -5,7 +5,7 @@ import {
withInterceptors,
} from '@angular/common/http';
import { provideClientHydration } from '@angular/platform-browser';
-import { provideFileRouter, requestContextInterceptor } from '@analogjs/router';
+import { provideFileRouter, requestContextInterceptor } from '@benpsnyder/analogjs-esm-router';
<% if (addTRPC) { %>
import { provideTrpcClient } from '../trpc-client';
<% } %>
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular-v18/src/main.server.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular-v18/src/main.server.ts__template__
index 3715f0e1e..dd4ca872a 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular-v18/src/main.server.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular-v18/src/main.server.ts__template__
@@ -1,6 +1,6 @@
import 'zone.js/node';
import '@angular/platform-server/init';
-import { render } from '@analogjs/router/server';
+import { render } from '@benpsnyder/analogjs-esm-router/server';
import { config } from './app/app.config.server';
import { AppComponent } from './app/app.component';
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular-v18/src/test-setup.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular-v18/src/test-setup.ts__template__
index 318c3b9d7..ad87fb9e1 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular-v18/src/test-setup.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular-v18/src/test-setup.ts__template__
@@ -1,4 +1,4 @@
-import '@analogjs/vitest-angular/setup-zone';
+import '@benpsnyder/analogjs-esm-vitest-angular/setup-zone';
import {
BrowserDynamicTestingModule,
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular-v18/vite.config.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular-v18/vite.config.ts__template__
index 654f7ff1a..29a2f32df 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular-v18/vite.config.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular-v18/vite.config.ts__template__
@@ -1,6 +1,6 @@
///
-import analog from '@analogjs/platform';
+import analog from '@benpsnyder/analogjs-esm-platform';
import { defineConfig, Plugin } from 'vite';
import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
<% if (addTailwind) { %>
@@ -15,7 +15,7 @@ export default defineConfig(({ mode }) => {
cacheDir: `<%= offsetFromRoot %>node_modules/.vite`,
<% if (addTRPC) { %>
ssr: {
- noExternal: ['@analogjs/trpc','@trpc/server'],
+ noExternal: ['@benpsnyder/analogjs-esm-trpc','@trpc/server'],
},
<% } %>
build: {
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular-v19/src/app/app.config.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular-v19/src/app/app.config.ts__template__
index f4db4a87c..b74b2fe5a 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular-v19/src/app/app.config.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular-v19/src/app/app.config.ts__template__
@@ -5,7 +5,7 @@ import {
withInterceptors,
} from '@angular/common/http';
import { provideClientHydration } from '@angular/platform-browser';
-import { provideFileRouter, requestContextInterceptor } from '@analogjs/router';
+import { provideFileRouter, requestContextInterceptor } from '@benpsnyder/analogjs-esm-router';
<% if (addTRPC) { %>
import { provideTrpcClient } from '../trpc-client';
<% } %>
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular-v19/src/main.server.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular-v19/src/main.server.ts__template__
index c9a307ccb..7dfc03b2c 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular-v19/src/main.server.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular-v19/src/main.server.ts__template__
@@ -1,6 +1,6 @@
import 'zone.js/node';
import '@angular/platform-server/init';
-import { render } from '@analogjs/router/server';
+import { render } from '@benpsnyder/analogjs-esm-router/server';
import { AppComponent } from './app/app.component';
import { config } from './app/app.config.server';
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular-v19/src/test-setup.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular-v19/src/test-setup.ts__template__
index 318c3b9d7..ad87fb9e1 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular-v19/src/test-setup.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular-v19/src/test-setup.ts__template__
@@ -1,4 +1,4 @@
-import '@analogjs/vitest-angular/setup-zone';
+import '@benpsnyder/analogjs-esm-vitest-angular/setup-zone';
import {
BrowserDynamicTestingModule,
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular-v19/vite.config.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular-v19/vite.config.ts__template__
index f53cc7955..99ae91cb5 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular-v19/vite.config.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular-v19/vite.config.ts__template__
@@ -1,6 +1,6 @@
///
-import analog from '@analogjs/platform';
+import analog from '@benpsnyder/analogjs-esm-platform';
import { defineConfig } from 'vite';
import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
<% if (addTailwind) { %>
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular/src/app/app.config.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular/src/app/app.config.ts__template__
index 50fab5f00..bd1464454 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular/src/app/app.config.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular/src/app/app.config.ts__template__
@@ -9,7 +9,7 @@ import {
withInterceptors,
} from '@angular/common/http';
import { provideClientHydration } from '@angular/platform-browser';
-import { provideFileRouter, requestContextInterceptor } from '@analogjs/router';
+import { provideFileRouter, requestContextInterceptor } from '@benpsnyder/analogjs-esm-router';
<% if (addTRPC) { %>
import { provideTrpcClient } from '../trpc-client';
<% } %>
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular/src/main.server.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular/src/main.server.ts__template__
index c9a307ccb..7dfc03b2c 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular/src/main.server.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular/src/main.server.ts__template__
@@ -1,6 +1,6 @@
import 'zone.js/node';
import '@angular/platform-server/init';
-import { render } from '@analogjs/router/server';
+import { render } from '@benpsnyder/analogjs-esm-router/server';
import { AppComponent } from './app/app.component';
import { config } from './app/app.config.server';
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular/src/test-setup.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular/src/test-setup.ts__template__
index 0b3fffd84..0e645c461 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular/src/test-setup.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular/src/test-setup.ts__template__
@@ -1,6 +1,6 @@
<% if (majorAngularVersion > 19) { %>
import '@angular/compiler';
-import '@analogjs/vitest-angular/setup-zone';
+import '@benpsnyder/analogjs-esm-vitest-angular/setup-zone';
import {
BrowserTestingModule,
@@ -13,7 +13,7 @@ getTestBed().initTestEnvironment(
platformBrowserTesting()
);
<% } else { %>
-import '@analogjs/vitest-angular/setup-zone';
+import '@benpsnyder/analogjs-esm-vitest-angular/setup-zone';
import {
BrowserDynamicTestingModule,
diff --git a/packages/nx-plugin/src/generators/app/files/template-angular/vite.config.ts__template__ b/packages/nx-plugin/src/generators/app/files/template-angular/vite.config.ts__template__
index f53cc7955..99ae91cb5 100644
--- a/packages/nx-plugin/src/generators/app/files/template-angular/vite.config.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/template-angular/vite.config.ts__template__
@@ -1,6 +1,6 @@
///
-import analog from '@analogjs/platform';
+import analog from '@benpsnyder/analogjs-esm-platform';
import { defineConfig } from 'vite';
import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
<% if (addTailwind) { %>
diff --git a/packages/nx-plugin/src/generators/app/files/trpc/src/server/routes/api/trpc/[trpc].ts__template__ b/packages/nx-plugin/src/generators/app/files/trpc/src/server/routes/api/trpc/[trpc].ts__template__
index 77713eb7b..884a4f5bc 100644
--- a/packages/nx-plugin/src/generators/app/files/trpc/src/server/routes/api/trpc/[trpc].ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/trpc/src/server/routes/api/trpc/[trpc].ts__template__
@@ -1,4 +1,4 @@
-import { createTrpcNitroHandler } from '@analogjs/trpc/server';
+import { createTrpcNitroHandler } from '@benpsnyder/analogjs-esm-trpc/server';
import { appRouter } from '../../../trpc/routers';
import { createContext } from '../../../trpc/context';
diff --git a/packages/nx-plugin/src/generators/app/files/trpc/src/trpc-client.ts__template__ b/packages/nx-plugin/src/generators/app/files/trpc/src/trpc-client.ts__template__
index 5b57eb49c..6f0a21ad7 100644
--- a/packages/nx-plugin/src/generators/app/files/trpc/src/trpc-client.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/trpc/src/trpc-client.ts__template__
@@ -1,5 +1,5 @@
import { AppRouter } from './server/trpc/routers';
-import { createTrpcClient } from '@analogjs/trpc';
+import { createTrpcClient } from '@benpsnyder/analogjs-esm-trpc';
import { inject } from '@angular/core';
import { SuperJSON } from 'superjson';
diff --git a/packages/nx-plugin/src/generators/app/files/welcome-components/css-trpc/src/app/pages/analog-welcome.component.ts__template__ b/packages/nx-plugin/src/generators/app/files/welcome-components/css-trpc/src/app/pages/analog-welcome.component.ts__template__
index d4af90218..f54643fa9 100644
--- a/packages/nx-plugin/src/generators/app/files/welcome-components/css-trpc/src/app/pages/analog-welcome.component.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/welcome-components/css-trpc/src/app/pages/analog-welcome.component.ts__template__
@@ -1,7 +1,7 @@
import { Component } from '@angular/core';
import { AsyncPipe, DatePipe, NgFor, NgIf } from '@angular/common';
import { FormsModule, NgForm } from '@angular/forms';
-import { waitFor } from '@analogjs/trpc';
+import { waitFor } from '@benpsnyder/analogjs-esm-trpc';
import { shareReplay, Subject, switchMap, take } from 'rxjs';
import { injectTrpcClient } from '../../trpc-client';
import { Note } from '../../note';
diff --git a/packages/nx-plugin/src/generators/app/files/welcome-components/tailwind-trpc/src/app/pages/analog-welcome.component.ts__template__ b/packages/nx-plugin/src/generators/app/files/welcome-components/tailwind-trpc/src/app/pages/analog-welcome.component.ts__template__
index f52a2a1f7..a7d7161ab 100644
--- a/packages/nx-plugin/src/generators/app/files/welcome-components/tailwind-trpc/src/app/pages/analog-welcome.component.ts__template__
+++ b/packages/nx-plugin/src/generators/app/files/welcome-components/tailwind-trpc/src/app/pages/analog-welcome.component.ts__template__
@@ -2,7 +2,7 @@ import { Component } from '@angular/core';
import { AsyncPipe, DatePipe, NgFor, NgIf } from '@angular/common';
import { FormsModule, NgForm } from '@angular/forms';
import { shareReplay, Subject, switchMap, take } from 'rxjs';
-import { waitFor } from '@analogjs/trpc';
+import { waitFor } from '@benpsnyder/analogjs-esm-trpc';
import { injectTrpcClient } from '../../trpc-client';
import { Note } from '../../note';
diff --git a/packages/nx-plugin/src/generators/app/generator.spec.ts b/packages/nx-plugin/src/generators/app/generator.spec.ts
index 29308dff6..f554b9700 100644
--- a/packages/nx-plugin/src/generators/app/generator.spec.ts
+++ b/packages/nx-plugin/src/generators/app/generator.spec.ts
@@ -35,8 +35,8 @@ describe('nx-plugin generator', () => {
dependencies: Record,
devDependencies: Record,
) => {
- expect(dependencies['@analogjs/content']).toBeDefined();
- expect(dependencies['@analogjs/router']).toBeDefined();
+ expect(dependencies['@benpsnyder/analogjs-esm-content']).toBeDefined();
+ expect(dependencies['@benpsnyder/analogjs-esm-router']).toBeDefined();
expect(dependencies['@angular/platform-server']).toBeDefined();
expect(dependencies['front-matter']).toBe('^4.0.2');
expect(dependencies['marked']).toBe('^15.0.7');
@@ -50,9 +50,13 @@ describe('nx-plugin generator', () => {
// we just check for truthy because @nx/eslint generator
// will install the correct version based on Nx version
// expect(devDependencies['@nx/eslint']).toBeTruthy();
- expect(devDependencies['@analogjs/platform']).toBeDefined();
- expect(devDependencies['@analogjs/vite-plugin-angular']).toBeDefined();
- expect(devDependencies['@analogjs/vitest-angular']).toBeDefined();
+ expect(devDependencies['@benpsnyder/analogjs-esm-platform']).toBeDefined();
+ expect(
+ devDependencies['@benpsnyder/analogjs-esm-vite-plugin-angular'],
+ ).toBeDefined();
+ expect(
+ devDependencies['@benpsnyder/analogjs-esm-vitest-angular'],
+ ).toBeDefined();
expect(devDependencies['@nx/vite']).toBeDefined();
expect(devDependencies['jsdom']).toBeDefined();
expect(devDependencies['vite']).toBeDefined();
@@ -137,7 +141,7 @@ describe('nx-plugin generator', () => {
tree: Tree,
dependencies: Record,
) => {
- expect(dependencies['@analogjs/trpc']).toBeDefined();
+ expect(dependencies['@benpsnyder/analogjs-esm-trpc']).toBeDefined();
const hasTrpcClientFile = tree.exists('apps/trpc-app/src/trpc-client.ts');
const hasNoteFile = tree.exists('apps/trpc-app/src/note.ts');
const hasTrpcServerRoute = tree.exists(
diff --git a/packages/nx-plugin/src/generators/app/generator.ts b/packages/nx-plugin/src/generators/app/generator.ts
index eeb2515e7..ecd833816 100644
--- a/packages/nx-plugin/src/generators/app/generator.ts
+++ b/packages/nx-plugin/src/generators/app/generator.ts
@@ -26,6 +26,7 @@ import { addTrpc } from './lib/add-trpc';
import { cleanupFiles } from './lib/cleanup-files';
import { addAnalogProjectConfig } from './lib/add-analog-project-config';
import { updateIndex } from './lib/update-index-html';
+import { addAnalogDependencies } from './lib/add-analog-dependencies';
export interface NormalizedOptions
extends AnalogNxApplicationGeneratorOptions,
@@ -127,7 +128,18 @@ export async function appGenerator(
});
const angularVersion = getInstalledPackageVersion(tree, '@angular/core');
- const majorAngularVersion = major(coerce(angularVersion));
+
+ if (!angularVersion) {
+ throw new Error('@angular/core version not found in package.json');
+ }
+
+ const coercedAngularVersion = coerce(angularVersion);
+
+ if (!coercedAngularVersion) {
+ throw new Error(`Invalid Angular version: ${angularVersion}`);
+ }
+
+ const majorAngularVersion = major(coercedAngularVersion);
addFiles(tree, normalizedOptions, majorAngularVersion);
addDependenciesToPackageJson(
tree,
@@ -140,11 +152,15 @@ export async function appGenerator(
{},
);
- updateJson<{ dependencies: object }>(tree, '/package.json', (json) => {
- json.dependencies['@angular/platform-server'] = `~${angularVersion}`;
+ updateJson<{ dependencies: Record }>(
+ tree,
+ '/package.json',
+ (json) => {
+ json.dependencies['@angular/platform-server'] = `~${angularVersion}`;
- return json;
- });
+ return json;
+ },
+ );
updateIndex(tree, normalizedOptions.analogAppName);
@@ -152,7 +168,7 @@ export async function appGenerator(
await addTailwindConfig(tree, normalizedOptions.projectName);
}
- if (normalizedOptions.addTRPC) {
+ if (normalizedOptions.addTRPC && nxVersion) {
await addTrpc(
tree,
normalizedOptions.projectRoot,
diff --git a/packages/nx-plugin/src/generators/app/lib/add-analog-dependencies.ts b/packages/nx-plugin/src/generators/app/lib/add-analog-dependencies.ts
index 62346325f..549461d46 100644
--- a/packages/nx-plugin/src/generators/app/lib/add-analog-dependencies.ts
+++ b/packages/nx-plugin/src/generators/app/lib/add-analog-dependencies.ts
@@ -13,12 +13,12 @@ export async function addAnalogDependencies(
) {
const dependencies = getAnalogDependencies(nxVersion, angularVersion);
const devDependencies = getAnalogDevDependencies(nxVersion);
- // ensure previous @analogjs/platform version is removed, whether installed
+ // ensure previous @benpsnyder/analogjs-esm-platform version is removed, whether installed
// as a dependency or devDependency, before adding analog dependencies.
removeDependenciesFromPackageJson(
tree,
- ['@analogjs/platform'],
- ['@analogjs/platform'],
+ ['@benpsnyder/analogjs-esm-platform'],
+ ['@benpsnyder/analogjs-esm-platform'],
);
addDependenciesToPackageJson(tree, dependencies, devDependencies);
}
diff --git a/packages/nx-plugin/src/generators/app/lib/add-analog-project-config.ts b/packages/nx-plugin/src/generators/app/lib/add-analog-project-config.ts
index 80bb56a96..e59c9d05b 100644
--- a/packages/nx-plugin/src/generators/app/lib/add-analog-project-config.ts
+++ b/packages/nx-plugin/src/generators/app/lib/add-analog-project-config.ts
@@ -21,7 +21,7 @@ export function addAnalogProjectConfig(
projectType: 'application',
[targets]: {
build: {
- [builders]: `@analogjs/platform:vite`,
+ [builders]: `@benpsnyder/analogjs-esm-platform:vite`,
defaultConfiguration: 'production',
configurations: {
development: {
@@ -34,7 +34,7 @@ export function addAnalogProjectConfig(
},
},
serve: {
- [builders]: `@analogjs/platform:vite-dev-server`,
+ [builders]: `@benpsnyder/analogjs-esm-platform:vite-dev-server`,
defaultConfiguration: 'development',
options: {
buildTarget: `${projectName}:build`,
@@ -51,42 +51,51 @@ export function addAnalogProjectConfig(
},
},
test: {
- [builders]: `@analogjs/vitest-angular:test`,
+ [builders]: `@benpsnyder/analogjs-esm-vitest-angular:test`,
},
},
};
if (isNx) {
+ if (!projectConfiguration.targets) {
+ projectConfiguration.targets = {};
+ }
projectConfiguration.targets['build'].outputs = [
'{options.outputPath}',
`{workspaceRoot}/dist/${workspaceAppsDir}${projectName}/.nitro`,
`{workspaceRoot}/dist/${workspaceAppsDir}${projectName}/ssr`,
`{workspaceRoot}/dist/${workspaceAppsDir}${projectName}/analog`,
];
- projectConfiguration[targets]['build'].options = {
+ (projectConfiguration as any)[targets]['build'].options = {
main: `${workspaceAppsDir}${projectName}/src/main.ts`,
configFile: `${workspaceAppsDir}${projectName}/vite.config.ts`,
outputPath: `dist/${workspaceAppsDir}${projectName}/client`,
tsConfig: `${workspaceAppsDir}${projectName}/tsconfig.app.json`,
};
- projectConfiguration[targets]['test'].outputs = [`{projectRoot}/coverage`];
- projectConfiguration[targets]['extract-i18n'] = undefined;
- projectConfiguration[targets]['serve-static'] = undefined;
+ (projectConfiguration as any)[targets]['test'].outputs = [
+ `{projectRoot}/coverage`,
+ ];
+ (projectConfiguration as any)[targets]['extract-i18n'] = undefined;
+ (projectConfiguration as any)[targets]['serve-static'] = undefined;
projectConfiguration.tags = parsedTags;
projectConfiguration.sourceRoot = `${projectRoot}/src`;
} else {
const projects = getProjects(tree);
- projectConfiguration = projects.get(projectName);
- projectConfiguration[targets] = projectConfiguration.targets;
- projectConfiguration[targets]['extract-i18n'] = undefined;
- projectConfiguration[targets]['serve-static'] = undefined;
+ const existingProjectConfiguration = projects.get(projectName);
+ if (!existingProjectConfiguration) {
+ throw new Error(`Project ${projectName} not found`);
+ }
+ projectConfiguration = existingProjectConfiguration;
+ (projectConfiguration as any)[targets] = projectConfiguration.targets;
+ (projectConfiguration as any)[targets]['extract-i18n'] = undefined;
+ (projectConfiguration as any)[targets]['serve-static'] = undefined;
projectConfiguration.tags = parsedTags;
- delete projectConfiguration['$schema'];
- delete projectConfiguration['name'];
- delete projectConfiguration['generators'];
- delete projectConfiguration['targets'];
- delete projectConfiguration[targets]['extract-i18n'];
+ delete (projectConfiguration as any)['$schema'];
+ delete (projectConfiguration as any)['name'];
+ delete (projectConfiguration as any)['generators'];
+ delete (projectConfiguration as any)['targets'];
+ delete (projectConfiguration as any)[targets]['extract-i18n'];
}
if (isNx) {
diff --git a/packages/nx-plugin/src/generators/app/lib/add-angular-app.ts b/packages/nx-plugin/src/generators/app/lib/add-angular-app.ts
index 50ab2ef49..d1265ff6e 100644
--- a/packages/nx-plugin/src/generators/app/lib/add-angular-app.ts
+++ b/packages/nx-plugin/src/generators/app/lib/add-angular-app.ts
@@ -1,23 +1,24 @@
import { getWorkspaceLayout, Tree } from '@nx/devkit';
import { NormalizedOptions } from '../generator';
+import type { Schema } from '@nx/angular/src/generators/application/schema';
+import { UnitTestRunner } from '@nx/angular/generators';
export async function addAngularApp(tree: Tree, options: NormalizedOptions) {
const isNx = tree.exists('/nx.json');
const appsDir = isNx ? getWorkspaceLayout(tree).appsDir : 'projects';
- const appOptions: typeof import('@nx/angular/src/generators/application/schema') =
- {
- name: options.analogAppName,
- directory: `${appsDir}/${options.analogAppName}`,
- linter: !isNx || process.env['NODE_ENV'] === 'test' ? 'none' : 'eslint',
- unitTestRunner: 'vitest',
- standalone: true,
- ssr: false,
- bundler: 'esbuild',
- serverRouting: false,
- skipFormat: true,
- tags: options.tags,
- };
+ const appOptions: Partial = {
+ name: options.analogAppName,
+ directory: `${appsDir}/${options.analogAppName}`,
+ linter: !isNx || process.env['NODE_ENV'] === 'test' ? 'none' : 'eslint',
+ unitTestRunner: 'vitest' as UnitTestRunner,
+ standalone: true,
+ ssr: false,
+ bundler: 'esbuild',
+ serverRouting: false,
+ skipFormat: true,
+ tags: options.tags,
+ };
await (
await import(
diff --git a/packages/nx-plugin/src/generators/app/lib/add-tailwind-helpers.ts b/packages/nx-plugin/src/generators/app/lib/add-tailwind-helpers.ts
index 684d1fc4e..9f8542e6f 100644
--- a/packages/nx-plugin/src/generators/app/lib/add-tailwind-helpers.ts
+++ b/packages/nx-plugin/src/generators/app/lib/add-tailwind-helpers.ts
@@ -91,7 +91,7 @@ export function updateApplicationStyles(
const stylesEntryPointContent = tree.read(stylesEntryPoint, 'utf-8');
- if (tailwindInstalledVersion < '4') {
+ if (tailwindInstalledVersion && tailwindInstalledVersion < '4') {
tree.write(
stylesEntryPoint,
stripIndents`@tailwind base;
@@ -117,7 +117,7 @@ export function updateApplicationStyles(
}
}
-function isStyleEntryPointCss(stylesEntryPoint) {
+function isStyleEntryPointCss(stylesEntryPoint: string) {
return stylesEntryPoint.endsWith('.css');
}
@@ -227,7 +227,7 @@ export function addTailwindConfigFile(
joinPathFragments(__dirname, '..', 'files', 'tailwind/v2'),
project.root,
{
- relativeSourceRoot: relative(project.root, project.sourceRoot),
+ relativeSourceRoot: relative(project.root, project.sourceRoot || 'src'),
template: '',
},
);
@@ -239,7 +239,7 @@ export function addTailwindConfigFile(
joinPathFragments(__dirname, '..', 'files', 'tailwind/v3'),
project.root,
{
- relativeSourceRoot: relative(project.root, project.sourceRoot),
+ relativeSourceRoot: relative(project.root, project.sourceRoot || 'src'),
template: '',
},
);
diff --git a/packages/nx-plugin/src/generators/app/lib/initialize-analog-workspace.ts b/packages/nx-plugin/src/generators/app/lib/initialize-analog-workspace.ts
index 9a7bea501..cbbfacb4e 100644
--- a/packages/nx-plugin/src/generators/app/lib/initialize-analog-workspace.ts
+++ b/packages/nx-plugin/src/generators/app/lib/initialize-analog-workspace.ts
@@ -40,6 +40,10 @@ export async function initializeAngularWorkspace(
}
}
+ if (!angularVersion) {
+ throw new Error('Could not determine Angular version');
+ }
+
if (belowMinimumSupportedAngularVersion(angularVersion)) {
throw new Error(
stripIndents`Analog only supports an Angular version of 15 and higher`,
@@ -82,7 +86,7 @@ const initWithNxNamespace = async (
},
);
- return getInstalledPackageVersion(tree, '@angular/core', null, true);
+ return getInstalledPackageVersion(tree, '@angular/core', undefined, true);
};
const initWithNrwlNamespace = async (
@@ -118,5 +122,5 @@ const initWithNrwlNamespace = async (
skipInstall: true,
skipFormat: skipFormat,
});
- return getInstalledPackageVersion(tree, '@angular/core', null, true);
+ return getInstalledPackageVersion(tree, '@angular/core', undefined, true);
};
diff --git a/packages/nx-plugin/src/generators/app/lib/update-index-html.ts b/packages/nx-plugin/src/generators/app/lib/update-index-html.ts
index d17e094e9..c662864f2 100644
--- a/packages/nx-plugin/src/generators/app/lib/update-index-html.ts
+++ b/packages/nx-plugin/src/generators/app/lib/update-index-html.ts
@@ -4,10 +4,17 @@ export function updateIndex(tree: Tree, projectName: string) {
const projects = getProjects(tree);
const projectConfig = projects.get(projectName);
+ if (!projectConfig) {
+ throw new Error(`Project ${projectName} not found`);
+ }
+
const indexPath = joinPathFragments(projectConfig.root, 'index.html');
if (tree.exists(indexPath)) {
const indexContents = tree.read(indexPath, 'utf-8');
+ if (!indexContents) {
+ return;
+ }
const updatedIndex = indexContents.replace(
'',
`
diff --git a/packages/nx-plugin/src/generators/app/versions/dependencies.ts b/packages/nx-plugin/src/generators/app/versions/dependencies.ts
index 1d4abee55..b06f3599a 100644
--- a/packages/nx-plugin/src/generators/app/versions/dependencies.ts
+++ b/packages/nx-plugin/src/generators/app/versions/dependencies.ts
@@ -24,8 +24,8 @@ import {
} from './nx_18_X/versions';
const dependencyKeys = [
- '@analogjs/content',
- '@analogjs/router',
+ '@benpsnyder/analogjs-esm-content',
+ '@benpsnyder/analogjs-esm-router',
'@angular/platform-server',
'front-matter',
'marked',
@@ -57,8 +57,8 @@ export const getAnalogDependencies = (
if (lt(escapedNxVersion, '18.0.0')) {
return {
'@angular/platform-server': `^${angularVersion}`,
- '@analogjs/content': V17_X_ANALOG_JS_CONTENT,
- '@analogjs/router': V17_X_ANALOG_JS_ROUTER,
+ '@benpsnyder/analogjs-esm-content': V17_X_ANALOG_JS_CONTENT,
+ '@benpsnyder/analogjs-esm-router': V17_X_ANALOG_JS_ROUTER,
'front-matter': V17_X_FRONT_MATTER,
marked: V17_X_MARKED,
'marked-gfm-heading-id': V17_X_MARKED_GFM_HEADING_ID,
@@ -72,8 +72,8 @@ export const getAnalogDependencies = (
// return latest 18.X deps for versions >= 18.0.0
return {
'@angular/platform-server': `^${angularVersion}`,
- '@analogjs/content': V18_X_ANALOG_JS_CONTENT,
- '@analogjs/router': V18_X_ANALOG_JS_ROUTER,
+ '@benpsnyder/analogjs-esm-content': V18_X_ANALOG_JS_CONTENT,
+ '@benpsnyder/analogjs-esm-router': V18_X_ANALOG_JS_ROUTER,
'front-matter': V18_X_FRONT_MATTER,
marked: V18_X_MARKED,
'marked-gfm-heading-id': V18_X_MARKED_GFM_HEADING_ID,
diff --git a/packages/nx-plugin/src/generators/app/versions/dev-dependencies.ts b/packages/nx-plugin/src/generators/app/versions/dev-dependencies.ts
index 74b044b38..9fcfcaf9a 100644
--- a/packages/nx-plugin/src/generators/app/versions/dev-dependencies.ts
+++ b/packages/nx-plugin/src/generators/app/versions/dev-dependencies.ts
@@ -22,13 +22,13 @@ import {
V18_X_ANALOG_JS_VITEST_ANGULAR,
} from './nx_18_X/versions';
-// TODO: @analogjs/vite-plugin-angular is being defined as we must pin
+// TODO: @benpsnyder/analogjs-esm-vite-plugin-angular is being defined as we must pin
// a supported version for Angular 15.x. This is not necessary for 16.x,
// so this could probably be amended to only add as an explicit
// devDependency for 15.x.
const devDependencyKeys = [
- '@analogjs/platform',
- '@analogjs/vite-plugin-angular',
+ '@benpsnyder/analogjs-esm-platform',
+ '@benpsnyder/analogjs-esm-vite-plugin-angular',
'jsdom',
'vite',
'vite-tsconfig-paths',
@@ -79,8 +79,9 @@ const getDevDependencies = (escapedNxVersion: string) => {
// install 17.x deps for versions <18.0.0
if (lt(escapedNxVersion, '18.0.0')) {
return {
- '@analogjs/platform': V17_X_ANALOG_JS_PLATFORM,
- '@analogjs/vite-plugin-angular': V17_X_ANALOG_JS_VITE_PLUGIN_ANGULAR,
+ '@benpsnyder/analogjs-esm-platform': V17_X_ANALOG_JS_PLATFORM,
+ '@benpsnyder/analogjs-esm-vite-plugin-angular':
+ V17_X_ANALOG_JS_VITE_PLUGIN_ANGULAR,
'@angular-devkit/build-angular': V17_X_ANGULAR_DEVKIT_BUILD_ANGULAR,
jsdom: V17_X_JSDOM,
vite: V17_X_VITE,
@@ -91,9 +92,10 @@ const getDevDependencies = (escapedNxVersion: string) => {
// return latest 18.x deps for versions >18.0.0
return {
- '@analogjs/platform': V18_X_ANALOG_JS_PLATFORM,
- '@analogjs/vite-plugin-angular': V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR,
- '@analogjs/vitest-angular': V18_X_ANALOG_JS_VITEST_ANGULAR,
+ '@benpsnyder/analogjs-esm-platform': V18_X_ANALOG_JS_PLATFORM,
+ '@benpsnyder/analogjs-esm-vite-plugin-angular':
+ V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR,
+ '@benpsnyder/analogjs-esm-vitest-angular': V18_X_ANALOG_JS_VITEST_ANGULAR,
'@angular-devkit/build-angular': V18_X_ANGULAR_DEVKIT_BUILD_ANGULAR,
jsdom: V18_X_JSDOM,
vite: V18_X_VITE,
diff --git a/packages/nx-plugin/src/generators/app/versions/minimum-supported-versions.ts b/packages/nx-plugin/src/generators/app/versions/minimum-supported-versions.ts
index 465c0db77..8d225693c 100644
--- a/packages/nx-plugin/src/generators/app/versions/minimum-supported-versions.ts
+++ b/packages/nx-plugin/src/generators/app/versions/minimum-supported-versions.ts
@@ -2,9 +2,15 @@ import { lt, coerce } from 'semver';
export const MINIMUM_SUPPORTED_NX_TRPC_VERSION = '16.1.0';
export const MINIMUM_SUPPORTED_NX_VERSION = '15.2.0';
export const MINIMUM_SUPPORTED_ANGULAR_VERSION = '15.0.0';
-export const belowMinimumSupportedNxVersion = (nxVersion: string) =>
- lt(coerce(nxVersion), MINIMUM_SUPPORTED_NX_VERSION);
-export const belowMinimumSupportedNxtRPCVersion = (nxVersion: string) =>
- lt(coerce(nxVersion), MINIMUM_SUPPORTED_NX_TRPC_VERSION);
-export const belowMinimumSupportedAngularVersion = (angularVersion: string) =>
- lt(coerce(angularVersion), MINIMUM_SUPPORTED_ANGULAR_VERSION);
+export const belowMinimumSupportedNxVersion = (nxVersion: string) => {
+ const version = coerce(nxVersion);
+ return version ? lt(version, MINIMUM_SUPPORTED_NX_VERSION) : true;
+};
+export const belowMinimumSupportedNxtRPCVersion = (nxVersion: string) => {
+ const version = coerce(nxVersion);
+ return version ? lt(version, MINIMUM_SUPPORTED_NX_TRPC_VERSION) : true;
+};
+export const belowMinimumSupportedAngularVersion = (angularVersion: string) => {
+ const version = coerce(angularVersion);
+ return version ? lt(version, MINIMUM_SUPPORTED_ANGULAR_VERSION) : true;
+};
diff --git a/packages/nx-plugin/src/generators/app/versions/nx-dependencies.ts b/packages/nx-plugin/src/generators/app/versions/nx-dependencies.ts
index 24b634701..e91f10dec 100644
--- a/packages/nx-plugin/src/generators/app/versions/nx-dependencies.ts
+++ b/packages/nx-plugin/src/generators/app/versions/nx-dependencies.ts
@@ -22,6 +22,10 @@ export const getNrwlDependencies = (
): Record => {
const escapedNxVersion = clean(nxVersion);
+ if (!escapedNxVersion) {
+ throw new Error(`Invalid Nx version: ${nxVersion}`);
+ }
+
// fail out for versions <17.0.0
if (lt(escapedNxVersion, '17.0.0')) {
throw new Error(
@@ -41,6 +45,10 @@ export const getNxDependencies = (
): Record => {
const escapedNxVersion = clean(nxVersion);
+ if (!escapedNxVersion) {
+ throw new Error(`Invalid Nx version: ${nxVersion}`);
+ }
+
// error for @nrwl to @nx namespace changes for Nx < 17
if (lt(escapedNxVersion, '17.0.0')) {
throw new Error(
diff --git a/packages/nx-plugin/src/generators/app/versions/trpc-dependencies.ts b/packages/nx-plugin/src/generators/app/versions/trpc-dependencies.ts
index 5db6efb0d..bf60979dc 100644
--- a/packages/nx-plugin/src/generators/app/versions/trpc-dependencies.ts
+++ b/packages/nx-plugin/src/generators/app/versions/trpc-dependencies.ts
@@ -18,7 +18,7 @@ import {
} from './nx_18_X/versions';
const tRPCDependencyKeys = [
- '@analogjs/trpc',
+ '@benpsnyder/analogjs-esm-trpc',
'@trpc/client',
'@trpc/server',
'superjson',
@@ -32,6 +32,10 @@ export const getTrpcDependencies = (
): Record => {
const escapedNxVersion = clean(nxVersion);
+ if (!escapedNxVersion) {
+ throw new Error(`Invalid Nx version: ${nxVersion}`);
+ }
+
// fail out for versions <17.0.0
if (lt(escapedNxVersion, '17.0.0')) {
throw new Error(
@@ -42,7 +46,7 @@ export const getTrpcDependencies = (
// install 17.x deps for versions <18.0.0
if (lt(escapedNxVersion, '18.0.0')) {
return {
- '@analogjs/trpc': V17_X_ANALOG_JS_TRPC,
+ '@benpsnyder/analogjs-esm-trpc': V17_X_ANALOG_JS_TRPC,
'@trpc/client': V17_X_TRPC_CLIENT,
'@trpc/server': V17_X_TRPC_SERVER,
superjson: V17_X_SUPERJSON,
@@ -53,7 +57,7 @@ export const getTrpcDependencies = (
// return latest deps for versions >= 18.0.0
return {
- '@analogjs/trpc': V18_X_ANALOG_JS_TRPC,
+ '@benpsnyder/analogjs-esm-trpc': V18_X_ANALOG_JS_TRPC,
'@trpc/client': V18_X_TRPC_CLIENT,
'@trpc/server': V18_X_TRPC_SERVER,
superjson: V18_X_SUPERJSON,
diff --git a/packages/nx-plugin/src/generators/init/files/src/main.server.ts__template__ b/packages/nx-plugin/src/generators/init/files/src/main.server.ts__template__
index 1740b6aae..ed4d149f9 100644
--- a/packages/nx-plugin/src/generators/init/files/src/main.server.ts__template__
+++ b/packages/nx-plugin/src/generators/init/files/src/main.server.ts__template__
@@ -1,6 +1,6 @@
import 'zone.js/node';
import '@angular/platform-server/init';
-import { render } from '@analogjs/router/server';
+import { render } from '@benpsnyder/analogjs-esm-router/server';
<% if (majorAngularVersion > 19) { %>
import { App } from './app/app';
import { config } from './app/app.config.server';
diff --git a/packages/nx-plugin/src/generators/init/files/vite.config.ts__template__ b/packages/nx-plugin/src/generators/init/files/vite.config.ts__template__
index 9e8ba1586..83e62378c 100644
--- a/packages/nx-plugin/src/generators/init/files/vite.config.ts__template__
+++ b/packages/nx-plugin/src/generators/init/files/vite.config.ts__template__
@@ -1,7 +1,7 @@
///
import { defineConfig } from 'vite';
-import analog from '@analogjs/platform';
+import analog from '@benpsnyder/analogjs-esm-platform';
<% if (isNx) { %>
import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
<% } else { %>
diff --git a/packages/nx-plugin/src/generators/init/generator.ts b/packages/nx-plugin/src/generators/init/generator.ts
index 1b6946dbf..32fbe9769 100644
--- a/packages/nx-plugin/src/generators/init/generator.ts
+++ b/packages/nx-plugin/src/generators/init/generator.ts
@@ -30,6 +30,10 @@ function addFiles(
const projects = getProjects(tree);
const projectConfig = projects.get(options.project);
+ if (!projectConfig) {
+ throw new Error(`Project ${options.project} not found`);
+ }
+
const templateOptions = {
...options,
offsetFromRoot: isNx ? '../../' : './',
@@ -61,7 +65,17 @@ export async function setupAnalogGenerator(
options: SetupAnalogGeneratorSchema,
) {
const angularVersion = getInstalledPackageVersion(tree, '@angular/core');
- const majorAngularVersion = major(coerce(angularVersion));
+
+ if (!angularVersion) {
+ throw new Error('Angular version not found in package.json');
+ }
+
+ const coercedVersion = coerce(angularVersion);
+ if (!coercedVersion) {
+ throw new Error(`Invalid Angular version: ${angularVersion}`);
+ }
+
+ const majorAngularVersion = major(coercedVersion);
addAnalogDependencies(tree, angularVersion);
updateBuildTarget(tree, options);
updateServeTarget(tree, options);
diff --git a/packages/nx-plugin/src/generators/init/lib/update-app-tsconfig.ts b/packages/nx-plugin/src/generators/init/lib/update-app-tsconfig.ts
index de94dc7c5..43a4c17e4 100644
--- a/packages/nx-plugin/src/generators/init/lib/update-app-tsconfig.ts
+++ b/packages/nx-plugin/src/generators/init/lib/update-app-tsconfig.ts
@@ -15,6 +15,10 @@ export function updateAppTsConfig(
const projectConfig = projects.get(schema.project);
+ if (!projectConfig) {
+ throw new Error(`Project ${schema.project} not found`);
+ }
+
const tsconfigPath = joinPathFragments(
projectConfig.root,
'tsconfig.app.json',
diff --git a/packages/nx-plugin/src/generators/init/lib/update-build-target.ts b/packages/nx-plugin/src/generators/init/lib/update-build-target.ts
index 69c4ea170..0e6024895 100644
--- a/packages/nx-plugin/src/generators/init/lib/update-build-target.ts
+++ b/packages/nx-plugin/src/generators/init/lib/update-build-target.ts
@@ -38,11 +38,15 @@ export function updateBuildTarget(
const projectConfig = projects.get(schema.project);
+ if (!projectConfig) {
+ throw new Error(`Project ${schema.project} not found`);
+ }
+
updateJson(tree, angularJsonPath, (json) => {
json.projects[schema.project].root = projectConfig.root;
json.projects[schema.project].sourceRoot = projectConfig.sourceRoot;
json.projects[schema.project].architect.build = {
- builder: '@analogjs/platform:vite',
+ builder: '@benpsnyder/analogjs-esm-platform:vite',
...commonConfig,
options: {
configFile: `${joinPathFragments(
@@ -65,8 +69,16 @@ export function updateBuildTarget(
const projectConfig = projects.get(schema.project);
+ if (!projectConfig) {
+ throw new Error(`Project ${schema.project} not found`);
+ }
+
+ if (!projectConfig.targets) {
+ projectConfig.targets = {};
+ }
+
projectConfig.targets.build = {
- executor: '@analogjs/platform:vite',
+ executor: '@benpsnyder/analogjs-esm-platform:vite',
...commonConfig,
options: {
configFile: `${joinPathFragments(
diff --git a/packages/nx-plugin/src/generators/init/lib/update-git-ignore.ts b/packages/nx-plugin/src/generators/init/lib/update-git-ignore.ts
index a16d6d2ad..7354747f3 100644
--- a/packages/nx-plugin/src/generators/init/lib/update-git-ignore.ts
+++ b/packages/nx-plugin/src/generators/init/lib/update-git-ignore.ts
@@ -6,7 +6,7 @@ export function updateGitIgnore(tree: Tree) {
if (tree.exists(gitIgnorePath)) {
const gitIgnoreContents = tree.read(gitIgnorePath, 'utf-8');
- if (!gitIgnoreContents.includes('.nx/cache')) {
+ if (gitIgnoreContents && !gitIgnoreContents.includes('.nx/cache')) {
let updatedGitIgnore = `${gitIgnoreContents}\n
.nx/cache
.nx/workspace-data`;
diff --git a/packages/nx-plugin/src/generators/init/lib/update-index-html.ts b/packages/nx-plugin/src/generators/init/lib/update-index-html.ts
index 057c9aeb8..3d21a141d 100644
--- a/packages/nx-plugin/src/generators/init/lib/update-index-html.ts
+++ b/packages/nx-plugin/src/generators/init/lib/update-index-html.ts
@@ -6,11 +6,18 @@ export function updateIndex(tree: Tree, schema: SetupAnalogGeneratorSchema) {
const projects = getProjects(tree);
const projectConfig = projects.get(schema.project);
+ if (!projectConfig) {
+ throw new Error(`Project ${schema.project} not found`);
+ }
+
const indexPath = joinPathFragments(projectConfig.root, 'src/index.html');
const newIndexPath = joinPathFragments(projectConfig.root, 'index.html');
if (tree.exists(indexPath)) {
const indexContents = tree.read(indexPath, 'utf-8');
+ if (!indexContents) {
+ return;
+ }
let updatedIndex = indexContents.replace(
'