frontend-hamroun 1.1.85 → 1.1.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -121
- package/bin/cli.js +287 -3
- package/package.json +1 -1
- package/templates/basic-app/docs/rapport_pfe.aux +27 -0
- package/templates/basic-app/docs/rapport_pfe.log +399 -0
- package/templates/basic-app/docs/rapport_pfe.out +10 -0
- package/templates/basic-app/docs/rapport_pfe.pdf +0 -0
- package/templates/basic-app/docs/rapport_pfe.tex +68 -0
- package/templates/basic-app/docs/rapport_pfe.toc +14 -0
package/README.md
CHANGED
@@ -1,11 +1,16 @@
|
|
1
|
-
#
|
1
|
+
# Frontend Hamroun
|
2
2
|
|
3
|
-
A lightweight Virtual DOM and hooks implementation
|
3
|
+
A lightweight JavaScript framework with Virtual DOM and hooks implementation inspired by modern frameworks.
|
4
|
+
|
5
|
+

|
6
|
+

|
7
|
+

|
8
|
+

|
4
9
|
|
5
10
|
## Installation
|
6
11
|
|
7
12
|
```bash
|
8
|
-
npm install
|
13
|
+
npm install frontend-hamroun
|
9
14
|
```
|
10
15
|
|
11
16
|
## Quick Start
|
@@ -28,7 +33,7 @@ npm run dev
|
|
28
33
|
## Usage
|
29
34
|
|
30
35
|
```jsx
|
31
|
-
import { render, useState } from '
|
36
|
+
import { render, useState } from 'frontend-hamroun';
|
32
37
|
|
33
38
|
function App() {
|
34
39
|
const [count, setCount] = useState(0);
|
@@ -45,11 +50,15 @@ render(<App />, document.getElementById('root'));
|
|
45
50
|
|
46
51
|
## Features
|
47
52
|
|
48
|
-
-
|
49
|
-
-
|
53
|
+
- Lightweight (<5KB gzipped)
|
54
|
+
- Virtual DOM with efficient diffing algorithm
|
55
|
+
- Hooks API (useState, useEffect, useMemo, useRef)
|
50
56
|
- Context API
|
51
|
-
-
|
52
|
-
-
|
57
|
+
- Server-Side Rendering
|
58
|
+
- Error Boundaries
|
59
|
+
- JSX support
|
60
|
+
- TypeScript support
|
61
|
+
- Built-in CLI for project scaffolding
|
53
62
|
|
54
63
|
## Hooks
|
55
64
|
|
@@ -57,7 +66,9 @@ render(<App />, document.getElementById('root'));
|
|
57
66
|
Manages component state.
|
58
67
|
|
59
68
|
```tsx
|
60
|
-
const [
|
69
|
+
const [count, setCount] = useState(0);
|
70
|
+
setCount(count + 1); // Direct value
|
71
|
+
setCount(prev => prev + 1); // Using callback
|
61
72
|
```
|
62
73
|
|
63
74
|
### useEffect
|
@@ -65,25 +76,31 @@ Handles side effects in components.
|
|
65
76
|
|
66
77
|
```tsx
|
67
78
|
useEffect(() => {
|
68
|
-
|
79
|
+
document.title = `Count: ${count}`;
|
80
|
+
|
69
81
|
return () => {
|
70
|
-
// Cleanup code
|
82
|
+
// Cleanup code runs before next effect or unmount
|
83
|
+
console.log('Cleanup effect');
|
71
84
|
};
|
72
|
-
}, [
|
85
|
+
}, [count]); // Only re-run when count changes
|
73
86
|
```
|
74
87
|
|
75
88
|
### useMemo
|
76
89
|
Memoizes expensive computations.
|
77
90
|
|
78
91
|
```tsx
|
79
|
-
const
|
92
|
+
const doubled = useMemo(() => {
|
93
|
+
console.log('Computing doubled value');
|
94
|
+
return count * 2;
|
95
|
+
}, [count]);
|
80
96
|
```
|
81
97
|
|
82
98
|
### useRef
|
83
|
-
Creates a mutable reference.
|
99
|
+
Creates a mutable reference that persists across renders.
|
84
100
|
|
85
101
|
```tsx
|
86
|
-
const
|
102
|
+
const renderCount = useRef(0);
|
103
|
+
renderCount.current += 1; // Update without triggering re-render
|
87
104
|
```
|
88
105
|
|
89
106
|
### useErrorBoundary
|
@@ -91,150 +108,104 @@ Handles component errors.
|
|
91
108
|
|
92
109
|
```tsx
|
93
110
|
const [error, resetError] = useErrorBoundary();
|
111
|
+
|
112
|
+
if (error) {
|
113
|
+
return (
|
114
|
+
<div>
|
115
|
+
<h1>Something went wrong!</h1>
|
116
|
+
<button onClick={resetError}>Try again</button>
|
117
|
+
</div>
|
118
|
+
);
|
119
|
+
}
|
94
120
|
```
|
95
121
|
|
96
122
|
## Context API
|
97
123
|
|
98
|
-
|
124
|
+
Share state across components without prop drilling.
|
99
125
|
|
100
126
|
```tsx
|
127
|
+
// Create context
|
101
128
|
const ThemeContext = createContext('light');
|
102
129
|
|
130
|
+
// Provider component
|
103
131
|
function App() {
|
132
|
+
const [theme, setTheme] = useState('light');
|
133
|
+
|
104
134
|
return (
|
105
|
-
<ThemeContext.Provider value=
|
106
|
-
<
|
135
|
+
<ThemeContext.Provider value={theme}>
|
136
|
+
<Button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>
|
137
|
+
Toggle Theme
|
138
|
+
</Button>
|
139
|
+
<ThemedComponent />
|
107
140
|
</ThemeContext.Provider>
|
108
141
|
);
|
109
142
|
}
|
110
143
|
|
111
|
-
|
144
|
+
// Consumer component
|
145
|
+
function ThemedComponent() {
|
112
146
|
const theme = useContext(ThemeContext);
|
113
|
-
|
114
|
-
|
147
|
+
return <div style={{ background: theme === 'dark' ? '#333' : '#fff' }}>
|
148
|
+
Current theme: {theme}
|
149
|
+
</div>;
|
115
150
|
}
|
116
151
|
```
|
117
152
|
|
118
|
-
## Performance Optimization
|
119
|
-
|
120
|
-
### Batch Updates
|
121
|
-
Group multiple state updates together.
|
122
|
-
|
123
|
-
```tsx
|
124
|
-
import { batchUpdates } from 'your-package-name';
|
125
|
-
|
126
|
-
batchUpdates(() => {
|
127
|
-
setValue1(newValue1);
|
128
|
-
setValue2(newValue2);
|
129
|
-
});
|
130
|
-
```
|
131
|
-
|
132
|
-
### Component Memoization
|
133
|
-
Prevent unnecessary re-renders.
|
134
|
-
|
135
|
-
```tsx
|
136
|
-
const MemoizedComponent = useMemo(() => (
|
137
|
-
<ExpensiveComponent prop={value} />
|
138
|
-
), [value]);
|
139
|
-
```
|
140
|
-
|
141
153
|
## Server-Side Rendering
|
142
154
|
|
155
|
+
Frontend Hamroun supports server-side rendering with hydration:
|
156
|
+
|
143
157
|
```tsx
|
144
|
-
|
158
|
+
// Server-side
|
159
|
+
import { renderToString } from 'frontend-hamroun';
|
160
|
+
|
161
|
+
const html = await renderToString(<App />);
|
162
|
+
res.send(`
|
163
|
+
<!DOCTYPE html>
|
164
|
+
<html>
|
165
|
+
<head><title>My App</title></head>
|
166
|
+
<body>
|
167
|
+
<div id="root">${html}</div>
|
168
|
+
<script src="/client.js"></script>
|
169
|
+
</body>
|
170
|
+
</html>
|
171
|
+
`);
|
172
|
+
|
173
|
+
// Client-side
|
174
|
+
import { hydrate } from 'frontend-hamroun';
|
145
175
|
|
146
|
-
// On the client
|
147
176
|
hydrate(<App />, document.getElementById('root'));
|
148
177
|
```
|
149
178
|
|
150
|
-
##
|
151
|
-
|
152
|
-
```tsx
|
153
|
-
function Button() {
|
154
|
-
return (
|
155
|
-
<button
|
156
|
-
onClick={(e) => handleClick(e)}
|
157
|
-
onMouseOver={(e) => handleHover(e)}
|
158
|
-
>
|
159
|
-
Click me
|
160
|
-
</button>
|
161
|
-
);
|
162
|
-
}
|
163
|
-
```
|
179
|
+
## Performance Optimization
|
164
180
|
|
165
|
-
|
181
|
+
### Batch Updates
|
182
|
+
Group multiple state updates together to prevent unnecessary re-renders.
|
166
183
|
|
167
184
|
```tsx
|
168
|
-
|
169
|
-
return (
|
170
|
-
<div style={{
|
171
|
-
color: 'blue',
|
172
|
-
padding: '20px'
|
173
|
-
}}>
|
174
|
-
Styled content
|
175
|
-
</div>
|
176
|
-
);
|
177
|
-
}
|
178
|
-
```
|
185
|
+
import { batchUpdates } from 'frontend-hamroun';
|
179
186
|
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
if (error) {
|
187
|
-
return (
|
188
|
-
<div>
|
189
|
-
<h1>Something went wrong!</h1>
|
190
|
-
<button onClick={resetError}>Try again</button>
|
191
|
-
</div>
|
192
|
-
);
|
193
|
-
}
|
194
|
-
|
195
|
-
return <ComponentThatMightError />;
|
196
|
-
}
|
187
|
+
batchUpdates(() => {
|
188
|
+
setCount(count + 1);
|
189
|
+
setName('John');
|
190
|
+
setActive(true);
|
191
|
+
});
|
197
192
|
```
|
198
193
|
|
199
|
-
##
|
200
|
-
|
201
|
-
1. Use batch updates for multiple state changes
|
202
|
-
2. Implement error boundaries for error handling
|
203
|
-
3. Use context selectors for better performance
|
204
|
-
4. Memoize expensive computations
|
205
|
-
5. Clean up effects when components unmount
|
206
|
-
6. Keep components small and focused
|
207
|
-
7. Use proper TypeScript types for better development experience
|
208
|
-
|
209
|
-
## API Reference
|
194
|
+
## Project Templates
|
210
195
|
|
211
|
-
|
212
|
-
- `render(element, container)`
|
213
|
-
- `hydrate(element, container)`
|
214
|
-
- `createElement(vnode)`
|
196
|
+
The framework comes with two project templates:
|
215
197
|
|
216
|
-
|
217
|
-
-
|
218
|
-
- `useEffect(callback, deps?)`
|
219
|
-
- `useMemo(factory, deps)`
|
220
|
-
- `useRef(initial)`
|
221
|
-
- `useErrorBoundary()`
|
198
|
+
1. **Basic App**: Client-side rendered application with TailwindCSS
|
199
|
+
2. **SSR Template**: Server-side rendered application with Express
|
222
200
|
|
223
|
-
|
224
|
-
- `createContext(defaultValue)`
|
225
|
-
- `useContext(Context)`
|
226
|
-
- `Context.Provider`
|
227
|
-
- `Context.Consumer`
|
228
|
-
- `Context.useSelector`
|
201
|
+
## Browser Compatibility
|
229
202
|
|
230
|
-
|
231
|
-
- `batchUpdates(callback)`
|
203
|
+
Frontend Hamroun works in all modern browsers (Chrome, Firefox, Safari, Edge).
|
232
204
|
|
233
205
|
## License
|
234
206
|
|
235
|
-
MIT
|
207
|
+
MIT © Hamroun
|
236
208
|
|
237
209
|
## Contributing
|
238
210
|
|
239
|
-
Contributions are welcome! Please
|
240
|
-
`````
|
211
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
package/bin/cli.js
CHANGED
@@ -11,11 +11,133 @@ import { createSpinner } from 'nanospinner';
|
|
11
11
|
const __filename = fileURLToPath(import.meta.url);
|
12
12
|
const __dirname = path.dirname(__filename);
|
13
13
|
|
14
|
+
// Component templates
|
15
|
+
const FUNCTION_COMPONENT_TEMPLATE = (name) => `import { useState, useEffect } from 'frontend-hamroun';
|
16
|
+
|
17
|
+
export function ${name}(props) {
|
18
|
+
// State hooks
|
19
|
+
const [state, setState] = useState(null);
|
20
|
+
|
21
|
+
// Effect hooks
|
22
|
+
useEffect(() => {
|
23
|
+
// Component mounted
|
24
|
+
return () => {
|
25
|
+
// Component will unmount
|
26
|
+
};
|
27
|
+
}, []);
|
28
|
+
|
29
|
+
return (
|
30
|
+
<div className="${name.toLowerCase()}">
|
31
|
+
<h2>${name} Component</h2>
|
32
|
+
{/* Your JSX here */}
|
33
|
+
</div>
|
34
|
+
);
|
35
|
+
}
|
36
|
+
`;
|
37
|
+
|
38
|
+
const CSS_TEMPLATE = (name) => `.${name.toLowerCase()} {
|
39
|
+
display: flex;
|
40
|
+
flex-direction: column;
|
41
|
+
padding: 1rem;
|
42
|
+
margin: 0.5rem;
|
43
|
+
border-radius: 4px;
|
44
|
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
45
|
+
}
|
46
|
+
`;
|
47
|
+
|
48
|
+
const TEST_TEMPLATE = (name) => `import { render, screen } from '@testing-library/frontend-hamroun';
|
49
|
+
import { ${name} } from './${name}';
|
50
|
+
|
51
|
+
describe('${name} Component', () => {
|
52
|
+
test('renders correctly', () => {
|
53
|
+
render(<${name} />);
|
54
|
+
const element = screen.getByText('${name} Component');
|
55
|
+
expect(element).toBeInTheDocument();
|
56
|
+
});
|
57
|
+
});
|
58
|
+
`;
|
59
|
+
|
60
|
+
// Dockerfile templates
|
61
|
+
const DOCKERFILE_TEMPLATE = `# Stage 1: Build the application
|
62
|
+
FROM node:18-alpine as build
|
63
|
+
|
64
|
+
# Set working directory
|
65
|
+
WORKDIR /app
|
66
|
+
|
67
|
+
# Copy package files
|
68
|
+
COPY package.json package-lock.json ./
|
69
|
+
|
70
|
+
# Install dependencies
|
71
|
+
RUN npm ci
|
72
|
+
|
73
|
+
# Copy source files
|
74
|
+
COPY . .
|
75
|
+
|
76
|
+
# Build the application
|
77
|
+
RUN npm run build
|
78
|
+
|
79
|
+
# Stage 2: Serve the application
|
80
|
+
FROM nginx:alpine
|
81
|
+
|
82
|
+
# Copy the build output from the previous stage
|
83
|
+
COPY --from=build /app/dist /usr/share/nginx/html
|
84
|
+
|
85
|
+
# Expose port 80
|
86
|
+
EXPOSE 80
|
87
|
+
|
88
|
+
# Start nginx
|
89
|
+
CMD ["nginx", "-g", "daemon off;"]
|
90
|
+
`;
|
91
|
+
|
92
|
+
const SSR_DOCKERFILE_TEMPLATE = `# Stage 1: Build the application
|
93
|
+
FROM node:18-alpine as build
|
94
|
+
|
95
|
+
# Set working directory
|
96
|
+
WORKDIR /app
|
97
|
+
|
98
|
+
# Copy package files
|
99
|
+
COPY package.json package-lock.json ./
|
100
|
+
|
101
|
+
# Install dependencies
|
102
|
+
RUN npm ci
|
103
|
+
|
104
|
+
# Copy source files
|
105
|
+
COPY . .
|
106
|
+
|
107
|
+
# Build the application
|
108
|
+
RUN npm run build
|
109
|
+
|
110
|
+
# Stage 2: Run the server
|
111
|
+
FROM node:18-alpine
|
112
|
+
|
113
|
+
WORKDIR /app
|
114
|
+
|
115
|
+
# Copy package files and install production dependencies only
|
116
|
+
COPY package.json package-lock.json ./
|
117
|
+
RUN npm ci --production
|
118
|
+
|
119
|
+
# Copy build artifacts
|
120
|
+
COPY --from=build /app/dist ./dist
|
121
|
+
COPY --from=build /app/server ./server
|
122
|
+
|
123
|
+
# Expose port 3000
|
124
|
+
EXPOSE 3000
|
125
|
+
|
126
|
+
# Start the server
|
127
|
+
CMD ["node", "server/index.js"]
|
128
|
+
`;
|
129
|
+
|
14
130
|
async function init() {
|
15
131
|
const program = new Command();
|
16
132
|
|
17
133
|
program
|
18
|
-
.name('
|
134
|
+
.name('frontend-hamroun')
|
135
|
+
.description('CLI for Frontend Hamroun framework')
|
136
|
+
.version('1.0.0');
|
137
|
+
|
138
|
+
// Create new project
|
139
|
+
program
|
140
|
+
.command('create')
|
19
141
|
.description('Create a new Frontend Hamroun application')
|
20
142
|
.argument('[name]', 'Project name')
|
21
143
|
.action(async (name) => {
|
@@ -23,7 +145,75 @@ async function init() {
|
|
23
145
|
await createProject(projectName);
|
24
146
|
});
|
25
147
|
|
26
|
-
|
148
|
+
// Generate component
|
149
|
+
program
|
150
|
+
.command('generate')
|
151
|
+
.alias('g')
|
152
|
+
.description('Generate a new component')
|
153
|
+
.argument('<name>', 'Component name')
|
154
|
+
.option('-d, --directory <directory>', 'Target directory', './src/components')
|
155
|
+
.action(async (name, options) => {
|
156
|
+
await generateComponent(name, options.directory);
|
157
|
+
});
|
158
|
+
|
159
|
+
// Add Dockerfile
|
160
|
+
program
|
161
|
+
.command('docker')
|
162
|
+
.description('Add Dockerfile to project')
|
163
|
+
.option('-s, --ssr', 'Use SSR-compatible Dockerfile')
|
164
|
+
.action(async (options) => {
|
165
|
+
await addDockerfile(options.ssr);
|
166
|
+
});
|
167
|
+
|
168
|
+
// Interactive mode if no command provided
|
169
|
+
if (process.argv.length <= 2) {
|
170
|
+
await interactiveMode();
|
171
|
+
} else {
|
172
|
+
program.parse();
|
173
|
+
}
|
174
|
+
}
|
175
|
+
|
176
|
+
async function interactiveMode() {
|
177
|
+
const { action } = await inquirer.prompt([{
|
178
|
+
type: 'list',
|
179
|
+
name: 'action',
|
180
|
+
message: 'What would you like to do?',
|
181
|
+
choices: [
|
182
|
+
{ name: 'Create a new project', value: 'create' },
|
183
|
+
{ name: 'Generate a component', value: 'generate' },
|
184
|
+
{ name: 'Add Dockerfile to project', value: 'docker' }
|
185
|
+
]
|
186
|
+
}]);
|
187
|
+
|
188
|
+
if (action === 'create') {
|
189
|
+
const projectName = await askProjectName();
|
190
|
+
await createProject(projectName);
|
191
|
+
} else if (action === 'generate') {
|
192
|
+
const { name } = await inquirer.prompt([{
|
193
|
+
type: 'input',
|
194
|
+
name: 'name',
|
195
|
+
message: 'Component name:',
|
196
|
+
validate: (input) => input ? true : 'Component name is required'
|
197
|
+
}]);
|
198
|
+
|
199
|
+
const { directory } = await inquirer.prompt([{
|
200
|
+
type: 'input',
|
201
|
+
name: 'directory',
|
202
|
+
message: 'Target directory:',
|
203
|
+
default: './src/components'
|
204
|
+
}]);
|
205
|
+
|
206
|
+
await generateComponent(name, directory);
|
207
|
+
} else if (action === 'docker') {
|
208
|
+
const { isSSR } = await inquirer.prompt([{
|
209
|
+
type: 'confirm',
|
210
|
+
name: 'isSSR',
|
211
|
+
message: 'Is this a server-side rendered app?',
|
212
|
+
default: false
|
213
|
+
}]);
|
214
|
+
|
215
|
+
await addDockerfile(isSSR);
|
216
|
+
}
|
27
217
|
}
|
28
218
|
|
29
219
|
async function askProjectName() {
|
@@ -69,13 +259,21 @@ async function createProject(projectName) {
|
|
69
259
|
pkg.name = projectName;
|
70
260
|
await fs.writeJson(pkgPath, pkg, { spaces: 2 });
|
71
261
|
|
72
|
-
|
262
|
+
// Automatically add Dockerfile
|
263
|
+
const isSSR = template === 'ssr-template';
|
264
|
+
const dockerContent = isSSR ? SSR_DOCKERFILE_TEMPLATE : DOCKERFILE_TEMPLATE;
|
265
|
+
await fs.writeFile(path.join(targetDir, 'Dockerfile'), dockerContent);
|
266
|
+
|
267
|
+
spinner.success({ text: `Project ${chalk.green(projectName)} created successfully with Dockerfile!` });
|
73
268
|
|
74
269
|
// Show next steps
|
75
270
|
console.log('\nNext steps:');
|
76
271
|
console.log(chalk.cyan(` cd ${projectName}`));
|
77
272
|
console.log(chalk.cyan(' npm install'));
|
78
273
|
console.log(chalk.cyan(' npm run dev'));
|
274
|
+
console.log(chalk.yellow('\nTo build Docker image:'));
|
275
|
+
console.log(chalk.cyan(' docker build -t my-app .'));
|
276
|
+
console.log(chalk.cyan(' docker run -p 3000:' + (isSSR ? '3000' : '80') + ' my-app'));
|
79
277
|
|
80
278
|
} catch (error) {
|
81
279
|
spinner.error({ text: 'Failed to create project' });
|
@@ -84,4 +282,90 @@ async function createProject(projectName) {
|
|
84
282
|
}
|
85
283
|
}
|
86
284
|
|
285
|
+
async function generateComponent(name, directory) {
|
286
|
+
const spinner = createSpinner(`Generating ${name} component...`).start();
|
287
|
+
|
288
|
+
try {
|
289
|
+
const targetDir = path.join(process.cwd(), directory, name);
|
290
|
+
|
291
|
+
// Create component directory
|
292
|
+
await fs.ensureDir(targetDir);
|
293
|
+
|
294
|
+
// Create component files
|
295
|
+
await fs.writeFile(
|
296
|
+
path.join(targetDir, `${name}.jsx`),
|
297
|
+
FUNCTION_COMPONENT_TEMPLATE(name)
|
298
|
+
);
|
299
|
+
|
300
|
+
await fs.writeFile(
|
301
|
+
path.join(targetDir, `${name}.css`),
|
302
|
+
CSS_TEMPLATE(name)
|
303
|
+
);
|
304
|
+
|
305
|
+
await fs.writeFile(
|
306
|
+
path.join(targetDir, `${name}.test.jsx`),
|
307
|
+
TEST_TEMPLATE(name)
|
308
|
+
);
|
309
|
+
|
310
|
+
await fs.writeFile(
|
311
|
+
path.join(targetDir, 'index.js'),
|
312
|
+
`export { ${name} } from './${name}';\n`
|
313
|
+
);
|
314
|
+
|
315
|
+
spinner.success({ text: `Component ${chalk.green(name)} generated successfully!` });
|
316
|
+
|
317
|
+
console.log('\nFiles created:');
|
318
|
+
console.log(chalk.cyan(` ${path.join(directory, name, `${name}.jsx`)}`));
|
319
|
+
console.log(chalk.cyan(` ${path.join(directory, name, `${name}.css`)}`));
|
320
|
+
console.log(chalk.cyan(` ${path.join(directory, name, `${name}.test.jsx`)}`));
|
321
|
+
console.log(chalk.cyan(` ${path.join(directory, name, 'index.js')}`));
|
322
|
+
|
323
|
+
} catch (error) {
|
324
|
+
spinner.error({ text: 'Failed to generate component' });
|
325
|
+
console.error(chalk.red(error));
|
326
|
+
process.exit(1);
|
327
|
+
}
|
328
|
+
}
|
329
|
+
|
330
|
+
async function addDockerfile(isSSR) {
|
331
|
+
const spinner = createSpinner('Adding Dockerfile...').start();
|
332
|
+
|
333
|
+
try {
|
334
|
+
const dockerContent = isSSR ? SSR_DOCKERFILE_TEMPLATE : DOCKERFILE_TEMPLATE;
|
335
|
+
const targetPath = path.join(process.cwd(), 'Dockerfile');
|
336
|
+
|
337
|
+
// Check if Dockerfile already exists
|
338
|
+
if (await fs.pathExists(targetPath)) {
|
339
|
+
spinner.stop();
|
340
|
+
const { overwrite } = await inquirer.prompt([{
|
341
|
+
type: 'confirm',
|
342
|
+
name: 'overwrite',
|
343
|
+
message: 'Dockerfile already exists. Overwrite?',
|
344
|
+
default: false
|
345
|
+
}]);
|
346
|
+
|
347
|
+
if (!overwrite) {
|
348
|
+
console.log(chalk.yellow('Operation cancelled.'));
|
349
|
+
return;
|
350
|
+
}
|
351
|
+
|
352
|
+
spinner.start();
|
353
|
+
}
|
354
|
+
|
355
|
+
// Write Dockerfile
|
356
|
+
await fs.writeFile(targetPath, dockerContent);
|
357
|
+
|
358
|
+
spinner.success({ text: 'Dockerfile added successfully!' });
|
359
|
+
|
360
|
+
console.log('\nTo build and run Docker image:');
|
361
|
+
console.log(chalk.cyan(' docker build -t my-app .'));
|
362
|
+
console.log(chalk.cyan(' docker run -p 3000:' + (isSSR ? '3000' : '80') + ' my-app'));
|
363
|
+
|
364
|
+
} catch (error) {
|
365
|
+
spinner.error({ text: 'Failed to add Dockerfile' });
|
366
|
+
console.error(chalk.red(error));
|
367
|
+
process.exit(1);
|
368
|
+
}
|
369
|
+
}
|
370
|
+
|
87
371
|
init().catch(console.error);
|
package/package.json
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
\relax
|
2
|
+
\providecommand\babel@aux[2]{}
|
3
|
+
\@nameuse{bbl@beforestart}
|
4
|
+
\catcode `:\active
|
5
|
+
\catcode `;\active
|
6
|
+
\catcode `!\active
|
7
|
+
\catcode `?\active
|
8
|
+
\providecommand\hyper@newdestlabel[2]{}
|
9
|
+
\providecommand\HyField@AuxAddToFields[1]{}
|
10
|
+
\providecommand\HyField@AuxAddToCoFields[2]{}
|
11
|
+
\babel@aux{french}{}
|
12
|
+
\@writefile{toc}{\contentsline {chapter}{\numberline {1}ÉTUDE PREALABLE}{2}{chapter.1}\protected@file@percent }
|
13
|
+
\@writefile{lof}{\addvspace {10\p@ }}
|
14
|
+
\@writefile{lot}{\addvspace {10\p@ }}
|
15
|
+
\@writefile{toc}{\contentsline {section}{\numberline {1.1}Introduction}{2}{section.1.1}\protected@file@percent }
|
16
|
+
\@writefile{toc}{\contentsline {section}{\numberline {1.2}Organisme d'accueil}{2}{section.1.2}\protected@file@percent }
|
17
|
+
\@writefile{toc}{\contentsline {section}{\numberline {1.3}Étude et critique de l'existant}{2}{section.1.3}\protected@file@percent }
|
18
|
+
\@writefile{toc}{\contentsline {subsection}{\numberline {1.3.1}Critique de l'existant}{2}{subsection.1.3.1}\protected@file@percent }
|
19
|
+
\@writefile{toc}{\contentsline {subsection}{\numberline {1.3.2}Solution proposée}{2}{subsection.1.3.2}\protected@file@percent }
|
20
|
+
\@writefile{toc}{\contentsline {section}{\numberline {1.4}Choix méthodologique}{3}{section.1.4}\protected@file@percent }
|
21
|
+
\@writefile{toc}{\contentsline {subsection}{\numberline {1.4.1}Formalisme de modélisation}{3}{subsection.1.4.1}\protected@file@percent }
|
22
|
+
\@writefile{toc}{\contentsline {subsection}{\numberline {1.4.2}Méthodologie}{3}{subsection.1.4.2}\protected@file@percent }
|
23
|
+
\@writefile{toc}{\contentsline {subsubsection}{Présentation de la méthode SCRUM}{3}{section*.2}\protected@file@percent }
|
24
|
+
\@writefile{toc}{\contentsline {subsubsection}{La répartition des rôles dans la méthode SCRUM}{3}{section*.3}\protected@file@percent }
|
25
|
+
\@writefile{toc}{\contentsline {subsubsection}{Le processus de SCRUM}{3}{section*.4}\protected@file@percent }
|
26
|
+
\@writefile{toc}{\contentsline {section}{\numberline {1.5}Conclusion}{3}{section.1.5}\protected@file@percent }
|
27
|
+
\gdef \@abspage@last{4}
|
@@ -0,0 +1,399 @@
|
|
1
|
+
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (MiKTeX 24.1) (preloaded format=pdflatex 2025.4.3) 11 APR 2025 21:21
|
2
|
+
entering extended mode
|
3
|
+
restricted \write18 enabled.
|
4
|
+
%&-line parsing enabled.
|
5
|
+
**./rapport_pfe.tex
|
6
|
+
(rapport_pfe.tex
|
7
|
+
LaTeX2e <2023-11-01> patch level 1
|
8
|
+
L3 programming layer <2024-01-04>
|
9
|
+
(C:\Program Files\MiKTeX\tex/latex/base\report.cls
|
10
|
+
Document Class: report 2023/05/17 v1.4n Standard LaTeX document class
|
11
|
+
(C:\Program Files\MiKTeX\tex/latex/base\size12.clo
|
12
|
+
File: size12.clo 2023/05/17 v1.4n Standard LaTeX file (size option)
|
13
|
+
)
|
14
|
+
\c@part=\count187
|
15
|
+
\c@chapter=\count188
|
16
|
+
\c@section=\count189
|
17
|
+
\c@subsection=\count190
|
18
|
+
\c@subsubsection=\count191
|
19
|
+
\c@paragraph=\count192
|
20
|
+
\c@subparagraph=\count193
|
21
|
+
\c@figure=\count194
|
22
|
+
\c@table=\count195
|
23
|
+
\abovecaptionskip=\skip48
|
24
|
+
\belowcaptionskip=\skip49
|
25
|
+
\bibindent=\dimen140
|
26
|
+
)
|
27
|
+
(C:\Program Files\MiKTeX\tex/latex/base\inputenc.sty
|
28
|
+
Package: inputenc 2021/02/14 v1.3d Input encoding file
|
29
|
+
\inpenc@prehook=\toks17
|
30
|
+
\inpenc@posthook=\toks18
|
31
|
+
)
|
32
|
+
(C:\Program Files\MiKTeX\tex/generic/babel\babel.sty
|
33
|
+
Package: babel 2024/01/07 v24.1 The Babel package
|
34
|
+
\babel@savecnt=\count196
|
35
|
+
\U@D=\dimen141
|
36
|
+
\l@unhyphenated=\language79
|
37
|
+
|
38
|
+
(C:\Program Files\MiKTeX\tex/generic/babel\txtbabel.def)
|
39
|
+
\bbl@readstream=\read2
|
40
|
+
\bbl@dirlevel=\count197
|
41
|
+
|
42
|
+
*************************************
|
43
|
+
* Local config file bblopts.cfg used
|
44
|
+
*
|
45
|
+
(C:\Program Files\MiKTeX\tex/latex/arabi\bblopts.cfg
|
46
|
+
File: bblopts.cfg 2005/09/08 v0.1 add Arabic and Farsi to "declared" options of
|
47
|
+
babel
|
48
|
+
)
|
49
|
+
(C:\Program Files\MiKTeX\tex/generic/babel-french\french.ldf
|
50
|
+
Language: french 2024-07-25 v3.6c French support from the babel system
|
51
|
+
Package babel Info: Hyphen rules for 'acadian' set to \l@french
|
52
|
+
(babel) (\language22). Reported on input line 91.
|
53
|
+
Package babel Info: Hyphen rules for 'canadien' set to \l@french
|
54
|
+
(babel) (\language22). Reported on input line 92.
|
55
|
+
\FB@stdchar=\count198
|
56
|
+
Package babel Info: Making : an active character on input line 421.
|
57
|
+
Package babel Info: Making ; an active character on input line 422.
|
58
|
+
Package babel Info: Making ! an active character on input line 423.
|
59
|
+
Package babel Info: Making ? an active character on input line 424.
|
60
|
+
\FBguill@level=\count199
|
61
|
+
\FBold@everypar=\toks19
|
62
|
+
\FB@Mht=\dimen142
|
63
|
+
\mc@charclass=\count266
|
64
|
+
\mc@charfam=\count267
|
65
|
+
\mc@charslot=\count268
|
66
|
+
\std@mcc=\count269
|
67
|
+
\dec@mcc=\count270
|
68
|
+
\FB@parskip=\dimen143
|
69
|
+
\listindentFB=\dimen144
|
70
|
+
\descindentFB=\dimen145
|
71
|
+
\labelindentFB=\dimen146
|
72
|
+
\labelwidthFB=\dimen147
|
73
|
+
\leftmarginFB=\dimen148
|
74
|
+
\parindentFFN=\dimen149
|
75
|
+
\FBfnindent=\dimen150
|
76
|
+
))
|
77
|
+
(C:\Program Files\MiKTeX\tex/generic/babel/locale/fr\babel-french.tex
|
78
|
+
Package babel Info: Importing font and identification data for french
|
79
|
+
(babel) from babel-fr.ini. Reported on input line 11.
|
80
|
+
)
|
81
|
+
(C:\Program Files\MiKTeX\tex/latex/carlisle\scalefnt.sty)
|
82
|
+
(C:\Program Files\MiKTeX\tex/latex/graphics\graphicx.sty
|
83
|
+
Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR)
|
84
|
+
|
85
|
+
(C:\Program Files\MiKTeX\tex/latex/graphics\keyval.sty
|
86
|
+
Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
|
87
|
+
\KV@toks@=\toks20
|
88
|
+
)
|
89
|
+
(C:\Program Files\MiKTeX\tex/latex/graphics\graphics.sty
|
90
|
+
Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR)
|
91
|
+
|
92
|
+
(C:\Program Files\MiKTeX\tex/latex/graphics\trig.sty
|
93
|
+
Package: trig 2021/08/11 v1.11 sin cos tan (DPC)
|
94
|
+
)
|
95
|
+
(C:\Program Files\MiKTeX\tex/latex/graphics-cfg\graphics.cfg
|
96
|
+
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
|
97
|
+
)
|
98
|
+
Package graphics Info: Driver file: pdftex.def on input line 107.
|
99
|
+
|
100
|
+
(C:\Program Files\MiKTeX\tex/latex/graphics-def\pdftex.def
|
101
|
+
File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex
|
102
|
+
))
|
103
|
+
\Gin@req@height=\dimen151
|
104
|
+
\Gin@req@width=\dimen152
|
105
|
+
)
|
106
|
+
(C:\Program Files\MiKTeX\tex/latex/fancyhdr\fancyhdr.sty
|
107
|
+
Package: fancyhdr 2025/02/07 v5.2 Extensive control of page headers and footers
|
108
|
+
|
109
|
+
\f@nch@headwidth=\skip50
|
110
|
+
\f@nch@offset@elh=\skip51
|
111
|
+
\f@nch@offset@erh=\skip52
|
112
|
+
\f@nch@offset@olh=\skip53
|
113
|
+
\f@nch@offset@orh=\skip54
|
114
|
+
\f@nch@offset@elf=\skip55
|
115
|
+
\f@nch@offset@erf=\skip56
|
116
|
+
\f@nch@offset@olf=\skip57
|
117
|
+
\f@nch@offset@orf=\skip58
|
118
|
+
\f@nch@height=\skip59
|
119
|
+
\f@nch@footalignment=\skip60
|
120
|
+
\f@nch@widthL=\skip61
|
121
|
+
\f@nch@widthC=\skip62
|
122
|
+
\f@nch@widthR=\skip63
|
123
|
+
\@temptokenb=\toks21
|
124
|
+
)
|
125
|
+
(C:\Program Files\MiKTeX\tex/latex/hyperref\hyperref.sty
|
126
|
+
Package: hyperref 2023-11-26 v7.01g Hypertext links for LaTeX
|
127
|
+
|
128
|
+
(C:\Program Files\MiKTeX\tex/generic/iftex\iftex.sty
|
129
|
+
Package: iftex 2022/02/03 v1.0f TeX engine tests
|
130
|
+
)
|
131
|
+
(C:\Program Files\MiKTeX\tex/generic/infwarerr\infwarerr.sty
|
132
|
+
Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO)
|
133
|
+
)
|
134
|
+
(C:\Program Files\MiKTeX\tex/latex/kvsetkeys\kvsetkeys.sty
|
135
|
+
Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO)
|
136
|
+
)
|
137
|
+
(C:\Program Files\MiKTeX\tex/generic/kvdefinekeys\kvdefinekeys.sty
|
138
|
+
Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO)
|
139
|
+
)
|
140
|
+
(C:\Program Files\MiKTeX\tex/generic/pdfescape\pdfescape.sty
|
141
|
+
Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO)
|
142
|
+
|
143
|
+
(C:\Program Files\MiKTeX\tex/generic/ltxcmds\ltxcmds.sty
|
144
|
+
Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO)
|
145
|
+
)
|
146
|
+
(C:\Program Files\MiKTeX\tex/generic/pdftexcmds\pdftexcmds.sty
|
147
|
+
Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO
|
148
|
+
)
|
149
|
+
Package pdftexcmds Info: \pdf@primitive is available.
|
150
|
+
Package pdftexcmds Info: \pdf@ifprimitive is available.
|
151
|
+
Package pdftexcmds Info: \pdfdraftmode found.
|
152
|
+
))
|
153
|
+
(C:\Program Files\MiKTeX\tex/latex/hycolor\hycolor.sty
|
154
|
+
Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO)
|
155
|
+
)
|
156
|
+
(C:\Program Files\MiKTeX\tex/latex/letltxmacro\letltxmacro.sty
|
157
|
+
Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO)
|
158
|
+
)
|
159
|
+
(C:\Program Files\MiKTeX\tex/latex/auxhook\auxhook.sty
|
160
|
+
Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO)
|
161
|
+
)
|
162
|
+
(C:\Program Files\MiKTeX\tex/latex/hyperref\nameref.sty
|
163
|
+
Package: nameref 2023-11-26 v2.56 Cross-referencing by name of section
|
164
|
+
|
165
|
+
(C:\Program Files\MiKTeX\tex/latex/refcount\refcount.sty
|
166
|
+
Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO)
|
167
|
+
)
|
168
|
+
(C:\Program Files\MiKTeX\tex/generic/gettitlestring\gettitlestring.sty
|
169
|
+
Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO)
|
170
|
+
|
171
|
+
(C:\Program Files\MiKTeX\tex/latex/kvoptions\kvoptions.sty
|
172
|
+
Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO)
|
173
|
+
))
|
174
|
+
\c@section@level=\count271
|
175
|
+
)
|
176
|
+
(C:\Program Files\MiKTeX\tex/latex/etoolbox\etoolbox.sty
|
177
|
+
Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW)
|
178
|
+
\etb@tempcnta=\count272
|
179
|
+
)
|
180
|
+
\@linkdim=\dimen153
|
181
|
+
\Hy@linkcounter=\count273
|
182
|
+
\Hy@pagecounter=\count274
|
183
|
+
|
184
|
+
(C:\Program Files\MiKTeX\tex/latex/hyperref\pd1enc.def
|
185
|
+
File: pd1enc.def 2023-11-26 v7.01g Hyperref: PDFDocEncoding definition (HO)
|
186
|
+
Now handling font encoding PD1 ...
|
187
|
+
... no UTF-8 mapping file for font encoding PD1
|
188
|
+
)
|
189
|
+
(C:\Program Files\MiKTeX\tex/generic/intcalc\intcalc.sty
|
190
|
+
Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO)
|
191
|
+
)
|
192
|
+
\Hy@SavedSpaceFactor=\count275
|
193
|
+
|
194
|
+
(C:\Program Files\MiKTeX\tex/latex/hyperref\puenc.def
|
195
|
+
File: puenc.def 2023-11-26 v7.01g Hyperref: PDF Unicode definition (HO)
|
196
|
+
Now handling font encoding PU ...
|
197
|
+
... no UTF-8 mapping file for font encoding PU
|
198
|
+
)
|
199
|
+
Package hyperref Info: Hyper figures OFF on input line 4181.
|
200
|
+
Package hyperref Info: Link nesting OFF on input line 4186.
|
201
|
+
Package hyperref Info: Hyper index ON on input line 4189.
|
202
|
+
Package hyperref Info: Plain pages OFF on input line 4196.
|
203
|
+
Package hyperref Info: Backreferencing OFF on input line 4201.
|
204
|
+
Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
|
205
|
+
Package hyperref Info: Bookmarks ON on input line 4448.
|
206
|
+
\c@Hy@tempcnt=\count276
|
207
|
+
|
208
|
+
(C:\Program Files\MiKTeX\tex/latex/url\url.sty
|
209
|
+
\Urlmuskip=\muskip16
|
210
|
+
Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
|
211
|
+
)
|
212
|
+
LaTeX Info: Redefining \url on input line 4786.
|
213
|
+
\XeTeXLinkMargin=\dimen154
|
214
|
+
|
215
|
+
(C:\Program Files\MiKTeX\tex/generic/bitset\bitset.sty
|
216
|
+
Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO)
|
217
|
+
|
218
|
+
(C:\Program Files\MiKTeX\tex/generic/bigintcalc\bigintcalc.sty
|
219
|
+
Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO
|
220
|
+
)
|
221
|
+
))
|
222
|
+
\Fld@menulength=\count277
|
223
|
+
\Field@Width=\dimen155
|
224
|
+
\Fld@charsize=\dimen156
|
225
|
+
Package hyperref Info: Hyper figures OFF on input line 6065.
|
226
|
+
Package hyperref Info: Link nesting OFF on input line 6070.
|
227
|
+
Package hyperref Info: Hyper index ON on input line 6073.
|
228
|
+
Package hyperref Info: backreferencing OFF on input line 6080.
|
229
|
+
Package hyperref Info: Link coloring OFF on input line 6085.
|
230
|
+
Package hyperref Info: Link coloring with OCG OFF on input line 6090.
|
231
|
+
Package hyperref Info: PDF/A mode OFF on input line 6095.
|
232
|
+
|
233
|
+
(C:\Program Files\MiKTeX\tex/latex/base\atbegshi-ltx.sty
|
234
|
+
Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi
|
235
|
+
package with kernel methods
|
236
|
+
)
|
237
|
+
\Hy@abspage=\count278
|
238
|
+
\c@Item=\count279
|
239
|
+
\c@Hfootnote=\count280
|
240
|
+
)
|
241
|
+
Package hyperref Info: Driver (autodetected): hpdftex.
|
242
|
+
|
243
|
+
(C:\Program Files\MiKTeX\tex/latex/hyperref\hpdftex.def
|
244
|
+
File: hpdftex.def 2023-11-26 v7.01g Hyperref driver for pdfTeX
|
245
|
+
|
246
|
+
(C:\Program Files\MiKTeX\tex/latex/base\atveryend-ltx.sty
|
247
|
+
Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend pac
|
248
|
+
kage
|
249
|
+
with kernel methods
|
250
|
+
)
|
251
|
+
\Fld@listcount=\count281
|
252
|
+
\c@bookmark@seq@number=\count282
|
253
|
+
|
254
|
+
(C:\Program Files\MiKTeX\tex/latex/rerunfilecheck\rerunfilecheck.sty
|
255
|
+
Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO)
|
256
|
+
|
257
|
+
(C:\Program Files\MiKTeX\tex/generic/uniquecounter\uniquecounter.sty
|
258
|
+
Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO)
|
259
|
+
)
|
260
|
+
Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2
|
261
|
+
85.
|
262
|
+
)
|
263
|
+
\Hy@SectionHShift=\skip64
|
264
|
+
)
|
265
|
+
Package hyperref Info: Option `colorlinks' set `true' on input line 13.
|
266
|
+
|
267
|
+
(C:\Program Files\MiKTeX\tex/latex/l3backend\l3backend-pdftex.def
|
268
|
+
File: l3backend-pdftex.def 2024-01-04 L3 backend support: PDF output (pdfTeX)
|
269
|
+
\l__color_backend_stack_int=\count283
|
270
|
+
\l__pdf_internal_box=\box51
|
271
|
+
)
|
272
|
+
(rapport_pfe.aux)
|
273
|
+
\openout1 = `rapport_pfe.aux'.
|
274
|
+
|
275
|
+
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 25.
|
276
|
+
LaTeX Font Info: ... okay on input line 25.
|
277
|
+
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 25.
|
278
|
+
LaTeX Font Info: ... okay on input line 25.
|
279
|
+
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 25.
|
280
|
+
LaTeX Font Info: ... okay on input line 25.
|
281
|
+
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 25.
|
282
|
+
LaTeX Font Info: ... okay on input line 25.
|
283
|
+
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 25.
|
284
|
+
LaTeX Font Info: ... okay on input line 25.
|
285
|
+
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 25.
|
286
|
+
LaTeX Font Info: ... okay on input line 25.
|
287
|
+
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 25.
|
288
|
+
LaTeX Font Info: ... okay on input line 25.
|
289
|
+
LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 25.
|
290
|
+
LaTeX Font Info: ... okay on input line 25.
|
291
|
+
LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 25.
|
292
|
+
LaTeX Font Info: ... okay on input line 25.
|
293
|
+
LaTeX Info: Redefining \degres on input line 25.
|
294
|
+
LaTeX Info: Redefining \up on input line 25.
|
295
|
+
|
296
|
+
|
297
|
+
Package french.ldf Warning: OT1 encoding should not be used for French.
|
298
|
+
(french.ldf) Add \usepackage[T1]{fontenc} to the preamble
|
299
|
+
(french.ldf) of your document; reported on input line 25.
|
300
|
+
|
301
|
+
(C:\Program Files\MiKTeX\tex/context/base/mkii\supp-pdf.mkii
|
302
|
+
[Loading MPS to PDF converter (version 2006.09.02).]
|
303
|
+
\scratchcounter=\count284
|
304
|
+
\scratchdimen=\dimen157
|
305
|
+
\scratchbox=\box52
|
306
|
+
\nofMPsegments=\count285
|
307
|
+
\nofMParguments=\count286
|
308
|
+
\everyMPshowfont=\toks22
|
309
|
+
\MPscratchCnt=\count287
|
310
|
+
\MPscratchDim=\dimen158
|
311
|
+
\MPnumerator=\count288
|
312
|
+
\makeMPintoPDFobject=\count289
|
313
|
+
\everyMPtoPDFconversion=\toks23
|
314
|
+
) (C:\Program Files\MiKTeX\tex/latex/epstopdf-pkg\epstopdf-base.sty
|
315
|
+
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
|
316
|
+
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
|
317
|
+
85.
|
318
|
+
|
319
|
+
(C:\Program Files\MiKTeX\tex/latex/00miktex\epstopdf-sys.cfg
|
320
|
+
File: epstopdf-sys.cfg 2021/03/18 v2.0 Configuration of epstopdf for MiKTeX
|
321
|
+
))
|
322
|
+
(C:\Program Files\MiKTeX\tex/latex/graphics\color.sty
|
323
|
+
Package: color 2022/01/06 v1.3d Standard LaTeX Color (DPC)
|
324
|
+
|
325
|
+
(C:\Program Files\MiKTeX\tex/latex/graphics-cfg\color.cfg
|
326
|
+
File: color.cfg 2016/01/02 v1.6 sample color configuration
|
327
|
+
)
|
328
|
+
Package color Info: Driver file: pdftex.def on input line 149.
|
329
|
+
|
330
|
+
(C:\Program Files\MiKTeX\tex/latex/graphics\mathcolor.ltx))
|
331
|
+
Package hyperref Info: Link coloring ON on input line 25.
|
332
|
+
(rapport_pfe.out)
|
333
|
+
(rapport_pfe.out)
|
334
|
+
\@outlinefile=\write3
|
335
|
+
\openout3 = `rapport_pfe.out'.
|
336
|
+
|
337
|
+
LaTeX Font Info: External font `cmex10' loaded for size
|
338
|
+
(Font) <14.4> on input line 28.
|
339
|
+
LaTeX Font Info: External font `cmex10' loaded for size
|
340
|
+
(Font) <7> on input line 28.
|
341
|
+
[1
|
342
|
+
|
343
|
+
{C:/Users/hamro/AppData/Local/MiKTeX/fonts/map/pdftex/pdftex.map}] (rapport_pfe
|
344
|
+
.toc
|
345
|
+
LaTeX Font Info: External font `cmex10' loaded for size
|
346
|
+
(Font) <12> on input line 3.
|
347
|
+
LaTeX Font Info: External font `cmex10' loaded for size
|
348
|
+
(Font) <8> on input line 3.
|
349
|
+
LaTeX Font Info: External font `cmex10' loaded for size
|
350
|
+
(Font) <6> on input line 3.
|
351
|
+
)
|
352
|
+
\tf@toc=\write4
|
353
|
+
\openout4 = `rapport_pfe.toc'.
|
354
|
+
|
355
|
+
|
356
|
+
pdfTeX warning (ext4): destination with the same identifier (name{page.1}) has
|
357
|
+
been already used, duplicate ignored
|
358
|
+
<to be read again>
|
359
|
+
\relax
|
360
|
+
l.29 \newpage
|
361
|
+
[1
|
362
|
+
|
363
|
+
]
|
364
|
+
Chapitre 1.
|
365
|
+
[2
|
366
|
+
|
367
|
+
]
|
368
|
+
|
369
|
+
Package fancyhdr Warning: \headheight is too small (12.0pt):
|
370
|
+
(fancyhdr) Make it at least 15.71667pt, for example:
|
371
|
+
(fancyhdr) \setlength{\headheight}{15.71667pt}.
|
372
|
+
(fancyhdr) You might also make \topmargin smaller:
|
373
|
+
(fancyhdr) \addtolength{\topmargin}{-3.71667pt}.
|
374
|
+
|
375
|
+
[3] (rapport_pfe.aux)
|
376
|
+
***********
|
377
|
+
LaTeX2e <2023-11-01> patch level 1
|
378
|
+
L3 programming layer <2024-01-04>
|
379
|
+
***********
|
380
|
+
Package rerunfilecheck Info: File `rapport_pfe.out' has not changed.
|
381
|
+
(rerunfilecheck) Checksum: 3EE8BAE7C5596D6C97ACEA2FBAB7472C;1532.
|
382
|
+
)
|
383
|
+
Here is how much of TeX's memory you used:
|
384
|
+
10770 strings out of 474486
|
385
|
+
174935 string characters out of 5753571
|
386
|
+
1930542 words of memory out of 5000000
|
387
|
+
32928 multiletter control sequences out of 15000+600000
|
388
|
+
563843 words of font info for 55 fonts, out of 8000000 for 9000
|
389
|
+
1141 hyphenation exceptions out of 8191
|
390
|
+
75i,12n,79p,274b,475s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
391
|
+
<C:/Program Files/MiKTeX/fonts/type1/public/amsfonts/cm/cmbx12.pfb><C:/Progra
|
392
|
+
m Files/MiKTeX/fonts/type1/public/amsfonts/cm/cmr12.pfb><C:/Program Files/MiKTe
|
393
|
+
X/fonts/type1/public/amsfonts/cm/cmr17.pfb>
|
394
|
+
Output written on rapport_pfe.pdf (4 pages, 59939 bytes).
|
395
|
+
PDF statistics:
|
396
|
+
95 PDF objects out of 1000 (max. 8388607)
|
397
|
+
18 named destinations out of 1000 (max. 500000)
|
398
|
+
81 words of extra memory for PDF output out of 10000 (max. 10000000)
|
399
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
\BOOKMARK [0][-]{chapter.1}{\376\377\000\311\000T\000U\000D\000E\000\040\000P\000R\000E\000A\000L\000A\000B\000L\000E}{}% 1
|
2
|
+
\BOOKMARK [1][-]{section.1.1}{\376\377\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n}{chapter.1}% 2
|
3
|
+
\BOOKMARK [1][-]{section.1.2}{\376\377\000O\000r\000g\000a\000n\000i\000s\000m\000e\000\040\000d\000'\000a\000c\000c\000u\000e\000i\000l}{chapter.1}% 3
|
4
|
+
\BOOKMARK [1][-]{section.1.3}{\376\377\000\311\000t\000u\000d\000e\000\040\000e\000t\000\040\000c\000r\000i\000t\000i\000q\000u\000e\000\040\000d\000e\000\040\000l\000'\000e\000x\000i\000s\000t\000a\000n\000t}{chapter.1}% 4
|
5
|
+
\BOOKMARK [2][-]{subsection.1.3.1}{\376\377\000C\000r\000i\000t\000i\000q\000u\000e\000\040\000d\000e\000\040\000l\000'\000e\000x\000i\000s\000t\000a\000n\000t}{section.1.3}% 5
|
6
|
+
\BOOKMARK [2][-]{subsection.1.3.2}{\376\377\000S\000o\000l\000u\000t\000i\000o\000n\000\040\000p\000r\000o\000p\000o\000s\000\351\000e}{section.1.3}% 6
|
7
|
+
\BOOKMARK [1][-]{section.1.4}{\376\377\000C\000h\000o\000i\000x\000\040\000m\000\351\000t\000h\000o\000d\000o\000l\000o\000g\000i\000q\000u\000e}{chapter.1}% 7
|
8
|
+
\BOOKMARK [2][-]{subsection.1.4.1}{\376\377\000F\000o\000r\000m\000a\000l\000i\000s\000m\000e\000\040\000d\000e\000\040\000m\000o\000d\000\351\000l\000i\000s\000a\000t\000i\000o\000n}{section.1.4}% 8
|
9
|
+
\BOOKMARK [2][-]{subsection.1.4.2}{\376\377\000M\000\351\000t\000h\000o\000d\000o\000l\000o\000g\000i\000e}{section.1.4}% 9
|
10
|
+
\BOOKMARK [1][-]{section.1.5}{\376\377\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n}{chapter.1}% 10
|
Binary file
|
@@ -0,0 +1,68 @@
|
|
1
|
+
\documentclass[12pt,a4paper]{report}
|
2
|
+
\usepackage[utf8]{inputenc}
|
3
|
+
\usepackage[french]{babel}
|
4
|
+
\usepackage{graphicx}
|
5
|
+
\usepackage{fancyhdr}
|
6
|
+
\usepackage{hyperref}
|
7
|
+
|
8
|
+
\hypersetup{
|
9
|
+
colorlinks=true,
|
10
|
+
linkcolor=blue,
|
11
|
+
filecolor=magenta,
|
12
|
+
urlcolor=cyan,
|
13
|
+
}
|
14
|
+
|
15
|
+
\pagestyle{fancy}
|
16
|
+
\fancyhf{}
|
17
|
+
\rhead{Projet de Fin d'Études}
|
18
|
+
\lhead{Rapport de Stage}
|
19
|
+
\rfoot{Page \thepage}
|
20
|
+
|
21
|
+
\title{Rapport de Projet de Fin d'Études}
|
22
|
+
\author{Votre Nom}
|
23
|
+
\date{\today}
|
24
|
+
|
25
|
+
\begin{document}
|
26
|
+
|
27
|
+
\maketitle
|
28
|
+
\tableofcontents
|
29
|
+
\newpage
|
30
|
+
|
31
|
+
\chapter{ÉTUDE PREALABLE}
|
32
|
+
|
33
|
+
\section{Introduction}
|
34
|
+
Cette section présente une introduction générale au projet, incluant le contexte, les objectifs et la problématique abordée dans ce projet de fin d'études.
|
35
|
+
|
36
|
+
\section{Organisme d'accueil}
|
37
|
+
Cette section décrit l'organisme d'accueil où s'est déroulé le stage, incluant sa présentation, ses activités principales et sa structure organisationnelle.
|
38
|
+
|
39
|
+
\section{Étude et critique de l'existant}
|
40
|
+
Cette section analyse la situation actuelle avant l'implémentation du projet.
|
41
|
+
|
42
|
+
\subsection{Critique de l'existant}
|
43
|
+
Cette partie détaille les limitations, problèmes et défis identifiés dans le système existant qui ont motivé le développement d'une nouvelle solution.
|
44
|
+
|
45
|
+
\subsection{Solution proposée}
|
46
|
+
Cette partie présente la solution proposée pour résoudre les problèmes identifiés, en décrivant ses principales caractéristiques et avantages.
|
47
|
+
|
48
|
+
\section{Choix méthodologique}
|
49
|
+
|
50
|
+
\subsection{Formalisme de modélisation}
|
51
|
+
Cette section détaille les formalismes de modélisation utilisés pour concevoir et représenter la solution.
|
52
|
+
|
53
|
+
\subsection{Méthodologie}
|
54
|
+
Cette partie décrit l'approche méthodologique adoptée pour la réalisation du projet.
|
55
|
+
|
56
|
+
\subsubsection{Présentation de la méthode SCRUM}
|
57
|
+
Cette partie introduit la méthode SCRUM, ses principes fondamentaux et ses avantages dans le contexte du développement logiciel.
|
58
|
+
|
59
|
+
\subsubsection{La répartition des rôles dans la méthode SCRUM}
|
60
|
+
Cette section explique les différents rôles dans la méthode SCRUM (Product Owner, Scrum Master, équipe de développement) et leurs responsabilités.
|
61
|
+
|
62
|
+
\subsubsection{Le processus de SCRUM}
|
63
|
+
Cette partie détaille le processus SCRUM avec ses différentes cérémonies (Sprint Planning, Daily Scrum, Sprint Review, Sprint Retrospective) et artefacts (Product Backlog, Sprint Backlog, Increment).
|
64
|
+
|
65
|
+
\section{Conclusion}
|
66
|
+
Cette section résume les points clés abordés dans ce chapitre et fait la transition vers le chapitre suivant.
|
67
|
+
|
68
|
+
\end{document}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
\babel@toc {french}{}\relax
|
2
|
+
\contentsline {chapter}{\numberline {1}ÉTUDE PREALABLE}{2}{chapter.1}%
|
3
|
+
\contentsline {section}{\numberline {1.1}Introduction}{2}{section.1.1}%
|
4
|
+
\contentsline {section}{\numberline {1.2}Organisme d'accueil}{2}{section.1.2}%
|
5
|
+
\contentsline {section}{\numberline {1.3}Étude et critique de l'existant}{2}{section.1.3}%
|
6
|
+
\contentsline {subsection}{\numberline {1.3.1}Critique de l'existant}{2}{subsection.1.3.1}%
|
7
|
+
\contentsline {subsection}{\numberline {1.3.2}Solution proposée}{2}{subsection.1.3.2}%
|
8
|
+
\contentsline {section}{\numberline {1.4}Choix méthodologique}{3}{section.1.4}%
|
9
|
+
\contentsline {subsection}{\numberline {1.4.1}Formalisme de modélisation}{3}{subsection.1.4.1}%
|
10
|
+
\contentsline {subsection}{\numberline {1.4.2}Méthodologie}{3}{subsection.1.4.2}%
|
11
|
+
\contentsline {subsubsection}{Présentation de la méthode SCRUM}{3}{section*.2}%
|
12
|
+
\contentsline {subsubsection}{La répartition des rôles dans la méthode SCRUM}{3}{section*.3}%
|
13
|
+
\contentsline {subsubsection}{Le processus de SCRUM}{3}{section*.4}%
|
14
|
+
\contentsline {section}{\numberline {1.5}Conclusion}{3}{section.1.5}%
|