@needle-tools/engine 4.16.1 → 4.16.2

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.
Files changed (96) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/components.needle.json +1 -1
  3. package/dist/{needle-engine.bundle-C3aSGlMn.min.js → needle-engine.bundle-BOzZVXHu.min.js} +132 -132
  4. package/dist/{needle-engine.bundle-CKIxz09L.js → needle-engine.bundle-VXttgVve.js} +5357 -5342
  5. package/dist/{needle-engine.bundle-DSHShuiJ.umd.cjs → needle-engine.bundle-nJtehyVz.umd.cjs} +131 -131
  6. package/dist/needle-engine.d.ts +45 -23
  7. package/dist/needle-engine.js +2 -2
  8. package/dist/needle-engine.min.js +1 -1
  9. package/dist/needle-engine.umd.cjs +1 -1
  10. package/lib/engine-components/EventType.d.ts +1 -13
  11. package/lib/engine-components/EventType.js +13 -12
  12. package/lib/engine-components/EventType.js.map +1 -1
  13. package/lib/engine-components/ReflectionProbe.d.ts +31 -8
  14. package/lib/engine-components/ReflectionProbe.js +57 -15
  15. package/lib/engine-components/ReflectionProbe.js.map +1 -1
  16. package/package.json +15 -6
  17. package/plugins/next/next.d.ts +8 -0
  18. package/plugins/next/next.js +7 -6
  19. package/plugins/types/userconfig.d.ts +4 -6
  20. package/plugins/vite/ai.d.ts +17 -0
  21. package/plugins/vite/ai.js +2 -2
  22. package/plugins/vite/alias.d.ts +8 -0
  23. package/plugins/vite/alias.js +5 -2
  24. package/plugins/vite/asap.d.ts +7 -0
  25. package/plugins/vite/asap.js +3 -3
  26. package/plugins/vite/build-pipeline.d.ts +15 -0
  27. package/plugins/vite/build-pipeline.js +5 -6
  28. package/plugins/vite/build.d.ts +7 -0
  29. package/plugins/vite/build.js +5 -2
  30. package/plugins/vite/buildinfo.d.ts +7 -0
  31. package/plugins/vite/buildinfo.js +4 -2
  32. package/plugins/vite/config.d.ts +13 -0
  33. package/plugins/vite/config.js +1 -1
  34. package/plugins/vite/copyfiles.d.ts +7 -0
  35. package/plugins/vite/copyfiles.js +4 -2
  36. package/plugins/vite/custom-element-data.d.ts +25 -0
  37. package/plugins/vite/custom-element-data.js +2 -1
  38. package/plugins/vite/defines.d.ts +10 -0
  39. package/plugins/vite/defines.js +4 -3
  40. package/plugins/vite/dependencies.d.ts +21 -0
  41. package/plugins/vite/dependencies.js +3 -1
  42. package/plugins/vite/dependency-watcher.d.ts +11 -0
  43. package/plugins/vite/dependency-watcher.js +2 -1
  44. package/plugins/vite/drop-client.d.ts +1 -0
  45. package/plugins/vite/drop.d.ts +7 -0
  46. package/plugins/vite/drop.js +4 -4
  47. package/plugins/vite/editor-connection.d.ts +8 -0
  48. package/plugins/vite/editor-connection.js +6 -2
  49. package/plugins/vite/facebook-instant-games.d.ts +7 -0
  50. package/plugins/vite/facebook-instant-games.js +4 -2
  51. package/plugins/vite/gzip.d.ts +6 -0
  52. package/plugins/vite/gzip.js +5 -0
  53. package/plugins/vite/imports-logger.d.ts +13 -0
  54. package/plugins/vite/imports-logger.js +2 -1
  55. package/plugins/vite/index.d.ts +54 -0
  56. package/plugins/vite/index.js +16 -15
  57. package/plugins/vite/license.d.ts +7 -0
  58. package/plugins/vite/license.js +6 -6
  59. package/plugins/vite/local-files-analysis.d.ts +95 -0
  60. package/plugins/vite/local-files-analysis.js +2 -1
  61. package/plugins/vite/local-files-core.d.ts +51 -0
  62. package/plugins/vite/local-files-core.js +2 -2
  63. package/plugins/vite/local-files-internals.d.ts +3 -0
  64. package/plugins/vite/local-files-utils.d.ts +77 -0
  65. package/plugins/vite/local-files.d.ts +2 -0
  66. package/plugins/vite/logger.d.ts +8 -0
  67. package/plugins/vite/logger.js +1 -1
  68. package/plugins/vite/logging.d.ts +31 -0
  69. package/plugins/vite/meta.d.ts +7 -0
  70. package/plugins/vite/meta.js +4 -3
  71. package/plugins/vite/needle-app.d.ts +7 -0
  72. package/plugins/vite/needle-app.js +1 -1
  73. package/plugins/vite/npm.d.ts +4 -0
  74. package/plugins/vite/npm.js +1 -1
  75. package/plugins/vite/peer.d.ts +7 -0
  76. package/plugins/vite/peer.js +3 -1
  77. package/plugins/vite/poster-client.d.ts +1 -0
  78. package/plugins/vite/poster.d.ts +8 -0
  79. package/plugins/vite/poster.js +5 -2
  80. package/plugins/vite/pwa.d.ts +7 -0
  81. package/plugins/vite/pwa.js +4 -4
  82. package/plugins/vite/reload-client.d.ts +1 -0
  83. package/plugins/vite/reload.d.ts +7 -0
  84. package/plugins/vite/reload.js +7 -6
  85. package/plugins/vite/server.d.ts +7 -0
  86. package/plugins/vite/server.js +5 -5
  87. package/plugins/vite/transform-codegen.d.ts +8 -0
  88. package/plugins/vite/transform-codegen.js +6 -4
  89. package/plugins/vite/transform.d.ts +5 -0
  90. package/plugins/vite/transform.js +1 -1
  91. package/plugins/vite/vite-4.4-hack.d.ts +8 -0
  92. package/plugins/vite/vite-4.4-hack.js +1 -1
  93. package/src/engine-components/EventType.ts +13 -12
  94. package/src/engine-components/ReflectionProbe.ts +65 -20
  95. package/plugins/types/next.d.ts +0 -3
  96. package/plugins/types/vite.d.ts +0 -14
