@open-xchange/vite-plugin-project-meta 1.3.0 → 1.4.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/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## `1.4.0` – 2026-May-14
4
+
5
+ - changed: require NodeJS v22.18
6
+
7
+ ## `1.3.1` – 2026-Apr-13
8
+
9
+ - chore: use rolldown hook filters for better build performance
10
+ - chore: bump dependencies
11
+
3
12
  ## `1.3.0` – 2026-Apr-09
4
13
 
5
14
  - chore: switch to `tsdown` for building packages
package/README.md CHANGED
@@ -35,7 +35,7 @@ export default defineConfig(() => {
35
35
  })
36
36
  ```
37
37
 
38
- Register TypeScript type definitions for the 'virtual:metadata' module import:
38
+ Register TypeScript type definitions for the `virtual:metadata` module import:
39
39
 
40
40
  ```json
41
41
  // src/tsconfig.json
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;AAcA;UAAiB,4BAAA;;;;EAKf,WAAA;AAAA;AAAA,cAKW,YAAA;;;AAAuD;;;;;;;;iBAc5C,qBAAA,CAAsB,OAAA,EAAS,4BAAA,GAA+B,MAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;AAeA;UAAiB,4BAAA;;;AAKJ;EAAX,WAAW;AAAA;AAAA,cAKA,YAAA;;AAAY;AAA2C;;;;;;;;iBAc5C,qBAAA,CAAsB,OAAA,EAAS,4BAAA,GAA+B,MAAM"}
package/dist/index.mjs CHANGED
@@ -1,6 +1,7 @@
1
1
  import { join } from "node:path";
2
2
  import { readFileSync } from "node:fs";
3
3
  import { createHash } from "node:crypto";
4
+ import { createJsonModule, exactRegex } from "@open-xchange/rolldown-utils";
4
5
  //#region src/index.ts
5
6
  const PROJECT_NAME = "@open-xchange/vite-plugin-project-meta";
