Skip to content

Commit

Permalink
use export names and story ids as references
Browse files Browse the repository at this point in the history
  • Loading branch information
JReinhold committed May 29, 2024
1 parent 5e57010 commit 0a3e376
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 11 deletions.
5 changes: 3 additions & 2 deletions src/compiler/transform/appendix/create-export-order.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { ExportNamedDeclaration } from 'estree';

import { getStoriesNames } from '../../../parser/analyse/Story/attributes/name.js';
import { storyNameToExportName } from '../../../utils/identifiers.js';

const EXPORT_ORDER_VARIABLE = '__namedExportsOrder';

Expand All @@ -10,7 +11,7 @@ interface Params {
}

export function createExportOrderVariable(params: Params): ExportNamedDeclaration {
const { names, filename } = params;
const { names } = params;

return {
type: 'ExportNamedDeclaration',
Expand Down Expand Up @@ -43,7 +44,7 @@ export function createExportOrderVariable(params: Params): ExportNamedDeclaratio
type: 'Literal',
// TODO: There's probably some internal function in the Storybook to handle the story name?
// Reference: https://github.com/storybookjs/addon-svelte-csf/pull/181#discussion_r1617937429
value: name,
value: storyNameToExportName(name),
})),
},
},
Expand Down
6 changes: 3 additions & 3 deletions src/compiler/transform/appendix/create-named-export-story.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { ExportNamedDeclaration, Identifier } from 'estree';
import type { createVariableFromRuntimeStoriesCall } from './create-variable-from-runtime-stories-call';

import { storyNameToExportName } from '../../../utils/identifiers.js';
import { storyNameToExportName, storyNameToId } from '../../../utils/identifiers.js';

interface Params {
name: string;
Expand All @@ -10,7 +10,7 @@ interface Params {
}

export async function createNamedExportStory(params: Params): Promise<ExportNamedDeclaration> {
const { name, node, filename } = params;
const { name, node } = params;

const exported = {
type: 'Identifier',
Expand Down Expand Up @@ -41,7 +41,7 @@ export async function createNamedExportStory(params: Params): Promise<ExportName
type: 'Identifier',
name: getNameFromVariable(node),
},
property: { type: 'Literal', value: name },
property: { type: 'Literal', value: storyNameToId(name) },
},
},
],
Expand Down
1 change: 1 addition & 0 deletions src/compiler/transform/create-appendix.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export async function createAppendix(params: Params) {
metaIdentifier,
filename,
});
// TODO: gracefully handle when story export names collide - eg. because of story names "Hello!" and "Hello".
const storiesExports = await Promise.all(
names.map((name) =>
createNamedExportStory({
Expand Down
9 changes: 4 additions & 5 deletions src/indexer/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
} from '../parser/analyse/meta/properties.js';
import { getNameFromStoryAttribute } from '../parser/analyse/Story/attributes/name.js';
import { getTagsFromStoryAttribute } from '../parser/analyse/Story/attributes/tags.js';
import { storyNameToExportName } from '../utils/identifiers.js';

export const indexer: Indexer = {
test: /\.svelte$/,
Expand Down Expand Up @@ -60,23 +61,21 @@ export const indexer: Indexer = {
: undefined;

return storiesAttributesNodes.map((attributeNode) => {
const exportName = getNameFromStoryAttribute({
const name = getNameFromStoryAttribute({
node: attributeNode.name,
filename,
});

return {
type: 'story',
importPath: filename,
exportName,
// TODO: Ask if this is important to set. If yes, then from what? Story attribute? That's `exportName`.
// name: ...
exportName: storyNameToExportName(name),
name,
title: metaTitle,
tags: combineTags(
...metaTags,
...getTagsFromStoryAttribute({ node: attributeNode.tags, filename })
),
__id: metaId,
} satisfies IndexInput;
});
},
Expand Down
3 changes: 2 additions & 1 deletion src/runtime/create-runtime-stories.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { mount, unmount, type ComponentType } from 'svelte';
import StoriesExtractor from './StoriesExtractor.svelte';
import StoryRenderer from './StoryRenderer.svelte';
import type { StoriesRepository } from './contexts/extractor.svelte.js';
import { storyNameToId } from '../utils/identifiers.js';

const createFragment = document.createDocumentFragment
? () => document.createDocumentFragment()
Expand Down Expand Up @@ -107,7 +108,7 @@ export const createRuntimeStories = <TMeta extends Meta>(Stories: ComponentType,
};
}

stories[name] = storyObj;
stories[storyNameToId(name)] = storyObj;
}

return stories;
Expand Down

0 comments on commit 0a3e376

Please sign in to comment.