upwwwards 0.1.3-beta.1 → 0.1.4-beta.1

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.
@@ -219,6 +219,8 @@ declare namespace Vite {
219
219
  * The plugin:
220
220
  * - Replaces every `import Up from 'upwwwards'` with a virtual module that constructs `Up` exactly once
221
221
  * (on the server and in the browser) with the `up` config, the selected adapter and the enabled plugins.
222
+ * - Sets `resolve.dedupe` and `optimizeDeps.exclude` / `ssr.optimizeDeps.exclude` for the package surface so
223
+ * Vite never prebundles a second copy of `Up` while plugins still import `../core/Up.js` (dual-runtime hazard).
222
224
  * - Writes generated files into `<setupIn>/upwwwards/` at build start: `private/types/upwwwards.d.ts`
223
225
  * (types of `Up.Adapter`, the enabled plugins, `AdapterConfig` / `AdapterRef` and `EventData`; rewritten when outdated),
224
226
  * `customizable/types/config.d.ts` (created once, then yours to edit, to augment `AppCache` and plugin interfaces),
@@ -2,7 +2,26 @@ import fs, { readdirSync, readFileSync } from "fs";
2
2
  import { fileURLToPath } from "url";
3
3
  import path from "path";
4
4
  import Logs from "../scripts/Logs.js";
5
- const FOLDER_NAME = "upwwwards", CUSTOMIZABLE_FOLDER_NAME = "customizable", PRIVATE_FOLDER_NAME = "private", ID = "upwwwards", VIRTUAL_ID = `\0virtual::${ID}::`, CLASSTER_ID = "classter.css", VIRTUAL_CLASSTER_ID = `\0virtual::${CLASSTER_ID}`, CLASSTER_MARK = "[data-upwwwards-classter]", CLASSTER_MARK_STYLE = `${CLASSTER_MARK}{display:contents}`, CLASSTER_MARK_RGX = new RegExp(`\\${CLASSTER_MARK}\\s*{\\s*display\\s*:\\s*contents\\s*;?\\s*}\\s*`), SERVERS = [];
5
+ const FOLDER_NAME = "upwwwards", CUSTOMIZABLE_FOLDER_NAME = "customizable", PRIVATE_FOLDER_NAME = "private", ID = "upwwwards", VIRTUAL_ID = `\0virtual::${ID}::`, CLASSTER_ID = "classter.css", VIRTUAL_CLASSTER_ID = `\0virtual::${CLASSTER_ID}`, CLASSTER_MARK = "[data-upwwwards-classter]", CLASSTER_MARK_STYLE = `${CLASSTER_MARK}{display:contents}`, CLASSTER_MARK_RGX = new RegExp(`\\${CLASSTER_MARK}\\s*{\\s*display\\s*:\\s*contents\\s*;?\\s*}\\s*`), OPTIMIZE_DEPS_EXCLUDE = [
6
+ ID,
7
+ `${ID}/contexts/nuxt`,
8
+ `${ID}/contexts/sveltekit`,
9
+ `${ID}/adapters`,
10
+ `${ID}/adapters/Nuxt`,
11
+ `${ID}/adapters/Svelte`,
12
+ `${ID}/plugins`,
13
+ `${ID}/plugins/Transmitter`,
14
+ `${ID}/plugins/Scroll`,
15
+ `${ID}/plugins/Anime`,
16
+ `${ID}/plugins/Puppeteer`,
17
+ `${ID}/plugins/Synthra`,
18
+ `${ID}/scripts`,
19
+ `${ID}/scripts/Trees`,
20
+ `${ID}/scripts/Arrays`,
21
+ `${ID}/classter/Vue`,
22
+ `${ID}/classter/Svelte`,
23
+ `${ID}/symbols`
24
+ ], SERVERS = [];
6
25
  let dev = false, serversLength = 0;
7
26
  function getAdapterData(adapter) {
8
27
  switch (adapter) {
@@ -311,7 +330,12 @@ function readHTMLFiles(data) {
311
330
  }
312
331
  }
313
332
  function config() {
314
- return { server: { watch: { ignored: [`**/${FOLDER_NAME}/${PRIVATE_FOLDER_NAME}/**`] } } };
333
+ return {
334
+ server: { watch: { ignored: [`**/${FOLDER_NAME}/${PRIVATE_FOLDER_NAME}/**`] } },
335
+ resolve: { dedupe: [ID] },
336
+ optimizeDeps: { exclude: [...OPTIMIZE_DEPS_EXCLUDE] },
337
+ ssr: { optimizeDeps: { exclude: [...OPTIMIZE_DEPS_EXCLUDE] } }
338
+ };
315
339
  }
316
340
  function configResolved(config2) {
317
341
  dev = config2.command === "serve";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/initializers/vite.ts"],"sourcesContent":["/* [vite] */\r\n\r\n// #IMPORTS\r\n\r\n // ##NODE\r\nimport fs, { readdirSync, readFileSync } from 'fs'\r\nimport { fileURLToPath } from 'url'\r\nimport path from 'path'\r\n\r\n // ##SCRIPTS\r\nimport Logs from '../scripts/Logs.js'\r\n\r\n // ##TYPES\r\nimport type { UserConfig, ResolvedConfig, Plugin as VitePlugin, ViteDevServer, Rolldown } from 'vite'\r\n\r\nimport type Up from '../core/Up.js'\r\n\r\nimport type Plugin from '../plugins/@/Plugin.js'\r\nimport type Screen from '../plugins/Screen.js'\r\n\r\nimport type Classter from '../classter/@/Classter.js'\r\n\r\n// #TYPES\r\n\r\n // ##THIS\r\nnamespace Vite\r\n{\r\n /**\r\n * Built-in adapter presets, keyed by the value of {@link Vite.CONFIG.adapter}:\r\n * adapter module name, default `readIn` / `setupIn` directories, and component file extension analyzed by Classter.\r\n */\r\n export type ADAPTER_MAP =\r\n {\r\n svelte:\r\n {\r\n name : 'Svelte',\r\n readIn : '/src',\r\n setupIn: '/src/lib',\r\n ext : '.svelte'\r\n },\r\n nuxt:\r\n {\r\n name : 'Nuxt',\r\n readIn : '/app',\r\n setupIn: '/app',\r\n ext : '.vue'\r\n }\r\n }\r\n\r\n /**\r\n * Supported adapter keys: `'nuxt'` (Nuxt 4) or `'svelte'` (SvelteKit 2).\r\n */\r\n export type ADAPTER_KEY = keyof ADAPTER_MAP\r\n\r\n /**\r\n * Options of the `upwwwards` Vite plugin (see {@link vite}).\r\n */\r\n export type CONFIG =\r\n {\r\n /**\r\n * Host framework: `'nuxt'` or `'svelte'`.\r\n * Selects the adapter exposed as `Up.Adapter` (`upwwwards/adapters/Nuxt` or `upwwwards/adapters/Svelte`),\r\n * the default `readIn` / `setupIn` directories, and the component extension (`.vue` / `.svelte`) analyzed by Classter.\r\n */\r\n adapter: ADAPTER_KEY,\r\n /**\r\n * Source directory scanned by Classter, as a path starting with `/` resolved against the Vite root.\r\n * Components and `.html` files under it are analyzed when Vite transforms them, and the `.html` files\r\n * directly inside it (e.g. SvelteKit `app.html`) are analyzed at build start.\r\n * Defaults to `'/app'` with Nuxt and `'/src'` with SvelteKit. Unused when Classter is disabled.\r\n */\r\n readIn?: `/${string}`,\r\n /**\r\n * Directory in which the plugin creates its `upwwwards` folder of generated files,\r\n * as a path starting with `/` resolved against the Vite root.\r\n * Defaults to `'/app'` with Nuxt and `'/src/lib'` with SvelteKit.\r\n */\r\n setupIn?: `/${string}`,\r\n /**\r\n * Core runtime configuration (`event`, `thread`) passed to `Up` at construction.\r\n * It is serialized with `JSON.stringify`, so it must only contain JSON-compatible values.\r\n * Entries of `event.enhance` are also turned into typings for the generated `EventData` interface.\r\n */\r\n up?: Up.CONFIG,\r\n /**\r\n * Plugins to enable, each given by name (e.g. `'Scroll'`) or as `{ name, config }`.\r\n * Available names: `Observer`, `Screen`, `Transmitter`, `Scroll`, `Anime`, `Puppeteer`, `Synthra`.\r\n * Configs are serialized with `JSON.stringify`, except Anime `plugins` (turned into lazy `gsap/<name>` imports)\r\n * and Synthra `pick` (turned into lazy imports of the picked Three.js exports).\r\n * A name declared more than once logs a warning and only its first declaration is kept.\r\n */\r\n plugins?: (Plugin.RAW_WRAP | Plugin.RAW_WRAP['name'])[],\r\n /**\r\n * Enables Classter, the optional atomic-CSS generator (see {@link Vite.CLASSTER_CONFIG}).\r\n * Disabled when omitted.\r\n */\r\n classter?: CLASSTER_CONFIG\r\n }\r\n\r\n /**\r\n * File generated into the project at build start.\r\n * @internal\r\n */\r\n export type FILE_DATA =\r\n {\r\n /**\r\n * `true` for files created once in the `customizable` folder and never overwritten;\r\n * `false` for files in the `private` folder, rewritten whenever their content changes.\r\n */\r\n customizable: boolean,\r\n /**\r\n * File name, including its extension.\r\n */\r\n name: string,\r\n /**\r\n * Sub-folder (`types`, `styles`, …) inside the `customizable` or `private` folder.\r\n */\r\n folder: string,\r\n /**\r\n * File content.\r\n */\r\n content: string\r\n }\r\n\r\n /**\r\n * Resolved plugin state shared by the Vite hooks.\r\n * @internal\r\n */\r\n export type DATA =\r\n {\r\n /**\r\n * Directory scanned by Classter.\r\n */\r\n readIn: string,\r\n /**\r\n * Directory of the generated `upwwwards` folder (already suffixed with `/upwwwards`).\r\n */\r\n setupIn: string,\r\n /**\r\n * Code of the virtual `upwwwards` module, appended after the import of the real runtime.\r\n */\r\n virtual: string,\r\n /**\r\n * Files to generate at build start.\r\n */\r\n files: FILE_DATA[],\r\n /**\r\n * Configured Classter analyzer, or `undefined` when Classter is disabled.\r\n */\r\n Classter?: typeof Classter\r\n }\r\n\r\n /**\r\n * Code generated from the `up` option.\r\n * @internal\r\n */\r\n export type UP_DATA =\r\n {\r\n /**\r\n * Serialized `up` config injected into the virtual module.\r\n */\r\n virtual: string,\r\n /**\r\n * `EventData` interface declaration built from `up.event.enhance` (empty when unused).\r\n */\r\n type: string\r\n }\r\n\r\n /**\r\n * Code generated from the `plugins` option.\r\n * @internal\r\n */\r\n export type PLUGINS_DATA =\r\n {\r\n /**\r\n * Virtual module code importing the plugins and pushing their configs.\r\n */\r\n virtual: string,\r\n /**\r\n * Type declarations injected into the generated type files.\r\n */\r\n types:\r\n {\r\n /**\r\n * `Up.<Plugin>` declarations for the enabled plugins.\r\n */\r\n private: string,\r\n /**\r\n * Plugin-specific module augmentations (Anime GSAP plugins, Synthra Three.js exports).\r\n */\r\n privatePlugins: string,\r\n /**\r\n * Editable augmentation stubs added to the customizable `config.d.ts`.\r\n */\r\n customizable: string\r\n },\r\n /**\r\n * Extra plugin files to generate (e.g. `_screen.scss`).\r\n */\r\n files: FILE_DATA[]\r\n }\r\n\r\n /**\r\n * Classter options. Classter compiles atomic class tokens found in templates (e.g. `pa:1rem`, `co:[#fff]:before`)\r\n * into the virtual stylesheet `classter.css`, which the app must import once.\r\n */\r\n export type CLASSTER_CONFIG =\r\n {\r\n /**\r\n * Analyzer matching the adapter: `Vue` from `upwwwards/classter/Vue` (Nuxt)\r\n * or `Svelte` from `upwwwards/classter/Svelte` (SvelteKit).\r\n */\r\n Classter: typeof Classter,\r\n /**\r\n * Disables Classter while keeping its config. Default `false`.\r\n * @warning While disabled, `classter.css` has no content provider: do not import it.\r\n */\r\n off?: boolean,\r\n /**\r\n * Silences warnings about unknown aliases and expressions that cannot be analyzed statically. Default `false`.\r\n * Warnings about invalid values and unsupported pseudo-elements are still logged.\r\n */\r\n silent?: boolean,\r\n /**\r\n * Extra attribute / prop names to scan, stored in lowercase and kebab-case.\r\n */\r\n identifiers?:\r\n {\r\n /**\r\n * Names whose values are class lists, in addition to `class` (e.g. `['innerClass']`).\r\n */\r\n class?: Classter.IDENTIFIER[],\r\n /**\r\n * Names whose object-literal values may contain class identifiers\r\n * (e.g. `attrs` for `attrs={{ class: 'pa:1rem' }}`).\r\n */\r\n attributes?: Classter.IDENTIFIER[]\r\n },\r\n /**\r\n * Custom aliases mapping a shortcut to a CSS property, e.g. `{ 'my-pa': 'padding' }` (see `Classter.addAlias`).\r\n */\r\n alias?: Record<string, string>\r\n }\r\n}\r\n\r\n// #CONSTANTS\r\n\r\n // ##THIS\r\nconst\r\nFOLDER_NAME = 'upwwwards',\r\nCUSTOMIZABLE_FOLDER_NAME = 'customizable',\r\nPRIVATE_FOLDER_NAME = 'private',\r\nID = 'upwwwards',\r\nVIRTUAL_ID = `\\0virtual::${ID}::`, // + real ID (path)\r\nCLASSTER_ID = 'classter.css',\r\nVIRTUAL_CLASSTER_ID = `\\0virtual::${CLASSTER_ID}`,\r\nCLASSTER_MARK = '[data-upwwwards-classter]',\r\nCLASSTER_MARK_STYLE = `${CLASSTER_MARK}{display:contents}`,\r\nCLASSTER_MARK_RGX = new RegExp(`\\\\${CLASSTER_MARK}\\\\s*{\\\\s*display\\\\s*:\\\\s*contents\\\\s*;?\\\\s*}\\\\s*`)\r\n,\r\nSERVERS: ViteDevServer[] = []\r\n\r\n// #VARIABLES\r\n\r\n // ##THIS\r\nlet\r\ndev = false\r\n,\r\nserversLength = 0\r\n\r\n// #FUNCTIONS\r\n\r\n // ##GET\r\n/**\r\n * Returns the preset of an adapter key; throws through `Logs.throw` when the key is unknown.\r\n*/\r\nfunction getAdapterData<T extends Vite.ADAPTER_KEY, U extends Vite.ADAPTER_MAP[T]>(adapter: T): U\r\n{\r\n switch (adapter)\r\n {\r\n case 'svelte': return {\r\n name : 'Svelte',\r\n readIn : '/src',\r\n setupIn: '/src/lib',\r\n ext : '.svelte'\r\n } as U\r\n case 'nuxt': return {\r\n name : 'Nuxt',\r\n readIn : '/app',\r\n setupIn: '/app',\r\n ext : '.vue'\r\n } as U\r\n default: Logs.throw('VITE', `THE \"${adapter}\" ADAPTER KEY IS NOT RECOGNIZED.`)\r\n }\r\n}\r\n\r\n/**\r\n * Serializes the `up` option and builds the `EventData` typings from `up.event.enhance`.\r\n*/\r\nfunction getUpData(up: Vite.CONFIG['up']): Vite.UP_DATA\r\n{\r\n return up\r\n ? {\r\n virtual: JSON.stringify(up),\r\n type : up.event?.enhance\r\n ? `interface EventData { ${up.event.enhance.reduce((acc, data): string =>\r\n {\r\n const [KEY, VALUE] = typeof data === 'string'\r\n ? [data, 'import(\\'upwwwards\\').Event.Data']\r\n : [data.key, `import('upwwwards').Event.Data<${data.on ?? 'import(\\'upwwwards\\').Event.DEFAULT_ON'}, ${data.forever ?? false}, ${'waitDelay' in data && data.waitDelay > 0 ? data.waitType === 'debounce' ? data.waitDelay : data.waitType === 'throttle' ? -data.waitDelay : 0 : 0}, ${data.threadFlag}, (...args: ${data.argsTypes ?? 'any'}) => void>`]\r\n \r\n return `${acc}${KEY}: ${VALUE}, `\r\n },\r\n '')}};`\r\n : ''\r\n }\r\n : {\r\n virtual: '{}',\r\n type : ''\r\n }\r\n}\r\n\r\n/**\r\n * Builds the plugin part of the virtual module, typings and extra files; throws when Synthra is enabled and `three` cannot be found.\r\n*/\r\nfunction getPluginsData(plugins: Vite.CONFIG['plugins']): Vite.PLUGINS_DATA\r\n{\r\n const\r\n NAMES = new Set<Plugin.RAW_WRAP['name']>(),\r\n TYPES: Vite.PLUGINS_DATA['types'] =\r\n {\r\n private : '',\r\n privatePlugins: '',\r\n customizable : ''\r\n },\r\n FILES_DATA: Vite.FILE_DATA[] = []\r\n\r\n let data = ''\r\n\r\n if (plugins) for (let i = 0, max = plugins.length, config = ''; i < max; i++, config = '')\r\n {\r\n const\r\n UNFORMATTED = plugins[i],\r\n RAW_WRAP: Plugin.RAW_WRAP = typeof UNFORMATTED === 'string' ? { name: UNFORMATTED } : UNFORMATTED\r\n\r\n if (NAMES.has(RAW_WRAP.name))\r\n {\r\n Logs.warn('VITE', `YOU HAVE DECLARED THE SAME \"${RAW_WRAP.name}\" PLUGIN MULTIPLE TIMES.`)\r\n\r\n continue\r\n }\r\n\r\n switch (RAW_WRAP.name)\r\n {\r\n case 'Screen':\r\n {\r\n const\r\n {\r\n crushedHeight: CRUSHED_HEIGHT = 435 satisfies Screen.DEFAULT_CRUSHED_HEIGHT,\r\n mobileWidth : MOBILE_WIDTH = 768 satisfies Screen.DEFAULT_MOBILE_WIDTH,\r\n tabletWidth : TABLET_WIDTH = 1440 satisfies Screen.DEFAULT_TABLET_WIDTH\r\n } = RAW_WRAP.config?.dimensions ?? {}\r\n\r\n FILES_DATA.push(\r\n {\r\n customizable: false,\r\n name : '_screen.scss',\r\n folder : 'styles',\r\n content : readFileSync(path.join(import.meta.dirname, '../styles/_screen.scss'), 'utf-8').replace('/* @__CONSTANTS__ */', `$SCREEN_CRUSHED_HEIGHT: ${CRUSHED_HEIGHT}px;\\n$SCREEN_MOBILE_WIDTH: ${MOBILE_WIDTH}px;\\n$SCREEN_TABLET_WIDTH: ${TABLET_WIDTH}px;`)\r\n })\r\n \r\n break\r\n }\r\n case 'Transmitter':\r\n {\r\n TYPES.customizable += `declare module '${ID}/plugins/${RAW_WRAP.name}'\\n{\\n\\texport interface TransmitterChannels { /* You can add channels to the Transmitter plugin here. */ }\\n}\\n\\n`\r\n \r\n break\r\n }\r\n case 'Anime':\r\n {\r\n if (!RAW_WRAP.config) break\r\n \r\n const {plugins: ANIME_PLUGINS, ...REST} = RAW_WRAP.config\r\n \r\n if (ANIME_PLUGINS)\r\n {\r\n let type = ''\r\n \r\n for (let i = 0, max = ANIME_PLUGINS.length; i < max; i++)\r\n {\r\n const PLUGIN = ANIME_PLUGINS[i]\r\n\r\n config += `${PLUGIN}: () => import('gsap/${PLUGIN}'),`\r\n type += `${PLUGIN}: typeof import('gsap/${PLUGIN}').default, `\r\n }\r\n\r\n if (config)\r\n {\r\n config = `{graph:{${config.slice(0, -1)}},${JSON.stringify(REST).substring(1)}`\r\n\r\n TYPES.privatePlugins += ` declare module '${ID}/plugins/${RAW_WRAP.name}' { export interface AnimeBucket { ${type}}; };`\r\n }\r\n else config = JSON.stringify(REST)\r\n }\r\n\r\n break\r\n }\r\n case 'Synthra':\r\n {\r\n const\r\n {pick: RAW_PICK, ...REST} = RAW_WRAP.config ?? {},\r\n PICK = new Set(['WebGLRenderer', 'Scene', 'PerspectiveCamera', ...(RAW_PICK ?? [])]),\r\n COMMENTS_RGX_1 = /\\/\\*[\\s\\S]*?\\*\\//g,\r\n COMMENTS_RGX_2 = /\\/\\/.*$/gm,\r\n ALIAS_RGX = /\\s+as\\s+/,\r\n RGX_0 = /export\\s+default\\s+(?:class|function)?\\s*([A-Za-z_$][\\w$]*)?/,\r\n RGX_1 = /export\\s+(?:class|function|const|let|var)\\s+([A-Za-z_$][\\w$]*)/g,\r\n RGX_2 = /export\\s*{\\s*([^}]+)\\s*}/g,\r\n RGX_3 = /export\\s+\\*\\s+(?:as\\s+([A-Za-z_$][\\w$]*)\\s+)?from\\s+['\"](.+)['\"]/g\r\n \r\n let\r\n dir = path.dirname(fileURLToPath(import.meta.resolve('three'))),\r\n pathPackageJSON = ''\r\n\r\n do\r\n {\r\n pathPackageJSON = path.join(dir, 'package.json')\r\n\r\n if (fs.existsSync(pathPackageJSON)) break\r\n \r\n const DIR = path.dirname(dir)\r\n\r\n if (dir === DIR || !DIR) Logs.throw('VITE', 'UNABLE TO FIND THE THREE JS PACKAGE.')\r\n\r\n dir = DIR\r\n }\r\n while (true)\r\n\r\n const\r\n MAP = new Map<string, Set<string>>(),\r\n SEEN = new Map<string, string[]>(),\r\n PACKAGE_JSON = JSON.parse(readFileSync(pathPackageJSON, 'utf-8')),\r\n PACKAGE_NAME = PACKAGE_JSON['name'],\r\n PACKAGE_EXPORTS = PACKAGE_JSON['exports']\r\n\r\n /**\r\n * Yields `[module specifier, file path]` pairs for one entry of the `three` package exports.\r\n */\r\n function* g(key: string, value: string): Generator<[module: string, path: string], void, void>\r\n {\r\n const BASE_MODULE = path.join(PACKAGE_NAME, key.endsWith('*') ? key.slice(0, -1) : key)\r\n \r\n if (value.includes('*')) // *The main path \".\" (three) does not have an asterisk \"*\"\r\n {\r\n const\r\n [PREFIX, SUFFIX] = value.split('*'),\r\n PREFIX_CLEAN = PREFIX[0] === '.' ? PREFIX.substring(1) : PREFIX,\r\n ENTRIES = readdirSync(path.join(dir, PREFIX),\r\n {\r\n recursive : true,\r\n withFileTypes: true\r\n })\r\n\r\n for (let j = 0, jMax = ENTRIES.length; j < jMax; j++)\r\n {\r\n const ENTRY = ENTRIES[j]\r\n \r\n if (!ENTRY.isFile() || !ENTRY.name.endsWith('.js')) continue\r\n\r\n const\r\n PATH = path.join(ENTRY.parentPath ?? (ENTRY as { path?: string }).path, ENTRY.name),\r\n PATH_NORMALIZED = path.sep === '/' ? PATH : PATH.replaceAll(path.sep, '/'),\r\n PREFIX_INDEX = PATH_NORMALIZED.lastIndexOf(PREFIX_CLEAN)\r\n\r\n if (PREFIX_INDEX === -1 || !PATH_NORMALIZED.endsWith(SUFFIX)) continue\r\n\r\n yield [path.join(BASE_MODULE, PATH_NORMALIZED.substring(PREFIX_INDEX + PREFIX_CLEAN.length)), PATH]\r\n }\r\n }\r\n else if (value.endsWith('.js'))\r\n {\r\n const PATH = path.join(dir, value)\r\n\r\n if (fs.existsSync(PATH)) yield [BASE_MODULE, PATH]\r\n }\r\n }\r\n\r\n /**\r\n * Returns the picked export names found in a file, following `export *` re-exports (memoized).\r\n */\r\n function r(p: string): string[]\r\n {\r\n let exported = SEEN.get(p)\r\n \r\n if (exported) return exported\r\n\r\n SEEN.set(p, exported = [])\r\n\r\n const FILE = readFileSync(p, 'utf-8').replace(COMMENTS_RGX_1, '').replace(COMMENTS_RGX_2, '')\r\n\r\n let match = RGX_0.exec(FILE)\r\n\r\n if (match)\r\n {\r\n const NAME = match[1]\r\n\r\n if (NAME && PICK.has(NAME)) exported.push(NAME)\r\n }\r\n\r\n RGX_1.lastIndex = 0\r\n\r\n while (match = RGX_1.exec(FILE))\r\n {\r\n const NAME = match[1]\r\n\r\n if (PICK.has(NAME)) exported.push(NAME)\r\n }\r\n\r\n RGX_2.lastIndex = 0\r\n \r\n while (match = RGX_2.exec(FILE))\r\n {\r\n const NAMES = match[1].split(',')\r\n\r\n for (let j = 0, jMax = NAMES.length; j < jMax; j++)\r\n {\r\n const\r\n BASE_AND_ALIAS = NAMES[j].split(ALIAS_RGX),\r\n NAME = (BASE_AND_ALIAS[1] ?? BASE_AND_ALIAS[0]).trim()\r\n\r\n if (PICK.has(NAME)) exported.push(NAME)\r\n }\r\n }\r\n\r\n RGX_3.lastIndex = 0\r\n\r\n while (match = RGX_3.exec(FILE))\r\n {\r\n const NAME = match[1]\r\n\r\n if (NAME)\r\n {\r\n if (PICK.has(NAME)) exported.push(NAME)\r\n\r\n continue\r\n }\r\n \r\n let subPath = path.resolve(path.dirname(p), match[2])\r\n \r\n if (!subPath.endsWith('.js')) subPath += '.js'\r\n\r\n if (subPath !== p && fs.existsSync(subPath)) exported.push(...r(subPath))\r\n }\r\n\r\n return exported\r\n }\r\n\r\n let\r\n value,\r\n generated: [module: string, path: string] | void\r\n\r\n for (const KEY in PACKAGE_EXPORTS)\r\n {\r\n value = PACKAGE_EXPORTS[KEY]\r\n\r\n if (typeof value !== 'string' && (typeof value !== 'object' || typeof (value = value.import ?? value.default ?? value.module) !== 'string')) continue\r\n\r\n const GEN = g(KEY, value)\r\n\r\n while (generated = GEN.next().value)\r\n {\r\n const\r\n MODULE_NORMALIZED = path.sep === '/' ? generated[0] : generated[0].replaceAll(path.sep, '/'),\r\n EXPORTED = r(generated[1])\r\n\r\n for (let k = 0, kMax = EXPORTED.length; k < kMax; k++)\r\n {\r\n const SET = MAP.get(MODULE_NORMALIZED)\r\n\r\n SET ? SET.add(EXPORTED[k]) : MAP.set(MODULE_NORMALIZED, new Set([EXPORTED[k]]))\r\n }\r\n }\r\n }\r\n\r\n const TREATED = new Set<string>()\r\n\r\n let type = ''\r\n\r\n config = '{ getThree: async () => { '\r\n\r\n for (let j = 0, jMax = MAP.size, module = '', set: Set<string> | null = null, size = 0; j < jMax; j++, module = '', set = null, size = 0)\r\n {\r\n for (const [MODULE, SET] of MAP)\r\n {\r\n for (const NAME of TREATED) if (SET.has(NAME)) SET.delete(NAME)\r\n\r\n size = SET.size\r\n\r\n switch (true)\r\n {\r\n case !size : MAP.delete(MODULE)\r\n case set && (size < set.size || size === set.size && MODULE.length > module.length): continue\r\n default :\r\n module = MODULE\r\n set = SET\r\n }\r\n }\r\n\r\n if (!set) break\r\n\r\n const\r\n NAMES = [...set],\r\n LENGTH = NAMES.length\r\n\r\n if (LENGTH === 1)\r\n {\r\n const NAME = NAMES[0]\r\n \r\n for (const [MODULE, SET] of MAP)\r\n {\r\n if (MODULE === module) continue\r\n\r\n if (SET.has(NAME))\r\n {\r\n if (MODULE === PACKAGE_NAME ||\r\n module !== PACKAGE_NAME &&\r\n (\r\n MODULE.endsWith(`${NAME}.js`) ||\r\n !module.endsWith(`${NAME}.js`) && MODULE.length < module.length\r\n )\r\n )\r\n {\r\n set.delete(NAME)\r\n \r\n module = MODULE\r\n set = SET\r\n }\r\n else SET.delete(NAME)\r\n }\r\n }\r\n }\r\n \r\n for (let k = 0; k < LENGTH; k++)\r\n {\r\n const NAME = NAMES[k]\r\n \r\n TREATED.add(NAME)\r\n\r\n type += `${NAME}: typeof import('${module}').${NAME}, `\r\n }\r\n\r\n config += `const { ${NAMES.join(',')} } = await import('${module}'); `\r\n\r\n MAP.delete(module)\r\n }\r\n\r\n config += `return { ${[...TREATED].join(',')} }; }, ${JSON.stringify(REST).slice(1, -1)} }`\r\n\r\n if (type) TYPES.privatePlugins += ` declare module '${ID}/plugins/${RAW_WRAP.name}' { export interface SynthraThree { ${type}}; };`\r\n\r\n TYPES.customizable += `declare module '${ID}/plugins/${RAW_WRAP.name}'\\n{\\n\\texport interface SynthraBucket { /* Enhance type checking for Synthra bucket here. */ }\\n\\n\\texport interface SynthraPlugins { /* Enhance type checking for Synthra plugins here. */ }\\n}\\n\\n`\r\n\r\n break\r\n }\r\n default:\r\n }\r\n \r\n data += `{plugin:${RAW_WRAP.name},config:${config || JSON.stringify(RAW_WRAP.config)}},` // *Plugin.WRAP\r\n TYPES.private += ` export const ${RAW_WRAP.name}: typeof import('upwwwards/plugins').${RAW_WRAP.name};`\r\n\r\n NAMES.add(RAW_WRAP.name)\r\n }\r\n\r\n return {\r\n virtual: `import {${[...NAMES].join(',')}} from 'upwwwards/plugins'; PLUGINS.push(${data});`,\r\n types : TYPES,\r\n files : FILES_DATA\r\n }\r\n}\r\n\r\n/**\r\n * Applies the `classter` option to the shared Classter state and returns the analyzer, or `undefined` when disabled.\r\n*/\r\nfunction getClasster(classter: Vite.CONFIG['classter'], ext: Vite.ADAPTER_MAP[Vite.ADAPTER_KEY]['ext']): typeof Classter | undefined\r\n{\r\n if (!classter) return\r\n\r\n const Classter = classter.Classter\r\n\r\n if (classter.off) return\r\n\r\n if (classter.silent) Classter.warn = false\r\n\r\n if (classter.identifiers)\r\n {\r\n if (classter.identifiers.class) Classter.addClassIdentifiers(classter.identifiers.class)\r\n if (classter.identifiers.attributes) Classter.addAttributesIdentifiers(classter.identifiers.attributes)\r\n }\r\n\r\n if (classter.alias) Classter.addAlias(classter.alias)\r\n\r\n Classter.ext = ext\r\n\r\n return Classter\r\n}\r\n\r\n/**\r\n * Resolves the plugin options into the shared hook state (virtual module code, generated files, Classter).\r\n*/\r\nfunction getData(config: Vite.CONFIG): Vite.DATA\r\n{\r\n const\r\n ADAPTER_DATA = getAdapterData(config.adapter),\r\n UP_DATA = getUpData(config.up),\r\n PLUGIN_DATA = getPluginsData(config.plugins),\r\n Classter = getClasster(config.classter, ADAPTER_DATA.ext)\r\n\r\n return {\r\n readIn : config.readIn || ADAPTER_DATA.readIn,\r\n setupIn: `${(config.setupIn || ADAPTER_DATA.setupIn)}/${FOLDER_NAME}`,\r\n virtual: `import Adapter from 'upwwwards/adapters/${ADAPTER_DATA.name}'; import { construct } from 'upwwwards/symbols'; const PLUGINS = []; ${PLUGIN_DATA.virtual} Up[construct](${UP_DATA.virtual}, Adapter, PLUGINS); export default Up;`,\r\n files :\r\n [\r\n {\r\n customizable: false,\r\n name : 'upwwwards.d.ts',\r\n folder : 'types',\r\n content : `import type { Up } from '${ID}'; import { Adapter } from 'upwwwards/adapters'; import type { ${ADAPTER_DATA.name}Config, ${ADAPTER_DATA.name}Ref } from 'upwwwards/adapters/${ADAPTER_DATA.name}'; declare module '${ID}' { namespace Up { export const Adapter: typeof import('upwwwards/adapters/${ADAPTER_DATA.name}').default;${PLUGIN_DATA.types.private} }; ${UP_DATA.type} }; declare module 'upwwwards/adapters' { export interface AdapterConfig extends ${ADAPTER_DATA.name}Config {}; export interface AdapterRef<T> extends ${ADAPTER_DATA.name}Ref<T> {}; };${PLUGIN_DATA.types.privatePlugins}`\r\n },\r\n {\r\n customizable: true,\r\n name : 'config.d.ts',\r\n folder : 'types',\r\n content : `declare module '${ID}'\\n{\\n\\texport interface AppCache\\n\\t{\\n\\t\\t/*\\n\\t\\t\\tYou can add data types to enhance the application cache.\\n\\t\\t\\tNever use dynamic keys; use only character strings (risk of memory overflow in SSR).\\n\\t\\t*/\\n\\t}\\n}\\n\\n${PLUGIN_DATA.types.customizable}export {} /* IMPORTANT: DO NOT DELETE THIS LINE. */`\r\n },\r\n ...PLUGIN_DATA.files\r\n ],\r\n Classter\r\n }\r\n}\r\n\r\n // ##UTILS\r\n/**\r\n * Joins two paths, merging the trailing segments of `a` that `b` starts with (`/proj/app` + `/app/x` gives `/proj/app/x`).\r\n*/\r\nfunction mergePaths(a: string, b: string): string\r\n{\r\n a = a.replaceAll('\\\\', '/').replace(/\\/+$/g, '')\r\n b = b.replaceAll('\\\\', '/').replace(/^\\/+/g, '')\r\n\r\n const\r\n A = a.split('/'),\r\n B = b.split('/'),\r\n AL = A.length,\r\n BL = B.length\r\n\r\n RUNNER: for (let i = AL - 1, j = 0, max = 0; i > -1; i--)\r\n {\r\n if (A[i] !== B[0]) continue RUNNER\r\n\r\n for (j = 1, max = Math.min(AL - i, BL); j < max; j++) if (A[i + j] !== B[j]) continue RUNNER\r\n\r\n return path.join(a, ...B.slice(j))\r\n }\r\n\r\n return path.join(a, b)\r\n}\r\n\r\n/**\r\n * Runs Classter on the `.html` files directly inside `readIn` (not recursive).\r\n*/\r\nfunction readHTMLFiles(data: Vite.DATA): void // TODO: non récursif mais est-ce utile ? De base c'était pour lire le fichier html de svelte (peut-être ajouter une option)\r\n{\r\n const FILES = readdirSync(data.readIn, { withFileTypes: true })\r\n\r\n for (let i = 0, max = FILES.length; i < max; i++)\r\n {\r\n const FILE = FILES[i]\r\n\r\n if (FILE.isFile() && path.extname(FILE.name) === '.html') data.Classter!.analyzeHTML(readFileSync(`${data.readIn}/${FILE.name}`, 'utf-8'), FILE.name)\r\n }\r\n}\r\n\r\n/**\r\n * Vite `config` hook: excludes the generated `private` folder from the dev server file watcher.\r\n*/\r\nfunction config(): Omit<UserConfig, 'plugins'> { return { server: { watch: { ignored: [`**/${FOLDER_NAME}/${PRIVATE_FOLDER_NAME}/**`] } } } }\r\n\r\n/**\r\n * Vite `configResolved` hook: stores the Vite root and whether the dev server is running.\r\n*/\r\nfunction configResolved(this: Vite.DATA, config: ResolvedConfig): void\r\n{\r\n dev = config.command === 'serve'\r\n this.readIn = mergePaths(config.root, this.readIn).replaceAll('\\\\', '/')\r\n this.setupIn = mergePaths(config.root, this.setupIn).replaceAll('\\\\', '/')\r\n}\r\n\r\n/**\r\n * Vite `configureServer` hook: tracks dev servers so `classter.css` can be reloaded when new classes appear.\r\n*/\r\nfunction configureServer(server: ViteDevServer): void\r\n{\r\n serversLength = SERVERS.push(server)\r\n\r\n server.httpServer?.once('close', (): void =>\r\n {\r\n const INDEX = SERVERS.indexOf(server)\r\n\r\n if (INDEX === -1) return Logs.warn('VITE', 'UNABLE TO DELETE THE SERVER.')\r\n\r\n SERVERS.splice(INDEX, 1)\r\n\r\n serversLength--\r\n })\r\n}\r\n\r\n/**\r\n * Vite `resolveId` hook: maps `upwwwards` and `classter.css` to their virtual modules; throws when `upwwwards` cannot be resolved.\r\n*/\r\nasync function resolveID(this: Rolldown.PluginContext, id: string): Promise<string | null>\r\n{\r\n switch (id)\r\n {\r\n case ID: try\r\n {\r\n const _ID = (await this.resolve(id, undefined, { skipSelf: true }))!.id\r\n\r\n return _ID.startsWith(VIRTUAL_ID) ? _ID : VIRTUAL_ID + _ID\r\n }\r\n catch { Logs.throw('VITE', 'UNABLE TO RESOLVE THE PATH TO UPWWWARDS.') }\r\n case CLASSTER_ID: return VIRTUAL_CLASSTER_ID\r\n default : return null\r\n }\r\n}\r\n\r\n/**\r\n * Vite `load` hook: serves the virtual `upwwwards` module, and `classter.css` (full CSS in dev, a placeholder rule in build).\r\n*/\r\nfunction load(this: Vite.DATA, id: string): string | null\r\n{\r\n return id.startsWith(VIRTUAL_ID)\r\n ? `import Up from '${id.substring(VIRTUAL_ID.length)}'; ${this.virtual}`\r\n : this.Classter && id === VIRTUAL_CLASSTER_ID\r\n ? dev\r\n ? this.Classter.get()\r\n : CLASSTER_MARK_STYLE\r\n : null\r\n}\r\n\r\n/**\r\n * Vite `buildStart` hook: scans `readIn` HTML files with Classter and writes the generated files into the project.\r\n*/\r\nfunction buildStart(this: Vite.DATA): void\r\n{\r\n if (this.Classter) readHTMLFiles(this)\r\n\r\n for (let i = 0, max = this.files.length; i < max; i++)\r\n {\r\n const\r\n DATA = this.files[i],\r\n PATH = path.resolve(`${this.setupIn}/${DATA.customizable ? CUSTOMIZABLE_FOLDER_NAME : PRIVATE_FOLDER_NAME}/${DATA.folder}/${DATA.name}`)\r\n\r\n if (fs.existsSync(PATH) && (DATA.customizable || fs.readFileSync(PATH, 'utf-8') === DATA.content)) continue\r\n\r\n fs.mkdirSync(path.dirname(PATH), { recursive: true })\r\n fs.writeFileSync(PATH, DATA.content)\r\n }\r\n}\r\n\r\n/**\r\n * Vite `transform` hook: analyzes components and HTML under `readIn` with Classter, then reloads `classter.css` on dev servers when it changed.\r\n * Ignores Vite style/script extracts (`?…type=style|script…`) so they are not parsed as SFCs.\r\n*/\r\nfunction transform(this: Vite.DATA, code: string, id: string): void\r\n{\r\n if (!this.Classter || /\\?(?:.*&)?type=(?:style|script)\\b/.test(id)) return\r\n\r\n const FILE = id.split('?', 1)[0]!.replaceAll('\\\\', '/')\r\n\r\n if (!FILE.startsWith(`${this.readIn}/`)) return\r\n\r\n if (FILE.endsWith(this.Classter.ext)) this.Classter.analyze(code, id)\r\n else if (FILE.endsWith('.html')) this.Classter.analyzeHTML(code, id)\r\n\r\n if (!this.Classter.updated || !serversLength) return\r\n\r\n for (let i = 0; i < serversLength; i++)\r\n {\r\n const\r\n SERVER = SERVERS[i],\r\n MOD = SERVER.moduleGraph.getModuleById(VIRTUAL_CLASSTER_ID)\r\n\r\n if (!MOD) continue\r\n\r\n SERVER.reloadModule(MOD)\r\n }\r\n\r\n this.Classter.updated = false\r\n}\r\n\r\n// #EXPORTS\r\n\r\n // ##THIS\r\n/**\r\n * Creates the `upwwwards` Vite plugin, the entry point that sets up the runtime for Nuxt 4 or SvelteKit 2.\r\n *\r\n * The plugin:\r\n * - Replaces every `import Up from 'upwwwards'` with a virtual module that constructs `Up` exactly once\r\n * (on the server and in the browser) with the `up` config, the selected adapter and the enabled plugins.\r\n * - Writes generated files into `<setupIn>/upwwwards/` at build start: `private/types/upwwwards.d.ts`\r\n * (types of `Up.Adapter`, the enabled plugins, `AdapterConfig` / `AdapterRef` and `EventData`; rewritten when outdated),\r\n * `customizable/types/config.d.ts` (created once, then yours to edit, to augment `AppCache` and plugin interfaces),\r\n * and `private/styles/_screen.scss` (breakpoint SCSS variables) when `Screen` is enabled.\r\n * The `private` folder is excluded from the dev server file watcher.\r\n * - When `classter` is set, compiles atomic class tokens found in templates into the virtual stylesheet `classter.css`:\r\n * served live and hot-reloaded in dev, and injected into the emitted CSS bundle in build.\r\n *\r\n * After construction, the app must call `Up.set(adapterConfig)` once in the browser to start the runtime.\r\n * @param cfg Plugin options (see {@link Vite.CONFIG}).\r\n * @returns The Vite plugin (enforced `pre`).\r\n * @throws Through `Logs.throw` when `adapter` is not `'nuxt'` or `'svelte'`, or when `Synthra` is enabled and the `three` package cannot be found.\r\n * Resolving `upwwwards` also throws if the package path cannot be resolved.\r\n * @note Side effects: writes files into the project, and configures the shared Classter state (aliases, identifiers, warnings).\r\n * @note When `classter` is enabled, import `classter.css` once in the app (e.g. in `app.vue` or the root `+layout.svelte`).\r\n * @example\r\n * ```ts\r\n * // nuxt.config.ts\r\n * import upwwwards from 'upwwwards/initializers/vite'\r\n * import Vue from 'upwwwards/classter/Vue'\r\n *\r\n * export default defineNuxtConfig({\r\n * vite:\r\n * {\r\n * plugins:\r\n * [\r\n * upwwwards({\r\n * adapter : 'nuxt',\r\n * up : { thread: { flowBudget: 8 } },\r\n * plugins : ['Scroll', { name: 'Screen', config: { dimensions: { mobileWidth: 768 } } }],\r\n * classter: { Classter: Vue, alias: { 'my-pa': 'padding' } }\r\n * })\r\n * ]\r\n * }\r\n * })\r\n * ```\r\n * @example\r\n * ```ts\r\n * // vite.config.ts (SvelteKit)\r\n * import { sveltekit } from '@sveltejs/kit/vite'\r\n * import { defineConfig } from 'vite'\r\n * import upwwwards from 'upwwwards/initializers/vite'\r\n * import Svelte from 'upwwwards/classter/Svelte'\r\n *\r\n * export default defineConfig({\r\n * plugins:\r\n * [\r\n * upwwwards({\r\n * adapter : 'svelte',\r\n * plugins : ['Observer', { name: 'Anime', config: { plugins: ['ScrollTrigger'] } }],\r\n * classter: { Classter: Svelte }\r\n * }),\r\n * sveltekit()\r\n * ]\r\n * })\r\n * ```\r\n*/\r\nexport default function vite(cfg: Vite.CONFIG): VitePlugin\r\n{\r\n const DATA = getData(cfg)\r\n\r\n return {\r\n name : ID,\r\n enforce : 'pre',\r\n config,\r\n configResolved : configResolved.bind(DATA),\r\n configureServer,\r\n resolveId : resolveID,\r\n load : load.bind(DATA),\r\n buildStart : buildStart.bind(DATA),\r\n ...(DATA.Classter\r\n ? {\r\n transform : transform.bind(DATA),\r\n generateBundle: function (this: Rolldown.PluginContext, _options: Rolldown.NormalizedOutputOptions, bundle: Rolldown.OutputBundle): void\r\n {\r\n for (const KEY in bundle)\r\n {\r\n const FILE = bundle[KEY]\r\n\r\n if (FILE.type !== 'asset' || !FILE.fileName.endsWith('.css')) continue\r\n\r\n let source = typeof FILE.source === 'string' ? FILE.source : Buffer.from(FILE.source).toString('utf-8')\r\n\r\n if (!source.includes(CLASSTER_MARK)) continue\r\n\r\n const MATCH = source.match(CLASSTER_MARK_RGX)\r\n\r\n if (MATCH?.index != null) source = source.substring(0, MATCH.index) + source.substring(MATCH.index + MATCH[0].length)\r\n\r\n FILE.source = DATA.Classter!.get() + source.trim()\r\n\r\n break\r\n }\r\n }\r\n }\r\n : undefined\r\n )\r\n }\r\n}"],"mappings":"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","names":["config","i","max","r","NAMES","value"]}
1
+ {"version":3,"sources":["../../src/initializers/vite.ts"],"sourcesContent":["/* [vite] */\r\n\r\n// #IMPORTS\r\n\r\n // ##NODE\r\nimport fs, { readdirSync, readFileSync } from 'fs'\r\nimport { fileURLToPath } from 'url'\r\nimport path from 'path'\r\n\r\n // ##SCRIPTS\r\nimport Logs from '../scripts/Logs.js'\r\n\r\n // ##TYPES\r\nimport type { UserConfig, ResolvedConfig, Plugin as VitePlugin, ViteDevServer, Rolldown } from 'vite'\r\n\r\nimport type Up from '../core/Up.js'\r\n\r\nimport type Plugin from '../plugins/@/Plugin.js'\r\nimport type Screen from '../plugins/Screen.js'\r\n\r\nimport type Classter from '../classter/@/Classter.js'\r\n\r\n// #TYPES\r\n\r\n // ##THIS\r\nnamespace Vite\r\n{\r\n /**\r\n * Built-in adapter presets, keyed by the value of {@link Vite.CONFIG.adapter}:\r\n * adapter module name, default `readIn` / `setupIn` directories, and component file extension analyzed by Classter.\r\n */\r\n export type ADAPTER_MAP =\r\n {\r\n svelte:\r\n {\r\n name : 'Svelte',\r\n readIn : '/src',\r\n setupIn: '/src/lib',\r\n ext : '.svelte'\r\n },\r\n nuxt:\r\n {\r\n name : 'Nuxt',\r\n readIn : '/app',\r\n setupIn: '/app',\r\n ext : '.vue'\r\n }\r\n }\r\n\r\n /**\r\n * Supported adapter keys: `'nuxt'` (Nuxt 4) or `'svelte'` (SvelteKit 2).\r\n */\r\n export type ADAPTER_KEY = keyof ADAPTER_MAP\r\n\r\n /**\r\n * Options of the `upwwwards` Vite plugin (see {@link vite}).\r\n */\r\n export type CONFIG =\r\n {\r\n /**\r\n * Host framework: `'nuxt'` or `'svelte'`.\r\n * Selects the adapter exposed as `Up.Adapter` (`upwwwards/adapters/Nuxt` or `upwwwards/adapters/Svelte`),\r\n * the default `readIn` / `setupIn` directories, and the component extension (`.vue` / `.svelte`) analyzed by Classter.\r\n */\r\n adapter: ADAPTER_KEY,\r\n /**\r\n * Source directory scanned by Classter, as a path starting with `/` resolved against the Vite root.\r\n * Components and `.html` files under it are analyzed when Vite transforms them, and the `.html` files\r\n * directly inside it (e.g. SvelteKit `app.html`) are analyzed at build start.\r\n * Defaults to `'/app'` with Nuxt and `'/src'` with SvelteKit. Unused when Classter is disabled.\r\n */\r\n readIn?: `/${string}`,\r\n /**\r\n * Directory in which the plugin creates its `upwwwards` folder of generated files,\r\n * as a path starting with `/` resolved against the Vite root.\r\n * Defaults to `'/app'` with Nuxt and `'/src/lib'` with SvelteKit.\r\n */\r\n setupIn?: `/${string}`,\r\n /**\r\n * Core runtime configuration (`event`, `thread`) passed to `Up` at construction.\r\n * It is serialized with `JSON.stringify`, so it must only contain JSON-compatible values.\r\n * Entries of `event.enhance` are also turned into typings for the generated `EventData` interface.\r\n */\r\n up?: Up.CONFIG,\r\n /**\r\n * Plugins to enable, each given by name (e.g. `'Scroll'`) or as `{ name, config }`.\r\n * Available names: `Observer`, `Screen`, `Transmitter`, `Scroll`, `Anime`, `Puppeteer`, `Synthra`.\r\n * Configs are serialized with `JSON.stringify`, except Anime `plugins` (turned into lazy `gsap/<name>` imports)\r\n * and Synthra `pick` (turned into lazy imports of the picked Three.js exports).\r\n * A name declared more than once logs a warning and only its first declaration is kept.\r\n */\r\n plugins?: (Plugin.RAW_WRAP | Plugin.RAW_WRAP['name'])[],\r\n /**\r\n * Enables Classter, the optional atomic-CSS generator (see {@link Vite.CLASSTER_CONFIG}).\r\n * Disabled when omitted.\r\n */\r\n classter?: CLASSTER_CONFIG\r\n }\r\n\r\n /**\r\n * File generated into the project at build start.\r\n * @internal\r\n */\r\n export type FILE_DATA =\r\n {\r\n /**\r\n * `true` for files created once in the `customizable` folder and never overwritten;\r\n * `false` for files in the `private` folder, rewritten whenever their content changes.\r\n */\r\n customizable: boolean,\r\n /**\r\n * File name, including its extension.\r\n */\r\n name: string,\r\n /**\r\n * Sub-folder (`types`, `styles`, …) inside the `customizable` or `private` folder.\r\n */\r\n folder: string,\r\n /**\r\n * File content.\r\n */\r\n content: string\r\n }\r\n\r\n /**\r\n * Resolved plugin state shared by the Vite hooks.\r\n * @internal\r\n */\r\n export type DATA =\r\n {\r\n /**\r\n * Directory scanned by Classter.\r\n */\r\n readIn: string,\r\n /**\r\n * Directory of the generated `upwwwards` folder (already suffixed with `/upwwwards`).\r\n */\r\n setupIn: string,\r\n /**\r\n * Code of the virtual `upwwwards` module, appended after the import of the real runtime.\r\n */\r\n virtual: string,\r\n /**\r\n * Files to generate at build start.\r\n */\r\n files: FILE_DATA[],\r\n /**\r\n * Configured Classter analyzer, or `undefined` when Classter is disabled.\r\n */\r\n Classter?: typeof Classter\r\n }\r\n\r\n /**\r\n * Code generated from the `up` option.\r\n * @internal\r\n */\r\n export type UP_DATA =\r\n {\r\n /**\r\n * Serialized `up` config injected into the virtual module.\r\n */\r\n virtual: string,\r\n /**\r\n * `EventData` interface declaration built from `up.event.enhance` (empty when unused).\r\n */\r\n type: string\r\n }\r\n\r\n /**\r\n * Code generated from the `plugins` option.\r\n * @internal\r\n */\r\n export type PLUGINS_DATA =\r\n {\r\n /**\r\n * Virtual module code importing the plugins and pushing their configs.\r\n */\r\n virtual: string,\r\n /**\r\n * Type declarations injected into the generated type files.\r\n */\r\n types:\r\n {\r\n /**\r\n * `Up.<Plugin>` declarations for the enabled plugins.\r\n */\r\n private: string,\r\n /**\r\n * Plugin-specific module augmentations (Anime GSAP plugins, Synthra Three.js exports).\r\n */\r\n privatePlugins: string,\r\n /**\r\n * Editable augmentation stubs added to the customizable `config.d.ts`.\r\n */\r\n customizable: string\r\n },\r\n /**\r\n * Extra plugin files to generate (e.g. `_screen.scss`).\r\n */\r\n files: FILE_DATA[]\r\n }\r\n\r\n /**\r\n * Classter options. Classter compiles atomic class tokens found in templates (e.g. `pa:1rem`, `co:[#fff]:before`)\r\n * into the virtual stylesheet `classter.css`, which the app must import once.\r\n */\r\n export type CLASSTER_CONFIG =\r\n {\r\n /**\r\n * Analyzer matching the adapter: `Vue` from `upwwwards/classter/Vue` (Nuxt)\r\n * or `Svelte` from `upwwwards/classter/Svelte` (SvelteKit).\r\n */\r\n Classter: typeof Classter,\r\n /**\r\n * Disables Classter while keeping its config. Default `false`.\r\n * @warning While disabled, `classter.css` has no content provider: do not import it.\r\n */\r\n off?: boolean,\r\n /**\r\n * Silences warnings about unknown aliases and expressions that cannot be analyzed statically. Default `false`.\r\n * Warnings about invalid values and unsupported pseudo-elements are still logged.\r\n */\r\n silent?: boolean,\r\n /**\r\n * Extra attribute / prop names to scan, stored in lowercase and kebab-case.\r\n */\r\n identifiers?:\r\n {\r\n /**\r\n * Names whose values are class lists, in addition to `class` (e.g. `['innerClass']`).\r\n */\r\n class?: Classter.IDENTIFIER[],\r\n /**\r\n * Names whose object-literal values may contain class identifiers\r\n * (e.g. `attrs` for `attrs={{ class: 'pa:1rem' }}`).\r\n */\r\n attributes?: Classter.IDENTIFIER[]\r\n },\r\n /**\r\n * Custom aliases mapping a shortcut to a CSS property, e.g. `{ 'my-pa': 'padding' }` (see `Classter.addAlias`).\r\n */\r\n alias?: Record<string, string>\r\n }\r\n}\r\n\r\n// #CONSTANTS\r\n\r\n // ##THIS\r\nconst\r\nFOLDER_NAME = 'upwwwards',\r\nCUSTOMIZABLE_FOLDER_NAME = 'customizable',\r\nPRIVATE_FOLDER_NAME = 'private',\r\nID = 'upwwwards',\r\nVIRTUAL_ID = `\\0virtual::${ID}::`, // + real ID (path)\r\nCLASSTER_ID = 'classter.css',\r\nVIRTUAL_CLASSTER_ID = `\\0virtual::${CLASSTER_ID}`,\r\nCLASSTER_MARK = '[data-upwwwards-classter]',\r\nCLASSTER_MARK_STYLE = `${CLASSTER_MARK}{display:contents}`,\r\nCLASSTER_MARK_RGX = new RegExp(`\\\\${CLASSTER_MARK}\\\\s*{\\\\s*display\\\\s*:\\\\s*contents\\\\s*;?\\\\s*}\\\\s*`)\r\n,\r\n/**\r\n * Package entry points that must stay out of Vite's dependency prebundle.\r\n * Prebundling `upwwwards` while plugins resolve `../core/Up.js` raw creates two `Up` / `Event`\r\n * copies: `construct` runs on one, `Scroll[set]` / `Event.sub` hit the other (`Up.Scroll` undefined).\r\n*/\r\nOPTIMIZE_DEPS_EXCLUDE =\r\n[\r\n ID,\r\n `${ID}/contexts/nuxt`,\r\n `${ID}/contexts/sveltekit`,\r\n `${ID}/adapters`,\r\n `${ID}/adapters/Nuxt`,\r\n `${ID}/adapters/Svelte`,\r\n `${ID}/plugins`,\r\n `${ID}/plugins/Transmitter`,\r\n `${ID}/plugins/Scroll`,\r\n `${ID}/plugins/Anime`,\r\n `${ID}/plugins/Puppeteer`,\r\n `${ID}/plugins/Synthra`,\r\n `${ID}/scripts`,\r\n `${ID}/scripts/Trees`,\r\n `${ID}/scripts/Arrays`,\r\n `${ID}/classter/Vue`,\r\n `${ID}/classter/Svelte`,\r\n `${ID}/symbols`\r\n] as const\r\n,\r\nSERVERS: ViteDevServer[] = []\r\n\r\n// #VARIABLES\r\n\r\n // ##THIS\r\nlet\r\ndev = false\r\n,\r\nserversLength = 0\r\n\r\n// #FUNCTIONS\r\n\r\n // ##GET\r\n/**\r\n * Returns the preset of an adapter key; throws through `Logs.throw` when the key is unknown.\r\n*/\r\nfunction getAdapterData<T extends Vite.ADAPTER_KEY, U extends Vite.ADAPTER_MAP[T]>(adapter: T): U\r\n{\r\n switch (adapter)\r\n {\r\n case 'svelte': return {\r\n name : 'Svelte',\r\n readIn : '/src',\r\n setupIn: '/src/lib',\r\n ext : '.svelte'\r\n } as U\r\n case 'nuxt': return {\r\n name : 'Nuxt',\r\n readIn : '/app',\r\n setupIn: '/app',\r\n ext : '.vue'\r\n } as U\r\n default: Logs.throw('VITE', `THE \"${adapter}\" ADAPTER KEY IS NOT RECOGNIZED.`)\r\n }\r\n}\r\n\r\n/**\r\n * Serializes the `up` option and builds the `EventData` typings from `up.event.enhance`.\r\n*/\r\nfunction getUpData(up: Vite.CONFIG['up']): Vite.UP_DATA\r\n{\r\n return up\r\n ? {\r\n virtual: JSON.stringify(up),\r\n type : up.event?.enhance\r\n ? `interface EventData { ${up.event.enhance.reduce((acc, data): string =>\r\n {\r\n const [KEY, VALUE] = typeof data === 'string'\r\n ? [data, 'import(\\'upwwwards\\').Event.Data']\r\n : [data.key, `import('upwwwards').Event.Data<${data.on ?? 'import(\\'upwwwards\\').Event.DEFAULT_ON'}, ${data.forever ?? false}, ${'waitDelay' in data && data.waitDelay > 0 ? data.waitType === 'debounce' ? data.waitDelay : data.waitType === 'throttle' ? -data.waitDelay : 0 : 0}, ${data.threadFlag}, (...args: ${data.argsTypes ?? 'any'}) => void>`]\r\n \r\n return `${acc}${KEY}: ${VALUE}, `\r\n },\r\n '')}};`\r\n : ''\r\n }\r\n : {\r\n virtual: '{}',\r\n type : ''\r\n }\r\n}\r\n\r\n/**\r\n * Builds the plugin part of the virtual module, typings and extra files; throws when Synthra is enabled and `three` cannot be found.\r\n*/\r\nfunction getPluginsData(plugins: Vite.CONFIG['plugins']): Vite.PLUGINS_DATA\r\n{\r\n const\r\n NAMES = new Set<Plugin.RAW_WRAP['name']>(),\r\n TYPES: Vite.PLUGINS_DATA['types'] =\r\n {\r\n private : '',\r\n privatePlugins: '',\r\n customizable : ''\r\n },\r\n FILES_DATA: Vite.FILE_DATA[] = []\r\n\r\n let data = ''\r\n\r\n if (plugins) for (let i = 0, max = plugins.length, config = ''; i < max; i++, config = '')\r\n {\r\n const\r\n UNFORMATTED = plugins[i],\r\n RAW_WRAP: Plugin.RAW_WRAP = typeof UNFORMATTED === 'string' ? { name: UNFORMATTED } : UNFORMATTED\r\n\r\n if (NAMES.has(RAW_WRAP.name))\r\n {\r\n Logs.warn('VITE', `YOU HAVE DECLARED THE SAME \"${RAW_WRAP.name}\" PLUGIN MULTIPLE TIMES.`)\r\n\r\n continue\r\n }\r\n\r\n switch (RAW_WRAP.name)\r\n {\r\n case 'Screen':\r\n {\r\n const\r\n {\r\n crushedHeight: CRUSHED_HEIGHT = 435 satisfies Screen.DEFAULT_CRUSHED_HEIGHT,\r\n mobileWidth : MOBILE_WIDTH = 768 satisfies Screen.DEFAULT_MOBILE_WIDTH,\r\n tabletWidth : TABLET_WIDTH = 1440 satisfies Screen.DEFAULT_TABLET_WIDTH\r\n } = RAW_WRAP.config?.dimensions ?? {}\r\n\r\n FILES_DATA.push(\r\n {\r\n customizable: false,\r\n name : '_screen.scss',\r\n folder : 'styles',\r\n content : readFileSync(path.join(import.meta.dirname, '../styles/_screen.scss'), 'utf-8').replace('/* @__CONSTANTS__ */', `$SCREEN_CRUSHED_HEIGHT: ${CRUSHED_HEIGHT}px;\\n$SCREEN_MOBILE_WIDTH: ${MOBILE_WIDTH}px;\\n$SCREEN_TABLET_WIDTH: ${TABLET_WIDTH}px;`)\r\n })\r\n \r\n break\r\n }\r\n case 'Transmitter':\r\n {\r\n TYPES.customizable += `declare module '${ID}/plugins/${RAW_WRAP.name}'\\n{\\n\\texport interface TransmitterChannels { /* You can add channels to the Transmitter plugin here. */ }\\n}\\n\\n`\r\n \r\n break\r\n }\r\n case 'Anime':\r\n {\r\n if (!RAW_WRAP.config) break\r\n \r\n const {plugins: ANIME_PLUGINS, ...REST} = RAW_WRAP.config\r\n \r\n if (ANIME_PLUGINS)\r\n {\r\n let type = ''\r\n \r\n for (let i = 0, max = ANIME_PLUGINS.length; i < max; i++)\r\n {\r\n const PLUGIN = ANIME_PLUGINS[i]\r\n\r\n config += `${PLUGIN}: () => import('gsap/${PLUGIN}'),`\r\n type += `${PLUGIN}: typeof import('gsap/${PLUGIN}').default, `\r\n }\r\n\r\n if (config)\r\n {\r\n config = `{graph:{${config.slice(0, -1)}},${JSON.stringify(REST).substring(1)}`\r\n\r\n TYPES.privatePlugins += ` declare module '${ID}/plugins/${RAW_WRAP.name}' { export interface AnimeBucket { ${type}}; };`\r\n }\r\n else config = JSON.stringify(REST)\r\n }\r\n\r\n break\r\n }\r\n case 'Synthra':\r\n {\r\n const\r\n {pick: RAW_PICK, ...REST} = RAW_WRAP.config ?? {},\r\n PICK = new Set(['WebGLRenderer', 'Scene', 'PerspectiveCamera', ...(RAW_PICK ?? [])]),\r\n COMMENTS_RGX_1 = /\\/\\*[\\s\\S]*?\\*\\//g,\r\n COMMENTS_RGX_2 = /\\/\\/.*$/gm,\r\n ALIAS_RGX = /\\s+as\\s+/,\r\n RGX_0 = /export\\s+default\\s+(?:class|function)?\\s*([A-Za-z_$][\\w$]*)?/,\r\n RGX_1 = /export\\s+(?:class|function|const|let|var)\\s+([A-Za-z_$][\\w$]*)/g,\r\n RGX_2 = /export\\s*{\\s*([^}]+)\\s*}/g,\r\n RGX_3 = /export\\s+\\*\\s+(?:as\\s+([A-Za-z_$][\\w$]*)\\s+)?from\\s+['\"](.+)['\"]/g\r\n \r\n let\r\n dir = path.dirname(fileURLToPath(import.meta.resolve('three'))),\r\n pathPackageJSON = ''\r\n\r\n do\r\n {\r\n pathPackageJSON = path.join(dir, 'package.json')\r\n\r\n if (fs.existsSync(pathPackageJSON)) break\r\n \r\n const DIR = path.dirname(dir)\r\n\r\n if (dir === DIR || !DIR) Logs.throw('VITE', 'UNABLE TO FIND THE THREE JS PACKAGE.')\r\n\r\n dir = DIR\r\n }\r\n while (true)\r\n\r\n const\r\n MAP = new Map<string, Set<string>>(),\r\n SEEN = new Map<string, string[]>(),\r\n PACKAGE_JSON = JSON.parse(readFileSync(pathPackageJSON, 'utf-8')),\r\n PACKAGE_NAME = PACKAGE_JSON['name'],\r\n PACKAGE_EXPORTS = PACKAGE_JSON['exports']\r\n\r\n /**\r\n * Yields `[module specifier, file path]` pairs for one entry of the `three` package exports.\r\n */\r\n function* g(key: string, value: string): Generator<[module: string, path: string], void, void>\r\n {\r\n const BASE_MODULE = path.join(PACKAGE_NAME, key.endsWith('*') ? key.slice(0, -1) : key)\r\n \r\n if (value.includes('*')) // *The main path \".\" (three) does not have an asterisk \"*\"\r\n {\r\n const\r\n [PREFIX, SUFFIX] = value.split('*'),\r\n PREFIX_CLEAN = PREFIX[0] === '.' ? PREFIX.substring(1) : PREFIX,\r\n ENTRIES = readdirSync(path.join(dir, PREFIX),\r\n {\r\n recursive : true,\r\n withFileTypes: true\r\n })\r\n\r\n for (let j = 0, jMax = ENTRIES.length; j < jMax; j++)\r\n {\r\n const ENTRY = ENTRIES[j]\r\n \r\n if (!ENTRY.isFile() || !ENTRY.name.endsWith('.js')) continue\r\n\r\n const\r\n PATH = path.join(ENTRY.parentPath ?? (ENTRY as { path?: string }).path, ENTRY.name),\r\n PATH_NORMALIZED = path.sep === '/' ? PATH : PATH.replaceAll(path.sep, '/'),\r\n PREFIX_INDEX = PATH_NORMALIZED.lastIndexOf(PREFIX_CLEAN)\r\n\r\n if (PREFIX_INDEX === -1 || !PATH_NORMALIZED.endsWith(SUFFIX)) continue\r\n\r\n yield [path.join(BASE_MODULE, PATH_NORMALIZED.substring(PREFIX_INDEX + PREFIX_CLEAN.length)), PATH]\r\n }\r\n }\r\n else if (value.endsWith('.js'))\r\n {\r\n const PATH = path.join(dir, value)\r\n\r\n if (fs.existsSync(PATH)) yield [BASE_MODULE, PATH]\r\n }\r\n }\r\n\r\n /**\r\n * Returns the picked export names found in a file, following `export *` re-exports (memoized).\r\n */\r\n function r(p: string): string[]\r\n {\r\n let exported = SEEN.get(p)\r\n \r\n if (exported) return exported\r\n\r\n SEEN.set(p, exported = [])\r\n\r\n const FILE = readFileSync(p, 'utf-8').replace(COMMENTS_RGX_1, '').replace(COMMENTS_RGX_2, '')\r\n\r\n let match = RGX_0.exec(FILE)\r\n\r\n if (match)\r\n {\r\n const NAME = match[1]\r\n\r\n if (NAME && PICK.has(NAME)) exported.push(NAME)\r\n }\r\n\r\n RGX_1.lastIndex = 0\r\n\r\n while (match = RGX_1.exec(FILE))\r\n {\r\n const NAME = match[1]\r\n\r\n if (PICK.has(NAME)) exported.push(NAME)\r\n }\r\n\r\n RGX_2.lastIndex = 0\r\n \r\n while (match = RGX_2.exec(FILE))\r\n {\r\n const NAMES = match[1].split(',')\r\n\r\n for (let j = 0, jMax = NAMES.length; j < jMax; j++)\r\n {\r\n const\r\n BASE_AND_ALIAS = NAMES[j].split(ALIAS_RGX),\r\n NAME = (BASE_AND_ALIAS[1] ?? BASE_AND_ALIAS[0]).trim()\r\n\r\n if (PICK.has(NAME)) exported.push(NAME)\r\n }\r\n }\r\n\r\n RGX_3.lastIndex = 0\r\n\r\n while (match = RGX_3.exec(FILE))\r\n {\r\n const NAME = match[1]\r\n\r\n if (NAME)\r\n {\r\n if (PICK.has(NAME)) exported.push(NAME)\r\n\r\n continue\r\n }\r\n \r\n let subPath = path.resolve(path.dirname(p), match[2])\r\n \r\n if (!subPath.endsWith('.js')) subPath += '.js'\r\n\r\n if (subPath !== p && fs.existsSync(subPath)) exported.push(...r(subPath))\r\n }\r\n\r\n return exported\r\n }\r\n\r\n let\r\n value,\r\n generated: [module: string, path: string] | void\r\n\r\n for (const KEY in PACKAGE_EXPORTS)\r\n {\r\n value = PACKAGE_EXPORTS[KEY]\r\n\r\n if (typeof value !== 'string' && (typeof value !== 'object' || typeof (value = value.import ?? value.default ?? value.module) !== 'string')) continue\r\n\r\n const GEN = g(KEY, value)\r\n\r\n while (generated = GEN.next().value)\r\n {\r\n const\r\n MODULE_NORMALIZED = path.sep === '/' ? generated[0] : generated[0].replaceAll(path.sep, '/'),\r\n EXPORTED = r(generated[1])\r\n\r\n for (let k = 0, kMax = EXPORTED.length; k < kMax; k++)\r\n {\r\n const SET = MAP.get(MODULE_NORMALIZED)\r\n\r\n SET ? SET.add(EXPORTED[k]) : MAP.set(MODULE_NORMALIZED, new Set([EXPORTED[k]]))\r\n }\r\n }\r\n }\r\n\r\n const TREATED = new Set<string>()\r\n\r\n let type = ''\r\n\r\n config = '{ getThree: async () => { '\r\n\r\n for (let j = 0, jMax = MAP.size, module = '', set: Set<string> | null = null, size = 0; j < jMax; j++, module = '', set = null, size = 0)\r\n {\r\n for (const [MODULE, SET] of MAP)\r\n {\r\n for (const NAME of TREATED) if (SET.has(NAME)) SET.delete(NAME)\r\n\r\n size = SET.size\r\n\r\n switch (true)\r\n {\r\n case !size : MAP.delete(MODULE)\r\n case set && (size < set.size || size === set.size && MODULE.length > module.length): continue\r\n default :\r\n module = MODULE\r\n set = SET\r\n }\r\n }\r\n\r\n if (!set) break\r\n\r\n const\r\n NAMES = [...set],\r\n LENGTH = NAMES.length\r\n\r\n if (LENGTH === 1)\r\n {\r\n const NAME = NAMES[0]\r\n \r\n for (const [MODULE, SET] of MAP)\r\n {\r\n if (MODULE === module) continue\r\n\r\n if (SET.has(NAME))\r\n {\r\n if (MODULE === PACKAGE_NAME ||\r\n module !== PACKAGE_NAME &&\r\n (\r\n MODULE.endsWith(`${NAME}.js`) ||\r\n !module.endsWith(`${NAME}.js`) && MODULE.length < module.length\r\n )\r\n )\r\n {\r\n set.delete(NAME)\r\n \r\n module = MODULE\r\n set = SET\r\n }\r\n else SET.delete(NAME)\r\n }\r\n }\r\n }\r\n \r\n for (let k = 0; k < LENGTH; k++)\r\n {\r\n const NAME = NAMES[k]\r\n \r\n TREATED.add(NAME)\r\n\r\n type += `${NAME}: typeof import('${module}').${NAME}, `\r\n }\r\n\r\n config += `const { ${NAMES.join(',')} } = await import('${module}'); `\r\n\r\n MAP.delete(module)\r\n }\r\n\r\n config += `return { ${[...TREATED].join(',')} }; }, ${JSON.stringify(REST).slice(1, -1)} }`\r\n\r\n if (type) TYPES.privatePlugins += ` declare module '${ID}/plugins/${RAW_WRAP.name}' { export interface SynthraThree { ${type}}; };`\r\n\r\n TYPES.customizable += `declare module '${ID}/plugins/${RAW_WRAP.name}'\\n{\\n\\texport interface SynthraBucket { /* Enhance type checking for Synthra bucket here. */ }\\n\\n\\texport interface SynthraPlugins { /* Enhance type checking for Synthra plugins here. */ }\\n}\\n\\n`\r\n\r\n break\r\n }\r\n default:\r\n }\r\n \r\n data += `{plugin:${RAW_WRAP.name},config:${config || JSON.stringify(RAW_WRAP.config)}},` // *Plugin.WRAP\r\n TYPES.private += ` export const ${RAW_WRAP.name}: typeof import('upwwwards/plugins').${RAW_WRAP.name};`\r\n\r\n NAMES.add(RAW_WRAP.name)\r\n }\r\n\r\n return {\r\n virtual: `import {${[...NAMES].join(',')}} from 'upwwwards/plugins'; PLUGINS.push(${data});`,\r\n types : TYPES,\r\n files : FILES_DATA\r\n }\r\n}\r\n\r\n/**\r\n * Applies the `classter` option to the shared Classter state and returns the analyzer, or `undefined` when disabled.\r\n*/\r\nfunction getClasster(classter: Vite.CONFIG['classter'], ext: Vite.ADAPTER_MAP[Vite.ADAPTER_KEY]['ext']): typeof Classter | undefined\r\n{\r\n if (!classter) return\r\n\r\n const Classter = classter.Classter\r\n\r\n if (classter.off) return\r\n\r\n if (classter.silent) Classter.warn = false\r\n\r\n if (classter.identifiers)\r\n {\r\n if (classter.identifiers.class) Classter.addClassIdentifiers(classter.identifiers.class)\r\n if (classter.identifiers.attributes) Classter.addAttributesIdentifiers(classter.identifiers.attributes)\r\n }\r\n\r\n if (classter.alias) Classter.addAlias(classter.alias)\r\n\r\n Classter.ext = ext\r\n\r\n return Classter\r\n}\r\n\r\n/**\r\n * Resolves the plugin options into the shared hook state (virtual module code, generated files, Classter).\r\n*/\r\nfunction getData(config: Vite.CONFIG): Vite.DATA\r\n{\r\n const\r\n ADAPTER_DATA = getAdapterData(config.adapter),\r\n UP_DATA = getUpData(config.up),\r\n PLUGIN_DATA = getPluginsData(config.plugins),\r\n Classter = getClasster(config.classter, ADAPTER_DATA.ext)\r\n\r\n return {\r\n readIn : config.readIn || ADAPTER_DATA.readIn,\r\n setupIn: `${(config.setupIn || ADAPTER_DATA.setupIn)}/${FOLDER_NAME}`,\r\n virtual: `import Adapter from 'upwwwards/adapters/${ADAPTER_DATA.name}'; import { construct } from 'upwwwards/symbols'; const PLUGINS = []; ${PLUGIN_DATA.virtual} Up[construct](${UP_DATA.virtual}, Adapter, PLUGINS); export default Up;`,\r\n files :\r\n [\r\n {\r\n customizable: false,\r\n name : 'upwwwards.d.ts',\r\n folder : 'types',\r\n content : `import type { Up } from '${ID}'; import { Adapter } from 'upwwwards/adapters'; import type { ${ADAPTER_DATA.name}Config, ${ADAPTER_DATA.name}Ref } from 'upwwwards/adapters/${ADAPTER_DATA.name}'; declare module '${ID}' { namespace Up { export const Adapter: typeof import('upwwwards/adapters/${ADAPTER_DATA.name}').default;${PLUGIN_DATA.types.private} }; ${UP_DATA.type} }; declare module 'upwwwards/adapters' { export interface AdapterConfig extends ${ADAPTER_DATA.name}Config {}; export interface AdapterRef<T> extends ${ADAPTER_DATA.name}Ref<T> {}; };${PLUGIN_DATA.types.privatePlugins}`\r\n },\r\n {\r\n customizable: true,\r\n name : 'config.d.ts',\r\n folder : 'types',\r\n content : `declare module '${ID}'\\n{\\n\\texport interface AppCache\\n\\t{\\n\\t\\t/*\\n\\t\\t\\tYou can add data types to enhance the application cache.\\n\\t\\t\\tNever use dynamic keys; use only character strings (risk of memory overflow in SSR).\\n\\t\\t*/\\n\\t}\\n}\\n\\n${PLUGIN_DATA.types.customizable}export {} /* IMPORTANT: DO NOT DELETE THIS LINE. */`\r\n },\r\n ...PLUGIN_DATA.files\r\n ],\r\n Classter\r\n }\r\n}\r\n\r\n // ##UTILS\r\n/**\r\n * Joins two paths, merging the trailing segments of `a` that `b` starts with (`/proj/app` + `/app/x` gives `/proj/app/x`).\r\n*/\r\nfunction mergePaths(a: string, b: string): string\r\n{\r\n a = a.replaceAll('\\\\', '/').replace(/\\/+$/g, '')\r\n b = b.replaceAll('\\\\', '/').replace(/^\\/+/g, '')\r\n\r\n const\r\n A = a.split('/'),\r\n B = b.split('/'),\r\n AL = A.length,\r\n BL = B.length\r\n\r\n RUNNER: for (let i = AL - 1, j = 0, max = 0; i > -1; i--)\r\n {\r\n if (A[i] !== B[0]) continue RUNNER\r\n\r\n for (j = 1, max = Math.min(AL - i, BL); j < max; j++) if (A[i + j] !== B[j]) continue RUNNER\r\n\r\n return path.join(a, ...B.slice(j))\r\n }\r\n\r\n return path.join(a, b)\r\n}\r\n\r\n/**\r\n * Runs Classter on the `.html` files directly inside `readIn` (not recursive).\r\n*/\r\nfunction readHTMLFiles(data: Vite.DATA): void // TODO: non récursif mais est-ce utile ? De base c'était pour lire le fichier html de svelte (peut-être ajouter une option)\r\n{\r\n const FILES = readdirSync(data.readIn, { withFileTypes: true })\r\n\r\n for (let i = 0, max = FILES.length; i < max; i++)\r\n {\r\n const FILE = FILES[i]\r\n\r\n if (FILE.isFile() && path.extname(FILE.name) === '.html') data.Classter!.analyzeHTML(readFileSync(`${data.readIn}/${FILE.name}`, 'utf-8'), FILE.name)\r\n }\r\n}\r\n\r\n/**\r\n * Vite `config` hook: excludes the generated `private` folder from the file watcher, dedupes the\r\n * package, and keeps every `upwwwards/*` entry out of `optimizeDeps` (client + SSR) so plugins and\r\n * the virtual module share one `Up` / `Event` instance.\r\n*/\r\nfunction config(): Omit<UserConfig, 'plugins'>\r\n{\r\n return {\r\n server : { watch: { ignored: [`**/${FOLDER_NAME}/${PRIVATE_FOLDER_NAME}/**`] } },\r\n resolve : { dedupe: [ID] },\r\n optimizeDeps: { exclude: [...OPTIMIZE_DEPS_EXCLUDE] },\r\n ssr : { optimizeDeps: { exclude: [...OPTIMIZE_DEPS_EXCLUDE] } }\r\n }\r\n}\r\n\r\n/**\r\n * Vite `configResolved` hook: stores the Vite root and whether the dev server is running.\r\n*/\r\nfunction configResolved(this: Vite.DATA, config: ResolvedConfig): void\r\n{\r\n dev = config.command === 'serve'\r\n this.readIn = mergePaths(config.root, this.readIn).replaceAll('\\\\', '/')\r\n this.setupIn = mergePaths(config.root, this.setupIn).replaceAll('\\\\', '/')\r\n}\r\n\r\n/**\r\n * Vite `configureServer` hook: tracks dev servers so `classter.css` can be reloaded when new classes appear.\r\n*/\r\nfunction configureServer(server: ViteDevServer): void\r\n{\r\n serversLength = SERVERS.push(server)\r\n\r\n server.httpServer?.once('close', (): void =>\r\n {\r\n const INDEX = SERVERS.indexOf(server)\r\n\r\n if (INDEX === -1) return Logs.warn('VITE', 'UNABLE TO DELETE THE SERVER.')\r\n\r\n SERVERS.splice(INDEX, 1)\r\n\r\n serversLength--\r\n })\r\n}\r\n\r\n/**\r\n * Vite `resolveId` hook: maps `upwwwards` and `classter.css` to their virtual modules; throws when `upwwwards` cannot be resolved.\r\n*/\r\nasync function resolveID(this: Rolldown.PluginContext, id: string): Promise<string | null>\r\n{\r\n switch (id)\r\n {\r\n case ID: try\r\n {\r\n const _ID = (await this.resolve(id, undefined, { skipSelf: true }))!.id\r\n\r\n return _ID.startsWith(VIRTUAL_ID) ? _ID : VIRTUAL_ID + _ID\r\n }\r\n catch { Logs.throw('VITE', 'UNABLE TO RESOLVE THE PATH TO UPWWWARDS.') }\r\n case CLASSTER_ID: return VIRTUAL_CLASSTER_ID\r\n default : return null\r\n }\r\n}\r\n\r\n/**\r\n * Vite `load` hook: serves the virtual `upwwwards` module, and `classter.css` (full CSS in dev, a placeholder rule in build).\r\n*/\r\nfunction load(this: Vite.DATA, id: string): string | null\r\n{\r\n return id.startsWith(VIRTUAL_ID)\r\n ? `import Up from '${id.substring(VIRTUAL_ID.length)}'; ${this.virtual}`\r\n : this.Classter && id === VIRTUAL_CLASSTER_ID\r\n ? dev\r\n ? this.Classter.get()\r\n : CLASSTER_MARK_STYLE\r\n : null\r\n}\r\n\r\n/**\r\n * Vite `buildStart` hook: scans `readIn` HTML files with Classter and writes the generated files into the project.\r\n*/\r\nfunction buildStart(this: Vite.DATA): void\r\n{\r\n if (this.Classter) readHTMLFiles(this)\r\n\r\n for (let i = 0, max = this.files.length; i < max; i++)\r\n {\r\n const\r\n DATA = this.files[i],\r\n PATH = path.resolve(`${this.setupIn}/${DATA.customizable ? CUSTOMIZABLE_FOLDER_NAME : PRIVATE_FOLDER_NAME}/${DATA.folder}/${DATA.name}`)\r\n\r\n if (fs.existsSync(PATH) && (DATA.customizable || fs.readFileSync(PATH, 'utf-8') === DATA.content)) continue\r\n\r\n fs.mkdirSync(path.dirname(PATH), { recursive: true })\r\n fs.writeFileSync(PATH, DATA.content)\r\n }\r\n}\r\n\r\n/**\r\n * Vite `transform` hook: analyzes components and HTML under `readIn` with Classter, then reloads `classter.css` on dev servers when it changed.\r\n * Ignores Vite style/script extracts (`?…type=style|script…`) so they are not parsed as SFCs.\r\n*/\r\nfunction transform(this: Vite.DATA, code: string, id: string): void\r\n{\r\n if (!this.Classter || /\\?(?:.*&)?type=(?:style|script)\\b/.test(id)) return\r\n\r\n const FILE = id.split('?', 1)[0]!.replaceAll('\\\\', '/')\r\n\r\n if (!FILE.startsWith(`${this.readIn}/`)) return\r\n\r\n if (FILE.endsWith(this.Classter.ext)) this.Classter.analyze(code, id)\r\n else if (FILE.endsWith('.html')) this.Classter.analyzeHTML(code, id)\r\n\r\n if (!this.Classter.updated || !serversLength) return\r\n\r\n for (let i = 0; i < serversLength; i++)\r\n {\r\n const\r\n SERVER = SERVERS[i],\r\n MOD = SERVER.moduleGraph.getModuleById(VIRTUAL_CLASSTER_ID)\r\n\r\n if (!MOD) continue\r\n\r\n SERVER.reloadModule(MOD)\r\n }\r\n\r\n this.Classter.updated = false\r\n}\r\n\r\n// #EXPORTS\r\n\r\n // ##THIS\r\n/**\r\n * Creates the `upwwwards` Vite plugin, the entry point that sets up the runtime for Nuxt 4 or SvelteKit 2.\r\n *\r\n * The plugin:\r\n * - Replaces every `import Up from 'upwwwards'` with a virtual module that constructs `Up` exactly once\r\n * (on the server and in the browser) with the `up` config, the selected adapter and the enabled plugins.\r\n * - Sets `resolve.dedupe` and `optimizeDeps.exclude` / `ssr.optimizeDeps.exclude` for the package surface so\r\n * Vite never prebundles a second copy of `Up` while plugins still import `../core/Up.js` (dual-runtime hazard).\r\n * - Writes generated files into `<setupIn>/upwwwards/` at build start: `private/types/upwwwards.d.ts`\r\n * (types of `Up.Adapter`, the enabled plugins, `AdapterConfig` / `AdapterRef` and `EventData`; rewritten when outdated),\r\n * `customizable/types/config.d.ts` (created once, then yours to edit, to augment `AppCache` and plugin interfaces),\r\n * and `private/styles/_screen.scss` (breakpoint SCSS variables) when `Screen` is enabled.\r\n * The `private` folder is excluded from the dev server file watcher.\r\n * - When `classter` is set, compiles atomic class tokens found in templates into the virtual stylesheet `classter.css`:\r\n * served live and hot-reloaded in dev, and injected into the emitted CSS bundle in build.\r\n *\r\n * After construction, the app must call `Up.set(adapterConfig)` once in the browser to start the runtime.\r\n * @param cfg Plugin options (see {@link Vite.CONFIG}).\r\n * @returns The Vite plugin (enforced `pre`).\r\n * @throws Through `Logs.throw` when `adapter` is not `'nuxt'` or `'svelte'`, or when `Synthra` is enabled and the `three` package cannot be found.\r\n * Resolving `upwwwards` also throws if the package path cannot be resolved.\r\n * @note Side effects: writes files into the project, and configures the shared Classter state (aliases, identifiers, warnings).\r\n * @note When `classter` is enabled, import `classter.css` once in the app (e.g. in `app.vue` or the root `+layout.svelte`).\r\n * @example\r\n * ```ts\r\n * // nuxt.config.ts\r\n * import upwwwards from 'upwwwards/initializers/vite'\r\n * import Vue from 'upwwwards/classter/Vue'\r\n *\r\n * export default defineNuxtConfig({\r\n * vite:\r\n * {\r\n * plugins:\r\n * [\r\n * upwwwards({\r\n * adapter : 'nuxt',\r\n * up : { thread: { flowBudget: 8 } },\r\n * plugins : ['Scroll', { name: 'Screen', config: { dimensions: { mobileWidth: 768 } } }],\r\n * classter: { Classter: Vue, alias: { 'my-pa': 'padding' } }\r\n * })\r\n * ]\r\n * }\r\n * })\r\n * ```\r\n * @example\r\n * ```ts\r\n * // vite.config.ts (SvelteKit)\r\n * import { sveltekit } from '@sveltejs/kit/vite'\r\n * import { defineConfig } from 'vite'\r\n * import upwwwards from 'upwwwards/initializers/vite'\r\n * import Svelte from 'upwwwards/classter/Svelte'\r\n *\r\n * export default defineConfig({\r\n * plugins:\r\n * [\r\n * upwwwards({\r\n * adapter : 'svelte',\r\n * plugins : ['Observer', { name: 'Anime', config: { plugins: ['ScrollTrigger'] } }],\r\n * classter: { Classter: Svelte }\r\n * }),\r\n * sveltekit()\r\n * ]\r\n * })\r\n * ```\r\n*/\r\nexport default function vite(cfg: Vite.CONFIG): VitePlugin\r\n{\r\n const DATA = getData(cfg)\r\n\r\n return {\r\n name : ID,\r\n enforce : 'pre',\r\n config,\r\n configResolved : configResolved.bind(DATA),\r\n configureServer,\r\n resolveId : resolveID,\r\n load : load.bind(DATA),\r\n buildStart : buildStart.bind(DATA),\r\n ...(DATA.Classter\r\n ? {\r\n transform : transform.bind(DATA),\r\n generateBundle: function (this: Rolldown.PluginContext, _options: Rolldown.NormalizedOutputOptions, bundle: Rolldown.OutputBundle): void\r\n {\r\n for (const KEY in bundle)\r\n {\r\n const FILE = bundle[KEY]\r\n\r\n if (FILE.type !== 'asset' || !FILE.fileName.endsWith('.css')) continue\r\n\r\n let source = typeof FILE.source === 'string' ? FILE.source : Buffer.from(FILE.source).toString('utf-8')\r\n\r\n if (!source.includes(CLASSTER_MARK)) continue\r\n\r\n const MATCH = source.match(CLASSTER_MARK_RGX)\r\n\r\n if (MATCH?.index != null) source = source.substring(0, MATCH.index) + source.substring(MATCH.index + MATCH[0].length)\r\n\r\n FILE.source = DATA.Classter!.get() + source.trim()\r\n\r\n break\r\n }\r\n }\r\n }\r\n : undefined\r\n )\r\n }\r\n}"],"mappings":"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","names":["config","i","max","r","NAMES","value"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name" : "upwwwards",
3
- "version" : "0.1.3-beta.1",
3
+ "version" : "0.1.4-beta.1",
4
4
  "license" : "SEE LICENSE IN LICENSE",
5
5
  "description": "Shared page lifecycle, frame loop, and opt-in plugins (GSAP, Lenis, Three.js) for Nuxt 4 and SvelteKit 2.",
6
6
  "author" : "Morgan LE THUAUT <morgan@upwwwards.com>",