6
7
  /**
@@ -29,15 +30,13 @@ function vitePluginProjectMeta(options) {
29
30
  commitsha: process.env.CI_COMMIT_SHA
30
31
  };
31
32
  },
32
- resolveId(source) {
33
- return source === MODULE_NAME ? MODULE_ID : null;
33
+ resolveId: {
34
+ filter: { id: exactRegex(MODULE_NAME) },
35
+ handler: () => MODULE_ID
34
36
  },
35
- load(id) {
36
- if (id !== MODULE_ID) return null;
37
- return {
38
- code: `export default ${JSON.stringify(metadata)};`,
39
- map: { mappings: "" }
40
- };
37
+ load: {
38
+ filter: { id: exactRegex(MODULE_ID) },
39
+ handler: () => createJsonModule(metadata)
41
40
  },
42
41
  transformIndexHtml(_html, context) {
43
42
  if (!context.bundle) return;
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["\nimport { join } from 'node:path'\nimport { readFileSync } from 'node:fs'\nimport { createHash } from 'node:crypto'\n\nimport type { Plugin } from 'vite'\n\nimport type { VirtualProjectMetadata } from 'virtual:metadata'\n\n// types ======================================================================\n\n/**\n * Configuration options for the plugin '@open-xchange/vite-plugin-project-meta'.\n */\nexport interface VitePluginProjectMetaOptions {\n\n /**\n * The display name of the project.\n */\n projectName: string\n}\n\n// constants ==================================================================\n\nexport const PROJECT_NAME = '@open-xchange/vite-plugin-project-meta'\n\n// plugin =====================================================================\n\n/**\n * Vite plugin that provides a virtual module 'virtual:metadata' exporting a\n * metadata object with project build information (timestamp, commit ID, etc.).\n *\n * @param options\n * Plugin configuration.\n *\n * @returns\n * The Vite plugin object.\n */\nexport default function vitePluginProjectMeta(options: VitePluginProjectMetaOptions): Plugin {\n\n const MODULE_NAME = 'virtual:metadata'\n const MODULE_ID = `\\0${PROJECT_NAME}/${MODULE_NAME}`\n\n let metadata: VirtualProjectMetadata\n\n return {\n name: PROJECT_NAME,\n\n configResolved(config) {\n /** @ignore */\n interface Package {\n name: string\n version: string\n }\n const pkg = JSON.parse(readFileSync(join(config.root, 'package.json'), { encoding: 'utf8' })) as Package\n metadata = {\n id: pkg.name,\n name: options.projectName,\n version: pkg.version,\n builddate: new Date().toISOString(),\n commitsha: process.env.CI_COMMIT_SHA,\n }\n },\n\n resolveId(source) {\n return (source === MODULE_NAME) ? MODULE_ID : null\n },\n\n load(id) {\n if (id !== MODULE_ID) { return null }\n const code = `export default ${JSON.stringify(metadata)};`\n return { code, map: { mappings: '' } }\n },\n\n transformIndexHtml(_html, context) {\n if (!context.bundle) { return }\n const hash = createHash('md5').update(metadata.builddate).digest('hex')\n const len = Number.parseInt(hash.slice(0, 4), 16) % 99 + 42\n const count = Math.ceil(len / hash.length)\n const content = hash.repeat(count).slice(0, len)\n const attrs = { name: 'etag-fix', content }\n // inject a <meta> element into the <head>\n return [{ tag: 'meta', attrs, injectTo: 'head' }]\n },\n }\n}\n"],"mappings":";;;;AAwBA,MAAa,eAAe;;;;;;;;;;;AAc5B,SAAwB,sBAAsB,SAA+C;CAE3F,MAAM,cAAc;CACpB,MAAM,YAAY,KAAK,aAAa,GAAG;CAEvC,IAAI;AAEJ,QAAO;EACL,MAAM;EAEN,eAAe,QAAQ;GAMrB,MAAM,MAAM,KAAK,MAAM,aAAa,KAAK,OAAO,MAAM,eAAe,EAAE,EAAE,UAAU,QAAQ,CAAC,CAAC;AAC7F,cAAW;IACT,IAAI,IAAI;IACR,MAAM,QAAQ;IACd,SAAS,IAAI;IACb,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,WAAW,QAAQ,IAAI;IACxB;;EAGH,UAAU,QAAQ;AAChB,UAAQ,WAAW,cAAe,YAAY;;EAGhD,KAAK,IAAI;AACP,OAAI,OAAO,UAAa,QAAO;AAE/B,UAAO;IAAE,MADI,kBAAkB,KAAK,UAAU,SAAS,CAAC;IACzC,KAAK,EAAE,UAAU,IAAI;IAAE;;EAGxC,mBAAmB,OAAO,SAAS;AACjC,OAAI,CAAC,QAAQ,OAAU;GACvB,MAAM,OAAO,WAAW,MAAM,CAAC,OAAO,SAAS,UAAU,CAAC,OAAO,MAAM;GACvE,MAAM,MAAM,OAAO,SAAS,KAAK,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG,KAAK;GACzD,MAAM,QAAQ,KAAK,KAAK,MAAM,KAAK,OAAO;AAI1C,UAAO,CAAC;IAAE,KAAK;IAAQ,OAFT;KAAE,MAAM;KAAY,SADlB,KAAK,OAAO,MAAM,CAAC,MAAM,GAAG,IAAI;KACL;IAEb,UAAU;IAAQ,CAAC;;EAEpD"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["\nimport { join } from 'node:path'\nimport { readFileSync } from 'node:fs'\nimport { createHash } from 'node:crypto'\n\nimport type { Plugin } from 'vite'\nimport { exactRegex, createJsonModule } from '@open-xchange/rolldown-utils'\n\nimport type { VirtualProjectMetadata } from 'virtual:metadata'\n\n// types ======================================================================\n\n/**\n * Configuration options for the plugin '@open-xchange/vite-plugin-project-meta'.\n */\nexport interface VitePluginProjectMetaOptions {\n\n /**\n * The display name of the project.\n */\n projectName: string\n}\n\n// constants ==================================================================\n\nexport const PROJECT_NAME = '@open-xchange/vite-plugin-project-meta'\n\n// plugin =====================================================================\n\n/**\n * Vite plugin that provides a virtual module 'virtual:metadata' exporting a\n * metadata object with project build information (timestamp, commit ID, etc.).\n *\n * @param options\n * Plugin configuration.\n *\n * @returns\n * The Vite plugin object.\n */\nexport default function vitePluginProjectMeta(options: VitePluginProjectMetaOptions): Plugin {\n\n const MODULE_NAME = 'virtual:metadata'\n const MODULE_ID = `\\0${PROJECT_NAME}/${MODULE_NAME}`\n\n let metadata: VirtualProjectMetadata\n\n return {\n name: PROJECT_NAME,\n\n configResolved(config) {\n /** @ignore */\n interface Package {\n name: string\n version: string\n }\n const pkg = JSON.parse(readFileSync(join(config.root, 'package.json'), { encoding: 'utf8' })) as Package\n metadata = {\n id: pkg.name,\n name: options.projectName,\n version: pkg.version,\n builddate: new Date().toISOString(),\n commitsha: process.env.CI_COMMIT_SHA,\n }\n },\n\n resolveId: {\n filter: { id: exactRegex(MODULE_NAME) },\n handler: () => MODULE_ID,\n },\n\n load: {\n filter: { id: exactRegex(MODULE_ID) },\n handler: () => createJsonModule(metadata),\n },\n\n transformIndexHtml(_html, context) {\n if (!context.bundle) return\n const hash = createHash('md5').update(metadata.builddate).digest('hex')\n const len = Number.parseInt(hash.slice(0, 4), 16) % 99 + 42\n const count = Math.ceil(len / hash.length)\n const content = hash.repeat(count).slice(0, len)\n const attrs = { name: 'etag-fix', content }\n // inject a <meta> element into the <head>\n return [{ tag: 'meta', attrs, injectTo: 'head' }]\n },\n }\n}\n"],"mappings":";;;;;AAyBA,MAAa,eAAe;;;;;;;;;;;AAc5B,SAAwB,sBAAsB,SAA+C;CAE3F,MAAM,cAAc;CACpB,MAAM,YAAY,KAAK,aAAa,GAAG;CAEvC,IAAI;CAEJ,OAAO;EACL,MAAM;EAEN,eAAe,QAAQ;GAMrB,MAAM,MAAM,KAAK,MAAM,aAAa,KAAK,OAAO,MAAM,cAAc,GAAG,EAAE,UAAU,OAAO,CAAC,CAAC;GAC5F,WAAW;IACT,IAAI,IAAI;IACR,MAAM,QAAQ;IACd,SAAS,IAAI;IACb,4BAAW,IAAI,KAAK,GAAE,YAAY;IAClC,WAAW,QAAQ,IAAI;GACzB;EACF;EAEA,WAAW;GACT,QAAQ,EAAE,IAAI,WAAW,WAAW,EAAE;GACtC,eAAe;EACjB;EAEA,MAAM;GACJ,QAAQ,EAAE,IAAI,WAAW,SAAS,EAAE;GACpC,eAAe,iBAAiB,QAAQ;EAC1C;EAEA,mBAAmB,OAAO,SAAS;GACjC,IAAI,CAAC,QAAQ,QAAQ;GACrB,MAAM,OAAO,WAAW,KAAK,EAAE,OAAO,SAAS,SAAS,EAAE,OAAO,KAAK;GACtE,MAAM,MAAM,OAAO,SAAS,KAAK,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK;GACzD,MAAM,QAAQ,KAAK,KAAK,MAAM,KAAK,MAAM;GAIzC,OAAO,CAAC;IAAE,KAAK;IAAQ,OAAA;KAFP,MAAM;KAAY,SADlB,KAAK,OAAO,KAAK,EAAE,MAAM,GAAG,GACJ;IAEb;IAAG,UAAU;GAAO,CAAC;EAClD;CACF;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-xchange/vite-plugin-project-meta",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Vite plugin providing a virtual import for project metadata",
5
5
  "repository": {
6
6
  "type": "git",
@@ -9,7 +9,7 @@
9
9
  },
10
10
  "license": "MIT",
11
11
  "engines": {
12
- "node": ">=20.18"
12
+ "node": ">=22.18"
13
13
  },
14
14
  "type": "module",
15
15
  "exports": {
@@ -23,10 +23,13 @@
23
23
  "dist",
24
24
  "CHANGELOG.*"
25
25
  ],
26
+ "dependencies": {
27
+ "@open-xchange/rolldown-utils": "^1.2.0"
28
+ },
26
29
  "devDependencies": {
27
- "vite": "^8.0.8",
28
- "@open-xchange/linter-presets": "^1.22.0",
29
- "@open-xchange/tsconfig": "^0.0.2"
30
+ "vite": "^8.0.12",
31
+ "@open-xchange/tsconfig": "^0.1.0",
32
+ "@open-xchange/linter-presets": "^1.24.0"
30
33
  },
31
34
  "peerDependencies": {
32
35
  "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"