@@ -24,10 +24,12 @@ export function isLocalNeedleEngineInstalled(root = process.cwd()) {
24
24
  }
25
25
 
26
26
  /**
27
+ * @param {"build" | "serve"} command
28
+ * @param {import('../types/needleConfig').needleMeta | null | undefined} config
27
29
  * @param {import('../types').userSettings} userSettings
28
30
  * @returns {import('vite').Plugin[]}
29
31
  */
30
- export const needleDependencies = (command, config, userSettings) => {
32
+ export function needleDependencies(command, config, userSettings) {
31
33
 
32
34
  /**
33
35
  * @type {import('vite').Plugin}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @param {"build" | "serve"} command
3
+ * @param {unknown} _config
4
+ * @param {import('../types').userSettings} userSettings
5
+ * @returns {import('vite').Plugin | null}
6
+ */
7
+ export function needleDependencyWatcher(command: "build" | "serve", _config: unknown, userSettings: import("../types").userSettings): import("vite").Plugin | null;
8
+ export type PackageJson = {
9
+ dependencies?: Record<string, string>;
10
+ devDependencies?: Record<string, string>;
11
+ };
@@ -15,8 +15,9 @@ function log(...msg) {
15
15
  * @param {"build" | "serve"} command
16
16
  * @param {unknown} _config
17
17
  * @param {import('../types').userSettings} userSettings
18
+ * @returns {import('vite').Plugin | null}
18
19
  */
19
- export const needleDependencyWatcher = (command, _config, userSettings) => {
20
+ export function needleDependencyWatcher(command, _config, userSettings) {
20
21
  if (command === "build") return null;
21
22
 
22
23
  if (userSettings?.noDependencyWatcher === true) return null;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ /** Experimental, allow dropping files from Unity into the running scene.
2
+ * @param {"build" | "serve"} command
3
+ * @param {import('../types/needleConfig').needleMeta | null | undefined} config
4
+ * @param {import('../types/userconfig.js').userSettings} userSettings
5
+ * @returns {import('vite').Plugin | null | undefined}
6
+ */
7
+ export function needleDrop(command: "build" | "serve", config: import("../types/needleConfig").needleMeta | null | undefined, userSettings: import("../types/userconfig.js").userSettings): import("vite").Plugin | null | undefined;
@@ -6,13 +6,13 @@ import { fileURLToPath } from 'url';
6
6
  const __filename = fileURLToPath(import.meta.url);
7
7
  const __dirname = path.dirname(__filename);
8
8
 
9
- /** experimental, allow dropping files from Unity into the running scene */
10
- /**
11
- * @param {string} command
9
+ /** Experimental, allow dropping files from Unity into the running scene.
10
+ * @param {"build" | "serve"} command
12
11
  * @param {import('../types/needleConfig').needleMeta | null | undefined} config
13
12
  * @param {import('../types/userconfig.js').userSettings} userSettings
13
+ * @returns {import('vite').Plugin | null | undefined}
14
14
  */
15
- export const needleDrop = (command, config, userSettings) => {
15
+ export function needleDrop(command, config, userSettings) {
16
16
  if (command === "build") return;
17
17
 
18
18
  if(userSettings.useDrop !== true) return null;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @param {"build" | "serve"} command
3
+ * @param {import('../types/needleConfig').needleMeta | null | undefined} config
4
+ * @param {import('../types').userSettings} userSettings
5
+ * @param {import('vite').Plugin[]} [pluginsArray]
6
+ * @returns {Promise<import('vite').Plugin | undefined>}
7
+ */
8
+ export function editorConnection(command: "build" | "serve", config: import("../types/needleConfig").needleMeta | null | undefined, userSettings: import("../types").userSettings, pluginsArray?: import("vite").Plugin[]): Promise<import("vite").Plugin | undefined>;
@@ -14,9 +14,13 @@ const editorSyncPackageName = "@needle-tools/editor-sync"
14
14
  let editorSyncEnabled = false;
15
15
 
16
16
  /**
17
- * @type {(command: string, config: { generator?: string | null, needleEditor?: { enabled?: boolean } | string | null, dontInstallEditor?: boolean }, userSettings: { dontInstallEditor?: boolean }, pluginsArray: unknown[]) => Promise<import('vite').Plugin | undefined>}
17
+ * @param {"build" | "serve"} command
18
+ * @param {import('../types/needleConfig').needleMeta | null | undefined} config
19
+ * @param {import('../types').userSettings} userSettings
20
+ * @param {import('vite').Plugin[]} [pluginsArray]
21
+ * @returns {Promise<import('vite').Plugin | undefined>}
18
22
  */
19
- export const editorConnection = async (command, config, userSettings, pluginsArray) => {
23
+ export async function editorConnection(command, config, userSettings, pluginsArray) {
20
24
  if (command === "build") return;
21
25
 
22
26
  // Editor sync currently only supports Unity
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @param {"build" | "serve"} command
3
+ * @param {import('../types/needleConfig').needleMeta | null | undefined} config
4
+ * @param {import('../types').userSettings} userSettings
5
+ * @returns {import('vite').Plugin | undefined}
6
+ */
7
+ export function needleFacebookInstantGames(command: "build" | "serve", config: import("../types/needleConfig").needleMeta | null | undefined, userSettings: import("../types").userSettings): import("vite").Plugin | undefined;
@@ -31,10 +31,12 @@ function log(...any) {
31
31
  }
32
32
 
33
33
  /**
34
- * @param {{facebookInstantGames?:object}} config
34
+ * @param {"build" | "serve"} command
35
+ * @param {import('../types/needleConfig').needleMeta | null | undefined} config
35
36
  * @param {import('../types').userSettings} userSettings
37
+ * @returns {import('vite').Plugin | undefined}
36
38
  */
37
- export const needleFacebookInstantGames = (command, config, userSettings) => {
39
+ export function needleFacebookInstantGames(command, config, userSettings) {
38
40
 
39
41
  if (userSettings.noFacebookInstantGames === true) return;
40
42
 
@@ -0,0 +1,6 @@
1
+ /** Returns `true` when the Needle project is configured to serve gzip-compressed assets.
2
+ * Reads the `gzip` field from the config object.
3
+ * @param {import('../types/needleConfig').needleConfig | undefined} config
4
+ * @returns {boolean}
5
+ */
6
+ export function useGzip(config: import("../types/needleConfig").needleConfig | undefined): boolean;
@@ -1,6 +1,11 @@
1
1
 
2
2
  // import { existsSync } from 'fs';
3
3
 
4
+ /** Returns `true` when the Needle project is configured to serve gzip-compressed assets.
5
+ * Reads the `gzip` field from the config object.
6
+ * @param {import('../types/needleConfig').needleConfig | undefined} config
7
+ * @returns {boolean}
8
+ */
4
9
  export function useGzip(config) {
5
10
  return config?.gzip ? true : false;
6
11
  }
@@ -0,0 +1,13 @@
1
+ /** @typedef {{ id: string, imports: GraphNode[], importedBy: GraphNode[] }} GraphNode */
2
+ /**
3
+ * @param {"build" | "serve"} _command
4
+ * @param {unknown} _config
5
+ * @param {import('../types').userSettings} userSettings
6
+ * @returns {import('vite').Plugin | null}
7
+ */
8
+ export function needleImportsLogger(_command: "build" | "serve", _config: unknown, userSettings: import("../types").userSettings): import("vite").Plugin | null;
9
+ export type GraphNode = {
10
+ id: string;
11
+ imports: GraphNode[];
12
+ importedBy: GraphNode[];
13
+ };
@@ -8,8 +8,9 @@ import fs from 'fs';
8
8
  * @param {"build" | "serve"} _command
9
9
  * @param {unknown} _config
10
10
  * @param {import('../types').userSettings} userSettings
11
+ * @returns {import('vite').Plugin | null}
11
12
  */
12
- export const needleImportsLogger = (_command, _config, userSettings) => {
13
+ export function needleImportsLogger(_command, _config, userSettings) {
13
14
 
14
15
  if (!userSettings.debugImportChains) return null;
15
16
 
@@ -0,0 +1,54 @@
1
+ /** # Needle Engine plugins for Vite
2
+ * Plugins include hot reload support, meta tags, defines, build pipeline, PWA, and more.
3
+ * ## Using PWA
4
+ * How to add PWA support to your vite project:
5
+ * 1) Install the [vite pwa plugin](https://vite-pwa-org.netlify.app/): `npm install vite-plugin-pwa --save-dev`
6
+ * 2) Add the following to your vite.config.js:
7
+ * You first pass the PWAOptions to the needlePlugins function, then you pass the same PWAOptions to the VitePWA plugin.
8
+ * You *can* use also add a `.webmanifest` file to your web project and edit the [PWA manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest) settings there.
9
+ * ```js
10
+ * export default defineConfig(async ({ command }) => {
11
+ * // @type {import("vite-plugin-pwa").VitePWAOptions}
12
+ * const PWAOptions = {};
13
+ * ...
14
+ * return {
15
+ * plugins: [
16
+ * ...
17
+ * needlePlugins(command, needleConfig, { pwaOptions: PWAOptions }),
18
+ * VitePWA(PWAOptions),
19
+ * ],
20
+ * }
21
+ * ```
22
+ * @param {"build" | "serve"} command
23
+ * @param {import('../types/needleConfig').needleMeta | null | undefined} config
24
+ * @param {import('../types/index.js').userSettings} [userSettings]
25
+ * @returns {Promise<import('vite').Plugin[]>}
26
+ */
27
+ export function needlePlugins(command: "build" | "serve", config?: import("../types/needleConfig").needleMeta | null | undefined, userSettings?: import("../types/index.js").userSettings): Promise<import("vite").Plugin[]>;
28
+ export { needleAI } from "./ai.js";
29
+ export { needleAsap } from "./asap.js";
30
+ export { needleDefines } from "./defines.js";
31
+ export { needleBuildPipeline } from "./build-pipeline.js";
32
+ export { needleBuild } from "./build.js";
33
+ export { needleMeta } from "./meta.js";
34
+ export { needlePoster } from "./poster.js";
35
+ export { needlePWA } from "./pwa.js";
36
+ export { needleReload } from "./reload.js";
37
+ export { needleDrop } from "./drop.js";
38
+ export { editorConnection } from "./editor-connection.js";
39
+ export { needleCopyFiles } from "./copyfiles.js";
40
+ export { needleViteAlias } from "./alias.js";
41
+ export { needleCustomElementData } from "./custom-element-data.js";
42
+ export { needleTransformCodegen } from "./transform-codegen.js";
43
+ export { needleLicense } from "./license.js";
44
+ export { needlePeerjs } from "./peer.js";
45
+ export { needleDependencyWatcher } from "./dependency-watcher.js";
46
+ export { needleDependencies } from "./dependencies.js";
47
+ export { needleFacebookInstantGames } from "./facebook-instant-games.js";
48
+ export { needleImportsLogger } from "./imports-logger.js";
49
+ export { needleBuildInfo } from "./buildinfo.js";
50
+ export { needleApp } from "./needle-app.js";
51
+ export { needleServer } from "./server.js";
52
+ export * from "./gzip.js";
53
+ export * from "./config.js";
54
+ export { needleMakeFilesLocal, needleLocalFilesSceneAnalysis } from "./local-files.js";
@@ -94,27 +94,28 @@ const defaultUserSettings = {
94
94
  * ## Using PWA
95
95
  * How to add PWA support to your vite project:
96
96
  * 1) Install the [vite pwa plugin](https://vite-pwa-org.netlify.app/): `npm install vite-plugin-pwa --save-dev`
97
- * 2) Add the following to your vite.config.js:
97
+ * 2) Add the following to your vite.config.js:
98
98
  * You first pass the PWAOptions to the needlePlugins function, then you pass the same PWAOptions to the VitePWA plugin.
99
99
  * You *can* use also add a `.webmanifest` file to your web project and edit the [PWA manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest) settings there.
100
- * ```js
100
+ * ```js
101
101
  * export default defineConfig(async ({ command }) => {
102
- // \@type(import("vite-plugin-pwa").VitePWAOptions) (remove the backslash)
103
- const PWAOptions = {};
104
- ...
105
- return {
106
- plugins: [
107
- ...
108
- needlePlugins(command, needleConfig, { pwaOptions: PWAOptions }),
109
- VitePWA(PWAOptions),
110
- ],
111
- }
102
+ * // @type {import("vite-plugin-pwa").VitePWAOptions}
103
+ * const PWAOptions = {};
104
+ * ...
105
+ * return {
106
+ * plugins: [
107
+ * ...
108
+ * needlePlugins(command, needleConfig, { pwaOptions: PWAOptions }),
109
+ * VitePWA(PWAOptions),
110
+ * ],
111
+ * }
112
112
  * ```
113
113
  * @param {"build" | "serve"} command
114
- * @param {{} | undefined | null} config
115
- * @param {import('../types/index.js').userSettings} userSettings
114
+ * @param {import('../types/needleConfig').needleMeta | null | undefined} config
115
+ * @param {import('../types/index.js').userSettings} [userSettings]
116
+ * @returns {Promise<import('vite').Plugin[]>}
116
117
  */
117
- export const needlePlugins = async (command, config = undefined, userSettings = {}) => {
118
+ export async function needlePlugins(command, config = undefined, userSettings = {}) {
118
119
 
119
120
  if (!config) config = {}
120
121
 
@@ -0,0 +1,7 @@
1
+ /** This plugin is used to apply the license to the needle engine.
2
+ * @param {"build" | "serve"} command
3
+ * @param {import('../types/needleConfig').needleMeta | null | undefined} config
4
+ * @param {import('../types/userconfig.js').userSettings} userSettings
5
+ * @returns {import('vite').Plugin}
6
+ */
7
+ export function needleLicense(command: "build" | "serve", config: import("../types/needleConfig").needleMeta | null | undefined, userSettings: import("../types/userconfig.js").userSettings): import("vite").Plugin;
@@ -1,13 +1,13 @@
1
1
  import { resolveLicense } from '../common/license.js';
2
2
  import { loadConfig } from './config.js';
3
3
 
4
- /**
5
- * This plugin is used to apply the license to the needle engine.
6
- * @param {string} command - The command that is being run
7
- * @param {object} config - The config object
4
+ /** This plugin is used to apply the license to the needle engine.
5
+ * @param {"build" | "serve"} command
6
+ * @param {import('../types/needleConfig').needleMeta | null | undefined} config
8
7
  * @param {import('../types/userconfig.js').userSettings} userSettings
8
+ * @returns {import('vite').Plugin}
9
9
  */
10
- export const needleLicense = (command, config, userSettings) => {
10
+ export function needleLicense(command, config, userSettings) {
11
11
  let license = undefined;
12
12
 
13
13
  return {
@@ -53,4 +53,4 @@ export const needleLicense = (command, config, userSettings) => {
53
53
  }
54
54
  }
55
55
  }
56
- };
56
+ }
@@ -0,0 +1,95 @@
1
+ /**
2
+ * @param {"build" | "serve"} command
3
+ * @param {unknown} _config
4
+ * @param {import('../types').userSettings} userSettings
5
+ * @returns {import('vite').Plugin | null}
6
+ */
7
+ export function needleLocalFilesSceneAnalysis(command: "build" | "serve", _config: unknown, userSettings: import("../types").userSettings): import("vite").Plugin | null;
8
+ /**
9
+ * @param {string} projectDir
10
+ * @returns {AutoPolicy | null}
11
+ */
12
+ export function getLocalFilesAutoPolicy(projectDir: string): AutoPolicy | null;
13
+ /**
14
+ * @param {import('../types').userSettings | undefined | null} userSettings
15
+ * @returns {boolean}
16
+ */
17
+ export function makeFilesLocalIsEnabled(userSettings: import("../types").userSettings | undefined | null): boolean;
18
+ /**
19
+ * @param {import('../types').userSettings | undefined | null} userSettings
20
+ * @returns {LocalizationOptions}
21
+ */
22
+ export function resolveOptions(userSettings: import("../types").userSettings | undefined | null): LocalizationOptions;
23
+ /**
24
+ * @param {string | string[] | undefined} features
25
+ * @returns {boolean}
26
+ */
27
+ export function hasAutoFeatureSelection(features: string | string[] | undefined): boolean;
28
+ /**
29
+ * @param {LocalizationOptions} options
30
+ * @param {string} projectDir
31
+ * @returns {AutoPolicy | null}
32
+ */
33
+ export function buildAutoPolicy(options: LocalizationOptions, projectDir: string): AutoPolicy | null;
34
+ /**
35
+ * @param {string} projectDir
36
+ * @param {LocalizationOptions} options
37
+ * @param {SceneAnalysisReport | null} [cachedAnalysis]
38
+ * @returns {AutoPolicy}
39
+ */
40
+ export function detectAutoPolicy(projectDir: string, options: LocalizationOptions, cachedAnalysis?: SceneAnalysisReport | null): AutoPolicy;
41
+ /**
42
+ * @param {string} projectDir
43
+ * @returns {SceneAnalysisReport}
44
+ */
45
+ export function analyzeProjectGlbs(projectDir: string): SceneAnalysisReport;
46
+ /**
47
+ * @param {string} projectDir
48
+ * @returns {string[]}
49
+ */
50
+ export function collectAssetGlbs(projectDir: string): string[];
51
+ /**
52
+ * @param {string} filePath
53
+ * @returns {Record<string, unknown>}
54
+ */
55
+ export function readGlbJsonChunk(filePath: string): Record<string, unknown>;
56
+ /**
57
+ * @param {unknown} json
58
+ * @returns {string[]}
59
+ */
60
+ export function collectNeedleComponentExtensionBlobs(json: unknown): string[];
61
+ /**
62
+ * @param {string} indexHtml
63
+ * @returns {Set<string>}
64
+ */
65
+ export function collectIndexHtmlSkyboxUrls(indexHtml: string): Set<string>;
66
+ /**
67
+ * @param {string | string[] | undefined | null} skyboxOption
68
+ * @param {Set<string>} indexSkyboxUrls
69
+ * @returns {Set<string> | null}
70
+ */
71
+ export function resolveSkyboxSelectionUrls(skyboxOption: string | string[] | undefined | null, indexSkyboxUrls: Set<string>): Set<string> | null;
72
+ /**
73
+ * @param {string | null | undefined} value
74
+ * @returns {string | null}
75
+ */
76
+ export function resolveSkyboxValueToUrl(value: string | null | undefined): string | null;
77
+ /**
78
+ * @param {string | undefined} mode
79
+ * @returns {string[]}
80
+ */
81
+ export function getWebXRProfilesForMode(mode: string | undefined): string[];
82
+ /**
83
+ * @param {string} url
84
+ * @param {UrlHandler} handler
85
+ * @param {LocalizationContext} context
86
+ * @returns {boolean}
87
+ */
88
+ export function shouldHandleUrlInAutoMode(url: string, handler: UrlHandler, context: LocalizationContext): boolean;
89
+ export const SKYBOX_MAGIC_KEYWORDS: string[];
90
+ export type LocalizationOptions = import("./local-files-types.js").LocalizationOptions;
91
+ export type AutoPolicy = import("./local-files-types.js").AutoPolicy;
92
+ export type SceneAnalysisReport = import("./local-files-types.js").SceneAnalysisReport;
93
+ export type SceneFile = import("./local-files-types.js").SceneFile;
94
+ export type UrlHandler = import("./local-files-types.js").UrlHandler;
95
+ export type LocalizationContext = import("./local-files-types.js").LocalizationContext;
@@ -19,9 +19,10 @@ const HLS_CDN_SEGMENT = "/npm/hls.js@";
19
19
  const analysisByProject = new Map();
20
20
 
21
21
  /**
22
- * @param {string} command
22
+ * @param {"build" | "serve"} command
23
23
  * @param {unknown} _config
24
24
  * @param {import('../types').userSettings} userSettings
25
+ * @returns {import('vite').Plugin | null}
25
26
  */
26
27
  export function needleLocalFilesSceneAnalysis(command, _config, userSettings) {
27
28
  if (!makeFilesLocalIsEnabled(userSettings)) return null;
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @param {"build" | "serve"} command
3
+ * @param {unknown} _config
4
+ * @param {import('../types').userSettings} userSettings
5
+ * @returns {import('vite').Plugin | null}
6
+ */
7
+ export function needleMakeFilesLocal(command: "build" | "serve", _config: unknown, userSettings: import("../types").userSettings): import("vite").Plugin | null;
8
+ /**
9
+ * @param {LocalizationOptions} options
10
+ * @param {AutoPolicy | null} autoPolicy
11
+ * @returns {UrlHandler[]}
12
+ */
13
+ export function getActiveHandlers(options: LocalizationOptions, autoPolicy: AutoPolicy | null): UrlHandler[];
14
+ /**
15
+ * @param {string} src
16
+ * @param {string} basePath
17
+ * @param {string} currentDir
18
+ * @param {LocalizationContext} context
19
+ * @param {UrlHandler[]} [handlers]
20
+ * @returns {Promise<string>}
21
+ */
22
+ export function makeLocal(src: string, basePath: string, currentDir: string, context: LocalizationContext, handlers?: UrlHandler[]): Promise<string>;
23
+ /**
24
+ * @param {string} html
25
+ * @param {string} basePath
26
+ * @param {LocalizationContext} context
27
+ * @param {UrlHandler[]} [handlers]
28
+ * @returns {Promise<string>}
29
+ */
30
+ export function makeLocalHtml(html: string, basePath: string, context: LocalizationContext, handlers?: UrlHandler[]): Promise<string>;
31
+ /**
32
+ * @param {string} basePath
33
+ * @param {string} feature
34
+ * @returns {string}
35
+ */
36
+ export function getFeatureBasePath(basePath: string, feature: string): string;
37
+ /**
38
+ * @param {string} baseUrl
39
+ * @param {string} basePath
40
+ * @param {string} currentDir
41
+ * @param {LocalizationContext} context
42
+ * @returns {Promise<string>}
43
+ */
44
+ export function handleWebXRProfiles(baseUrl: string, basePath: string, currentDir: string, context: LocalizationContext): Promise<string>;
45
+ export { makeFilesLocalIsEnabled };
46
+ export type LocalizationContext = import("./local-files-types.js").LocalizationContext;
47
+ export type LocalizationOptions = import("./local-files-types.js").LocalizationOptions;
48
+ export type LocalizationStats = import("./local-files-types.js").LocalizationStats;
49
+ export type AutoPolicy = import("./local-files-types.js").AutoPolicy;
50
+ export type UrlHandler = import("./local-files-types.js").UrlHandler;
51
+ import { makeFilesLocalIsEnabled } from './local-files-analysis.js';
@@ -213,7 +213,7 @@ function recordLocalizedAsset(stats, url, sizeBytes, mimeType) {
213
213
  * @param {import('../types').userSettings} userSettings
214
214
  * @returns {import('vite').Plugin | null}
215
215
  */
216
- export const needleMakeFilesLocal = (command, _config, userSettings) => {
216
+ export function needleMakeFilesLocal(command, _config, userSettings) {
217
217
  if (!makeFilesLocalIsEnabled(userSettings)) {
218
218
  return null;
219
219
  }
@@ -373,7 +373,7 @@ export const needleMakeFilesLocal = (command, _config, userSettings) => {
373
373
  }
374
374
  });
375
375
  return plugin;
376
- };
376
+ }
377
377
 
378
378
  /**
379
379
  * @param {LocalizationOptions} options
@@ -0,0 +1,3 @@
1
+ export { getActiveHandlers, getFeatureBasePath, handleWebXRProfiles, makeLocal, makeLocalHtml } from "./local-files-core.js";
2
+ export { analyzeProjectGlbs, buildAutoPolicy, collectAssetGlbs, collectIndexHtmlSkyboxUrls, collectNeedleComponentExtensionBlobs, detectAutoPolicy, getWebXRProfilesForMode, hasAutoFeatureSelection, readGlbJsonChunk, resolveSkyboxSelectionUrls, resolveSkyboxValueToUrl, shouldHandleUrlInAutoMode } from "./local-files-analysis.js";
3
+ export { fixDracoRangeQueryProbe, fixRelativeNewURL, getRelativeToBasePath } from "./local-files-utils.js";
@@ -0,0 +1,77 @@
1
+ export function finishMakeLocalProgress(): void;
2
+ /**
3
+ * @param {string} src
4
+ * @param {string} search
5
+ * @param {string} replacement
6
+ * @returns {string}
7
+ */
8
+ export function replaceAll(src: string, search: string, replacement: string): string;
9
+ /**
10
+ * @param {string} path
11
+ * @param {string} basePath
12
+ * @returns {string}
13
+ */
14
+ export function getRelativeToBasePath(path: string, basePath: string): string;
15
+ /**
16
+ * @param {string} path
17
+ * @returns {string}
18
+ */
19
+ export function normalizeWebPath(path: string): string;
20
+ /**
21
+ * @param {string} path
22
+ * @returns {string}
23
+ */
24
+ export function ensureTrailingSlash(path: string): string;
25
+ /**
26
+ * @param {string} src
27
+ * @returns {string}
28
+ */
29
+ export function fixRelativeNewURL(src: string): string;
30
+ /**
31
+ * @param {string} src
32
+ * @returns {string}
33
+ */
34
+ export function fixDracoRangeQueryProbe(src: string): string;
35
+ /**
36
+ * @param {string} path
37
+ * @param {string|Buffer} content
38
+ * @returns {string}
39
+ */
40
+ export function getValidFilename(path: string, content: string | Buffer): string;
41
+ /**
42
+ * @param {string} url
43
+ * @returns {Promise<string>}
44
+ */
45
+ export function downloadText(url: string): Promise<string>;
46
+ /**
47
+ * @param {string} url
48
+ * @returns {Promise<Buffer>}
49
+ */
50
+ export function downloadBinary(url: string): Promise<Buffer>;
51
+ /**
52
+ * @param {LocalizationContext} context
53
+ * @param {string} url
54
+ * @param {unknown} err
55
+ */
56
+ export function recordFailedDownload(context: LocalizationContext, url: string, err: unknown): void;
57
+ /**
58
+ * @param {string} url
59
+ * @returns {string}
60
+ */
61
+ export function getShortUrlName(url: string): string;
62
+ export class Cache {
63
+ /** @type {Map<string, Buffer|string>} */
64
+ __cache: Map<string, Buffer | string>;
65
+ /**
66
+ * @param {string} key
67
+ * @param {Buffer|string} value
68
+ */
69
+ addToCache(key: string, value: Buffer | string): void;
70
+ /**
71
+ * @param {string} key
72
+ * @returns {Buffer|string|null}
73
+ */
74
+ getFromCache(key: string): Buffer | string | null;
75
+ get map(): Map<string, string | Buffer<ArrayBufferLike>>;
76
+ }
77
+ export type LocalizationContext = import("./local-files-types.js").LocalizationContext;
@@ -0,0 +1,2 @@
1
+ export { needleLocalFilesSceneAnalysis } from "./local-files-analysis.js";
2
+ export { needleMakeFilesLocal, makeFilesLocalIsEnabled } from "./local-files-core.js";
@@ -0,0 +1,8 @@
1
+ /**
2
+ * write logs to local file
3
+ * @param {string} command
4
+ * @param {unknown} _config
5
+ * @param {import('../types/userconfig.js').userSettings} userSettings
6
+ * @returns {import('vite').Plugin | null}
7
+ */
8
+ export function needleLogger(command: string, _config: unknown, userSettings: import("../types/userconfig.js").userSettings): import("vite").Plugin | null;
@@ -15,7 +15,7 @@ const __dirname = path.dirname(__filename);
15
15
  * @param {import('../types/userconfig.js').userSettings} userSettings
16
16
  * @returns {import('vite').Plugin | null}
17
17
  */
18
- export const needleLogger = (command, _config, userSettings) => {
18
+ export function needleLogger(command, _config, userSettings) {
19
19
 
20
20
  if (userSettings?.disableLogging === true) {
21
21
  return null;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Resets the sticky-header state so the next needleLog call always emits its
3
+ * [plugin-name] header. Call this at the start of a new build or any logical
4
+ * output section where you want a guaranteed fresh header.
5
+ */
6
+ export function resetLastLoggedPlugin(): void;
7
+ /**
8
+ * @param {string} pluginName
9
+ * @param {string | string[]} message
10
+ * @param {'log' | 'warn' | 'error'} [level='log']
11
+ * @param {{ dimBody?: boolean, leadingNewline?: boolean, showHeader?: boolean }} [options]
12
+ */
13
+ export function needleLog(pluginName: string, message: string | string[], level?: "log" | "warn" | "error", options?: {
14
+ dimBody?: boolean;
15
+ leadingNewline?: boolean;
16
+ showHeader?: boolean;
17
+ }): void;
18
+ /**
19
+ * @param {string} pluginName
20
+ * @param {string[]} lines
21
+ * @param {'log' | 'warn' | 'error'} [level='log']
22
+ */
23
+ export function needleLogLines(pluginName: string, lines: string[], level?: "log" | "warn" | "error"): void;
24
+ export function needleSupportsColor(): boolean;
25
+ export function needleBlue(text: any): string;
26
+ export function needleDim(text: any): string;
27
+ export function needleGreenBold(text: any): string;
28
+ /**
29
+ * @param {(() => void) | null} cleaner
30
+ */
31
+ export function setTransientLogLineCleaner(cleaner: (() => void) | null): void;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @param {"build" | "serve"} command
3
+ * @param {import('../types/needleConfig').needleMeta | null} config
4
+ * @param {import('../types').userSettings} userSettings
5
+ * @returns {import('vite').Plugin}
6
+ */
7
+ export function needleMeta(command: "build" | "serve", config: import("../types/needleConfig").needleMeta | null, userSettings: import("../types").userSettings): import("vite").Plugin;