nxt-sitemap 22.0.0 → 22.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.mjs.map +1 -1
- package/ng-add.cjs +1 -1
- package/ng-add.cjs.map +1 -1
- package/package.json +2 -2
- package/sitemap.mjs.map +1 -1
package/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../packages/packages/sitemap/src/builders/sitemap/builder.ts"],"sourcesContent":["import { createWriteStream } from 'fs'\r\nimport { readdir } from 'fs/promises'\r\nimport { join, normalize } from 'path'\r\nimport { Stream } from 'stream'\r\nimport { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect'\r\nimport { Builder } from '@angular-devkit/architect/src/internal'\r\nimport { JsonObject } from '@angular-devkit/core'\r\nimport { SitemapStream } from 'sitemap'\r\nimport { SitemapBuilderOptions } from './schema'\r\n\r\n/**\r\n * @internal\r\n */\r\nasync function findFiles(dir: string, fileName: string, prefix = ''): Promise<string[]> {\r\n const results = new Array<string>()\r\n const entries = await readdir(dir, { withFileTypes: true })\r\n\r\n for (const entry of entries) {\r\n const fullPath = join(dir, entry.name)\r\n if (entry.isDirectory()) {\r\n const subDirFiles = await findFiles(fullPath, fileName, join(prefix, entry.name).replace(/\\\\/g, '/'))\r\n results.push(...subDirFiles)\r\n } else if (entry.isFile() && entry.name === fileName) {\r\n results.push(prefix)\r\n }\r\n }\r\n\r\n return results\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nfunction withTrailingSlash(text: string) {\r\n if (!text.endsWith('/')) {\r\n return text + '/'\r\n }\r\n return text\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nfunction streamToPromise(stream: Stream) {\r\n return new Promise<void>((resolve, reject) => {\r\n stream\r\n .on('error', reject)\r\n .on('finish', () => {\r\n resolve()\r\n })\r\n })\r\n}\r\n\r\n/**\r\n * Angular builder for generating sitemap from prerendered routes\r\n */\r\nconst sitemapBuilder: Builder<SitemapBuilderOptions & JsonObject> = createBuilder(async (options: SitemapBuilderOptions, context: BuilderContext): Promise<BuilderOutput> => {\r\n const srcDirectory = withTrailingSlash(options.srcDirectory)\r\n const baseUrl = new URL(withTrailingSlash(options.baseUrl))\r\n const path = baseUrl.pathname\r\n const lastmod = options.lastMod == 'today'\r\n ? new Date()\r\n : options.lastMod\r\n ? new Date(options.lastMod)\r\n : undefined\r\n\r\n const changefreq = options.changeFreq\r\n const priority = options.priority ?? 0.5\r\n\r\n const targetFile = normalize(join(srcDirectory, 'sitemap.xml'))\r\n\r\n context.reportStatus(`Generating sitemap in ${targetFile}.`)\r\n\r\n try {\r\n const files = await findFiles(srcDirectory, 'index.html')\r\n\r\n if (!files.length) {\r\n throw new Error(`No matching files found in ${srcDirectory}.`)\r\n }\r\n\r\n const sitemap = new SitemapStream({ hostname: options.baseUrl })\r\n const target = createWriteStream(targetFile)\r\n const promise = streamToPromise(sitemap.pipe(target))\r\n\r\n files.forEach(file => {\r\n let pathname = path + file\r\n if (!options.trailingSlash && pathname.endsWith('/'))\r\n pathname = pathname.substring(0, pathname.length - 1)\r\n if (options.trailingSlash)\r\n pathname = withTrailingSlash(pathname)\r\n\r\n sitemap.write({\r\n url: pathname,\r\n changefreq,\r\n priority,\r\n lastmod\r\n })\r\n })\r\n sitemap.end()\r\n\r\n await promise\r\n } catch (err) {\r\n context.logger.error('Failed to generate sitemap.')\r\n return {\r\n success: false,\r\n error: (err as Error).message\r\n }\r\n }\r\n\r\n context.reportStatus('Done.')\r\n return { success: true }\r\n})\r\n\r\nexport default sitemapBuilder\r\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../packages/packages/sitemap/src/builders/sitemap/builder.ts"],"sourcesContent":["import { createWriteStream } from 'fs'\r\nimport { readdir } from 'fs/promises'\r\nimport { join, normalize } from 'path'\r\nimport { Stream } from 'stream'\r\nimport { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect'\r\nimport { Builder } from '@angular-devkit/architect/src/internal'\r\nimport { JsonObject } from '@angular-devkit/core'\r\nimport { SitemapStream } from 'sitemap'\r\nimport { SitemapBuilderOptions } from './schema'\r\n\r\n/**\r\n * @internal\r\n */\r\nasync function findFiles(dir: string, fileName: string, prefix = ''): Promise<string[]> {\r\n const results = new Array<string>()\r\n const entries = await readdir(dir, { withFileTypes: true })\r\n\r\n for (const entry of entries) {\r\n const fullPath = join(dir, entry.name)\r\n if (entry.isDirectory()) {\r\n const subDirFiles = await findFiles(fullPath, fileName, join(prefix, entry.name).replace(/\\\\/g, '/'))\r\n results.push(...subDirFiles)\r\n } else if (entry.isFile() && entry.name === fileName) {\r\n results.push(prefix)\r\n }\r\n }\r\n\r\n return results\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nfunction withTrailingSlash(text: string) {\r\n if (!text.endsWith('/')) {\r\n return text + '/'\r\n }\r\n return text\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nfunction streamToPromise(stream: Stream) {\r\n return new Promise<void>((resolve, reject) => {\r\n stream\r\n .on('error', reject)\r\n .on('finish', () => {\r\n resolve()\r\n })\r\n })\r\n}\r\n\r\n/**\r\n * Angular builder for generating sitemap from prerendered routes\r\n */\r\nconst sitemapBuilder: Builder<SitemapBuilderOptions & JsonObject> = createBuilder(async (options: SitemapBuilderOptions, context: BuilderContext): Promise<BuilderOutput> => {\r\n const srcDirectory = withTrailingSlash(options.srcDirectory)\r\n const baseUrl = new URL(withTrailingSlash(options.baseUrl))\r\n const path = baseUrl.pathname\r\n const lastmod = options.lastMod == 'today'\r\n ? new Date()\r\n : options.lastMod\r\n ? new Date(options.lastMod)\r\n : undefined\r\n\r\n const changefreq = options.changeFreq\r\n const priority = options.priority ?? 0.5\r\n\r\n const targetFile = normalize(join(srcDirectory, 'sitemap.xml'))\r\n\r\n context.reportStatus(`Generating sitemap in ${targetFile}.`)\r\n\r\n try {\r\n const files = await findFiles(srcDirectory, 'index.html')\r\n\r\n if (!files.length) {\r\n throw new Error(`No matching files found in ${srcDirectory}.`)\r\n }\r\n\r\n const sitemap = new SitemapStream({ hostname: options.baseUrl })\r\n const target = createWriteStream(targetFile)\r\n const promise = streamToPromise(sitemap.pipe(target))\r\n\r\n files.forEach(file => {\r\n let pathname = path + file\r\n if (!options.trailingSlash && pathname.endsWith('/'))\r\n pathname = pathname.substring(0, pathname.length - 1)\r\n if (options.trailingSlash)\r\n pathname = withTrailingSlash(pathname)\r\n\r\n sitemap.write({\r\n url: pathname,\r\n changefreq,\r\n priority,\r\n lastmod\r\n })\r\n })\r\n sitemap.end()\r\n\r\n await promise\r\n } catch (err) {\r\n context.logger.error('Failed to generate sitemap.')\r\n return {\r\n success: false,\r\n error: (err as Error).message\r\n }\r\n }\r\n\r\n context.reportStatus('Done.')\r\n return { success: true }\r\n})\r\n\r\nexport default sitemapBuilder\r\n"],"names":[],"mappings":"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"}
|
package/ng-add.cjs
CHANGED
|
@@ -14,7 +14,7 @@ function createHost(tree) {
|
|
|
14
14
|
if (!data) {
|
|
15
15
|
throw new schematics.SchematicsException('File not found.');
|
|
16
16
|
}
|
|
17
|
-
return
|
|
17
|
+
return new TextDecoder().decode(data);
|
|
18
18
|
},
|
|
19
19
|
writeFile: async (path, data) => tree.overwrite(path, data),
|
|
20
20
|
isDirectory: async (path) => !tree.exists(path) && tree.getDir(path).subfiles.length > 0,
|
package/ng-add.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-add.cjs","sources":["../../packages/packages/sitemap/src/schematics/utils.ts","../../packages/packages/sitemap/src/schematics/ng-add/index.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"ng-add.cjs","sources":["../../packages/packages/sitemap/src/schematics/utils.ts","../../packages/packages/sitemap/src/schematics/ng-add/index.ts"],"sourcesContent":["import { workspaces } from '@angular-devkit/core'\nimport { SchematicsException, Tree } from '@angular-devkit/schematics'\n\n/**\n * @internal\n */\nexport function createHost(tree: Tree): workspaces.WorkspaceHost {\n return {\n readFile: async (path: string): Promise<string> => {\n const data = tree.read(path)\n if (!data) {\n throw new SchematicsException('File not found.')\n }\n return new TextDecoder().decode(data)\n },\n writeFile: async (path: string, data: string): Promise<void> => tree.overwrite(path, data),\n isDirectory: async (path: string): Promise<boolean> => !tree.exists(path) && tree.getDir(path).subfiles.length > 0,\n isFile: async (path: string): Promise<boolean> => tree.exists(path)\n }\n}\n","import { join, normalize } from 'path'\r\nimport { workspaces } from '@angular-devkit/core'\r\nimport { SchematicContext, SchematicsException, Tree } from '@angular-devkit/schematics'\r\nimport { createHost } from '../utils'\r\nimport { NgAddSchematicOptions } from './schema'\r\n\r\nexport function ngAdd(options: NgAddSchematicOptions) {\r\n return async (tree: Tree, _context: SchematicContext) => {\r\n const host = createHost(tree)\r\n const { workspace } = await workspaces.readWorkspace('/', host)\r\n\r\n if (!options.project) {\r\n const apps = Array.from(workspace.projects.values()).filter(v => v.extensions['projectType'] === 'application')\r\n if (apps.length === 1) {\r\n // If there is only one project, return that one.\r\n options.project = Array.from(workspace.projects.keys())[0]\r\n } else {\r\n throw new SchematicsException(\r\n 'There is more than one project in your workspace. Please select it manually by using the --project argument.'\r\n )\r\n }\r\n }\r\n\r\n const project = workspace.projects.get(options.project)\r\n if (!project) {\r\n throw new SchematicsException(\r\n 'The specified Angular project is not defined in this workspace'\r\n )\r\n }\r\n\r\n if (project.extensions['projectType'] !== 'application') {\r\n throw new SchematicsException(\r\n 'Deploy requires an Angular project type of \"application\" in angular.json'\r\n )\r\n }\r\n\r\n if (!options.srcDirectory) {\r\n const outputPath = project.targets.get('build')?.options?.['outputPath']\r\n if (!outputPath) {\r\n throw new SchematicsException(\r\n `Cannot read the output path (architect.build.options.outputPath) of the Angular project \"${options.project}\" in angular.json`\r\n )\r\n }\r\n options.srcDirectory = ''\r\n if (typeof outputPath == 'string') {\r\n options.srcDirectory = join(outputPath, 'browser')\r\n } else if (typeof outputPath == 'object' && !Array.isArray(outputPath)) {\r\n options.srcDirectory = ''\r\n if (outputPath['base'] as any) {\r\n options.srcDirectory = outputPath['base'] as any\r\n }\r\n options.srcDirectory = normalize(join(options.srcDirectory!, outputPath['browser'] as any ?? 'browser')).replace(/\\\\/g, '/')\r\n }\r\n }\r\n\r\n project.targets.add({\r\n name: 'sitemap',\r\n builder: 'nxt-sitemap:sitemap',\r\n options: {\r\n srcDirectory: options.srcDirectory.replace(/\\\\/g, '/'),\r\n baseUrl: options.baseUrl\r\n }\r\n })\r\n\r\n await workspaces.writeWorkspace(workspace, host)\r\n return tree\r\n }\r\n}\r\n"],"names":["SchematicsException","workspaces","join","normalize"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "nxt-sitemap",
|
|
3
3
|
"description": "Angular builder for generating sitemap from prerendered routes.",
|
|
4
4
|
"bugs": "https://github.com/Liquid-JS/nxt-components/issues",
|
|
5
|
-
"version": "22.
|
|
5
|
+
"version": "22.1.0",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"repository": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@angular-devkit/schematics": "^22.0.0"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"sitemap": "^
|
|
31
|
+
"sitemap": "^10.0.0"
|
|
32
32
|
},
|
|
33
33
|
"exports": {
|
|
34
34
|
".": {
|
package/sitemap.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sitemap.mjs","sources":["../../packages/packages/sitemap/src/builders/sitemap/builder.ts"],"sourcesContent":["import { createWriteStream } from 'fs'\r\nimport { readdir } from 'fs/promises'\r\nimport { join, normalize } from 'path'\r\nimport { Stream } from 'stream'\r\nimport { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect'\r\nimport { Builder } from '@angular-devkit/architect/src/internal'\r\nimport { JsonObject } from '@angular-devkit/core'\r\nimport { SitemapStream } from 'sitemap'\r\nimport { SitemapBuilderOptions } from './schema'\r\n\r\n/**\r\n * @internal\r\n */\r\nasync function findFiles(dir: string, fileName: string, prefix = ''): Promise<string[]> {\r\n const results = new Array<string>()\r\n const entries = await readdir(dir, { withFileTypes: true })\r\n\r\n for (const entry of entries) {\r\n const fullPath = join(dir, entry.name)\r\n if (entry.isDirectory()) {\r\n const subDirFiles = await findFiles(fullPath, fileName, join(prefix, entry.name).replace(/\\\\/g, '/'))\r\n results.push(...subDirFiles)\r\n } else if (entry.isFile() && entry.name === fileName) {\r\n results.push(prefix)\r\n }\r\n }\r\n\r\n return results\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nfunction withTrailingSlash(text: string) {\r\n if (!text.endsWith('/')) {\r\n return text + '/'\r\n }\r\n return text\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nfunction streamToPromise(stream: Stream) {\r\n return new Promise<void>((resolve, reject) => {\r\n stream\r\n .on('error', reject)\r\n .on('finish', () => {\r\n resolve()\r\n })\r\n })\r\n}\r\n\r\n/**\r\n * Angular builder for generating sitemap from prerendered routes\r\n */\r\nconst sitemapBuilder: Builder<SitemapBuilderOptions & JsonObject> = createBuilder(async (options: SitemapBuilderOptions, context: BuilderContext): Promise<BuilderOutput> => {\r\n const srcDirectory = withTrailingSlash(options.srcDirectory)\r\n const baseUrl = new URL(withTrailingSlash(options.baseUrl))\r\n const path = baseUrl.pathname\r\n const lastmod = options.lastMod == 'today'\r\n ? new Date()\r\n : options.lastMod\r\n ? new Date(options.lastMod)\r\n : undefined\r\n\r\n const changefreq = options.changeFreq\r\n const priority = options.priority ?? 0.5\r\n\r\n const targetFile = normalize(join(srcDirectory, 'sitemap.xml'))\r\n\r\n context.reportStatus(`Generating sitemap in ${targetFile}.`)\r\n\r\n try {\r\n const files = await findFiles(srcDirectory, 'index.html')\r\n\r\n if (!files.length) {\r\n throw new Error(`No matching files found in ${srcDirectory}.`)\r\n }\r\n\r\n const sitemap = new SitemapStream({ hostname: options.baseUrl })\r\n const target = createWriteStream(targetFile)\r\n const promise = streamToPromise(sitemap.pipe(target))\r\n\r\n files.forEach(file => {\r\n let pathname = path + file\r\n if (!options.trailingSlash && pathname.endsWith('/'))\r\n pathname = pathname.substring(0, pathname.length - 1)\r\n if (options.trailingSlash)\r\n pathname = withTrailingSlash(pathname)\r\n\r\n sitemap.write({\r\n url: pathname,\r\n changefreq,\r\n priority,\r\n lastmod\r\n })\r\n })\r\n sitemap.end()\r\n\r\n await promise\r\n } catch (err) {\r\n context.logger.error('Failed to generate sitemap.')\r\n return {\r\n success: false,\r\n error: (err as Error).message\r\n }\r\n }\r\n\r\n context.reportStatus('Done.')\r\n return { success: true }\r\n})\r\n\r\nexport default sitemapBuilder\r\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sitemap.mjs","sources":["../../packages/packages/sitemap/src/builders/sitemap/builder.ts"],"sourcesContent":["import { createWriteStream } from 'fs'\r\nimport { readdir } from 'fs/promises'\r\nimport { join, normalize } from 'path'\r\nimport { Stream } from 'stream'\r\nimport { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect'\r\nimport { Builder } from '@angular-devkit/architect/src/internal'\r\nimport { JsonObject } from '@angular-devkit/core'\r\nimport { SitemapStream } from 'sitemap'\r\nimport { SitemapBuilderOptions } from './schema'\r\n\r\n/**\r\n * @internal\r\n */\r\nasync function findFiles(dir: string, fileName: string, prefix = ''): Promise<string[]> {\r\n const results = new Array<string>()\r\n const entries = await readdir(dir, { withFileTypes: true })\r\n\r\n for (const entry of entries) {\r\n const fullPath = join(dir, entry.name)\r\n if (entry.isDirectory()) {\r\n const subDirFiles = await findFiles(fullPath, fileName, join(prefix, entry.name).replace(/\\\\/g, '/'))\r\n results.push(...subDirFiles)\r\n } else if (entry.isFile() && entry.name === fileName) {\r\n results.push(prefix)\r\n }\r\n }\r\n\r\n return results\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nfunction withTrailingSlash(text: string) {\r\n if (!text.endsWith('/')) {\r\n return text + '/'\r\n }\r\n return text\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nfunction streamToPromise(stream: Stream) {\r\n return new Promise<void>((resolve, reject) => {\r\n stream\r\n .on('error', reject)\r\n .on('finish', () => {\r\n resolve()\r\n })\r\n })\r\n}\r\n\r\n/**\r\n * Angular builder for generating sitemap from prerendered routes\r\n */\r\nconst sitemapBuilder: Builder<SitemapBuilderOptions & JsonObject> = createBuilder(async (options: SitemapBuilderOptions, context: BuilderContext): Promise<BuilderOutput> => {\r\n const srcDirectory = withTrailingSlash(options.srcDirectory)\r\n const baseUrl = new URL(withTrailingSlash(options.baseUrl))\r\n const path = baseUrl.pathname\r\n const lastmod = options.lastMod == 'today'\r\n ? new Date()\r\n : options.lastMod\r\n ? new Date(options.lastMod)\r\n : undefined\r\n\r\n const changefreq = options.changeFreq\r\n const priority = options.priority ?? 0.5\r\n\r\n const targetFile = normalize(join(srcDirectory, 'sitemap.xml'))\r\n\r\n context.reportStatus(`Generating sitemap in ${targetFile}.`)\r\n\r\n try {\r\n const files = await findFiles(srcDirectory, 'index.html')\r\n\r\n if (!files.length) {\r\n throw new Error(`No matching files found in ${srcDirectory}.`)\r\n }\r\n\r\n const sitemap = new SitemapStream({ hostname: options.baseUrl })\r\n const target = createWriteStream(targetFile)\r\n const promise = streamToPromise(sitemap.pipe(target))\r\n\r\n files.forEach(file => {\r\n let pathname = path + file\r\n if (!options.trailingSlash && pathname.endsWith('/'))\r\n pathname = pathname.substring(0, pathname.length - 1)\r\n if (options.trailingSlash)\r\n pathname = withTrailingSlash(pathname)\r\n\r\n sitemap.write({\r\n url: pathname,\r\n changefreq,\r\n priority,\r\n lastmod\r\n })\r\n })\r\n sitemap.end()\r\n\r\n await promise\r\n } catch (err) {\r\n context.logger.error('Failed to generate sitemap.')\r\n return {\r\n success: false,\r\n error: (err as Error).message\r\n }\r\n }\r\n\r\n context.reportStatus('Done.')\r\n return { success: true }\r\n})\r\n\r\nexport default sitemapBuilder\r\n"],"names":[],"mappings":"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"}
|