@pie-players/pie-players-shared 0.3.56 → 0.3.58

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.
@@ -1 +1 @@
1
- {"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/pie/overrides.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * PIE element override helpers.\n *\n * Used to:\n * - parse overrides from URL params\n * - apply overrides to a PIE config (server-side or client-side)\n * - build URLs/params for sharing override state\n */\n\nimport { cloneDeep } from \"../object/index.js\";\nimport { createPieLogger, isGlobalDebugEnabled } from \"./logger.js\";\nimport { parsePackageName } from \"./utils.js\";\n\nexport type ElementOverrides = Record<string, string>;\nconst logger = createPieLogger(\"pie-overrides\", () => isGlobalDebugEnabled());\n\n/**\n * Apply element overrides to a PIE config\n * @param config The original PIE config\n * @param elementOverrides Map of element packages to override versions\n * @returns Updated config with overridden elements\n */\nexport function applyElementOverrides(\n\tconfig: any,\n\telementOverrides: ElementOverrides,\n) {\n\tif (\n\t\t!config ||\n\t\t!elementOverrides ||\n\t\tObject.keys(elementOverrides).length === 0\n\t) {\n\t\treturn config;\n\t}\n\n\t// Create a deep copy of the config to avoid mutating the original\n\tconst updatedConfig = cloneDeep(config);\n\n\t// Check if there are elements to override\n\tif (!updatedConfig.elements) {\n\t\treturn updatedConfig;\n\t}\n\n\t// Process each override\n\tfor (const [packageName, version] of Object.entries(elementOverrides)) {\n\t\tlet matched = false;\n\n\t\t// Find the element key that uses this package\n\t\tfor (const [elementKey, elementPackageValue] of Object.entries(\n\t\t\tupdatedConfig.elements,\n\t\t)) {\n\t\t\tconst elementPackageStr = String(elementPackageValue);\n\n\t\t\tlet basePackageName = \"\";\n\t\t\ttry {\n\t\t\t\tbasePackageName = parsePackageName(elementPackageStr).name;\n\t\t\t} catch {\n\t\t\t\tlogger.debug(\n\t\t\t\t\t`Couldn't parse element package value: ${elementPackageStr}`,\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (basePackageName === packageName) {\n\t\t\t\tmatched = true;\n\n\t\t\t\t// Create a new element key with the specified version\n\t\t\t\tconst versionNumber = String(version).replace(/[^0-9.-]/g, \"\");\n\t\t\t\tconst parts = String(elementKey).split(\"--version-\");\n\t\t\t\tconst baseElementName = parts[0];\n\t\t\t\tconst newElementKey = `${baseElementName}--version-${versionNumber.replace(/\\./g, \"-\")}`;\n\n\t\t\t\t// Update the elements map\n\t\t\t\tupdatedConfig.elements[newElementKey] = `${packageName}@${version}`;\n\n\t\t\t\t// If the key changed, update markup to reference the new key\n\t\t\t\tif (newElementKey !== elementKey) {\n\t\t\t\t\tif (updatedConfig.markup) {\n\t\t\t\t\t\tupdatedConfig.markup = String(updatedConfig.markup).replace(\n\t\t\t\t\t\t\tnew RegExp(elementKey, \"g\"),\n\t\t\t\t\t\t\tnewElementKey,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove the old element if we created a new one with a different key\n\t\t\t\t\tdelete updatedConfig.elements[elementKey];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!matched) {\n\t\t\tlogger.debug(`No matching element found for package ${packageName}`);\n\t\t}\n\t}\n\n\treturn updatedConfig;\n}\n\n/**\n * Apply element version overrides without renaming custom element tags.\n *\n * Unlike `applyElementOverrides`, this helper keeps `config.markup` and\n * `config.elements` keys intact and only updates each matching element package\n * value to the requested version. This is intended for unified `pie-item-player`\n * flows where stable tag names are required.\n */\nexport function applyElementVersionOverridesPreserveTags(\n\tconfig: any,\n\telementOverrides: ElementOverrides,\n) {\n\tif (\n\t\t!config ||\n\t\t!elementOverrides ||\n\t\tObject.keys(elementOverrides).length === 0\n\t) {\n\t\treturn config;\n\t}\n\n\tconst updatedConfig = cloneDeep(config);\n\tif (!updatedConfig.elements || typeof updatedConfig.elements !== \"object\") {\n\t\treturn updatedConfig;\n\t}\n\n\tfor (const [elementKey, elementPackageValue] of Object.entries(\n\t\tupdatedConfig.elements,\n\t)) {\n\t\tconst elementPackageStr = String(elementPackageValue);\n\t\ttry {\n\t\t\tconst parsed = parsePackageName(elementPackageStr);\n\t\t\tconst nextVersion = elementOverrides[parsed.name];\n\t\t\tif (!nextVersion) continue;\n\t\t\tconst packageBase = parsed.path\n\t\t\t\t? `${parsed.name}/${parsed.path}`\n\t\t\t\t: parsed.name;\n\t\t\tupdatedConfig.elements[elementKey] =\n\t\t\t\t`${packageBase}@${String(nextVersion).trim()}`;\n\t\t} catch {\n\t\t\tlogger.debug(\n\t\t\t\t`Couldn't parse element package value: ${elementPackageStr}`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn updatedConfig;\n}\n\n/**\n * Parse element overrides from URL search params.\n * @returns Map of element package names to versions\n */\nexport function parseElementOverridesFromUrl(\n\tsearchParams: URLSearchParams,\n): ElementOverrides {\n\tconst overrides: ElementOverrides = {};\n\n\t// Look for parameters with the pattern pie-overrides[packageName]=version\n\tfor (const [key, value] of searchParams.entries()) {\n\t\tif (key.startsWith(\"pie-overrides[\") && key.endsWith(\"]\")) {\n\t\t\t// Extract the package name from between the brackets\n\t\t\tconst packageName = key.substring(14, key.length - 1);\n\n\t\t\t// Ensure the package name format is correct (including @)\n\t\t\tconst normalizedPackageName = packageName.startsWith(\"@\")\n\t\t\t\t? packageName\n\t\t\t\t: `@${packageName}`;\n\t\t\toverrides[normalizedPackageName] = value;\n\t\t}\n\t}\n\n\treturn overrides;\n}\n\n/**\n * Parse element overrides from current window URL (client-only).\n */\nexport function parseElementOverridesFromCurrentUrl(): ElementOverrides {\n\tif (typeof window === \"undefined\") {\n\t\treturn {};\n\t}\n\n\tconst url = new URL(window.location.href);\n\treturn parseElementOverridesFromUrl(url.searchParams);\n}\n\n/**\n * Generate a URL parameter string for an element override\n */\nexport function formatElementOverrideParam(\n\tpackageName: string,\n\tversion: string,\n): string {\n\t// Normalize the package name for the parameter key (strip leading @)\n\tconst normalizedPackageName = packageName.startsWith(\"@\")\n\t\t? packageName.substring(1)\n\t\t: packageName;\n\treturn `pie-overrides[${normalizedPackageName}]=${encodeURIComponent(version)}`;\n}\n\n/**\n * Creates a URL that preserves existing overrides and adds or updates a new one.\n */\nexport function addOrUpdateOverrideInUrl(\n\turl: URL,\n\tpackageName: string,\n\tversion: string,\n): string {\n\tconst params = new URLSearchParams(url.search);\n\n\t// Remove @ if present for consistency in URL\n\tconst normalizedPackageName = packageName.startsWith(\"@\")\n\t\t? packageName.substring(1)\n\t\t: packageName;\n\n\t// Set the new override\n\tparams.set(`pie-overrides[${normalizedPackageName}]`, version);\n\n\t// Create the new URL\n\tconst newUrl = new URL(url.pathname, url.origin);\n\tnewUrl.search = params.toString();\n\treturn newUrl.toString();\n}\n\n/**\n * Extract package information from a package string.\n * Intended for UI display.\n */\nexport function extractPackageInfo(packageStr: string) {\n\ttry {\n\t\tconst parsed = parsePackageName(String(packageStr));\n\t\treturn {\n\t\t\tname: parsed.name,\n\t\t\tversion: parsed.version || \"unknown\",\n\t\t\tdisplayName: parsed.name.split(\"/\").pop() || parsed.name,\n\t\t};\n\t} catch {\n\t\tconst s = String(packageStr);\n\t\treturn {\n\t\t\tname: s,\n\t\t\tversion: \"unknown\",\n\t\t\tdisplayName: s.split(\"/\").pop() || s,\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/pie/overrides.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * PIE element override helpers.\n *\n * Used to:\n * - parse overrides from URL params\n * - apply overrides to a PIE config (server-side or client-side)\n * - build URLs/params for sharing override state\n */\n\nimport { cloneDeep } from \"../object/index.js\";\nimport { createPieLogger, isGlobalDebugEnabled } from \"./logger.js\";\nimport { parsePackageName } from \"./utils.js\";\nimport { toPackageVersionedTag } from \"./versioned-tag.js\";\n\nexport type ElementOverrides = Record<string, string>;\nconst logger = createPieLogger(\"pie-overrides\", () => isGlobalDebugEnabled());\n\n/**\n * Apply element overrides to a PIE config\n * @param config The original PIE config\n * @param elementOverrides Map of element packages to override versions\n * @returns Updated config with overridden elements\n */\nexport function applyElementOverrides(\n\tconfig: any,\n\telementOverrides: ElementOverrides,\n) {\n\tif (\n\t\t!config ||\n\t\t!elementOverrides ||\n\t\tObject.keys(elementOverrides).length === 0\n\t) {\n\t\treturn config;\n\t}\n\n\t// pie-item contract compatibility: runtime version overrides have historically\n\t// returned a cloned config with tags renamed for the selected package version.\n\tconst updatedConfig = cloneDeep(config);\n\n\t// Check if there are elements to override\n\tif (!updatedConfig.elements) {\n\t\treturn updatedConfig;\n\t}\n\n\tconst matchedPackages = new Set<string>();\n\tconst tagMappings = new Map<string, string>();\n\tconst elements: Record<string, unknown> = {};\n\n\tfor (const [elementKey, elementPackageValue] of Object.entries(\n\t\tupdatedConfig.elements,\n\t)) {\n\t\tconst elementPackageStr = String(elementPackageValue);\n\t\ttry {\n\t\t\tconst parsed = parsePackageName(elementPackageStr);\n\t\t\tconst overrideVersion = elementOverrides[parsed.name];\n\t\t\tif (overrideVersion === undefined) {\n\t\t\t\telements[elementKey] = elementPackageValue;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tmatchedPackages.add(parsed.name);\n\t\t\tconst packageBase = parsed.path\n\t\t\t\t? `${parsed.name}/${parsed.path}`\n\t\t\t\t: parsed.name;\n\t\t\tconst overriddenPackage = `${packageBase}@${String(overrideVersion).trim()}`;\n\t\t\tconst overriddenTag = toPackageVersionedTag(\n\t\t\t\telementKey,\n\t\t\t\toverriddenPackage,\n\t\t\t);\n\t\t\telements[overriddenTag] = overriddenPackage;\n\t\t\tif (overriddenTag !== elementKey) {\n\t\t\t\ttagMappings.set(elementKey, overriddenTag);\n\t\t\t}\n\t\t} catch {\n\t\t\tlogger.debug(\n\t\t\t\t`Couldn't parse element package value: ${elementPackageStr}`,\n\t\t\t);\n\t\t\telements[elementKey] = elementPackageValue;\n\t\t}\n\t}\n\n\tupdatedConfig.elements = elements;\n\n\tif (tagMappings.size > 0) {\n\t\tif (updatedConfig.markup) {\n\t\t\tconst escapeRegExp = (value: string): string =>\n\t\t\t\tvalue.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\t\t\tconst sourceTags = [...tagMappings.keys()]\n\t\t\t\t.sort((left, right) => right.length - left.length)\n\t\t\t\t.map(escapeRegExp)\n\t\t\t\t.join(\"|\");\n\t\t\tconst exactTag = new RegExp(\n\t\t\t\t`(<\\\\/?)(${sourceTags})(?=[\\\\t\\\\n\\\\f\\\\r />])`,\n\t\t\t\t\"g\",\n\t\t\t);\n\t\t\tupdatedConfig.markup = String(updatedConfig.markup).replace(\n\t\t\t\texactTag,\n\t\t\t\t(_match: string, opening: string, tagName: string) =>\n\t\t\t\t\t`${opening}${tagMappings.get(tagName) ?? tagName}`,\n\t\t\t);\n\t\t}\n\n\t\tif (Array.isArray(updatedConfig.models)) {\n\t\t\tupdatedConfig.models = updatedConfig.models.map((model: any) => {\n\t\t\t\tconst overriddenTag = tagMappings.get(model?.element);\n\t\t\t\treturn overriddenTag ? { ...model, element: overriddenTag } : model;\n\t\t\t});\n\t\t}\n\t}\n\n\tfor (const packageName of Object.keys(elementOverrides)) {\n\t\tif (!matchedPackages.has(packageName)) {\n\t\t\tlogger.debug(`No matching element found for package ${packageName}`);\n\t\t}\n\t}\n\n\treturn updatedConfig;\n}\n\n/**\n * Apply element version overrides without renaming custom element tags.\n *\n * Unlike `applyElementOverrides`, this helper keeps `config.markup` and\n * `config.elements` keys intact and only updates each matching element package\n * value to the requested version. This is intended for unified `pie-item-player`\n * flows that preserve authored tags at the override boundary; `makeUniqueTags`\n * later derives the effective per-version runtime namespace on a cloned config.\n */\nexport function applyElementVersionOverridesPreserveTags(\n\tconfig: any,\n\telementOverrides: ElementOverrides,\n) {\n\tif (\n\t\t!config ||\n\t\t!elementOverrides ||\n\t\tObject.keys(elementOverrides).length === 0\n\t) {\n\t\treturn config;\n\t}\n\n\tconst updatedConfig = cloneDeep(config);\n\tif (!updatedConfig.elements || typeof updatedConfig.elements !== \"object\") {\n\t\treturn updatedConfig;\n\t}\n\n\tfor (const [elementKey, elementPackageValue] of Object.entries(\n\t\tupdatedConfig.elements,\n\t)) {\n\t\tconst elementPackageStr = String(elementPackageValue);\n\t\ttry {\n\t\t\tconst parsed = parsePackageName(elementPackageStr);\n\t\t\tconst nextVersion = elementOverrides[parsed.name];\n\t\t\tif (!nextVersion) continue;\n\t\t\tconst packageBase = parsed.path\n\t\t\t\t? `${parsed.name}/${parsed.path}`\n\t\t\t\t: parsed.name;\n\t\t\tupdatedConfig.elements[elementKey] =\n\t\t\t\t`${packageBase}@${String(nextVersion).trim()}`;\n\t\t} catch {\n\t\t\tlogger.debug(\n\t\t\t\t`Couldn't parse element package value: ${elementPackageStr}`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn updatedConfig;\n}\n\n/**\n * Parse element overrides from URL search params.\n * @returns Map of element package names to versions\n */\nexport function parseElementOverridesFromUrl(\n\tsearchParams: URLSearchParams,\n): ElementOverrides {\n\tconst overrides: ElementOverrides = {};\n\n\t// Look for parameters with the pattern pie-overrides[packageName]=version\n\tfor (const [key, value] of searchParams.entries()) {\n\t\tif (key.startsWith(\"pie-overrides[\") && key.endsWith(\"]\")) {\n\t\t\t// Extract the package name from between the brackets\n\t\t\tconst packageName = key.substring(14, key.length - 1);\n\n\t\t\t// Ensure the package name format is correct (including @)\n\t\t\tconst normalizedPackageName = packageName.startsWith(\"@\")\n\t\t\t\t? packageName\n\t\t\t\t: `@${packageName}`;\n\t\t\toverrides[normalizedPackageName] = value;\n\t\t}\n\t}\n\n\treturn overrides;\n}\n\n/**\n * Parse element overrides from current window URL (client-only).\n */\nexport function parseElementOverridesFromCurrentUrl(): ElementOverrides {\n\tif (typeof window === \"undefined\") {\n\t\treturn {};\n\t}\n\n\tconst url = new URL(window.location.href);\n\treturn parseElementOverridesFromUrl(url.searchParams);\n}\n\n/**\n * Generate a URL parameter string for an element override\n */\nexport function formatElementOverrideParam(\n\tpackageName: string,\n\tversion: string,\n): string {\n\t// Normalize the package name for the parameter key (strip leading @)\n\tconst normalizedPackageName = packageName.startsWith(\"@\")\n\t\t? packageName.substring(1)\n\t\t: packageName;\n\treturn `pie-overrides[${normalizedPackageName}]=${encodeURIComponent(version)}`;\n}\n\n/**\n * Creates a URL that preserves existing overrides and adds or updates a new one.\n */\nexport function addOrUpdateOverrideInUrl(\n\turl: URL,\n\tpackageName: string,\n\tversion: string,\n): string {\n\tconst params = new URLSearchParams(url.search);\n\n\t// Remove @ if present for consistency in URL\n\tconst normalizedPackageName = packageName.startsWith(\"@\")\n\t\t? packageName.substring(1)\n\t\t: packageName;\n\n\t// Set the new override\n\tparams.set(`pie-overrides[${normalizedPackageName}]`, version);\n\n\t// Create the new URL\n\tconst newUrl = new URL(url.pathname, url.origin);\n\tnewUrl.search = params.toString();\n\treturn newUrl.toString();\n}\n\n/**\n * Extract package information from a package string.\n * Intended for UI display.\n */\nexport function extractPackageInfo(packageStr: string) {\n\ttry {\n\t\tconst parsed = parsePackageName(String(packageStr));\n\t\treturn {\n\t\t\tname: parsed.name,\n\t\t\tversion: parsed.version || \"unknown\",\n\t\t\tdisplayName: parsed.name.split(\"/\").pop() || parsed.name,\n\t\t};\n\t} catch {\n\t\tconst s = String(packageStr);\n\t\treturn {\n\t\t\tname: s,\n\t\t\tversion: \"unknown\",\n\t\t\tdisplayName: s.split(\"/\").pop() || s,\n\t\t};\n\t}\n}\n"]}
@@ -0,0 +1,15 @@
1
+ export declare function parseVersionedTagName(tagName: string): {
2
+ baseName: string;
3
+ existingEncodedVersion?: string;
4
+ };
5
+ /**
6
+ * Return the full runtime tag for an element package spec.
7
+ *
8
+ * The version suffix acts as an effective namespace in the immutable browser
9
+ * CustomElementRegistry, allowing several package versions to coexist. Existing
10
+ * versioned inputs are normalized on the runtime copy when a host substitutes a
11
+ * different package version. The caller's authored config is not mutated.
12
+ */
13
+ export declare function toPackageVersionedTag(tagName: string, packageSpec: string, options?: {
14
+ preserveUnversionedTag?: boolean;
15
+ }): string;
@@ -0,0 +1,43 @@
1
+ import { parsePackageName } from "./utils.js";
2
+ const VERSION_DELIMITER = "--version-";
3
+ const TAG_VERSION_PATTERN = "[0-9A-Za-z-]+";
4
+ const encodeVersionForTag = (version) => version
5
+ .trim()
6
+ .replace(/[.+]/g, "-")
7
+ .replace(/[^0-9A-Za-z-]/g, "-")
8
+ .replace(/-{2,}/g, "-");
9
+ export function parseVersionedTagName(tagName) {
10
+ const versionMatch = tagName.match(new RegExp(`${VERSION_DELIMITER}(${TAG_VERSION_PATTERN})$`));
11
+ if (!versionMatch || versionMatch.index === undefined) {
12
+ return { baseName: tagName };
13
+ }
14
+ return {
15
+ baseName: tagName.slice(0, versionMatch.index),
16
+ existingEncodedVersion: versionMatch[1],
17
+ };
18
+ }
19
+ /**
20
+ * Return the full runtime tag for an element package spec.
21
+ *
22
+ * The version suffix acts as an effective namespace in the immutable browser
23
+ * CustomElementRegistry, allowing several package versions to coexist. Existing
24
+ * versioned inputs are normalized on the runtime copy when a host substitutes a
25
+ * different package version. The caller's authored config is not mutated.
26
+ */
27
+ export function toPackageVersionedTag(tagName, packageSpec, options = {}) {
28
+ const { version } = parsePackageName(packageSpec);
29
+ if (!version.trim() && options.preserveUnversionedTag) {
30
+ // aggregateElements historically kept unversioned package specs on their
31
+ // authored tag. Preserve that caller-specific behavior.
32
+ return tagName;
33
+ }
34
+ const targetEncodedVersion = encodeVersionForTag(version);
35
+ const { baseName, existingEncodedVersion } = parseVersionedTagName(tagName);
36
+ if (existingEncodedVersion === targetEncodedVersion) {
37
+ return tagName;
38
+ }
39
+ // pie-item contract compatibility: preloaded hosts have historically replaced
40
+ // package versions at runtime, which requires updating the cloned runtime tag.
41
+ return `${baseName}${VERSION_DELIMITER}${targetEncodedVersion}`;
42
+ }
43
+ //# sourceMappingURL=versioned-tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioned-tag.js","sourceRoot":"","sources":["../../src/pie/versioned-tag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,iBAAiB,GAAG,YAAY,CAAC;AACvC,MAAM,mBAAmB,GAAG,eAAe,CAAC;AAE5C,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAU,EAAE,CACvD,OAAO;KACL,IAAI,EAAE;KACN,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;KACrB,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;KAC9B,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAE1B,MAAM,UAAU,qBAAqB,CAAC,OAAe;IAIpD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CACjC,IAAI,MAAM,CAAC,GAAG,iBAAiB,IAAI,mBAAmB,IAAI,CAAC,CAC3D,CAAC;IACF,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACvD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO;QACN,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC;QAC9C,sBAAsB,EAAE,YAAY,CAAC,CAAC,CAAC;KACvC,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACpC,OAAe,EACf,WAAmB,EACnB,UAAgD,EAAE;IAElD,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAElD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;QACvD,yEAAyE;QACzE,wDAAwD;QACxD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,EAAE,QAAQ,EAAE,sBAAsB,EAAE,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAI,sBAAsB,KAAK,oBAAoB,EAAE,CAAC;QACrD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,8EAA8E;IAC9E,+EAA+E;IAC/E,OAAO,GAAG,QAAQ,GAAG,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;AACjE,CAAC","sourcesContent":["import { parsePackageName } from \"./utils.js\";\n\nconst VERSION_DELIMITER = \"--version-\";\nconst TAG_VERSION_PATTERN = \"[0-9A-Za-z-]+\";\n\nconst encodeVersionForTag = (version: string): string =>\n\tversion\n\t\t.trim()\n\t\t.replace(/[.+]/g, \"-\")\n\t\t.replace(/[^0-9A-Za-z-]/g, \"-\")\n\t\t.replace(/-{2,}/g, \"-\");\n\nexport function parseVersionedTagName(tagName: string): {\n\tbaseName: string;\n\texistingEncodedVersion?: string;\n} {\n\tconst versionMatch = tagName.match(\n\t\tnew RegExp(`${VERSION_DELIMITER}(${TAG_VERSION_PATTERN})$`),\n\t);\n\tif (!versionMatch || versionMatch.index === undefined) {\n\t\treturn { baseName: tagName };\n\t}\n\treturn {\n\t\tbaseName: tagName.slice(0, versionMatch.index),\n\t\texistingEncodedVersion: versionMatch[1],\n\t};\n}\n\n/**\n * Return the full runtime tag for an element package spec.\n *\n * The version suffix acts as an effective namespace in the immutable browser\n * CustomElementRegistry, allowing several package versions to coexist. Existing\n * versioned inputs are normalized on the runtime copy when a host substitutes a\n * different package version. The caller's authored config is not mutated.\n */\nexport function toPackageVersionedTag(\n\ttagName: string,\n\tpackageSpec: string,\n\toptions: { preserveUnversionedTag?: boolean } = {},\n): string {\n\tconst { version } = parsePackageName(packageSpec);\n\n\tif (!version.trim() && options.preserveUnversionedTag) {\n\t\t// aggregateElements historically kept unversioned package specs on their\n\t\t// authored tag. Preserve that caller-specific behavior.\n\t\treturn tagName;\n\t}\n\n\tconst targetEncodedVersion = encodeVersionForTag(version);\n\tconst { baseName, existingEncodedVersion } = parseVersionedTagName(tagName);\n\tif (existingEncodedVersion === targetEncodedVersion) {\n\t\treturn tagName;\n\t}\n\n\t// pie-item contract compatibility: preloaded hosts have historically replaced\n\t// package versions at runtime, which requires updating the cloned runtime tag.\n\treturn `${baseName}${VERSION_DELIMITER}${targetEncodedVersion}`;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-players/pie-players-shared",
3
- "version": "0.3.56",
3
+ "version": "0.3.58",
4
4
  "type": "module",
5
5
  "description": "Shared runtime + UI utilities for PIE players",
6
6
  "license": "MIT",
@@ -56,6 +56,10 @@
56
56
  "./i18n": {
57
57
  "types": "./dist/i18n/index.d.ts",
58
58
  "import": "./dist/i18n/index.js"
59
+ },
60
+ "./nds-icon-button": {
61
+ "types": "./dist/components/vendor/nds/nds-icon-button.d.ts",
62
+ "import": "./dist/components/vendor/nds/nds-icon-button.js"
59
63
  }
60
64
  },
61
65
  "files": [
@@ -67,7 +71,7 @@
67
71
  "semver": "^7.7.4"
68
72
  },
69
73
  "scripts": {
70
- "build": "rm -rf dist tsconfig.tsbuildinfo && tsc -p tsconfig.json",
74
+ "build": "rm -rf dist tsconfig.tsbuildinfo && tsc -p tsconfig.json && mkdir -p dist/components && cp -R src/components/vendor dist/components/vendor",
71
75
  "dev": "tsc -p tsconfig.json --watch",
72
76
  "typecheck": "tsc -p tsconfig.json --noEmit",
73
77
  "lint": "biome check .",